Thursday, March 08, 2012

Против "честности" и "справедливости"

Честность. Для одного за честь - это застолье с президентом. Для другого - не солгать. Для третьего - не подумать плохого. То же и со справедливостью: для одного - это поровну, для других - мне, и лишь единицы отдадут свое.
Тогда, что такое движение, лозунги и протесты “За честные выборы”, а также “Справедливая Россия”, как имя партии-движения?
Мы уже прокололись с “прозрачными” выборами. И камеры включены, и наблюдатели на местах, и урны прозрачные - а лидирует тот же, и нет согласия в победе. Так и будет пока мы используем около-эмоциональные термины, чувство “единения” и “прекрасные порывы”.
Выборы должны проводиться с соблюдением закона. И стремиться нужно к законности, а не к справедливости. Какой бы плохой закон не принят, он должен соблюдаться до тех пор, пока не примут другой. Вот единственное правило, которому нужно следовать, которое позволит избежать субъективных оценок и эмоциональных подъемов на площади и спуски. 

К сожалению, мы далеки от такого правила, до сих пор считая, что при случае, можно поступиться законом, например, ради “справедливости”. Даже Яблочники, отстаивающие законность, вдруг заговорили о недемократичности отстранения Явлинского, обнаружив в своих коробках ксерокопии подписных листов.

Sunday, March 04, 2012

Немое Кино

Выборы Чурова. Не потому, что его выбирают. Он уже выбран. Потому, что он главнокомандующий. Хотели прозрачности, смотрите и слушайте http://webvybory2012.ru. Ах, вы заметили нарушение? Да хоть два. Вам обещали, что вы их увидите. Обещание сдержали, за очень короткий срок создали систему, точнее полу-систему. Вы можете видеть, но нет кнопки “Сообщить о нарушении”. В “помощи” написано: “у пользователей нет возможности сообщать о нарушениях ”. Цинично вышло с этими полу-технологиями, оставили наблюдателя немым.
Есть, правда, кнопка “Заметили ошибку?”. Написал в “Предложения”, что, если не успеваете обеспечить регистрацию нарушений, то обеспечьте следующие простые вещи: 1. строка на изображении с текущим временем с точностью до секунды, тогда можно сослаться на время нарушения, и можно рассчитывать, что кадр не вырежут; 2. кнопку “Кадр/Capture” для сохранения кадра в локальный файл - может стать ‘вещественным’ доказательством нарушения. Ответа нет, наверное у них и кнопки “Ответить” нет.

Friday, March 02, 2012

Магия Пикселя

Каждый программист должен посмотреть презентацию Брэта Виктора. Даже если не очень понятен язык, подождите демонстрационных слайдов. И тогда вы придете в восторг, и тогда вы скажете “Эх ты!”, и в вашей деятельности появится больше творчества и надежд. 
Хотя Брэт предрекает смерть интерактивности (поясню дальше, почему), то, что он демонстрирует, есть поистине интерактивное программирование, мгновенное отображение кода в результат, параметризация рождающейся модели и интуитивное познавание ее в ходе разработки. На рисунке - работающая транзисторная схема с диаграммами меняющихся сигналов
Чтобы лучше понять, над чем работает и какие принципы использует Б.Виктор - дизайнер и концептуалист пользовательского интерфейса iPod и MacOSX Lion, давайте  прочтем его статью "Magic Ink" и коротко обсудим понятия информационного программного обеспечения, графического интерфейса и интерактивности, которую сменят предсказатели ваших желаний.
Для начала, автор опрокидывает понятия интерактивности и "используемости" программного обеспечения (разрешите использовать короткое software) и подтрунивает над ними - 'The crudade marches on, with believers rarely questioning the sacred premise - that software must be interactive in the first place. That sofware is  meant to be “used”'. Увлеченные представлениями о "дружественном интерфейсе" многие программисты отождествляют "использование" программ с навигацией по ее глубинам, хотя возможной целью является простой пересчет градусов Фаренгейта в шкалу Цельсия.
Основные причины, почему мы обращаемся к software, такие:
  • учиться
  • создавать
  • общаться
