From Novosibirsk, Russia? Our tiny company is looking for current or future rock-star developers.

December 16, 2007

Поломки и резервные копии

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

Например, под ёлочку в этом году я положу себе MacBook Pro 15", потому что сегодня разбил экран своего старенького MacBook'а 13". Благо, я могу себе такое позволить. Отрицательных эмоций нет. Сегодня хорошо посидели в «Жили-Были» с Юрой Бабуровым — завоевание мира всё еще запланировано, — потом выпил коньячку и хорошо поспал, проснулся совершенно счастливым. Обретенная радуга во весь экран ничуть не ухудшила настроение (естественно, работе она не мешает, ибо я работаю с подключенным внешним монитором).

Сломанный ноут мы уже нарекли новой моделью Mac mini flat. А если оторвать экран вообще, получится конструктивный аналог ZX Spectrum — клавиатура, в которую спрятан компьютер. Но, конечно, сначала я попытаюсь его сдать в сервис. Давно хотел домой второй мак.

В прошлом месяце я отбил кусок от стекла на экране своего сотового (матрица не пострадала). А еще от другого падения он перестал звонить. И корпус давно треснувший. Но до сдачи в ремонт руки так и не дошли. Опять же, на такие мелочи я внимания не обращал.

Сейчас вспомнил, что вчера за'push'ал все изменения по работе на свой хостинг (приватно использую git, хотя основной репозиторий в CVS). «Вот теперь никакие катаклизмы ей не повредят», — сказал я. Очень вовремя, сегодня запросто мог накрыться жесткий диск. (А всего-то: шел с закрытым ноутом и выронил его из рук на пол.) В прошлом месяце подписался на .Mac, получил право пользоваться Apple Backup, сделал резервную копию всех фотографий на DVD. Опять же, не зря.

Мораль: резервное копирование — ваш друг. Навсегда.

December 15, 2007

Девять причин перейти на Git

Обновление: см. также пост «Всё, что нужно знать про Git».

Когда-то я рекомендовал CVS, если вы пользуетесь системой контроля версий в основном для резервного копирования, и что-нибудь вроде Mercurial, если видите в этом искусство.

Теперь всё изменилось. Я однозначно рекомендую одну систему контроля версий для любых потребностей: Git.

Причины:

0. Я бы даже не стал упоминать это, но ведь кто-нибудь спросит. Git — распределенная система контроля версий (разумеется). Дальнейшее описывает, почему он лучше Mercurial, Bazaar, darcs и др.

1. Репозиторий остаётся в ваших руках. В CVS, например, файлы имели вразумительный формат, и к ним по большой потребности можно было применить /dev/hands или /usr/bin/perl (что мно-о-ого раз спасало автора этих строк).

Ваши возможности в Git на порядок больше, поскольку весь его высокоуровневый интерфейс — это всего лишь набор скриптов, использующих утилиты низкого уровня в лучших традициях Unix. Теми же утилитами удобно править базу данных и вам. (В крайнем случае можно и руками — вся база хранится в зазипованых текстовых файлах простого формата, имя которых является SHA1-хешем содержимого.)

2. За git-commit --interactive можно продать душу. Этот минималистский консольный интерфейс для выбора входящих в коммит изменений лучше всех виденных мною GUI.

3. Двусторонняя синхронизация с CVS и Subversion. Если работодатель или автор любимого плагина имеет консервативные взгляды, вас это не остановит. (Правда, commit'ы в CVS экспортируются наполовину вручную.)

4. Man, it's sane. Логичный и предсказуемый. Скажем, мне нравится концепция index'а (и записи в него по git-add) и отслеживания перемещений по содержимому (команды вроде svn mv всегда доставляли одни проблемы). Естественно, это субъективная оценка.

5. Теперь есть адекватная версия для Windows. Разумеется, это не преимущество перед другими, но до появления MinGW-порта круг применений был ограничен. (Не попадайтесь на провокации и не качайте версию, которая пытается скомпилировать Git при инсталляции! Это всё проделки Ктулху. Инсталлятор нормальных бинарников работает отлично.)

6. Git умеет строить из себя CVS-сервер, так что ваша любимая IDE будет с ним общаться, как с родным. (С другой стороны, под OS X мне удобнее пользоваться командной строкой, чем поддержкой в IDE.)

7. Git имеет красивый веб-интерфейс out of the box. Я привык выбирать продукты, хорошо работающие из коробки, и это для меня хороший знак. (Ср. с убогой умолчательной темой у Mercurial.)

8. Формат репозитория дружелюбен к rsync, обычному HTTP и backup'ам. Коммиты только добавляют новые файлы, не изменяя существующих. (Не считая файлов-ссылок вроде HEAD и refs/heads/master, но их мало и они очень маленькие.) Файлы репозитория можно раздавать через HTTP любым веб-сервером. Эффективно работает rsync. (Однако: после push'а изменений через тупой протокол на сервере нужно выполнить специальную команду Git, обновляющую некоторые файлы.)

9. Как следует из пункта 1, с использованием низкоуровневых утилит можно писать свои скрипты, делающие что-то интересное и новое. Многие этим воспользовались, так что у Git есть расширения (например, для patch queues, если вам сиё актуально) и альтернативные интерфейсы.

Одним словом, что бы вы ни думали про ядро Linux, за создание Git Линуса Торвальдса точно можно уважать.

Недостаток один — в процессе работы (иногда) требуется вовлечение мозга. Впрочем, всё реже и реже — например, магическое заклинание «git-reset --hard HEAD^» / «git-commit -c ORIG_HEAD» теперь стало частью «git-commit --amend». В любом случае, перед применением Git вам придется разобраться в его внутренностях (вся информация есть в tutorial'е и в man'ах).

