пятница, 28 декабря 2007 г.

Не давать задания - описывать цели

Напоминаю сам себе - свести к минимуму в общении с лидами от фразы типа "залей файл туда-то", "напиши доку по архитектуре"

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

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

среда, 26 декабря 2007 г.

Скороговорки уважаемых специалистов

Internationalized deliverables

или вот например еще

Internationalized hierarchical vocabulary

раз 10 такое выговоришь, потом язык заплетается

пятница, 14 декабря 2007 г.

Open Source persistence framework list

http://csharp-source.net/open-source/persistence

понедельник, 26 ноября 2007 г.

How to change a _page_ (not entire document) orientation in Microsoft Word 2007

1. Click on "Page Layout tab"
2. Select some text on a page
3. Click Margins->Custom->Orientation and set "aplly to" as "selected text"
4. Click on "OK"

Заметки себе старому - что прочитать

суббота, 17 ноября 2007 г.

Scrogled, "выгуглен"

Мрачный прогноз на тему возможного будущего: поисковый беспредел, бигбраза и т д

http://www.radaronline.com/from-the-magazine/2007/09/google_fiction_evil_dangerous_surveillance_control_1.php

оно же по русски

http://www.jetstyle.ru/scroogled/

Калькулятор МК-152

Шергин тут показал прекрасное: http://mk.semico.ru/dr_vved.htm

2007 год, мощность суперкомпьютеров достигает полумилиона гигафлопсов, Linux/Unix встраивают в мобильные телефоны. А разработчики программируемого калькулятора Электроника МК-52 выпустили наконец преемника - калькулятор МК-152. Который стоит почти 4 тысячи рублей. В который вводят программы с клавиатуры.

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

Вот он, калькулятор МК-152:



"Число шагов программы увеличено до 10000, количество регистров данных до 1000. Для хранения большего количества чисел, до 65000, предназначен электронный блокнот. Кроме этого, в ЭВМ есть область памяти для хранения двоичных или текстовых данных размером до семи килобайт. "

Который предназначен, чтобы учить детей в школе информатике.

"Ещё одно существенное отличие программируемых калькуляторов от современных персональных компьютеров - это доступность и бесплатность программного обеспечения. Программы в большинстве своём просты и не требуют особых затрат труда на разработку."

Я не понимаю. У меня в голове не укладывается. Где были аффторы данного прибора последние 15 дет, где их хранили?

"ЭВМ относится к настольным программируемым микрокалькуляторам с выходом на внешние устройства ввода-вывода. ЭВМ соответствует требованиям ГОСТ 23468-85 к микрокалькуляторам вида Б по конструктивному исполнению, группы III по функциональному назначению и к типу 3 по принципу ввода-вывода информации."


Это что-то типа "поддержи отечественный автопром", да?

* Домашняя страница: http://mk.semico.ru/dr_vved.htm
* Документация:
http://mk.semico.ru/doc/401348_001re_v2.pdf (2.5 Mb)

PS: А, да. Хранить программы и переносить их между Калькуляторами можно при помощи Диска Электронного УЗВМК-1" НПКД.403170.001



PS: И что, кстати, примечательно, что стоимость Изделия примерно такая же, как и у One Laptop Per Child. Внимательный читатель может попробовать сравнить спецификации...

пятница, 16 ноября 2007 г.

Новый сайт!

Ура, у нашей компании - новый сайт!

http://www.rapidsoft.ru

среда, 14 ноября 2007 г.

MVC Framework для ASP.NET - 1я демка

Вот собственно и первое описание грядущего MVC Framework. Выглядит очень похоже на MonoRail. Будем ждать первых бета-версий



http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx

Участие в качестве программиста

вот они - http://hh.ru/vacancy/1001879 - пишут что нужно участие в командной разработке в качестве программиста. Это прекрасно. Участие - это как раз то, что им нужно, судя по стилю объявления :-)

PS - А вот другая вакансия того же Гранита - земля и небо http://hh.ru/vacancy/1056746. Наверное, разные подразделения, разные люди... :-)

вторник, 6 ноября 2007 г.

Про рабочие обязанности, проактивность и миро-творчество

Подумалось тут о рабочих обязанностях

Те обязанности, которые привязаны к функциональным ролям (разработчика, аналитика, менеджера) и соответственно через это к конкретному сотруднику - это _минимум_ того, что он может/должен на себя принять.
Чтобы работа спорилась, а результаты ее становились все лучше и лучше, нужно брать на себя новые обязанности. Хотя бы для саморазвития.

Конечно, есть и ограничения. Куда же без ограничений:

  • Задачи должны быть интересными. Ну например, я разработчик но хочу поучиться юзабилити - отличный повод попробовать в свободное время порисовать интерфейсы и попредлагать их команде.
  • Взятые обязанности не должны мешать текущим. Как минимум, не отнимать (ну разве что совсем чуть-чуть) времени, которое надо бы тратить на выполнение своей основной работы. Отнимать чуть-чуть времени, это кстати круто. Это запускает действие витамина разнообразия...
  • Нельзя изменять рабочий процесс. Опасно, конда другие участники команды принимают то, что ты выполняешь какие-то новые обязанности, как данность и забывают о том, как "должно быть". То есть если ты рисуешь интерфейсы "для души" - то отдавай их человеку, который отвечает за проектирование UI. И уж конечно, держи его в курсе всех своих идей, не оставляй за бортом. И только от него принимай задачи, если уж таковые для тебя найдутся. А остальные члены команды должны по-прежнему взаимодействовать на предмет UI с тем человеком, которому этот UI поручен.

Ну и естесственно, лучше сразу быть готовым к тому, что "временные" обязанности, выполняемые с душой, постепенно станут постоянными.

Так вот и меняется этот мир, приспосабливаясь к нашей воле :-)

пятница, 2 ноября 2007 г.

понедельник, 22 октября 2007 г.

C++ Solution Upgrade: from Visual Studio 2003 to 2005

Хроника одного апгрейда.

Пришлось тут по долгу службы перевести один из проектов с Visual C++ 7.1 (2003) на VC++8 (2005). Памятуя, сколько времени я убил, когда четыре года назад переводил его с VC++ 6.0 на семерку, я заранее смирился с вечностью, полной невыносимых страданий...


