Оторвитесь от компьютера, сделайте гимнастику для глаз

  1. Резко поднимите глаза вверх, опустите вниз, посмотрите направо и налево. Повторите 7–10 раз.
  2. Закройте глаза, положите на веки подушечки указательного, среднего и безымянного пальцев, слегка надавите. Очень осторожно и мягко круговыми движениями массируйте глазные яблоки сначала по часовой стрелке, а затем – в другую сторону.
  3. Расположите пальцы так же, как и в предыдущем упражнении. Делайте круговые движения глазами, преодолевая сопротивление рук. Сделайте 9 кругов в одну сторону и 9 — в другую.
  4. Представьте себе очень большой обруч. Обведите его глазами справа налево. То же самое сделайте в другом направлении. Выполняя упражнение, не двигайте головой, вращайте только глазами. Повторите 5–7 раз.
  5. Встаньте, смотрите только вперед на какой-либо предмет. Поверните голову направо, затем налево не отводя взгляда.. Повторите 8–10 раз в каждую сторону.
  6. Встаньте, смотрите только вперед на какой-либо предмет. Поднимите, затем опустите голову, не отводя взгляда. Повторите 10 раз.

Read the rest of this entry »

Manufacturing flic.kr style photo URLs

Super quick note, hopefully sufficient info.

The format for the short photo URLs is:

flic.kr/p/{short-photo-id}

A short photo id is a base58 conversion of the photo id. Base58 is like base62 [0-9a-zA-Z] with some characters removed to make it less confusing when printed. (namely 0, O, I, and l).

So that leaves an alphabet of: 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ

I’m including below a variation of the code we use to do base conversion. Note it doesn’t use modulus because PHP’s modulus operator overflows for large numbers (like photo ids)

function base_encode($num, $alphabet) {
	$base_count = strlen($alphabet);
	$encoded = '';

	while ($num >= $base_count) {
		$div = $num/$base_count;
		$mod = ($num-($base_count*intval($div)));
		$encoded = $alphabet[$mod] . $encoded;
		$num = intval($div);
	}

	if ($num) $encoded = $alphabet[$num] . $encoded;

	return $encoded;
}

function base_decode($num, $alphabet) {
	$decoded = 0;
	$multi = 1;

	while (strlen($num) > 0) {
		$digit = $num[strlen($num)-1];
		$decoded += $multi * strpos($alphabet, $digit);
		$multi = $multi * strlen($alphabet);
		$num = substr($num, 0, -1);
	}

	return $decoded;
}

grabbed from http://www.flickr.com/groups/api/discuss/72157616713786392/

10 бесплатных Primary и Seconadary DNS серверов

DNS (англ. Domain Name System — система доменных имён) — распределённая система преобразования имени хоста (компьютера или другого сетевого устройства) в IP адрес. DNS работает в сетях TCP/IP. Как частный случай, DNS может хранить и обрабатывать и обратные запросы, определения имени хоста по его IP. wikipedia.org

Поскольку за обслуживание ваших доменных зон соответствующие сервисы просят порядка 10-15 $ в год, что конечно не есть много, НО … я поделюсь списком из “10ти Free DNS”, т.е. совершенно бесплатных DNS серверов.

Primary DNS
http://zoneedit.com/
http://editdns.org/
http://dollardns.net/
http://xname.org/
http://freedns.afraid.org/
http://primaryns.kiev.ua
http://www.everydns.net/
http://www.dyndns.com/
Secondary DNS
http://secondary.net.ua/
http://ns2.trifle.net/

От себя добавлю, что довольно длительное время использую ZoneEdit и Xname. Проблем с ними не имел, на ZoneEdit имеется ограничение на 5 зонаккаунт Xname же позволяет создать как Primary и Seconadary DNS.

Ну и конечно же
http://primaryns.kiev.ua
http://secondary.net.ua/

silverlight.msi file is missing

The easiest way to remove software for which the original source msi is not available is to use the MSI cleanup utility. The download is about halfway down the page:

http://support.microsoft.com/kb/290301

Украинские Базы Данных