Смотрим и наслаждаемся: Linus Torvalds on git (Google Tech Talk).

October 20, 2007

Она: любовь

(Третья часть трилогии «Она». В лучших традициях первая и вторая части будут позже.)

Она упряма, самоуверенна и умна. Могла бы уже кое-чего добиться, если бы верила в правильные вещи — такое мнение я составил после начального периода знакомства около двух лет назад.

Помню её пишущей что-то с шаблонами на C++; помню разбирающейся с ассемблерными листингами Alpha и x86. И, наконец, Улю, восхищенно рассказывающую про «розовый “Сапёр” — такая прелесть!»

Мы мало общались*: несколько случайных встреч в терминалке, деловые вопросы во время олимпиад, банкет после XVII Всероссийской олимпиады школьников по информатике и один длинный непримеримый спор по аське. Ума не приложу, почему её ЖЖ оказался в моём Google Reader’е.

Виртуальная свадьба**, и она признаётся, что влюбилась в меня.

Уважительно, понимающе, не преувеличивать, не потакать, не подавать надежду — но ведь не с ней же так. И всё же я точно знал, с кем и почему я хочу быть, а также почему я не хочу быть с ней.

С этого момента мои чувства и моё их понимание отправились в разных направлениях***. И только спустя почти месяц я неожиданно понял, что доверчивая и беззащитная-она — крайне дорогой мне человек; я понял, что люблю такую её совершенно иррационально и безвариантно, и что это важно. (Этот факт так разительно отличался от моих планов и был при этом столь неоспорим, что смириться с ним я смог только спустя дни.)

Дальше — 10 дней, наполненных моей уверенностью и её сомнениями, нежеланием потерять свободу и невозможностью со мной расстаться.

И вот она опять открытая и доверчивая, но на этот раз уже моя. Наслаждаемся счастьем. Когда я думаю об ощущении близости к ней, мне становится страшно, потому что оно появилось внезапно вопреки всему, в нём невозможно было сомневаться даже в самую первую секунду и оно не похоже на то, что я испытывал, любя других, — как невыразимая идея овцы**** .

Она очень красивая. Стройная. Выше меня. Разговорчивая. Тот же программерский образ жизни и те же интересы. Точно помню, когда-то о такой мечтал.

Наталья Попова, я тебя безумно люблю.

* Но содержательно, ибо я смог сделать описанные в первом абзаце выводы.

** Она написала пост «возьмите меня замуж», на который был мой ответ «выходи за меня». Естественно, просто стёб.

*** Прихватив с собой крышу.

**** Некоторые из моих читателей ненавидят Харуки Мураками.

October 11, 2007

Electric Light Orchestra в Новосибирске

Я вчера был на концерте Electric Light Orchestra. Кллассс! :) Играли в основном старые любимые песни «четырёх свет{л,ов}ых лет» (1976–1979) с альбомов A New World Record, Out Of The Blue и Discovery. Традиционный звук ELO («Sweet Talkin' Woman», «Standin' In The Rain», «Mr. Blue Sky» и др.), немного баллад («Tightrope», «Ticket to the moon»), немного рок-н-ролла («Hond On Tight») и классического рока («Do Ya», некие неизвестные мне композиции). Да, и я узнал, как поют «Rockaria!». :)

И тем не менее, самой классной прозвучавшей песней был битловский Twist And Shout в ELO'шной аранжировке. Простоту Beatles сложно чем-либо превзойти.

Мои попутчики после концерта утверждали, что такое нельзя слушать сидя. Странно; на мой взгляд, желание беситься под хорошую музыку глубоко неестественно (ср. также исполнение Моцарта и игру аборигена на барабане во время ритуальных танцев).

Еще я не понимаю, зачем делать громкость на гране болевого порога уха, и уж точно за гранью восприятия им мелких звуков. Господа, я пришел послушать инструменты и голос, а не войти в транс. Это больше всего портило удовольствие от концерта.

/me хочет в филармонию. :)

September 27, 2007

Микрофишки

next_2005NeXT остался ночевать, дабы поработать допоздна над тестами к задаче. С утра включаем колонки, чтобы посмотреть ролик — из них дикая попсовая музыка.

Закрываем WinAMP. Музыка продолжается. Берем диспетчер задач и закрываем приложения. iTunesHelper — музыка продолжается. Googletalk — продолжается. Winampa, ShockDesktop, type32, iPodService, QTTask, rundll32 — продолжается.

И только когда в списке остаются считанные процессы, доходит: это будильник, играющий на домашнем компьютере гостя через Remote Desktop Connection.

* * *

Выход Vista подтвердил слухи о том, что Ктулху теперь живет в Редмонде.

* * *

Есть сны, которые запоминаешь как факт и считаешь реальностью, пока не столкнешься с вопиющим несоответствием. Но реальность может поколебаться и другими вещами:

public class RubyCallGraphKiller {
   public static RubyCallGraphKiller killme(int x, Object y, Object z) {
       return null;
   }
}

— Андрюша! Что это за класс?!
— ???… !!!!
— Ты точно ничего крепче ликера не пил, когда писал это?

Представьте себе ощущения: вот он файл, доказывающий потребление вами травы. Но травы-то не было. Или была?.. Реальность — штука тонкая.

September 26, 2007

Добейся результатов!

Введение. Я понятия не имею, как учить глупых людей. Мне это безразлично. Волнует меня только воспитание людей, которые будут в будущем создавать шедевры и двигать мир, искренне любя свою профессию.