Вообще я доволен - отпортировать получилось довольно быстро - проект объемом чуть больше 100K SLOC, десяток dll-ок и статических библиотек, а получилось перевести часов за 25. В прошлый раз с VC++6 недели три пришлось трахаться, потому что они там категорически наменяли в синтаксисе темплейтов.

Мини-лог по результатам конверсии

0. Когда открвыаешь solution от 7.1 новым Visual Studio, студия предлагает его отконвертить к новому формату. Конвертер, в отличии от asp.net (это отдельная печальная песня), вполне пристойно конвертит плюсовые проекты в формат "восьмерки" .

1. STLPort v4.x с VC++8 не работает. Оказалось, что http://stlport.com/ давно заброшен и разработка переехала на sourceforge (http://stlport.sourceforge.net/). Обновление, впрочем, прошло почти безболезненно - добавил пару include, да перекомпилировал гомерический шаблон _Not_within_traits прямо к себе в код, потому что шаблон теперь не public.

2. Компилятор C++ в 2005 ужесточил требования к синтаксису. От этого перестали работать конструкции вида:

for (int i =1;.....) {...}; doSomething(i)

декларацию i в данном сучае пришлось поднять над for:

int i;
for (i=1;.....) {...}; doSomething(i)

Еще теперь нельзя не указывать return type (раньше компилятор подставлял туда int). Больше они этоу мракобесную совместимость с plain C не поддерживают, и слава богу.

Из неприятных моментов - пришлось повозиться с ошибками вида "unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z)" - как оказалось, разные проекты у меня имели разные настройки /Zc, отчено в библиотеке функция описывалась с native wchar_t, а в зависимой - через const unsigned char *. Не компилировалось и орало.

4. RTL/ATL

Микрософторцы в VS 2005 сделали безопасные замены для некоторых функций STL с суффиксом _s и теперь, когда компилируешь старый проект, огребаешь неимоверное количество предупреждений на эту тему. Лечил просто - добавил define _CRT_SECURE_NO_DEPRECATE и на безопасные методы переходить не стал -- не был готов перетестировать весь код да и нет пока желания использовать микросовтовскую нестандартовщину.

wcsstr теперь возвращает не wchar_t *, а const wchar_t * так что пришлось подправить код, который сохранял результаты этой функции.


Вроде, все, собралось, запыхтело, не падает :-) Отдал на тестирование.

Ссылки по теме
http://msdn2.microsoft.com/en-us/library/ms177253(VS.80).aspx
http://msdn.microsoft.com/chats/transcripts/vstudio/vstudio_061704.aspx
http://msdn2.microsoft.com/en-us/library/dh8che7s(VS.80).aspx

среда, 17 октября 2007 г.

понедельник, 15 октября 2007 г.

MVC Framework для ASP.NET

Чтобы не забылось - рассказ на час про Model-View-Controller Framework, который делают для ASP.NET и VS. Обещают в этом году первую бету.

http://www.hanselman.com/blog/ScottGuMVCPresentationAndScottHaScreencastFromALTNETConference.aspx

среда, 10 октября 2007 г.

пятница, 5 октября 2007 г.

Другие ссылки по ASP.NET Debugging on Production

В последнее время, очень много приходиться отлаживать приложения на production. Лучше всего это делать, конечно же, при помоши WinDbg и crash dumps.

Выкладываю сюда несколько полезных ссылок, посвященных Этому Самому Делу:


И напоследок, bouns от Not-a-kernel-guy, посвященный (никогда не догадаетесь), отладке. Правда, отладке native code, зато по-русски и с удальцой :-)

Встречайте: http://blog.not-a-kernel-guy.com/2007/10/03/246

четверг, 4 октября 2007 г.

Радостная новость - Microsoft будет отдавать исходники некоторых своих сборок .Net Framework 3.5. И можно будет отлаживаться прямо внутри них!
"Today I'm excited to announce that we'll be providing
this with the .NET 3.5 and VS 2008 release later this year.
We'll begin by
offering the source code (with source file comments included) for the .NET
Base Class Libraries (System, System.IO, System.Collections,
System.Configuration, System.Threading, System.Net, System.Security,
System.Runtime, System.Text, etc), ASP.NET (System.Web), Windows Forms
(System.Windows.Forms), ADO.NET (System.Data), XML (System.Xml), and WPF
(System.Windows). We'll then be adding more libraries in the months ahead
(including WCF, Workflow, and LINQ). The source code will be released
under the
Microsoft Reference License (MS-RL)."


http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx

Чарующее сообщение ою ошибке

Это мне кажется, прекрасно:

"Unhandled exception at 0x7c943345 in EdgeCAM.exe: 0xC0150010: Деактивируемый контекст активации не является активным для данного потока исполнения."

Отсюда: http://laplace.livejournal.com/107597.html?thread=1022285

среда, 26 сентября 2007 г.

Dumping ASP.NET Session State

Нашел интересную статью про то, как в WinDbg проанализировать содержимое сесси для приложений ASP.NET. Это можно делать как в режиме отладки, так и в режиме анализа дампа процесса.

Читаем статью на MSDN Blogs:

http://blogs.msdn.com/tess/archive/2007/09/18/debugging-script-dumping-out-asp-net-session-contents.aspx

PS: Вообще советую читать блог Tess всем, кто так или иначе связан с отладкой приложений ASP.NET. Она дает очень интересные советы.

вторник, 25 сентября 2007 г.

Когда забываешь аттачить файлы

Что-то я стал в последнее время забывать аттачить к письмам файлы. Пишут, бывает "Посмотрите в аттачах новую спецификацию", а аттача - не делаю.

А сегодня узнал от американского коллеги, что это называется FAD (Forgotten Attachment Disease). Синдром неприкрепленных файлов, если по-русски :-)

пятница, 21 сентября 2007 г.

Отладка, UserDump и Debugging Tools for Windows

См также

Доктор, у меня все болит

