вторник, 29 декабря 2009 г.

Автоматическое обновление и вечный косяк

Большинство современного софта вполне умеет обновлять самое себя через Интернет. Как сделать такое обновление вопрос широких дискуссий. Может быть это будет как в The Bat – просто проверка новой версии на сайте, может как в Google Chrome – скачивание и полностью автоматическая установка новой версии в фоновом режиме. В общем, кто во что горазд.

Но неизменно одно – софтина для обновления обязательно должна выйти в сеть. Без этого никуда. И сколько я перепробовал софта – у всех до единого один и тот же косяк. Если Ваш IE выставлен по умолчанию в offline режим, то софт не может выйти в сеть, и соответственно не может ничего обновить. И не важно из чего это самое “ничего” состоит: из репорта о доступности новой версии, или же это полная установка в фоновом режиме. Обновление не работает и всё тут, самый такой натуральный ППЦФ (“пипец фиче” – фича есть, фича могет, фича модная – только ни хира не работает).

И вот в этом случае, вот совершенно не нужно кивать что мол “только у тебя Гоха IE в вечном оффлайне” (© Arsen). Да мне пофиг! У меня есть свои причины в оффлайне его держать – и причины очень весомые. И тем не менее, несмотря на никакой оффлайновый режим IE, обновление в моей Aml Pages всегда работает.

Поскольку уже подзаколебало писать репорты коллегам – причем коллегам мною весьма уважаемым – про подобные траблы с обновлением, попробую-ка рассказать, как я решал эту проблему в Aml Pages. Опять же да здрям повторное использование кода – будет на что сослаться :), а не кропать заново.

Вкратце: в Aml Pages все обновление сводится к скачке файла с инфой о новых версиях. Дальше уже все на усмотрение пользователя – ставить или нет, посмотреть список изменений и.т.д. Ну да не в этом суть – файл с инфой скачать придется по любому, и обойти оффлайновый режим IE надо.

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

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

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

Можно сказать и кратче: есть новая версия? ОК – нужно об этом сказать пользователю. Нет новой версии, нет соединения, поврежден скачанный файл с информацией – все эти подробности ни на хер не нужны. Представьте, сидит себе пользователь, делает что-то свое и вдруг откуда ни возьмись на тебе репорты: “Нет соединения”, “Новых версий не обнаружено”. Да зачем ему вся эта инфа как черт из табакерки – нет и и нет, и нечего пользователя беспокоить.

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

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

И опять все просто до неприличия: раз пользователь сам запустил проверку новой версии, он явно желает увидеть результат своих действий. И вот тут, коллеги, ну не на фиг не нужно показывать информацию вида “не шмагла падключица к сети”. Тем более, что софт может и сам проверить в каком режиме находится IE – в оффлайн или в онлайн. Т.к. если в оффлайн, то эту проблему софт может и сам решить самостоятельно.

Элементарно, Ватсон! Делается это просто – всего лишь единственным вызовом API-функции InternetGoOnline!

    BOOL InternetGoOnline (LPCTSTR lpszURL, HWND hwndParent, DWORD dwReserved)

В первом параметре нужно передать URL, по которому собрались обновляться. Второй параметр это HWND окна нашей софтины, он понадобится для сообщений. Третий параметр MS зарезервировала на будущее. Если есть подключение к сети – функция сразу вернет TRUE, в противном случае – FALSE.
Работает эта достославная функция следующим образом:

  • Если подключение к сети уже есть, она сразу вернет TRUE, причем безо всяких подтверждений. В этом случае можно быть уверенным, что IE уже в онлайн-режиме и начинать коннектиться к сайту.
  • Если подключения нет, то функция выдаст MessageBox “не желаете ли подключиться”. Именно для этого и нужен второй параметр с HWND нашего окна. Если пользователь согласится, то функция выполнит подключение и вернет TRUE. Если пользователь откажется – вернет FALSE.

В автоматической проверке вызовом InternetGoOnline, конечно же, грешить не стоит. Еще чего не хватало, чтобы исключительно вспомогательные и фоновые задания доставали пользователя запросами. Не удалось подключиться, и хрен с ним ладно. Совсем другое дело проверка, запущенная пользователем ручками. В этом случае пользователь принял решение сам, в этот момент его внимание по любому приковано к проверке, и он точно ожидает какого-то отклика. Вот в таком случае, имеет смысл и позвать InternetGoOnline – возможные MessageBox ну никак не смутят пользователя, он все равно ждет ответной реакции от софта. Дык почему б и не спросить, если известно что проблема “на этой стороне”? Это точно лучше, чем сказать невразумительное “ошибка соединения”, тем более что эта “ошибка” решаема здесь и сейчас.

Блин, сколько видел вполне толкового софта – все до единого на этом спотыкаются. И HippoEdit, и LeaderTask и многие другие. Долой непонятки – тем более что их решение, это всего две строки кода.

Вместо дисклаймера: мысль, о том что IE в оффлайн у очень немногих -  совсем не катит. Отмазы это для начальства, а не для пользователей.
Проблема тут вовсе не в дилемме “оффлайн vs онлайн” самой по себе – проблема тут исключительно в последствиях. Почему так, разговор длинный. Но если в двух словах: у кого IE запросто может быть в оффлайне-режиме? Да у гиков! А лично вам нужно чтобы именно гики не могли скачать новейшие апдейты?

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

понедельник, 28 декабря 2009 г.

Softpedia жгет

Softpedia жгет! Выложил свеженькую сборку новой версии Aml Pages 9.15 Alpha. А Softpedia уже обновила версию в своем каталоге. Ну ладно, можно подумать, что новая версия аккурат попала под очередной гребок бота. Не-а! Ан фиг! Новая альфа-версия вышла еще вчера вечером (сборка 2076), и Google уже проиндексировал страницу сотфпедии, причем именно как сборку 2076. Но когда открываем ссылку на софтпедию, видим уже сборку 2077.

Все бы хорошо, но новейшую сборку 2077 выложил буквально один час назад. Оперативно ребята из софтпедии работают. Производит впечатление, ничего не скажешь. Если бы они такой расторопностью отличались бы еще в анонсах Aml Maple, цены бы им не было. И откуда такая дискриминация?

Уж не в аффилиатском ли партнерстве суть!?! Запрос, откуда такая разница в отношениях к этим софтинам – типа “дара-а-а-гой, а ты меня любишь” :) – отправлены в софтпедию. Ждем-с!

PS: Кстати, к вопросу о сабмитах. Дело нужное и архиважное – другой бы спорил. Но судя по гугловским алертам, анонс этой самой, только вчера впервые выложенной альфа-версии Aml Pages, уже начал расползаться по файлопомойкам. Один-два мне уже точно за сутки попадались.

четверг, 17 декабря 2009 г.

Пользовательские интерфейсы в синематографе

Голливудские интерфейсы

Присмотритесь-ка на этот скрин интерфейса из голливудского фильма. Строка “Comp.Sys.Kill” ничего не навевает?

Ох, никогда я не забуду
Дот.Нет на службе Голливуда :)

Взято отсюда.

вторник, 8 декабря 2009 г.

Борьба с false-alarm

Буду краток ©. Сегодня в телеграфном стиле, благо описываемое творится прямо в настоящий момент.

Протекторы vs антивири – тема вышла в тираж на RSDN.ru. Оппоненты все именитые: PolyTech – автор VMProtect, D. Mon –все здесь (привет альма-матери и да здрям Interstron), небезызвестный Мыщьх – полагаю, уж Криса представлять не надо. К сожалению, в оффлайн с участниками не знаком, но общаться лично доводилось и не по разу. Следить за всей этой дискуссией – жуть как интересно, тем более что “аффтары жгут”, но все остается в рамках приличий.

От себя: ух и наловился я этих фолс-позитивов с пару месяцев назад. Подтверждаю: все так. Упомянутые McAffee и ClamAV действительно параноидальны. Реакцию на сообщение о фолсе  можно охарактеризовать кратко - “всемвсёпох”. Касперский отреагировал в течении пары дней, Avira подтянулась следом, с Dr.Web уж и не помню, но и вроде проблем не было, с Avast изначально все ОК было.

Посмотрим во что вся эта дискуссия выльется…

Отдельное и самое искреннее спасибо D. Mon за помощь в свое время в вопросах виртуальных машин. Все-таки иногда полезно отложить бизнес-требования, веб дизайн, маркетинг и всю прочия и прочия да вспомнить где учился…

PS: а написанную тогда виртуальную машинку крякеры так и не сломали, они ее даже не нашли… Хех :)

понедельник, 7 декабря 2009 г.

Круговорот софта в природе

Сегодня получил вот такой вот uninstall feedback.

Мне очень нравится ваша программа, 8 версией я пользуюсь очень, хотелось получить, новую версию. но оплатить нет возможности. простите… С уважением поклонник Aml Pages.

Нифига себе, сказал я себе! С разработкой 8-ой версии я распрощался году так эдак в 2001-ом. Ну, может быть года до 2003-го пару-тройку раз еще выходили всякие мелкие баг-фиксы, но исключительно в целях поддержки. Хоть малейшего, хоть на десяточек строк развития 8-ой версии после 2001 года точно не было. 2010-ый считай уже на пороге – 9 лет прошло – впечатляет живучесть собственного же софта!

Что-то последнее время жизнь стала ставить эка занимательные вопросы… То вдруг студенческим телеграфом в компе сродственников появляется моя же софтина, да причем еще и авторство свое чуть ли не доказывать приходится. То вот этот привет из прошлой, да какой там прошлой – из уже позапрошлой жизни. Потом вдруг попадается софт на 80% по идеям повторяющий мой LOS аж из еще прошлого века… Призадумаешься однако над круговоротом софта в природе!

пятница, 4 декабря 2009 г.

