Complementing Klaymen!!!

0 коммент. | добавить комментарий
Привет, я Вилли. Вилли Баранкин. Если ты это смотришь, то ты молодец. Вилли счастлив."

Немало попыток я предпринял в свое время, чтобы найти в Инете саундтрек к ахуительной игрушке The Neverhood. Итак, что мы знаем о ней?

1. Написана она была свежеиспеченной студией The Neverhood, по заказу Dreamworks Interactive (да, ТОЙ САМОЙ Dreamworks!). За год они ее написали.

2. На создание декораций было потрачено три тонны пластилина

3. Съемкой и производством руководил Стивен Спилберг. Пэрсонально.

Но речь не о том. Этот пост должен был быть про то, как мне работается в Люксофте первые две недели, но эта тема пока что продолжает вызревать – события развиваются здесь слишком стремительно, в Билайте я к такому не привык.

Поэтому пост посвящен тому, что наконец-то я нашел саундтрек The Neverhood!!! Кусочек был в расшаренной папке одного сотрудника, а еще кусочек я скачаю с не-скажу-откуда, когда попаду в инет снова. Ура! Ура! Ура!

Интрига же сегодня заключается в том, что, оказывается, главная тема (та, которая играет в Credits), оказывается, имеет слова! Не берусь судить, насколько они осмыслены, но тем не менее:

The Neverhood Theme


Complementing Klaymen
Clitton Clatton Klogg
We behold it's Hoborg
Big Robot Bil is odd!
The Clockwork Beast and Frenchy guy are with them. Hard to see:
Crit Unit "A" – oh what a day! – he joins Crit Unit "B"
At the Neverhood
Neverhood
Neverhood!

Эту бню надо петь все время, варьируя ее, например, так:

K k k k Klaymen
K k k k Klogg
Ho ho ho ho Hoborg
Big Robot Bil is odd!
C....C....C....C....Clockwork Beast, F....F....Frenchy.... gee!
Crit Unit "A" – oh what the hey! – he joins Crit Unit "B"
At the Neverhood…
Hey ho
Hey ho
Hey ho!

Swift Publisher - мой первый проект в BeLight

0 коммент. | добавить комментарий
Моя работа в Билайте началась 9 марта 2005 года. К тому моменту, как я попал в эту компанию, она имела два продающихся продукта. Первый - Business Card Composer - программа для создания и печати визитных карточек, и второй - Mail Factory - программа для создания почтовых наклеек, печати конвертов и прочей лабуды. Что касается Mail Factory - суть этой программы для меня до сих пор не ясна, она очень сложна, наворочена, и продается плохо. А вот работа с Business Card Composer в то время представляла из себя примерно следующее: в вашем распоряжении имелся холст размером с визитку, на котором можно было размещать картинки, прямоугольники, линии, и текст. Кроме того, можно было вставлять элементы из Address Book. Полученную визитку можно было напечатать на визиточной бумаге.

Компания в то время получала много отзывов от пользователей на тему того, что они используют BCC не по назначению, а для создания бланков деловых писем путем установки размеров холста в стандартный A4/Letter, и последующей распечатки. В связи с этим было решено меня, как нового сотрудника, бросить на создание специализированной программы для печати бланков и деловых писем. Соответственно, рабочее название нового проекта было "Letterhead", а я занялся тем, что стал переносить в него классы из BCC.

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

Потом я грохнул интеграцию с Address Book.

Еще потом мы решили, а я принялся разрабатывать новый инструмент - Extended Text. Суть задания сводилась к тому, что хорошо бы иметь набор текстовых боксов, чтобы текст, размещенный в них, умел "перетекать" из одного в другой - это было бы удобно, например, для организации многоколоночных писем. Проектирование, реализация и борьба с багами отняли около месяца. После завершения этой работы я познакомил дизайнера нашей компании с тем, что получилось, после чего он стал требовать добавления новой функциональности, а именно - обтекания текстом других объектов (картинок, фигур, и пр.). Это, по его утверждению, придало бы письмам больше выразительности и красоты.

Реализация обтекания отняла еще месяц, после чего всем стало ясно, что городить такие сложности ради создания дурацких бланков - дело неблагодарное, и менеджмент решил, что программа будет предназначена для Desktop Publishing.

Дальше были бесконечные просмотры Apple Pages, Adobe InDesign и иже с ними, тыренье их функциональности, нудная работа над пользовательским интерфейсом, отладка, отладка, и отладка. Полученный продукт назвали Swift Publisher и выпустили в конце июля 2005 г с ценой $35 за download-, и $40 - за CD-версию.

