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

June 26, 2011

Node.js is bigger than Rails

Most of the real world companies will skip Rails and go straight to Node, like they skipped all the DVCS debate and went straight to Git.

One might expect Rails to be a clear winner for the foreseeable future, now that it is seeing a widespread adoption and we are no longer discussing whether it's ready for the enterprise.

However, what everyone is talking about instead is Node.js. One of the reasons Node is big is that JavaScript itself is big, and a completely JS-based web stack amplifies the effect. Besides, geeks are loving it, and JavaScript is now the cool kids' language the way Ruby had been before. Lean MVC in JavaScript? Backbone. Cocoa in JavaScript? SproutCore. Lean JS minifier? Check, and they're laughing at the “gazillion lines of code” of Google Closure Compiler. VMware in JavaScript? That's sort of possible, too.

Companies from hosting providers to traditional PHP-centric shops are now looking into Node. The clients of mine that haven't adopted Rails yet seem to already be more interested in Node than in Rails. And as we've learned recently, even Microsoft is sponsoring the Windows port of Node.

Node seems to be getting the kind of traction Git has: first noone knows about it, then one day everyone is talking about it, and then everyone is using it. We're not there yet, but Node.js looks like the best bet in the coming years.

June 24, 2011

News Weekly: WWDC2011, GitHub for Mac, SocketStream, iA Writer

1. Apple выложила видеозаписи WWDC 2011. Если вы iOS-разработчик, их необходимо посмотреть: половина всей нетривиальной информации про iOS и Mac обычно бывает только в видео с WWDC. http://developer.apple.com/videos/wwdc/2011/ — 109 сессий, 90 часов видео, из них лично мне можно не смотреть всего 4, и то лишь потому, что я не интересуюсь OpenGL.

2. GitHub выпустил Git-клиент для мака — первый клиент для системы контроля версий с достойным интерфейсом уровня Tweetie/Reeder. https://github.com/blog/878-announcing-github-for-mac. Также интересно то, что он написан на Chameleon — реализации iOS API для Mac.

3. https://github.com/socketstream/socketstream, «a phenomenally fast real-time web framework for Node.js». Первый full-stack framework а-ля Rails для single-page client-side приложений. Покрывает все от структуры директорий и упаковки asset'ов до namespacing'а серверных API.

Взаимодействует с сервером через веб-сокеты, упраздняет медлительные HTTP-запросы, имеет pub/sub.

Включает любимые нами CoffeeScript и Jade. Что закономерно, из коробки предлагается Stylus вместо привычного LESS. Сможет ли Stylus вытеснить LESS/SASS так же уверенно и окончательно, как Jade вытеснил HAML, еще не ясно, но стоящие за ним ребята из learnboost — сильный аргумент.

Текущая версия 0.1.01. Разработка выглядит столь же серьзно, как у Node.js; прошлые версии имели номера с 0.0.1 по 0.0.58.

4. “I’m pleased to announce that Microsoft is partnering with Joyent in formally contributing resources towards porting Node to Windows.” (Node.js blog)

5. iA Writer — классный текстовый редактор в стиле WriteRoom, только в 10 раз более polished. Помимо великолепного дизайна и UX, чего стоит одна только поддержка Markdown. $18, покупать не раздумывая. Я мечтаю, чтобы мой блог выглядел как экран iA Writer (скриншот).

6. http://blog.documentcloud.org/blog/2011/06/code-drop-visualsearch-js/ — очередная прикольная штука от DocumentCloud. Едва ли требуется еще реклама; все, что делают авторы CoffeeScript и Backbone.js, заслуживает не меньшего внимания, чем новые операционки Apple.

7. Optimizely Open-Sources Guiders.js, a Library to Help You Guide New Users.

Несколько интересных статей:

* Why is JSON so popular? Developers want out of the syntax business

* Nevada Passes Law Authorizing Driverless Cars

* My Life as an Undocumented Immigrant

April 22, 2011

Работа для (настоящих или будущих) клевых суперпрограммистов

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

Кто вы: действующий или будущий Rock Star Developer

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

Примерно сколько мы готовы платить:

15 тыс. совсем junior intern'у;
20-30 тыс. тем, кто успешно двигает проекты вперед;
40-60 тем, кому можно отдать проект и забыть;
70-120 тем, кто может делать самые сложные проекты, жонглировать несколькими заказами, быть источником инновации и успешно вести компанию вперед.

Если вы делаете работу с любовью и качеством, все остальное (график, занятость, возраст) не важно. Офис находится на Демакова, 27. Разумеется, вы можете работать из дома, если получается.

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

Кто мы

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

Когда собрались публиковать вакансию, поняли, что компании не хватает названия. Решили называться the Octomonkey Group. Разумеется, сайта тоже пока не придумали — и без этого работы выше крыши.

Мы занимаемся всем современным, что попадается под руку. В данный момент это:

* iOS (конечно же)
* немного Android'а
* немного разработки под Mac
* Web (разный — от jQuery + Node.js до нормального удобоваримого PHP; есть один заказчик на PHP/Drupal, но о нем мы предпочитаем не упоминать)

Что делать дальше

1. Хотите продолжить общение? Пишите мне на andreyvit@gmail.com.

2. Знаете кого-нибудь, кому могло бы быть интересно? Отправьте им ссылку!

