Краткие заметки по ит-шным темам, с которыми я сталкиваюсь. Чаще это вопросы работы с СУБД и прикладной разработки.
вторник, 24 ноября 2009 г.
Ошибки и правила оценки программных проектов
На мой взгляд обязательная к прочтений для разработчиков, начинающих руководителей программных проектов.
http://www.ozon.ru/context/detail/id/3115179/
Но кому лень искать, покупать или читать - на Хабре встретился кратенький пост, с пересказом - http://habrahabr.ru/blogs/pm/75903/
UPD
Встретилось еще близкое к теме - “Статистические ошибки планирования”. Очень интересное выступление, с примерами, "на пальцах".
среда, 18 ноября 2009 г.
Как нужно делать выступления
Стянуто у http://soldatenko.livejournal.com/74040.html
Перевод (удобно открыть в отдельном окне и туда подглядывать) - http://www.subguru.ru/2008/01/blog-post_01.html
Кусочки:
Не бойся поляризовать людей (polarize people). Классные продукты поляризуют людей. Если вы попытаетесь создать продукт, который понравится всем группам клиентов – от 18 до 25, от 25 до 35, от 35 до 50, от 50 до 75, от 75 до смерти – если вы попытаетесь создать такой продукт, получится посредственность.
Большинство предпринимателей верит в то, что им в первую очередь нужно работать на уровне топ-менеджмента. «Мне нужно говорить с исполнительными директорами, директорами по развитию, президентами и председателями компаний (CIO, CTO, CMO или CEO)». За время своей карьеры я понял, что чем выше ты поднимаешься в большой организации, тем разреженнее воздух. А чем разреженнее воздух, тем меньше он дает возможности для поддержания разумной жизни.
Третий важный момент - найти соратников. Концепцию «предпринимателя-одиночки» сильно переоценивают, она неверна. У Стива Джобса был Стив Возняк. У Билла Гейтса – Стив Балмер. Вам нужны соратники – люди, которые будут вас дополнять. Если ты великий инженер, тебе потребуется великий специалист по маркетингу. Если ты совмещаешь в себе то и другое, тебе нужен будет операционный менеджер. Если ты гениальный провидец – тебе понадобится присмотр кого-нибудь взрослого.
...правило 10/20/30. В вашей презентации должно быть 10 слайдов.... И эти десять слайдов вы должны представить за 20 минут. ... И самый маленький размер шрифта, который вы можете использовать в презентации – 30.
четверг, 15 октября 2009 г.
Риски использования распределенных систем управления версиями
Из недостатков, видевшихся мне перед нашим переходом на него основным была возможность организованного хаоса, когда все начнут пользоваться распределенностью и лезть другу другу в репозитарии. На практике все оказалось гораздо приятнее и безопаснее - работаем как и раньше, с центральным репозитарием, но "ветвимся" малой кровью и имеем всю историю локально, намного меньше завися от внешнего центрального репозитария, в периоды отсутствия связи.
Встретилось вот еще пара интересных статей на эту тему:
Риски распределенного контроля версий
Контроль версий и «правило 80 процентов»
Вкратце: с централизованной системой, людей принуждают взаимодействовать и просматривать работу друг друга; с децентрализованной системой, поведение по умолчанию состоит в скрытом ветвлении проекта каждым разработчиком.
Необходимо будет прилагать специальные усилия для обмена кода и самоорганизации в некоторую командную структуру.
Да, я знаю, что DVCS может имитировать работу централизованной системы; но поведение по-умолчанию имеет значение.
А поведение по-умолчанию — «ветвить», а не сотрудничать!
Это поощряет людей забираться в пещеры и кодить там объемные доработки, а затем «сбрасывать» эти «кодовые бомбы» на своих товарищей, причем до момента «сброса» код не может быть кем-либо проверен.
Да, правильные практики возможны с DVCS, но они не поощряются, что заставляет меня беспокоиться о будущем разработки с открытым исходным кодом...
понедельник, 5 октября 2009 г.
Про новую архитектуру Firebird - SuperClassic
SuperServer:
- один процесс ОС на все соединения/базы
- общий кеш страниц для всех баз
- централизованный(central) менеджер блокировок
- блокировки работают на базы, а не соединения - т.е. все операции с базой выстраиваются в одну очередь.
- для версии <>
- не поддерживает многопроцессорность, т.к. ОС не может распаралелить один процесс по нескольким процессорам
- отдельный процесс на каждое соединение с БД
- отдельный кеш страниц на каждое соединение
- внешний менеджер блокировок(в 2.5. он уже внутренний)
- хорошая поддержка многопроцессорности
- накладывает некоторые ограничения в следствие ресурсоемкости процессов, в сравнении с потоками
- один процесс на все соединения (в перспективе - отдельный процесс на каждую базу)
- используется пул потоков ОС для обработки запросов от соединений - т.о. каждое соединение работает в отдельном потоке управляемом ОС, а неактивные соединения не отъедают ресурсы потоков
- централизованный менеджер блокировок, который может обрабатывать как внутренние, так и внешние обращения(одна и таже база может быть доступна как посредством СУБД из процесса А, так и через FB Embeded из процессов B, C и т.д.)
- теоретически этот менеджер блокировок позволяет организовывать кластеризацию используя готовые распределенные движки блокировок
- кеш страниц на соединение
- хорошая поддержка многпроцессорности, т.к. потоки ОС легко распараллеливаются
В v3.0 планируются такие доработки:
- общий кеш страниц на уровне базы
- кеш подготовленных запросов
- общий кеш метаданных
Как итог - SuperClassic это промежуточный шаг(насколько я понял изначально родившийся в RedSoft) к следующей основной архитектуре FB, появившийся в следствии крупного рефакторинга внутренностей движка.
Пока для пользователей практический выигрыш лишь в экономии на процессах и, как следствие, чуть более быстрой синхронизации. Хотя если верить документации, то совокупный выигрыш - до 15-20% на TPC-С тестах в сравнении с классиком.
Подробнее можно посмотреть в Firebird 2.5 Release Notes
UPD: Презентация от Дмитрия Еманова - Firebird 2.5 Architecture
пятница, 25 сентября 2009 г.
Динамически загружаемые bpl , их выгрузка и интерфейсы
Если в проекте используются динамически загружаемые/выгружаемые bpl, следует помнить, что при выгрузке информации о классах, реализованных в этих bpl в памяти не остается.
Предположим есть некий список, в котором регистрируются _интерфейсы_, имплиментирующие классы которых реализованы в динамически загружаемых bpl(к примеру в плагинах). Сам список живет в базовом приложении, которое и загружает эти пакеты.
Если оставить разрушение этих объектов на совести основного кода, что при использовании интерфейсов довольно очевидно, но делать это _после_ выгрузки bpl с кодом класса реализующего интерфейс, например в секции finalization, - будем получать маловразумительные AV.
Интерфейсы должны быть интерфейсами!
Есть объект, унаследованный от TComponent и поддерживающий какой-то интерфейс. Временем жизни этого объекта управляет некая фабрика, честно убивающая его при закрытии приложения вручную, как обычный объект - т.е. посредством вызова Free.
А в совершенно другой части приложения есть ссылка на этот объект, но в виде глобальной переменной модуля. Некрасиво, но пока приложение живет проблем нет.
А при завершении работы - фабрика все честно чистит и умирает сама, выполняется весь пользовательский код. И начинают финализироваться модули, обнуляя интерфейсы и соотв. дергая TComponent._Release у давно умершего объекта...
Обнаружить сию неприятность удалось только благодаря FastMM, который заполняет память под разрушенными объектами по специфическому шаблону:
Q: My program used to work fine, but if I enable "FullDebugMode" and run it I get an access violation at address $8080xxxx. Why?
A: You are attempting to access properties of a freed object. When you free a block in "FullDebugMode", FastMM fills the freed memory area with a pattern of $80 bytes. If there were any pointers, long strings or object references inside the freed object they will now point to $80808080 which is in a reserved address space.
вторник, 15 сентября 2009 г.
Все плохое в FB от Windows :)
Тот громкий "зашитый" пароль politically/correct был введен для коннекта сервером к своей базе паролей, которая в свою очередь была введена для порта сервера на .... Win3.X в 92-93г., у которой в то время не было свой подсистемы пользователей.
Как любит говорить один мой друг, коммерческий дух win-платформы пересилил здравый смысл :)