17 January 2012

Разделяй и властвуй!

Хочу вернутся к теме вот этого проекта, в разработке которого я по прежнему участвую.
Продукт -- некий VoIP терминал. Под капотом -- ARM от Samsung и Linux. 
На примере софта для этой железки я хочу порассуждать на две темы.


Тема первая -- высокая эффективность embedded разработки через обеспечение работоспособности большей части кода на ПК

Собственно я по этой теме писал много раз, например такое:

"В случае embedded разработки одним из самых главных аспектов эффективной организации процесса есть возможность запускать и отлаживать бОльшую часть кода не на целевой платформе, а прямо на ПК. Потому что обычно процесс получения прошивки для target'а, плюс ее заливка в железо, плюс последующие манипуляции, для того, чтобы получить нужные тебе трассировки это бесконечно длинный и муторный процесс. На стадии запуска одной из версий проекта, которым я сейчас занимаюсь, работа шла в режиме, когда менялась буквально пара строчек кода, потом шла бесконечно длинная процедура билда и запуска новой версии на железе. Запуск свежего билда почти сразу вскрывал следующую проблему и все начиналось по новой. Ужасно неэффективный процесс, и мы даже шутили между собой по этому поводу "три раза сбилдился, глядишь, уже и домой надо собираться"... Естественно, проблема была хорошо прочувствована на собственном горбу, и через какое-то время мы занялись ее решением -- был написан "эмулятор", который позволял до 90% всех проблем кода, который должен работать на железе, выявить работая за персоналкой. Даже страшно представить сколько это сэкономило нам времени, сил и нервов..."


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

12 January 2012

Успехи Windows Phone 7 -- ищем крайнего

Главные причины епичного провала новой мобильной операционной системы от Microsoft, перечисленные в порядке их значимости.

#1. Фундаментальный закон рынка: продукт не имеет никаких мало-мальски значимых преимуществ перед конкурентами.

И ладно, забудем про Android, скажите мне, почему среднестатистический американец в здравом уме и трезвой памяти должен купить что-то на WP7 вместо iPhone 4?!... Назовите ну хоть одну долбанную причину!... Ради "интеграции" с фейсбуком? Вы серьезно?


Если смотреть на эту проблему более детально, то хорошо видно, откуда растут ее ноги.

Первое -- Microsoft абсолютно утратила веру в собственные силы создавать тренды на рынке. Индустрия уже давно марширует под ритмы, отбиваемые другими компаниями, а ребята из Редмонда ничего не понимают о том, куда все идут, и просто пытаются не отстать от этого движения настолько сильно, чтобы вообще пропасть из виду.
В случае мобильной ОС было принято простое решение. "Кто у нас самый успешный на этом поприще?... Ага, значит все будем бит в бит драть все у Apple!". Я даже не говорю о том, что когда ты все за кем-то копируешь, ты навеки обречен быть догоняющим, вторым номером. А более серьезная проблема заключается в том, что когда нет глубокого понимания того, что именно ты создаешь (ибо все сводится к механистическому обезьянству), то хорошего результата быть не может в принципе, ибо созидание превращается в магию и самый настоящий карго культ.
В этом смысле, о WP7 можно сказать, например, что в Microsoft пришли к заключению, что тайная сила всех успехов iOS заключена в ональном огораживании всего и вся, в политике цензуры, полного контроля и сверхзакрытости, поэтому инженеры из Редмонда честно попытались переплюнуть в этом аспекте саму Apple... О таком маленьком нюансе, что Apple сама же и является производителем железа, почему-то напрочь забыли, и попытались применить очень жесткую модель в случае, когда все устройства производятся силами OEM, которым на рынке WP7 просто не о чем конкурировать.