Органайзеры… Доколе!?!

  На RSDN.ru опять поднимаются вечные темы – поиск наилучшего органайзера. И опять традиционная картина: если б молодость могла, если б старость хотела :). И снова вечный скепсис: ниша дохлая. Ага… Щазз! Если люди годами ищут удобный органайзер, и так и не могут найти, какая ж это дохлая ниша? Рыба есть – ловить уметь надо!

Нельзя написать одну программу для всех задач, на все времена и подо все платформы… и одинаково хорошую для всех задач. Приложения для планирования задач неудобны для ведения заметок, а заметки не очень-то подходят для планирования. И уж точно: ни первое, ни второе не относится к напоминалкам. Зато можно написать несколько разных программ, каждую заточенную под свои задачи. Только вовсе не обязательно писать их все – все программы, как и стихи, уже давно написаны. Вполне достаточно научить их взаимодействовать.

Вы никогда не задумывались почему интеграционный софт это просто золотое дно!?! Все очень просто: допустим есть две программы, каждая из которых выполняет свои задачи на “вполне хорошо”. К примеру, Aml Pages для заметок, и LeaderTask для планирования. Можно попеременно пользоваться обоими – ОК, но это простая сумма двух слагаемых.

Хех, integration, в переводе с английского означает “объединение в одно целое”. К чему это? Если научить обе программы хоть немного взаимодействовать, то они начинают увязываться пусть хоть и в простую, но уже систему. А система это всегда больше, чем сумма слагаемых. У системы появляются новые аспекты поведения, которых нет у простой суммы (соседства на харде?) двух программ. Вот поэтому интеграционный софт и есть золотое дно – это создание новых возможностей, которых нет у обоих софтин по отдельности.

Поэтому и бесполезно создавать еще один комбайн, который будет делать всё. Невозможно создать инструмент, который делает всё одинаково хорошо. В принципе, и обухом топора можно забивать гвозди, но обычно для этого выбирают молоток. Абсолютно то же самое и с программой-комбайном. “Всё” не получится! Уж больно у каждой задачи разные цели, разные приоритеты, разные акценты.

Как-то писал почему в Aml Pages нет тайм-менеджмента? Да потому что, это не ее задача – Aml Pages это записная книжка, “записки на манжетах”, копилка для эврик, сохранялка для фрагментов веб страниц – да попросту оперативный блокнот под рукой. Какой там нафиг тайм-менеджмент – чего менеджить, и где там тайм? Это разные задачи вообще по своей сути.

Зато в Aml Pages уже сто лет в обед есть все механизмы для интеграции – на любую заметку можно сослаться откуда угодно, и эту ссылку можно в любой момент открыть извне вообще из любого кода. К примеру, плагин Aml Shortcut  именно на этом и построен – он всего лишь создает ярлык с нужными параметрами для открытия конкретной заметки и только. А чем открывать этот ярлык уже не его забота – пользователь ли кликнул или напоминалка по таймеру через этот ярлык открыла нужную заметку – это неважно.

Вот в этом и заключается вся извечная проблема написания очередных органайзеров. Все как один пытаются создать заново революционную систему, решающую абсолютно все проблемы. Ну-ну! Бог в помощь! Для молодости еще куда ни шло, но в старости пора повторять как мантру: “ложки серебряной пули нет, ее не существует” – можно конечно и топором забить гвоздь, и даже не один, но попробуйте подбить им сапоги…

“Совершенство – это когда не нечего добавить. Совершенство – это когда нечего убрать!” (© Антуан Сент-Экзюпери). В интеграционном софте нечего убирать, он обеспечивает только необходимое – возможность взаимодействия 2-ух софтин, и только. Убирать нечего – потому и совершенство.

PS: напоследок палю идеи. Обратите внимание на некоторые нюансы.

  1. По сути своей все напоминалки  напоминают периодически. Но почему это должен быть только текст? Открыть сайт, запустить приложение, открыть документ – это не почти ли то же самое? Взгляните на COM-интерфейс ITaskSheduler – все периодично, но что именно периодично можно описать в широких диапазонах. Можно заюзать и сам интерфейс. Не катит? Кто мешает воплотить ту же идею с нуля самому?
  2. Представим следующую ситуацию: вы с отладчиком наперевес уже почти с ногами залезли в окно кода и вовсе перестали реагировать на все внешние раздражители. И в этот момент любимая женщина вам говорит “дорогой, ты просил напомнить, что тебе надо позвонить Ивану”… Нет, нет – не отвлекает, а именно напоминает, привлекает Ваше внимания, но не требует вашей ежесекундной реакции. Не бывало такого?
    ОК, представили себе в уме, ну, а теперь к сути. Где вы видели у любимой кнопку “ОК”, которую нужно нажать чтобы хотя бы быстро закончить свои занятия?
    Так какого же хе… фига без конца показывать эти засранные MessageBox? Где необходимость сначала ответить на него, а только потом вернуться к своей задаче? Поверьте на слово – 30 минут размышлений, и решение находится – это действительно просто.
  3. Ну и последнее. Ни один вменяемый человек никогда не планирует что-то на через неделю ровно на 21:33. Нет, нет, конечно и такое бывает. Но это исключение. Чаще все значительно элементарнее: “завтра вечером”, “в пятницу после обеда”, “как протрезвею проснусь” и.т.д. Тогда на кой хрен, скажите мне, всё завязывать на точные элементы ввода вроде DateTimerPicker? Нарисуйте обычный статик со шкалой: слева утро, справа вечер. Подсветите его слева-направо цветами перехода от желтого (рассвет) к красному (закат) и позвольте пользователю выбирать кликом. Добавьте для наглядности снизу шкалу часов (дней). Пользователи не идиоты, поймут все с первого раза – образы всегда лучше воспринимаются. Очень надо? Ну, добавьте рядом этот DateTimePicker, и синхронизируйте его и выбор на шкале кликом - не помешает. Но поверьте, использоваться он будет исключительно как дополнительное средство и значительно реже.

Для начала, пожалуй, хватит. Авось кому и пригодится высказанное, кого-то вдохновит!?! Один фиг, у меня по-моему никогда не дойдут руки до реализации, особо если учесть что это не последние идеи – их есть у меня…

среда, 2 декабря 2009 г.

Про баги: падать или не падать

Здравствуй, дорогой и горячо любимый Access Violation Елена Сагалаева начала серию статей “Искусство отладки” и даже уже опубликован первый пост “Как предупредить появление багов”. Тема конечно же глубинная. Ре-хех, чуется да будет драка… Да чего уж там, судя по комментариям “гнать из команды”, “не пишем код и не будет багов” – драка уже началась! Ну, как говорится: “amen. понеслася!”. Но посты прелюбопытнейшие, даже порой заглядываю перечитать и поразмышлять. Чего уж тут!?! Достали меня уже в ноль анализы засранных бизнес-требований (сами не знают, чего хотят), бесконечные флеймы в форуме технической поддержки, и все прочие маркетинги-и-иже-с-ними. Давайте-ка лучше маленько подебажим :)

Хех, баги есть, были и всегда будут. А кончатся? Не пропадем – съездим к трем вокзалам и возьмем наплодим новых! Когда баги вползли по невнимательности, ну или по банальной опечатке (такое бывает: начинаю уже тихо материться на автозавершение кода (autocompletion), о  сколько багов оно наплодило в моем коде) - с этим более менее понятно как бороться: code review, нормальные комментарии, assertions где только возможно. В общем, все понятно: баги подобного рода нужно максимально переловить на стадии альфа (бета) релиза.

Но ведь бывает и иначе: “Ты суслика видишь? Нет… А он есть!”. То бишь, ну неоткуда багу взяться, хоть тресни неоткуда и всё тут! Но он есть. И хорошо, если четко диагностируемый и постоянный, а если мигающий да зависящий от конфигурации!?! Imho, в альфа-версиях лучше уж пусть софтина рухнет, грохнется с самым поганым Access Violation, погребя под собою весь процесс вместе с пользовательскими данными заодно. Ну и ладно, зато проблема станет явной.

Буквально последние дни доделываю новую фичу в Aml Pages. Фича весьма неслабая. Мало того, что вовсю используются виртуальные списки (SysListView), когда данные в одном месте, а визуализация их происходит по мере прокручивания списка пользователем. Дык там еще и сами данные выдергиваются многопоточно (а юзер – нет, ну вот зараза какая – старается еще и изменить данные уже в третьем треде). Лично по мне, пусть вся Aml Pages рухнет с треском в релизной сборке, если где-то вдруг у нас порою закрался баг. Всё лучше, чем кряхтя и поднатужившись продолжит выполнение, непонятно в какой винегрет превращая пользовательские данные.

Нет, нет! Никто не собирается вывалить все эти баги на пользователя. Ни в коем случае. В коде уже очень многое предусмотрено: и контроль индексов, и корректная обработка висячих указателей, и проверка на deadlock при многопоточной обработке. Но все это будет задействовано только в первом публичном бета-релизе. В альфа-версии фиг – все максимально сбое-вероятно, пусть уж лучше мой код покажет свое истинное нутро.

Всё просто: проблема не в баге  - проблема в том, откуда он вообще взялся. Если написано, что индекс должен быть от массива “А”, то именно для него он и должен быть, и причем валидным, а не для соседнего. А коль индекс не валидный, то вынуть по нему данные все равно не получится. Выкрутиться можно, но вот вынуть данные корректно, это фиг. В публичном релизе будет и такая страховка. Но проблема в данном случае, не в том что пытаемся вытащить данные по кривому индексу, а в том, откуда такой кривой индекс вообще взялся.

