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

September 22, 2008

Смысл и внутренний мир

Сегодня ночью, читая бизнес-линч авторства Людвига Быстроновского (по ссылке можно не ходить), я просветлился и понял огромную часть закрытого мне мира. Позволю себе зацитировать:

«Чем художник отличается от иллюстратора? Художник в первую очередь выражает свой внутренний мир. Зачастую ему даже аудитория не нужна. Иллюстратор же в первую очередь призван иллюстрировать смысл.

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

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

Люди, пишущие и рисующие непонятный бред, занимаются тем, что выражают свой внутренний мир. Они не пытаются передать смысл, поэтому смысла и нет. Здравствуйте, ЖЖешечки, профили во вконтакте и юзерпики. Для них, художников, важна самобытность и неповторимая индивидуальность, а смысл вроде как и не важен. Может, некоторых из этих создателей бреда через пару десятилетий будут считать великими писателелями-авангардистами? Может быть, стоит не спешить с оценкой их деятельности?

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

September 13, 2008

Me

Накатал «О себе» для нашего сайта. По-моему, звучит неплохо:

I'm the CTO and the lead architect of our company. 15 years have passed since I was a proud DOS user, and I've been crazy about computer programming for all this time.

My experiences range from GW-BASIC, through Assembler and standards-based C++ to Python, Ruby and Java. Among the languages I've never really used I know and appreciate Erlang, Haskell and Smalltalk, and I love Ada, which is sharing the label of my all-time favourite language with Ruby. I like writing beautiful code, and I believe that every language has its own unique style which makes the definition of "beautiful" very different for each of them.

I've lead and failed my first multiperson project at the age of 16, and I've learned a lot about managing software developments since then. It was around the same time I came to know that my favourite part of programming is called "object-oriented analysis and design".

I've switched to Mac in 2006 and never-ever-ever looked back.

Currently I'm mostly focused on Java and particularly Eclipse world, though occasionally I get involved in Python and Ruby projects or have to apply my Win32 skills to make some crazy JNIs. I've contributed the initial Ruby type inferencing code into the Eclipse Dynamic Languages Toolkit and demoed it at EclipseCon 2007. I left the DLTK team afterwards and co-founded a company which aims to create a new generation of IDEs and productivity tools for developers.

В паре мест сомневаюсь в английском, так что замечания принимаются с благодарностью.

September 01, 2008

PC = Blue Screen

Просто факт: Любой Samba-ресурс Finder отображает как «PC Server» со знаменитой иконкой (см. ниже). Любой VNC-сервер и afp-ресурс Finder отображает как «Mac server». Если на маке поднята самба, он отобразится и как мак, и как PC.

И маленький совет. Если Finder перестал дружить с Bonjour и не видит какие-то маки вокруг, перезапустите его (Меню «Яблоко» / Force Quit… / выберите Finder / кнопка Relaunch).

Советы про Screen Sharing на маках

Сегодня:
1. Как подключиться с мака к любому VNC-серверу?
2. Как сделать несколько удаленных сессий на маке?

У нас на работе все компьютеры — маки (кроме одного Linux-сервера и одной Windows-машины), так что скопились некоторые советы по их эксплуатации.

Как подключиться с мака к любому VNC-серверу? Пусть, например, в вашей сети есть компьютер с именем boo.local, на порту 5800 которого стоит VNC-сервер. Чтобы подключиться к нему, достаточно на маке открыть vnc://boo.local:5800 — например, введите этот адрес в Safari (пока не нажмете Enter, можете перетащить глобус из строки адреса на рабочий стол, и будет вам значок для быстрого подключения), или же из терминала выполните «open vnc://boo.local:5800».

Как сделать несколько удаленных сессий на маке? В отличие от Windows, при подключении к удаленному маку вы подключаетесь к его монитору и видите ровно то, что видно на мониторе — например, окошко входа в систему, или рабочий стол одного из пользователей.

Видеть монитор компьютера по сети — это, безусловно, хорошо, предсказуемо и является сутью понятия Screen Sharing. Тем не менее, бывают ситуации, когда нужно нечто другое: поработать на удаленном компьютере, не мешая тому, кто им сейчас пользуется (т.е. имея не один общий монитор, а два отдельных под разными пользователями).

Реализовать такое довольно просто. Пусть, скажем, пользователь lliypik работает за компьютером, а пользователь andreyvit хочет к этому компьютеру иногда подключаться и что-то делать на своем рабочем столе, не мешая lliypik'у. Нужно:

Первое. Под пользователем andreyvit установите какой-нибудь VNC-сервер, например, бесплатный Vine Server.

Второе. Удостоверьтесь, что в системных настройках разрешено переключаться между несколькими залогинеными пользователями. (Поищите в System Preferences по слову «switch», я всегда добираюсь до любой опции поиском. Или прямой путь: System Preferences -> Accounts -> Login Options -> Enable fast user switching.) Должно быть включено.

