Category: литература

nyaload

Все течет, все меняется

Тонкая ошибка в такой схеме базы данных про книги и их авторов:


таблица 1: id книжки (ключ) | список id авторов книги | название книжки

таблица 2: id автора (ключ) | имя автора

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

--------------------------------------------------------------
Никогда-никогда-никогда-никогда не буду больше использовать доставку EMS россии. Единственное что там лучше чем Почта России - это хорошая поддержка по телефону.

В остальном - тоже самое, заполнять паспортные данные и свой адрес при вручении посылки, а чуть что-то нестандартное с посылкой - необходимо ехать в офис, который сильно дальше чем ближайшее отделение обычной почты. Если в 8 утра не ответил на единственный звонок от курьера - считается, что "вручить не удалось"

--------------------------------------------------------------

А ещё я почти научился фотореалистичным срисовкам (на фото сверху IRL натюрморт, на экране снизу - срисованное):
Collapse )
nyaload

π++

в С++ нет числа π в стандартной библиотеке. M_PI/_USE_MATH_DEFINES зачем-то сломали в g++ при использовании -std=c++11, а взамен ничего не предложили.

http://stackoverflow.com/questions/1727881/how-to-use-the-pi-constant-in-c

В результате проще в каждом cpp файле копипастить строчку «const double pi = 3.14159265358979323846;» (или «constexpr auto pi = 3.14159265358979323846» в c++11, или acos(-1) вместо константы).

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

(no subject)

Скрипт youtube-dl скачивания видео с ютуба (youtube-dl-2015.08.23.tar.gz) - занимает несколько мегабайт питоньего кода. Одноминутный поверхостный вгзляд показал, что это в основном рукописный осмысленный код, а не кодогенерация. Из которых около мегабайта - относится именно к ютубу (и ещё пара мегабайт - библиотека для парсинга других видео-хостингов).

Мегабайты кода на питоне - это как-то овер-дохрена, это несколько человеколет. Ради скачивания видероликов (с разнообразными опциями, типа выбора языка субтитров, качества видео, и вызовом тулзов пост-процессинга видео для пережатия в другие форматы).
Среди файликов - ./jsinterp.py, на 12 килобайт (парсящий регулярками и исполняющий маленькое подмножество javascript).
nyaload

binary search

В книге "жемчужины программирования" сообщается, что невозможно написать binary search с первого раза.

На самом деле его невозможно написать с первого раза, если не осознаешь что такое инвариант цикла. Если осознаёшь - то скорее всего запросто напишешь (я вот уже в третий раз за год написал).

Если не осознаёшь инвариант цикла, то с большой вероятностью будет одна из ошибок:

* mid = (lo+hi)/2 или hi/2+lo/2 ? (и нет, дело не в overflow, эти формулы просто разные (1+3)/2 != 1/2 + 3/2 ).Collapse )

Как писать двоичный поиск чтобы он не бажил:
* Выбрать инвариант "если искомый элемент существует, то он в [lo, hi)", изначально выбрать lo,hi = 0, N.
* mid = lo+(hi-lo)/2 (при этом для кода верно утверждение "промежуток длиннее 1 всегда укоротится").
* Если ищем первый среди равных - то сравнение выглядит как key<=array[mid-1], если последний - key<array[mid]
* в зависимости от сравнения присваиваем mid в lo или hi (в любом случае, не mid-1).



Двоичный поиск для равномерно распределённых ключей (хешей) ускоряется простым хаком "для каждого из 65536 двубайтовых префиксов запомнить, где он начинается", это убирает 16 начальных итераций.Collapse )
nyaload

Температура возгорания бумаги - 230°C (451° по Фаренгейту)

Сейчас я вам представлю доказательства того, что температура самовоспламенения бумаги - 230 градусов (или 451° по Фаренгейту), плюс-минус 10°.

ссылка 1) Информация с английской вики: http://en.wikipedia.org/wiki/Autoignition_temperature#cite_note-8
Скриншот: http://dobrokot.ru/pics/i2014-07-08__01-52-26_27kb.png

ссылка 2) А. Я. Корольченко, Д. А. Корольченко Пожаровзрывоопасность веществ и материалов и средства их тушения
Книга - http://dwg.ru/dnl/9002 , скриншот нужной страницы http://dobrokot.ru/pics/i2014-07-08__01-51-02_133kb.png

ссылка 3)
http://www.tcforensic.com.au/docs/article10.html#2.1 — Австралийский журнал «Firepoint». Physical constants for investigators, см. "paper"

Поверили? Справочники и английская вики - надёжный источник? На название романа я не ссылаюсь, это художественная литература. А вот справочники и википедия врать не должны.

Update: у меня духовка греет только до 250°C (правда, не знаю как это проверить). У кого-нибудь есть, которая греет сильней чем 250, но заведомо меньше 400?
nyaload

fuzzy search grep своими руками

Если нужно провести неточный поиск слова по большому файлу (напр. по дампу википедии), то самое простое - это сгенерить регулярное выражение со всеми нужными вариантами опечаток, и сунуть в хорошую библиотеку регулярных выражений ( стандартный grep - OK, PCRE/python.re - NOT OK ).

Например, слово WORD превращается в регулярку:
.ORD|ORD|W.RD|WRD|W.ORD|WO.D|WOD|WO.RD|WOR.|WOR|WOR.D

Если нужен поиск по UTF-8 файлу - то можно ускорить поиск, используя вместо точки и UTF8-локали - "[^\x80-\xbf][\x80-\xbf]*" и C-локаль.

Если нужен case-insensitive поиск - то при генерации регулярки вместо СЛОВО писать (С|с)(Л|л)(О|о)(В|в)(О|о). И вы сами определяете, что вы хотите - [iI] или [Iiı], ẞ или (ß|ẞ|SS|S-S|ss|SSS|SZ), ё или (е|ё).

Пример генератора, который генерирует регулярку для всех вариантов на расстоянии 1 по Левенштейну: https://gist.github.com/dobrokot/6150988
nyaload

hindsight bias

Кажется, "hindsight bias" не переводится на русский язык каким-либо привычным образом. Есть поговорка "крепок задним умом", но нет словосочетания, которое можно использовать как понятие-существительное. Есть "ретроспективное искажение", но кажется это выдумка википедии, использовать этот термин из психиатрии как перевод заблуждения "это же было очевидно"/"ну понятно, почему оно так случилось"/"я бы заранее мог сказать, что будет так"
nyaload

Документация визуальных библиотек для визуалов

У matplotlib есть документация, за которую я ему всё прощаю. Она помещается на одной веб-странице, и её можно просмотреть за полминуты. Вот она - http://matplotlib.org/gallery.html

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

binomial distribution simulation С++ source code

Сложно найти код биномиального распределения. То находится в интернете - это подсчет n! / k!(n-k)!, либо симуляция через rand(0,1)+rand(0,1)+rand(0,1)+rand(0,1)+rand(0,1)+rand(0,1). Иногда встречаются ответы на форумах, что можно заменить нормальным распределением, но для маленьких вероятностей и на хвостах это не работает.

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

binomial distribution simulation С++ source code: source code of numpy ( http://sourceforge.net/projects/numpy/files/NumPy/1.6.0/numpy-1.6.0.tar.gz ), file numpy-1.6.0/numpy/random/mtrand/distributions.c