Если весь алгоритм сразу проектировался так, что даже взрыв ядреной бомбы за окном не может повредить индексы, то кривой индекс означает только одно: ядреная бомба где-то в коде. И уж пусть софтинка рухнет намертво – зато проблема станет явной, и явной именно сейчас, в стадии альфа-версии, а не в финальном релизе на машине пользователя. Сиди потом, медитируй на тему “ё-маё, что ж  я сделал, и как они пытаются это использовать”.

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

  1. Банальное переименование некоторых функций. Причина проста: семантически параметры некоторых функций изменились, но не изменились синтаксически. То бишь надо все эти, а желательно еще и соседние, моменты проверить. Но компилятор сам такие ляпы не поймает, т.к. ну нет никакого ляпа с его точки зрения. И что делать? Шерстить глазами? Дык не годится – человеку, и его глазам в частности, свойственно ошибаться. А коли свойственно, то ошибка допущена будет.
    Делаем просто: переименуем старую функцию, ну скажем, GetDataByIndex в нечто вроде GetDataByIndex2 и перекомпилируемся. Компилятор, ясное дело ругается на все вызовы функции по старому имени. Аккуратно просматриваем всю “ругань”, не спеша и тщательно проверяя семантику параметров. Приводим код в полную работоспособность. Ну и под конец, не грех переименовать GetDataByIndex2 во что-нибудь более говорящее, вроде GetDataByArrayIndex чтобы в будущем не путать, что за индекс.
  2. Везде где можно применяются assertions: т.е. проверяется истинность почти всего подряд: висячесть указателей, выход индексов за пределы массива, pre- и post-условия выполнения. В отладочном коде при неверности условия, будет отрабатывать отладочный код, а хоть бы и жутко “матерный” MessageBox. В релизной сборке таких проверок нет, и тем более нет этого “матерного MessageBox`а”. Но даже если что-то было и упущено, то в релизной сборке программа просто рухнет, и проблема станет явной. Чего и добивались – чтобы найти решение проблемы, о ней хотя бы нужно знать. 

Собственно всё! Уже только этих два приема сходу выловили с пяток косяков точно. Остальные ждём-с в релизной сборке – нехай падает.
Имхо, в тестовых версиях баг это благо – он повод задуматься “а с какого-такого перепуга”. Качество и надежность кода – это задача финальных версий. Но без вопроса “с какого перепуга” эта самая пресловутая надежность кода никогда не будет достигнута. Нет вопроса – не будет и ответа.

PS: в комментариях к первому посту Елены упоминал книгу Роббинса по отладке – собственно вот она на Books.ru. К сожалению, в свое время, так и не удалось найти самую первую “отладку” Роббинса. Но, у него есть еще одна любопытная книга: “Отладка Windows приложений” – тоже вещь впечатляющая, а главное и актуальная по сей день. Имхо, must have обе. Но… блин, первую отладку похоже не скоро переиздадут, а жаль – солидное чтиво – мозги на нужный лад настраивает.

PPS: стоп! А как же самый главный пост-скриптум!?! Елене отдельное СПАСИБО за интереснейший цикл статей. Так держать!

пятница, 27 ноября 2009 г.

Немцы, сабмит и проклятие выбора

Задумал заказать сабмит у Руденко… А я тут намедни аккурат переписал аглицкое и испанское описания Aml Pages. То бишь аглицкое переписал сам, а испанское мне пользователь перевел. Уж не знаю, то ли так хорошо новое аглицкое, то ли действительно последние версии удались, да только после летнего провала продаж на Запад, вдруг что-то да заколыхалось.

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

Вот и что теперь делать!?! Если напрячь память, то – о удивительно – вспоминается, что когда-то я безуспешно изучал немецкий язык, и может рискнуть и перевести все самому? С другой стороны, с немецким я последний раз имел дело лет 100 назад. Веб-серфинг по немецким серверам не считается – там старание в зачет идет, и сказывается мое, ставшее уже легендарным умение, пудрить мозги моей слегка сумасшедшей вузовской “немке”, что я мол якобы знаю немецкий (а что вы хотели? Зачет-то блин нужен, сессия как известно не тимошка, хочешь пить медовуху учиться дальше, умей вертеться).

С одной стороны: немец без разговоров переведет лучше, да причем еще и в разы лучше. С другой стороны, конец года не за горами – тянуть с сабмитом явно не стоит. С третьей стороны, наша вузовская “немка” тетка была реально сумасшедшая, и если она что-то вбивала в голову, то уж это на века. Может рискнуть, и попробовать самому? Ввязаться так сказать в переводческий бой, а там уж видно будет!?! С четвертой стороны – это же немцы: они одни покупают столько же, сколько все остальные вместе взятые – то бишь на кону солидный куш.

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

PS: может стоит заказать перевод описания где-то на стороне… Но не за 100 же американских рублев? Это ни в какие ворота: там текста всего одна страница, 2000 символов. Да и потом, упомянутого немца я знаю, именно он переводил пользовательский интерфейс – и качество более чем впечатляет. А что на стороне напереводят, еще бабка надвое сказала! Вот задачка-то блин возникла: поспешать или дни терять, зато потом, как говорится, “за час долететь”?

вторник, 17 ноября 2009 г.

Все сразу получить невозможно

AVL начал переводы97 Things Every Software Architect Should Know”. Это подборка статей об архитектуре программного обеспечения. Статьи небольшие: одна статья – один аспект, поэтому читается легко, здесь вам не академические мануалы в стиле Фаулера.

Как и обещал AVL, все сразу получить невозможно. Но… Можно даже сказать но! AVL слово держит и новые переводы выдает более чем регулярно: буквально каждые 2-3 дня появляется новый перевод, причем 2-3 дня перерыва это максимум, частенько и по одному переводу за день!

Во-первых, переводы действительно весьма качественного уровня. Что уже само по себе ценно. Во-вторых, может быть “старички” и не так уж много найдут нового в этих статьях – но все же приятнее находить на могучем и богатом. Ну, и в третьих повторение мать учения – иногда не лишним будет и перелистать эти статьи. Отрезвляет, знаете ли…

PS: давно собирался написать про инициативу AVL`а. Но как-то руки все не доходили! А тут аккурат последний перевод “Все сразу сделать невозможно” привел в чуйство от излишнего запала в разработке некоторых новых фич в Aml Pages, ибо нехер нефиг (а то чую, определенный нездоровый троллизм начал меня доводить до ползучего фичеризма).

AVL`у – виват и самое искреннее спасибо! Больше переводов – хороших и разных. В общем, рекомендую всем! Кто знаком с изложенными мыслями – получит удовольствие от перевода и возможности повспоминать боевую молодость. Кто нет – глядишь, и пригодится до того, как все описанное прочувствуете на собственной шкуре.
Полный список переводов см. здесь.

четверг, 12 ноября 2009 г.

Распространение софта студенческим телеграфом

Заходил к гости к родному дедуле: как дела, покалякать о том - о сём, да и вообще. Пока закипал коньячок чаек, меня тут же прислонили к делу - с фигов ли девелопер простаивает – приводили в чувство капризный Microsoft`овский офис.

Пока подогревался чаек, дедуля наворачивал какую-то красоту в своем любимом Excel. Я, собственно, рядом. Ну, и хочешь, не хочешь, и мой взор периодически падает на экран. И вдруг… Оп-па! Вижу до боли знакомый курсор с флагом активного языка. Присматриваюсь, и правда, курсор знакомый, и ведет себя точь в точь как и моя Aml Maple – то бишь в текстовом курсоре в любом месте показывается активный язык ввода (раскладка клавиатуры).

Спрашиваю деда: че мол за нах, че за красота?
Прослушал лекцию (дед-то у меня профессор), что это мол “оно само” и очень удобная штука, показывает мол язык ввода. Ну, думаю, приплыли – здрасти вам конкуренты. Шмыг сюда по винде, шмыг туда – упс, действительно работает моя Мапля, только версия постарее.

А я Маплю отродясь на дедовом компе не ставил. Откуда она там взялась, одному господу богу известно. Ну да у дедули за компом половина студентов перебывала. И т.к. студенты люди все больше молодые, то бишь продвинутые хакеры, то и налаживают ему ноутбук, кто во что горазд. Ну и судя по версии Мапли, по месту установки и неверным настройкам, точно студентова работа. Оптимизаторы, блин :)

PS: пререкались с дедом на тему копирайта минут пять, а то и десять. Я деду мол, “хех, моя ведь софтина”. А он ни в какую: мол оно само, и ты тут не причем, и вообще “ври больше”. Убедить его удалось: только “секретными” ключами командной строки для быстрой визуализации Мапли, и гордо красующимся на экране диалогом “О программе”. Иначе б не в жисть не поверил бы.
Вот так собственный же софт и уходит в народ, наворачивает кружок другой  - используя студенческий телеграф - и возвращается к авторам же. Призадумаешься однако…

пятница, 6 ноября 2009 г.

Умное меню

Узрел в одной софтине меню любопытнейшего, да что там любопытнейшего – это называется экстраординарного поведения. Суть в следующем:

  • наблюдаем на экране команды меню. Пока вроде все обычно, не правда ли!?!
  • Щелкаем по командам меню. Опять же, не что-то из ряда вон выходящее. Знаем, плавали!

И вдруг, вуаля! Команды меню реагирует на щелчки мыши, но меню автоматически не закрывается. См. скриншот ниже.

Умное меню: команды реагируют на щелчок, но меню НЕ закрывается автоматом!

Поясню фишку! Это меню для выбора показываемых столбцов в таблице. Стандартное виндовское меню при щелчке по команде с галочкой обычно галочку поставит или уберет, но в любом случае меню закроет автоматом. Но обратите внимание – здесь задача другая: в большинстве случаев нужно за один раз отметить ни один столбец, а несколько. В обычном случае придется открывать меню столько раз, сколько нужно столбцов. Здесь же всё иначе: команды с названиями столбцов реагируют на щелчок, но меню не закрывается! Вы можете продолжать отмечать столбцы. Ну, а изменения в свою очередь вступят в силу, когда вообще уйдем из меню.

