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

Showing posts with label notable. Show all posts
Showing posts with label notable. Show all posts

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, данный метод тоже касается: ничего так не увеличивает популярность, как каталог почти никому не нужных фенечек, которые можно поставить одним кликом.)

February 04, 2009

Совместимость

Название этой операционной системы, созданной маленькой компанией в конце 80-х и установленной сегодня на 8% компьютеров мира, программисты под Mac и iPhone регулярно вспоминают, набирая префикс NS у названий системных классов.

Nextstep 1.0 появилась в 1989 году после трех лет разработки, имела полностью объектно-ориентированное API с архитектурой model-view-controller, имела ядро Mach и была Unix’ом. Теперь она называется Mac OS X. За прошедшие 20 лет дизайн её API, теперь именующимся Cocoa, мало изменился: всё те же NSApplication, NSView, NSDocument успешно лежат в основе сегодняшних красивых анимированных Mac-приложений. Исходники GNUstep, реализующего Nextstep API 1993 года, можно в наши дни читать вместо (недоступных) исходников Cocoa.

Пользовательский интерфейс Nextstep включал богатый drag’n’drop между приложениями, Dock, инспекторы, общесистемные сервисы, позволяющие приложениям пользоваться услугами друг друга, и «бандлы» — директории, выглядящие как файлы для пользователя и содержащие приложение со всеми зависимостями, которое достаточно просто скопировать на жесткий диск для установки. Всё это знают и любят сегодняшие пользователи маков.

Как относятся в Apple к совместимости? Плохо. Первую революцию они сделали в 2001 году с выходом Mac OS X: старые приложения теперь могли запускаться только в приложенной виртуальной машине, эмулирующей Mac OS 9 (при этом, естественно, выглядели неприглядно и медленно работали). В 2005 году эмулятор почил с выходом OS X 10.4 (итого: 4 года на портирование старых приложений).

Для портирования людям был дан Carbon — C API, почти повторяющее API старой Mac OS 9. Carbon-приложения всегда оставались нежеланными гостями на компьютере: look’n’feel интерфейса OS X, как истинно объектно-ориентированной ОС, реализован в коде Cocoa (да, там можно изменить поведение стандартных элементов управления, просто унаследовавшись от них). Carbon представлял собой еще одну реализацию примерно того же самого интерфейса.

Вторую революцию Apple сделала в 2007 году: Carbon объявлен устаревшим и не будет поддерживать 64-битные приложения. Кадр года: Adobe переписывает Photoshop на Objective C. Называется, а вам слабо такое устроить?

Что приобретено взамен совместимости? Общий уровень приложений платформы: они все обновляются и соответствуют современным стандартам. Это работает по спирали: от более высокого качества приложений увеличиваются ожидания пользователей («никто не запустит программу без большой красивой иконки»), от высокого уровня ожиданий растет качество приложений. Apple создала платформу, в которой качество является более значимым (по сравнению с другими платформами) конкурентным преимуществом, и от этого создатели приложений больше инвестируют в качество.

Вернемся к Nextstep и заметим, что Cocoa является примером архитектуры, которая работает настолько хорошо, что её не нужно менять. Совместимость — не препятствие, так что эксперимент довольно чистый.

Зато NeXT/Apple серьезно относятся к преемственности навыков пользователя. Метафора пользовательского интерфейса Nextstep/OS X не меняется уже 20 лет. Внешний вид окон OS X не меняется 8 лет. Интерфейс приложений развивается эволюционно; Photoshop переписали, но выглядит и работает он так же; вышла новая версия iWork, но она только местами отличается от старой.

Что происходило всё это время в параллельном мире? 1989 год — релиз Nextstep 1.0 — вышла Windows 2.0 без перекрывающихся окон. 1995 год — вышла Windows 95, прощай, все старые навыки. 2001 год — вышла Window XP, теперь вы не узнаете свою панель управления. 2002 год — Microsoft выпускает .NET Framework 1.0, Desktop-приложения на котором до сих пор никто не пишет. Кстати, писать Desktop-приложения вообще не на чем: MFC — поганое уродство, всё остальное до жути низкоуровневое (Win32 API отличается от Cocoa как ассемблер от Питона).

2007 год — вышла Windows Vista, прощайте, привычки, теперь всё в новом месте. Зато спиздили еще чуть-чуть гуйни мака, сделали мигающий экраном костыль для безопасности приложений (на маке privilege elevation в приложениях к этому моменту уже много лет как нормально ненавязчиво работало). Вышел Office 2007, его нужно изучать заново. 2009 год — Microsoft в Windows 7 меняет Taskbar на Dock и хвалится этим достижением в блоге. Кстати, Office 2007 Ribbon Bar будет доступна всем приложениям, теперь вам придется заново изучать не только офис.

