Archive for Май 2010

Еще немного про Things, OmniFocus и The Hit List

24 мая, 2010

Things

Начинать проще всего с Things, потому что он проще. Программа доступна для всех маковских девайсов (iPhone, iPad), что позитивно, другие платформы по старинной маковской традиции не поддерживаются и не планируются. Когда запускаешь программу, она просто очаровывает тебя своей простотой.

В Things все даже чуть проще, чем в THL. Здесь есть таски (с тэгами, заметками и дедлайном) и пять предопределенных папок для их жизни. В Today живут таски, которые специально отмечены звездочкой «сделать сегодня» или у которых сегодня дедлайн (тогда они еще красненькие будут). В Scheduled живут таски, появление которых приурочено к какой-то дате и до этого обращать на них внимание без смысла. В Someday живут таски, у которых даже даты появления нет, т.е. вы еще не определились будете их выполнять или нет.
Следующей сущностью являются проекты. Они отличаются от тасков только тем, что содержат подТаски. Здесь нас подстерегает первая засада. В программе не предусмотрена произвольная иерархия. Т.е. таски не могут содержать подтасков, а проекты подПроектов. Для тех, кто привык мыслить и работать с иерархиями это может стать серьезной проблемой.
Но, в принципе, разработчики предоставляют некоторую возможность сделать еще один уровень вложенности и называют его «Areas» — области ответственности, которые тоже могут содержать таски и проекты. Но все равно это не похоже на пространство для маневра.
Центральной точкой программы, с которой предполагатеся работать больше всего является папка Next.

Здесь содержатся все таски, которые живут вне проектов и по нескольку тасков из каждого проекта, который активен (т.е. не в Someday или Scheduled) и именно отсюда предполагается составлять себе расписание на день.
Через все эти дебри папок предполагается продираться с помощью тэгов (которые можно биндить на отдельные клавиши, что удобно) и мышки. И здесь вторая и главная, для меня, засада Things. По нему практически невозможно бродить с клавиатуры. Разработчики явно что-то делают в этом направлении, например, можно фильтровать по тэгам и перемещаться по пяти предопределенным папкам, но попасть в произвольный проект или область нельзя, до поиска добраться нельзя и, что вообще непонятно, нельзя бродить по таскам с помощью маппингов emacs, только стрелочками (занудство, знаю, но почти в любой макопрограмме это возможно).
В принципе, Things не безнадежен. Если четко следовать их сценарию работы, то бродить про проектам не нужно, а нужно сидеть в Next, но иногда приходится вносить новые таски и их надо тащить мышкой в нужные проект. Еще почти удобно сделано делегирование, можно добавлять своих коллег в специальный список и мышкой таскать на них таски. Области ответственности можно использовать как SmartFolder, т.е. определять тэги, по которым таски будут падать в определенные области. Есть интеграция с iCal, куда можно выгружать из папок и фильтровать по тэгам.
В конечном итоге, программа мне действительно нравится, нравится как она выглядит, как работает, но в качестве ежедневника я ее использовать не могу. Она просто отсутствует на кончиках пальцев. В принципе, можно перекроить свои привычки и пойти на поводу у разработчиков, живя в папке Next, записывая все в Inbox и садиться раз в день разгребать его мышкой, но как-то я привык к большей гибкости. Вот OmniFocus известен как раз своими богатыми возможностями, о них мы и поговорим в следующий раз.

Upd.
Очень неплохие скринкасты по Things с прекрасным шотландским акцентом. Часть 1, Часть 2, Things for iPhone, Things for iPad.

Things, OmniFocus и The Hit List

22 мая, 2010

Проблемы выбора