В большинстве случаем мы сидим перед компьютером, читая, наблюдая, изучая, исследуя, приходя в результате к пониманию. Мы трансформируем наши нейроны. Для нас стало обыденностью: найти значение слова; узнать, какую страну бомбили сегодня; как приготовить паэлью; решить, какую музыку слушать, какую фотографию напечатать, что делать вечером, завтра, во вторник в 2:00; найти книгу для мамы, куртку для папы, машину для дочери; найти новую квартиру и кровать для нее, а может и партнера; спросить, как доехать до театра, где поесть перед спектаклем, где получить наличные; вычислить простую сумму и сделать финансовый прогноз, узнать остаток в банке; спросить, почему не заводится машина и как завести ее; проконсультироваться о болезни ребенка. Мы больше не сидим на завалинке и не сомневаемся насчет завтрашнего дождя. Мы спрашиваем компьютер (точнее, software).
Становится ясно, как важна визуализация данных. Хороший графический дизайнер понимает, как разместить информацию на странице так, чтобы читатель мог спросить и ответить на вопросы, сравнивать и делать выводы. Проектирование software имеет дело с разработкой объектов двух типов: картинки и элементы для нажатий, "pictures and things to push". Хотя software - нематериальный продукт, интерфейсы используют метафоры из механики: кнопки нажимаются, слайдеры скользят, окна открываются (MS с 1985 года). Но даже если ваш аватар ест бутерброд, вы можете остаться голодным. 
Важный шаг в визуализации был сделан давно. Ниже дан пример использования (одного из первых) в 1786 году графика для представления роста национального долга Англии.
С тех не прекращаются усилия улучшить представление данных (и сократить долг). Б.Виктор приводит пример повышения визуальной информативности на примере расписания поездов, обычно даваемого таблицей
Графическая версия автора дает представление о периодичности и последовательности движения
Созданный им widget "расписание" для macos выглядит так
А заказать цветы можно используя интерфейс
Назвав пикселы магическими чернилами, Б.Виктор двигает нас дальше - интерфейс и его графика должны быть контекстно-чувствительными. В моей интерпретации это означает следующее: заходишь в систему, а компьютер, зная время года, запросив сводку погоды для города и измерив температуру корпуса, спрашивает тебя: “Озяб?”.
Software способно и будет распознавать контекст вашего запроса и без дополнительных, иногда бесконечных кликов, немедленно предлагать вероятный план. Например, вы получаете сообщение с приглашением отведать пиццы. Это может стать причиной автоматического появления карты с маршрутом до ближайшей пиццерии. Система “выводит”, прогнозирует запросы на информацию исходя из следующих факторов:
  • обстановка (дата, местоположение, погода, создаваемый документ, открываемое письмо),
  • история (последняя оставленная обстановка, как самый примитивный вариант - открытый документ, расписание поезда, страница газеты),
  • взаимодействие. Интерактивность - это плохо, она означает, что предикторы не сработали, и нужно включать “навигацию”, которая часто становится причиной недовольства или расстройства пользователя в поисках цели, потому что “filling a gas tank is done to support the car, not the goal of arriving at a destination”.
Механизм предсказания может сработать не сразу, но он точно сработает, если действия регулярны.  Это очень похоже на предсказание переходов в процессоре. Например, число ошибок в предсказании маршрута на работу и домой (а значит и своевременное и правильное появление на экране расписания транспорта) снижается через пару недель
Сильна аналогия дана автором в определении значимости “Машинного обучения”, без которого невозможна самоадаптация программного обеспечения - “Сегодня, программисту нужно набрать только одно слово из четырех букв для того, чтобы включить в действие в течение десятилетий разработанную файловую систему - ‘open’. “Машинное обучение” не будет распространено до тех пор, пока оно не будет также доступно, как напечатать слово “learn”.
Software, которое становится активным на основании памяти о взаимодействии с пользователем и условиях этого взаимодействия, может [и должно] предусмотрительно предложить потенциально полезную информацию. Вот почему интерактивность, выводящая нас на навигацию, плоха. Тем более плоха, если интерфейс пользователя плох, скажем, кнопка нажимается без видимого эффекта нажатия. Еще радикальнее: “Меню, галочки, бюрократически рожденные тексты меню были изобретены 25 лет назад для мира, который больше не существует”.
Сказанное касается дизайнеров и программистов, которые не должны, как композиторы в далеком прошлом, сочинять с карандашом и бумагой. Правильно - услышать, исполнить сочинение немедленно.
“Будущее будет контекстно-чувствительным. Будущее не будет интерактивным” - заключает автор. А для этого нужно творческое взаимодействие, позволяющее “стоя на плечах гигантов, лучше видеть будущее”. 
Пока же мы топчем друг другу ноги.

Tuesday, February 28, 2012

Броненосец