Зато вы всё еще можете запускать DOS-приложения на Windows Vista. Реймонд Чен в своём блоге высоко воспевает культуру совместимости в Microsoft. Но стоит ли она выпуска инвалидских продуктов? Всё дело в крупно-корпоративном рынке, которому его старые приложения ценнее качества ОС. Возможно, во времена Windows 95 совместимость была необходима и для пользователей: графические интерфейсы стали массовыми именно после Windows 95, и имей она проблемы, этого могло просто не произойти.

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

Мораль два: нет так быстро всё меняется в ай-ти; команды под руководством великих людей создают технологии, живущие десятилетиями.

Мораль три: культура качества — ценнейшая штука для любой платформы; без неё корпорации не способны выпускать хорошие продукты, даже если на рынке есть образцы для подражания.

August 09, 2007

A single book I wish I had earlier

Не так давно я купил книгу, которую хотел бы прочесть еще классе в девятом: С. А. Орлов «Технологии разработки программного обеспечения» (ISBN 5-94723-820-9).

Я вообще люблю хорошие технические книги русских авторов, но настолько адекватного изложения сложно найти и в англоязычной литературе.

— исчерпывающее изложение методов и процессов, включающее и методику Джексона (ассоциирующуюся у меня со словом ancient), и XP, при этом отдельная глава посвящена UP;

— очень качественное объяснение принципов модульного проектирования (начиная с базовых понятий вроде cohesion/coupling) без привязки к ООП и с простыми примерами;

— описание количественных метрик (вкупе с кратким изложением уровней CMM — как бы вы к ним ни относились);

— введение в ООП и в проектирование баз данных (качественно и кратко);

— use case оставлено без перевода;

— примеры на Ada 95 :).

Недостатки:

— компонентный подход раскрыт неудачно (несмотря на почти-главу, ему посвященную);

— перевод английских терминов не соответствует общепринятому — я полагаю, в 2004 году, когда подготавливалось 3-е издание, refactoring уже следовало перевести как «рефакторинг» (хотя я и испытываю сладкую ностальгию по overload, переводимому как «совмещение» издательством «Мир» в стародавние времена);

— акценты в (также исчерпывающем) описании тестирования не соответствуют моим ожиданиям, что, возможно, объясняется давностью написания книги.

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

August 06, 2007

Почему важно быть хорошим

Нечасто можно построить простую математическую игру, позволяющую анализировать глубокие философские вопросы. Тем не менее, такое бывает: Prisoner's dilemma (англ. Википедия, via NeXT).

Суть математического эксперимента: полиция арестовывает двух подозреваемых. Доказательств для суда недостаточно, поэтому их разделяют (так, чтобы они не могли общаться) и каждому предлагают дать показания против другого. Условия следующие: если оба дадут показания, то каждого осудят на 5 лет. Если даст показания только один, то его сразу отпустят, а второго осудят на 10 лет. Если же не даст показаний ни один, то оба отсидят по полгода и выйдут.

В отличие от других игр, здесь оптимальный ход игрока не зависит от возможного хода другого и состоит в даче показаний («предать»). Действительно, рассмотрим первого игрока: если второй предаст, то и первому нужно предать (чтобы снизить срок с 10 до 5 лет); если второй не предаст, то первому опять же лучше предать (чтобы выйти сразу, а не через полгода).

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

В турнире, проведенным между компьютерными стратегиями, самой успешной стала стратегия, на первом ходе не дающая показания, а далее повторяющая ходы соперника. При введении в игру «шума» (небольшой доли дезинформации) еще более успешной становится «прощающая» стратегия, которая на хороший (без предательства) ход соперника отвечает хорошим ходом, а на плохой всё равно с небольшой вероятностью может ответить хорошим.

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

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

2. Небезответная. Успешная стратегия должна мстить.

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

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

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

Чтобы получить лучшие результаты, чем стратегия «око за око, зуб за зуб», какие-то стратегии должны пожертвовать собой (иначе говоря, более высоких результатов можно добиться, только если группу стратегий интересует победа хотя бы некоторых из них).

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

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

(Подробнее см. в оригинальной статье на Wikipedia, ссылка на которую приведена в начале.)

August 04, 2007

Jing-n-Dash, iPhoney and printing Web pages