Но! Стандартное меню в винде такого делать не позволяет. Не верите? Попробуйте такое закодить! Традиционно подобный выбор реализуется через отдельный диалог, но любой диалог изначально уже само по себе полное гавно! не лучшее решение. Здесь же реализовано просто зергутно: и диалога никакого нет, и наглядность соблюдена, и меню всегда под рукой, и наконец решена главная проблема меню – сделан этот самый множественный выбор без закрытия.

Как увидел, аж позеленел от зависти и губы сами начали произносить “сцуки… но умные!” (есть мнение что иногда в этом блоге бывал и автор этой софтины, и уж скриншот-то свой , он узнает… Иван, в данном случае это комплимент – решение на пятерку с плюсом).

В прошлом посте аккурат писал про отложенные фичи в Aml Pages. Дык вот одна из отложенных фич – категории, аккурат и уперлась в возможность множественного выбора. В прошлых версиях выбор как раз был одиночным, и под него было написано ух какое умное меню: все из себя owner-draw, с иконками, с цветами, шрифтами и все такое. И меню это решало свои задачи выбора на раз, пользователи были вполне довольны. Возможность же выбрать несколько элементов одновременно в проблему пользовательского интерфейса и уперлась. В бизнес-логике никаких проблем с этим нет, все продумано, все написано. Но вот UI… Весь прошлый одиночный выбор был завязан именно на меню, а меню мульти-выбора не дает. Так что оставалось перепроектировать пользовательский интерфейс, причем достаточно объемную его часть. А это задачка не простая и не быстрая – поведение-то поменяется напрочь, надо полностью переанализировать требования пользователя. На этом-то все и застряло.

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

Но у этого меню есть нюансы: так хитро реагирует на щелчки только само подменю “столбцы”. Все остальное меню ведет себе стандартно – клик и закрылось. Выглядит “умное” подменю, точно также, как и все остальные. А это очень не просто эмулировать внешний вид полностью, всегда есть 33 нюанса, какой-нибудь да будет упущен. Так что для полного сходства остается только одно – не подменять бутафорским муляжом, а делать именно меню. Вот тогда и будет выглядеть все идентично безо всяких лишних усилий.

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

Вот такой вот бывает развеселый ГУЙ. Причем не бутафорский, не эмуляция в стиле “нарисуем очень похоже”, а самый что ни на есть разнастоящий, родной, можно даже сказать влитой, ГУЙ. Он и “выглядит как утка”, и “крякает как утка”, и “летает как утка”, да потому что он и есть разновидность “утки обыкновенной”, а разница только в способе “захода на посадку”. Вот такие любопытнейшие головоломки преподносит иногда пользовательский интерфейс.

Век живи, век учись! Давненько так не оттягивался в разработке, какая-то хоть и мудреная, но рутина всё больше была. Вот за такие сюрпрайзы я и обожаю свою профессию.

среда, 4 ноября 2009 г.

Одна фича – один релиз!

Уф, дело к ночи – готовь калачи! Сбылась мечта девелопера – русский релиз новой версии Aml Pages упал на сайт! А то, чуялось мне всё, мерещилось, что уже попер “ползучий фичеризм”. А боюсь я его пуще огня и багов кромешных. Нет тюрьмы, хуже чем в своей голове. А П.Ф. это не проста тюрьма, это прям Алькатрасс эдакий :)

Очень давно наблюдаю один и тот же эффект. Чем больше впихивается фич в одну версию, тем тяжелее релиз. Мозги начинают разбрасываться вразнобой, и вместо того чтобы сосредоточить все силы на вылизывании кода, начинаешь кидаться из стороны в сторону. А в результате – один большой комбайн, который делает многое. И всё это “многое” одинаково херово нехорошо.

  • Фича одна и только одна: сосредотачиваемся на единственной фиче и уж делаем ее – так делаем. Пусть не всем нужна именно эта фича, но кому нужна – получают ее в доведенном до ума виде.
  • Use-case подход: сосредоточение на единственной фиче позволяет максимально использовать use-case аналитику. Больше внимания тратим не на херь техническую нюансы решения, а на use-case анализ. Продумываем и делаем до конца пусть один, но вполне четкий сценарий использования софтины. И клиент получает не набор бессвязных приблуд, а некоторый, вполне конкретный способ решения своих вполне конкретных задач (следует читать: “некоторый, вполне конкретный стимул поделиться денюжками”).
    К слову говоря, вот именно сейчас отложил пару наиклевейших идей, только потому, что никак толком не вырисовывалась ясность в вопросе: как и зачем это будет использоваться юзерами. А главное: пока мужественно забил на эти клевые придумки – а это было непросто, потому как клёвые - и в голове идеи доточились, и варианты решений появись. А рванул бы как на сто метров – точно делов бы наворотил.
  • Быстрый релиз равно быстрый feedback: при быстром релизе пользователи раньше получают финальную версию. Все просто: несомненно бету качают значительно меньше, чем финальную версию. Поток возрастет – возрастет и feedback. А все таки сотни и тысячи пользователей наверняка смогут предложить любопытных мыслей больше, чем десятки хоть и маститых бета-тестеров.
  • Быстрый релиз равно быстрый баг-фикс: фичи фичами, но от багфикса в новой версии никуда не деться. А значит, старинные пользователи получат и более быстрый баг-фикс. Чем плохо?
  • Огонь и движение: ударим новой версией по бездорожью и конкурентам. Пусть версия и не революционная, но все равно – “а шоб не дремали”. Пока новая версия “прикрывает нас огнем”, можно спокойно “окопаться” и поразмышлять над будущим движением вперед.
  • Как так? Нарушаем-с? если не отметить, то все написанное будет полуправдой (что есть “наглая ложь”). Сколько раз нарушал это правило быстрого релиза, вот ровно столько раз в жопе ней самой и сидел. Ни разочка меня расплата не миновала. Неспроста же!?!

Один релиз – один день: это еще одно сугубо эмпирическое правило. Правда, оно уже и не только, да и не столько к самой разработке как таковой относится, поэтому о нем как-нибудь отдельно.

P.S. просто не могу молчать: убить мало этот пилять Сбербанк! С кризисом они мать-иво борются! Платеж от 29 июля… Знаете когда деньги пришли? Седьмого сентября! Нормально, да!?!
Ладно, продолжаем разговор – “Адские клоуны. Часть вторая”. Платеж от 5 октября, сегодня 4-ое ноября. Как вы думаете, пришли денюжки!?! Может убрать их из способов платежей нах!?!

суббота, 24 октября 2009 г.

MobileLive – блог о юзабилити

Новый блог – MobileLive. Новый, по крайней мере для меня, блог про юзабилити и пользовательский интерфейс. Пока статей не очень много, но в целом направленность очень порадовала. Давно искал!

Что отдельно понравилось, так это “золотая середина”. Статьи и в меру содержит теории, но и вполне подробно описаны и живые, конкретные ситуации. Ну, поехали по порядку.

Что хорошо: последние выпуски посвящены прототипированию пользовательского интерфейса. Хватит теории, перейдем к практическим занятием. Как-то доводилось заниматься прототипированием UI, ох и натрахался я тогда. Думается мне, размышляется, что-то не то я делал, и не так, да еще и наверное не туда. Поэтому-то и любопытны статьи с фактическим материалом, со ссылками, с примерами.

Что плохо: пока не видно ссылок на конкретный софт для прототипирования UI. А нужны, ой как нужны! Хочется взглянуть, чем пользуется профессионал. Любое обучение ведется на примерах – “смотри и делай как я”. Всегда и во все времена так учили – начиная от первобытных людей на охоте, и заканчивая вполне современными аспирантами и не на очень-то охоте. Но думается, что недостатки эти временные. Вопросы заданы – обещали в следующих постах.

Что ужасно: началось все с анонса в форуме пользовательского интерфейса на КЫВТ.ру. Но впоследствии из блога создалось впечатление, что автор женского пола – “я уделяла… я занималась”. Чего, между прочим, из поста на КЫВТ.ру ну никак не следовало.
Кто ж так делает!?! Нужно ж было сразу в посте недвусмысленно намекнуть, что автор женского пола. Это хоть и не столь очевидный, но для старожилов более чем известный прием: хочешь ответов на КЫВТ.ру – прикинься бабой милой девушкой! Проверено не по разу – прием безотказный! Вплоть до второго аккаунта на КЫВТ… (это все шутка, но нужно ж было к чему-то придраться:).

А вообще блог более чем порадовал – жду продолжения с нетерпением.

Напоследок пару комментариев по делу, что понравилось, а что нет, и почему “нет”. Чтобы не тянуло на засраную хвалебную “журналистки-заказную” рецензию. Глядишь и ASPа (автор блога) прочтет этот пост – авось инфа и сгодится.

GUI я занимаюсь в софте, причем в десктопном – здесь вам не сайты! Причем писать этот самый “гуй” я как-то привык ручками, прямо в коде, на помойку все эти формы да бильдеры (“формовыми гуями прославиться нельзя” ©)
Муторно, оно конечно муторно. Но занятие это благодарное , только когда точно знаешь чего писать, когда перед глазами есть видение, есть какой-то прототип. А вот когда оного нет, боже упаси прототипировать это на каком-нить C++ – работа мама не горюй, долгая и медленная. Но главное, когда прототип завершается, то результат летит в помойку, т.к. получилось не то. На колу мочало, начинай сначала.
Все логично – прототипирование занятие итеративное. Но с такой скоростью прототипированием можно заниматься ну очень долго, что ни в какие ворота. Перепробованы всякие связки для такой работы – но как-то всё не то. Поэтому и хочется ссылок на конкретный софт для прототипирования UI, хочется уже пощупать ручками…