Есть много людей, которые достаточно умны, чтобы изменить мир. Их подводит единственная проблема: низкие стандарты. Они считают нормальным в 20 ничего не иметь и ничего не уметь. Они не повесятся, если ничего не добьются в 25. Им никто не говорит «а какого хрена ты до сих пор ничего не имеешь», а если говорят, то они обижаются.

Небольшая история. Когда я перешел из 10-й гимназии в 84-й лицей, то сразу выиграл городские олимпиады по нескольким предметам. Естественно, за месяц научить чему-то особому не могли. Но зато успели сказать, что не поставят пять за семестр тем, кто не выйдет на областную олимпиаду. Успели сделать так, что приходить без победы было позором — и это имело огромное значение для результатов. По мере того, как люди добивались, от них требовали еще больше. Мне было стыдно поехать на Всероссийскую и вернуться без диплома.

Теперь мне стыдно быть 21 года от роду, всё детство провести за интересными актуальными идеями и до сих пор не иметь ничего. Но я сейчас честно пытаюсь создать компанию, и, если это получится, буду более-менее собой доволен, как и, надеюсь, те, кто впрягся в сиё дело наравне со мной. Правда, пока получается фигово, но мы стараемся.

Далее, в детстве я вполне справлялся с методом «учиться всему самому», от массы знаний про программирование до учебника высшей математики после пятого класса. Но есть проблема: книг было мало, интернета (у меня) даже близко не было, я не знал, что вообще нужно знать, и некому было мне это сказать. Всю мою жизнь бы изменили слова «Lotus Notes», произнесенные в контексте моих идей где-нибудь около 7-го класса. Заодно бы и рекомендацию прочесть все доступные книги по управлению IT-проектами и методологиям, а также пару дельных советов по тайм-менеджмету.

За сим довольно обо мне и постараемся обобщить этот опыт. (Обощать свой опыт — дело опасное, но, мне кажется, для умных людей он бы подошел.)

Как учить человека? Дайте ему реальную сложную задачу, срок и специалиста (мастера), который может контролировать прогресс / результат и отвечать на нетривиальные вопросы — вопросы, которые не найдешь в доступных источниках. Действительно помогите ему организовать свое время — например, наймите талантливого project manager'а.

А дальше человек должен делать всё сам. Купить книжки, поискать в Интернете, понять, какие знания ему нужны и откуда их добыть. Периодически сверяться с мастером, на верном ли он пути. Решить задачу и быть довольным и гордым собой, отгулять маленький отпуск и браться за следующую.

Это применимо не только к профильным предметам. Если вам повезло учиться в хорошей школе, вас наверняка интересовало много разного; математика, физика, литература, история, английский — вот мой список. А заниматься надо пробовать вообще всем.

В школах (да и университетах) действительно заставляют заниматься всем. Но.

Первое: не дают бросить, когда понимаешь, что тебе хватит. Умному программисту интересна и история, и география, и он с удовольствием в них окунётся. А когда он решит, что узнал достаточно, нужно дать ему забыть о существовании такого предмета.

Второе: неадекватно управляют временем людей. Управление временем и проектами — сложный практический навык. Глупо ожидать, что школьники это умеют — а потому им нужна в этой области активная помощь. Возможно, project / time management следует сделать отдельным предметом. И в любом случае переключать человека между задачами — очевидная грубая ошибка в управлении. Предметы не могут чередоваться иначе, как хотя бы месячными погружениями в одно и то же дело.

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

И самое главное — нужно требовать серьезных результатов рано. Множество вещей интересны, на улице хорошая погода и с друзьями весело, но когда-то надо сделать выбор и отдать огромное количество времени чему-то одному.

В нашем обществе людям позволено тратить время на пустые разговоры, гулянки, проделки, просмотр фильмов and whatnot, потом еще и называя это сладким словом «студенчество», видимо, втайне желая продолжать пинать балду всю жизнь. В такой ситуации нет стимула рискнуть, бросить всё и пытаться добиться результатов в каком-то одном деле. А должно быть совсем наоборот — стыдно в 18 еще не сделать чего-нибудь грандиозного.

Итак. Добейтесь результатов. Get things done. Go away and do it fucking now.

August 28, 2007

Discovery of the True Ultimate Answer

Да, The Ultimate Answer to Life, the Universe, and Everything — действительно 42. Зафоду не хватило лишь немного знаний о компьютерах, чтобы понять, что 42 — на самом деле звёздочка.

Доказать это проще простого: выводим в файл число 42 в качестве stub'а реальных данных, а затем смотрим FAR'ом.

August 19, 2007

iLife'08

Черт, Джобс! Всего пару дней назад я в очередной раз подумал, что даже обновленный сервис .Mac не для меня. За $100 в год получаешь всего 10 Гб места, с которым мало чего можно сделать.

А сегодня я посмотрел презентацию iLife'08, где Джобс продемонстрировал новые Web Albums, и соображаю, смогу я себе позволить .Mac в этом месяце или нужно ждать следующего. Это и назвается Steve Jobs' reality distortion field.

При упоминании о Web Albums прежде всего я подумал об установке веб-галереи на свой хостинг. (В конце концов, у меня там есть те же самые 10 Гб.) Но как только увидел демонстрацию, понял, что (а) такой галереи никогда не появится и (б) написать такое будет стоить дороже тех самых 100 баксов. Кроме того, одна из главных прелестей запатентована.

Когда дело дошло до нового iMovie, мысли перешли на «продам душу за iLife». Год назад на монтаж пятиминутного ролика о компании xored у меня ушла вся ночь. Еще до этого я искал (и не нашел) программу видеомонтажа, которой было бы удобно пользоваться. И теперь Джобс говорит ровно об этих недостатках, и они исправлены. Новый интерфейс iMovie — как раз то, что я хотел, чтобы наконец превратить кипу лежащих в столе видеокассет в домашнее видео.