После миграции на мак, я столкнулся с выбором системы для учета добрых дел и намерений. А все из-за того, что мое любимое приложение ThinkingRock смотрелось ну слишком чужеродно в новой среде. Виной тому, конечно Java, которая везде выглядит не нативно, а именно как Java. И если под Linux это не бросалось в глаза из-за чрезмерной разношерстности тамошних приложений, то под маком, где все более или менее однородно, это стало заметно (а новая версия приложения и подавно стала платной).
Перелистывая маковскую прессу еще до покупки, я знал, что сильных игроков на этом поприще насчитывается ровно 2: Things и OmniFocus. Оба приложения имели за собой армию поклонников и немного разную ауру. OmniFocus считается приложением серьезным и для взрослых, в то время, как Things он для менее требовательных пользователей, которым, однако, не безразличен интерфейс.
Однако, по счастливой случайности, купив бандл MacHeist 3, я обнаружил в нем нового участника парада под названием The Hit List, который и стал моим приложением для добрых дел. Причин тому множество.

The Hit List

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

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

Помимо этого есть табы, тэги и уникальный Card View, когда на экране у вас один единственный таск со всеми его заметкими и т.д. Плюс есть система приоритетов циферками от 0 до 9, таймер для замера времени работы над таском и привычная интеграция с iCal. И никаких ограничений на творчество =)

Но и это еще не все. Самое, на мой скромный взгляд, ценное в THL это управление с клавиатуры. Клавиатурные шорткаты есть практически для всего (ну кроме перемещения листов и папочек в иерархии, там только мышкой можно справиться). Переходы(!) по проектам, правка, сортировка, вложенность тасков, тэгирование, установка дат. Причем поддерживаются стандартные emacs-овские биндинги, которые в макоси везде работают, кроме Java-приложений (опять, да). Т.е. это приложение совершенно не осложняет вам жизнь, оно просто живет себе на кончиках пальцев и появляется, когда это необходимо.
При этом, благодаря MacHeist, у приложения появилась армия поклонников, которые пишут скрипты, расширяющие возможности создания тасков или позволяющие вбивать таски из LaunchBar. Единственное, что всех расстаривало, это отсутствие iPhone-приложения. Меня это никак не тревожит, поэтому я просто работал себе в удовольствие.
Но не все чудесно в датском королевстве. В какой-то момент, примерно на рождество прошлого года, разработчик выложил скриншот приложения под iPhone и исчез, натурально так. На письма не отвечает, в контакт с пользователями не входит, в твиттер не пишет. И фиг бы с ним. Но после миграции на Snow Leopard мое приложение стало терять данные. Т.е. вводишь таск, выходишь из приложения, заходишь обратно — таска нет. Расстраиваешься. На третий раз мне это надоело и я написал в поддержку, что мол так и так, проблемы пам-пам, но ответа не последовало. Тогда я серьезно задумался о смене своего ежедневника на что-нибудь более поддерживаемое и вновь обратился к Things и OmniFocus.
Что из этого получилось, расскажу в следующий раз =)

Upd. Судя по всему, разработчик жив, потому что он выходил на связь с TUAW и уверял их, что работа кипит.

Немного про ExtJS

14 мая, 2010

Надо сказать, что я не использовал ExtJS около полутора лет. За это время сменился мажорный номер версии (на 3) и у библиотеки добавилось приятных возможностей, которые упрощают жизнь. Самым значительным изменением для меня стала доступность Ext.data.Writer, который сильно облегчает задачу сохранения данных. Вообще заметно, что библиотека становится все более зрелой и фишко-насыщенной. Но, одновременно со всем этим, у нее остались теже проблемы, которые меня всегда в ней немного раздражали. При всей ее зрелости, любой шаг вправо-влево от того, что предлагает библиотека все так же карается расстрелом, багами и жестокими оверрайтами, которые потом вылезают боком. Я, конечно, соглашусь с теми, кто скажет, что я просто не умею ее готовить и с любой библиотекой так получается. Но весь прикол как раз в том, что для того, чтобы эффективно писать на ExtJS, надо с ней жить =) Т.е. тратить значительное строить и строить на ней приложения, запоминать хлипкие куски и знакомые паттерны багов и так далее. А что-то не хочется. А теперь немного речей от моего внутреннего героя Стэна, который в очередной раз многое понял.