Предположим вам понадобился контейнер с арифметическими операциями, с математическими и статистическими функциями - не найти из того, что под рукой. Такие, как std vector, framework vector и std valarray хороши в арифметических операциях и в слияниях/разлияниях подвекторов. valarray хорош в поддержке математических функций и обладает высокой производительностью в версии Intel компилятора благодаря использованию IPP. Конечно, можно вспомнить про boost и blitz++, но использовать одну махину или другую поменьше, с необновляемым кодом, для тестирования и получения простой статистики надо иметь значительно больше энтузиазма, чем у меня есть. Хорошо бы иметь библиотеку с выразительностью операций matlab, легко интегрируемую в С/С++ и бесплатную. Для примера, следующую версию вычисления нормы 2 с std вектором выразительной не назовешь, без std проще будет.
Поиски навели на библиотеку Armadilla, предоставляемую в заголовочных файлах с шаблонами, плюс библиотечные файлы blas и lapack, как дань достигнутой теми производительности. Из-за них, оказалось, размещение arma матриц в памяти сделано, как в Фортране. Библиотека обновляется, автор использует ее в своих научных исследованиях, есть пользователи и форум. 
Сразу нашел в ней то, что мне нужно. Нашел даже больше, чем рассчитывал. Оказалось, что автор Conrad Sanderson сделал многое, чтобы Armadilla стала очень похожа на Octave, и он добился этого. Сравниваем пример кода нахождения коэффициентов линейной регрессии.
Octave:

С++ Armadilla
И код, и результат одинаковы (с поправкой на С и реализацию rand)
Обнаружил, что не хватает гистограммы. Написал автору, получил ответ: “а сам напиши”. Написал аналог histc из Octave. Что оказалось непросто, так это встроить функцию в библиотеку. Во время встраивания открылось еще одно достоинство библиотеки. Код с использованием шаблонов написан так, что векторные или матричные вычисления, подобно таким A=B+C+D*E, не создают временных массивов для промежуточных матриц. Достигается это использованием так называемых Glue классов. Они то и усложнили разработку. 
Сравнил производительность вычисления гистограммы с помощью разработанной arma::histc и кода, написанного с std::vector. Последний не сумел написать проще, чем так

Производительность arma версии лучше почти в 2 раза.
Неплохой броненосец у Конрада Сандерсона получился.

Monday, February 20, 2012

Последний президент, знающий Бродского

Думаю, что это видео-интервью под "дождем" может изменить ваше мнение о М.Саакашвили
Прост, интеллигентен, без галстука, в скромной обстановке без позолоты, изменившийся, проявляя "больше терпения, больше выдержки", не одобряющий стратегию нулевого политического риска, понимающий необходимость перспектив роста для граждан и мечтающий о грузинских небоскребах.
За рамками интервью:
Оказывается, Грузия экспортирует электроэнергию в Россию.
В Грузии проведено более 70 экономических реформ. В 2009 году по условиям ведения бизнеса Грузия на 11-ом месте (Россия на 120-ом).
Выступая в университете в Вашингтоне, Саакашвили пошутил над русскими туристами: на вопрос "Occupation" (род занятий) анкеты они отвечают: "Нет, нет, просто туризм".




Thursday, February 09, 2012

Готова ли масса русского крестьянства "Африканского континента" к демократии?


В статье “Недомолотая мука русской истории” вслед за многими настоящими и прошлыми мыслителями любимый мною А.Кончаловский раздумывает над вопросом, готова ли Россия к демократии. Вывод - нет, не готова, и надо запастись “историческим терпением” для того, чтобы пережить, преодолеть наше “варварство”.
А древние греки 2000 лет назад были готовы? Уже (или еще?) в 5 веке до нашей эры в Афинах строго соблюдалась отчетность должностных лиц и не допускалось неоднократное избрание одних и тех же политиков на государственные посты (что не помешало Периклу оставаться у власти более 30 лет, народное собрание 15 раз выбирало его первым стратегом), а любой гражданин мог возбудить иск по графе параномон (жалоба на противозаконие).
Нет, “варварство” надо преодолевать независимо от демократических усилий, и сам А.Кончаловский успешно учит нас культуре. А демократию считать в России наступившей. И вообще, считать отношения с ней подобно членству в ВТО - ты соблюдаешь правила, в ответ тебя признают “равным”. Обыкновенный контракт.
“Худшая форма правления” нужна для того, чтобы избежать революций и потрясений. Хотя и не всем удается, на площадях и футбольных полях. Особенно, если к демократии принуждают. Известны случаи и противодействия этой порочной практике правления, так в 457 г. спартанцы были приглашены в Беотию для низвержения демократии.
Порочна она в частности потому, что “демократия не знает истины, и потому она представляет раскрытие истины решению большинства голосов” - Бердяев. Большинство не бывает моральным, объединяет не добро, а зло, и не за, а против. Все эти крики “Долой” и “На Кремль” цена единства кричащих. Странно, что не выдвинули - “Захвати Кремль”, тогда единство стало бы еще безграничнее.
Демократия не готова для того, чтобы Россия ее приняла. Она нужна нам примерно так же, как ВТО.
Может параллель неуместна, но реакция князя Светослава на предложение Ольги, вернувшейся крещеной из Константинополя в 955 году, принять христианство кажется симпатичной и вполне демократичной - “Могу ли один принять новый закон, чтобы дружина не смеялась надо мной?”