Первая ссылка
Вторая ссылка
Телефонные БД городов: Владимир-Волынский; Днепродзержинск; Днепропетровск; Донецк; Житомир; Запорожье; Золотоноша; Измаил; Киев; Киев (орг); Киев (таксофоны); Киевская область; Луганск; Луцк; Львов; Мариуполь; Николаев; Никополь; Полтава; Ровно; Сумы; Харьков; Херсон; Чернигов.
Телефонные БД городов: Киев, Запорожье, Львов, Черновцы
Днепропетровск
Донецк
Бердичев
Донецкий справочник (также Фарлеп и Велтон) + база предприятий
Львов (Укртелеком — Только квартирные телефоны ~ 2002 год)
Запорожье
Одесса
Киев (Укртелеком)
Киев
Кировоград — Телефонная БД, Телефоны Кировограда
Телефонный справочник городов Крыма
Нововолинськ 09 (Волинська область)
Фастов (и район)
Хмельницкий — Телефонный справочник города.
Почтовые индексы Украины
Жители Украины

Почему Singleton антипаттерн

«главная проблема синглтона в том, что это первый паттерн описанный в GoF» (c) MaximVK. На него набрасываются и не замечают его недостатков, из коих:

1. Синглтон нарушает SRP (Single Responsibility Principle) — класс синглтона, помимо того чтобы выполнять свои непосредственные обязанности, занимается еще и контролированием количества своих экземпляров.
2. Глобальное состояние. Про вред глобальных переменных вроде бы уже все знают, но тут та же самая проблема. Когда мы получаем доступ к экземпляру класса, мы не знаем текущее состояние этого класса, и кто и когда его менял, и это состояние может быть вовсе не таким, как ожидается. Иными словами, корректность работы с синглтоном зависит от порядка обращений к нему, что вызывает неявную зависимость подсистем друг от друга и, как следствие, серьезно усложняет разработку.
3. Зависимость обычного класса от синглтона не видна в публичном контракте класса. Так как обычно экземпляр синглтона не передается в параметрах метода, а получается напрямую, через GetInstance(), то для выявления зависимости класса от синглтона надо залезть в тело каждого метода — просто просмотреть публичный контракт объекта недостаточно.
4. Наличие синглтона понижает тестируемость приложения в целом и классов, которые используют синглтон, в частности. Во-первых, вместо синглтона нельзя подпихнуть Mock-объект, а во-вторых, если синглтон имеет интерфейс для изменения своего состояния, то тесты начинают зависеть друг от друга.
Говоря же проще — синглтон повышает связность, и все вышеперечисленное, в том или ином виде, есть следствие повышения связности.

Естественно, можно акккуратненько пройти по граблям и использовать синглетон, но (цитата из доки к пикоконтейнеру) «Overuse makes for bad solutions. At the enterprise level, it makes for very very bad solutions»…
Тем более, что при тщательном рассмотрении вопроса, использования синглтона, как правило, можно легко избежать. А если можно легко избежать, значит это нужно сделать, чтобы удержать себя от излишнего соблазна «оверюза»… Например, для контроля количества экземпляров объекта вполне можно (и нужно) использовать различного рода фабрики.
Наибольшая же опасность, как было сказано, подстерегает при попытке построить на основе сиглтонов всю архитектуру приложения, такому подходу существует масса замечательных альтернатив. Например, IoC контейнеры — там проблема контроля создания сервисов решается естественным образом, так как они, по сути, являются «фабриками на стероидах» =). Другой альтернативой являются Service Locator-ы, из известных вариантов этого подхода — паттерн IServiceProvider.

Уроки английского: Логика английских времен

Изучавшие или изучающие английский язык знают, каким страшным может казаться множество английских временных форм глаголов.
Всего в английском 12 временных форм. А в русском-то, на первый взгляд, всего 3, и как их связать с английскими, для новичка может быть совершенно не понятно.

Но на самом-то деле, в русском их не 3. Смотрите:

* делал
* сделал
* делаю
* сделаю
* буду делать

или даже так:

* ходил
* сходил
* шел
* хожу
* иду
* схожу
* буду ходить
* буду идти

(Представляю себе иностранца, который пытается разобраться, чем отличаются эти формы.)

Просто в русском языке эти варианты разбросаны по нескольким классификациям, а в английском объединены в одной.

