17 апр. 2011 г.

Ковыряние. Eventmachine vs Erlang.


Завтра у меня *большая и важная контрольная* по конструлям потому я зачем-то страдаю херней и решил наконец напостить в бложик. Тем более что есть о чем.



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

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

Helloworld'ы на eventmachine это действительно просто и сравнительно понятно. Сложная логика быстро превращается в спагетти из callback'ов. С этим приходиться бороться и даже иногда получается. Впрочем это проблема не столько Eventmachine, сколько event-based подхода вообще – тем же страдает Node.js (впрочем Node еще много чем страдает :) )

Поскольку цели сделать финальный вариант не было, а OTP я не знаю, то решил без него. Заодно Erlang лучше "распробовал".

Erlang вполне ожидаемо выиграл и по производительности (почти линейно размазывается по ядрам, можно еще по нодам, но я не пробовал) и по прямолинейности кода (отсутствию callback'ов и конечных автоматов). Синтаксис по-началу заставляет тосковать по оному в Haskell, и похоже не только меня. Но быстро привыкаешь. Есть ощущение что по-дороге изобрел немного OTP.

Когда уже закончил с Erlang версией сервера увидел Revactor. Можно лечить спагетти ценой ограничения кол-ва поддерживаемых платформ (только Ruby 1.9+), но императивную семантику Ruby все равно в мешке не утаишь. Производительность тоже, хотя 1.9 в этом плане получше. Насколько я понял автор сабжа полузабил и ушел делать Reia.

При желании перед Ruby скрыптами можно поставить load-balancer и получить горизонтальную масштабируемость, еще через это можно обновлять код сервров за балансировщиком по-очереди, создавая видимость горячей замены кода. Но это более костыльное решение чем большой и счастливый Erlang всему. Тем более, что при использовании OTP эти ништяки получаются совсем сами собой (без OTP надо следовать некоторым соглашениям).

Для полноты картины надо поиграть в асинхронную монаду (Haskell) и продолжения (Scheme). Предполагаю, что Haskell будет удобнее для front-end'а, Erlang для back-end'а. А Scheme неплоха и там и там, но медленнее обоих.

З.Ы.: У меня окончательно вызрела идея давно обещанной библиотеки анимации на JS. Надеюсь доживет в голове до лета.
З.З.Ы.: Старый добрый "Пушистик" получил воторое рождение на HackDay.
З.З.З.Ы.: Быть может скоро напостю про курсовик и Android vs iPhone

2 дек. 2010 г.

Машграфы


Тетрис – финал

Тетрис – поиск стиля

Грибной лес – почти финал

Грибной лес – второй вечер работ

Финал Леса:


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

Второго нет, потому что только самый обычный успел.
Четвертый – рейтрейсер. Дали в этот понедельник. Еще не брался.

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

Таймлайн вида: "Тетрис, большой перерыв, Распознование людишек, перенос срока 2 раза, небольшой перерыв, Лес с грибами, почти отсутствие перерыва, Рейтрейсер" какбы намекает на некоторую недодуманность дедлайнов/заданий. Стандартный срок 2 недели. Надо либо задания проще (в том году были проще), либо сроки изначально лучше продумать.

На время грибочков прям таки на неделю из жизни выпал, правда с шейдерами никто ковыряться не просил, да и опечатки за которыми я гонялся 1,5 дня с valgrind'ом исключительно мой fail.

16 нояб. 2010 г.

Псевдо-литературный высер

Он резко встал опрокинув случайность момента. Случайность неистово закричала, угрожая вызвать милицию. Но было уже поздно – отовсюду лезла вопиющая серость. Так случайность момента стала повседневной обыденностью.

25 июл. 2010 г.

LastCover alpha

Как я и обещал – я боле-менее допилил LastCover (потом лучше допилю) и выложил сорцы.
При этом я убил двух зайцев: я не просто выложил сорцы, я наконец заюзал github и собственно git. Тащем-то сугойно :)

15 июл. 2010 г.

Textual defecation

Что-то давненько я не ходил в бложик по-большому :)

Итак: на кафедру АЯ – попал, притом на желанный семинар, на отличные концерты (DSO и Xandria) сходил (кому интересно – в интернетах полно отчетов и фото), сессию закрыл (как ни странно чем меньше парюсь, тем лучше сдаю), на работу устроился (пограммистом под iOS, чсх – выцепили меня в контактике – вот уж от чего пользы не ожидал).

Заимел в пользование MacBookPro 13" (рабочий, охуительный девайс) и бас Ibanez ^_^ (от знакомых, видимо куплю с зарплаты).

Ощущения от MacOS X – вцелом все удобно и хорошо, но не без проблем. Действительно почти идеальная ось для повседневных задач, большая часть неудобств была связанна с непривычностью, теперь комфортно.
Самый шикарный охуец: нету никакой галки чтобы ноут не засыпал при закрытии крышки (но если подключить моник – не засыпает). Решинем стала InsomniaX, несчастная софтина устнанавливает модуль ядра, что какбы намекает на степень костльности решения.
Guake мне заменил Visor. Отдельно отмечу Better Touch Tool, которая позволяет по-настоящему утилизовать возможности тачпэда. Quicksilver какой-то глючный, да и спотлайт его почти заменяет. Доставляет остутствие Cmd-X в Finder от того, что это противоречит философским воззрениям Ябла :)
Не хватет полноценного менеджера пакетов, впрочем есть сторонние решения.

iTunes тема отдельная, ибо количество анальных гвоздей зашкаливает, особенно в момент подключения я-планшетки. Попробовал переползти на Songbird, тот оказался тормозным и глючным (xulrunner жеж), но оч классно интегрировался с last.fm и прочими около музыкальными интернетами (xulrunner жеж). Хныкая уполз обратно к Тунцу. И тут меня поджидал ещё один охуец - вместо плагнов и скриптов большинство обвесов являет собой отдельные софтинки висящие в системе и взаимодействующие с тунцом через его pubic API (кстати очень многоие приложения для мака могут управляться Apple Script'ом как раз через подобный API). Некоторые умеют запускаться и убиваться вместе с тунцом, что приятно.
Нашел маленький, уютный скробблер, который так же умеет выводить нотификации. Нашел ещё кучу всякого прикольного, но бесполезного для меня.
А вот со стягиванием обложек все как-то очень грустно – из всех что я нашел – только один платный умеет стягивать с ласта обложки для моей (видимо слишком экзотической для стягивалок с амазона) коллекции, но он платный и перегруженый. Потому взялся вечерами пилить свой. Через час полностью заработал, но пока управляется правками кода, а допиливать некогда, как только доведу до адекватного состояния - выложу на гуглокод.

Да, с инструменатами для разработки проблем не обнаружено, многое уже есть в пакетике для девелоперов, чего нет – нетрудно доставить, unix жеж.

Из того, чем духовно обогатился могу посоветовать: Caprice, Carnival in Coal, The Vision Bleak, Mr. Nobody, Star Trek TOS, Первые книги про Ведьмака (Анжей Сапковский), Игра про ведьмака (The Witcher)