Самая большая находка месяца: www.jingproject.com — программа для захвата скриншотов и видео с экрана, сжатия в SWF и расшаривания на www.screencast.com (но можно сохранить и в файл), для Mac OS X и Windows. Пока бесплатная. Ни единой настройки (впрочем, вру — есть галочка «запускаться автоматически» и выбор между облачком в углу и иконкой в статусной строке у Mac'а). Запись скринкастов, созданная на небесах.

Далее, есть Dash — нечто вроде Windows-аналога маковского QuickSilver. Платный, в отличие от макового, но, пока нет релиза, платный не сильно ($20).

iPhoney — эмулятор веб-браузера в iPhone (для Mac OS X). Говорят, достаточно точный.

Совет для владельцев Mac: как напечатать часть Web-страницы. Легко: скопируйте нужный фрагмент страницы в буфер обмена, вставьте в TextEdit и распечатайте. Всё важное для печати оформление, включая картинки, будет сохранено.

Сегодня я решил, что надо бы попробовать применить Apple Loops, занимающие на диске моего ноутбука около 2 Гб. Запустил GarageBand и записал простенькую песенку. Эх, до Smoke on the Water ей далеко. :) Тем не менее, интересный опыт, рекомендую попробовать (а то иначе получится, что место у вас пропадает даром).

Недавно вышел Microsoft Remote Desktop Client for Mac 2.0 beta. Universal Binary уже стоит того; на мой взгляд он стал лучше CoRD — последняя часто рисует с ошибками, что совсем уж unacceptable, и не перенаправляет звук, что для меня тоже близко к недопустимому.

Наконец, я зафотал свое рабочее место. Всё на фотографии, кроме стула и бардака под столом, могу смело рекомендовать. (Ноутбук удобно пристроился на клавиатурной полке — для клавиатуры она слишком низкая при таком экране.)

December 16, 2006

Notable events and December's blog of the month

За прошедшее время произошло несколько важных событий.

Мы стали или скоро станем авторами самых серьёзных средств разработки для Tcl (стали), Python (скоро) и Ruby (на горизонте). Открытый проект Dynamic Languages Toolkit нашей компании принят в состав eclipse.org. Сейчас ознакомиться с ним можно на www.eclipsedltk.org, но скоро мы переезжаем.

Вы можете добавить в DLTK свой любимый язык; мы окажем вам необходимую помощь и поддержку. Где любители Lisp и Haskel?

Доклад про Dynamic Languages Toolkit принят на EclipseCon 2007, а значит, нас (в том числе и меня как докладчика) ждут в марте 2007 года в Калифорнии. Надеюсь, мы там окажемся.

Есть вещи, на которые достаточно взглянуть, чтобы понять, что вы созданы друг для друга. Так было с Macintosh. Теперь я хочу Segway. Сейчас я не готов расстаться с (по непроверенной информации) $4000, так что — в планах на ближайшие годы.

Я нашел мечту графомана. Её зовут WriteRoom, приложение для написания текста. Отличия от текстовых редакторов: Во-первых, нет концепции файлов; все созданные заметки попадают в меню. Во-вторых, не нужно вручную сохранять текст. В-третьих, название заметки — её первая строка; переименование еще никогда не было таким простым. В-четвертых, редактор можно развернуть на полный экран, чтобы ничто не отвлекало от написания.

Ничего принципиально нового, но мои писательские привычки изменились напрочь. Все посты в блог сначала пишутся во WriteRoom. Интересные мысли накапливаются там же. Я в принципе стал больше писать.

Если вы сидите под Windows, на сайте дают ссылку на некий клон — Dark Room.

Наконец, воспользуюсь случаем, дабы выбрать блог этого месяца. Это совместный проект Kathy Sierra и Dan Russel под названием Creating Passionate Users. Обязательное чтение для всех, занимающихся разработкой программ и/или проектированием интерфейсов пользователя. Каждая из редко появляющихся статей — шедевр.

Недавно я узнал, что в создании известного стодолларового ноутбука принимал участие Alan Kay. Человек, работавший в Xerox PARC и Apple, один из создателей объектно-ориентированного программирования. Его видеолекцию по пользовательским интерфейсам (1987 года) я с большим удовольствием посмотрел и всем рекомендую (могу записать на CD).

October 13, 2006

October's blog of the month

В качестве нового начинания, которое, надеюсь, приживётся, предлагается «блог месяца».

Итак. Если вы ещё не читаете блог Реймонда Чена, но при этом интересуетесь программированием, обязательно подписывайтесь. Сейчас Рэймонд работает в Microsoft, но:

Before his career at Microsoft and lasting even into 1995, Raymond Chen identified himself as "just another Linux hacker" in his Usenet sig. He is listed in the Linux kernel CREDITS file as "Author of Configure script".

Сейчас блог посвящен красивым воспоминаниям про то, почему некоторые части Windows были (и есть) реализованы именно так.

В качестве featured article я рекомендую эту, эту и вот эту.