Второе, сверхочевидное -- функциональная бедность, связанная с сильным отставанием от своих конкурентов по времени разработки ОС.
Кстати, в качестве оправдания собственной убогости, даже тут была выбрана тактика Apple -- делать морду кирпичом, и рассказывать о том, что пользователям не нужны сторонние приложения, буфер обмена и многозадачность.
Одна проблема -- так цинично врать из года в год на этой планете умел только один чувак, но он, увы, никогда не работал в Microsoft, и более того, в прошлом году взял и внезапно умер...
Да и сама история айфона, сложившаяся по мотивам сказки "Гадкий утенок", и история WP7 -- вряд ли будут между собой сильно похожи. В те былинные времена конкуренция среди смартфонов была совсем другая, не говоря уже о том, что Джобс мог на старте опереться на довольно многочисленную армию безусловных фанатиков яблочной продукции, которые готовы скушать любую какашку, лишь человек, породивший ее, перед этим хотя бы укусил яблоко.

Отсмотренное

"Повелитель мух", тот, который 90-го года.
Книгу не читал, более старую версию не видел.
Экранизация вроде как богатая и в "классическом" стиле, но мне кажется, получилось очень плоско, поверхностно и откровенно скучно. Хотя общая идея о том, что произойдет с детьми, когда они выпадут из цивилизации, как они весело самоорганизуются (см. дедовщина в армии, или "Очерки бурсы"), это действительно очень интересный и важный повод для размышлений.


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

"Заложница" боевичок, спродюссированный Бессоном.
Иногда все-таки полезно читать рецензии Экслера перед просмотром. Сценарий настолько пошлый и бредовый, что на все остальное как-то уже и наплевать. Зря потраченное время.

"Высоцкий. Спасибо что ну-вы-поняли". Смотреть не хотел, но появилось чуть свободного времени, DVD Rip и восторженная рецензия Каганова.
Что имею сказать -- сценарий кривой, косой, местами просто бредовый (см. фильм выше).
"Высоцкий" получился совсем на себя не похожий, и, что сильно хуже, постоянно своим видом переключающий внимание зрителя на странный поток мыслей "блин!... ну не Высоцкий это!... ну что это вообще за лицо такое?!... это живой человек?...".
Но! В чем Каганов прав, так это в том, что общий посыл фильма очень правильный, это не скандальное кино о Высоцком-наркомане.
Акиньшина -- ми-ми-ми, отличная актриса и очень красивая женщина!

11 January 2012

Помоги себе сам

Удивительно, но нашлись граждане, которые на мои призывы в этой заметке не использовать без острой надобности shared_ptr там, где вполне можно обойтись scoped_ptr, которые стали утверждать, что это сильно сложно, на это можно забить, и везде использовать только один, самый универсальный, вид умного указателя.

Честно говоря, сам себе я кажусь чуваком с четырехзвездочными погонами, но кое-какие вещи я проговорю еще раз.

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

Если мы говорим про C++, то я бы обратил внимание на мелочи, вроде маркера "const" рядом с методом объекта, или на "static" методы. Тема scoped_ptr vs shared_ptr совершенно из этой серии, когда не использование максимально жесткого варианта (а const и static это фактически ограничители) при написания кода, никак не влияет на его работу. Но иногда существенно помогает при его чтении.

Моя практика показывает, что в 90+% случаев вполне хватает "жесткого" варианта, т.е. scoped_ptr (можно исходить хотя бы из того, что подавляющее большинство всех типов в программе -- сущности, для которых запрещено копирование). Когда я вижу поле типа scoped_ptr я сразу понимаю время жизни этого объекта. Когда я вижу поле с shared_ptr -- я не могу сказать ничего. Поэтому этот вид указателя остается только для нетривиальных случаев, когда владение объектом сложно, непредсказуемо и определяется runtime поведением программы.

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

Такие вот пироги, можете продолжать говнокодить дальше.

06 January 2012

Про технику бана

В твиттере работают на редкость безрукие граждане.

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



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

