Monday, October 10, 2016

logrotate notificate python processes + python SIGUSR1 handler

Desites this code will not be used in production, I believe it can give some insight on how to notify file-related processes and how to handle system signals in python.

1. A bit of logrotate config:

+ lastaction
+ echo $* | sed -r 's/\.log/\.log\.1/g' | # convert .log to .log.1 - get current names of rotated files. input is original file names.
+ lsof | awk '$1 ~ /python/ {print $2}' | # get ids of python (or ipython, or python3) processes that use rotated files
+ sort | uniq | # as single process can write to multiple files, we make this list unique.
+ xargs kill -SIGUSR1 # send a signal to processes
+ endscript


2. A function to add python SIGUSR1 handler, it reopens all file handlers:

+import logging
+import signal
+
+
+def sigusr1_react():
+ """
+ Run this function to make your process react on SIGUSR1 signal with
+ reload (close and next open) of FileHandlers. Please, run it in main
+ thread (see https://docs.python.org/2/library/signal.html#module-signal).
+
+ It is a convenience function in case you are obliged to use FileHandler
+ with rotating files. In our case it's scrapy + logrotate.
+ """
+ def reload_filehandlers(signum, frame):
+ handler_list = logging._handlerList
+ file_handlers = [
+ x() for x in handler_list if isinstance(x(), logging.FileHandler)
+ ]
+ for fh in file_handlers:
+ fh.stream.flush()
+ fh.stream.close()
+ fh.stream = None
+ fh.stream = fh._open()
+
+ signal.signal(signal.SIGUSR1, reload_filehandlers)

Thursday, September 22, 2016

Получение именованных проброшенных портов в linux.

Итак, вы пробрасываете порты, как и я. Их у вас толпы, и легко перепутать localhost:15673 и localhost:15674. А это, знаете ли, тестинг и прод, а не хухры-мухры.

Сначала я подумал что можно просто в /etc/hosts добавить. но нет.
Но сегодня вот наткнулся на http://stackoverflow.com/a/10729076

И вот короче какой конфиг у меня:

1. /etc/hosts:
{code}
127.0.0.1 prodrabbit testrabbit
{code}

2. /etc/nginx/sites-enabled/forward.conf:

{code}
server {
  server_name  prodrabbit;
  location / {
    proxy_pass http://127.0.0.1:15673;
  }
}

server {
  server_name  testrabbit;
  location / {
    proxy_pass http://127.0.0.1:15674;
  }
}
{code}

Ну и на всякий случай семпл из супервизора - не руками же поднимать соединение каждый раз:
{code}
[program:rabbitmq-dev]
startsecs=5
user=nik
command=autossh -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -nNT  -L 15674:localhost:15672 rabbittesthost -p 22
{code}

Понятно, что rabbittesthost существует в ~/.ssg/config

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

Sunday, August 24, 2014

PostgreSQL Full-text search video sum-up

I've just finished a video regarding full-text search with Django/PostgreSQL
video link, presentation link

1. General notes.
The core purpose of Postgres FTS is to quickly roll out FTS feature. It's not as fast or as storage-effective as "real" search engines.
The other option here is haystack+whoosh. Actually, if you don't use Postgres, it's better.

there's GIT(hashes) and GIST(B-tree) options to create FT indeces in Postgres.
GIT is 3 times: faster to update, less storge place, less search speed.

2. Django packages.
There are lots of pip packages that extend django ORM to support various Postgres features:
https://pypi.python.org/pypi?%3Aaction=search&term=djorm&submit=search
FTS support is here https://pypi.python.org/pypi/djorm-ext-pgfulltext/0.9.2

