вторник, 29 декабря 2009 г.
Use Case Diagrams
Что перечень сценариев и вовлеченных ролей проще и понятнее описывать в виде таблицы?
Что UCD без детального описания сценариев не имеет смысла, а с описанием - избыточна?
Что с заказчиком диаграммы Use Case непосогласовываешь?
Что отношения сценариев использования на обзорной таблице абсолютно бессмысленны и дезориентируют, что их лучше описывать непосредственно в описании сценария?
среда, 23 декабря 2009 г.
Обновление HTC Hero
"As always, HTC is committed to providing customers with the best possible mobile experience. "
http://www.htc.com/uk/SupportViewNews.aspx?dl_id=671&news_id=254
это весь ихний дескрипшн. Что я из него должен понять?
понедельник, 14 декабря 2009 г.
UI: дружественная отработка неправильной раскладки клавиатуры
Чего хотелось бы от UI будущего – чтобы ситуация “пользователь забыл переключить раскладку” отрабатывалась бы как-нибудь дружественно.
То есть если у пользователя установлены английская и русская раскладки, и пользователь в поле поиска набрал “gbdj”, то система искала бы и “gbdj”, и “пиво”. В идеале, конечно, хотелось бы отработки и ошибок скорописи – перепутанных бкув, опеяаток, связанных с близкорасположенными клавишами и другого. Но хотя бы – отработка ситуации неверной раскладки.
Где нужно поддерживать:
* Всевозможные формы поиска
* Горячие клавиши, shortcut-ы
* Auto complete списки
воскресенье, 29 ноября 2009 г.
суббота, 21 ноября 2009 г.
Про дизайн команды SQL WHERE
“DileSoft: У команды UPDATE есть одна серьезная дизайнерская ошибка. Если скомандовать UPDATE table SET field=value, изменятся все строки в таблице table. Чтобы изменились не все, следует добавить WHERE. Это провоцирует серьезные проблемы, когда, забыв о WHERE, можно порушить огромное количество данных.Мне очевидно, что комада WHERE спроектирована плохо, потому что синтаксис команды не защищает пользователя от ошибки (дает zero fool proof). Понятно, что “исторически сложилось”, “уже не поменять” и т.п. Я сейчас о другом.
urandom: У дверей есть серьезная дизайнерская ошибка. Если прищемить яйца дверью, то яйца отвалятся.”
Представьте, что было бы, если бы в интернет магазине вы забыли бы положить товар к корзину и оформили бы заказ, а вам в результате прислали бы все товары из магазина (и соответствующий счет).
С одной стороны, мы можем написать в help-е сайта, о том, что отсутствие товаров в корзине подразумевает выбор всех товаров, но с точки зрения нормального человека это нонсенс. И сколько было человеко-часов потрачено на исправления ошибок с пустым where – могу себе представить.
Думаю, что гораздо разумнее было бы задизайнить WHERE clause следующим образом:
1) Пустое WHERE возвращает пустор набор элементов;
2) WHERE с фильром ограничивает возвращаемые данные этим фильтром;
3) Специальное сочетание “WHERE ALL” возвращает весь набор элементов без фильтра.
В этом случае семантика клаузы WHERE была бы максимально приближена к естесственным языкам (что кстати и было одной из целей дизайнеров SQL).
А теперь про “яйца отвалятся”
Оппонент DileSoft-а показывает нам пример обычного, обывательского подхода: “Некто говорит нам что вещь, привычная и принятая в нашем обществе – неправильна –> Стебать этого самого некто”. Классическая травля несогласных в мини-масштабе.
Налицо позиция “то, что принято, оптимум есть”. А это ведь не так (почти всегда). И изменяют мир к лучшему как раз такие, как DileSoft, которые способны заметить и понять, что это не так.
Типа послесловия
Буквально неделю назад мы словили очень похожий баг в нашем продукте – API было спроектировано так, что некая бизнес операция применялась для всех клиентов в случае, когда не был указан фильтр.
В результате, из-за редкой ошибки в коде формирования фильтра (закончилось место на диске) он не был сформирован и вся наша команда получила незабываемые выходные, проведенные под знаком “руками все исправить быстро срочно”.
А вы говорите, WHERE…
понедельник, 16 ноября 2009 г.
Обзор: Телефон HTC Hero с интерфейсом Touch Sense или "Android, превед!"
Как некоторые уже знают, я после того как потерял свой iPhone на склонах Чегета, где-то с год не мог выбрать себе нового телефона, в результате чего пользовался Старой Нокией (tm), совершенно неубиваемой и удобной.
После iPhone ты уже не можешь купить обычный телефон – ту же нокию или sony ericsson – берешь телефонку в руки, крутишь, вертишь, нажимаешь какие-то кнопки, а потом плюешь и уходишь из магазина – ну нафиг такое счастье. Все как-то не так.
среда, 11 ноября 2009 г.
Наводим порядок в разработке ПО вместе с maven
Хорошая статья о многих частях, описывающая Maven – средство управления жизненным циклом приложений из мира Java.
четверг, 29 октября 2009 г.
Как отправлять почту через Google Mail с сайта ASP.NET
Грабли, которые подстерегают человека, которому надо отправить почту через почтовый домен, хостящийся на google apps из .net-сайта. Грабли описаны на примере встроенных в фреймворк классов из пространства System.Net.Mail.
1) Надо обязательно использовать TLS/SSL. В web.config это выглядит так:
<system.net>
<mailSettings>
<smtp from=from_person@domain.com deliveryMethod="network">
<network host="smtp.gmail.com." port="587" userName=from_person@domain.com password="PASSWORD"/>
</smtp>
</mailSettings>
</system.net>
2) Кроме того что в конфиге надо правильный порт сказать, в коде надо проставить свойство EnableSsl у SmtpClient (не знаю, почему это не вынесено в <mailSettings>
private static void internalSend(SmtpClient smtp, string email, MailMessage mm)
{…
smtp.EnableSsl = true;
smtp.Send(mm);
}
3) На хостинговом сервере может не пройти проверка сертификата SMTP сервера. Я решил этот вопрос радикально – отключил проверку:
public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}private static SmtpClient getSmtpClient()
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);return new SmtpClient();
}
4) Сам почтовый аккакунт, из-под которого отправляется почта, должен быть активирован в гугле. Это значит, что
- запись для аккаунта создана в контрольной панели google mail
- под самим аккакнтом на gmail заходили хоть раз
- в свойствах аккаунта стоит разрешение подключаться по POP3/SMTP
И даже после этого у вас может получиться отправлять почту совсем не сразу. У меня например гугль начал отсылать письма где-то через день после того как я под аккаунтом залогинился в gmail. Наверное, что-то обсчитывал :-)
пятница, 23 октября 2009 г.
четверг, 22 октября 2009 г.
понедельник, 19 октября 2009 г.
RUB и RUR
Оказывается, международный код (по ISO 4217) рубля - это RUB а не RUR. Код RUR использовался для означения рубля до деноминации 1998 года.
таким образом, "по правильному" 1 RUB эквивалентен 1000 RUR.
"The ISO 4217 code is RUB; the former code, RUR, refers to the Russian ruble prior to the 1998 denomination (1 RUB = 1000 RUR)."
Источники:
- Википедия
- Стандарт ISO 4217
- Общероссийский классификатор валют
воскресенье, 18 октября 2009 г.
.Net 3 - Сила методов расширения
Естесственно, чтобы не нарушить защиту класса, методам расширения недоступны “кишки” класса, к которому они пристраиваются. Метод расширение обязан пользоваться существующим публичным контрактом.
Фактически, это такой способ подстроить синтаксис уже существующей библиотеки/фреймворка “под себя”, уменьшив количество кода, которое нужно написать для реализации требуемой функциональности (любители Nemerle меня поймут :-)
Передо мной недавно встала следующая задача: во множестве пользовательских контролов ASP.NET приложения нужно было анализировать дерево контролов страницы и выцепить из него самый первый контрол, который реализовал определенный интерфейс.
Метод FindControl для этого не подходил – я не имел возможности задавать имя контрола. В результате были написаны пара методов-раширений, которые добавляли требуемую функциональность
вторник, 13 октября 2009 г.
ReSharper 5 Overview
Парни из JetBrains в своем блоге рассказывают о том, что будет в 5-м ReSharper-е.
Выглядит о-очень вкусно, один только Call Tracking это какая офигенная штука. Она, я так понимаю в design time анализирует откуда указанный метод может быть вызван и разворачивает это дерево вызовов. То есть – больше никаких веерных Find Usages :)
Еще из понравившегося – Move String to Resource, то есть интернационализация по одному клику, почти так же удобно как и в XCode.
С новыми технологиями тоже неплохо, обещают поддержку .Net 4.0, VS 2010, ASPNET MVC
C HighLoad++
- А как вы деплоите изменения ваших проектов?
- Как-как... отделом эксплуатации
пятница, 9 октября 2009 г.
Идеальный менеджер пакетов для .Net
Преамбула
.Net разработка исторически была не очень “опен сорсовой”, то есть базировалась на проприетарных библиотеках.Microsoft делает некоторые подвижки в этом направлении – открыл исходники .Net Framework, хостит opensource проекты на CodePlex, но до совершенства еще далеко – например, в VS нет удобного способа при отладке, к примеру, NHibernate, просматривать исходный код этой бибилиотеки.
При этом OpenSource проектов для .Net просто завались – например NHibernate, Spring.Net, майкрософтовские Pattern&Practices Building Blocks etc.
Есть еще и The Mono Project, который мало того, что сам opensource, так еще и порождает множество проектов с открытым исходным кодом.
Зачем?
Если я подключаю внешнюю библиотеку (тот же NHibernate) то мне нужно руками следить за всеми зависимостями, котоые она тянет за собой, следить за их версиями, следить за конфликтом версий и тп.Вместе с тем в Java мире это уже все давно пройденный этап – есть Maven, который поддерживается всеми основными IDE, есть Bulildr, есть opensource репозитории, которые подцепляются без проблем. Есть Ivy the package manager в конце концов.
В Java если ты хочешь разработать проект с использованием например Hibernate или Spring Framework, ты пишешь .pom файл из пяти строчек) – и тот же Maven скачивает тебе нужные версии всех нужных библиотек, со всеми их зависимостями, со всеми документациями и пр.
Что же делать?
Ну, есть NMaven (который суть плагин для Maven), есть Byldan, есть предложенный в Хабровской статье менеджер, но как-то оно все не складывается в единую картину.Я вижу, что идеальный менеджер пакетов должен быть:
- Клоном хорошо зарекомендовавшей себя Java-вской библиотеки (например, того же Maven);
- Совместимым с Visual Studio (т.е иметь плагин, аналогичный Maven integration например в IntelliJ IDEA);
- Использоваться как в .Net так и в Mono – технологии практически идентичные, надо дружить;
- Иметь репозиторий проектов, куда любой уважаемый разработчик сможет залить свой проект для публичного доступа. CodeHaus и Sonatype Nexus – идеалы для подражания.
Вообщем, тема для размышлений богатейшая.
PS - Вот обсуждение на Хабре (комментарии тоже интересные)
http://habrahabr.ru/blogs/net/68453/
PS2 - Сравнение подходов Java/.Net на RSDN - http://rsdn.ru/forum/flame.comp/3275597.aspx
PS3 - посмотреть NPanday
PS4 - обсужение на stack overflow
Полезно? Интересно? Скучно?
Нашел в Блоггере (и с радостью установил к себе) кнопки обратной связи (я вообще большой любитель любой обратной связи )
Так что теперь у каждой статьи появился такой вот блок с галками:
Захочется поставить отзыв – не отказывайте себе :-)
среда, 7 октября 2009 г.
Несколько советов начинающему eBay-щику
… и владельцу карты Альфа-банка
- Если у вас карта Альфа-банка, не пытайтесь привязать аккаунт PayPal к обычной карте! PayPal делает пробную транзакцию на доллар, потом говорит
“We were unable to verify this credit card. Please check if the information you entered is correct. If the problem persists, please try to enter a different credit card.”
Вообще, дальше надо вводить код из референса транзакции, но код ввести нельзя.
При этом, доллар-то списан! Я вчера таких долларов несколько уже списал, буду писать в paypal и требовать их обратно :) - Виртуальная карта Альфабанка привязывается идеально, по факту с ней все получилось. Единстенное “но” – код для привязки в Альфа-Клике не показывается, нужно звонить к ним в техподдержку, вводить телефонный пароль (если нет, они его вам по телефону выдадут), объяснять ситуацию – и милая девушка скажет код по телефону. Код в результате подошел :)
Теперь про собственно покупки – среди продавцов электроникой, бесплатно доставляющих в Россию, несметное множество китайцев и тайваньцев. Судя по всему все они накручивают себе рейтинг, отправляя друг другу фидбеки вида “Excellen transaction, great seller, A+!”.
Рабочая теория: не надо смотреть на позитивные отклики, надо смотреть (и читать) отрицательные и нейтральные.
Лучше страницу откликов развернуть на максимальные 200 откликов/page (фильтра по типу там нет) и смотреть, чем люди были недовольны и как продавец реагировал
Совсем нет отрицательных (и нейтиральных) откликов – странно. Может вообще человек не торгует?
Если плохих отзывов много (например, >5 за месяц) – я бы поостерегся у такого покупать.
Батарею к ноуту я заказал, посмотрим что будет, когда ее пришлют через две недели…
Debugging Tools – как открывать дампы из Explorer-а (.Net Framework 2.0+)
Всем хорошего дня!
Недавно пришлось опять плотно поработать в дампами ASP.NET-овского сайта, снятыми при помощи UserDump.
Дампов было несколько, мы многократно открывали их на разных машинах, каждый раз, открывая дамп приходилось набирать мантру:
- Open WinDbg
- Copy длиннючий путь к sos.dll, сказать .load …\sos.dll
- Open в WinDbg файл с дампом через control-d
Как результат, я начал гуглить на тему скриптов для дебаггера, и нашел чудную статью Carlo Cardella под названием “Never Doubt My Debugger”.
В статье было написано, как настроить WinDbg так, чтобы открывать файлы дампов .dmp в Эксплорере одним кликом (при этом, самостоятельно загрузив еще и sos.dll (sic!):
К сожалению, один-в-один его скрипты не запустились, поэтому я их чуть-чуть подправил, и выкладываю здесь для всеобщей пользы:
Установка
Все что нужно, это скопировать скрипты в каталог C:\Program Files\Debugging Tools for Windows (x86)\scripts (каталог надо создать) и запустить файл register.reg, который добавить в реестр правильнуб команду на открытие .dmp файлов.
Внимание!
Скрипт расчитывает на следующее:
- Debugging Tools установлены в каталонг C:\Program Files\Debugging Tools for Windows (x86)
- используется sos.dll из .Net Framework 2.0 или выше по пути c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\
Соответственно, если вы установили отладчик в другой каталог или у вас другой номер сборки .Net Framework, нужно подправить файлы dbgnet20.txt и/или register.dbg
вторник, 6 октября 2009 г.
Мигрирую на feedburner
Читатели! Если у кого появятся проблемы с RSS, дайте пожалуйста знать.
Рабочее место Юры Скалецкого
Наконец собрался рассказать о том, как устроено мое рабочее место. Относительно недавно – с полгода назад – я, как мне сейчас кажется, пришел наконец к идеалу.
Я настроил мое рабочее место так, что мне все в нем нравится.
Самое главное, чего мне удалось достичь – я теперь могу быстро выполнять рутинные задачи. Я быстро могу запустить нужную мне программу, быстро открыть плейер, быстро включить или выключить музыку, изменить громкость звука, залезть на какой-нибудь сайт. Больше компьютер в повседневных задачах меня не тормозит.
При выборе часто используемых программах я отказался от мегакрасивости и суперуниверсальности в сторону минимального размера в памяти и быстрого старта. Это сильно улучшило мое настроение.
Ноутбук
Все мое рабочее место умещается в одном Lenovo ThinkPad T-61. До этого я жил на ASUS-ах, но после перехода на IBM/Lenovo я понял, что ASUS ноутбуки делать не умеет. А IBM вот умел и Lenovo не разучилась еще, к счастью.Самое прекрасно в Lenovo – правильный предустановленный софт. В нем практически все правильно:
понедельник, 28 сентября 2009 г.
Дело о тормозящем Internet Explorer 8
Две основных претензии:
* Крайне медленно запускается. Хром в этом смысле потрясающе продуман - он запускается очень быстро. Я запускаю браузер сотни раз на дню (не мой стиль держать открытыми множество закладок, да и оперативки у меня впритык). Браузер, который запускается за 2-3 секунды явно доставляет мне больше радости, чем суперуниверсальные мегатормоза.
* Невозможно пользоваться функцией view source. Просмотровщик HTML на сложных страницах открывается больше минуты. Чем, вы думаете он занимается? Он раскрашивает теги...
пятница, 25 сентября 2009 г.
воскресенье, 20 сентября 2009 г.
ADO.NET: Абстрактное vs Конкретное или "MS - почему?!"
А знаете почему? Потому что во всех примерах, по всему MSDN, во всех книжках код, работающий с ADO.NET пишется вот так:
SqlConnection connection = new SqlConnection(...)
SqlCommand command = connection.GetCommand(...)
SqlDataReader reader = command.ExecuteReader(...)
...
На самом деле, и Sql*-классы, и OleDb* классы совершенно логично наследуют абстрактную модель работы с данными, описанную в System.Data.Common. Это пространство имен предлагает семантику работы с данными через классы DbConnection, DbCommand и т.п.
И по всем правилам объектно-ориентированного дизайна код следует писать вот так:
DbConnection connection = new SqlConnection(...)
DbCommand command = connection.GetCommand(...)
DbDataReader reader = command.ExecuteReader(...)
Тогда программист может при необходимости изменить одну строчку, и перейти к примеру с SQLServer на MySQL (в теории, конечно. На практике все равно весь SQL надо будет переписать. Но тем не менее :-)
На практике - все пишут по примерам. Поиск на Google Code Search по C# коду дает :
- SqlDataReader - 16 000 вхождений
- OleDbDataReader - 2 000 вхождений
- DbDataReader - 2 000 вхождений
Конспирологическая моя часть немедленно видит сдесь заговор со стороны софтверного гиганта с целью устроить всемирный vendor lock-in и ухудшить переносимость DBшного кода, писанного на дотнете.
Иначе как объяснить?
пятница, 18 сентября 2009 г.
Если используешь RAID это не значит, что не надо делать backup-ы
http://gallery.ru/news/article.php?group_id=1&article_id=139
12 сентября ночью в нашем датацентре произошел серьезный сбой, при котором одна из систем хранения, которая содержала в себе изображения за последние 1.5 года вышла из строя.
В своей работе мы используем многодисковые системы хранения со встроенными raid-массивами, которые гарантируют сохранность данных в случае выхода из строя одного из дисков. Это оптимальное решение, которое лежит в основе всех крупнейших сайтов.
И вот так вот легким движением летит в трубу репутация сервиса :-)
вторник, 15 сентября 2009 г.
Совершенный дизайн
Сайт, кроме общей приятности, обладает совершенным дизайном.
Совершенным.
понедельник, 14 сентября 2009 г.
Tip: Как запустить ASP.NET Development Server из командной строки
сделал себе такой вот .CMD файл для запуска примеров ASP.NET Charts
start /B C:\windows\Microsoft.NET\Framework\v2.0.50727\webdev.webserver.exe /port:12543 /path:"C:\samples\dotNet\MSChart\WebSamples" /vpath:"/"
Понятно, что точный путь к webdev.webserver.exe зависит от вашей системы
via this
четверг, 3 сентября 2009 г.
TOGAF
The Open Group Application Framework, TOGAF
http://en.wikipedia.org/wiki/TOGAF
link: Информационный зоопарк ФМС России
160-страничный аналитический отчет, в котором рассказывается о зоопарке информационных систем, внедренных в ФМС России и планах по созданию единой информационной системы, которая будет все-все объединять. Интересно вот почему:
* Отчет в разделе "AS IS" описывает реально БОЛЬШОЙ зоопарк, федерального уровня, с множеством ИС, АС, АРМ-ов, баз данных и всякого прочего.
* Отчет в разделе "TO BE" рассказывает, как может выглядеть объединенная ИС. Эта часть несколько булшитна, но в принципе показывает, из каких компонентов системы такого уровня строятся. Прямо-таки готовый чеклист для архитектора больших АС - см п. 3.2.1.3.
Здесь тебе и warehouse со всеми кодификаторами, классификаторами, справочниками, и система тебе безопасности, и движок форми, и система аналитики и отчетности, и единая база пользователей, и реально развесистый ETL, который объединяет десятки различных ведомств.
Честно скажу, прочитал по диагонали
вторник, 1 сентября 2009 г.
Как вернуть поиск Google в Mozilla FireFox?
Браузер FireFox Начиная с версии 3.0 неожиданно для меня начал использовать в качестве поискового агента по умолчанию поисковик Популярной Российской Компании.
То есть гугль можно настроить умолчательной искалкой в окне поиска, но если ввести не-url в главном адресном окне, то никакого выбора тебе уже не дается - чем сказал папа, тем и ищи.
Ничего не имея против поисковика Популярной Российской Компании, мне все же не нравится, когда меня пытаются переучить пользоваться интернетом - мне и с гуглем было хорошо.
О ужас - нормального способа (через стандартные настройки) изменить поисковый агент вообще нет! Есть грязный хакерский
Итак, steps:
1. Открываем в окне поиска url "about:config" (без кавычек)
2. В ответ на страшное Мозиллино сообщение обещаем, что будем себя хорошо веси
3. Ищем настройку под именем "keyword.URL". Можно воспользоваться фильтром для поиска
4. Проставляем настройке keyword.URL правильное значение:
"http://www.google.ru/search?ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox&q=" (без кавычек)
Все, теперь поиск будет искать нам хороший, годный поисковик.
--
How to return Google Search in address bar in Mozilla Firefox 3.0+. This will handle proper ly national/unicode search queries
1. Open up url "about:config" (no quotes!)
2. Confirm on ugly confirmation
3. Look for setting "keyword.URL". You can use filters.
4. Change the value of keyword.URL settings to
"http://www.google.ru/search?ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox&q=" (no quotes still)
So, that's all
пятница, 28 августа 2009 г.
Code Contracts - декларативное описание параметров вызова для методов .Net
"Contracts allow you to express preconditions, postconditions and object invariants in your code for runtimeКажется, это уже было в Smalltalk. Теперь вот возвращается :-)
checking, static analysis, and documentation. This document covers how to author them in your code, and
contains guidelines for using them eectively with the provided tools.
All of the contract methods are static methods dened in the Contract class which appears in the
System.Diagnostics .Contracts namespace."
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx
http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf
Code Contracts обещают встроить в C# 4.0 и MSVS 2010. Сейчас доступен в виде библиотеки
AutoPatch .Net - how it works
http://rsdn.ru/forum/dotnet/3518828.1.aspx
понедельник, 17 августа 2009 г.
Встречаем: AutoPatchNet with nice UI
Доработал и выложил на Google Code исходники и инсталлятор пре-пре-альфа версии 0.0.1 .Net-овского порта AutoPatch. Авторы начали портирование, но забросили его в лохматом году.
Я довел порт до состояния, когда он уверенно патчит SQLServer-ные базы и добавил к нему консольный и WinForm-овские front-end-ы.
Кроме того, я попробовал использовать AutoPatch как довесок к юнит-тестам, который отвечает за то, чтобы перед стартом тестов приводить базу данных в некоторое известное изначально состояние.
В планах - ввести пакеты для обновления БД (архив, содержащий манифест+каталоги с патчами), сделать чтобы AutoPatch UI открывал такие пакеты в один клик.
Ссылка на страницу проекта: http://code.google.com/p/autopatchnet
См также
вторник, 11 августа 2009 г.
Будущее опять наступило - самодельные спутники
воскресенье, 9 августа 2009 г.
Идеальный package manager - 2
Есть несколько библиотек, предоставляющих Ruby-style migrations, но это не совсем то, что мне нужно. Ближе всего к ожиданиям из готового сейчас RedGate SQLPackager, но он во-первых платный, во-вторых хочется поддержки именно жизненного цикла в духе AutoPatch.
По опыту, идеальный процесс должен выглядеть так
- программисты работают с локальной или dev базой напрямую
- перед началом тестирования при помощи инструмента типа SQLCompare строится дифференциальный sql скрипт между дев-базой и stage. При этом скрипт должен быть в "родном" для БД формате, чтобы не упереться случайно в недостатки фреймворка
- этот скрипт фиксируется в репозитории и затем на основе всех скриптов обновления строится пакет для обновления БД
- этот пакет разворачивается на требуемой базе, причем package manager должен предоставлять либо режим с ручным контролем (для боевой базы, чтобы не страшно было), либо автоматический режим (для всевозможного continious integration
Ссылки по теме
Как прочитать файл .properties из .Net
Нашел для этого класс JavaProperties. Автор утверждает, что он портировал функциональность java-парсера, так что проблем с совместимостью быть не должно. С удовольствием даю ссылку:
http://www.kajabity.com/index.php/2009/06/loading-java-properties-files-in-csharp/
среда, 22 июля 2009 г.
вторник, 7 июля 2009 г.
пятница, 26 июня 2009 г.
[link] Как прочитать параметры с биометрического паспорта
вторник, 2 июня 2009 г.
пятница, 29 мая 2009 г.
HTTP ПЫЩ
четверг, 21 мая 2009 г.
среда, 22 апреля 2009 г.
Матрица компетентности программиста
Оригинал http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm
На мой взгляд, это офигенно. Практически готовая аттестационная таблица для разработчиков.
понедельник, 13 апреля 2009 г.
Есть ли жизнь просле спецификации?
- Назначать менеджером со своей стороны гибкого человека, который абсолютно "в теме" бизнес контекста, желательно с минимальными техническими скиллами (как вариант -- хорошо работает связка "бизнес-спец"+"спец от ИТ").
- Быть готовым к длительной фазе приемки. Быть готовым за нее платить :-).
- Запланировать пилотную эксплуатацию систему на живых пользователях.
- По возможности, не привязывать к первой версии системы критичных дедлайнов.
- Заложить в бюджет проекта достаточное количество времени и денег на доработку системы после старта приемочного тестирования.
- Не надеяться, что после того как спецификация будет написана, она не изменится.
- Не пытаться сделать абсолютно всеобъемлющую спецификацию чисто аналитически -- все равно только после того, как заказчик посмотрит на готовую систему, он поймет, чего на самом деле хотел.
- Проектировать систему так, чтобы было легко вносить очевидные бизнес - изменения (добавить поле, добавить/удалить/изменить валидатор, поправить алгоритм постройки отчета, поправить права на функциональность и т п).
воскресенье, 12 апреля 2009 г.
Вебинары для всех и занедорого
Skype (update 6 sep 2009)
Начиная с версии 4.1, скайп позволяет абсолютно бесплатно передавать при звонке содержимое своего экрана. Причем версия 4.1+ нужна только на стороне того, кто презентует - смотреть можно и со старого скайпа, даже с версии 3.
Как инструмент для показов "один-на-один" - самое то. Группового вещания пока не сделали, ждем.
Слова:
Screen Share, Screen Casts, Presentations, Презентации
пятница, 10 апреля 2009 г.
Good News about SharePoint Designer
пятница, 13 марта 2009 г.
Про пятницы
понедельник, 9 марта 2009 г.
пятница, 6 марта 2009 г.
Atlas, Capuccino, Objective J
воскресенье, 1 марта 2009 г.
Покорение сложности ИТ
Интересная статья, особенно про нормальные формы компонентов.
***
Большинство предприятий не стремятся к пятой «нормальной» форме: ее требования слишком высоки. К 2010 году основная часть новых программных систем для бизнеса будет находиться на уровнях нормализации с первого по третий. Однако поставщики технологий с целью дистанцирования от конкурентов станут вкладывать средства в более высокие уровни инкапсуляции. В течение последующих пяти лет, вероятно, появятся новые инструментальные средства, которые позволят проводить синергическую инкапсуляцию процессов и данных, чтобы поддерживать более высокие «нормальные» формы программной инкапсуляции.
Рекомендации. Любой шаг к нормализации — это продвижение к уменьшению сложности итоговой программной среды. Начните с первой «нормальной» формы и постепенно, по мере приобретения опыта, продвигайтесь к следующим уровням. На высоких уровнях нормализации, однако, действует закон убывающей отдачи: для получения дополнительных выгод требуются все большие вложения.
вторник, 24 февраля 2009 г.
Смачна картопля - атака гипножабы
воскресенье, 15 февраля 2009 г.
Best Disk Cleaner Ever
пятница, 13 февраля 2009 г.
Про Архитектурных астронавтов
воскресенье, 1 февраля 2009 г.
Идеальная грамматическая библиотека
Может быть, тогда никто не писал бы приложений, говорящих на отвратительном русском языке, потому что не пришлось бы писать некрасивых if-ов
Попробую набросать здесь требования к такой библиотеке.
1. Работа с числительными
1.1 Подстановка правильных склонений для числительных (У вас 1 новое сообщение, 5 новых сообщений, 16 сообщений)
2. Работа с временем
2.1 Подстановка правильных склонений для времени (Выходим через 22 минуты, через 30 минут, до завершения работы осталось 33 минуты 21 секунда)
2.2 Подстановка общеупотребительных значений для интервалов времени: (Событие произошло вчера, произошло неделю назад. Следующее событие через 2 дня)
3. Поддержка сообщества
3.1 Открытый исходный код
3.2 Стандарты на API
3.3 Версии для основных языков программирования
Что еще
Знаю, что подобные замуты были с библиотекой gettext, но не уверен, что этого достаточно.
суббота, 17 января 2009 г.
Юзабилити исследование про то, как используют iPhone
Некоторые выводы меня удивили, всем разработчикам интерфейсов - смотреть :)
четверг, 15 января 2009 г.
RadSoftware Regular Expression Designer
http://www.radsoftware.com.au/regexdesigner/
воскресенье, 11 января 2009 г.
суббота, 10 января 2009 г.
Что такое Enterprise Feedback Management Systems
Расскажу сегодня про направление, которое меня вдохновляет не первый год и к которому я имею непосредственное отношение. Это будет рассказ про системы управления обратной связью. И про их применение в различных бизнесах.
Вот, допустим, есть бизнес. Бизнес производит некоторый продукт – товар или, например, услуги. Ну и естественно, cуществует потребитель у этого продукта – ведь он, бизнес, этим живет.
Ну например. Вот компания, которая шьет одежду для молодежи. Кепки-футболки-свитера-галстуки с вышитыми смайликами. Народ покупает, носит, вроде бы доволен. Отдел маркетинга изучает рынок, смотрит, планирует модельный ряд. Рекламщики рекламируют продукцию. Производство производит одежду, старается делать ее удобной и качественной. Сейлзы ищут партнеров для продажи и магазины для реализации. Молодежь читает рекламу, заходит в магазин, видит прикольную одежду, покупает ее и носит.
В этой, типичной, картине мы наблюдаем что-то типа водопада:
Система обратной связи дополняет картину последним (самым приятным мне) шагом – позволяет клиентам влиять на решения, которые принимает производитель.
Выглядеть это может, например, так: При покупке футболки клиент оставляет свой e-mail в магазине и спустя месяц после покупки получает электронное письмо с просьбой рассказать, как покупателю живется с купленной им вещью. Покупателя просят рассказать, чем он руководствовался, покупая товар, насколько он доволен покупкой, станет ли он рекомендовать продукцию своим друзьям. Ответы покупателей затем анализируются и встраиваются в процесс принятия решений компанией. В результате вместо цепочки производства мы получаем процесс с обратной связью, ориентированный на покупателя, а сама компания начинает делать то, что действительно хотят ее клиенты, а не то, что как компании кажется, клиенты хотят.
Решения в системе с внедренной системой обратной связи принимаются по такой схеме:
В реальности, все даже еще интереснее. Корректировка управленческих решений происходит на разных уровнях и в нескольких направлениях: отдел маркетинга изучает результаты опросов и видит, какие модели одежды клиентам особенно нравятся и что клиенты хотят носить в следующем году. Производители понимают, удовлетворены ли клиенты качеством продукции. Продавцы знают, довольны ли клиенты тем, как их обслужили в магазине. Бизнес видит картину в целом, анализируя связь ключевых показателей удовлетворенности связь с другими важными производственными показателями. Практически каждый участник производства может получить пользу от налаженной с системы обратной связи.
Под капотом EFM
На что похожи системы EFM (Enterprise Feedback Management)? Представьте себе аналитика крупной компании, который хочет узнать мнение своих клиентов и донести его до руководства. В распоряжении аналитика всевозможные инструменты – база клиентов в CRM, аналитические калькуляторы, средства построения отчетов, другие информационные системы предприятия.
Наш аналитик мог бы, например, сделать выборки пользователей из клиентской базы CRM, отправить пользователям e-mail с просьбой рассказать том, что они думают о недавней покупке, обработать полученные отклики, а затем собрать владельцев бизнеса и линейных руководителей и презентовать им результаты исследования.
Собственно все это и должна делать EFM система. Система должна:
· Помогать отстраивать процесс общения с клиентом, акцентируясь на сбор и анализ мнения клиента.
· Доносить результаты обратной связи до заинтересованных лиц в компании
· Повышать удовлетворенность клиента – как за счет быстрого решения его проблем, так и за счет того, что клиент чувствует, что к его мнению прислушиваются.
Кроме того, EFM система должна работать максимально автономно, для этого система должна быть интегрирована в информационное пространство компании, в первую очередь с теми системами, в которых содержится информация о клиентах и их действиях.
Система должна предоставлять в удобном виде собранные данные, как для аналитиков компании (в виде многомерных OLAP кубов), так и для руководства (в виде сводных отчетов).
И самое главное – такая система должна быть встроена в процесс принятия решений в компании, то есть собранная информация должна быть востребована на разных уровнях управляющей структуры предприятия.
Ниже я постараюсь раскрыть некоторые ключевые особенности построения и внедрения EFM.
Сбор откликов от клиента
Нужно определить, какого рода данные мы хотим от клиента получить. Как правило, архитектор EFM системы должен общаться с руководителями отделов компании и представителями бизнеса, чтобы определить, сбор какого рода информации от клиента будет особенно полезен.
Существует множество стандартных методик построения опросов, например опросы Net Promoter Score или Customer Satisfaction. Какую схему выбрать, становится ясно после детального анализа проекта.
Workflow
То, как именно построен процесс общения с клиентом, очень важно. Архитекторы EFM системы изучают, как выглядит процесс продажи и встраивают в этот процесс получение обратной связи. Важно, чтобы покупателю было комфортно предоставить требуемый отклик и чтобы он в этот момент был готов предоставить запрашиваемую информацию. Например, если нас интересует качество одежды, которую мы продали клиенту, клиент должен какое-то время в ней походить, понять, нравится она ему или нет.
Хороший процесс взаимодействия с клиентом, скорее всего, не закончится просьбой рассказать о покупке. Если клиент недоволен, то нужно предпринять какие-то шаги, чтобы он стал бы доволен (а заинтересованным лицам отправить, например, тревожный e-mail). Кроме этого можно к примеру, передать такого клиента отделу урегулирования претензий. Если клиент доволен, можно ему предложить попробовать новинки сезона или другую продукцию, которая его может заинтересовать. В-общем, для архитектора EFM системы здесь огромный простор для творчества
Интеграция
EFM системы не были бы столь полезны, если бы не были интегрированы с другими системами предприятия. Для страховой компании, например, инициация опроса может происходить по факту заключения с клиентом договора на обслуживание (эту информацию можно выгрузить в EFM систему из базы данных договоров). Результаты работы EFM системы также могут «уходить» обратно в информационное пространство предприятия, например для недовольных клиентов автоматически будут заводиться запросы в системе урегулирования жалоб.
Правильно сынтегрированная EFM система может вообще не требовать ручного вмешательства – все необходимые действия будут инициироваться событиями из других систем и результаты работы также будут подстыкованы к бизнес-процессам, которые обслуживаются существующей ИТ инфраструктурой. При этом, затраты на интегрирование для качественной EFM программы обычно невелики, поскольку не требуют сколь либо серъезных доработок уже существующих систем, как правило можно обойтись просто передачей текстовых или excel файлов по FTP или общие сетевые папки.
Отчеты
Отчеты это сердце EFM системы. В систему отчетности сливается результаты опросов, которые доставляются заинтересованным лицам в форме, лучше всего подходящей для принятия решений.
Например, для бизнеса это могут быть диаграммы ключевых показателей, из которых видно, какие конкретно факторы влияют на общую картину удовлетворенности клиента и в какую сторону.
Для производства это могут быть таблицы, которые показывают удовлетворенность клиентов каждым конкретным товаром, в разрезе например, социально-демографических данных клиента. Мы можем узнать, сколько мужчин (женщин, пожилых людей) удовлетворены продукцией и наши клиенты имеют сказать по этому поводу. Тогда можно, в буквальном смысле, учитывать голос каждого конкретного клиента
Принятие решений
EFM система сама по себе не имеет смысла, если необходимость такой системы не осознана руководством компании на самых разных уровнях ответственности. Кроме того, часто от руководства требуется изрядная смелость, чтобы узнать, что на самом деле думают клиенты J. Здесь могут крыться изрядно сюрпризов, и не всегда самых приятных. Зато компания, которая умело воспользуется полученной информацией, получает в руки сильнейший козырь – она совершенно точно знает, что нужно клиентам, где стоит усилить бдительность а что, наоборот, не очень важно. Информирован – значит, вооружен.
Ссылки по теме
- http://en.wikipedia.org/wiki/Enterprise_Feedback_Management - Определение EFM
- http://en.wikipedia.org/wiki/Customer_satisfaction - Что такое системы CustomerSAT
- http://www.clientrix.ru - Клиентрикс: EFM платформа, разработанная RapidSoft