С миру по нитке

Сегодня поприсутствовал на заседании малой академии наук, слушали потенциальных молодых ученых. Для тех, кто не в курсе - МАНы проводятся среди учащихся 9-11 классов. Что сказать, я увидел именно то, что ожидал. Надо сказать, что в этот раз у меня уже был не самый низкий “научный” уровень среди взрослых посетителей, так что я могу дать свое законное видение происходящего. О регламенте. 10 минут (7+3 на вопросы) было очевидно мало, потому как участники минут пять только готовились. Володя был десятым в очереди, говорил много умных слов и его начали подгонять. Ожидаемо. Общий уровень работ низкий, понравились мне три. Две сугубо научные, без всей этой ерунды типа веб-сайт за 15 минут (ну нет в этих сайтах ничего научного и практической ценности они не представляют!) и работа Володи (вебморда к опенковскому девайсу сетевой направленности, добротная практическая часть и хорошее внедрение). С моей точки зрения, жюри (в лице одного человека, забыл имя, к сожалению) задавало несколько некорректные вопросы, а Володя не смог расставить точки над “и”, потому как его все торопили. Попытался взять ситуацию в свои руки, но меня оперативно заткнули. В общем, остался неприятный осадок. Я должен заметить, что напрямую к работе Володи отношения не имею. Но я могу оценить, сколько в нее было вложено усилий. Очевидно больше, чем в прочие показанные показанные сайты.

Сериализация в процессе

Перелопатил кучу кода. Со стороны Django все максимально просто, там буквально пара изменений в json-сериализаторе и получаем plist-сериализатор. Вот с Cappuccino посложнее будет, там никакой объектной модели готовой нет, надо все писать с нуля. Стараюсь делать код более-менее похожим на CoreData, заворачиваю магию через KVC. В принципе, единственную сложность пока составляют 1-M и M-M зависимости, которые надо вытягивать так, что б не блокировать UI. Лениво, т.е. Сейчас пробую применить подход прокси-классов (прокси знает, кого он представляет по имени модели и первичному ключу), которые будут лениво фетчить модель и потом проксировать все селекторы…

2010-00-24 20:09:09.234 Cappuccino [info]: Registered class <TIProject 0x000171> for tracker.project
XHR finished loading: "http://localhost:8000/sync/tracker.project/".
2010-00-24 20:09:09.343 Cappuccino [info]: instantinated model <TIProject TEST> with pk TEST
2010-00-24 20:09:09.346 Cappuccino [info]: Registered class <TIGroup 0x00016f> for auth.group
2010-00-24 20:09:09.349 Cappuccino [info]: set description -> A test project
2010-00-24 20:09:09.352 Cappuccino [info]: set lead -> <TIModelProxy for <TIUser 0x00016d>:1 (unresolved)>
2010-00-24 20:09:09.355 Cappuccino [info]: set maintainers -> <TIModelProxy for <TIGroup 0x00016f>:1 (unresolved)>,<TIModelProxy for <TIGroup 0x00016f>:2 (unresolved)>
2010-00-24 20:09:09.357 Cappuccino [info]: set title -> Test Project
2010-00-24 20:09:09.359 Cappuccino [info]: set watchers -> 
2010-00-24 20:09:09.362 Cappuccino [info]: decoded <TIProject TEST>

Еще я заметил, что firefox и chrome болт ложили на “debugger;”, так что я снова вернулся к отладке в safari.

Sayonara RESTful API, welcome P-Sync!

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

Первые мокапы я начал делать на базе RESTful API, в целом, хорошего подхода для проектировки веб-API вооще. Но сегодня я заметил, что и на сервере, и на клиенте у меня практически идентичный код для сериализации-десереализации моделей и хуки на разные действия с ними. И подумалось мне, что это не хорошо.

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

Эх, мне бы еще CoreData в Cappuccino, вообще бы ляпота была ^_^

Баш мотивирует

  • Байда: видел это "отладь кодэ, отладь кодэ, сука!"
  • Farcaller: видел
  • Байда: зачет
  • Farcaller: отличый мотиватор
  • Байда: не пизжу, реально я сидел, хуйней маялся, не хотел чистить код от ликов
  • Байда: а тут оно, на баше
  • Байда: чуть со стула не упал

IT Jam

Наконец добрался домой, причем в достаточно трезвом состоянии для написания постов ^_^. Ну что, Open your eyes!