Что му чудаки сделали в твиттере? Если кто-то тебя забанил, это значит, что ты не можешь его фолловить, т.е. читать его твиты. Те самые твиты, которые запросто может прочитать любой не авторизованный человек с улицы! Т.е. чтобы почитать забанившего тебя человека, ты должен нажать волшебную кнопочку "log out" и только после этого наслаждаться чтением.
По-моему, это ну просто гениально!... Правда, следы хоть какой-то логики этого замечательного решения я не могу найти до сих пор.

К чему я это все вспомнил... Похоже, вторжение пришельцев, которые вселяются в мозг программистов, сейчас в самом разгаре, потому что точно такой же идиотский бан Google сделал для своей социальной сети Г+.
Ну ёп же шь твою мать! Если уже эти ребята доходят до таких мощных решений, можно откровенно говорить о том, что последний уцелевший островок здравомыслия в этом безумном мире -- блог, заметку в котором вы сейчас читаете.

Э.Успенский троллит

Какое образование лучше для писателя – гуманитарное или техническое? 

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

03 January 2012

Отсмотренное

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

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



При просмотре просто повизгивал от восторга. Лучшую кинокартину для новогодних праздников просто трудно себе представить.
Настойчиво рекомендую.

"Бабло".
Наш ответ Гаю Ричи. Получилось очень даже хорошо -- колоритные персонажи, довольно насыщенный сюжет, правда, до лучших нетленок британца в плане закрученности оного несколько не дотягивающий...
Фильма снималась при поддержке Министерства культуры РФ. В фильме показаны всем хорошо известные реалии российской действительности -- менты полицейские наезжающие на бизнесменов, крышующие воров и проституток, за чемоданчики с деньгами решающие те или иные "вопросы". При этом полковник УБОПовец показан чуть ли не положительным героем (в финале он получает звание генерала), а "нехорошего" мента в конце-концов ждет лишение работы и арест за стрельбу на улице...  Ох, ах, ну как, блин, в этой стране строить гражданское общество?!
Но фильма для своего жанра очень даже годная, посмотреть можно.

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

29 December 2011

Итоги 2011: личные и не очень

Честно говоря, я не сильно люблю подводить итоги года (как я это не люблю можно увидеть по прошлогодней записи), однако год 2011-й был для меня интересным, важным, насыщенным и желание написать об этом возникло как-то само собой.

Итак, год 2011-й, как это было, поехали!

#1. Главное событие года -- в сакральном для каждого программиста возрасте 0x20 (одинэсники и пэхапэшники не знают что это) я стал папой
Наверное, не буду писать лишних слов по этому поводу, отмечу только вот что. 
Раньше я очень часто слышал от более опытных товарищей, родителей и всяких других людей какое-то странное многозначительное укорительно-назидательное "ничего! вот когда у тебя у самого будут дети, вот тогда ты всё поймешь!...". Сейчас у меня за плечами относительно небольшой срок отцовства, всего четыре месяца, но могу сказать, что наверное я тупой, потому я так ничего и не понял... То, что ребенок большая ответственность, хлопоты и переживания я абсолютно прекрасно осознавал и до его появления, поэтому все те большие изменения, которые произошли в моей жизни после рождения Виталины, не стали для меня какой-то неожиданностью. 
Не знаю, может если у тебя появляется ребенок в двадцать лет, то это приносит много неожиданностей в твою жизнь, но после тридцати, когда за плечами сильно больше опыта взрослой жизни, смотришь на это несколько иначе.

27 December 2011

"Эффект айпэда"

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


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

26 December 2011

C++11 умные указатели

Сначала было слово. В смысле, сначала был один единственный умный указатель, просочившийся в стандарт 98-го года -- злополучный std::auto_ptr

Сегодня даже дети знают, насколько это неудачное было решение.
Если говорить коротко, то суть проблемы auto_ptr описывается так: для этого типа разрешено копирование, которое несет в себе серьезный побочный side effect.

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




По мнению гугловского поиска по картинкам -- умный указатель выглядит примерно так

Потом появились умные указатели в boost, где на смену auto_ptr пришло два новых типа -- scoped_ptr и shared_ptr (на самом деле там их больше, но сейчас мы не будет останавливаться на всяких weak_ptr).