Как объяснить? Как описать?
Даже всезнание отказывает…
Вернор Виндж, «Пламя над бездной»
Если вы не разу не встречались с ситуацией, когда приложение отлично работает на машине разработчика, но необъяснимо глючит у заказчика – вы очень везучий программист. Или вы не программист, а кто-то другой.
Обычно ситуации такие возникают нечасто, но каждая из них до боли запоминается, и вспоминаешь о ней с содроганием еще спустя месяцы. Ну еще бы – заказчики звонят, менеджеры матерятся, команда сидит сутками на работе и пытается спасти положение. Если проблему удается решить, чувствуешь себя чуть ли не Кутузовым, выигравшим очередное сражение. Если же нет…
Я сейчас расскажу о том, как можно облегчить себе жизнь в ситуации, когда ASP.NET приложение ведет себя невесть как на production машине, а вы не можете понять, почему так происходит.
Обычно симптомы простые – очень злые заказчики выходят на связь и говорят, что «сайт не работает». Когда начинаешь разбираться – выясняется, что приложение действительно время от времени недоступно и веб-сервер радостно кидает ошибки вида “502 Service Unavailable”. Для клиента это может выглядеть как надпись «Page cannot be found» в браузере.

После такого дела, естественно, захочется посмотреть, что же там происходит на сервере. В этом поможет приложение Process Explorer (в принципе, и стандартный Task Manager сгодится, но он похуже).
Process Explorer и другие чудо-утилиты – File Monitor, Registry Monitor, Process Monitor etc – написал великий мастер Марк Руссинович. Все это хозяйство можно скачать с сайта Microsoft вот по такому адресу: http://www.microsoft.com/technet/sysinternals.
Когда запустите Process Explorer, посмотрите информацию по процессу w3wp.exe
W3WP – это такой процесс, в котором Internet Information Server 6 по умолчанию запускает приложения ASP и ASP.NET. Точнее – те приложения, которые вы сгруппируете в одном AppPool. Прочитать про w3wp можно тут: http://msdn2.microsoft.com/en-us/library/ms524990.aspx
Вот например, как может вести себя w3wp:

В какой-то момент процессор на сервере начал потреблять 100% CPU. На картинке мы видим длительную 50%-ю загрузку, потому что на сервере установлен 2хядерный процессор и только половина ресурсов процессора была потрачена. Справа на картинке видно, как какой-то другой запрос скушал остатки процессорной мощности секунд на 10.
Еще бывает очень полезно настроить логгинг Performance Counters – можно много узнать о личной жизни сервера. Вот здесь (http://msdn2.microsoft.com/en-us/library/fxk122b4(vs.71).aspx) рассказывается про каунтеры, полезные для анализа ASP.NET приложений.
Дальше нам нужно понять – что же так грузит процессор? Раз дело в w3wp, значит, это наше приложение (или не наше, но здесь для простоты давайте считать, что только ваше приложение сидит в данном AppPool-е)
Дело может осложниться тем, что проблема возникает только на рабочем сервере, где любая отладка невозможна, и нигде больше проблему повторить не удается. Значит, надо как-то анализировать «нутро» процесса, его помыслы и деяния. Причем, не мешая настоящим, живым пользователям пользоваться сайтом.
Знаю, знаю, что на production отлаживаться нельзя. И доступа туда разработчики иметь не должны. Но если вы работаете не в банке, а скорость реагирования на проблему важнее бюрократии и безопасности – доступ вам скорее всего дадут. Впрочем, снять дамп процесса можно научить и сисадминов, причем без проблем. Сисадмины обычно в курсе, что такое core dumped, и с радостью помогают в создании таких «кор» другим.
В принципе, Process Explorer показывает, какие у процесса есть потоки и чем они заняты (даже Stack Trace делает и отладочные символы понимает). Проблема только в том, что Process Explorer не показывает .Net-овский управляемый стек.
Вот, например, попробуйте догадаться, чем сейчас занимается .Net приложение:

Раз Process Explorer нам не помощник, значит, нужен инструмент, который сделает трассировку .net-стека по всем потокам процесса. И такой инструмент есть – называется он Debugging Tools for Windows и совершенно бесплатно доступен на сайте Microsoft.
WinDbg в составе Debugging Tools – это, наверное, вообще самый мощный отладчик для Windows. Он умеет отлаживать все – от драйверов до .Net приложений. И что немаловажно, он умеет анализировать дампы процессов, в том числе и дампы, которые создали на другой машине. И .Net он тоже понимает. Скачать Debugging Tools можно по этому адресу: http://www.microsoft.com/whdc/devtools/debugging/default.mspx

Пользуемся User Dump

Но мы не можем отлаживаться на production! Поэтому мы сделаем дамп процесса, скопируем его к себе и будем исследовать при помощи WinDbg из поставки Debugging Tools.
А дамп процесса мы сделаем при помощи утилиты UserDump, которую качаем опять же с сайте Microsoft: http://www.microsoft.com/downloads/details.aspx?FamilyID=E089CA41-6A87-40C8-BF69-28AC08570B7E&displaylang=en&displaylang=en
Инсталлировать ничего не нужно, нужно только подкараулить наш процесс, когда он начнет вести себя плохо, и сделать дамп, указав userdump-у ID процесса:

На время работы утилиты процесс блокируется и никакие запросы к сайту не работают. К счастью, дамп создается быстро – меньше минуты. Может и за 10 секунд управиться.
Созданный .dmp файл архивируем и копируем затем на девелоперскую машину. Файл будет размером с рабочий набор процесса – то есть не меньше 30 мегабайт а скорее всего раз в 10 больше. Впрочем, сжимается дамп-файл неплохо.

Ставим Debugging Tools for Windows

Тут даже рассказывать-то особенно нечего – скачиваем Debugging Tools и устанавливаем к себе на компьютер.
Затем запускаем WinDbg и открываем наш дамп:

Не пугайтесь только внешнего вида WinDbg – он кажется каким-то выходцем из прошлого. Примерно так наверное выглядит робот-марсоход изнутри. Какие-то приборы, циферки, буковки … Короче, не программа, а мечта.

Анализируем дамп процесса

Когда дамп процесса загрузится, вы увидите примерно следующее:

Красным выделена команда, которую нужно будет набрать в консоли дебаггера. Дело в том, что функции отладки .net приложений в WinDbg выполнены в виде плагина, который и загружается командой “.load”.
Существует два вида библиотеки sos.dll (sos – это сокращение от почему-то ”Son of Strike”). Одна версия подходит для managed программ, работающих под .Net 1.0 и 1.1, а вторая – для .Net 2.0
Для .Net 1.x sos.dll лежит в каталоге %DEBUGGING_TOOLS_HOME%\clr10.
Версия для .Net 2.0 поставляется вместе с самим .Net Framework. По необъяснимым причинам, она беднее по функционалу, чем sos.dll для 1.x, но тоже ничего.
Загругить ее можно так:
“.load C:\<WINDOWS_HOME>\Microsoft.NET\ Framework\v2.0.50727\sos.dll”
После того, как мы загрузили sos.dll, в отладчик добавилось множество полезных команд. Все эти команды начинаются со знака ”!”.
Полный список команд можно посмотреть, набрав «!help» в консоли отладчика. Команд там страницы на две, и с помощью них можно узнать много всего о .net – приложении.

Вот список команд для sos.dll от .net 1.x. Впечатляет?
Смысл части команд понятен из названия, а чтобы узнать подробности , наберите в консоли «!help <ИМЯ КОМАНДЫ>». Советую посмотреть справку по всем командам – многое потом может пригодиться.
Вспоминаем про нашу проблему – 100% загруженность CPU.
Смотрим список managed потоков – команда «!Threads»

Помимо кучи разных цифр здесь видно, что в процессе, который мы задампили, выполнялось 12 потоков. Пользы от этого нам сейчас немного, но для цельного понимания картины пригодится.
Теперь нам не остается ничего, кроме как просмотреть трассировку всех стеков для всех потоков с помощью команды «!EEStack»

EEStack выводит уйму информации: ссылки на стековые фреймы, адреса возврата и самое главное – символические имена для каждого стекового фрейма.
По-хорошему, при отладке не помешают бы еще и PDB файлы Windows – отладочные символы от основных DLL. Их можно получить, подключившись в Microsoft Symbol Server. Как - смотрим на сайте Microsoft: http://msdn2.microsoft.com/en-us/library/b8ttk8zy.aspx
Но поскольку мы не собираемся отлаживаться на уровне ассемблера откомпилированный JIT-компилятором код, в дампах стека нас будут интересовать только символы, начинающиеся с “MethodDesc“. Это, собственно и есть названя .net-овских классов и методов.
На следующей картинке можно получить кучу полезной информации, например вот тут видно, какую страницу рендерил ASPNET в этом потоке в момент, когда вызвали userdump.exe

Явно это был SlideViewer.aspx, что бы это название не значило.
А дальше нужно всего лишь внимательно просмотреть стеки от всех потоков и понять, где же тот самый поток, который загрузил процессор. Ну а еще дальше – сущие пустяки: успокоить заказчика, починить баг, написать тесты, выкатить обновление программы. После всего, через что мы только что прошли, это уже мелочи…
Понятное дело, что WinDbg вместе с sos.dll умеют в сотни раз больше, чем я тут описал. Например, можно посмотреть, какие объекты лежат в куче, как они распределены по поколениям. Можно посмотреть на внутренние структуры ASP.NET, на синхротаблицы объектов и многое другое…
К чему я клоню – встроенный отладчик Visual Studio по сравнению с WinDbg – просто неумелое дитя. Хотя – тсс, никому не говорите – в Visual Studio при помощи окна Immediate тоже можно загружать и использовать sos.dll.. Но, хотя дамп процесса проанализировать в ней можно, интеграции с sos.dll у Visual Studio нет, да и среда не столь заточена под ручную работу.
На заметку: Чтобы открыть дамп процесса в Visual Studio, нужно сказать File->Open Project и указать тип проекта как "Dump File". После этого дамп-файл откроется в IDE и можно будеть зайти в режим отладки (Debug this Instance), в котором доступна часть функциональности WinDbg на уровне пользовательского интерфейса (Окна Stack Trace, Threads, Memory и др.)
Удачи в отладке!
Версия 1.1
Ю.Скалецкий, 21 сентября 2007
http://yuryskaletskiy.blogspot.com/

История:
23 sep - версия 1.1: Оказывается, в Visual Studio тоже есть возможность анализировать дампы.


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

Web Based Mind Maps

Ревью трех online тулзов для создания mind maps
http://webworkerdaily.com/2007/03/08/three-web-based-mind-mapping-tools-reviewed/

+ еще один: http://thinkature.com/
+ список майндмапперов на Википедии: http://en.wikipedia.org/wiki/List_of_Mind_Mapping_software

вторник, 11 сентября 2007 г.

Сколько трафика съест last.fm?

Вопрос: Сколько трафика съедает замечательнейший http://last.fm/ и нужен ли безлимитный тариф, чтобы его слушать постоянно ?
Краткий ответ: Нужен, если слушать Last.fm все время, в течении месяца уйдет 14 Гиг

Чтобы в этом убедиться, нужен какой-нибудь анализатор трафика. Я использовал NetLimiter Lite

Вот что он показывает, когда в браузере играет плеер last.fm:


В среднем, 16 Килобайт в секунду. Допустим, мы слушаем last.fm по 8 часов в день (на работе :-) весь месяц без перерыва. Тогда, 16 K * 3600 * 8 * 30 = ~13.8 G

вторник, 4 сентября 2007 г.

История одной битвы: Unable to attach to process"

Однажды, после долгого перерыва, сел я отлаживать проиложение, написанное на asp.net 1.1 при помощи Visual Studio 2003...
И огреб вот такое сообщение при попытке натравить дебаррер на сайт:




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



И понеслось... находил я в гугле самые разные советы, в том числе и очень экзотические и очень подробныe...

Короче, потратил минут 40, а потом выяснилось (внимание, правильный ответ), что в настройках приложения в IIS для этих сайтов с качестве runtime был указан .Net Framework 2.0


Такие пироги :-)

воскресенье, 2 сентября 2007 г.

reCAPTCHA