Напротив, пользователем iWeb я так и не стану. Пока они не сотворят нечто викиобразное, увы. (И ведь, если задуматься, возможности консумерской вики добавить в iWeb можно было бы в два счета!) Делаем ставки: начиная с какой версии iLife мне даже не придет в голову создавать сайт не в iWeb?

Целый день я потратил на настройку своего хостинга. Мне всего-то нужен хотинг нескольких доменов на приличной Wiki, Mercurial- и Subversion-репозитории да пара инсталляций Trac, еще и выполнять несколько своих Rails-приложений. Должно настраиваться в пару десятков кликов. Кто возьмется написать iServerSetup?

August 14, 2007

LiveJournal syndication

Как известно, этот блог можно читать в ЖЖ, подписавшись на andreyvit_ — однако вовсе не нужно так делать. Неужели вы в самом деле до сих пор не используете RSS-читалку? А как вы тогда подписываетесь на башорг остаетесь в курсе последних достижений в области вашей специализации?*

Недавно выяснилось, что ЖЖ позволяет писать комменты к syndicated post'ам. Вероятно, оставляющие их не сознают, что (1) я эти комменты не вижу и (2) они уходят вникуда спустя несколько постов (что, впрочем, не такая уж плохая судьба для коммента). И это не говоря обо всех других глюках LJ syndication.

Господа, почему бы, например, не сделать наоборот — читать ЖЖ из RSS? Вы получите неограниченную в длину френд-ленту, которую можно сортировать и раскладывать по полочкам, как вашей душе угодно. Вы заслуживаете большего, чем poor man's RSS в LJ. Заодно вы скажете своё «нет» подзамочным записям, что, возможно, поспособствует снижению их числа. (Впрочем, за отсутствие подзамочного RSS стоит сказать решительное «нет» всему LJ. Это просто неадекватно. Или оно уже есть, а я упустил? За деньги, может?)

* Disclaimer: я не читаю башорг.

Apple pricing policy

Покупая монитор, выяснил клевую вещь про ценовую политику Apple. Цитирую:

«С ценами, рекомендуемыми на территории РФ на продукцию Apple, Вы сможете ознакомится тут: http://www.apple.ru/price/.

Авторизованные партнеры, не соблюдающие данные рекомендации, авторизации лишаются, и, как следствие, и доступа к каналу легальной техники и сервисным функциям. Колебания от рекомендованных цен составляют не более 100 рублей вниз и, как правило, связаны с особенностями используемых информационных баз компаний.»

Что в этом гениального? Имея линейку продукции из (например) шести ноутбуков, Apple спасает пользователя от необходимости выбирать. Фиксируя на них цену, Apple освобождает время пользователя, которое он бы потратил на поиски места, где подешевле. Лично мне это позволяет не беспокоиться об упущенных возможностях, направляясь в ближайший мне магазин (Техносити) за очередным продуктом любимой компании.

Конечно, если вы любители побегать и повыбирать, вам это всё не понравится. Но так сложилось, что я не любитель и выбор всегда предпочитал делать по принципу «мне достаточно понравилось, куплю прямо сейчас».

(С этого поста я начинаю новую традицию «один пост — одна тема». Игнорируйте посты, обозначенные не интересующими вас тегами.)

August 12, 2007

Buying TextMate

Я купил свою первую софтину* — TextMate. Наконец-то есть возможность участвовать в цивилизованном рынке софта. Несколько месяцев я его использовал нелегально, переводя дату. Слава авторам, которые не стали запрещать подобный трюк; как только я понял, что он работает, то пообещал себе купить TextMate при первой же возможности.

Для рекламы: TextMate — потрясающий текстовый редактор и средство осмотра директорий с тексовыми файлами (будь то сорцы Mozilla, gem'ы Ruby, скрипты bash'а или куда там еще вас занесет). Я не представляю свою жизнь на маке без TM. Как говорится, стоит каждого потраченного евро (а именно, €40)**.

Нашел в нашей локальной сети FTP с варезом для мака. Слегка пошарился, но не смог избавиться от ощущения, что это дико. Закрыл. Если вы пользователь современного мака и обладаете хорошим постоянным доходом, у вас нет морального права использовать пиратский софт.

Вышли iLife'08 и iWork'08 — ох. :)

* Конечно, строго говоря, с новыми компьютерами поставляется лицензионный софт, поэтому некоторые программы я уже покупал, но это не было осознанным выбором.

** Дело идет к выходу TextMate 2 где-то в конце года, и его нужно будет приобретать отдельно, так что в вашей ситуации может иметь смысл подождать.

August 09, 2007

A single book I wish I had earlier

Не так давно я купил книгу, которую хотел бы прочесть еще классе в девятом: С. А. Орлов «Технологии разработки программного обеспечения» (ISBN 5-94723-820-9).

Я вообще люблю хорошие технические книги русских авторов, но настолько адекватного изложения сложно найти и в англоязычной литературе.

— исчерпывающее изложение методов и процессов, включающее и методику Джексона (ассоциирующуюся у меня со словом ancient), и XP, при этом отдельная глава посвящена UP;

— очень качественное объяснение принципов модульного проектирования (начиная с базовых понятий вроде cohesion/coupling) без привязки к ООП и с простыми примерами;

— описание количественных метрик (вкупе с кратким изложением уровней CMM — как бы вы к ним ни относились);

— введение в ООП и в проектирование баз данных (качественно и кратко);

— use case оставлено без перевода;

— примеры на Ada 95 :).