Тип scoped_ptr -- это auto_ptr, для которого запрещено копирование. Вот так вот, просто и понятно.

Тип shared_ptr -- это auto_ptr, для которого реализовано полноценное копирование, т.е. после копирования и оригинальный указатель, и его копия, ссылаются на один и тот же объект; реализовано это все через классическую схему подсчета ссылок, когда только уничтожение последнего указателя на объект, приводит к его уничтожению.
Тонкий нюанс при реализации такого рода указателей -- счетчик ссылок должен быть атомарным для обеспечения корректной работы в многопоточной среде.

Теперь имеем новый стандарт языка, C++11, в который перекочевал shared_ptr, но вот scoped_ptr почему-то заменили на unique_ptr.

Что такое unique_ptr и чем он отличается от scoped_ptr?

Как мы знаем, в новом стандарте языка у типов, наравне с понятием copyable/non-copyable, появилось новое свойство -- movable/non-movable. Т.е. тип можно быть не копируемым, но при этом поддерживать move семантику. Так вот, unique_ptr это scoped_ptr, который стал movable. Т.е. в тех местах, где вы действительно можете безопасно применить разрушающее копирование (пример -- вернуть такой указатель из функции), вы теперь можете это делать. А еще вы наконец-то можете хранить такие указатели в контейнерах, правда, наверное, использовать для этого что-то вроде Boost Pointer Container было бы удобнее.

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

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

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

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

Вот теперь все. 
Что еще почитать по теме:


Мудозвоны, писавшие стандарт 98-го года не только засунули туда auto_ptr, но и допустили массу других, не менее очевидных косяков и ляпов.
К нем относится и послабление для сложности метода size() для связанного списка. Его рекомендуют (но не обязывают!), делать со сложностью O(1). Ну и, конечно же, нашлись другие мудаки, которые таки да, реализовали его с линейной сложностью через distance(begin(), end()).

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

Речь, на самом деле, не идет о том, должен ли быть list::size() O(1) или O(n). Если вы считаете, что эффективный splice() сильно важнее размера контейнера -- ради бога, делайте!... Просто метод определения размера тогда, блядь, должен называться не size(), а count_size(). Ну это же очевидно! 

В новом стандарте, кстати, это момент исправили. Метод size() теперь обязательно должен иметь постоянную сложность. И точка. 

22 December 2011

Журналюга

По наводке вождя и учителя, товарища Вильянова, прочитал книжку "Журналюга" пера Виктора Левашова. Что имею сказать.


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

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

Итого -- оценку 5/10 можно поставить с натяжкой. Очень противоречивая книга, которую, увы, вряд ли смело порекомендуешь прочитать другим.

зы. "Чуму" Камю бросил посредине. Или это какое-то гавно редкой унылости, или просто я дэбил.
Дать последний шанс Пелевину? "t" и "воду" бросил читать посередине...

21 December 2011

Будущее здесь, в 88-м

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


Уже на момент этой презентации у Джобса были очень серьезные проблемы с его грандиозным проектом -- ОС и железо так и не были готовы к продажам, горели все сроки, железки получались запредельно дорогими, заканчивались деньги инвесторов... И вообще, весь проект NeXT это такой "Титаник" от IT, которому просто сильнее повезло, и после столкновения с айсбергом под названием "жестокая реальность" у экипажа оказалось достаточно времени и спасательных шлюпок для того, чтобы догрести до корабля с надписью "Apple" на борту, который, правда, и сам в тот момент был готов вот-вот пойти ко дну... Но речь сейчас не об этом -- хочется поделиться некоторым соображениями от увиденного.

Первое -- звание visionary man Джобс получил совершенно заслуженно. В далеком 88-м он говорил о том, что мир персональных компьютеров пережил две революции -- революции электронных таблиц и текстового процессора (издательство в ПК). Третья революция -- это организация совместной работы и общения посредством Сети.
Слова Internet, HTTP и браузер, конечно, не были произнесены. Но были показаны rich e-mail и веб-сервисы, вроде словаря или библиотеки, с которым происходило общение не через браузер, а через специально написанные клиенты.

