Бложе

Про всякое

Квадратичные формы и турецкие лиры

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

На денежке, портрет довольно известного турецкого математика Джахита Арфа и одно из его творений – инвариант Арфа квадратичной формы.

$$ Arf (q) = \sum_{i = 1}^{n} q(a_i)q(b_i) \in \Bbb{Z_2}, $$

Биткоин и охранники

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

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

Подумав немного, я решил, что если криптоистерика докатилась даже до охранников в Топкапи, то однозначно пора все продавать. Что и сделал в тот же день, когда вернулся в гостиницу, выставив заявку на продажу всей крипты которая у меня была в wex’е. В общем, слил все битки по курсу около $17000 и как показала практика, сделал это в очень правильный момент.

mysqldump с учетом UTF-8

Если мы хотим сделать дамп базы MySQL и сохранить весь utf-8 набор символов, включая эмоджи и прочие радости жизни, то использовать такой классический пример будет очень плохой идеей:

mysqldump -u username -p database > db.dump

Так уже лучше, но эта команда сдампит только utf8, но не utf8mb4:

mysqldump -u username -p database -r db.dump

А вот так, будет совсем хорошо:

mysqldump -u username -p database --default-character-set=utf8mb4 --result-file=db.dump

Теперь, базу нужно импортировать на новое место.

Так – плохо:

mysql -u username -p database < db.dump

А вот так – хорошо:

$ mysql -u username -p --default-character-set=utf8mb4 database
mysql> SOURCE db.dump

Добавляем отрисовку формул в движок Эгея

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

Согласно документации, мы можем добавлять произвольные элементы для отрисовки движком при помощи допблоков:

  • header-pre
  • header-post
  • note-pre
  • note-post
  • footer-pre
  • footer-post

Имя блока соответствует позиции, где будет находиться их содержимое. В нашем случае, вполне подойдет блок header-pre, а значит создадим в папке /user/extras (от корня блога) файл header-pre.tmpl.php и поместить в него код для добавления MathJax на сайт:

<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML' async></script>

Документацию по настройке параметра config можно почитать тут. В целом, все готово и можно протестировать на определении предела числовой последовательности, которое так любил спрашивать мой преподаватель матана.

Код:

$$ \lim_{n \to \infty} x_n = a ~ \Leftrightarrow ~ \forall \varepsilon > 0 ~ \exists N (\varepsilon) 
\in \Bbb{N} \colon ~  n \geqslant N ~ \Rightarrow |x_n - a| < \varepsilon $$

Результат:

$$ \lim_{n \to \infty} x_n = a ~ \Leftrightarrow ~ \forall \varepsilon > 0 ~ \exists N (\varepsilon) \in \Bbb{N} \colon ~ n \geqslant N ~ \Rightarrow |x_n – a| < \varepsilon $$

Подготовка изображения к OCR

Бывает, что мне нужно провести несколько экспериментов по распознаванию текста на довольно зашумленных изображениях при помощи Tesseract с одним условием – надо сделать быстро.

Но совсем плохой результат получить тоже не хочется. Поэтому, чтобы улучшить точность распознавания, нужно очистить исходное изображение от шумов и посторонних объектов. Для этого можно либо написать чутка кода, либо использовать утилиту convert из ImageMagick, либо можно взять вот этот скрипт textcleaner, который, по факту, является надстройкой над convert, но простой как три копейки и сильно ускоряет работу. Вся документация подробно изложена на официальной страничке.

Пример удаления бэкграунда, очистки текста, поворота и обрезки изображения:

./textcleaner -g -e stretch -f 30 -o 17 -t 15 -u -s 2 -T -p 20 -c 5 infile.jpg outfile.jpg

Было/стало:

Дальше запускаем сам tesseract (у меня 4ая бета с LSTM моделями):

tesseract outfile.jpg stdout -l eng --oem 1

И получаем уже чистый текст:

Clarification

In the last edition of the “Catholic New World,” an
article on the annual conference hosted by the Re-
spect Life Oftice did not fully reflect the context of
Cardinal George’s remarks.

During an informal question-and-answer session
with the archdiocese’s parish Respect Life Coordi-
nators, the cardinal emphasized that the participa-
tion by any person in the promotion of abortion, in-
cluding through his or her political position, is a
grave matter. While the issue of withholding Com-
munion- from some of these individuals can be
complex, Cardinal George said that when any per-
son presents him or herself to receive the Eucharist,
they “take their salvation into their own hands.” For
a more complete explanation of this matter, refer-
ence the cardinal’s column “Catholic participation
in political life, revisited” (CNW, Oct. 10, 2004)
online at www.catholicnewworld.com/
cnw/issue/2004/cardinal _101004.html .

Качество распознавания получилось вполне достойное.

Есть только один минус: бесплатное использование textcleaner разрешено только в некоммерческих целях. В общем, автор жадина-говядина :) Так что используем только для домашних проектов, либо вполне заслуженно поддерживаем финансово создателя скрипта.

2018   ImageMagick   OCR   Tesseract
Earlier Ctrl + ↓