Недостатки:

— компонентный подход раскрыт неудачно (несмотря на почти-главу, ему посвященную);

— перевод английских терминов не соответствует общепринятому — я полагаю, в 2004 году, когда подготавливалось 3-е издание, refactoring уже следовало перевести как «рефакторинг» (хотя я и испытываю сладкую ностальгию по overload, переводимому как «совмещение» издательством «Мир» в стародавние времена);

— акценты в (также исчерпывающем) описании тестирования не соответствуют моим ожиданиям, что, возможно, объясняется давностью написания книги.

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

August 06, 2007

Почему важно быть хорошим

Нечасто можно построить простую математическую игру, позволяющую анализировать глубокие философские вопросы. Тем не менее, такое бывает: Prisoner's dilemma (англ. Википедия, via NeXT).

Суть математического эксперимента: полиция арестовывает двух подозреваемых. Доказательств для суда недостаточно, поэтому их разделяют (так, чтобы они не могли общаться) и каждому предлагают дать показания против другого. Условия следующие: если оба дадут показания, то каждого осудят на 5 лет. Если даст показания только один, то его сразу отпустят, а второго осудят на 10 лет. Если же не даст показаний ни один, то оба отсидят по полгода и выйдут.

В отличие от других игр, здесь оптимальный ход игрока не зависит от возможного хода другого и состоит в даче показаний («предать»). Действительно, рассмотрим первого игрока: если второй предаст, то и первому нужно предать (чтобы снизить срок с 10 до 5 лет); если второй не предаст, то первому опять же лучше предать (чтобы выйти сразу, а не через полгода).

Интересные эффекты можно наблюдать, если несколько игроков разыгрывают данную ситуацию много раз подряд. Показано, что рациональные игроки могут постоянно поддерживать «хороший» исход игры (при котором ни один участник не предает).

В турнире, проведенным между компьютерными стратегиями, самой успешной стала стратегия, на первом ходе не дающая показания, а далее повторяющая ходы соперника. При введении в игру «шума» (небольшой доли дезинформации) еще более успешной становится «прощающая» стратегия, которая на хороший (без предательства) ход соперника отвечает хорошим ходом, а на плохой всё равно с небольшой вероятностью может ответить хорошим.

Анализ показал, что выигрывающая стратегия должна обладать следующими свойствами:

1. Хорошая. Самая важное условие заключается в том, что стратегия не должна предавать соперника, пока он не предаст первым.

2. Небезответная. Успешная стратегия должна мстить.

3. Прощающая. Хотя стратегия должна мстить, она должна возвращаться к хорошему поведению, если оппонент начал вести себя хорошо.

4. Независтливая. Стратегия не должна пытаться набрать больше очков, чем ее оппонент.

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

Чтобы получить лучшие результаты, чем стратегия «око за око, зуб за зуб», какие-то стратегии должны пожертвовать собой (иначе говоря, более высоких результатов можно добиться, только если группу стратегий интересует победа хотя бы некоторых из них).

Если игра продолжается некоторое известное число раундов N, то оптимальной стратегией снова становится «всегда предавать». Для поддержания «добра» в «игровом мире» необходимо, чтобы продолжительность игры была заранее неизвестной (случайной для игроков).

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

(Подробнее см. в оригинальной статье на Wikipedia, ссылка на которую приведена в начале.)

August 04, 2007

Jing-n-Dash, iPhoney and printing Web pages

Самая большая находка месяца: www.jingproject.com — программа для захвата скриншотов и видео с экрана, сжатия в SWF и расшаривания на www.screencast.com (но можно сохранить и в файл), для Mac OS X и Windows. Пока бесплатная. Ни единой настройки (впрочем, вру — есть галочка «запускаться автоматически» и выбор между облачком в углу и иконкой в статусной строке у Mac'а). Запись скринкастов, созданная на небесах.

Далее, есть Dash — нечто вроде Windows-аналога маковского QuickSilver. Платный, в отличие от макового, но, пока нет релиза, платный не сильно ($20).

iPhoney — эмулятор веб-браузера в iPhone (для Mac OS X). Говорят, достаточно точный.

Совет для владельцев Mac: как напечатать часть Web-страницы. Легко: скопируйте нужный фрагмент страницы в буфер обмена, вставьте в TextEdit и распечатайте. Всё важное для печати оформление, включая картинки, будет сохранено.

Сегодня я решил, что надо бы попробовать применить Apple Loops, занимающие на диске моего ноутбука около 2 Гб. Запустил GarageBand и записал простенькую песенку. Эх, до Smoke on the Water ей далеко. :) Тем не менее, интересный опыт, рекомендую попробовать (а то иначе получится, что место у вас пропадает даром).

Недавно вышел Microsoft Remote Desktop Client for Mac 2.0 beta. Universal Binary уже стоит того; на мой взгляд он стал лучше CoRD — последняя часто рисует с ошибками, что совсем уж unacceptable, и не перенаправляет звук, что для меня тоже близко к недопустимому.

Наконец, я зафотал свое рабочее место. Всё на фотографии, кроме стула и бардака под столом, могу смело рекомендовать. (Ноутбук удобно пристроился на клавиатурной полке — для клавиатуры она слишком низкая при таком экране.)

August 02, 2007

WWDC 2007: Safari killing Firefox?