С другой стороны, понимание, столь ясное и раннее, того, что Сеть будет главным направлением как минимум в 90-х, увы, не подвигло Джобса на работу в области веб-сервисов, ибо когда Джобс рассказывает в 88-м году о совместной работе у меня, в 2011-м, перед глазами возникает не почта с документами в атаче, а, например, Google Docs... Как мы знаем, Стив крайне нелицеприятно отзывался и об Android, который есть якобы сворованные из iOS идеи, и о множестве сервисов Google, включая тебе же Docs, но давайте посмотрим правде в глаза: нынешнюю эпоху Сети делает Google, с сервисами, вроде поиска, gmail или youtube, а Apple сильно отстает, представив только в этом году iOS 5 с какими-то попытками наверстать упущенное в этой области.

Второе -- Джобс очень часто и много ошибался.
Например, в 88-м он рассказывал о том, что звук это следующая "большая штука", которая пришла в персональные компьютеры, и показывал как удобно, отправляя кому-то по e-mail финансовый отчет, приатачить к нему звуковую запись с рассказом о том, что именно мы видим в полученных циферках. Кто-то сегодня пишет голосом послания и посылает их по e-mail?
Более свежие примеры -- facepalm facetime. Про него сегодня хоть кто-то вообще вспоминает? И Siri, по-моему, пойдет в ту же самую степь.


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

Ну и последнее. Мне кажется, что причины полного провала проекта NeXT кроются в следующем. У Джобса было очень интересное, прогрессивное, во многом опередившее свое время, видение того, какими должны быть компьютеры, и главной проблемой в этой истории было то, что железо, которое было бы способно тянуть все эти возможности, стоило очень дорого. Так дорого, что для него просто не было рынка. NeXT -- классический проект-утопия...
И да, уже в те годы Джобс умел красиво и цинично врать, желая преподнести свои идеи и продукты в выгодном ключе, как нечто исключительное.

19 December 2011

Про сам процесс

Я давно уже смотрю на все события в жизни с позиции "что не происходит -- все к лучшему". 
Вот взять, к примеру, историю о том, как моя жена, будучи на седьмом месяце беременности, умудрилась "утопить" фотоаппарат, простенькую самсунговскую мыльницу. Без фотоаппарата моему расширившемуся семейству, по понятным причинам, никак нельзя, в результате был срочно приобретен NEX-3


До момента, пока я получил в свои руки беззеркалку, я был человеком, совершенно равнодушным к фотографии (не, я не про фотографии обнаженных, щедро одаренных природой барышень). Дык, как говорится (правда, несколько по иному поводу) -- когда в руках оказывается молоток, все вокруг начинает казаться гвоздями, так вот, NEX-3 оказался довольно интересным инструментом, который вызвал желание его изучить и начать активно использовать. 
В голове определенно произошел сдвиг, от вчерашнего "$300 за фотик это дорого", до "$300 за объектив? да почти даром!". 
В широком семейном кругу за мой уже закрепилась слава фотографа, и меня начинают зазывать на всякие мероприятия, потому что хотят поиметь фотки...

17 December 2011

Турецкий пословиц

Иллюстрация к древней турецкой пословице: злой моська и жираф на пальма загонит.

15 December 2011

cppcheck

I.

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

Компиляторы, с которыми мы в данный момент работаем, по поводу этой ситуации, тривиально выявляемой машиной, молчат как рыба об лед. Стали копать в сторону статических анализаторов. Сначала я решил попробовать нереально распиаренную на хабре (ваши волосы на ногах станут на 50% шелковистее!) PVS-Studio


Блевотина и гей атрибутика как бэ намекают нам 

