Собрались как-то бессмертные мастера на полянке поспорить
И давай своих питонов мучать, сотрясая древо мира
Мощными раскатами оргазмов от корней до кончиков листвы
И каждый новый оргазм был сильнее прежнего
Только Просроченный Пророк не дрочил
И взирали на него как на лоха, кто с презрением, а кто и с жалостью
И когда все вымотавшись лежали без сил, растворяясь в облаках
Пророк достал своего замученного любимца
И дёрнув пару раз, обкончал их лица
02.04.10
Про бессмертных мастеров
21.03.10
Понравилось
Выпрыгнуть из подносного поезда и умчаться в ноздрю, рассекая воздух темноты.
17.03.10
11.03.10
[fixed] Унитаз
Эта заметка заинтересует всех несчастных, страдающих от дерьма на жопе.
В последние годы распространение получили непривычные для советских жоп унитазы. Под анусом в них располагается дырка с водой, а вовсе не привычная ванночка для говна. Результат печален. Падая, дерьмо взрывает водную гладь фонтанами брызг. Многие из которых несут в себе частицы этого или упавшего раньше говна. И часть из них благополучно доносят это самое говно назад к породившей его жопе.
Экономические причины появления таких унитазов очевидны. Унитазы со ступенькой в нужном месте на рынке тоже есть. И стоят, конечно, дороже. Либо плати, либо йожся на унитазе, выгибая жопу в немыслимых асанах, лишь бы попасть на заветную ступеньку. Либо твоя жопа регулярно будет в дерьме. Я бы с радостью заплатил. Но это не решает проблемы. Всё равно натыкаешься на эти унитазы в путешествиях или в гостях.
Так вот, решение всё же есть. Перед тем как сесть срать, накрываем поверхность воды туалетной бумажкой. Брызг не будет.
23.01.10
Python debug-progressbar
Поддержу тему прогресс-баров начатую на Хабре. Описанный там бар можно назвать "продакшн-баром". В свою очередь, поделюсь давно и удачно написанным "дебаг-баром". Основные его отличия в:
- возможности вывода дополнительной дебаг-инфы
- выводе времени обработки каждого шага
- поддержке стандартного питоньего logging-а
Используется он так:
from random import randint
from debugbar import cnt
data = range(10) # некоторые данные для обработки
cnt = Cnt(len(data), 2) # указываем размер данных и шаг счётчика
for d in data:
cnt.put('дополнительная инфа %s' % d) # выводим бар
time.sleep(randint(1, 3))
В результате получится что-то типа:
2 / 10 | 1.00 s. | дополнительная инфа 1
4 / 10 | 5.00 s. | дополнительная инфа 3
6 / 10 | 4.00 s. | дополнительная инфа 5
8 / 10 | 3.00 s. | дополнительная инфа 7
10 / 10 | 4.00 s. | дополнительная инфа 9
Вариант с использованием логгинга:
import logging
from random import randint
from debugbar import cnt
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG,
format='%(levelname)-8s %(message)s')
data = range(10) # некоторые данные для обработки
cnt = Cnt(len(data), 2)
for d in data:
cnt.put('дополнительная инфа %s' % d, log.info)
time.sleep(randint(1, 3))
Результат:
INFO 2 / 10 | 2.00 s. | дополнительная инфа 1
INFO 4 / 10 | 4.00 s. | дополнительная инфа 3
INFO 6 / 10 | 4.00 s. | дополнительная инфа 5
INFO 8 / 10 | 3.00 s. | дополнительная инфа 7
INFO 10 / 10 | 2.00 s. | дополнительная инфа 9
Ну и код самого модуля debugbar.py:
# -*- coding: utf-8 -*-
import sys
import time
from datetime import datetime, timedelta
class T:
'''Таймер'''
def __init__(self):
self.start = time.time()
def __str__(self):
sec = int(time.time() - self.start)
return '%2.2f s.' % sec if sec < 60 else str(timedelta(seconds=sec))
class Cnt:
'''Счётчик'''
timer_tpl = ' | %8s'
def __init__(self, limit, step=None, start=1, timer=True):
self.limit = limit
self.step = step if step else int(limit / 100) or 1
self.cnt = start
self.timer = timer
self.cnt_tpl = '%%%(cnt_len)si / %%%(cnt_len)si' % {
'cnt_len' : len(str(limit))}
if timer:
self.tm = T()
def put(self, msg='', log=None):
if not self.cnt % self.step or self.cnt == self.limit:
m = self.cnt_tpl % (self.cnt, self.limit)
if self.timer:
m += self.timer_tpl % self.tm
self.tm = T()
if msg:
m += ' | %s' % msg
if log:
log(m)
else:
print m
sys.stdout.flush()
if self.cnt < self.limit:
self.cnt += 1
21.01.10
Говорящий python
Разговорить змия по русски оказалось совсем несложно.
1. Ставим festival:
sudo aptitude install festival festvox-ru
2. Учим его болтать со включенной музыкой. Добавляем в конфиг ~/.festivalrc
;use ALSA
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
3. Ну и, собственно, модуль pystival состоящий из единственной функции:
import subprocess
def pysti(text):
p = subprocess.Popen(
['festival', "--tts", "--language", "russian"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, close_fds=True)
stdout, stderr = p.communicate(text.encode('utf-8'))
if __name__ == "__main__":
# тестим
pysti(u'Шар шипящий, шар говнящий за моим грустил окном. ' +
u'Я открыл окно тихонько и пустил бедняжку в дом.')
06.01.10
Видишь, вспыхнула зарница
Небо заревом смеётся
Видишь вспыхнуло знаменье
Небо вспыхнуло знаменьем
Всё вокруг как будто вместе
Только ты один как будто
Только ты один как будтно
Отделённый разделеньем
Как застрять в кусочке мяса
Удалось застрять в животном
Ты как будто не от сюда
Удивляться не отучен
Ты опять проснулся голый
Отряхнув клочки надежды
И на сонные одежды
Натянул ещё одежды
Ты как будто был уже здесь
Всё как будто бы знакомо
Только сам ты незнакомый
Хоть и в зеркале знакомый
Ты в себя суёшь кого-то
И потом жуёшь кого-то
И глотаешь эту кашу
Удивляясь ощущеньям
А вокруг ни удивленья
Все как будто бы отсюда
И ты тоже надеваешь
Вид который все узнают
Вид который все узнают
И конечно не обидят
Удивляясь что есть дело
До того кого обидят
Удивляясь тем границам
Что внутри тебя проснулись
Удивляясь удивленью
И кого-то забывая
Так кого-то забывая
Словно что-то вспоминая
Словно что-то вспоминая
И при этом уставая
rss
email