Чтобы самому уж не быть сугубо “тетеретиком нашего движения” приведу пример. Буквально сейчас, за последние недели жестко встала проблема как раз с протипированием двух новых фич в UI. Без прототипа точно никуда – в этой задаче и так дай бог если треть от силы ясна. И что!?! А ничего – воз и поныне там, не сделано ни черта! Просто не знаю как и выкручиваться!

И еще. Не стоит скатываться до статей некоторых (не будем показывать пальцем) сайтов по юзабилити. Уж больно у них статьи какие-то либо в лес, либо по дрова. Или уж вода водой – азбучные истины. Повторение, конечно, мать учения, но не в 30-ый же раз в первый класс!?! Ну прочитаны, прочитаны! уже и Купер, и Раскин, и Тидвелл, и Головач и еще много чего – так что начинать совсем уж “с алфавита” уже неинтересно. Или уж наоборот – сплошные заметки с “полей боёв” – получается какой-то треп в курилке, экий междусобойчик. Либо так, либо сяк – а посредине ничего нету. Дайте ж инфы “второклассникам” - “арифметику” уже вроде как прошли, хотелось бы перейти к “алгебре”…

Итого: мне лично очень понравилось! Задеты вопросы, которые и сам себе не раз задавал – да вот с ответами у меня пока как-то не очень!
2ASPa: С_П_А_С_И_Б_О! Так держать! Больше блогов – хороших разных!

четверг, 22 октября 2009 г.

Avangate-2

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

Вопрос первый: "как мне изменить цены на конкретные лицензии конкретных продуктов, не шаманя с параметром QTY, которые отвечает за число копий. Ответ получен:  предложили прогуляться в раздел расширенных цен (advanced prices). Вы, конечно, будете смеяться, но там в очередной раз узрел незабвенную надпись “This is feature is unavailable in Your account”.
Странные дела творятся, о хоббиты. Запрос в саппорт отправлялся непосредственно из панели управления, и уж чего-чего, а информация о моем аккаунте уж точно присутствовала в запросе… Если что предложили обращаться к моему account-менеджеру. Ну, пожалуй, (допустим) я и не против, но пока это уже третье письмо, а информации как мне поможет в этом вопросе эти самые advanced prices как не было, так и нет.

Второй вопрос: как удалить свой собственный продукт из этой самой панели. Ответ прост: пользователь не может ничего удалить. Он может только отключить продукт, сделать его неактивным. Теперь в моем аккаунте значится как минимум один продукт “Моя Прога Нах X.YY” с заведомо ошибочной информацией, правда все-таки отключенный. И еще четыре продукта “Моя Прога”, “Моя Прога Хоум” и.т.д. также с достаточно мутноватой политикой ценообразования, которую хорошо бы сменить – а в идеале снести нафиг и сделать заново.
Откуда возникает необходимость наблюдать эти продукты в отключенном (disabled) состоянии, вместо того, чтобы просто удалить – совершенно непонятно. Казалось бы, удали продукт и  будет всем счастье: сервер Avangate не будет заниматься лишней, и абсолютно бесполезной работой, ну а пользователь в свою очередь не рискует впопыхах да в запале отредактировать отключенный продукт (это запросто: когда висит сплошной список “Прога Хоум”, “Прога Персонал” и.т.д. – самым банальным образом промахнуться строчкой в списке не сложно).

Пра-а-а-адалжаем разговор (© Карлсон). В поддержку отправлено еще запросов, причем в том же самом непосредственном стиле, в каком и были написаны их ответы. Что мне даст фича advanced prices, и зачем ее мне рекомендовать, если она ни черта не может мне дать, по причине своей отключенности. И\или как пользователь по фразе “The feature is unavailable” сможет выстроить единственно верные предположения о предназначении фичи, и что это то, что ему и надо?

PS: безусловно, ирония в этом посте прослеживается невооруженным взглядом. И вполне, может быть, что я еще не достаточно погряз в общении с саппортом, и возможно не до конца (или единственно) верно формулирую свои вопросы.
Всё так! Всё вполне именно так и может быть на самом деле. Но мне можно! Я пользователь, а они саппорт. А пока никакой полезной информации все еще получено не было. Все это вполне стандартные “отписки”.

PPS: Наш паравоз вперед летит, а в Plimus остановка! :)) Пока, лично у меня, с разработкой и доводкой этой самой “Моя Прога Нах” время терпит. Хелпы надо дописать, что-то “порешить” с версией по умолчанию (portable или все-таки с инсталлером), статистику кое-какую хотел по западным пользователем собрать…
В общем, есть мёллер время есть. Но оно конечно! Но, как в том анекдоте про нос заднице, есть и нюансы.

  1. Продукт больше ориентирован на европейцев, посему наверное было бы значительно интереснее сотрудничать и с европейской конторой (полагал, что это желание взаимное).
  2. Судя по статистике с сервера, мытьем ли катанием, но европейцы уже скачивают новую триальную версию, несмотря на то, что ее даже нет в аглицкой части сайта.
  3. От пользователей вопросы “куда грузить бабло” уже поступали! (ключевое слово “уже”).
  4. Первый заказ уже прошел. Человек просто сбухты-барахты не туда и не то проплатил, даже меньше запланированной цены. Но, куда как проще, было порадовать пользователя ключом, чем объяснять про Avangate. Если бы последние чесались быстрее, возможно это был бы именно их заказ.

Можно, конечно и подождать – кто ж спорит! Только куда как проще зайти в Plimus, и все сделать там, не засоряя себе мозг таким содержательным общением!

суббота, 17 октября 2009 г.

Avangate

Сорок минут искал в Avangate как удалить продукт… Не нашел! Может я и из бронепоезда, и не туда смотрел, а может вусмерть меня доставший за последние дни больной зуб все-таки оказал влияние на мои мыслительные возможности… Но все-таки 40 минут это уже слишком. Меня это потрясло до основания! Зачем? Для чего так сделано?

Вспомнился пост на RSDN: что “Avangate просит денег за каждую фичу в аккаунте”. Действительно так. Не по разу за эти сорок минут нарывался на “this feature is unavailable in Your account”. Ни пояснений что за фича, ни что она мне даст, ни тем более ссылок как получить фичу. Маркетинг, конечно, маркетингом – но не слишком ли!?! “Пассажиров клиентов не нужно линчевать без особой на то необходимости” (© Остап И. Бендер).

Отправил запросы в тех. саппорт Авангейта. Пол дня прошло – ни ответа, ни привета. Хоть бы тикет прислали, мол “да, запрос принят“? Призадумался, а не поспешил ли завязываться на Avangate…

UPS: продолжение истории в этом посте.

Позитивчик

Взято отсюда.

пятница, 9 октября 2009 г.

Протекторы и паранойя антивирусов

Ночка выдалась – разработческая, добротная, с приключениями и со счастливым концом. Хотя, скорее это уже было счастливое “начало”, т.к. этот самый счастливый “конец” наступил только под раннее утро.

Разработал, значитъ-панимаешь, софтинку. Закрыл ее, значитъ, протектором. Гружу на сайт по FTP – у-у-упс! Облом! Закачка проходит, но в последний момент файл отвергается сервером… Эка, блин!

Смотрю логи. Оказывается это антивирь на сервере ругается. Троян я оказывается написал… О, как! Ну, ладно – троян так троян – не в первой же! Перепишем, перекодим и станет “троянчик” белым да пушистым.

Начинаю разбираться: собираю exe-шник в разных конфигурациях, по очереди вырубаю элементы защиты, гружу по фтп непротекченный exe-шник. Долго ли коротко, но выясняется, что антивирю не нравится именно запротекченный код – чистый exe-шник грузится в нормально. ОК! Бегом на virustotal, сканируются разные варианты exe-шника, вычисляются возможные кандидаты на паранойю. Выявляется парочка-троечка. Начинаю теребить тех. поддержку хостинга: что за антивирь, отчего паранойя? Выясняется виновник – ClamAV.

Ну да ладно, начинаются игры с протектором: меняем настройки так, сяк, эдак! В момент Икс все срабатывает, и проблемный exe-шник уже на сервере, да и на virustotal проходит проверку вчистую. Отлично! Поют сердца. Качество работы антивиря впечатлило безмерно. Многие элементы защиты в проблемном exe-шнике применялись и в другом софте: контроль целостности кода, собственные виртуальные машины, асимметричная криптография, поверх пройтись протектором – и хоть бы хны! На всех этих приложениях не возникало ни малейшей проблемы, а тут на тебе!

А сегодня к вечеру, на хостинге вдруг появляется вот такая вот новость: безопасность сайта превыше всего. Сиречь, догоним и перегоним всех по false-positive срабатываниям антивирусов :).

Эка разобрали мои письма тех. поддержку, если даже новость через сутки вывесили!?! Правда, новость не то чтобы не достоверная. О нет! Все вполне верно. Это правда, только правда и ничего кроме правды. Только это не вся правда! Проблема-то была не вирусах, а в недоантивирусах :). На virustotal версия ClamAV и сигнатурные базы за сутки так и не сменились, но в конце концов clamAv exe все-таки пропустил. И смех, и грех!

В завершение: практически сразу был опробован метод загрузки на ftp-сервер запароленных архивов, кои антивирь, конечно же, пропускал без вопросов. Собственно говоря, кто мешает указать пароль к архиву в комментариях? Вроде как выход? Да и архив аккурат был c portable-версией – как бы подразумевается, что пользователь распаковкой владеет!?! Только как-то это более привычно для вареза на рапидшарах – уж больно подозрительно это – архив для публичного скачивания под паролем!
Имхо, запароленный архив скорее приведет к проверке на том же virustotal, с последующими закономерно и бесконечно вытекающими вопросами пользователей.

