Analitycs

вторник, 14 февраля 2012 г.

Cicero Valentine Card

Единственная валентика, которая понравилась ;-)

Sanguine is red
Dead lips are blue
The last victim suffers
And so will you

И да, я басурманских праздников не отмечаю - кроме Св. Патрика ;-)

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

Отстрелялись с серией Tsukasa Bullet

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

суббота, 11 февраля 2012 г.

Как проверить string ли переменная в Python? - isinstance(val, basestring)

Когда нужно проверить - строка ли переменная в Python - есть небольшой подводный камень, о котором иногда забывают...

Все ли помнят что строки в питоне разные? (например, str и  unicode), так что для общей проверки нужно использовать isinstance(val, basestring):

 Например

$ python
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> isinstance('abcd', str)
True
>>> isinstance('abcd', basestring)
True
>>> isinstance(u'abcd', str)
False
>>> isinstance(u'abcd', basestring)
True

пятница, 10 февраля 2012 г.

Как запускать периодические задачи на Tornado? PeriodicCallback!

Продолжая тему периодических задач в Twisted, в Tornado это делается немного по другому - с помощью специального tornado.ioloop.PeriodicCallback.

Примерчик - если кому пригодится

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tornado.web
import tornado.httpserver
import tornado.ioloop

PERIOD = 30 # в минутах

class MyApplication(tornado.web.Application):

  def period_run(self):
    # чего-то тут делаем
    pass

...

app = MyApplication(handlers=urls, **settings)

http_server = tornado.httpserver.HTTPServer(app, xheaders=True)
 
loop = tornado.ioloop.IOLoop.instance()
period_cbk = tornado.ioloop.PeriodicCallback(app.period_run, 1000*60*PERIOD, loop)

period_cbk.start()

loop.start()

вторник, 7 февраля 2012 г.

Как сделать hard-reset на LG Optimus Black?

Шаманство с зажатием Volume Down + Power + Home при включении не прокатило, может граната у меня не той системы?

В итоге - hard-reset через коды

dial 3845#*970#

Разумеется - все данные похерятся.


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

Сервер боевой или production? - или лингвистические особенности

Забавный лингвистический факт.

Сервера, на которых крутятся сайты/сервисы для клиентов:

  • в английском языке они всегда называются production server - PRODUCTION, то есть производственные. 
  • в русском же языке сплошь и рядом - БОЕВЫЕ сервера. То есть - те, на которые идешь в бой, соответсвенно - либо победишь, либо проиграешь.

Ох, не спроста имеется эта разница в национальных названиях... ох не спроста ;-) ;-)

пятница, 3 февраля 2012 г.

Как перезапустить демонизированный процесс в Supervisord?

Если в supervisord запущено несколько процессов и один из них отвалился, не нужно перезапускать демон целиком - есть консольная утилитка supervisorctl.

# supervisorctl
api-test-data                    RUNNING    pid 22443, uptime 1 day, 16:52:01
api-test-empty                   FATAL      Exited too quickly (process log may have details)
auth-service                     RUNNING    pid 22444, uptime 1 day, 16:52:01

Ага, вот процесс-виновник - перезапускаем халявщика

supervisor> start api-test-empty
api-test-empty: started

supervisor> status
api-test-data                    RUNNING    pid 22443, uptime 1 day, 16:52:29
api-test-empty                   RUNNING    pid 27360, uptime 0:00:13
auth-service                     RUNNING    pid 22444, uptime 1 day, 16:52:29
supervisor> 

Все ОК - "13 секунд, полёт нормальный. Хьюстон, у нас НЕТ проблемы" (с)