суббота, 16 августа 2014 г.

[prog.management] Интересное на счет себестоимости софта

Интересные и, как мне кажется, здравые мысли нашел вот в этой статье: The Dirty Little Secret of Software Pricing. По крайней мере очень сильно похоже на причины успешности того небольшого коллектива, которым я руководил в Интервэйле до 2012. И на причины проблем, с которыми пришлось бороться после перехода на более ответственную должность.

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

Итак:

...Разделение версий -- копирование исходников и разработка отдельной ветки -- на порядки проще, чем последующее их объединение. Фактически, объединение настолько сложно, что правки оставленной без управления ветки практически невозможно объединить с чем-либо. Вообще. Сопровождение каждой ветки стоит почти одинаково, поэтому выделение ветки практически удваивает стоимость. Неконтролируемое увеличение количества версий -- это смерть. Любая политика управления, которая не осознает этого, обречена на неудачу...

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

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

[prog] Две интересные обзорные статьи на тему протоколов для Internet of Things

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

Understanding The Protocols Behind The Internet Of Things. Очень кратко по поводу MQTT, XMPP, DDS и AMQP.

What’s The Difference Between DDS And AMQP? Более подробно на тему того, что такое DDS и что такое AMQP, назначение, различия между ними и, как следствие, предпочтительные области применения.

PS. К теме DDS я пока только слегка прикоснулся. Но, после того маразма, который в "корпоративных приложениях" выстраивают вокруг HTTP, все это воспринимается как глоток свежего воздуха :)

пятница, 15 августа 2014 г.

[prog] К чему можно подключиться посредством MQTT?

А не подскажут ли мне читатели: есть ли в Интернетах какой-нибудь забавный, но вполне себе реальный сервис, выставляющий наружу MQTT-интерфейс? Чтобы к нему можно было MQTT-клиентом подключиться и провзаимодействовать?

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

Есть ли что-нибудь подобное, а?

[life.sport.darts] Награды уже ждут своих героев

Всего-то и нужно: прийти в воскресенье, 17-го августа, к 11:30 в СШ №66 г.Гомеля, поучаствовать в личном турнире в 501 single-in/double-out. Приглашаются гомельчане и жители Гомельской области. Для тех, кто раньше не играл в наших турнирах в СШ №66 участие бесплатное.

PS. Вообще, большое дело должно свершиться. Хоть, скорее всего, будет не более 10 игроков. Тем не менее, это будет первый проведенный нами турнир по дартсу в Гомеле, где будут вручаться настоящие медали. Ждали мы этого чуть больше 4-х лет. И вот оно, на пороге :)

PPS. Про очепятку в тексте на оборотной стороне медали я знаю. Так получилось ;)

PPPS. Лично я буду очень удивлен, если попаду в призеры. Не та у меня форма, не то настроение. Давно уже пора перестать мешаться на пути амбициозных и способных игроков...

четверг, 14 августа 2014 г.

[life] И еще раз читая putnik1 про Украину

К сожалению, продолжение темы от 14 декабря 2013.

При чтении putnik1 иногда возникает ощущение, что добром дело не кончится. Так было когда я читал его материалы по Ливии. Так было когда я читал его материалы по Украине в конце 2013. Как раз тогда и были высказаны опасения по поводу гражданской войны. Как показало время, далеко не напрасные опасения.

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

PS. Чуть поясню свою позицию. Я родом из СССР. Для меня страна, в которой я хотел бы жить -- это СССР. Нравится это кому-то или нет -- мне пофиг. К сожалению, ни современная РФ, ни РБ -- это не СССР. Поэтому я не за Россию, и не за Украину. Однако, по-моему мнению, то, что происходит сейчас на Украине -- это часть большого передела мира, последствия которого сейчас сложно предсказать. Но, есть у меня подозрение (опасение, если хотите), что если в этом переделе Россия проиграет, то никому из бывшего Союза мало не покажется. Может во мне еще живы догмы, внушаемые советской пропагандой... Тем не менее, думаю, что ни в Европе, ни в США, ни в Китае никому белорусы с украинцами не нужны. Тогда как в составе или рядом с Российской Империей (как бы она не называлось), шансов на нормальную жизнь гораздо больше.

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