PS: а сегодня день рождения Джона Леннона! Сегодня бы ему, между прочим, стукнуло бы уже 69 лет…

суббота, 3 октября 2009 г.

Дзен. Две статьи

Сегодня немного о Дзен – две ссылки на любопытнейшие статьи:

Жизненный цикл программиста
Статья Михаила Донского. Это тот самый Донской, который автор ДискоКоммандера и основатель конторы ДИСКо. Личность более чем легендарная в нашей отрасли!  Кстати говоря, когда-то, по молодости, уже в какие-то незапамятные времена был на собеседовании в этой самой ДИСКо. Уж, конечно с Михаилом мне пообщаться не довелось, но картина самого посещения до сих пор в памяти осталась. А о чем-то это да говорит…

История одного байта 
А это братцы, самый разнастоящий Дзен. Когда-то, в одна тыща черт его знает каком-то лохматом году эта “весчь” была удостоена публикации на моей еще самой первой домашней страничке. Страничка давно уж канула в лету, а сегодняшний день кое-чем аккурат навеял воспоминания о первых впечатлениях об “одном байте”. Ну, коль странички нет, чего бы и лишний разок не увековечить ссылкой в блоге!?!

PS: может эти статьи для кого и баян, а для кого уже и лохматые да “с хвостом”, но ссылок они более чем достойны. Авось кому-то попадется и в первый раз, а тексты все ж эпохальные!

воскресенье, 27 сентября 2009 г.

Девелоперский отдых. Йога

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

image001

image002

image003 

image007

image008

Приятного и оздоровительного воскресного отдыха, коллеги!
Материалы для самостоятельной работы см. здесь.

PS: есть самое искреннее желание поблагодарить всех высказавшихся в  “Ограничениях триальной версии”! Вот теперь точно понятно, зачем нужен блог: пока сочинишь пост, сам сто раз все “образмышляешь” да передумаешь. А почитав комментарии, мысль дотачивается уже до почти наброска кода. Получилось, что от подсчета запусков или expired date никуда не деться. Да пришлось поколдовать с самописным с нуля notification в трее. Отчет о том, что получилось, будет позже. Народ, С_П_А_С_И_Б_О за комменты!

Ну, а о летних видах активного отдыха поговорим поближе к лету.

вторник, 22 сентября 2009 г.

ZIP-архивы. Просто и элегантно

На CodeProject.com появилась новая статья о работе с ZIP-архивами “Zip Utils - clean, elegant, simple, C++/Win32”.

Вполне элегантный код. Другие библиотеки для работы с ZIP-архивами уж больно навороченные: то разные методы сжатия, то завязка на MFC вроде CZipArchive. Но это все не то! Как правило, сжимать файлы приходится стандартными архиваторами вроде того же самого WinZIP. Ну, не буду же я выкладывать на сайт дистрибутивы в ZIP-подобном формате, но все же несколько ином!?! Как пользователь его распакует? Поэтому, зачастую, задача сводится всего лишь к распаковке стандартного ZIP-архива.

Вот что-то подобное давно и искалось. Чтобы код был прост в использовании, чтобы всегда поддерживал самый обыкновенный ZIP, чтобы не было зависимостей от сторонних DLL. Ну и чтобы, весьма желательно, не довешивал в бинарник и еще полторы сотни килобайт – больно это жирно будет для банальной распаковки ZIP`а!

Короче, скачал. Попробовал. Набросал за пяток минут пару тестов на MFC  (весь код занял с десяток строк). Полный зер гут! Работает отменно: просмотр архива, поддержка паролей, распаковка. То, что надо! Весь бинарник в Release-версии весит всего лишь 23 кило (VC6) – впечатляет!

PS: осталось только придумать, куда это прикрутить. В Aml Pages что ли!?! Дык вроде как ни к чему? Там как раз и есть свой собственный, самописный, ZIP`о-подобный алгоритм… Работает как часы.

среда, 16 сентября 2009 г.

Ограничения триальной версии

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

Вот как раз на ограничениях и начался “чудный секос”. Ёптыдь, кто бы мог подумать, что ограничения это так сложно!?! Однако-ж!

Ищем же золотую середину!?! Мало ограничений – никто не будет платить; много ограничений – никто толком не распробует блюдо, и снова платить не будут!

Похоже, компромисс это искусство.
Что там у нас обычно: ограничения по сроку использования, ограничения по функционалу, да нагскрин нам в руки.   Замешиваем все три ингредиента, соли-перца по вкусу и “блюдо” пользователю на стол.

Ага. Щаз!!! Здесь случай особый! Добрую половину этих приправ некуда солить, а с оставшимися двумя с половиной приемами не пойми что делать… Короче, у данной шароварки есть некоторые нюансы. Огласим весь список, пожалста!

  • Предназначение софтины в кастомизации сторонних приложений. Это означает, что никакого постоянного окна у нее нет. Сидит себе софтина в трее, да наводит определенный “порядок” в рядом работающих приложениях.
  • Программа не работает с данными. То бишь все пользовательские данные это ее собственные настройки. И ничего более.
  • Программа портабельная – соответственно может, а частенько и работает с флешки.
  • В подавляющем большинстве случаев программа стартует из автозапуска.

Отсюда вытекают довольно нетривиальные последствия.

  • Ограничение функционала: крайне не хочется делать, т.к. софт только-только начинает развиваться, и пока особо ограничивать нечего. Все супер-пупер навороты запланированы на следующие версии.
  • Ограничение данных: нечто вроде объема документа, запрет печати, водяные знаки. Нечего ограничивать! Потому как нет никаких пользовательских данных, документов и.т.д.
  • Ограничение по времени использования: нельзя, потому как… да ловится это на раз-два-три. Да и программа портабельная – куда запуски (время) писать, если она с флешки работает!?!
  • Нагскрин (nagscreen) при старте: нельзя, т.к. в 99 из 100 случаев программа стартует вместе с Windows… Ага, блин! Вот только нагскрина при запуске Винды не хватало!
  • Нагскрин на выходе: тоже не годится. Т.к. в 99 из 100 завершаться программа будет опять-таки вместе с самой Windows.
    Лочить выход из Винды да закрытия нагскрина ручками это вообще не дело!
    А повисеть нагскрину пару-тройку сек да и закрыться… А где смысл? Ну закроется всё на пару-тройку сек позже, какой же это нагскрин!?!
  • Нагскрин по ходу работы: опять двадцать пять! Не прокатывает! Почему – опишу ниже.

Софтина не имеет своего окна, и попросту кастомизует работу соседних приложений. Правда, судя по фидбеку от пользователей, кастомизует вполне хорошо, удобно и блин ваще. Собственно, именно поэтому сие чудо обычно и стартует вместе с Виндой, и с ней же завершается. Но 99 процентов времени программа просто болтается в трее, где можно включить\выключить оную кастомизацию да плюс меню для доступа к настройкам. А больше ничего и нету – вся ее работа творится в этих самых соседних приложениях.