Итого: проект не имел никакого плана, вся разработка велась исключительно на основе первоначального видения, оперативных событий и анализа рынка. Работа над проектом заняла 5 месяцев, 3 из которых я работал один, а потом ко мне подключились еще два разработчика. Продукт тогда по популярности полностью затмил и BCC, и MF. Это был успех. Хотя мы и породили прямого конкурента Apple Pages (Apple даже впоследствии отказалась от размещения Swift Publisher в Apple Store), наш выигрыш был в цене (Pages продавался только в комплекте с Keynote за $80) и в простоте пользовательского интерфейса. Кстати, вышедший позже Pages 2.0 ушел от настольного издательства в сторону текстового процессора - туда ему и дорога.

Ах да, торт, который мы съели в день релиза, был очень вкусным :)

Pod-pod-pod

0 коммент. | добавить комментарий
Вчера, 12 сентября, Стив Джобс на специальной презентации Apple продемонстрировал обновленную линейку плееров iPod. В глаза бросилось то, что новая прошивка плееров iPod video и iPod nano позволяет (наконец) играть в игры и (о, ужас!) запускать ПО сторонних производителей.

- Сережа, к чему ты клонишь?
- К тому, что теперь под iPod, а точнее - под ОС Apple для iPod можно писать софт.

Мак-девелоперы, ряды которых я покину через три дня, скоро начнут медитировать на фреймворки с названиями вроде iPodApplicationKit и CoreIPod. Я как будто вижу перед собой оглавление следующего ADC Reference с классами NSiPodPlaylist, NSiPodSettings, NSiPodControl, и т.д.


iPod is Not a Black Box Anymore!


Так совпало, что именно сегодня я снес прошивку Rockbox с моего iPod nano (теперь уже предыдущего поколения) и вернулся на оригинальный firmware Apple.

Эксперименты на живом iPod nano я начал сразу, как только узнал, что его родная прошивка Apple имеет настоящий bootloader и умеет обращаться с файловой системой - а значит, может именоваться Операционной Системой. Для такого популярного гаджета просто не может не быть альтернативных ОС - решил я, и оказался прав.

К установке нарытого мной в Интернете iPodLinux я подошел серьезно. Вначале я долго читал форумы, на которых американские ай-подо-воды жаловались друг другу на неудачи с установкой данной ОС на свои гаджеты, в результате чего последние переставали работать, а предпоследние шли в магазин за новыми гаджетами. Однако, экспериментатор победил скептика, в результате чего я целую неделю играл в iDoom, запускал редактор vi, медитировал на bash и неимоверно пёрся.

Спустя неделю я вернулся к родной прошивке. Следующим экспериментом была установка прошивки Rockbox, которую мне очень рекомендовал друг Женя. Rockbox продержался на моем iPod целый месяц, поскольку в комплекте с ним я нашел целую кучу игрушек, которые доставили мне много приятных минут.

Почему я снова вернулся к родной прошивке? Потому, что в проигрывании музыки ей нет равных. Также ей нет равных по удобству интерфейса. iPodLinux, конечно, имеет mp3-плеер, но у меня он иногда зависал, и, к тому же, я так и не смог добиться от него поддержки Unicode в ID-тегах. Rockbox в этом отношении вел себя несравненно лучше, но, признаться, я так и не смог привыкнуть к его интерфейсу. Может быть, на всяких там iRiver прошивка Rockbox рулит, но...

Не знаю, в общем. Кто-то из зала кричит, что, мол, iTunes - suxxx! Я раньше тоже так думал. Однако, распробовав хорошенько связку iTunes + iPod, на самом деле уже не хочется ничего другого. Да, идея копировать музыку на плеер просто в виде файлов и директорий звучит заманчиво, но надо ли мне оно?




Почему тогда я устанавливал iPodLinux, Rockbox? Более того - почему я собираюсь пробовать новые прошивки, как только таковые будут появляться? И еще более того - почему я советую всем ай-подовцам и ай-подовкам делать как я? Да потому, что это чертовски занятно! Я с нежностью смотрю на маленький экранчик моего гаджета, на котором (ни хрена себе!) я селил целых две ОС, для которого я компилировал ядро linux, в котором я создавал новые разделы на диске... Мне кажется - это сравнимо с чувствами маленького ребенка, который в который раз разбирает новую, только что подаренную ему машинку, чтобы посмотреть, что там у нее внутри.

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

Deadlock и военкомат

0 коммент. | добавить комментарий
Был сегодня в райвоенкомате - пришел становиться на учет офицеров запаса. Тетенька там сидит такая смешнючая - и говорит мне: "А отчего же ты, Сережа, раньше не явился? Приказ-то о присвоении тебе звания уже два месяца как пришел. Это называется "несвоевременная явка" - будем штраф оформлять".

А я ей: "А не пришел я потому, что не знал, что приказ уже есть - мне же не приходила повестка!".

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

А я ей: "А не пришел я потому..." - ну и так несколько раз, по кругу.

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