См. также: эта вакансия на rabota.ngs.ru.

March 26, 2009

Софтовый шоппинг

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

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

Эти три рынка совершенно различны. Важно понимать, на какой из них вы хотите попасть с вашим товаром (или мазагином).

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

Разумеется, часто так и бывает. Но не нужно забывать и про другие варианты. Например, возьмём MacUpdate Promo: большие (вроде 50%) скидки на программы, которые длятся один день (каждый день продают новую программу). Я подписан на их рассылку, и там регулярно пробегает софт, который очень хочется купить.

Или, например, по статистике подавляющее большинство купленных в App Store iPhone-приложений никогда не запускают второй раз. Когда Apple рекомендовали цены вроде $0,99 или $3,99, думаю, они прекрасно понимали, что делают: магазин, в котором люди будут наслаждаться покупкой, а не удовлетворять возникшие потребности.

Кто-то из блоггеров недавно сравнивал iPhone-приложения с шоколадными батончиками: люди считают нормальным потратить бакс на Snickers и съесть его за две минуты, точно так же нормально потратить бакс на игрушку и поиграться в неё пять минут.

Для шоппинга очень важен user experience, поскольку на самом-то деле у пользователя нет большой потребности. Он сбежит, если вы не будете его развлекать и удерживать. «Самое популярное», «еще часто покупают вот это», отзывы, заказ в один щелчок — всё это вводит пользователя в flow state, при котором он получает удовольствие, а вы — деньги.

В этом часть гениальности iTunes: он делает шоппинг до безобразия простым и неотделимым от прослушивания музыки. Apple успешно развивает рынок в направлении «шоппинг — часть нормального использования софта». В iPhone OS 3.0 можно покупать дополнения из самих приложений; на сцене мы видели демку Sims 3, где в процессе игры можно докупать коллекции вещей, и демку многопользовательской стрелялки, где перед боем можно купить rocket launcher и другой полезный арсенал (за реальные деньги! вы только подумайте!)

Не знаю, как вы, а я считаю это гениальным. Не пропустите возможность встроить шоппинг и в ваши программы. Может, маленькие милые плагинчики? Мелодии или темки? Что-то, что нафиг не нужно пользователю, но зацепит его с первого взгляда. И не забудьте делать некоторые товары более удачными покупками с помощью скидок, featured items, editor’s choice, рейтингов.

(Разумеется, товары не обязаны быть платными. Вы можете зарабатывать деньги за счет популярности или рекламы, или же предлагать смесь платного и бесплатного. Поэтому вас, разработчики open-source, данный метод тоже касается: ничего так не увеличивает популярность, как каталог почти никому не нужных фенечек, которые можно поставить одним кликом.)

March 09, 2009

Sneak Peak: YourSway Builder

Наша компания отличается еще и тем, что пользуется самописной системой сборки. Когда-нибудь мы доведем её до продукта и будем предлагать другим, как CrashKit, но пока что YourSway Builder — это приватное удовольствие.

Зачем писать своё, когда в мире есть BuildBot’ы и CruiseControl’ы? Чтобы не париться с их поддержкой. Каждая существующая система предполагает, что вы держите настроенный клиент и сервер, и готовы с ними возиться каждый раз, когда вам нужно изменить способ сборки или начать собирать новый проект.

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

На любом компьютере можно запустить клиентское приложение, которое сможет собирать любые проекты, скачивая все нужные пререквизиты. У нас каждый член команды может запросто запустить сборку любых проектов на своем компьютере из своих репозиториев (ибо при использовании DVCS у каждого может быть свой репозиторий).

На страничке в Backpack есть несколько скриншотов, а также описание нашего vision’а. Повторюсь, что в YourSway Builder’е пока есть только то, что было нам совершенно необходимо. Мы им пользуемся во всех проектах, но для публики он еще не готов.

А что вы думаете по поводу билд-систем? Чего вам в них не хватает? В каком виде YourSway Builder был бы вам интересен?

March 03, 2009

Меньше ветвлений!

Одно из правил Таранцова гласит: в программе не должно быть большого редко исполняющегося куска кода.

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

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

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

1. Увеличиваются затраты на автоматизированные тесты и на QA.

2. Рано или поздно вкрадется бага, не отловленная тестами и не пойманная вашим QA-процессом. (Например, всё рушится только под Windows Vista x64, установленной на FAT32-раздел.)

3. Продукт с этой багой вы можете поставить заказчикам и не узнаете о ней, пока заказчик с ноутбуком под Windows Vista x64 на FAT32 не запустит ваш продукт вдали от Интернета.

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

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

Из нашего правила следуют два важных практических соображения.

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

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

CrashKit

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

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

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

В ближайшее время мы введем в строй поддержку целой кучи языков, так что на чем бы вы ни писали, смело шагайте на crashkitapp.appspot.com, оставляйте свой e-mail, и мы в течение месяца пригласим вас участвовать в бета-тестировании.

(Если вам интересно, CrashKit написан на Google App Engine. Он уже некоторое время используется в приложениях, которые мы поставляем клиентам. Хорошо работает поддержка Java/OSGi, в разработке поддержка Java/Servlets и Python/Django, после них будет Ruby on Rails и что-нибудь еще, чего захотят пользователи.)