Install this theme

Posts tagged: programming

Bitten и iOS

Свое таки иногда писать так лень. Поскольку проект менеджится в trac, решил поиграться с bitten на предмет того, что он умеет делать.

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

 
<build description="Build develop branch"
      xmlns:sh="http://bitten.edgewall.org/tools/sh">
 <step id="Clone git">
   <sh:exec file="/usr/local/bin/git-upsync" args="myproj git@dev.server.net:myproj"/>
 </step>
 <step id="Build project">
   <sh:exec executable="xcodebuild" args="-target Myproj -configuration Debug -sdk iphonesimulator4.2" dir="myproj" />
 </step>
</build>

По этапам: git-upsync это просто враппер вокруг гита, потому что писать свои команды для bitten пока лень. Выглядит так:

#!/bin/bash
if [ -d "$1" ]; then
	cd "$1"
	git reset --hard HEAD
	exec git pull
else
	exec git clone "$2" "$1"
fi

xcodebuild собственно выполняет сборку (не забываем6 что ibtool хочет для себя гуевую сессию).

На этом этапе получаем готовый контроль сборок. Но можно еще и бысто и дешево получить unit-тесты на базе gh-unit.

К моей большой удаче, gh-unit умеет работать с Hudson (путем скармливания ему xml отчетов). А эти отчеты можно легко превратить в bitten’овые xml’ки через xmlstarlet.

Если проект полностью причесан к консольному запуску тестов через Makefile (и RunTests.sh), то модификаций сделать надо не так уж и много.

Модифицированный RunTests.sh. Схема трансформации (положить в корень проекта). Конфиг вот такой:

<build description="Build develop branch"
      xmlns:sh="http://bitten.edgewall.org/tools/sh">
 <step id="Clone git">
   <sh:exec file="/usr/local/bin/git-upsync" args="myproj git@dev.server.net:myproj"/>
 </step>
 <step id="Build project">
   <sh:exec executable="make" args="test" dir="myproj" />
   <report category="test" file="${basedir}/myproj/build/tests.xml" />
 </step>
</build>

Все понятно? Развлекайтесь, а я пошел биттен к твиттеру прикручивать ^__^

Head-hunting (the Mac way)
  • xxx:

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

  • yyy:

    Хм, буду иметь в виду. Где ты их находишь? :)

  • xxx:

    Рассказываю проверенный метод: берешь mb467, едешь на ВДНХ и ловишь

  • того кто готов кодить за макбук :

    -D

[М@Т inside] @darkproger и gcd
  • Darkproger:

    я могу на субботу портануть libdispatch в openbsd и показать как оно работает

  • Darkproger:

    вместе с clang и блоками

  • Darkproger:

    если успею - синтеграчу с шедулером в ядре

  • Farcaller:

    ым

  • Farcaller:

    коммент "ты блять жжош" не передает всей степени моего восторга :)

sceptic> А чем можно в шелле перевести dec -> hex?
nazgul> sceptic: echo “1024” | awk ’ { arr=”0123456789abcdef”; a=$1; r=”“; while (a>0) { r=substr(arr, a%16+1,1) r; a=int(a/16); }; printf “%s\n”,r }; ’
nazgul> sceptic: с нулём только косяк будет. но там поправить несложно
hekp0maht> $ printf “%x\n” 1024 
400 
nazgul> hekp0maht: победил =)
Истина – она где-то рядом!
С миру по нитке

Сегодня поприсутствовал на заседании малой академии наук, слушали потенциальных молодых ученых. Для тех, кто не в курсе - МАНы проводятся среди учащихся 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-