Про архитектуру приложений на ExtJS написано уже достаточно много (раз, два на вскидку), я ничего добавлять не буду. Для собирающих модулей я предпочитаю, так называемый Revealing Module Pattern, который является продолжением идей Yahoo про Module Pattern, но по структуре мне нравится больше. А так все тоже, создаем свои компоненты, наследуя из от экстовских и оживляем их =)

Когда используешь какие-то плагины, оверрайты и прочие модификации ExtJS, лучше всего документировать это подробно. Т.е. элементарно составить список плагинов, которые используются в проекте и иногда послеживать за ними. Особенно, когда вы замечаете какое-то ненормальное поведение.

Довольно часто сталкиваешься с тем, что обновив ExtJS что-то перестает работать. В первую очередь, надо следить за тем, что вы обновили плагины, которые входят в поставку ExtJS (например RowEditor). Затем надо проследить, что все внешние плагины обновлены. Если ничего не помогло, то стоит отправится на форум. Часто там уже вовсю обсуждают, как починить вашу проблему =), потому что она не только ваша. Ну и потом уже можно вооружаться FireBug и писать на форум.

Вот список самых интересных плагинов, с которыми я работал в этот раз:
Ext.ux.form.DateTime — позволяет выбирать дату и время, а не просто дату.
Ext.ux.form.GroupingCombobox — позволяет использовать группировку значений, как обычный <optgroup>.
Ext.ux.form.XCheckbox — в отличие от обычного чекбокса, всегда отправляет значение, вне зависимости от того, отмечен он или нет.
Ext.ux.grid.CheckColumn — позволяет делать колонку из чекбоксов
Ext.ux.grid.ItemDeleter — добавляет колонку по нажатию на ячейки которой можно удалять строки
Ext.ux.grid.RowEditor — из официальной поставки, удобно редактировать строки в гриде
Ext.ux.gird.Search — старый-старый плагин, который позволяет осуществлять поиск по разным колонкам грида
Ext.ux.PanelCollapsedTitle — плагин, который добавляет заголовки на свернутые панели BorderLayout (причем и для IE, и для остальных вменяемых браузеров)
Ext.ux.grid.Filter — семейство фильтров, который вешаются в меню колонки и позволяют не загромождать тулбар всякими поисковыми формами

Чарльз Петцольд — «Код. Тайный язык информатики»

3 мая, 2010

Код - тайный язык информатикиТак уж сложилось, что в последнее время программированием занимается все больше людей, которые получали образование по совершенно другим специальностям. Да и в университетах все больше отходят от низкоуровневых языков. И получается, что очень многие программисты совершенно не представляют, как на самом деле работают компьютеры и что там происходит за пределами их IDE. А бывает, что по молодости лет мы просто не уделяем внимания этим предметам в институте, считая что все эти ассемблеры уже отжили свое и Java всех победит.
Эта книга создана для того, чтобы восполнить пробелы в образовании или просто напомнить о том, как оно на самом деле. Вместе с автором мы проходим путь от разных способов кодирования информации (язык Брайля, код Морзе) до современных операционных систем с графическими интерфейсами.
По ходу дела мы узнаем как построить простейший, но вполне себе компьютер их 5 миллионов реле и небольшого колличества лампочек, как их потом заменить на лампы, а затем и на транзисторы. Что представляет собой язык машинных кодов для процессора 8080 и зачем использовались сопроцессоры. Узнаем, как представлены дроби и пиксели в памяти компьютера и пишем простейшие программы на ассемблере. Именно этой низкоуровневой части посвящена основная часть книги.
Ну а в последних главах, автор очень быстро проходится по всяким периферическим устройствам, вроде сканера, MIDI-секвенсоров и принтеров.
Рекомендуется к прочтению всем, кто так или иначе вовлечен в программирование и хочет получше узнать что же происходит внутри этой умной железки.