Friday, April 20, 2007

Aspect-oriented programming

Если что-то появляется, значит, оно кому-то нужно.

И снова новая методология программирования и к ней новый подход к разработке ПО. Приглашаем любить и жаловать: Aspect-Oriented programming (AOP) и Aspect-Oriented software development (AOSD).

В отличии от предыдущей методологии (OOTD) (которая была только идеей и поводом немного задуматься, да и на устои привычной OOP серьезно не покушалась), эта методология вполне оформившаяся и претендует быть кардинально отличной от OOP.

История:

Aspect-Oriented подход разработан в Xerox PARC в 2001 году под руководством Gregor Kiczales. Этой же группой была разработана первая реализация – AspectJ, которая на текущий момент входит в Eclipse Foundation. Кроме AspectJ уже создано несколько десятков реализаций AOP парадигмы, практически для всех языков.

Идея AOP захватила сообщество - существует Aspect-Oriented Software Association (AOSA), проходят ежегодные конференции по AOSD, в которых в качестве спонсоров выступают Microsoft, Google и IBM.

Основная цель, которую себе поставил Gregor Kiczales, и в результате движения к которой появился AOP – уменьшение кол-ва ошибок и улучшение качества кода за счет борьбы с запутанностью кода и разбросанностью функционала.

Дисклэймер:

Я, человек привыкший думать объектно-ориентированно, не совсем поняла их претензии к OOP. Т.е., на мой взгляд, при правильном дизайне системы (в объектно-ориентированной парадигме) нижеизложенные проблемы не дают серьезного ухудшения качества кода. Описание же AOP, на мой взгляд, слишком похоже на патерны. Но то, что я не вижу преимуществ – это не значит что их нет. OOP тоже плохо приживался в процедурно мыслящей среде.

С чем боремся:

В объектно-ориентированном подходе как на уровне системы в целом, так и на уровне отдельных классов присутствует сквозная функциональность (т.е. та, которая реализована понемногу в разных модулях), а так же большое количество кода, который фактически не относится к функционалу системы. На уровне системы это идентификация, защита, логирование, репликации, сериализация/десериализация, сохранение настроек системы и т.д., т.е. или общий или «сервисный» функционал, зачастую реализованный в разных частях системы (примеры: сериализует один модуль - десериализует другой; каждый из модулей системы занимается идентификациеи и защитой), в связи с чем усложняется отладка и поддержка (со временем начинается «расползание»). То же самое на уровне классов – класс инкапсулирует в себя не только функциональную часть, но и внутренние «сервисы», обеспечивающие корректность работы – отлов ошибок, работа с памятью и т.д., которые загромождают код и усложняют чтение логики – в следствии чего, опять же сложности с отладкой и длительной поддержкой.

Метод борьбы:

Выделение сквозной функциональности в отдельные модули, которые называются аспектам (aspects). Поведение аспекта в конкретном месте программы (точке подсоединения, join point) определяет advice (собственно программная реализация модуля). Все точки подсоединения конкретного аспекта описываются в наборе pointcut.

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

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

Ссылки по теме:

Gregor Kiczales о AOP (Google Video)

Aspect-Oriented programming на wiki

Книги:

Aspect-Oriented Analysis and Design: The Theme Approach. Siobhàn Clarke, Elisa Baniassad.

Aspect-Oriented Software Development. Robert E. Filman, Tzilla Elrad, Siobhan Clarke, Mehmet Aksit.

Aspect-Oriented Software Development with Use Cases. Ivar Jacobson, Pan-Wei Ng.

Aspect Oriented Refactoring. Ramnivas Laddad.

AspectJ in Action: Practical Aspect-Oriented Programming. Ramnivas Laddad.

Sunday, April 15, 2007

Очень точно подмечено

Ко всем существующим фобиям у современных людей добавилась еще одна - боязнь потерять флешку!

(автор где-то в ЖЖ)

Tuesday, April 10, 2007

Фильм про Дубну и Синхрофазотрон

Тем, кого заинтересовала Дубна, а так же тем, кто любит физику, историю и, особенно, историю физики:

10 апреля на канале "Культура" в 20.35 (по мск) будет фильм "Властелины кольца", посвященный созданию дубненского синхрофазотрона.

Monday, April 09, 2007