Тут все не заладилось с самого начала. При установке триальной версии, софтина каким-то волшебным образом обнаружила фантомную инсталляцию MSVS 2008 (которая была давно полностью деинсталлирована) и попыталась в нее "интегрироваться". Закончилось это все банальным зависоном, а сам инсталлятор пришлось просто прибить.

10 December 2011

В продолжении мысли

Собственно указанные в прошлом материале две цифры -- 25% и 50% полученные чисто математическим путем абсолютно точно коррелируют с реальным положением вещей.

Поддержка ПЖиВ в столице точно такая же, как и Питере, просто там подкручивали сильно меньше.

07 December 2011

Анализируй это

Добрые люди выложили в сеть данные с сайта ЦИК в csv формате (тыц). Я решил тряхнуть стариной, взял в руки питон, и посмотрел на картину поддержки партии жуликов и воров по Москве и Питеру.

Картина получилась следующая:

Москва 

Питер

По горизонтали -- количество процентов, которые получила в свою поддержку ПЖиВ. 
По вертикали, на первом графике -- процент УИК с указанным уровнем поддержки, на втором -- средняя явка на УИК с указанным уровнем поддержки. 

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

Для обоих городов на первых гистограммах видны два пика, в районах ~25% и ~50%. Первый пик -- данные из ЦИК, в которых не было подкруток. Второй пик -- фальсификации. Соответственно, можете оценить, насколько более масштабны были фальсификации в Москве по сравнении с тем же Питером.  

Как-то так. 

Интересная статья на тему "выборы и статистика" -- http://esquire.ru/elections
Один из бесчисленных материалов с анализом -- http://shipilev.livejournal.com/95401.html

06 December 2011

О демократии

У соседей прошли выборы в Думу.

Власть, не моргнув глазом, пририсовала себе где-то в полтора раза больше голосов, чем они получили на самом деле. Честный результат, судя по статистическим выкладкам, где-то порядка 35% -- это все, что жулики и воры смогли выжать, используя админ ресурс и имея абсолютную монополию в области классических СМИ, вроде телевидения.

Цинизм, с которым были нарисованы итоговые 50% очень впечатляет -- цифры из протоколов были тупо проигнорированы и на сайте ЦИК, не сильно парясь, просто показали "нужный результат"; я видел в Сети неоспоримые свидетельства десятков подобных случаев, причем некоторые из них рассказаны людьми, которых я знаю не первый год. О чем тут вообще говорить, если на ТВ показывают ведущих, на фоне явки в 120%?
Каганов вообще рассказал анекдотическую историю, когда человек проголосовал за "Яблоко", полез на сайт ЦИК, а там по его участку за "Яблоко" нет вообще ни одного голоса! Блин, это было бы очень смешно, если б не было так грустно.


Мораль?

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

Царь-батюшка Путин ложил на вашу демократию с широким пробором. И по доброй воле он и его кодла сильно вряд ли уйдет. В данный момент верховная власть в России обеспечивает права собственности на бизнесы такого масштаба, что Владимиру Владимировичу просто не дадут уйти из Кремля -- такими деньгами не шутят, и право их владения нельзя ставить под угрозу.
В общем, это либо будет какая-то очередная перетрубация (а-ля операции "Медвед") с формальной передачей власти нужному человеку, которую власть вынуждена будет сделать, если недовольство народных масс достигнет критической, взрывоопасной точки... Либо кровь. Много крови. Для новой России -- нормальный сценарий, они его уже пару раз проходили, по другому они просто не умеют.

Сегодня для свержения не демократической власти путем революции народ категорически не готов. Америка мало занесла. Проблема в том, что вся политическая движуха в стране идет в ключе классической "навальщины" -- на воле протестов и возмущений против беспредела со стороны нынешней власти. Это вообще классическая черта менталитета (по себе сужу) -- мы не за кого-то, мы скорее против! Нам не хвалить нравится, нам нравится гадить и критиковать. Не созидать, а крушить да ровнять с землею... Так вот, агрессия против нынешних правителей это здорово, но для того, чтобы что-то изменить, нужно созидательное направление, вокруг которого народ сплотится и самоорганизуется... Лозунг "голосуй против ПЖиВ! совершенно не важно, кто пройдет в Думу, главное, что именно этих гадов там будет меньше" есть тупиковый путь, ведущий в никуда.
Кстати, совершенно такая же беда и в Белоруссии -- понятно, что бацька плохой, ну а кто хороший?