Saturday, January 28, 2012

Автоматическое распределение регистров


Когда пишешь на ассемблере, всегда возникают проблемы с использованием регистров. Регистров всего восемь, а переменных, которые надо в них разместить, значительно больше. Сравни - регистров 8, а инструкции трех-местные. У меня распределение регистров всегда было постоянным источником ошибок и путаницы. Да и код может оказаться неоптимальным. Решил проблему, написав скрипт (ruby), который, найдя выделенные фрагменты кода с абстрактными регистрами, анализирует текст и заменяет переменные на физические регистры. Например, имея текст, в котором используются 22 абстрактных регистра (пишешь, не заботясь, какой физический регистр использовать)
получаешь фрагмент с назначенными реальными регистрами. Все 22 переменные разместились в шести регистрах.
Чтобы уменьшить зависимости, добавил в скрипт опцию “перемешивания” регистров, которая означает простую рекомендацию - не вынимать из стека свободных регистров последний возвращенный в стек регистр. Однако ускорение оказалось не большим: видно, механизм “переименовывания регистров” неплохо работает.
В качестве алгоритма “распределения регистров” (register allocation) использовал простой анализ живучести переменных (liveness analysis), описанный во многих книжках по компиляторам. А.Аппель представил его в своей книге “Modern Compiler Implementation in C” так (никогда не называй сделанное "современным")
def и use являются массивами множеств с переменными, которые определяются в строке n (им присваивается значение) или используются, соответственно. Код алгоритма 10.4 буквально может быть таким
begin txt.each_with_index { |line, n| livein_[n] = Set.new(livein[n]) liveout_[n] = Set.new(liveout[n]) livein[n] = Set.new(ause[n]) tmp = Set.new(liveout[n]-adef[n]) livein[n].merge(tmp) unless tmp.empty? liveout[n] = Set.new asucc[n].each { |s| liveout[n].merge(livein[s]) unless livein[s].empty? } } end until livein==livein_ and liveout==liveout_
Интервалы живучести переменных и присвоение имен физических регистров (номеров) можно представить таким образом.
Слева - исходный код (усеченный текст) с абстрактными регистрами, в середине - интервалы жизни этих регистров по телу функции, справа - присвоенные физические регистры, точнее их номера. Горизонтальный заголовок из цифр по модулю 10 - это номера абстрактных переменных. В имени абстрактной переменной для 128-разрядных регистров используется префикс "x", для 256-разрядных - префикс "y".

Thursday, January 19, 2012

Приснилось


Приснился мне сегодня сон - В.В.Путин опубликовал коды решения на Ruby упражнений, данных в книге “Modern Compiler Implementation in C” А.Аппеля. До утра в полудреме я с бессилием сна пытался найти и понять решение для главы 9. Неужели ВВП это сам написал? Не может быть - простые слова, задушевные фразы о России, приглашение к диалогу, интерес к среднему классу и что (кто) там, за чертой бедности, открытие социальных лифтов и 25 млн рабочих мест (больше чем в 10 раз число подписей, необходимое кандидату в президенты). Фоносемантическая оценка текста: сильный, величественный, холодный, злой.
Следующая глава номер 10 - “Liveness Analysis”, между застоем и революцией.

Tuesday, January 10, 2012

Курс Обучающихся Машин


