суббота, 17 октября 2015 г.

[prog.flame.c++] "...мы до конца не разобрались в причинах...решили не заморачиваться и переписать его на Go"

Наткнулся на фееричный фрагмент в рассказе об опыте использования Go в Яндексе:

В Go не может быть ошибок памяти, это сильно помогает, так как не всегда и не всем удается быть внимательным. У нас есть приложение suggest-data, оно при старте загружает в себя 300 мегабайт данных. Когда оно было написано на плюсах, то временами падало, что вызывало легкий дискомфорт у нашего админа. В первый раз когда оно падало, это было из-за фреймворка Кокаина. Это пофиксили, но потом падения продолжились, во второй раз мы до конца не разобрались в причинах, возможно, была проблема и в том, что мы что-то не так написали. В результате решили не заморачиваться и переписать его на Go (там было всего 200 строк кода). Падения сразу исчезли.

Честно скажу, не сразу осознал написанное. Программисты хваленого Яндекса, который славился жесткими методами отбора сотрудников, вроде как должны были бы быть разработчиками высокой квалификации -- и не смогли найти утечки в C++ной программе на двести (двести, Карл!) строк?!!

Блин, как такое возможно вообще?

А вот это: "возможно, была проблема и в том, что мы что-то не так написали"?

Возможно? Они еще спрашивают, возможно ли в этом была причина?

Честно скажу, после такого эпичный фэйл с перезапуском Кинопоиска начинает играть новыми красками.

пятница, 16 октября 2015 г.

[prog.c++11] В стандарте C++ нет writeln, какая жалость...

Тут вот народ удивляется, что в C++ до сих пор нет writeln. Мол, C++ники вместо xs.writeln все еще кипятят используют std::copy(std::begin(xs), std::end(xs), std::ostream_iterator(std::cout)); std::cout << std::endl;

Действительно, что-то вроде свободной шаблонной функции writeln, которая берет поток и объект-последовательность, и отображает все элементы последовательности в поток, не помешала бы. Но в стандартной библиотеке C++ нет столько всего полезного, что сожалеть об отсутствии writeln в голову как-то и не приходит.

Может быть потому, что написать writeln можно буквально с полпинка:

templatetypename STREAM, typename SEQUENCE >
void
writeln( STREAM && to, SEQUENCE && what )
{
   using type = decltype(*std::begin(what));
   std::copy( std::begin(what), std::end(what), std::ostream_iterator<type>(to) );
   to << std::endl;
}

Под катом тестовая программка, на которой проверялась работоспособность.

[prog.c++11] В SObjectizer-5.5.9 задышала трассировка механизма доставки сообщений

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

Раньше довольно обыденной ситуацией было отсутствие какой-либо реакции на сообщение: вроде бы все подписки сделал, сообщение отослал, а ничего не вызвалось. И что делать непонятно... Может агент не в том состоянии. Может подписка не на то сообщение. Может сообщение не в тот mbox ушло. Сиди и думай :(

Сейчас же можно при старте отдать в параметрах SOEnvironment объект-трассировщик, а потом по его выхлопу посмотреть, что и к чему. Понятно, что еще нужно тщательно дорабатывать напильником, но сам факт появления такой фичи не может не радовать :)

четверг, 15 октября 2015 г.

[prog.c++] Превращаем простой рефакторинг в непростой: добавляем жестяной жести! :)

Продолжение предыдущего поста. Тогда была цель сделать минимальный, простейший рефакторинг. После ее достижения можно пойти дальше и сделать вариант в духе Modern C++ Overdesign, с преферансом и куртизанками. Т.е. с исключениями и RAII в полный рост :)

[prog.c++] Пример очень простого рефакторинга для простого, но объемного кода

Ув.тов.asfikon в своем блоге eax.me ведет серию постов, посвященных изучению работы с OpenGL (вот самый свежий пост из этой серии). Для работы с OpenGL используется C++. Код живет на GitHub, где его можно посмотреть и пощупать руками.

Любопытства ради заглянул, глянул краем глаза. Код как код, очень простой, разобраться в нем труда не составляет. Смело могу сказать, что доводилось видеть намного более страшные образчики C++ного кода. Однако...

среда, 14 октября 2015 г.

[prog.c++] Тридцать лет назад C++ вышел в большой мир.

Именно 14 октября 1985-го года состоялся публичный релиз первого C++компилятора Cfront и вышла первое издание книги "The C++ Programming Language".

Так что можно сказать, что сегодня у C++ юбилей :) Тридцать лет. С чем и поздравляю Бъёрна Страуструпа и всех причастных! Да и непричастных тоже ;)

PS. Из этих 30 лет я сам пользуюсь C++ом уже 23 года, с 1992-го.

[prog.process] Важное отличие продуктовой разработки от аутсорсинга

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

вторник, 13 октября 2015 г.

[lor.idiotic] Пять слов, которые взорвали мне мозг

Найдено здесь:

Коммерчески успешная метамодель — это оксюморон.

Там весь комментарий фееричный. Причем, как обычно, особый стиль мышления демонстрируют анонимные герои LOR-а.

[prog.process.flame] Скажу и я что-нибудь за Кинопоиск :)

Для тех, кто не в курсе одного из самых громких скандалов Рунета последнего времени: 8-го октября состоялся запуск новой версии популярного сайта kinopoisk.ru. Новый сайт выглядел совершенно по-другому, старым пользователям Кинопоиска, особенно неискушенным компьютерным пользователям, искать нужную для себя информацию на новом сайте стало очень неудобно. Плюс к тому, в работе нового Кинопоиска наблюдались нестабильности. Такой внезапный поворот событий вызвал неслабый поток говн, в котором поучаствовал и основатель, Виталий Таций, высказавшийся кратко, но по делу. В итоге, Яндекс, а это нынешний владелец Кинопоиска, вернул в продакшен старую версию, а новую переместил на beta.kinopoisk.ru, где на данный момент можно лицезреть итоги двухгодичного процесса запуска новой версии.