В России нет внятной, хорошо организованной оппозиции. И задумайтесь, может быть ее нет просто потому, что на нее нет реального спроса со стороны общества. С нефтью все в порядке, цена хорошая, объемы экспорта греют душу. Народ сытый да обутый, благосостояние из года в год растет. На что жаловаться?... Ну да, власть зажралась, прибрала к рукам весь крупный бизнес, национальное достояние растаскали по личным карманам. Да, воруют. Да, коррупция. Но лично тебе, %username%, разве лично тебе так уж и плохо живется? Зачем тебе нестабильность и смута, если ты сейчас, в принципе, живешь не плохо? Лучше синица в руках, да хата с краю!...

***

Мне очень сильно не нравится то, что происходит в России. 
Я не такой наивный, чтобы верить в демократию, просто я согласен с Черчиллем -- ничего лучшего пока не придумали. 
То, какая Путин мразь и как быстро он "наведет порядок" я понял буквально в первый же год его правления. Чувак полностью задавил свободную прессу, а это верный и совершенно однозначный знак. 

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

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

Skill vs Will II

Пара слов о поединке Котто vs Маргарито II.


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

Второй бой -- точная копия первого, с одним единственным исключением -- мексиканец получил практически в самом начале боя серьезную травму правого глаза, что сильно сказалось на его боксе, и, в конечном счете, привело к досрочной остановке боя, который так и не показал, кто из двух боксеров все-таки сильнее.
Ждем третьего поединка?

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

зы. Отменился бой Владимира Кличко... В принципе, хрен с ним, я от этого боя не ждал ничего особенного. Очередное избиение крузервейта, к тому же далеко не самого быстрого.

02 December 2011

Всякая всячина

#1. Многозадачность в iOS драли с Windows Mobile.
И не спешите возмущаться!... По "крестику" приложения не закрывались, а сворачивались. В случае нехватки ресурсов система сама прибивала те приложения, с которыми вы давно не работали. Клик на ярлык приложения перекидывал вас к запущенной программе, если таковая имелась.
Скажу больше, в плане минимализма WM была даже впереди iOS -- очень долгое время там вообще не было диспетчера задач.



#2. Ребятам, которые колдуют сейчас над Qt5, сильно сдвигая фокус от C++ к JavaScript, я советую задуматься. Посмотрите на ренессанс C++ в Microsoft, а ведь эти ребята последнее десятилетие были просто одержимы managed кодом... Как бы и вам потом не пришлось откатывать назад некоторые свои решения.

#3. Проблема помойки и рассадника венерических болезней, под названием Android Market, решается тривиально, причем к обоюдному удовольствию всех трех сторон -- Google, разработчиков и пользователей.
Все, что надо сделать -- ввести программу платной сертификации.
Разработчик платит деньги за волшебную плашку "проверено! вирусов нет! продукт высшего качества". Работники Google проверяют качество софта, их зарплата идет из кармана разработчиков. Ну и пользователи, которые могут в магазине нажать чудо галочку "только сертифицированные" и рыться только среди гарантированно качественного софта.
Все довольны.

#4. Честного свопа, по-моему, в iOS нет.
Он, в принципе, и не сильно нужен. Большую часть памяти занимает графика.
Если за текстурой гарантировано стоит read-only файл на диске, то хэндл этой текстуры может вести себя следующим образом -- память, занимаемую текстурой, всегда можно освободить, а потом вернуть в RAM при первой же попытке доступа к ней.
Судя по всему, нечто подобное в iOS и реализовано.

#5. Тут могла быть ваша реклама.
Просто четыре -- некрасивое число, почти как 13.