reCAPTCHA - это прекрасно! Бесплатный сервис, который генерит т.н. capchas - картинки, защищающие от регистрации на твоем сайте нечеловеческих роботов. Но самое замечательное - что эти картинки берутся из оцифрованных книг. То есть люди, регистрируясь на сайтах, тем самым помогают оцифровывать книги.

Приятно видеть, что сервис не только лично, но еще и общественно полезный.

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

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

UPD: А у Амазон, гад такой, получил патент на Human Computing: http://soft.compulenta.ru/313616/ (c подсказки Макса Космыча)

пятница, 31 августа 2007 г.

среда, 29 августа 2007 г.

Еще о базах данных - идеальный package manager

См. также 2 часть размышлений об идеальном package manager.


Вот эта вот дискуссия у Бескова -- напомнила мне о всех тех ужасах, которые я переживаю при думании о поддержке баз данных.

В жизненном цикле ПО, особенно серверного, базе данных отведено отдельное место

* БД почти всегда обновляется, и почти никогда не ставится с нуля. Исключение -- только установка новых инсталляций продукта
* Я не знаю никаких встроенных в известные RDBMS инсталляторов схемы - с инкрементальными патчами, версиями модулей и т д. А их очень не хватает

В минимальном виде идеальный package manager должен уметь делать следующее
* вести помодульный реестр установленных в БД компонентов
* позволять инсталлировать/деинсталлировать модули.
* вести зависимость между модулями.
* позволять установить БД "с нуля", накатывая патч за патчем до определенной версии
* инсталляционные скрипты должны быть в виде .sql-файлов (желательно)

В идеале, система должна иметь одинаковый интерфейс под всеми RDBMS.

Может быть, пришло время для какого-нибудь DB Maven? :)

PS: несколько ссылок
* http://www.agiledata.org/essays/tools.html
* http://autopatch.sourceforge.net/documentation.php
* http://migratedb.sourceforge.net/


UPD от 13 Cен: http://www.liquibase.org

UPD 19 янв 09:

* http://db.apache.org/ddlutils/index.html

UPD 9 авг 09:

Подборка относительно недавних проектов, привносящих в .Net мир ruby style migrations

Интересная дискуссия в ru_pm - "как управлять Гуру"

http://community.livejournal.com/ru_pm/69294.html

"В нашей компании есть несколько человек со статусом - "мега эксперт"! ;)Это такие звезды, которые больше всех знают по специфике и работают в компании от самой ее основания.И естественно, ведут себя они как самые настоящие звезды, то есть - почти не управляемые. Вокруг них "на цыпочках" - ходят даже руководители департамента, и нам, руководителям проекта, с ними очень тяжело.Лично мне - проще их выгнать или просто с ними не работать на проектах, но на такое наше руководство не пойдет.Но что можно сделать с ними, кроме уговоров?:)"

Собственно, и не дискуссия даже -- все бъют в одни ворота. Дайте Гуру возможности раскрыть потенциал, не ссорьтесь с ним, требуйте внятных результатов и обставьте помошниками.

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

Как эксперт в какой-то области - тут главное не потерять адекватность. Потому что тебе дают самые "вкусные" куски работы (точнее, ты сам выбираешь вобщем-то, за что браться). Лично для меня медными трубами было ощущение, что один я занимаюсь нужными делами, а остальные .. не очень :) Лечится пониманием того, что все сам один в реальные сроки сделать не успеешь, а если успеешь - возненавидишь белый свет и проект и все-все-все...

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

С точки зрения менеджера (в моем случае - технического лида, планирующего работу других людей), эксперт -- существо несколько раздражающее, но при этом не дающее расслабиться. Эффективность его обычно высока (хотя могут случаться неожиданные "провалы") и любую работу он делает если не быстрее, то как минимум раз в 5 лучше любого своего коллеги. Если "зажечь" такого эксперта интересной задачей - он будет сидеть днями и ночами, и ее решать. Результатом может быть шедевр. Но если не кормить Эксперта вкусными задачами, то он начинает портиться и негативно влиять на остальных. Например, приходить на работу в середине дня часа на 4...

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

воскресенье, 26 августа 2007 г.

Древовидная БД - Как перестроить уровни ветвей

Допустим, нам дана следующая таблица, хранящая дерево категорий:

CREATE TABLE [dbo].[Categories](
[CategoryId] [int] IDENTITY(1,1) NOT NULL,
[CategoryName] [nvarchar](250) NOT NULL,
[ParentId] [int] NULL,
[Level] [int] NOT NULL,
CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED
(CategoryId] ASC)
)


В таблице хранятся категории со ссылкой на родителя и их уровень. Уровень корня будет равен 1. Мы вводим уровень, для того, чтобы затем удобно строить дерево категорий в HTML.

Очевидно, нам потребуется какой-то путь автоматического расчета уровней для дерева категорий.

Например, это можно сделать такой вот процедурой:

CREATE PROCEDURE CatRebuildLevels
AS
BEGIN
DECLARE @CLevel int;
set @CLevel=1;
UPDATE Categories SET [Level]=0 WHERE NOT ParentId IS NULL;

UPDATE Categories SET [Level]=1 WHERE ParentId IS NULL;
WHILE (SELECT COUNT(*)
FROM Categories C
INNER JOIN Categories PC
ON PC.CategoryId=C.ParentId
WHERE PC.[Level] = @CLevel) > 0
BEGIN
UPDATE Categories
SET Categories.[Level]=@CLevel+1
WHERE CategoryId IN
(SELECT C.CategoryId
FROM Categories C
INNER JOIN Categories PC
ON C.ParentId = PC.CategoryId
WHERE
PC.[Level] = @CLevel)
set @CLevel = @CLevel+1
END
END


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

вторник, 21 августа 2007 г.

Обсуждение на RSDN - "Как найти и удержать программиста"

http://www.rsdn.ru/forum/message/2628646.aspx

"Столкнулся с ситуацией — приходит человек на работу, работает какое-то время, потом уходит, мотивируя тем, что работа ведется не по классическим технологиям, техзадания неконкретные, код не по Макконелу, архитектура не по паттернам проектирования и вообще, мол, хочу в крупную компанию.