И еще пара наблюдений по поводу защиты в Висте

  • 1. Инсталлятор можно запустить только под админскими правами. Т.е. любой инсталлятор может сделать с машиной что угодно. Ранее не вызывающие особого доверия инсталляторы пускались под пользователем с ограниченными правами, давая некоторую дополнительную защиту. Теперь для таких "сомнительных" инсталляторов, по-видимому, придется использовать виртуальные машины.
  • 2. Появились предупреждающие сообщения (с затемнением экрана) что данное действие может быть очень опасно с точки зрения безопасности и что требуется подтверждение пользователя на продолжение действия. Идея хорошая т.к. довольно давно известно, что большинство пользователей не читают текст обычных сообщений, а сообщение с затемнением экрана действительно привлекает внимание пользователя к сообщению – выглядит, как будто машина сейчас уйдет в перезагрузку и вызывает ощущение, что действительно происходит что-то опасное. Только во всем нужна мера, а MS перебрали с такими сообщениями очень сильно. Сообщения выскакивают по любому поводу. Результат – когда за 2 минуты работы пользователь увидит 6 штук таких сообщений то уже 4-е он читать не будет, а 6-м его можно будет спросить "Вы уверены что хотите установить вирус на ваш компьютер?" и пользователь ответит Да.

Sunday, April 08, 2007

NSIS & Vista

Для того чтобы установить программу в “Program Files” пользователю нужны административные права. Это не новость. А вот новость, появившаяся в Висте – запустить инсталлятор можно только под пользователем уровня доступа администратора машины.

С версии 2.21 в NSIS-е появилась команда RequestExecutionLevel, которая указывает какими правами должен обладать пользователь для запуска NSIS инсталлятора. RequestExecutionLevel может указывать 3 уровня прав: user, admin, highest. Если программа по умолчанию устанавливается в “Program Files”, то должен быть указан уровень admin. Если Команда не используется, то NSIS инсталлятор автоматически определяется Вистой и при запуске требует административных прав, однако после завершения инсталляции выдает сообщение о том что возможно установка программы прошла некорректно.

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

Все глобальные переменные системы (%UserProfile%, %LocalAppData% и др.) определяются не для фактически залогиненного акаунта, а для администраторского, под которым запущен инсталлятор. Та же ситуация с переменными NSIS скриптов (например $SMPROGRAMS) и доступом к ветке реестра HKEY_CURRENT_USER.

Такая ситуация с переменными выливается в то, что для обычного пользователя через инсталлятор нельзя проставить даже элементарные линки на программу в “Start Programs”, на “Desktop” и в “Launch Menu”. Для того, чтобы пользователь сразу после инсталляции увидел иконку на рабочем столе ставить ее (и все остальные линки) надо для All Users (команда SetShellVarContext all). Это значит, что фактически программу надо ставить не для конкретного пользователя, а для всех существующих пользователей машины сразу.

И, не смотря на то что здесь в FAQNSIS сказано, что для успешного добавления линков в “Start Programs” при инсталляции и для последующего успешного их удаления при анинсталляции надо указать или “RequestExecutionLevel admin” или “SetShellVarContext all”, на самом деле обе операции должны применяться одновременно:

--

OutFile vista.exe
Name Vista

RequestExecutionLevel admin

Section
  SetShellVarContext all
  CreateShortcut "$SMPROGRAMS\Vista Test\hello.lnk" $WINDIR\notepad.exe
  WriteUninstaller $EXEDIR\uninst.exe
SectionEnd

Section uninstall
  SetShellVarContext all
  Delete "$SMPROGRAMS\Vista Test\hello.lnk"
  RMDir "$SMPROGRAMS\Vista Test"
SectionEnd

--

Friday, April 06, 2007

Российский Центр Программирования в Дубне

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

Основные вопросы к технопаркам

Вообще тема этих парков с самого ее появления для меня была очень загадочна. 2 основных вопроса к подобной модели развития IT (когда в одном месте государственными усилиями пытаются собрать IT компании):

Вопрос первый и основной - откуда брать компании? Если строить парк на основе уже сформировавшихся компаний, то как и чем их туда привлечь. Ведь если компания уже где-то имеет офис (или офисы) с работающими специалистами, то ей надо показать очень вкусную «морковку» чтобы она снялась с насиженного места и переехала на новое. И «морковка» эта должна быть, скорее всего, финансовая. Т.е. какие либо налоговые льготы, привязанные к конкретному парку. Но про льготы или другие морковки слышно не было. Зато хорошо было слышно про строительство (на государственные деньги), со всеми вытекающими из этого выводами. Плюс на данный момент довольно большинство компаний занимаются автоматизацией одного клиента (или очень малого количества клиентов) и не могут уехать далеко от заказчика.

Если строить парк на основе новых компаний – то надо активно поднимать волну стартапов, «править мозг» разработчикам, что лучше работать на себя, а не на «дядю», и, опять же, налоговые льготы и упрощенная отчетность для начинающих. Подобных действий тоже не видно. Т.ч. первый вопрос висел у меня совсем без ответа.