[prog.c++] Состоялся релиз SObjectizer 5.4.0

SObjectizer -- это реализация модели акторов для C++, позволяющая программировать на C++ с использованием работающих на разных нитях агентов, общающихся между собой посредством сообщений. SObjectizer существенно упрощает разработку событийно-ориентированных приложений, для параллельной и независимой обработки событий в которых требуется многопоточность и/или распределенность. SObjectizer использовался для создания как для мелких утилит, так и серьезных распределенных приложений, работающих под большой нагрузкой в режиме 24x7.

Последние несколько лет SObjectizer развивается на SourceForge как OpenSource проект под BSD-лицензией. Версия 5.4.0 является результатом очередного этапа развития проекта.

Версия 5.4.0 содержит несколько изменений и улучшений, среди которых можно выделить следующие:

  • новый тип mbox-а: multi-producer/single-consumer (MPSC). Позволяет организовать эффективное peer-to-peer взаимодействие агентов (ранее такое взаимодействие было частным случаем использования модели publish/subscribe). Накладные расходы на общение двух агентов через MPSC заметно ниже, чем при работе через старые multi-producer/multi-consumer mbox-ы;
  • для обработчиков событий можно указывать признак thread safety. По умолчанию все обработчики событий рассматриваются как not_thread_safe и для одного агента обработчики его событий запускаются строго последовательно. Если же событие помечено как thread_safe, но новый диспетчер adv_thread_pool может параллельно запустить несколько thread_safe-обработчиков для одного агента на разных нитях;
  • новый диспетчер thread_pool, который использует пул рабочих потоков и распределяет обработчики событий между этими потоками (здесь чуть подробнее о принципах работы этого диспетчера);
  • новый диспетчер adv_thread_pool, который так же использует пул рабочих потоков и распределяет обработчики событий с учетом флага thread safety (здесь чуть подробнее об этой возможности);
  • режим autoshutdown -- SObjectizer Environment завершает свою работу после дерегистрации последней кооперации;
  • теперь диспетчеров можно добавлять и после запуска SObjectizer Environment (ранее это нужно было делать только до старта Environment-а);
  • серьезная реорганизация внутренней кухни, увеличение производительности и улучшение масштабируемости.

Более подобно список изменений в версии 5.4.0 на русском языке описывается здесь.

Версия распространяется в виде сборки so-201408-00, в которую кроме SObjectzer 5.4.0 входит еще несколько SObjectizer-библиотек, предназначенных для разработки больших, распределенных приложений на основе SObjectizer, а именно:

  • so_log, служащая оберткой над ACE Logging и упрощающая логирование для агентов;
  • so_sysconf, позволяющая собирать большое приложение из маленьких кусочков, оформленных в виде dll/so-библиотек;
  • so_5_transport, оформляющая работу с TCP/IP соединениями в виде транспортных SObjectizer-агентов;
  • mbapi, являющаяся высокоуровневой библиотекой для обмена сообщениями между агентами или между компонентами распределенного приложения.

Примечание. Компилятор Microsoft Visual C++ 11 (т.е. MSVS2012) больше не поддерживается. Для компиляции под Windows теперь нужно использовать Visual C++ 12 (т.е. MSVS2013).

Релизная сборка может быть загружена с SourceForge в виде архива или же взята из svn-репозитория.

Wiki-раздел SObjectizer-а на SourceForge содержит более подробную информацию как об особенностях версии 5.4.0, так и о самом SObjectizer и его основах.

[prog] Большая статья о SObjectizer на OpenQuality.ru

Сегодня на OpenQuality.ru опубликована большая статья: "SObjectizer: прошлое, настоящее, будущее". В ней я попытался рассказать о том, откуда и как возник SObjectizer, как он развивался, к чему пришел и что мы хотим сделать в ближайшем будущем.

Хочу поблагодарить Николая Гродзицкого, Бориса Сивко, Артура Суднеко, Николая Шмакова и редакцию OpenQuality за помощь в ее подготовке и публикации.

PS. Репост ссылки на эту заметку или саму статью всячески приветствуется.