Да, действительно, мы не используем в работе никакой из современный методологий разработки ПО; да, формализация задач слабая; да, работа не вполне регламентирована и упорядочена. Но надо же четко понимать, что москва не сразу строилась и все такое. Любая компания начинала с комнатки в нии и два разработчика за пыльным столом...."

Мысли противоречивые. Формулировать как-то особенно не хочется. Но мне кажется, им нужен свежий взгляд со стороны

понедельник, 20 августа 2007 г.

Почему упал Skype

Так понимаю, вот официальная версия skype, почему их упало на два дня.
http://www.appscout.com/2007/08/skype_user_re-boot_prompted_system_outage.php

"VoIP provider Skype said Sunday that its network was "back to normal" after several days of sign-in difficulties. The company blamed a "massive restart" of user computers that occurred after a "routine set of patches" from Windows Update required users to re-boot their computers."

То есть: Microsoft выпустила обновление, которое после того, как установилось на клиентские компьютеры, потребовало перезагрузки. И многие миллионы пользователей skype примерно одновременно перезагрузили свои машины, после чего их skype-клиенты полезли коннектиться. Сервера skype, видимо, не выдержали нагрузки и рухнули.

А дальше, по какой-то причине, пул не могли перестартовать 2 дня...

То есть выглядит так, что у skype процесс логина -- это ресурсоемкая, с точки зрения серверов, операция. Это понятно, это так много где. Например, в том же Агенте mail.ru есть фишка - если сервер, к которому подключен клиент, перестает отвечать, то клиент ждет случайно от 1 до 10 секунд и только потом лезет конектиться. Этим "размазывают" колну коннектящихся клиентов и серверам проще ее перенести.

Не очень понятно правда, почему он 2 дня его потом поднимали...

Обсуждение на ru_highload: http://community.livejournal.com/ru_highload/18482.html?mode=reply

понедельник, 13 августа 2007 г.

Web 3.0

Web 3.0 definition @ Wikipedia

пятница, 10 августа 2007 г.

Использую, но не люблю

Понял, чем не нравятся скринкасты - их нельзя читать по-диагонали. Отсюда - тратится больше времени.

Хотя в работе скринкасты использую постоянно - вместо того, чтобы потратить 2 часа на написание документа, можно за 10 минут сделать скринкаст.

Oracle 11

Oracle зарелизил свою новую БД - 11g

суббота, 4 августа 2007 г.

Не забыть! проект subsonic

http://www.subsonicproject.com/ - очередной DAL framework, в этот раз базированный на Ruby on Rails. Надо посмотреть, что там ребята наворотили...

"What is it?
A Super High-fidelity Batman Utility Belt. SubSonic works up your DAL for you, throws in some much-needed utility functions, and generally speeds along your dev cycle."

воскресенье, 29 июля 2007 г.

Вложенные web.config-и

Искал-искал, как сделать аналог include в app/web .config - и наконец нашел. Начиная с .Net 2.0 у конфигурационных тегов есть малоизвестный атрибут configSource.

Вот что о нем написано на MSDN: http://msdn2.microsoft.com/en-us/library/ms228167(VS.80).aspx

суббота, 28 июля 2007 г.

Script#

НЕ МОГУ ПОВЕРИТЬ

существует компилятор C# -> JavaScript

http://www.nikhilk.net/ScriptSharpIntro.aspx

Это может быть убийцей Google Web Toolkit :-)

Скачал, засел разбираться...

UPD: http://code.google.com/p/extsharp/ - C# programming for ExtJS

Утилиты для отладки веб-приложений

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

Раньше, я использовал Proximitron. Это приложение Windows, которое изначально предназначно для фильтрации всякого рода рекламы, pop-up-ов и проч. Ну и заодно, показывает HTTP трафик.

Но Proximitron давно не обновлялся, да и настраивать каждый раз параметры proxy в браузере мне было очень лениво, и я стал искать замену...

Devolutions.HTTPSpy

Почти сразу я нашел очень прекрасный и совершенно бесплатный (есть и pro-версия за $50) Devolutions.HTTPSpy.Net, который показывал мне HTTP трафик между локальной машиной и удаленным сервером.



Правда, у HTTPSpy есть один большой минус - он не умеет показывать локальный трафик. То есть, если я отлаживаю свое приложение локально - толку от него нет. И я стал искать дальше...

IEAnalyzer

Поиск выдал довольно коммерческих продуктов, которые встраиваются в браузер и умеют показывать локальный трафик. Одним из низ был довольно удобный HTTPAnalyzer, который сделали те же ребята, что и IEInspector. Скачал, поставил месячный evaluataion, все в нем понравилось, только 130 долларов платить было жалко.

Nikhil Kothari's Web Development Helper
И вот - о чудо! В книге Dino Esposito про ASP.NET AJAX я наткнулся на упоминание утилиты, которую написал один из разработчиков Atlas - Web Development Helper. Бесплатный и все умеет. Работает как плагин для Internet Explorer. Умеет, кроме трафика, показывать еще всякие другие полезности:
* Показывает ASP.NET ViewState
* Atlas JavaScript Class Browser
* DOM Browser
Очень рекомендую
Ссылка на статью, посвященную WDH: http://www.nikhilk.net/WebDevHelperDebuggingTools.aspx
IE Development Toolbar
Ну и напоследок, IE Development Toolbar от Microsoft. Тоже незаменимая штука. Посмотреть описание и скачать.
UPD 22 aug:
* HttpWatch ($200+): http://www.httpwatch.com/

UPD 19 jan 09
* еще можно пользоваться сниффером (http sniffer) - WireShark  (бывший Ethereal)

воскресенье, 22 июля 2007 г.

Command Line Arguments Parser

UPDATE Feb.09
Выложил парсер командной строки, которым мы пользуемся, в Google Code:
http://code.google.com/p/commandlineargs/

Собственно, сам пост

Разбираясь с исходниками NUnit, наткнулся на любопытный способ разбора параметров командной строки.