(В этом месте я два часа философствую о том, что взаимные блокировки - суть явление природы, и могут они встречаться везде, а не только при параллельном программировании. Вот ведь как оно все устроено заковыристо! :)

О переходе на новую работу

0 коммент. | добавить комментарий
А вот снился мне давеча сон про самое ужасное собеседование в мире.

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

А потом, гад, добавляет: "Ну, мне надо притащить из подвала комп - вот, мол, сходи-притащи, и тогда, так уж и быть, я тебя не выгоню". Я, ясен перец, взвиваюсь на дыбы, выдаю ему, что мне не нравятся его методы и что в рот я ебал эту контору мне не хочется работать в компании, где так относятся к будущим сотрудникам. Встаю и гордо ухожу. Проснулся.

Понял я одно: надо начинать заниматься поиском новой работы только тогда, когда назрело. И все-то меня утвердили, и завтра - финальное собеседование с заказчиками по телефону на английском, а вот гложет меня чувство, что преждевременно все это.

Одно слово - не назрело!

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

Как же меня сейчас выкручивает всего! Что случится завтра - ума не приложу... И вот ведь какая штука - никто за меня ничего не сможет решить!

Что-то будет?..

О Лукаше Подольски и об одной проблеме роста

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

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




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


Я не знаю. Знаю только, что вчера, когда я смотрел матч Германия-Португалия за 3 место ЧМ-2006, я опять почувствовал это. Ну, Лукаш Подольски, ну как же так?! Ты - и по телевизору, и пасы, и по воротам, и комментатор в восторге, и Мондиаль, и поклонницы, и деньги, и слава, и гимн. А я - на диване, и пиво, и духота, и мухи, и Жигули, и эта сука прожужжала все уши!

А, между прочим, я старше тебя на целый год.

Разэдак тебя и разтак, Лукаш Подольски!

Вести с поисковых полей

0 коммент. | добавить комментарий
В Mac OS 10.4, среди прочих новшеств, была внедрена технология поиска Spotlight, включающая индексирование и поиск по именам файлов, а также индексирование и поиск по метаданным. Для меня это значит примерно следующее: поскольку наш проект использует свой формат документов, представляя их в виде Mac OS bundles (т.е. документ представляет собой папку, в которой содержится описание структуры документа, а также хранятся использованные текстуры, материалы, 3D-объекты, представления и пр.), то автоматически Spotlight'овый поиск по нашим документам работать не будет. Чтобы справиться с этой проблемой, мне вчера довелось написать плагин для системы Spotlight - т.н. Spotlight Importer, который предоставляет данной системе метаданные наших документов в требуемом ей формате.

Об этом и речь. Для быстрого поиска информации в системе можно, как Microsoft, долго разрабатывать WinFS, и впоследствии отказаться от внедрения ее в новой версии Windows, а можно придумать Spotlight, поддержать поиск по стандартным форматам данных, и обязать разработчиков писать плагины для поиска по нестандартным форматам. Отличие в том, что второй подход уже реально работает на протяжении более чем полугода, а первый - нет, и неизвестно, когда WinFS будет-таки выпущена в свободное плавание.

Итак, Spotlight Importer. Его разработка сводится к реализации функции Boolean GetMetadataForFile(void* thisInterface, CFMutableDictionaryRef attributes, CFStringRef contentTypeUTI, CFStringRef pathToFile), которая принимает имя документа, созданного в нашем приложении, а возвращает ссылку на словарь метаданных attributes. Очевидно, что данная функция должна открыть документ, прочитать из него то, что может быть проиндексировано, и запихнуть это все в словарь attributes. Я уложился в набор стандартных ключей, используя:

  • kMDItemTitle - имя документа
  • kMDItemAuthors - массив, состоящий из имен авторов документа (у наших документов м.б. только 1 автор)
  • kMDItemDescription - описание документа

Нет, ну ведь правда здорово? Немедленно создаем документ spiralka и заполняем поля автор/копирайт/описание (кому не видно - имя автора "Zaycheg"):



Итак, что мы теперь найдем в Spotlight по запросу "zaycheg"? Конечно же, документ spiralka:



Не просто, а очень просто! Напоследок самое вкусное: как связать разработанный плагин с форматом документов. Иными словами - как сказать Spotlight'у, что для индексирования наших документов необходимо запустить наш плагин. Для этого в файл Info.plist приложения (содержит метаданные о приложении) необходимо указать тип (расширение) наших документов в формате UTI (Uniform Type Identifier). После первого запуска приложения Mac OS проанализирует его файл Info.plist, а затем всегда будет искать плагин для индексирования данного UTI в bundle приложения, и в системных папках Library. А плагин декларирует множество поддерживаемых UTI, и имеет собственный GUID, что гарантирует его уникальность в системе.

Ну красота ведь! До сих пор не нарадуюсь :)
А Microsoft пускай еще WinFS попишет.