Вопрос второй - как и чем привлекать специалистов (аналитиков, программистов, менеджеров и др.)? С этим проще. При наличии большого рынка труда специалисты из регионов будут ехать не в Москву/Питер, а в технопарки. Но проблема в том, что подавляющая часть сильных специалистов уже давно из регионов уехала и имеет хорошие зарплаты, соответственно большинство из них обзавелись жильем и с насиженного места просто так не сдвинутся. Для технопарка же в первую очередь нужен костяк из хороших специалистов, которых туда как-то надо заманить.

Ответы на вопросы

Теперь, собственно, свежая информация, которая хоть и не официальная, но вполне похожа на правду и дает ответы на вопросы.

В Дубне сейчас параллельно развиваются 3 проекта.

1. Инкубатор IT компаний. Проект уже действует. Основан на предоставлении дешевых и совсем бесплатных оборудованных офисов (ремонт, мебель, интернет) для молодых IT компаний. Время пребывания компании в инкубаторе не более 3-х лет. 1-й год бесплатно, 2-й и 3-й платно с повышающимся коэффициентом.

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

2. Российский Центр Программирования (РЦП). В народе, как не трудно догадаться – Силиконовая Долина (должна быть Кремниевая, но это не важно :-) ). Здесь немного официальной информации, правда не обновлявшейся с 2004г.

Итак ответы на мои вопросы:

Откуда взять компании. Якорной компанией является Luxoft (и возможно не он один). Т.е. крупная и активно растущая офшорная компания, которая очень активно ищет себе сотрудников по всей стране. Ей нужны офисы и жилье для сотрудников. И с офисами и с жильем сейчас проблемы уже не только в Москве и Питере, но и во всех более-менее крупных городах. Т.ч. шаг Luxoft-а выглядит очень разумным.

Сам РЦП будет располагаться прямо на берегу Волги и включать в себя офисные здания, низкоэтажную жилую застройку, инфраструктуру. Пока там пустырь, застройка только началась.

Т.к. офисы рассчитаны на гораздо большее количество сотрудников чем жилая застройка на территории РЦП, то Luxoft собирается в нескольких км. от Дубны на берегу реки Дубна построить поселок из таунхаусов для своих сотрудников.

По моему – красота! Причем вполне осуществимая и, что очень важно, материально обоснованная.

И тут практически снимается второй вопрос – как заманить специалистов. Т.к. в Москве жить уже стало абсолютно некомфортно (город переполнен людьми и машинами, с вечными пробками и на дорогах и в метро), то в свой домик на берегу Волги поехать, наверно, захотят многие.

3. Технопарк (как правильно называется проект не знаю). Технопарк должен стать полигоном высокотехнологических разработок, в частности области энергетики (ну и, наверно, ядерной физики). К программному обеспечению он прямого отношения не имеет, но программисты явно потребуются и туда. Будет располагаться рядом с РЦП. Больше про него, к сожалению, ничего не знаю.

Планируется что последние 2 проекта привлекут в город 30 тыс. новых жителей, из которых 10тыс. специалистов. При том, что сейчас население города примерно 65 тыс., то фактически количество людей должно увеличиться в полтора раза. Мне кажется, что это очень большая нагрузка на город и Дубна может очень сильно измениться.

Итог: Очень порадовало то, что за словами о развитии IT в России стала видна материальная обоснованность для конкретных игроков, что, на мой взгляд, является основным для реализации проекта. Будет ли это в результате Бангалор или Кремниевая Долина на текущем этапе не так уж и важно.

Tuesday, April 03, 2007

Вы слышите меня, Бандерлоги?

"История про Google AdSence" или "Вот так и сотрудничай с Гуглом...»

На одном из сайтов была вовремя неотмодерированная информация. Причем не особо страшная - не порнография (в моем понимании контента для взрослых там не было), не реклама таблеток непонятных, но вот в URL-е содержала "nude-girls". Гуглу информация не понравилась и реклама на сайте была заблокирована.

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

Неделю назад руки все-таки дошли известить Гугл о том, что все исправлено, более безобразие не повториться и с просьбой разблокировать рекламную кампанию на сайте. И вот пришел ответ:

Большое спасибо за Bаше письмо.

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

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

Пожалуйста, учтите, что мы не сможем изменить наше решение или ответить на дополнительные вопросы по данному случаю.

Спасибо за Ваше понимание.

И после этого можно серьезно говорить о базировании бизнеса на сервисах Гугла?