Закончил курс Machine Learning. Курс содержит видео лекции, контрольные вопросы, упражнения с программированием. Интенсивность - тема в неделю, несколько (около 10ти) видео по 8-15 минут на тему. Продолжительность - около 2-х месяцев с восемью уроками программирования. Рассмотрены следующие темы: линейная регрессия с одной и многими переменными, логистическая регрессия, нейронный сети, алгоритм обучения, Support Vector Machines (SVM), кластеринг, компонентный анализ, детектирование аномалий, рекомендующие системы. Из заявленных тем не было дерева решений и наивного Байесовского классификатора.Читает профессор, директор лаборатории Stanford Artificial Intelligence Lab Andrew Ng, отмеченный в 2008 как один из 35-ти выдающихся инноваторов  в возрасте до 35.  Программирование - на Octave, бесплатный аналог Matlab с умеренной с ним совместимостью. Курс оказался интересным с живыми примерами и программированием. Расскажу про несколько уроков, точнее про два.
1. Распознавание рукописных цифр. Материал, на котором выполнялось обучение выглядит таким образом.
Аналогичный подход применяется в распознавании текстов. В MS Paint мышкой нарисовал несколько цифр и после обучения на базе 5000 образцов, подобных тем, что на рисунке, оценил цифры нарисованные мною. Так “4” (цифра "преувеличена" :)
с помощью следующего кода с оттренированными параметрами all_theta
d4 = imread('4.bmp');
d4d = im2double(imcomplement(d4));
pred = predictOneVsAll(all_theta,reshape(d4d,1,400))
определилась (предсказана моделью - pred) как “4”
Три строки кода выполняют: чтение изображения 20х20 точек, инверсия яркости, превращение в матрицу double значений, использование параметров модели для определения цифры. Входными данными являются точки изображения, развернутые в строку (400 значений яркости). Ясно, что для того, чтобы распознавание заработало в настоящем, полезном приложении, надо потратить значительно больше усилий: найти строку символов в изображении, выделить каждый символ, привести его к размеру обучения, распознать, получить слова, проверить орфографию и семантику.
2. Другой интересный пример: используется база оценок (1..5) фильмов (1682) зрителями (943), взятая здесь, это матрица Y размером 1682x943 со значениями рейтинга от 1 до 5, где 5 - лучшая оценка, а 0 означает, что фильм i зрителем j не оценен, то есть, нет рейтинга. Картинку оценок можно представить так
Слегка “размыл” изображение, иначе яркие точки (высокий рейтинг) были едва видны. Видно, что данные упорядочены, и по фильмам и по зрителям. К исходному массиву “подсоединяется” мой рейтинг нескольких фильмов Y=[my_ratings Y]. Вот этот список.
Затем начинается тренировка/”подгонка” параметров, которыми являются веса для (фильм/зритель) и свойства (романтический, боевик, …), с помощью Octave функции fmincg, “подгоняющей” дифференцируемую много-параметрическую модель с помощью функций стоимости и частных производных.
theta=fmincg(@(t)(cofiCostFunc(t,Ynorm,R,
num_users,num_movies,num_features,lambda)),
initial_parameters,options);
В результате получаем параметры theta, по которым вычисляются модельные рейтинги фильмов от всех зрителей, включая “подсоединенного” зрителя с малым числом просмотренных фильмов - меня. 10 фильмов с максимальным модельным рейтингом  являются рекомендацией для просмотра.
Не уверен, что посмотрю. В качестве побочного результата, определил похожесть своих предпочтений с другими зрителями. Получилось, что не очень похож. Нашлось только четверо, кто оценил 5 фильмов из 14-ти так же, как я.
Думаю, какой следующий курс пройти (“взять”): NLP или Алгоритмы.
Есть и российский сайт, посвященный машинному обучению. Он содержит большое количество материала на русском. В списке прикладных программ анализа данных на сайте есть Matlab и нет Octave, видимо, по недоразумению.

Friday, December 30, 2011

Прохоров учится летать


Прочитал предвыборные тезисы Прохорова. Может быть, к следующей кампании он лучше представит все то, что умеет, понимает и собирается совершить. А в этот раз получилось бездарно. Начиная от приукрашенного сравнения “белого воротничка” с фантомасом и кончая его кандидатской геополитической простотой. Сравнительные образы против Путина - фотографии и тексты, даны на каждом слайде презентации (Прохоров - справа) кроме первого, на котором с помощью множества повторений, как заклинаний, звучит абсурдный Прохоровский возглас: “власть для человека”. По определению власти это невозможно. Природа власти - подчинять и заставлять.
Другие выдающиеся призывы:
  • опираться в политике на “русскую гуманистическую традицию”. Ну да, и на хлебосольство, тогда нашу границу немедленно перейдут.
  • "инвестиции в культуру - фундамент модернизации и экономического развития". Может и согласился бы, если речь шла о культуре возделывания земли.
  • "основной приоритет государства - защита частной собственности". А кто будет государство защищать?
  • “Сколково в Калининград”, вообще выглядит как новогодний тост, и не первый.
  • на оборону столько, сколько на здравоохранение. Также мало?
  • "50% закупок у отечественных производителей". Ха, Прохоров в Уралобуви засунутый в Запорожец.
  • "выборность участковых инспекторов". Глубока демократия. Добавить прозрачность выборов подруг.