Поэтому с нагскрином посреди работы возникает примерно следующая ситуация. Пользователь сосредоточенно работает в каком-то стороннем приложении, и вдруг у-у-упс, возникает нагскрин… Возникает он настолько неожиданно, настолько стремительно, что просто хочется сказать “ух-ты, ёпты!”. При этом, конечно же, пользователь сбит с толку. Работает себе в каком-нибудь, ну скажем, Word`е, пишет себе понимаешь текст для блога, размышляет, придумывает, в общем, с головой погружен в свою же собственную задачу. А тут фигакс, и в центре экрана появляется какая-то фигня, перекрывает его же любимый Word, и давай себе считать секунды.

Это настолько отвлекает, настолько раздражает, что просто слов нету.
Не голословно утверждаю! Сам уже перебрался на триальную версию, и вовсю гоняю этот нагскрин. Если даже мне – автору – от этого нагскрина настолько нехорошо, что проще и быстрее нажать “Выход из приложения”, чем ждать несколько секунд пока станет доступной кнопка “Продолжить”.
Потому что нагскрин отвлек крайне неожиданно, заставил что разве не вздрогнуть. И к тому же заставляет ждать пару-тройку секунд, пока можно будет вернуться к основной задаче. А между прочим в этот момент я – я
! ни Пушкин, ни Билли, ни соседка – а я_дорогой_любимый_бесконечно_милый – в эти самые драгоценные секунды теряю сфокусированность на своей собственной задаче, теряю нить размышлений, контекст своей работы. Вот потому и проще кликнуть на кнопке “Выход”. А после кликов так десяти-двадцати вообще снести софтину нафиг!

Вот такая возникла проблема с ограничениями бесплатной версии. Ограничения по сроку использования, по функционалу не подходят.  Но ведь что-то же надо показать пользователю? Показать на предмет, что “можно и без гемора, но тогда уж за деньги“, иначе откуда он об этом узнает?

Остается только нагскрин. Только вот загвоздка: вариантов его показа совсем немного – это не старт, и не завершение софтины. А нагскрин по ходу работы в таком виде стимулирует вовсе не покупку, но русский мат да скорый снос проги.

И куды крестьянину податься – ума не приложу!?! Коллеги! Что делать? (“Кто виноват” уж не спрашиваю – в курсе :)

PS: Что это за софтина, я пока карты раскрывать не буду.
Скажу только, что софтина написана не вчера, не позавчера, и даже не с месяц, а несколько лет назад.
Все это время прога благополучно и более чем популярно пребывала в стадии freeware. Поэтому фидбека по ней более чем хватает, а посему и картина ее повседневного использования есть достаточно четкая.

понедельник, 14 сентября 2009 г.

Поддержка разворачивающихся постов!?!

Хм… действительно что-ли появилась поддержка разворачивающихся постов в Blogger?

А где же Балмер? (попытка №3)

Примечание к попытке номер 2: что ж, несмотря на происки копирайтеров, которые буквально за день прибили ролик на YouTube, потерянный ролик был вновь разыскан на просторах сети.
Хех, Microsoft банит рекламные ролики Windows 7, а они вновь находятся с помощью Гугла, на том же YouTube (между прочим, сервис Гугла) да причем еще посредством браузера Chrome (между прочим, разработка Google)…Экое однако возникло противостояние гигантов из Редмонда и Маунтин-Вью!?! :)
Попробуем выложить еще разок!

Microsoft начала пиарить Windows 7. Понравился один из ролов… Хотя сдается мне, вся фишка не в картинке, а в саундтреке, действительно симпотный! Все мы – аудиалы или визуалы или еще как

Заколебали удалять ролик - попробуем выложить здесь

Но вот вопрос, а где же Балмер? Что-то тут не так, ребяты…
PS: Если ролик опять забанят, стучите в камменты – на этот раз ролик уже слит на хард.

четверг, 3 сентября 2009 г.

Потерявшийся клиент

В одном из прошлых постов шла речь о возможных способах выхода из…тьфу ты, входа!!! в “рабочее”, активное состояние. И между прочим, был забыт такой замечательнейший способ как бабло. А ведь бабло побеждает зло! Что может лучше стимулировать к работе (или уж почиванию на лаврах, но без мук совести) как не накапавшая за время отсутствия девелопера юзерская денежка!?!

В общем, сажусь намедни после выходных разгребать накопившееся наше всё – саппорт, форум, RSS, почту и.т.д. И – о радость – The Bat вынимая “мыло из мыльницы” радостно “зааплодировал”. То бишь, проиграл мелодию, обнаружив, что в почту свалились очередные ордера. Кстати, говоря, удобная штука в Бате: настраиваем признак(и) письма, и Бат при получении такого письма проигрывает указанную мелодию, заливая нас трелями и положительными эмоциями.

Ну, да ладно. Долго ли коротко, ключи отправляются к новым юзерам. Обязательства выполнены. Мани на месте, жизнь прекрасна. Отправляюсь разгребать форум от моих не в меру настырных тестеров (хотя, быть может, их настырность это манна небесная…). Все идет свои чередом, состояние “потока” достигнуто в считанные часы, разработка несется ни по дням, а по часам. Релиз приближается со скоростью урагана Химена.

И вдруг, от клиента, которому ключи отправлены еще позавчера, сваливается мыло: что мол могли бы ему хотя бы и ответить на письмо с его ордером… У-у-упс! Похоже эти самые ключи он позавчера так и не получил. А клиент – директор отдела одного Интернет-магазина, в средних видимо годах, и вообще весьма спокойный и рассудительный, если уже 5-ый день сидит без регистрационного ключа и не “рычит”. Короче, лакомый это клиент. Ценю я таких: знают чего хотят, умеют облекать свои мысли в понятные слова, нужны еще лицензии – купят. В общем, мечта, а не клиент.

Буквально через минуту мылом переспрашиваю его, получал ли он позавчера ключи? Ни ответа, ни привета. А мыло на домене этого же магазина, так что на кривой сервер грешить не приходится. Проходит полчаса – снова тереблю его мылом. Реакции ноль. Может антиспам так чудно у них в магазине настроен? Окей! Валю в этот магазин, нахожу мыло веб-мастера, и пишу письмо ему с указанием полных ФИО и должности клиента, объясняю ситуацию… Опять все то же, все так же. Ноль ответа. Ну ладно – “быват”. Слава яйцам богу оплата шла через электронные деньги, причем прямиком со счета. Захожу в е-мани, разыскиваю платеж, выуживаю из него личный email клиента, пишу по нему. Полдня прошло… Полет нормальный. Ни ответа, ни привета. А клиент-то годный!?! Да и не привык я вовсе, чтобы у меня клиенты пролетали.

Вот вам бабушка и День Знаний :(. Знания есть – известно многое: магазин, мыло клиента на сервере магазина, мыло веб-мастера магазина, ФИО и должность клиента, а толку с этих знаний? Две консервные банки, и дырка от баранки! Что делать, чего б предпринять – непонятно! Разве что вроде как телефон в отдел магазина еще есть. И что? Похоже придется теперь звонить? Вариант “ну его нафиг” даже и не рассматривается, но чтобы я сам звонил клиенту, это уже что-то новенькое…

среда, 2 сентября 2009 г.

Гиперссылки в RichEdit

Наконец-то Microsoft официально “раскололась” об особенностях автоматической подсветки гиперссылок в RichEdit. И-э-эх, этот бы код “да богу в уши” да пару-тройку лет назад бы…

Если внимательно почитать статью, легко убедиться, что все навороты вроде подсветки адресов email без префикса mailto, тултипы к гиперссылкам поддерживаются версией RichEdit 5.0 или выше. Коего даже в Windows XP SP3 днем с огнем не сыщешь. Всё это, конечно, очень здорово. Но есть некоторые “но”. Например, когда RichEdit четвертой версии “светит” ссылки сам – автоматически, то он где ни попадя распихивает угловые скобки. Приятный такой сюрприз, которого во всех предыдущих версиях не было. Так что, если используется механизм собственных гиперссылок с использованием угловых скобок – весь ваш код поплывет напрочь.

Но это еще полбеды. По ходу автоматической подсветки RichEdit без конца генерит нотификацию EN_CHANGE – изменение текста (если установлена маска ENM_CHANGE). Тоже особенность с последствиями. Кладете текст в RichEdit, просите подсветить ссылочки и у-у-у-упс, весь текст вдруг преображается, и тут же помечается как имеющий несохраненные изменения.

Ох, и накушался я отладки пару-тройку лет назад, пока разбирался с этими незначительными “тонкостями” RichEdit 4.x. Представьте какая красота: открыл документ, посмотрел на текст, закрываю – а он просит сохранить изменения!?! Ух и немало было ночей потрачено на выяснение “какая сволочь стреляла”.

В конце концов, положил я с прибором на автоматическую подсветку и написал собственный алгоритм парсинга гиперссылок, безо всякой мути вроде изменения текста и словно по волшебству появляющихся везде подряд угловых скобок. Ну, а уж свой тултип прикрутить к этим гиперссылкам задачка совсем уж несложная. Хотя стоит отметить, что теперешние microsoft`овские тултипы всплывают даже и на моих “ручных” гиперссылках :).

Тултипы поддерживаются в RichEdit 5.0 и старше, и включаются так:

//добавим определения, если их нет в старых header`ах
#ifndef SES_HYPERLINKTOOLTIPS

   enum {SES_HYPERLINKTOOLTIPS=8};
#endif
#ifndef EM_SETEDITSTYLE

   enum {EM_SETEDITSTYLE=(WM_USER + 204)};
#endif
SendMessage(hwndRichEdit,EM_SETEDITSTYLE,
    SES_HYPERLINKTOOLTIPS,SES_HYPERLINKTOOLTIPS);

Что ж, посмотрим, что Microsoft преподнесет в аспекте совместимости RichEdit на этот раз…

четверг, 27 августа 2009 г.

Мотивация и состояние потока

Иногда разработчик работает с удвоенной энергией: всё спорится, решения принимаются мгновенно, идеи переполняют голову. В общем-то, и никакой особо дополнительной мотивации не нужно. Вам такое знакомо? Когда код, который в другой раз писался бы с неделю, вдруг полностью куется за один день. В психологии такое состояние называется “состоянием потока” или попросту “поток”.

А иногда сидишь битый день за компом, бесцельно двигаешь мышкой, тестируешь “тетрисы” и “шарики”, без конца серфишься по всем мало-мальски интересным сайтам в сети. Причем абсолютно бесцельно серфишься. О таком же синдроме рассказывает и Джоэл Сполски (Joel Spolsky), так что, похоже, не боги горшки обжигают.

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

Вот несколько способов, которые применялись с переменным успехом:

А поговорить?
С пользователями все равно рано или поздно общаться надо. Так вот, почему бы не потратить это “бесцельно прожитое” время на трёп с пользователями!?! С одной стороны, вроде и работка - не мешки ворочать, а с другой стороны позволяет побыстрее включить мозги в рабочее состояние. Попиз…Потрепаться завсегда лучше, чем работать. Но будет ли от конкретного трёпа толк, это еще бабушка надвое сказала.
Приятность: 3,5-4 баллов; полезность: 3-3,5 баллов (по 5 балльной шкале)

Рабочая тетрадка
Покопаться в старых рабочих тетрадках, планах фич, списках идей. Опять же занятие как бы всё созерцательное, и вроде как ни к чему не обязывающее. Но все же заставляет настроиться на нужный лад. В общем, мозги “включает”, но иногда изучение старых невыполненных планов нагоняет тоску.
Приятность: 3-3,5 баллов; полезность 4-4,5 баллов

Веб-дизайн 
На сайте обычно всегда хватает какой-то работы. Что-то переформулировать, выкинуть старые материалы в архив, поразвлекаться с дизайном. Действенный способ, но абсолютно не настраивает на разработку. Скорее это сродни “рисованию пейзажей” – занятие больше для души, чем для цели. Что тут сказать!?! Дизайн он же сравни искусству, прекрасному. Но столь ли своевременно им заниматься – “чем бы дитя не тешилось, лишь бы не работать” :).
Приятность: 4,5-5 баллов; полезность 3 балла

Чтение литературы
Один из самых приятных способов. Особенно если работаешь дома, и диван не за горами. Книжку в руки и “в горизонт“. И вроде при деле, не подкопаешься, и совесть не грызет, на тему“сколько можно гонять в шарики”!?! :). Конечно же, всему хорошему в себе мы обязаны книгам ©. Но нежелание разрабатывать давно назревший код, обычно приводит к чтению хоть и специализированного, но совершенно не сию секунду нужного чтива.
Приятность: 5 баллов; полезность 2 балла :)