Сегодня весь день прошел на волне организованного циклумом IT Jam. С самого утра, выпив в 9:30 кофе в коффетайме на КПИ, я выдвинулся к месту проведения конференции. В качестве группы поддержки нас с @darkproger‘ом сопровождали @__thumberlina, @fcserg и @rilian.

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

Выступили мы на этот раз достаточно неплохо. Не было смазанностей с листанием слайдов, раскрыли все побочные темы, почти ровно уложились в отведенное время. Я доволен.

К сожалению, последующие рассказы (особенно Вадима Зимина и Тараса Товченко) мне послушать не удалось. По началу отвлекали другие люди, а потом мы банально ушли обедать в “Дрова” (а @rilian так и не вернулся с обеда).

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

Ну а потом был афтерпати. Уже привычные сегодня косяки со звуком чуть не добили меня в очереди за пивом (нездоровый подход делать громкость такой, что начинаешь ощущать вибрацию через пол!), но потом мы отлично посидели (thx Прожеру за оперативно стянутую коробку пиццы и бутылку колы) с нашим коллективом (за вычетом @rilian’а, но с Тарасом и подошедшим @zyafa’ой). Хорошо так выпили с Байдой (когда он успел выпить четыре бокала? Решительно не понимаю, но мы пришли к выводу, что визуализация звука похожа на OP из トラドラ).

Отдельное спасибо Александру за вычитку поста.

Об ООП в паскале

  • Farcaller: "решение элементарно — достаточно возбудить исключение"
  • Farcaller: возбуждают женщин, исключения вызывают!
  • Rilian: try ( . ) ( . )
  • Rilian: finally o_o
  • ...
  • pfactum: сі плюсплюс смокче і курить
  • pfactum: try (|)
  • pfactum: catch 8===o-
  • pfactum: throw 8===o-

Sharecode

Я очень давно и долго искал средство для быстрого шаринга кода. Не нашел, и решил написать свое :)

Основная цель – разобраться наконец таки с CoreData, а что может быть лучше для изучения API, чем Python? Так что свежие темплейты PyObjC для Xcode в руки, и вперед, к победе!

Пункт первый. CoreData не настолько страшная. Даже вообще не страшная.

Пункт второй. Магия интеграции Python’овых классов в ObjC рантайм поразает воображение.

Пункт третий. BWToolkit рулит.

Пункт четвертый. Pygments офигительно рулит.

Итого, всего за полтора часа был написан костяк приложения, который умеет хранить сниппеты, и делать подсветку по заданному типу кода. И еще drag&drop на иконку в доке работает. В планах: добавить шаринг по бонжуру и посмотреть насколько стабильно CoreData шарится через Dropbox, добавить способы быстрого получения сниппетов (it’s all about speed, anyway), спрятать иконку из дока (и добавить в менюбар) – я предпочитаю такой режим использования. Ну и еще воз и маленькая тележка, я что-то никак всерьез с Cocoa не поиграюсь, так что теперь можно устроить основательное копание во всех апи.

Репа на гитхабе: http://github.com/farcaller/Sharecode/

Тестовый билд (0.0.1alpha): Sharecode.app.zip

Safari XPath

I’ve finally got tired of Firefox and XPather, so I did a quick investigation and wrapped up a similar plugin for Safari.

UPDATE: version 1.2 now supports OSX 10.6 and latest Safari

Safari XPath allows you to get XPath expression for any DOM Node, or query nodes by XPath.

Download it from here. To install, unpack and move bundle to ~/Library/Application Support/SIMBL/Plugins/. And yes, you need to have SIMBL installed.

Now, restart Safari and look for “XPath” in the context menu. It’s pretty obvious from there.

Questions, suggestions?

C is a very low-level language, to the point that you can almost see the assembly code behind C if you stare long enough at the screen (in my experience, however, when that happens, you’re just seeing things and should instead go home and have some rest).Trolltech Labs Blogs

CoreData

CoreData на ифоне – вроде бы замечательный фреймворк с широкими возможностями… Но при портировании допущено столько ошибок! Я за сегодняшний день познакомился с десятком кодов ошибок Cocoa (я про коды ошибок не слышал со времен своего детства и Дельфей!). Код падает рандомно, совершенно не понятно, что можно делать, а что – нельзя. Ну и до кучи – кривая документация и примеры (более того дефолтный шаблон CoreData-приложения вообще сломан). Fail.