Если вы не видели Keynote Стива Джобса на WWDC 2007 (видеозапись которого можно скачать, например, из торрентов), то, вероятно, пропустили великие планы Apple в отношении браузеров. Слева нарисовано (скриншот из Keynote'а), как выглядит соотношение браузеров сейчас, а справа — как попробует сделать Apple.

Если теперь задуматься, то легко понять, что основная масса пользователей Firefox — обычные юзеры. Они выбрали его вовсе не из-за принципиальных соображений оупенсорса, а просто потому, что Internet Explorer (был) совсем плох.

Легко дальше понять, насколько лучше Apple умеет делать софт для обычных пользователей, чем какая бы то ни было команда open-source'ных разработчиков (которым помогает пачка индусов в коммерческих компаниях).

«Как же мы доберемся до этих пользователей, когда у Firefox 500 000 скачиваний в день?» — спрашивал Джобс. «Но у iTunes 1 000 000 скачиваний в день, и в сумме больше 500 миллионов пользователей iTunes под Windows. Да, мы знаем, как до них добраться, и сделаем именно это!»

В Safari есть достаточно возможностей, чтобы заставить среднего пользователя писать кипятком. У них свой красивый рендерер шрифтов, портированный интерфейс Aqua, шустрый движок, море юзабилити и прикольные эффекты вроде мегапонтового поиска. И это не open-source plugin-ridden crap, как Firefox.

Не знаю, как вы, а я ожидаю смерть Firefox (конечно, не полную смерть, а уменьшение доли рынка на порядок).

Хотя лично я хочу увидеть такую вот страничку про Internet Explorer для Windows:

July 31, 2007

Choosing LCD monitor, Apple mice and base stations

Когда-нибудь удивлялись, почему в прайсах монитор 23" можно найти и за 20, и за 30 тысяч? LCD-матрицы, используемые в мониторах, бывают нескольких видов.

При взгляде (даже немного) снизу на экран с матрицей TN изображение становится заметно темнее. Углы обзора не очень хорошие, вдобавок часто неравные по вертикали и горизонтали (например, 150 по горизонтали и 135 по вертикали). Если смотреть сбоку по горизонтали, «плывут» (то есть немного изменяются) цвета.

В PVA- и MVA-матрицах проблемы с вертикалью, аналогичной матрицам TN, нет. Зато благодаря особенностям технологии при взгляде на матрицу прямо (по горизонтали) яркость получается меньше, чем при взгляде сбоку. (MVA — более продвинутый вариант, поэтому на них проблемы наблюдаются в меньших масштабах.)

В результате на PVA / MVA после установки яркости монитора на комфортный уровень (в отличие от максимальной, на которой они как правило демонстрируются в магазинах) при взгляде прямо на изображении радикально отсутствуют темные детали. Настройкой цветового профиля и/или параметров монитора можно добиться хорошего изображения при прямом взгляде, но при этом сбоку всё, естественно, станет хуже. Если монитор большой, то «прямо» и «сбоку» можно наблюдать одновременно на разных частях экрана.

Наконец, самый дорогой вид матриц — S-IPS. У них большие углы обзора (что-то вроде 178˚) и отсутствуют заметные проблемы с цветом. В технических характеристиках эти матрицы можно узнать по невысоким показателям яркости и контрастности (впрочем, их достаточно — это у PVA/MVA показатели выше нужной величины).

Необходимость изучить всю вышеприведенную информацию возникла в процессе выбора нового монитора. Больших мониторов (больше 20") на S-IPS практически нет. Что удивительно, в этом сегменте Apple Cinema Display даже в России не дороже конкурентов. В результате я и стал счастливым обладателем Apple Cinema Display 23".

Если и вы задумаетесь о таком, нужно понимать, что его сделала Apple. Он имеет только DVI-вход, а органы управление представлены тремя сенсорными кнопками: увеличение яркости, уменьшение яркости и включение/выключение.

Заодно я не удержался и купил Apple Wireless Mighty Mouse. Специфический продукт, однако я решил, что к нему можно привыкнуть.

Во-первых, вместо отдельной правой и левой кнопки она, как и все мыши Apple до нее, нажимается всем корпусом, а левое-правое нажатие различает сенсорными датчиками. На практике это значит, что для «левого нажатия» на мышь можно давить всеми пальцами в любом месте, но для «правого нажатия» нужно поднять левый палец с мыши.

Во-вторых, шарик прокрутки подобно трек-болу можно вращать во все стороны, что очень удобно. Однако для прокрутки шарик нужно легонько надавливать вниз, что тоже непривычно. (В Mac OS X без горизонтальной прокрутки вообще жить сложно, хоть ее и можно эмулировать на обычной мышке, крутя колесико с кнопкой Shift.)

Наконец, у мышки есть еще две кнопки. Если на мышь нажать, касаясь шарика, то сработает третья кнопка (которую я назначил на активацию Exposé), а если со всей силы сжать выделенные области по бокам, то сработает четверая (которая, ввиду исключительной некомфортности операции, была назначена на Exposé Deskop).

В очереди покупок: новый стул (у текущего высоты недостаточно для правильной посадки за новым монитором), хорошие колонки и, возможно, Apple AirPort Express Base Station.

Насчет последней: AirPort Express — базовая станция Wi-Fi, к которой можно подключить колонки и воспроизводить на них звук с любого iTunes. Заодно к ней можно подключить и принтер, чтобы расшарить его по сети. И я бы совсем не сомневался в этой покупке, если бы к ней можно было подключить еще и жесткий диск, столь необходимый для backup’ов с надвигающимся выходом OS X 10.5 Leopard — однако, увы, диск позволяет подключить только AirPort Extreme, к которой нельзя подключать колонки. Тра-та-та (AirPort Express позиционируется как недорогое устройство, которое можно закупить в нескольких экземплярах, по одному на каждую аудиосистему в доме).

July 26, 2007

HTML completion

Задача: вычислить HTML-теги, которые могут быть вложены в данный.

Решение.

1. Описываем все теги в виде набора Java-классов, по одному классу на тег.

2. Учим эти Java-классы генерировать куски DTD, описыающие соответствующие теги.

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

3. Для всех возможных HTML-тегов повторять шаги 4-6:

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

5. Скормить полученный набор кусков (в виде массива строк) кастомному DTD-валидатору, специально предназначенному для данной задачи.

6. Если валидатор не выдал ошибку, то добавить текущий тег в список возможных детей.

Да здравствует Eclipse Web Tools Project! Индусы — вот implementation detail компании IBM.

July 04, 2007

Developer's Fun

Есть среди программистов понятие, которое называется «фан». Людям, не живущим в этой среде с детства, может быть сложно понять соответствующее культурное явление.

Во-первых, настоящий программист — человек очень умный. Для получения удовольствия его мозгу необходима достойная сложная работа.

Во-вторых, программисты как никто другой испытывают действие «сокращенного жизненного цикла изобретений». Можно придумать, сконструировать и запустить в массы результаты своего труда за очень короткий срок. Привычка постоянно любоваться этими результатами, живущими собственной жизнью, устанавливает очень высокий порог удовольствия. (Даже без массового распространения продукты всё равно живут сами по себе на локальном компьютере.)

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

Конечно, речь идет о настоящем программировании. Есть в наших рядах особи, не способные ко всему вышеперечисленному, ибо для них программирование не стало искусством. Обычно их называют индусами из-за большого количества подобных недопрограммистов в соответствующей стране.

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

Есть и другие факторы, мешающие творчеству, например, множество посторонних обязательств или разрозненных дел, которые скоро нужно сделать или приходится держать в голове. Поэтому среди программистов популярны подходы вроде «Getting Things Done».

Вывод: программист — не слесарь, с ним нужно работать по-другому.

А еще моя супруга готовит офигенную пиццу. Не похудеть мне сегодня. :)

June 22, 2007

Or face the consequences

Я на днях (позавчера) купил велосипед. Черт, как болят ноги!

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

Сегодняшнее утро. Просыпаюсь от жуткой боли в ногах (в 6, после того, как лег в 2). Пытаюсь полежать. Терпение кончается, бегу, пью обезболивающее. Пытаюсь еще полежать, но это почти невозможно (хуже, по-моему, было только однажды после операции). Начинаю ходить из комнаты в комнату, чтобы размять мышцы; от этого становится немного лучше. В конце концов мне уже достаточно хорошо, чтобы умыться. За это время начинает действовать «Кетанов» и ногам наступает почти полный комфорт.

Поехать, что ли, прокатиться часок?

P.S. «Tell the truth or face the consequences» — надпись, которой щедро разукрашено посольство США изнутри. (Главным последствием они обещают запрет на въезд в Штаты.)

June 12, 2007

Dvorak: the saga begins

This post will be in English because I have just switched to DVORAK keyboard layout and I need to practice a lot.

One thing I can already tell about DVORAK is that it is really much, much, much more comfortable than QWERTY. Even after half an hour of typing I can easily use all the keys without looking them up in a reference and making almost no mistakes. I do feel that using dvorak will speed up my typing and will make my hands move a lot less.

Big thanks go to Stepan Stolyarov for unwillingly leading me to this idea, and to Mikhail Gusarov for making me think about it in the first place. Also to Mikhail Kalugin and again to Stepan Stolyarov for thinking I’m terribly out of my mind, which is so supporting and exciting.

Besides all that, I’m again typing with a speed of about one character per second, just like so many years ago.

June 11, 2007

Story Continued

Я закончил университет — позади человекомесяцы работы, отнимавшей драгоценные часы от полезных занятий. (С другой стороны, полученной бумажкой есть шанс воспользоваться, так как для получения рабочей визы, например, в Соединенные Штаты и, может, в другие страны звание bachelor, кажется, необходимо.)

По случаю окончания университета и по другим сопутствующим причинам я решил, что настало время создавать свою компанию. Со мной в это дело ввязаться согласились еще пара человек. Мы активно ищем умных людей, желающих участвовать в self-funding startup’е. Платформа реализации — Eclipse, язык, соответственно, — Java.

Дабы финансировать это мероприятие, я сменил работу на удаленную. Занимаюсь рефакторингом и дописыванием enterprise-приложения под Eclipse. Лучшего желать сложно.

Работа моя требует Windows, и я наконец-то решил попробовать одно из средств виртуализации для маков. Если у вас всё еще остаются сомнения в возможности перехода, взгляните на скриншот Parallels Desktop, работающего в coherence mode.

Краткий отчет с EclipseCon, который я так и не собрался опубликовать по приезду, уже в основном устарел. Скажу только, что стоит обратить внимание на проекты Dynamic Languages Toolkit (платформа для IDE для динамических языков), Eclipse Packaging Project (инсталляторы), Maya (Enterprise-развертывание), Mylar (focused workspace, tasks management, bug tracker integration). Кроме того, активно развивается скриптинг Eclipse, так что опробуйте Eclipse Monkey.

Надеюсь, до скорого!

March 08, 2007

EclipseCon 2007 part 2

Andrey Platov to xored-staff: «Yes! We did it! Детали позже :) http://www.eclipse.org/dltk». Это примерно резюмирует наше успешное выступление на EclipseCon. Видеоролики (20-30 Мб каждый) можно скачать на упомянутом сайте. Коротко об остальном:

— Чтобы перейти дорогу, нужно подойти к светофору и нажать на кнопку. Это достаточный интерфейс, чтобы можно было сделать интеллектуальное слежение за трафиком. Но, похоже, дальше stub-реализации они не пошли: светофоры работают как и у нас, но если кнопку не нажимали, сигнал «можно идти» не загорается.

— Мясо вкусно есть с фруктами. Стейк с кусочком апельсина или дыни намного вкуснее.

— В ресторане блюдо (например, стейк) стоит 10-20 баксов, но зато порция будет на слона и будет включать всё необходимое (тосты, картошку, фрукты, соус).

— Вставать в 6–7 утра намного приятнее, если просыпаешься сам. Что именно заставляет вставать так рано, я не знаю, но по крайней мере я не буду удивляться раннему появлению американцев в онлайне.

— 590 мл Кока-Колы стоят $1.25, то есть чуть больше 30 руб.

В воскресенье мы поужинали блюдом Steak & Eggs. После этого голодным я себя почувствовал только утром следующего дня. В понедельник пришлось объесться благодаря обеду и ужину за счет наших партнеров (Instantiations и Cisco) в дополнение к немаленькому завтраку. Из прекрасного: клубника на палочке; воздушный рис-или-кукуруза на палочке, которую нужно вручную покрыть фонтанирующим шоколадом; емкости с малиновым вареньем на сегодняшнем завтраке (см. фотку), которое положено намазывать на хлеб, а также возможность упиться свежим апельсиновым соком.

