среда, 15 мая 2013 г.

Coursera — Pattern-Oriented Software Architectures for Concurrent and Networked Software

Прошел одноименный курс и получил диплом с отличием.

Ключевые темы: многопоточное+сетевое программирование + их паттерны, а также общие понятия по паттернам GoF.

Курс вел профессор Douglas C. Schmidt, он же создатель библиотеки ACE.

Материал сильный в точки зрения преподнесения общей теории и раскладывания паттернов (GoF/POSA2) по полочкам . Кроме того, подробно рассмотрены принципы компонентов ACE, что может быть полезно как тем, кто пользуется библиотекой, так и изобретателям велосипедов на сетевом и многопоточном поприще.

Задания были вида quiz (смотрим лекцию и отвечаем, здесь все просто), написание сочинений (как поняли тему описать в 250 слов по-английски) и программные. Последние два оценивались другими студентами, т.е. нужно было не только самому отвечать, но и ставить оценки другим (4 другим студентам).

Программирование могло делаться в нескольких вариантах: C++11, C++ ACE, Java, C#, Ruby, Scala, Python, C++ Boost.

Всего зарегистрировалось 30к студентов, из них 20к активыных — кто сдал хотя бы один quiz. 592 получили диплом с отличием (сделали практически все) и ещё выдано 1051 простых дипломов.

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

Возможно через некоторое время будет повтор, но на другом уровне.


суббота, 11 мая 2013 г.

Из одной предметной области в другую

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

Один из ярких переходов в IT — это перенос печати текста с печатной машинки на компьютер. Фактически брались специалисты по машинной печати и пробовали сделать то же самое на ЭВМ, со всеми вытекающими, самые наверно явные из которых это клавиатура QWERTY и кодировка символов, адаптация и работа с которыми ведется до сих пор. Исторически хвост тянется как минимум с середины XIX века с формирования принципов печати. При переходе на ЭВМ клавиатура была скопирована, а что касается раскладки символов, то в 1967 году при существующем зоопарке кодировок была принята ASCII, в которой первые 32 символа были управляющими, большую часть которых можно понять, только освоив печатную машинку. Так, например для перевода строки машинистке нужно было выполнить две операции — рычагом прокрутить лист на одну строку вперед (первая), и передвинуть каретку так, чтобы печатающая головка оказалась в начале строки (вторая). В настоящее время это сохранилось в виде операции перевода строки (Line Feed) и возврата каретки (Carriage Return). Из 32 управляющих символов ASCII ушли в прошлое все, кроме описанных LF+CR, а также ещё живет табуляция (HT, Horizontal Tabulation, код 9) [1, с.99-105].

Следующий пример — переход из театра в кино. На заре кинематографа постановка и съемка велись как в театре: создавалась сцена, фиксировалась камера на стационарном месте, на сцену выпускались актеры, которые привыкли играть в сторону фиксированной камеры. Прошло очень много времени, пока догадались снимать с разных ракурсов, делать движущуюся камеру, а также играть не на фиксированную точку.[2, p.217]

Аналогичный процесс имеет место в геймдеве, когда для написания истории нанимают писателей романов. Отличие предметной области — бумажные произведения имеют линейный сюжет, одну единственную концовку, что убивает интерактив новой предметной области, нарушая принцип «Do, don't show.» [2, p.217]

Исторический пример развития маневренной войны. С изменением предметной области (возможностей боевых единиц) изменяются тактика и стратегия ведения боевых действий, а тот, кто этого не понимает — проигрывает. Маневренная война имела место на всей истории человечества, но например в начале XX века основным инструментом являлась теориия последовательных операций, при применении которой войска размазывались небольшим слоем по всему фронту. Однако с появлением механизированной техники возможности боевых соединений занчительно расширились, что привело к совершенно другим принципам и соответственно разработке блицкрига и теории глубокой операции, первая из которых сокрушила всю Европу с их старыми принципами, а вторая помогла избавить мир от фашизма.

Ещё один яркий пример, цитата [3]:

Ежемесячно в нашей стране выпускают около 300 млн штук фаянсовой посуды. После первого обжига изделия делят на три группы, каждую из которых затем вторично обжигают по своей технологии. Сортировку ведут по звуку: работница берет тарелку, ударяет ее металлическим молоточком и в зависимости от тональности звука кладет тарелку на одну из трех позиций. Такая сортировка — труд чрезвычайно монотонный и тяжелый. Естественно, возникла изобретательская задача: надо избавиться от ручного труда. И вот группа изобретателей разрабатывает... «рукастый» автомат. Одна рука автомата хватает тарелку, другая ударяет молоточком: звуковые колебания воспринимаются микрофоном, анализируются... словом, полностью скопированы действия человека. В истории техники есть множество примеров — весельный пароход, шагающий паровоз, «рукастая» швейная машина, иллюстрирующих правило: нельзя механически копировать действия человека. «Рукастая» сортировочная машина была построена, ее попытались внедрить... и обнаружили массу недостатков. Машина резко повысила процент боя посуды; грубые манипуляторы машины были лишь внешней копией человеческой руки, которая на самом деле есть часть системы «рука-мозг». Машину не внедрили; деньги, затраченные на ее создание, оказались чистым убытком.

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

Ссылки

  1. Чебыкин Р.И., «Разработка и оформление текстового содержания сайтов», 2004.
  2. Richard Rouse III, «Game Design: Theory & Practice Second Edition», 2004.
  3. Альтшуллер Г., «Найти идею. Введение в ТРИЗ.»

среда, 1 мая 2013 г.

Документация Doxygen в Google Code

При публикации проектов в Google Code нет прямой возможности вставить в онлайн результат сборки Doxygen. По крайней мере, напрямую.

Ключевой идея решения проблемы — изменение свойств файлов mime-type, которые стоят под контролем SVN.

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

  1. *.css = svn:mime-type=text/css
  2. *.html = svn:mime-type=text/html
  3. *.js = svn:mime-type=text/javascript
  4. *.gif = svn:mime-type=image/gif
  5. *.png = svn:mime-type=image/png

Теперь изменяем mime-type. Например это запуск такого bat-файла под Win:

svn pset svn:mime-type text/html *.html
svn pset svn:mime-type text/html search/*.html

svn pset svn:mime-type text/css *.css
svn pset svn:mime-type text/css search/*.css

svn pset svn:mime-type text/javascript *.js
svn pset svn:mime-type text/javascript search/*.js

svn pset svn:mime-type image/gif *.gif
svn pset svn:mime-type image/gif search/*.gif

svn pset svn:mime-type image/png *.png
svn pset svn:mime-type image/png search/*.png

После этого — коммит и остается только найти ссылку в SVN, которая имеет вид http://PROJECTNAME.googlecode.com/svn/PATH/index.html

Теперь можно радоваться (;