Пожалуй и всё. Хм… Хорошо, но мало. А неплохо бы собрать целую копилку способов выхода из загула перехода в рабочее состояние.
Мысли есть?

Ссылка по теме: мотивация (обсуждение на RSDN.ru)

PS: “Чем бы дитя не тешилось, лишь бы не руками”. И какую только муть я не согласный писать в блог, лишь бы не доделывать Маплю. Епрст млин, ведь основное все еще сделал аж два месяца назад – а довести до релиза… и э-э-эх, а ну его, скукотища! Уже подумываю над написанием статьи “100 уважительных причин для переноса релиза” :)

среда, 19 августа 2009 г.

Веб разработка

Может стоит перейти на веб разработку?

web-team
Навеяно постами с RSDN, оригинал картинки был взят отсюда.

P.S. К вопросу о разнице веб- и десктоп-разработки. На днях в сети обнаружил весьма любопытные рассуждения Игоря Ашманова, почему у Гугла вряд ли скоро получится с что-то приемлемое ОС Chrome, и почему они нескоро попрут Microsoft с рынка операционных систем.

четверг, 6 августа 2009 г.

Управление требованиями к ПО

Дочитал до конца use-case аналитику Коберна, про которую рассказывал в прошлом посте. Удивительная книга! Читается, если вникать, безусловно очень медленно – язык тяжеловат. Но вникать надо – только когда разберешься, да попробуешь, да покрутишь описанные приемы на конкретных реальных проектах, начинаешь ощущать  фактическую пользу от прочитанного!

Лично мне приёмы Коберна во многом более чем близки! Я согласен, что хорошее текстовое описание доминирует над всякими там UML-диаграммами. По крайней мере в начальной стадии – в любом случае сначала придется разобраться, а что мы вообще пытаемся сделать, а как собственно оно примерно будет работать, а уж только потом “рисовать”. Все эти UML-рисования суть есть уже проектирование, причем проектирование скорее техническое, когда уже ясно “что, куда и зачем”. Но на начальном этапе требования кружочками да эллипсами не выразить – от текста никуда не деться.

Раньше подобные текстовые списки “требований” вел в своей же Aml Pages. Aml Pages обладает для такой работы ощутимыми преимуществами:

  • Текст, текст и только текст. Но не “ничего кроме” текста! Надо? Можно и файл прицепить, и гиперссылки поставить, и отформатировать, и рисунки и все такое в том же духе. Но это дополнительный функционал.
  • Мгновенное и наглядное изменение “статуса”, “важности” записи через автоматическую подсветку, стили форматирования, категории, иконки. Т.е. все-же нужную атрибутику можно менять “на лету” – причем изменения будут наглядны – что может быть нагляднее цвета.
  • Отсутствие излишнего формализма. Не нужно вводить даты, проценты завершенности и тому подобную хрень. Всё это, возможно, и понадобиться, но позже. Сначала только описание самих требований, пожеланий пользователей, багов и.т.д.

Но все же в Aml Pages это были скорее простые wish list – списки пожеланий – безо всякой лишней иерархичности, зависимостей. А вот когда уже понадобилось вести действительно именно списки “требований”, что завершено, что нет, какое требование часть другого, то от иерархий никуда не деться. Требования по сути своей иерархичны.

Попробовал поискать софт для управления требованиями… Ан фиг! Или уж монструозные приложения от гигантов вроде IBM или Rational, которые ну очень уж и сложны в использовании, или… или просто напросто ничего нет.

Пробую использовать ToDoList. Единственное, что хоть каким-то образом выполняет обязательные требования: иерархичность, простенький учёт (завершено\нет), и немонструозность.
Но юзабилити ToDoList хромает более чем! Так себе, на “троечку”. Очень много лишнего – рабочая область очень сильно перегружена элементами управления.
Близкие по смыслу элементы разбросаны по всему экрану, вроде приоритет задачи показывается в гриде, а изменить его можно в комбобоксе аж на другом конце экрана. Да чего уж там - невозможность подвигать столбцы в гриде. В общем, “хорошо, но мало” ©.

Вот и чего теперь делать? Как и в чем управляться с требованиями? Похоже, опять двадцать пять! “Что же? Мне всю жизнь по этой пустыне мотаться!?!” (© Сухов). 
Как же это?  “Снова здорова” - писать что-то с нуля самому? Дык не хочется! Народ, а вы чем пользуетесь?

понедельник, 6 июля 2009 г.

Лимон есть!

Ну, вот и сбылась мечта идиота – я стал миллионером (© Остап Бендер).
Счетчик посещений на www.amlpages.com перевалил за миллион!

Пустячок, а приятно. Миллион посещений за год! Счетчик – свой, самописный, и был прикручен примерно с год назад, где-то в июле, в начале августа 2008-го. Прямо скажем – не ахти что – первые простенькие упражнения на PHP, но ведь считает же.

Правда, Rambler`овский счетчик рядом показывает несколько меньшую циферку. Ну оно и понятно – Rambler был прикручено значительно позднее – уже осенью. И его отставание от моего аккурат тогда и было где-то в 300 с копейками тысяч. Собственно, из-за этих тысяч Rambler и был прикручен – интересна стала статистика: уники, повторы, распределения по странам, часам и.т.д. А раз уж отставание в 300 тысяч за год приблизительно и сохранилось, значит вроде и самописному счетчику можно доверять.

PS: ну вот я миллионер… Если доверять Остапу Ибрагимовичу, то мир вокруг не должен измениться. Ну да поживем-увидим.  Неплохо уже то, что подобные вещи изменяют внутренние ощущения от этого мира в позитивную сторону! “Боевой дух в войсках – половина победы“ (© уж не помню чей).

воскресенье, 5 июля 2009 г.

Pro- чтиво

Сегодня малехо “пофлудю” о чтиве, о значит, профессиональной (pro-) литературе, благо повод давнишний и вполне значительный.

Хочется поделиться впечатлениями об одной замечательной книге – кою читать и заканчиваю -  “Современные методы описания функциональных требований к системамАлистера Коберна (Alistair Cockburn).
Если в двух словах - "ве-е-е-счь"!!!
И э-эх, пока собирался писать об сём произведении, с Books.ru книга уже исчезла, а это уже кое о чем говорит. Стоит упомянуть, что книга настолько стоящая, что когда после первого приобретения, она “отрастила себе ноги” и испарилась в неизвестном направлении, то не долго раздумывая, раскошелился и на второй экземпляр.

cockburn_usecase

Итак, о чем же книга? Да собственно o use-case – о вариантах использования. О том как они описываются, как анализируются, как применяются. Прежде чем проектировать, а тем более уж кодить, все-таки сначала нужно описать требования пользователя. Причем не просто описать, а и обосновать, и понять зачем ему это нужно – как и зачем будет использоваться та или иная сущность. Какие варианты использования важны, а какие нет? Какие делать сейчас, а какие потом? Как понять не очень-то очевидные причины самой потребности пользователя в тех или иных возможностях софта? Вот про то, как находить ответы на эти вопросы и написано у Коберна. И написано весьма неплохо!

Чего только стоят высказывания о уровнях целей пользователя или как увязывать эти самые use-case с планом добавления “фич” в следующие версии. Почему фичу “А” сейчас нафиг, а фичу “Б” всё-таки пофиг? Вот почему, а? А у Коберна изложено!

Среди недостатков пожалуй можно назвать не очень легкий язык. Вроде бы и толково написано, но читается не так чтобы “на одном дыхании”. Но с другой стороны и тема непростая – быстро пролистать, имхо, не получится. Кстати, настоятельно рекомендую хотя бы пытаться выполнять приведенные в конце глав упражнения.

Примеры… Что ж, примеры у Коберна имхо далеко не для всех близки – это либо бесконечные персональные финансы (“бухгалтерию в жо…жизнь!”:), либо примеры непоследовательны – в одной главе “про бузину”, а в следующей “про дядьку”. Но и с этим вполне можно справляться: попробуйте применять эти упражнения и приёмы из конкретной главы, но к своим собственным задачам, к собственным проектам. Совершенно другое дело получается! И чтение мудрёного изложения оживляется, да и польза сразу и налицо.
Когда книга была взята во второй раз, уже с пониманием “шо без вапросов и ано мине нада”, я как раз стал более внимательно присматриваться к примерам и упражнениям, пытаясь что-то сразу применять к своим проектам. Роб-я-я-яты –
са-а-а-авсем другое дело! И понятнее стало, и интереснее, и вообще “ух, харашо пашло!” :)

Действительно полезная книга. Давно не встречал! Отдельно хочется порекомендовать разработчикам. Т.к. ну для аналитиков, пожалуй, это всё не внове. Но вот разработчикам точно не помешает в чуть смежную область окунуться, посмотреть что у “соседей” творится. После прочтения на многие вещи начинаешь смотреть иначе. Многое из того, к чему было непонятно как и подступиться, становится более ясным, и понятным с какого “угла” начинать.

В общем, must have однозначно.
PS: ссылку именно на Books.ru даю все ж таки не случайно. Books.ru, в отличие от какого-нибудь Озона частенько приводит у себя в каталоге и содержание книги, и отрывок. Согласитесь, для нашего девелоперского брата это более чем важно – посмотреть что внутри. Флудить, троллить да баянить все горазды. А вот написать нечто новое толковое да еще и новое – это не каждому под силу.  Просто уж так вышло, что к написанию этого поста мало того что и книга из продажи пропала, Books.ru зачем-то “убил” и ссылки на содержание. Ну да у них там народ более отзывчивый – будем надеяться, что ссылки все-таки вернут, благо просьба об оных уже отправлена (обычно быстро все появляется).