3. Fuzzy search
Probably, you should take a look at fuzzystrmatch.sql (http://www.postgresql.org/docs/8.3/static/fuzzystrmatch.html). It gives you soundex, levenstein and Metaphone/Double Metaphone.
But, as trigram is faster and there's a package https://pypi.python.org/pypi/djorm-ext-pgtrgm/0.2, we should probably use that one.

6. Additional data
FTS engines comparison table (in Russian). Unfortunately, there's no such parameter as "easiness of development" there.
djorm-ext-pgfulltext tutorial + explanation (in Russian)

Thursday, February 21, 2013

Django та не не той primary_key

 я тут от що подумав: якщо ми використуємо не id в якості primary_key, а слаг (немає значення, цифровий чи буквовий) - воно має піти легше

ось для тестіпай готовий пул-реквест
https://github.com/toastdriven/django-tastypie/pull/490

ось в стековерфлоу
http://stackoverflow.com/questions/3759006/generating-a-non-sequential-id-pk-for-a-django-mode

https://github.com/dcramer/django-uuidfield

Sunday, November 11, 2012

postgresql is really a pain-in-the-ass

после того как установил 9.0 версию - геморрой с настройками.
psql от простого юзера - не пошел. так что пришлось магичить. ну хоть тут немного помогло (правда у меня - postgres админ по умолчанию). ну да ладно - вот помогшая мне ссылка:
features.techworld.com/applications/3301322/learn-the-basics-of-postgresql/

GeoDjango

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

но это все лирика.
фактически - прохожу вот это. Потому что там описано как постгис устанавливать в федоре.
А так как на sqlite как-то мануалов нету (зато есть гуи) - будем постгисить.

Monday, September 10, 2012

Monday, July 30, 2012

нашел в дополнение к Дневнику поездки в Йокогаму за покупками
Ai-Ren. Пока что  читаю, все та же мирная неторопливая жизнь на фоне умирающего мира. Правда, тут немного печальнее в связи с неизлечимой болезнью главгероев

Tuesday, July 10, 2012

По приезду из Львова желательно просмотреть сайтец css-tricks.com
Надобно же научаться.

Monday, July 9, 2012

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

Удаляю с жесткого диска, поэтому нужно как-то ы памяти оставить.
1. Kannagi - повесть про цундере-богиню. Прикольная прическа главной героини.
2. PanteES. Офигенная истори о жизни сборщиков космомусора, переростающая в глобальные вопросы любви, долга и пути в жизни. Под конец растрогало до глубины души.
3. Moyashimon - ожидаешь истории из жизни грибов, наблюдаешь трапов, лесби и прочий разгул. Угарная штука.
4. Bakemonogatari - ояш-бывшийвампир, вокруг мистика. Но это фигня сравнительно с псилоцибиновым видеорядом и торкнутыми героинями гарема вокруг него
5. Nisemonogatari - как п.4, но эпизоды затянуты, все предсказуемо, внезапностей каждые 2 серии не наблюдается. Труба пониже, дым пожиже.

Sunday, June 24, 2012

Simple Debian WiFi

 For Edimax EW-7718Un at Debian 6:
1. #gedit /etc/modprobe.d/blacklist.conf
blacklist rt2800usb
blacklist rt2800lib
blacklist rt2x00usb
2. aptitude install firmware-ralink
3. reboot\PROFIT

If something happens, try "rmmod rt2800sta" and "modprobe rt2800sta" sequentially.
It worked for me.

Thursday, June 14, 2012

пути улучшения flask

1. воспользоваться Mako как темплейтинговым фреймворком
2. use "it's dangerous" as session stuff

Saturday, May 26, 2012

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

Я гуглил сие зело старанно.
Варианты:
1. YouTube и их onStateChange. Как  употреблять - непонятно.Хотя тут и тут вроде бы есть какие-то описания.
и как обычно stackoverflow
http://blog.jcoglan.com/2008/05/22/dispatching-youtube-api-events-to-individual-javascript-objects/ 
2.html5 видео прямой ссылкой
  2.1 videojs
ссылка раз, ссылка на апи (там где Events)
может, что-то типа
mediaPlayer.addListener("pause", function(){ ... });
  2.3 Или можно сваять свой собственный хтмл5 видеоплеер на жаваскрипте (точнее, интерфейс к действиям вокруг проигрыания видео)

а вот отсюда я узнал что есть такой тег в видео как onended. Что и использовал для хтмл5




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

Monday, May 14, 2012

переходить на 3й питон, думается мне, модно и полезно.
http://python3porting.com/improving.html

Sunday, May 13, 2012

недавно почитал я Санкарею, где из зомбей сделали кавайняaшечку (сравниваем с The walking Dead). Но это еще не так вынесло мне мозг как Nozoki Ana (тоже есть сиськи): тут из триллера с шантажом и пипингом сделали РОМАНТИКУ. Сидишь, читаешь 9 томов на английском и реально проникаешься. Хотя, возможно, мне просто близок главный герой, восклицающий "Нет сексу без чувств!".

Sunday, May 6, 2012

latex\chemistry

hmm.. liked it)
http://www.mychemistry.eu/mychemistry/

Билеты

Стоимость перелета Берлин-Мюнхен и в обратку - от 80 евро со сборами (понятно, можно найти и дешевле, я не очень напрягался)
Стоимость перелета Донецк-Киев и обратно тогда же - от 150 евро.
Все ощущают насколько беднее люди на Украине?

Sunday, April 29, 2012

Запуск на заднем плане

Узнал что есть такие вещи как thread\threading (не стоит использовать в cpu-жадных моментах из-за GIL). Тут по-русски (в плане язык, а не пояснение)

Использовал я таки multiprocessing
Ведение. Тут глубже

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


Thursday, April 26, 2012

продолжаем покупать бантики

Все еще кашляем-с, но теперь вроде бы меньше. Зато на альвеолах (или как там называется место за верхними единичками) припухлость расширилась (появилась вчера с утра) за ночь. Теперь аналог есть за левой двойкой. И вроде бы там еще и язвочки. ЗАШИБИСЬ!