Итог: если что-то и “почитать на праздники”, так это “О первоначальном договоре” Юма, а не программку Прохорова.

Thursday, December 22, 2011

Не стало

Мама была трудолюбива, несгибаемой воли, упряма, беспощадна и пряма, с грубоватым юмором. Боролась за жизнь до последнего вздоха. Есть и останется во мне.

Friday, December 02, 2011

Песочный ноутбук


Купил HP ноутбук с i5. На третий день вдруг обнаружил в отладчике опцию показывать ymm регистры. “Да ну, не может быть. Наверное, MS в студии свою готовность демонстрирует” - подумал я. Показалось, что слишком мало времени прошло. Но первый же результат google-поиска i5 2410M подтвердил - Sandy Bridge. Надо проверять. Следующий код
  int cpu[4];
  __cpuid(cpu,1);
  printf("CPU: %sSSE2,%sSSE3,%sSSSE3,%sSSE4,%sSSE42,"
     "%sSSE4a,%sAVX,%sAVXFMA\n",
     cpu[3]&0x04000000?"+":"-",
     cpu[2]&0x00000001?"+":"-",
     cpu[2]&0x00000200?"+":"-",
     cpu[2]&0x00080000?"+":"-",
     cpu[2]&0x00100000?"+":"-",
     cpu[2]&0x00000040?"+":"-", /// :)
     (cpu[2]&0x18000000)==0x18000000?"+":"-",
     (cpu[2]&0x18001000)==0x18001000?"+":"-");
подтвердил, имею AVX
CPU: +SSE2,+SSE3,+SSSE3,+SSE4,+SSE42,-SSE4a,+AVX,-AVXFMA
Супер! 
В действительности этой проверки недостаточно, надо проверять xgetbv, чтобы узнать, поддерживает ли OS AVX, смотри Intel документ 319433-011. Проверил доступность AVX в Ubuntu (которую установил на ноутбуке, как вторую OS) простым “cat /proc/cpuinfo”, - доступны.
Пишем что-нибудь проверить производительность, например axpy Y=Y+a*X. Для начала в 32 битном режиме. Сравниваем производительность AVX кода
@@by8:
  vmulps ymm0, ymm1, REAL4 PTR [esi+ecx*4-32]
  vaddps ymm2, ymm0, REAL4 PTR [eax+ecx*4-32]
  vmovaps REAL4 PTR [eax+ecx*4-32], ymm2
  sub ecx, 8
  jg @@by8
с кодом SSE2, который почти такой же, но двух-местный. Константу размножаем вместо pshufd новой инструкцией vbroadcastss и данные выравниваем не на 16, а на 32 байта. Ускорение есть, хоть и скромное. 
Правильность результата тоже проверена. 
Будем использовать, там, где ускорения можно ждать. Хорош ноутбук!

Tuesday, November 29, 2011

Конец раздвоению


Преодолел свое раздвоение личности. Для меня является фактом: 1. лучшая среда разработки в windows - MS студия; 2. лучший редактор - vim. Вот и мучайся, прыгая от одного к другому, переходя от одной комбинации клавиш (короткий список, длинные последовательности) к другой (длинный список, и все равно неполный). 
Сначала просто переключал приложения. Затем в студии нашел “Open with” (правая клавиша мышки, указывающей на файл) и начал переключаться легко прямо в студии. Для этого добавил “Vim” в “Tools/External tools...”, а в поле аргументов, согласно vim.wikia, вписал “--servername VimualStudio --remote-silent +"call cursor($(CurLine),$(CurCol))" $(ItemFileName)$(ItemExt)”.
Три для назад ситуация изменилась кардинально. Установил ViEmu - эмулятор Vim в редакторе студии и получил почти всю мощь Vim. Не все 100% (на все сто не смогу использовать ни при каких условиях), конечно, но сожаления нет, и улучшение очень значительное. Хотя, кое-что остается за MS, например, Ctrl-Bs для удаления слова назад, вместо Vim-ского Ctrl-W в Insert режиме. Конечно, плагинов нет, и не работают встроенные функции, например, sort. Но, повторюсь, основное работает, и не надо отрывать рук от клавиатуры и тянуться за мышкой и за мелкими клавишами стрелок. Банально - одинаковый инструмент в Windows, Linux и MacOSx. Писать в доке гугла - такая тягомотина с мышкой, что плечо заболевает прямо сейчас.
"Раздвоение не следует путать с шизофренией" - пишет Википедия. 
В Vim по-прежнему переключаюсь на asm файлах, так как в студии на них нет расцветки синтаксиса.
Через 3 дня обнаружил, что базовая операция в ViEmu не работает, как должна. Имею в виду типа ":%s/a/b/gc" - подтверждения на замену нет, все глобально меняется за один раз. Пишу в ViEmu "поддержку", получаю в ответ: "Boris, apologies, confirmation is not implemented (yet). It will be implemented in a future version. So it is just ignored... sorry about that.". Это сколько же нужно версий выпустить, чтобы эмулятор получился. Текущий "симулятор" имеет версию "ViEmu 2.5.14 for VS 2000". Беда с этими SW девелоперами.