Но что если я скажу, что в английском языке на самом деле всего три временных формы, а все остальные так называемые «времена» надуманы? Так, вот, я говорю это :)

Вот эти три формы:

1. The Present Indefinite (Simple) — простое настоящее время: <глагол в 1-й форме>[+es];
2. The Past Indefinite (Simple) — простое прошедшее время: глагол во 2-й форме (<глагол в 1-й форме>+ed, у неправильных глаголов свой вариант);
3. The Future Indefinite (Simple) — простое будущее время: will + <глагол в 1-й форме>.

Это все :) Не верите? Попробую вас убедить. Сейчас будем строить все остальные временные формы исходя исключительно из этих.

Нужно только иметь ввиду следующее:

1. У глагола to be эти 3 временные формы выглядят так:
* is/am/are — настоящее время;
* was/were — прошедшее время;
* will be — будещее время.

2. У глагола to have так:
* have/has — настоящее время;
* had — прошедшее время;
* will have — будущее время (тут ничего необычного);

И давайте условимся, что глагол этот означает иметь, а не носит некий вспомогательный характер.

3. Инговая форма глагола (<глагол в 1-й форме>+ing) — это не глагол, а активное определение.
* writing author — пишущий автор;
* reading man — читающий человек.

или
* He is speaking. — Он — говорящий (выполняющий говорение).
* They are running. — Они — бегущие.

Это характеристика состояния. Субъект характеризуется как выполняющий сам некоторое действие, точнее, находящийся в состоянии «делания» этого действия.

4. 3-я форма глагола (та, которая образуется как <глагол в 1-й форме>+ed, а для неправильных глаголов имеется свой вариант) — это также не глагол. Это пассивное определение.
* written letter — написанное письмо;
* read book — прочитанная книга (у глагола read все формы при написании одинаковые)

или
* It is broken. — Это сломано.
* She is dressed. — Она одета (Ее одели).

Субъект характеризуется действием, выполняющимся над ним.

Итак, поехали.

1. The Present Indefinite Tense

He loves her.

Это и есть та самая обычная форма настоящего времени, которая упоминалась выше.
Тут больше нечего сказать.

2. The Present Continuous Tense

The man is reading.

И так, как и обещал, времен кроме прошедшего, настоящего и будущего не будет.
А одно настоящее уже было. Другого нам не надо.
is — это форма глагола to be в настоящем времени,
reading — активное определение.

Т. е. это все то же «Present Indefinite», да простят меня преподаватели английского :) Но ведь по сути так и есть. Когда употребляется Present Indefinite? Одно из применений — констатация факта, типа «I have a car». Здесь мы как раз и имеем констатацию факта:

The man IS reading.
Человек ЯВЛЯЕТСЯ читающим.

И не обязательно речь идет именно про текущий момент. «I’m loving you», как поет солист Scorpions, не означает обязательно, что он прямо сейчас ее любит :) . Это выражение описывает состояние, в котором пребывает влюбленный человек в текущий период жизни, так скажем.

3. The Past Indefinite Tense

I bought a car.

Самое обычное прошедшее время. Что-то когда-то случилось, и мы называем, действие, которое произошло, констатируем факт.

4. The Present Perfect Tense

I have bought a car.

Что мы видим тут:
— bought – это 3-я форма глагола to buy, что, как мы знаем, является пассивным определением, т. е. тут речь про купленную машину.
— have – это иметь и ничего более; не будем называть это вспомогательным глаголом.
Получаем: Я имею купленную машину.

Не даром, у англичан это настоящее время (Present Perfect), хоть и переводить на русский следует в прошедшем (Я купил машину). Глагол have-то у нас тут в простом настоящем времени. Это снова Present Indefinite.
Все просто: раз я купил машину, значит она у меня сейчас есть (купленная).

Еще пример: I have lost my ticket.
Я имею потерянный билет.

Дословный перевод конечно же некрасив, но он выявляет логику образования фразы. Я билет потерял, а значит, на данный момент он потерян.
Как можно иметь потерянный билет? Также как иметь отсутствие денег во фразе: I have no money.

5. The Past Perfect Tense

Сразу попробуем ту же логику в более сложной форме. В форме, в которой я в начале своего пути изучения английского языка долго не мог разобраться, когда же ее употреблять.

