вторник, 18 июня 2013 г.

The Art of Readable Code

Когда-то у Александра Дëминa была замечена данная книга попала в мой пул на прочтение, приехала уже не помню с какого магазина и сейчас процесс завершился. С review Александра полностью согласен, здесь некоторые добавления.

С точки зрения английского книга легко читается. Большое количество примеров (и меньше соответственно текста), плюс простой язык и малое количество редких слов. Это наверно первая книга более сотни страниц, в которой я перестал замечать, что она на написана на другом языке.

Авторы по-видимому, сами используют множество языков C++/Python/Javascript как основное и внутри на этом разнообразии строятся все примеры и обобщения. Кроме того, чувствуется уровень отношения к коду, который как к Web-разработке.

В книге принята попытка некоторой классификации того набора отверток, который предлагается к рассмотрению, и, на мой взгляд, сделано удачно. Есть общая постановка задачи (The Fundamental Theorem of Readability), есть разбиение области на крупные цели и каждое правило/совет выполняют свою малую задачу и дополняют более общую.

Больше половины содержания оказалось знакомой, но с ощущением, что лучше бы это увидеть на лет 10 раньше. Ещё где-то четверть была знакомой, но знакомой интуитивно, а взгляд авторов вывел вопросы на более сознательный уровень: например дефрагментацию кода по задачам для разбиения функций делал интуитивно и зачастую brute-force'ом, но явное её осознание помогает сделать это более целенаправленно и по конкретным шагам.


четверг, 6 июня 2013 г.

Влияние света и освещенности

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

Работоспособность мозга зависит от освещённости помещения

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

Голубой свет по утрам снижает уровень стресса и продлевает жизнь

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

Яркий свет по вечерам вызывает стресс и депрессию

Мы можем ложиться спать как раз вовремя, но яркое освещение, которое сопровождает нас до последнего, само по себе наносит вред.

Учёные не нарушали режим сна и бодрствования мышей, но меняли освещённость. Животные, которых подвергали такой световой обработке, становились более депрессивными. Они теряли интерес к сахару, выказывали равнодушие к удовольствиям, были неактивны, то есть не интересовались ничем вокруг и не хотели исследовать новые предметы. Кроме того, у животных ухудшалась память, и обучались они дольше, чем другие мыши, которых не держали на ярком свету.

Чтобы лучше работать, нужно сесть у окна, советуют ученые

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

А вот если человек плохо спит, ученые советуют 30-минутную прогулку при утреннем солнце. Это поможет наладить работу внутренних часов.

Свет от электроники убивает сон

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

Свет, и в особенности голубой свет, блокирует создание гормона мелатонина в нашем мозге и делает человека более бодрствующим. Что плохо особенно тогда, когда приходит время спать.

Поэтому неиспользование описанных устройств помогает как отойти ко сну, так и установить дневной график и предоставить много пользы здоровью.

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

Фактор влияет на продолжительность REM-сна (отдых психики) и на время, которое тратится на засыпание.

Эта информация из MyZeo, напрямую поиском в Интернете не находится. Прочитать можно по англ если поставить приложение MyZeo и найти пункт «light from electronics kills sleep».


среда, 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

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