Sunday, November 13, 2011

"Это злободневно, как свежая газета"


заметил А.Пушкин, прочитав тома X и XI “Истории государства Российского” Карамзина.
Посмотрел фильм “Борис Годунов” В.Мирзоева и вам советую, если вы неравнодушно читали трагедию Пушкина. Небоскребы Москвы, бронетранспортеры, иглотерапия, тренажерный зал, ноутбуки, кухня с “народом”, глядящим в телевизор  - как попытка перенести действие трагедии в нашу сегодняшнюю жизнь - озлободневить. А действия такие: борьба за трон, ловко организованное избрание, умерщвление, обман, закрытие границ, поиск поддержки за рубежом, придворный расчет, “пятно” на совести, страх без раскаяния. Рациональный (прагматичный) Борис Годунов побежден иррациональным самозванцем, “фантомом”, осуществившим фантастический “замысел отважный”. “... и вор, А молодец” - говорит про того народ. Трагедия в фильме заканчивается словами из рукописи "Да здравствует царь Димитрий Иванович!" вместо ремарки "Народ безмолвствует", которая появилась в печатном издании трагедии. Странно, что белорусы назвали свои митинги протестами “молчания”, а не “безмолвия”. 
Главным артистом, на мой взгляд, оказался Л.Парфенов, превосходно сыгравший роль внимающего пресс-секретаря.
Интересно замечание Пушкина, видимо, обдумывающего тему сочинения "О царе Борисе и о Гришке Отрепьеве": “Чем более читаю Тацита, тем более мирюсь с Тиберием”.

Sunday, November 06, 2011

"Капу проглотил"


Посмотрел бои 4-го (бокс) и 5-го (смешанные стили) ноября. В том числе главные - Лебедева, специалиста по пенсионерам, и Хасикова, сломавшего рекордсмену Гиннеса челюсть. Зрелища потрясные. Мы таких раньше раз в году не видели, а тут каждый день (2 дня) - рэп, вспышки света и тьмы, столики с бутылками, девки, прикрытые только номером раунда, вальяжные негры в шубах, слушающие гимн Советского Союза, и, наконец, безумный диагноз комментаторов - “да он капу проглотил”.
Бахтин с развернутой кистью

Самый классный и перспективный парень (боксер), на мой взгляд, - Исмаил Силлах - техничный, легкий, всепроникающий, тонко чувствующий, с поразительной реакцией.
Бахтин бьет странно, по-моему, шлепки незакрепленной кисти. Не понятно, почему колумбиец его не послал, а 8 раундов из 10-ти притворялся побитым. Лебедев молодец, конечно, но пора ему кого-нибудь помоложе встретить. Похоже, недовольство многих немилосердным добиванием Джонса сказалось, и Лебедев не спешил обрушиться на Тони, так и не добил. Бату Хасиков - удивительный боец, у которого все главное готовится и делается до боя. Необычайная концентрация, решимость, даже не победить, а выполнить то, к чему готов. Хорошо бы весь бой посмотреть, но для этого нужен равный.

Friday, November 04, 2011

Температура цветения