I had bought a car.

Уже третье Я купил машину. Но, имеем глагол to have в обычной прошедшей форме (Past Indefinite), что говорит нам о том, что машину я имел когда-то, и сейчас у меня ее может и нет (Я имел купленную машину). Важно понимать вот это «когда-то». Переносим свое «сейчас» в прошлое, и как бы говорим, что на тот момент у нас была купленная машина.
Скажем, вы рассказываете кому-то про эпизод из своей жизни, который произошел прошлым летом, и хотите сказать, что в то время у вас была машина (вы ее до этого купили). Отличие I had bought a car (1) от I bought a car (2) в том, что когда мы говорим (2), мы подчеркиваем факт покупки машины (произошло некое действие), когда (1) – факт ее наличия в прошлом.

I had lost my ticket. — Я имел потерянный билет.
Например, сейчас я мог его уже найти, но в тот момент, про который я рассказываю, билет был потерян.

6. The Past Continuous Tense

I was doing my homework at 3 pm yesterday.

Форма ничем не отличается от Present Continuous Tense (2-й пункт), за исключением того, что состояние описывается в прошлом. Причем, как видим, глагол to be имеет форму Past Indefinite.

7. The Present Perfect Continuous Tense

Пошли более хардкорные случаи.

I have been doing this for 3 hours.

Это обычное настоящее время, т. е. Present Indefinite (смотрим на глагол to have).
Все остальное НЕ глаголы (мы так условились в начале):
— doing – активное определение, т. е. делающий;
— been – 3-я форма to be, а значит пассивное определение, которое относится к слову doing. Не передать это на русском языке. Попробуем понять смысл этого слова по аналогии:
done – сделанный;
bought – купленный;
been — … (в общем сделали так, чтобы он был; наверное тут подходит слово «созданный»)

Итак, почти дословно: Я имею созданное состояние делания.

Т. е. состояние делающего было создано (been), и сейчас это созданное состояние имеется в наличии.
Когда мы можем использовать эту логику при описании наших действий? Когда мы что-то начали делать в прошлом, и на данный момент продолжаем это делать, верно?

8. The Past Perfect Continuous Tense

I had been doing this for 3 hours.

Конечно же, глагол to have можно поставить в прошедшем времени (Past Indefinite).

Не заглядывая ни в какие справочники, изобилующие запутывающими описаниями, в каких случаях нужно употреблять это время, мы понимаем, что это меняет лишь то, что речь будет не о наличии состояния в настоящем, а о наличии его в прошлом: состояние началось когда-то и продолжается на тот момент в прошлом, про который мы рассказываем (началось оно конечно же до этого момента).

9. The Future Indefinite Tense

I will buy a car.

Проще некуда. Констатируем факт действия в будущем. Точно также как мы можем констатировать его в настоящем (Present Indefinite) и прошлом (Past Indefinite).

10. The Future Continuous Tense

He will be calling you tomorrow at 5.

Также просто: описание состояния в определенный момент в будущем.
Глагол to be имеет форму Furure Indefinite, а calling – просто определение (звонящий).

11. The Future Perfect Tense

I will have bought a car.
Я буду иметь купленную машину.

Акцентируем внимание на том, что машина будет иметься в наличии, а не на самой покупке как таковой.
Более живой пример: Я куплю машину к следующему лету.

12. The Future Perfect Continuous

I will have been doing this for 3 hours.

Полная аналогия Present Perfect Continuous или Past Perfect Continuous, за исключением временной формы глагола to have.
Все же приведу дословный перевод: Я буду иметь созданное состояние делания 3 часа.
Например, я собираюсь сказать, что завтра буду учить английский уже в течении 3 часов, к тому моменту, когда придет моя жена:
I will have been studying English for 3 hours when my wife comes.
(Честно говоря, могу ошибаться в правильности составления этого предложения, но суть не в этом.)

И так, что же получилось. Абсолютно все 12 английских времен сводятся к трем: Present Indefinite, Past Indefinite и Future Indefinite!
Вот и получается, что в английском только три временных формы по сути существует. По крайней мере, на мой взгляд, так можно и полезно думать. Эх, почему ж мне еще в школе об этом не рассказали…

