вторник, 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. Наверное, что-то обсчитывал :-)
