пятница, 30 декабря 2011 г.

Подходит к концу очередной год. Это был тяжелый год

В конце мая я расстался со своей Любой. Разрыв отношений очень серьёзно повлиял на меня; до середины октября я не мог полноценно воспринимать окружающий мир. К сожалению я не помню, каким я видел мир раньше; кажется сейчас я вижу мир другим.

В течение этого года многие мои из моих родных сильно заболели.

В стране 4 декабря состоялись выборы в Государственную думу. Результаты этих выборов оказались спорными. И многие граждане, в том числе и я, считаем что они были фальсифицированы. Год заканчивается многотысячными митингами.

В этом году я почти не был дома.


Нафиг этот пессимизм. Следующий год будет лучше!

суббота, 29 октября 2011 г.

Заметки про emacs

Нашел для себя механизм, как в консольном emacs назначить действие на escape последовательность. Оказалось, что для этого достаточно добавить в настройки строчку вида:

(global-set-key (kbd "escape-sequence") 'do-something)

Чтобы узнать escape-sequence какого-либо сочетания клавишь, можно использовать команду quoted-insert, или 'C-q some-key'. Например, у меня получилось:

(global-set-key (kbd "^[[3;5~") 'backward-kill-word)
(global-set-key (kbd "^[[9;3~") 'kill-word)

пятница, 28 октября 2011 г.

Наконец-то купил себе компьютер

Больше года пользовался машинками которые выдавали на работе: сначала это была fujitsu siemens, потом macbook pro. И вот наконец появилась своя -- macbook air -- легкая, с хорошим временем автономной работы и достаточно производительная. Не совсем понимаю, почему apple не оставила у этой модели ethernet порт. Чтож, похоже дома я полностью перешел на wifi.

Рад, что позволил себе этот подарок. Видимо нужно иногда так делать.

вторник, 27 сентября 2011 г.

How to design a good API and why it matters (collection of maxims)

  • Good programs are modular, and intermodular boundaries define APIs.
  • Good APIs are easy to use and hard to misuse.
  • Every API is a little language. The readable code is an indication of the good API.
  • The fundamental rule of API design is that when you in doubt about something, leave it out. You can always add things later, but you can't take them away.
  • Keep in mind the use-cases against your API while you design it.
  • Show your design to as many people as you can, and take their feedback seriously.
  • Documentation matters. No matter how good an API, it won't get used without good documentation. Document every exported API element: every class, method, field, and parameter.
  • Subclass only if you can say with a straight face that every instance of the subclass is an instance of the superclass. Exposed classes should never subclass just to reuse implementation code.
  • Design and document for inheritance or else prohibit it. This documentation takes the form of self-use patterns: how methods in a class use one another. Without it, safe subclassing is impossible.
  • Immutable objects are simple, thread-safe, and freely sharable.
  • Every method should do the least surprising thing it could, given its name. The same named methods should do the same things.
  • If something goes wrong, the API must inform about that. Compile-time is best.
  • Don't make the client do anything the API could do.

  • When designing an API, first gather requirements (with a healthy degree of skepticism). People often provide solutions; it's your job to ferret out the underlying problems and find the best solutions.

воскресенье, 25 сентября 2011 г.

Задача про монеты

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

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

  • 3 монеты → 2 взвешивания
  • 4 монеты → 3 взвешивания
  • 13 монет → 4 взвешивания
  • 40 → 5
  • 121 → 6

Напрашивается естественная закономерность:

число взвешиваний = Ceiling[Log[3, 2×число монет + 2]].


А в прошлый раз мне эта задача не поддалась.

суббота, 10 сентября 2011 г.

Окончание чётной страницы

Человек, которого я любил, ушёл. И невозможно исправить то, что случилось.

вторник, 9 августа 2011 г.

Крути педали 2

Сегодня ездил на работу на велосипеде. Дорога в одну сторону заняла приблизительно 1 час 40 минут. Год назад, когда я гостил в поселке Калистово у дяди, на дорогу до работы уходило столько же времени; но тогда я ездил на электричке.

суббота, 6 августа 2011 г.

Новый пеший маршрут

Сегодня проложил ещё один пеший маршрут: скалодром Скала Сити — Киевский вокзал. Таким образом в графе пешей доступности замкнулись две компоненты связности.

вторник, 2 августа 2011 г.

Дерево фенвика

(просто для разминки)
template <typename T = int>
class Summator {

воскресенье, 31 июля 2011 г.

Что я хотел бы изучить

Английский язык

Языки программирования:
  • scheme (в качестве простого встраиваемого языка)
  • scala
  • ruby

Библиотеки для C++:
  • boost.polygon

MapReduce:
  • hadoop

Собственные разработки:
  • libi2geo

Крути педали (штрих)

Сегодня проехал на велосипеде маршрут от дома до банка и обратно, это примерно 20 километров. Дорога заняла 2 час 10 минут. На общественном транспорте получилось бы минимум 1 час 20 минут.

Коллективная работа над задачами

Осознал, чего мне так не хватало в университетских курсах. Будучи студентом, я считал, что коллективная работа над задачами — это мошенничество, и потому старался обходиться без неё. Сейчас такая строгая моральная установка мне представляется неправильной: коллективная работа имеет преимущества, и нужно учиться ими пользоваться.

MIT 6.001
Policy on Collaborative Work

Most people learn more effectively when they study in small groups and cooperate in various other ways on homework. This can be particularly true in programming assignments, where working with a partner often helps to avoid careless errors. We are very much in favor of this kind of cooperation, so long as all participants actively involve themselves in all aspects of the work — not just split up the assignment and each do only a fraction.

суббота, 30 июля 2011 г.

Крути педали

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

Для уточнения маршрута в дороге использовал iPad, оказалось вполне удобно.

вторник, 26 июля 2011 г.

Papers from Philosophical Transactions of the Royal Society, from JSTOR

A bit of magic: 577d58aa66beaceb71518ec417ab3764965024a9

суббота, 23 июля 2011 г.

UPD: Приближённое вычисление функции arctg(x)

Погрешность следующей формулы на интервале [-1, 1] не превосходит .0049- радиана (источник):

Если нужна формула для случая (-∞, -1]⋃[1, +∞), то можно воспользоваться следующим свойством:

(Исходная статья в этом блоге)

вторник, 19 июля 2011 г.

Google Technology User Group - Перезагрузка

Сегодня вечером посетил встречу московской Google Technology User Group. Общее впечатление положительное: возникло чувство, что попал в группу единомышленников. Хочется наводить контакты с таким сообществом.

Основное сообщение, озвученное на встрече: GTUG -- это сообщество людей, которое занимается разработкой приложений с использование технологий Google. Кроме того:
  • Главный принцип GTUG: # Узнай у лучшего
  • Главный метод: # Волшебный пендель
И вообще, GTUG бывают разными.

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

Во время перерыва можно было:
  • поиграть в теннис;
  • поговорить про технологии для 3d-печати (с наглядными примерами);
  • поиграться с ХромБуком;

В одной из групп прозвучала мысль, что сейчас становятся популярными контейнеры с серверами:

понедельник, 18 июля 2011 г.

Национальные особенности программистов

(Просто, чтобы не потерялось)

Любой русский программист, после пары минут чтения кода, обязательно вскочит и произнесет, обращаясь к себе: переписать это все нафиг. Потом в нем шевельнется сомнение в том, сколько времени это займет, и остаток дня русский программист потратит на то, что будет доказывать самому себе, что это только кажется, что переписать это много работы. А если взяться и посидеть немного, то все получится. Зато код будет красивый и правильный. На следующее утро русский программист свеж, доволен собой и без единой запинки докладывает начальству, что переписать этот кусок займет один день, не больше. Да, не больше. Ну, в крайнем случае, два, если учесть все риски. В итоге начальство даст ему неделю и через полгода процесс будет успешно завершен. До той поры, пока этот код не увидит другой русский программист.

А в это время, в соседних четырех кубиках, будет ни на секунду не утихать работа китайских программистов, непостижимым образом умудряющихся прийти раньше русского программиста, уйти позже, и при этом сделать примерно втрое меньше. Эта четверка давно не пишет никакого кода, а только поддерживает код, написанный в свое время индусом, и дважды переписанный двумя разными русскими. В этом коде не просто живут баги. Здесь их гнездо. Это гнездо постоянно воспроизводит себя при помощи любимой китайской технологии реиспользования кода - copy/paste. Отсюда баги расползаются в разные стороны посредством статических переменных и переменных, переданных по ссылке (поскольку, китайский программист не может смириться с неудобствами вызванными тем, что он не может изменить значение внешней переменной переданной в его функцию модулями, которые переписывает русский программист). Вспоминая об этой функции русский программист, как правило, на время теряет дар английской речи, и переходит к какой-то помеси русского и китайского. Он давно мечтает переписать весь кусок, над которым работают китайцы, но у него нет времени.

На китайцах висят серьезные баги, о которых знает начальство и постоянно их торопит. Китайцы торопливо перевешивают баги друг на друга, поскольку знают, что попытки их починить приведут к появлению новых, еще худших. И в этом они правы. Разобраться в том, в каком порядке меняются статические переменные, и как приобретают свои значения, способен только один человек на фирме - индус. Но он пребывает в медитации. Поэтому, когда всю четверку уволят во время сокращения... А кого еще увольнять? Русский - еще не переписал свой кусок, а индус - главная ценность фирмы - он редко обращает внимание на проект, но когда обращает, все понимают, что так как он, архитектуру никто не знает. Так вот, когда китайцев увольняют, у их кода возможны две основные судьбы. Первая - он попадет к русским, и его перепишут. Вторая - он попадет к местному, канадскому программисту.

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

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

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

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

(Найдено здесь)

пятница, 15 июля 2011 г.

Квадратичная форма

(на мотив песни ``Беловежская пуща'', слова НЕ народные, авторы: М.В.Волков и А.А.Махнев)
Есть у тела объем, у отрезка длина
Мера есть у угла, есть у вектора норма
Много разных вещей, а причина одна
Квадратичная форма, квадратичная форма.

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

Берегите ее, завещал нам Евклид
И теперь мы должны в духе школьной реформы
Каждый день приводить в канонический вид
Квадратичные формы, квадратичные формы.

Сосчитав градиент в двусторонней игре
В седловидную точку стремимся проворно
Зная матрицы спектр, восстановим легко
Квадратичную форму, квадратичную форму.

Бодро взяв интеграл, мы построим ряды
И под радостный звук пионерского горна
Через тензорный лес позовет нас она
Квадратичная форма, квадратичная форма.
(Найдено здесь)

Играюсь в google.plus, пока интересно

вторник, 28 июня 2011 г.

Скоро отпуск

На следующей неделе у меня первый отпуск за последние 5 лет, который я не планирую тратить на экзамены или конференции. Тех кто ждёт меня дома, прошу подождать ещё немного. Скоро уже приеду.

понедельник, 23 мая 2011 г.

Хочешь чтобы дальше...

От создателя мегахита "Квадратичная форма" (кто знает - тот знает):
Хочешь, чтоб дальше горели леса?
Чтоб дорожала опять колбаса?
Чтобы поборы росли каждый год?
Тогда голосуй за путинский фронт!

Хочешь по телику слушать фигню?
Хочешь, чтоб деньги сливались в Чечню?
Хочешь, чтоб быдлом считали народ?
Тогда голосуй за путинский фронт!

Хочешь, чтоб вовочка дальше рулил?
Хочешь, чтоб димочка дальше юлил,
А остальным затыкали бы рот?
Тогда голосуй за путинский фронт!

(Найдено у Леонида Волкова)

понедельник, 28 февраля 2011 г.

Книги которые мне хочется прочитать

  • Dan Gusfield: Algorithms on Strings, Trees and Sequences: Computer Science and Computational Biology
  • Y. Manolopoulos, A. Nanopoulos, A. N. Papadopoulos, Y. Theodoridis: R-trees: Theory and Applications [33DD0BE367951F081744F002515BA7A1E5EE2581]
  • Mark de Berg, M. van Krefeld, M. Overmars, O. Schwarzkopf: Computational Geometry: Algorithms and Applications, Second Edition [07948527DE452663717D0714AFC39E07BE3E8F01]
  • Trevor Hastie, Robert Tibshirani, Jerome Friedman: The Elements of Statistical Learning: Data Mining, Inference, and Prediction
  • Jacob E. Goodman, Joseph O'Rourke: Handbook of Discrete and Computational Geometry, 2nd edition