P.S. Конечно, я понимаю, что это все достаточно грубо, и про каждую временную форму можно еще наговорить кучу тонкостей ее употребления. Но чтобы вникать в тонкости, нужно для начала уяснить для себя логику построения этих форм. А уж понимание тонкостей придет либо с практикой, либо с еще большим углублением в английскую логику построения фраз.

UPDATE:
Повторюсь, в этой статье специально допущены огрубления и упрощения некоторых моментов для облегчения выявления «внутренностей» языка.

Telnet — POP Commands (retrieving mail using telnet)

In order to access your mailbox you will need 4 things:

  • An active internet connection (an embarrasing stage to miss sometimes!)
  • The address of your pop mail server (e.g. mail.domain.ext)
  • Your username (e.g. userName)
  • Your password (e.g. passW0rd)

The first thing to do is to open a connection from your computer to your mail server.

telnet	mail.domain.ext 110
You should receive a reply like:
Trying ???.???.???.???...
Connected to mail.domain.ext.
Escape character is '^]'.
+OK ready

Then log in:

USER userName
This should give you:
+OK Password required for userName.

Now give your password:

PASS passW0rd
Should yeild:
+OK userName has ? visible messages (? hidden) in ????? octets.

To see a list of your emails awaiting collection use the LIST command, this will also show you the id number of your messages (e.g. 1 or 2 etc.)
To view the contents of an email type RETR + the id number of the message (e.g RETR 1).
To delete a message use DELE + the id number of the message (e.g DELE 1).
To leave your mailbox and close the connection use QUIT

Here are a list of problems I’ve encountered and their fixes

-ERR [AUTH] Password supplied for «userName» is incorrect.
The password supplied was not the one expected by the server, retype the password, failing that find out if you’ve got the correct password.

-ERR [AUTH] PAM authentication failed for user «userName»: Authentication failure (7)
Your mailbox could not be broken down into seperate emails correctly, there may be a remnant of a message left — Ask your ISP to edit the mailbox manually and look for free lines above the headers.

452 4.4.5 Insufficient disk space; try again later
The mailserver cannot write the temporary files needed to allow you to collect your mail — ask your ISP to check disk useage and allocation on the server

-ERR [SYS/TEMP] Unable to copy mail spool file, quota exceeded (122)
The mailserver cannot create a temporary file needed to allow you access to your mailbox as you’ve run out of your space allocation — Try to reduce the amount of disk space you are using on that server (this quota may be shared between your mail, web and userspace), alternatively contact your ISP to increase your quota.

-ERR [IN-USE] /???/???/.userName.pop lock busy! Is another session active? (11)
The mailbox is currently in use by another connection or an old connection has terminated uncleanly — This will deal with itself

Overquota locking file ‘/???/???/???/userName.lock’; lock proceeding anyway

Unable to process From lines (envelopes) in /???/???/???/userName; change recognition mode or check for corrupted mail drop.
The mailbox cannot be split into seperate messages because the pop server cannot recognise distinct boundaries or the boundaries do not include the whole mailbox

Some things to watch out for:
1. If you type too quickly, sometimes it won’t recognise your text (weird!)
2. The backspace key sometimes does not work with some telnet clients (even though it may seem as though it does)

Мануал, или Всё что Вы хотели знать о Mac OS X (Hackintosh), но Боялись Спросить.

1. Введение: Чем является Mac OS X и откуда она взялась на PC?Mac OS X является 10-тым и последним на сегодня поколением операционных систем от Apple Inc.,выпустившей в далёком 1984 году первый персональный компьютер Macintosh.Выход Mac OS X на рынок в 2001г, непосредственно связан с возвратом на пост руководителякомпании её основателя и многолетнего директора Стива Джобса в 1997г. Созданная новая операционная системаMac OS X позаимствовала интерфейс и эргономику (принципы) работы пользователя от проекта NeXT Step,развиваемого Стивом Джобсом во время отсутствия в Apple Inc, а также ядро, а с ним, многозадачность,стабильность работы и принципы взаимодействия с оборудованием от FreeBSD. Read the rest of this entry »

Cheat Sheet Round-Up: Ajax, CSS, LaTeX, Ruby…

Actionscript

Read the rest of this entry »