Ощущения на улице очень напоминают дачу (причем ту, которая далеко от города). Свежий воздух, пахнет землей, зеленью и сыростью (как после дождя). Вероятно, не даром улица называется Great America Parkway.

March 04, 2007

EclipseCon 2007 part 1

Я всегда мечтал, чтобы в сутках было 36 часов. Прошедшее 3-е марта для трех сотрудников xored software, включая меня, длилось даже целых 38. Я сижу в отеле Hilton города Santa Clara, California; позади около 17 часов в трех самолетах и еще часов 7 ожидания в аэропортах. Через день начинается EclipseCon 2007.

Началось путешествие с рейса Екатеринбург—Москва на Ту-154 Аэрофлотом. В самолете тесно, но в целом неплохо. Сначала мы решили, что самолет решил до Москвы просто доехать, но потом он все-таки развернулся и взлетел. Впрочем, все они так делают, оказывается (да, халтурил я когда-то при изучении Flight Simulator’а).

Дальнейшая дорога (Москва—Атланта, Атланта—Сан Хосе) была авиакомпанией Delta. Её нерусское происхождение уже много говорит о качестве сервиса. 12 часов на Боинге-767 были самыми приятными из перелетов. Выяснилось, что сок бывает в жестяных баночках и вкуснее, чем «Я». :) В самолете было на удивление много маленьких (возрастом и особенно ростом) детей; причина выяснилась в конце, когда командир экипажа поблагодарил родителей, забравших детей из русских детдомов.

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

Atlanta—San Jose: сидеть у окна в Боинге-757 очень холодно даже в куртке. Зато это был ночной перелет с самым красивым видом из окна. В любом случае, в самолетах, даже тесных или холодных, хорошо спится: одновременно убаюкивает гулом и укачивает, мм, покачиванием. Особенно почему-то легко засыпаешь во время посадки (но быстро просыпаешься, чтобы не пропустить виды). Отличия от поезда минимальны и иногда подсознательно не хватает постукивания колес.

По пути из San Jose в Santa Clara (10-15 минут на такси) проехали мимо офисов McAffee и AMD; Silicon Valley, однако.

Постепенно обновляющаяся коллекция фотографий доступна по адресу http://picasaweb.google.com/andreyvit/EclipseCon2007.

January 13, 2007

Books and photos

Пришли книжки, которые я заказывал. Желающие могут взять их у меня почитать.

По веб-дизайну (никому не дам до сдачи дипломной):
— Веб-дизайн: книга Дмитрия Кирсанова (аннотация Артемия Лебедева);
— Веб-дизайн: книга Якоба Нильсена;
— Веб-дизайн: книга Стива Круга или «не заставляйте меня думать!»;
— Мейер. CSS - каскадные таблицы стилей. Подробное руководство.

По управлению проектами:
— Демарко, Листер. Человеческий фактор: успешные проекты и команды (легендарная peopleware);
— Джоэл о программировании (автор ведет блог Joel on Software);
— Гранд. Шаблоны проектирования в Java (очень цитируемая книга, на сайте автора одна из самых полных известных мне подборок паттернов);
— Ханк. Как пасти котов. Наставление для программистов, руководящих другими программистами;
— Брукс. Мифический человеко-месяц или как создаются программные системы (для коллекции, этого нельзя не иметь).

О программировании:
— Уоррен. Алгоритмические трюки для программистов;
— Иртегов. Введение в сетевые технологии (автору респект и уважуха, как советской армии);
— Мейерс. Эффективное использование С++. 55 верных советов улучшить структуру и код Ваших программ (не читал, но больше для коллекции по C++);
— Страуструп. Язык программирования C++. Специальное издание (для коллекции, такое тоже нельзя не иметь);
— Кнут. Все про METAFONT (для коллекции про TeX и дабы пугать компьютеры еще одной книгой автора; прочту как-нибудь).

И одна из любимых книг, которую я прочел в электронном виде:
— Лукьяненко. Танцы на снегу (для коллекции).

Кроме того, я наконец-то нашел время поразбираться с фотками. Закачал последние на http://picasaweb.google.com/andreyvit. Кстати, меня радуют цены на хостинг картинок там; подпишусь, как только заведу карточку (и не раньше марта, видимо):

250 МБбесплатно;
6.25 ГБ$25 в год;
25 ГБ$100 в год;
100 ГБ$300 в год;
250 ГБ$500 в год.