Вообще-то, не могу понять, почему в .Net Framework не предусмотрели классов для парсинга командной строки. Банальный же массив string[] args, который передается в Main(), для серъезного дела вообще никак не подходит. Вот и пишет каждый разработчик себе такой класс самостоятельно, потому что дело вроде плевое и импортить что-то чужое не хочется. Я вот тоже писал, и не раз.
Что нужно хорошему парсеру аргументов командной строки? Несколько вещей, на мой взгляд:
- поддержка опции /help. То есть утилита должна напомнить пользователю, как ее правильно вызывать
- поддержка именованных параметров, вне зависимости от очередности их расположения в строке вызова. То есть util.exe /console /admin должен интерпретироваться так же, как и util.exe /admin /console
- грамотная валидация. То есть утилита должна объяснить пользователю, что он ввел не так
Так вот, в NUnit используется класс Codeblast.CommandLineOptions. В нем используется интересный подход, суть которого в следующем:

Разработчик command line утилиты создает наследник класса CommandLineOptions, в котором описывает требуемые параметры командной строки просто как properties. Такие properties он помечает специальным атрибутом Option("..."), указывая описание свойства, которое потом автоматически сгенерируется и покажется пользователю.

Авторы (Gert Lombard и James Newkirk) в коментариях к коду дают вот такое описание возможных параметров:


// I define 3 types of "options":
// 1. Boolean options (yes/no values), e.g: /r to recurse
// 2. Value options, e.g: /loglevel=3
// 2. Parameters: standalone strings like file names
//
// An example to explain:
// csc /nologo /t:exe myfile.cs
//
// + parameter
//
// + value option
//
// + boolean option


Вот так этот класс применяется в NUnit console runner. Посмотрите на диаграмму классов:



Пользоваться таким парсером очень просто:


ConsoleOptions options = new ConsoleOptions(args);

if(!options.nologo)
WriteCopyright();

if(options.help)
{
options.Help();
return 0;
}


Решение, на мой взгляд, простое и зрелое - проверяется безопасность типов (при парсинге args[] проверяется PropertyInfo требуемых свойств) и использующему параметры коду уже не нужно беспокоиться об парсинге строковых значений, как это бывает в не столь красивых парсерах. Плюс к тому - описывать набор принимаемых параметров через атрибуты очень удобно.

Во всем этом великолепии, на мой взгляд, не хватает всего пары вещей

  • Декларативного описания правил валидации. Ну например, через атрибут RequiredOption().
  • Множественных layout-ов, когда в зависимости от значения какого-нибудь параметра изменяются требования к наличию-отсутствию других параметров. Можно сделать, например, через дерево классов-наследников CommandLineOptions.
  • Неименованных параметров, чтобы можно было бы сделать так: util.exe /update Module1/src

пятница, 20 июля 2007 г.

UDDI

Кажется, в новом нашем проекте впервые придется использовать службы UDDI.

Вкратце - UDDI (Universal Description, Discovery, and Integration) применяют, чтобы сделать loosely coupled связывание различных систем при помощи веб-сервисов, ремотинга и тому подобной хренотени. Точнее - не само связывание, а управление связыванием, регистрация endpoint-ов и линков между ними в едином месте.

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

Сайт OASIS UDDI: http://www.uddi.org/

четверг, 19 июля 2007 г.

Антипаттерны "God Object" и "Big Hairy Object"

God Object
Wikipedia: http://en.wikipedia.org/wiki/God_object

“God Object” – это объект, который знает слишком много или делает слишком много.

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


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


Решение – покрывать юнит-тестами по чуть-чуть и делать рефакторинг. Желательно использовать для этого автоматизированные средства, такие как JetBrains ReSharper.

Big Hairy Object

Wikipedia: http://en.wikipedia.org/wiki/Big_Hairy_Object


Почти то же самое, но с огромным числом свойств и методов, напиханных «абы как», безструктурно.

См также:
Другие антипаттерны: http://en.wikipedia.org/wiki/Anti-pattern

101 Ways To Know Your Software Project Is Doomed

  1. Management has renamed its Waterfall process to Agile Waterfall
  2. You start hiring consultants so they can take the blame
  3. The Continuous Integration server has returned the error message “Fuck it, I give up”
Еще читать: http://www.codesqueeze.com/101-ways-to-know-your-software-project-is-doomed/

пятница, 13 июля 2007 г.

Visual Studio 2005 for Database Professionals

Попробовал сегодня VS 2005 for Database Professionals. В целом - ощущения позитивные. Ты создаешь проект типа Database, в котором в 2-х режимах (при помощи sql скриптов или специального schema viewer) создаешь свою базу. Для каждой сущности - свой sql скрипт.




После этого пишешь скрипты для записи начальных данных в базу, настройки и т.п. А дальше - либо собираешь "инсталляционный" .sql, либо напрямую деплоишь в БД.




Как и должно быть, система позволяет отслеживать различия между исходной БД и базой назначения, создавать инкрементальные скрипты и т.п. стафф.




Вообщем - чуть-чуть кривенько (окошки моргают, притормаживает) но вполне бодренько.


Умеет работать с SQLServer 2000 и 2005. С Ораклом не умеет :-)

понедельник, 9 июля 2007 г.

Как подключиться к MS SQL Server Embedded Edition

Век живи, век учись...

Оказывается, во всем утилитах для MS SQLServer 2005 при подключении к серверу БД можно вместо Server Name вводить имя named pipe. Например, это помогает подключиться к SQL Server Embedded Edition, в котором по умолчанию для standalone установки хранят свои базы SharePoint Services.

Для этого всего лишь надо в поле server name ввести "\\.\pipe\mssql$microsoft##ssee\sql\query"

В противном случае - пришлось бы ставить SQL Server Management Studio Express

Найдено тут: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=949426&SiteID=1

четверг, 5 июля 2007 г.

"квотирование атрибутов в XML" или "век живи, век учись"

Вот уж действительно - век живи, век учись. Оказывается, согласно Стандарту XML квотировать атрибуты можно как одинарными, так и двойными кавычками. Это значит, что xml вида



Вполне себе валидный. Вот что говорит стандарт:

Literals
[9]
EntityValue ::= ' " ' ([^%&"] PEReference Reference)* ' " ' " ' " ([^%&'] PEReference Reference)* " ' "
[10]
AttValue ::= ' " ' ([^<&"] Reference)* ' " ' " ' " ([^<&'] Reference)* " ' "

Такие дела. Я, когда xml с одинарными кавычками увидел, был на 100 процентов уверен, что он не валидный.

PS: А MS IE например, его открывает нормально, но показывает уже с двойными кавычками.

вторник, 29 мая 2007 г.

Читать переписку с начала или с конца?

Есть вещь, которая заставляет меня страдать - когда после несколько-дневного отсутствия начинаешь разбирать почту -- непонятно, как ее читать - с начала или с конца?

Если с начала, то хочется реагировать на письма, не дочитав всю переписку по этой теме (и могут получиться конфузы, навроде ты ответил на письмо, а в следующем сообщении видишь - "please ignore my previous letter").

Если читать с конца - то начало переписки теряется в разрывах цитирования и просто в длинных письмах, плюс трудно понять хронологию - приходится искать в теле письма все эти бесконечные reply-to.

Есть еще вариант - переключать почтовик в режим показа дерева переписки, но это как-то лениво постоянно переключаться :)

суббота, 26 мая 2007 г.

"При переходе в раздел осуществляется переход в раздел"

Читаю спецификацию, которую создали крутейшие системные интеграторы, зубры-динозавры.

п 1.2.3 Требования к разделу «Управление справочником действий»

При переходе пользователя в раздел «Управление справочником действий» должен осуществляться переход на страницу «Управление справочником действий».

Покалеченные люди, бедный их русский язык.

среда, 16 мая 2007 г.

ИХ ответ Silverlight :-)


What is JavaFX?
JavaFX is a new family of Sun products based on Java technology and targeted at the high impact, rich content market...

https://openjfx.dev.java.net/JavaFX_FAQ.html

понедельник, 7 мая 2007 г.

Где можно поиграться с IIS7

Если у вас нет Windows Vista (в составе которой идет IIS7), то можно попробовать зарегистрировать бесплатный хостинговый аккаунт на одном из сайтов, перечисленных на IIS.NET:

* http://www.iis.net/default.aspx?tabid=791

Я так понял, что они крутятся на бете Longhorn Server.

четверг, 26 апреля 2007 г.

ГОСТы

http://www.caseclub.ru/themes/?ID=&ID1=15


Комитет по стандартам ГОСТ 19.201-78
Техническое задание. Требования к содержанию и оформлению

Комитет по стандартам ГОСТ 34.602-89
Состав, содержиние и правила оформления технического задания на создание автоматизированной системы

Комитет по стандартам ГОСТ 19.102-77
Cтадии разработки программ и программной документации для вычислительных машин, комплексов и систем независимо от их назначения и области применения

Лучший способ определить предметную область (domain) проекта

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

Предметную область надо обсуждать с юристами заказчика. Они часто разбираются в терминах гораздо лучше самого заказчика (и - главное - непротиворечиво!)

Объявление

"Эксклюзивные VIP-интранеты. Дорого"

Это про нас :-)

понедельник, 23 апреля 2007 г.

Какие бывают методологии

1. Хорошая статья на RSDN: http://rsdn.ru/article/Methodologies/SoftwareDevelopmentProcesses.xml
2. Мое исследование про выбор (точнее, попытку выбора) основы для методологии разработки RapidSoft

четверг, 19 апреля 2007 г.

Model-View-Controller в ASP.NET

Еще один screencast (старый) по применению MVС в среде ASP.NET.

Краткое содержание
1. Проблемы, возникающие при разработке страниц/контролов на ASP.NET
2. Краткое описание паттерна MVC
3. Вариант реализации паттерна в среде ASP.NET (с примером)

Known bugs
* На слайде с ответственностями контроллер назван "представлением"
* Нигде нет информации, что рядом с презентацией лежат исходники примера, который использован в презентации и сама презентация :-)

Итак, скачать:
Screencast: http://enox.pp.ru/articles/MVCinASPNET/MVC%20in%20ASPNET.swf (осторожно, ~20Mb)
Презентация: http://enox.pp.ru/articles/MVCinASPNET/MVCinASP.ppt
Исходники примера: http://enox.pp.ru/articles/MVCinASPNET/Demo.zip

See also: статья про это же на RSDN:

Eclipse Process Framework Composer

Радостное событие - мне показали EPF Composer. С помошью этого чуда можно описывать процессы и делать сайт процессов, примерно как это сделано для RUP. И инструмент очень удобный, и сайт с описанием процесса тоже очень удобный.

Чувствую, в ворде процессы я больше описывать не буду :-)


Ссылки
* http://www.eclipse.org/epf/
* http://www.aprocessgroup.com/products/tool_03_0301.asp

Screencast по практикам Test-First. часть 1

Закончил скринкаст, в котором я рассказываю об практиках Test-First.

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

Инструменты: Visual Studio 2005, Resharper 2.0, NUnit 2.4

Смотреть (11 Мб, ~ 15 минут) , Flash

В планах на будущее
* как тестировать слои приложения по-раздельности
* как использовать mock-объекты

среда, 4 апреля 2007 г.

RapidSoft стал сертифицированным партнером Microsoft

Кстати же! Радость у нашей компании (правда, радости уже больше месяца, но коробочка и флажок прибыли недавно) - мы же теперь Microsoft Certified Partner!




В планах - получение статуса "Золотого партнера", естесственно :-)

IIS 7

Статья о том, что же такое есть IIS 7: http://msdn.microsoft.com/msdnmag/issues/07/03/IIS7/

Вкратце, самое важное (для меня :-)
  • Программное управление из .Net - пространство имен System.Web.Administration
  • Возможность писать вещи, подобные ISAPI, на .Net. Создатели вообще обещают хорошую и годную объектную модель, лучше-чем-раньше. Как всегда, впрочем.
  • Улучшенная диагностика.

Что ж, будем ждать longhorn server...

PS: Собственно, сайт IIS - http://www.iis.net

вторник, 3 апреля 2007 г.

понедельник, 2 апреля 2007 г.

Пара интересных стандартов IEEE

IEEE Std 1028-1997, Standard for Software Reviews.
IEEE Std 1008-1987 (R1993), Standard for Software Unit Testing.

И тот, и другой легко находятся на Google, если в строку поиска добавить "-type:pdf"