Третье. Запустите под andreyvit Vine Server. В его настройках смените порт 5900 на любой другой, скажем, 5800. Заодно задайте в поле Display Name какое-нибудь имя. (Естественно, вам нужно будет, чтобы пользователь andreyvit всегда оставался залогиненным. Но ведь вы никогда не выключаете свои компьютеры, верно?)

Когда захотите поработать на удаленном компьютере, если вы находитесь в той же локальной сети, просто найдите в левой панели Finder'а имя, которое вы вводили в поле display name Vine Server'а, щелкните по этому имени, а потом — по Share Screen.

Если же вы не в одной локальной сети с удаленным компьютером, вам придется воспользоваться советом из пункта 1 и ввести в Safari строку вроде vnc://lliypik.local:5800 — за сим у меня все.

August 11, 2008

Evolution of Basecamp homepage

I used an amazing tool webkit2png to capture some screenshots of Basecamp home page at various key moments in its history. Here's the result (click to enlarge):

Feb 2004Oct 2004Mar 2005Mar 2006Jan 2007

May 31, 2008

640k достаточно для всех

Из случайно подвернувшихся новостей (под Pink Floyd, играющий на моём iPhone).

02.05.2007

Отдав должное действиям Apple на рынке цифровой музыки, Балмер выразил сомнение, что новый телефон Apple сможет отвоевать сколько-нибудь значительную долю рынка.

«У iPhone нет абсолютно никаких шансов завоевать значительную часть рынка. Никаких! Это устройство будет продаваться за $500, причем эта цена с учетом скидки за подписание долгосрочного контракта с оператором. […] глядя на 1,3 млрд. проданных во всем мире телефонов, я бы лучше предпочел, чтобы в 60 или 80% из них было установлена наше ПО, чем те 2 или 3%, которые Apple может получить, продавая iPhone», — сказал глава Microsoft.

06.02.2008

В соответствии с отчетом аналитиков агентства Canalys, доля iPhone достигла 28% и занимает второе место на американском рынке, уступая лишь Research in Motion (Blackberry) c ее 41%.

Этот скачок, по сравнению с 19,5% охватом рынка в третьем квартале, позволил Apple обойти весь сектор устройств на базе Windows Mobile, доля которого в четвертом квартале составила 21%, по сообщению Canalys.

P.S. А еще рекомендую послушать Стива Джобса и Билла Гейтса на All Things Digital. Много весьма любопытного о trend'ах.

May 30, 2008

Связывание и внедрение объектов не работает

Вспомним времена Windows 3.1, когда буквально в каждой книге по консумерским приложениям описывалась замечательная технология Object Linking & Embedding. OLE казалась частью светлого будущего — того времени, когда отдельных приложений в мире существовать больше не будет.

OLE и в самом деле весьма продвинутая технология. Она позволяет в документ одного приложения вставить контент, создаваемый другим приложением. Хитрые OLE-контейнеры (единственным экземпляром которых являлся Microsoft Binder) могли даже этот чужой контент разбивать на свои страницы и делать ему сквозную нумерацию.

Теперь же я об OLE вспоминаю, только когда пытаюсь вставить диаграмму в презентацию. На маке ничего аналогичного OLE нет, поэтому приходится экспортировать диаграмму OmniGraffle в картинку и вставлять эту картинку в Keynote.

Но и под Windows OLE почти мертво — его больше не продвигают. Причина в том, что он слишком сложен, а пользователю меньше всего на свете хочется сюрпризов.

Вставка картинки в презентацию — совершенно понятное действие, картинка останется там и ровно такая, какая была.

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

Своенравность штуки, кстати, не только суеверие — встроенные (embedded) объекты порой действительно ведут себя неожиданно (например, при попытке их resize'ить, что выполняется масштабированием метафайла без активации OLE-сервера), а контейнеры зачастую начинают больше глючить.

Теперь о том, как можно сотворить более простой функциональный аналог OLE. Хитрости здесь две:

1. Сделать в OmniGraffle опцию «при каждом сохранении экспортировать диаграмму в картинку и класть рядом».

2. Сделать, чтобы Keynote проверял, не изменились ли на диске картинки, которые были вставлены в документ, и, если да, ненавязчиво предлагал опцию быстренько обновить их с диска.

Эффект такой же, ощущение предсказуемости процесса в разы выше. Заодно такие возможности полезны и для других применений.

Золотое правило: интерфейс не должен содержать сложных концепций.

Второе золотое правило: если из-за какой-то функции программа начинает больше глючить, пользователь свяжет эту функцию с мистикой и начнет её бояться.

Сложные функции больше подвержены ошибкам. Не пугайте ваших пользователей.