Слишком долго глядел!
К вишневым цветам незаметно
Я прилепился душой.
Облетели... осталась одна
Печаль неизбежной разлуки
Сайгё
Обнаружил интересный подход в получении информации, можно сказать поэтический. Известно, что вишня в Японии цветет в конце марта - апреле - в начале мая, когда температура становится +7 и выше. Дни цветения вишни для японцев являются днями особенными (в США тоже отмечают. Похоже, благодаря японцам). Время Cherry blossom festival японцы и гости Японии проводят в парках, наслаждаясь тихой красотой цветущей природы (ханами - любование цветами). Этому празднику тысячи лет. Столько же лет поэтические натуры с чашкой сакэ воспевают цветение. Многие оставили свои впечатления в дневниках вместе с датами, например,
Tokistune Hiramatsu on April 14, 1644: “In Seiryoden Palace, Kyoto, we enjoyed watching cherry blossoms and took sake provided by the emperor.”
Даты цветения, оставленные аккуратными предками, стали исходными данными для косвенного определения температуры в марте на тысячу лет в прошлое. В статье "Climate Change and Cherry Tree Blossom Festivals in Japan" Richard Primack и Hiroyoshi Higuchi приводят результаты трансляции даты цветения вишни в среднюю температуру в марте в Киото. На графиках: верхний - день (в году) полного цветения, нижний - средняя температура в марте, от года 1000 до 2000-го.


В целом, корреляция явно не видна, за исключением последних 200 лет, для которых видно, что температура возрастает и вишня цветет раньше. 
Не понятно, как вычислялась температура. Не имея числовых данных для графиков, написал автору (Primack) с просьбой выслать 2 таблички, но не получил их, хотя ответил на его вопросы: “кто” и “для чего”. Пришлось оцифровать оба графика в матлабе - на каждой различимой точке жмешь кнопку, получаешь координаты и сохраняешь их, затем шкалируешь на данный диапазон по x и y.
Оцифровали, вычисляем корреляцию, но сначала надо выравнять точки по годам. Для этого создаем последовательность дат (годы, “круглые” значения в отличие от отсканированных) и отображаем на нее (аппроксимируем) точки с днем цветения и точки температуры в марте.
% read scanned data
% the blossom dates in DOY in Kyoto
gd = csvread('graphDay.csv');
% derived T Co in March in Kyoto
gt = csvread('graphTemper.csv');
% a sequence of years to interpolate to
xapr = 1000:5:1990;
gdxapr = interp1(gd(:,1),gd(:,2),xapr');
gtxapr = interp1(gt(:,1),gt(:,2),xapr');
% is there any correlation?
corrcoef(gdxapr,gtxapr)
Получаем коэффициент корреляции (-0.3939), слабая корреляция есть. Минус отражает тот факт, что чем выше температура в марте, тем раньше день цветения в году.
Как же ученые получили нижний график ("Using a complicated equation")? Что за функция, которая транслирует день цветения в среднюю температуру месяца? Можно найти аппроксимирующий полином, но: физической зависимости он не объяснит, и не подтвердит, что отображение правильное. Лучше взять официальные данные о температуре в марте в Киото (имеем, начиная с 1881 года) как калибровочные, и аппроксимировать зависимость между правдивыми данными, то есть, метеоданными и данными о дне цветения из дневников. Затем использовать полученный полином для аппроксимации температурных значений на все тысячелетие.
% read meteo data and interpolate
gt1881 = csvread('kyototemper1881_2000.csv');
gdxapr1881 = interp1q(gd(:,1),gd(:,2),gt1881(:,1));
X = gdxapr1881(1:end-3);
% input data matrix
X = [ones(length(X),1) X X.^2];
% compute polynomial koefficients
theta = inv(X'*X)*X'*gt1881(1:end-3,2);
X = gd(:,2);
X = [ones(length(X),1) X X.^2];
% compute approxomated temperature values
y = X*theta;
Картинки не сильно отличаются. Возможно, авторы применили тот же прием, но с более осмысленной зависимостью по сравнению с параболой. Осталось не ясным.
Теперь проверим опасения глобального потепления. Главный исследователь темы доктор Аоно утверждает, что наблюдаемое им увеличение средней температуры в Киото за последние 170 лет (+3.4С) определяется глобальным потеплением (+0.6С) и урбанизацией региона (+2.8С). 
Проверяем. Действительно, средняя температура за последние 100 лет в Киото значительно возросла.
% plot meteo data and trend
plot(gt1881(:,1),gt1881(:,2),'-b.');
X = gt1881(:,1); X = [ones(length(X),1) X];
% koefficients of the trend line
theta = inv(X'*X)*X'*gt1881(:,2)
hold on;
plot(gt1881(:,1),X*theta,':r');
Интерес к поэзии вечен. Ставьте даты под своими стихами.