<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3266129795311501904</atom:id><lastBuildDate>Thu, 02 Sep 2010 21:15:51 +0000</lastBuildDate><title>Чёрная дыра</title><description /><link>http://imbolc.name/</link><managingEditor>noreply@blogger.com (Imbolc)</managingEditor><generator>Blogger</generator><openSearch:totalResults>51</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Imbolc" /><feedburner:info uri="imbolc" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Imbolc</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-7932581052687834757</guid><pubDate>Sat, 03 Apr 2010 00:02:00 +0000</pubDate><atom:updated>2010-04-07T01:31:14.467-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><category domain="http://www.blogger.com/atom/ns#">мысли</category><category domain="http://www.blogger.com/atom/ns#">сознание</category><title>Про бессмертных мастеров</title><description>Собрались как-то бессмертные мастера на полянке поспорить&lt;br /&gt;И давай своих питонов мучать, сотрясая древо мира&lt;br /&gt;Мощными раскатами оргазмов от корней до кончиков листвы&lt;br /&gt;&lt;br /&gt;И каждый новый оргазм был сильнее прежнего&lt;br /&gt;Только Просроченный Пророк не дрочил&lt;br /&gt;И взирали на него как на лоха, кто с презрением, а кто и с жалостью&lt;br /&gt;&lt;br /&gt;И когда все вымотавшись лежали без сил, растворяясь в облаках&lt;br /&gt;Пророк достал своего замученного любимца&lt;br /&gt;И дёрнув пару раз, обкончал их лица&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-7932581052687834757?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/GdBydUv7Ezg/blog-post.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/04/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-8572693735462755070</guid><pubDate>Sun, 21 Mar 2010 07:57:00 +0000</pubDate><atom:updated>2010-03-21T01:09:29.444-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">сознание</category><title>Понравилось</title><description>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://theoryandpractice.ru/videos/28-dmitriy-shamenkov-osoznannoe-upravlenie-zdorovem"&gt;про внимание&lt;/a&gt;, &lt;a href="http://theoryandpractice.ru/videos/10-dmitriy-shamenkov-teoriya-osoznannogo-upravleniya-zdorovem"&gt;примерно тоже, качество хуже&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://theoryandpractice.ru/videos/60-tatyana-chernigovskaya-yazyk-soznaniya"&gt;про мозг и язык&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://theoryandpractice.ru/videos/1-vadim-dymov-dengi-kak-smysl-zhizni"&gt;Дымов (колбасник) о себе&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://theoryandpractice.ru/videos/46-konstantin-anokhin-vspomnit-vse"&gt;про память&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Выпрыгнуть из подносного поезда и умчаться в ноздрю, рассекая воздух темноты.&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-8572693735462755070?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/H18M8bHce8U/blog-post_21.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/03/blog-post_21.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-8918473134085468397</guid><pubDate>Wed, 17 Mar 2010 11:19:00 +0000</pubDate><atom:updated>2010-03-17T04:20:15.967-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Полезные декораторы</title><description>&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://pysi.org/decorators/cache_property/"&gt;очень быстрое кэширующее property&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://pysi.org/decorators/safely/"&gt;подавление исключений с логированием&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://pysi.org/decorators/replay/"&gt;n-кратный перезапуск при ошибке&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-8918473134085468397?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/_k8FV7fHJeM/blog-post.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/03/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-2516217334022717970</guid><pubDate>Thu, 11 Mar 2010 12:25:00 +0000</pubDate><atom:updated>2010-03-11T04:29:29.370-08:00</atom:updated><title>[fixed] Унитаз</title><description>Эта заметка заинтересует всех несчастных, страдающих от дерьма на жопе.&lt;br /&gt;
&lt;br /&gt;
В последние годы распространение получили непривычные для советских жоп унитазы. Под анусом в них располагается дырка с водой, а вовсе не привычная ванночка для говна. Результат печален. Падая, дерьмо взрывает водную гладь фонтанами брызг. Многие из которых несут в себе частицы этого или упавшего раньше говна. И часть из них благополучно доносят это самое говно назад к породившей его жопе.&lt;br /&gt;
&lt;br /&gt;
Экономические причины появления таких унитазов очевидны. Унитазы со ступенькой в нужном месте на рынке тоже есть. И стоят, конечно, дороже. Либо плати, либо йожся на унитазе, выгибая жопу в немыслимых асанах, лишь бы попасть на заветную ступеньку. Либо твоя жопа регулярно будет в дерьме. Я бы с радостью заплатил. Но это не решает проблемы. Всё равно натыкаешься на эти унитазы в путешествиях или в гостях.&lt;br /&gt;
&lt;br /&gt;
Так вот, решение всё же есть. Перед тем как сесть срать, накрываем поверхность воды туалетной бумажкой. Брызг не будет.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-2516217334022717970?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/zzwakJL2DXI/fixed.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/03/fixed.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-3404858720595011076</guid><pubDate>Sun, 24 Jan 2010 05:14:00 +0000</pubDate><atom:updated>2010-01-23T21:17:57.337-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Python debug-progressbar</title><description>&lt;p&gt;Поддержу тему прогресс-баров начатую на &lt;a href="http://habrahabr.ru/blogs/python/81532/"&gt;Хабре&lt;/a&gt;.
Описанный там бар можно назвать "продакшн-баром".
В свою очередь, поделюсь давно и удачно написанным "дебаг-баром".
Основные его отличия в:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;возможности вывода дополнительной дебаг-инфы&lt;/li&gt;
&lt;li&gt;выводе времени обработки каждого шага&lt;/li&gt;
&lt;li&gt;поддержке стандартного питоньего logging-а&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Используется он так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;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))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;В результате получится что-то типа:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; 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
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Вариант с использованием логгинга:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;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))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Результат:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ну и код самого модуля debugbar.py:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# -*- 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 &amp;lt; 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 &amp;lt; self.limit:
            self.cnt += 1
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-3404858720595011076?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/S983XPWVPY0/python-debug-progressbar.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/01/python-debug-progressbar.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-8539674683645536487</guid><pubDate>Fri, 22 Jan 2010 07:37:00 +0000</pubDate><atom:updated>2010-01-21T23:37:29.522-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Говорящий python</title><description>&lt;p&gt;Разговорить змия по русски оказалось совсем несложно.&lt;/p&gt;

&lt;p&gt;1. Ставим festival:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo aptitude install festival festvox-ru
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;2. Учим его болтать со включенной музыкой. Добавляем в конфиг ~/.festivalrc&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;;use ALSA
(Parameter.set 'Audio_Method 'Audio_Command)
(Parameter.set 'Audio_Command "aplay -q -c 1 -t raw -f s16 -r $SR $FILE")
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;3. Ну и, собственно, модуль pystival состоящий из единственной функции:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;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'Я открыл окно тихонько и пустил бедняжку в дом.')
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-8539674683645536487?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/GKLqvf2hVVs/python.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/01/python.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-9069921703871353168</guid><pubDate>Wed, 06 Jan 2010 11:47:00 +0000</pubDate><atom:updated>2010-01-06T03:47:35.395-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title /><description>&lt;br /&gt;
Видишь, вспыхнула зарница&lt;br /&gt;
Небо заревом смеётся&lt;br /&gt;
Видишь вспыхнуло знаменье&lt;br /&gt;
Небо вспыхнуло знаменьем&lt;br /&gt;
&lt;br /&gt;
Всё вокруг как будто вместе&lt;br /&gt;
Только ты один как будто&lt;br /&gt;
Только ты один как будтно&lt;br /&gt;
Отделённый разделеньем&lt;br /&gt;
&lt;br /&gt;
Как застрять в кусочке мяса&lt;br /&gt;
Удалось застрять в животном&lt;br /&gt;
Ты как будто не от сюда&lt;br /&gt;
Удивляться не отучен&lt;br /&gt;
&lt;br /&gt;
Ты опять проснулся голый&lt;br /&gt;
Отряхнув клочки надежды&lt;br /&gt;
И на сонные одежды&lt;br /&gt;
Натянул ещё одежды&lt;br /&gt;
&lt;br /&gt;
Ты как будто был уже здесь&lt;br /&gt;
Всё как будто бы знакомо&lt;br /&gt;
Только сам ты незнакомый&lt;br /&gt;
Хоть и в зеркале знакомый&lt;br /&gt;
&lt;br /&gt;
Ты в себя суёшь кого-то&lt;br /&gt;
И потом жуёшь кого-то&lt;br /&gt;
И глотаешь эту кашу&lt;br /&gt;
Удивляясь ощущеньям&lt;br /&gt;
&lt;br /&gt;
А вокруг ни удивленья&lt;br /&gt;
Все как будто бы отсюда&lt;br /&gt;
И ты тоже надеваешь&lt;br /&gt;
Вид который все узнают&lt;br /&gt;
&lt;br /&gt;
Вид который все узнают&lt;br /&gt;
И конечно не обидят&lt;br /&gt;
Удивляясь что есть дело&lt;br /&gt;
До того кого обидят&lt;br /&gt;
&lt;br /&gt;
Удивляясь тем границам&lt;br /&gt;
Что внутри тебя проснулись&lt;br /&gt;
Удивляясь удивленью&lt;br /&gt;
И кого-то забывая&lt;br /&gt;
&lt;br /&gt;
Так кого-то забывая&lt;br /&gt;
Словно что-то вспоминая&lt;br /&gt;
Словно что-то вспоминая&lt;br /&gt;
И при этом уставая&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-9069921703871353168?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/DIq8L72w7yM/blog-post.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2010/01/blog-post.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-3310729135084144553</guid><pubDate>Tue, 05 Jan 2010 00:30:00 +0000</pubDate><atom:updated>2010-01-04T17:07:06.415-08:00</atom:updated><title /><description>Он делал доры неспроста&lt;br /&gt;
Дрочить на статы был мастак&lt;br /&gt;
Но вдруг упал его доход&lt;br /&gt;
И хуй упал и не встаёт&lt;br /&gt;
&lt;br /&gt;
Узнав, любовница ушла&lt;br /&gt;
И нахуй посланый женой&lt;br /&gt;
Сидит и шамкает в слезах&lt;br /&gt;
Размягший хуй одной рукой&lt;br /&gt;
&lt;br /&gt;
Другой привычно жмёт f5&lt;br /&gt;
И прямо рвётся из горла&lt;br /&gt;
Крик: бля, ну что за хуета&lt;br /&gt;
Быть может проклят я во век&lt;br /&gt;
&lt;br /&gt;
Быть может чёрный гугла-маг&lt;br /&gt;
В астрале дор мой разглядел&lt;br /&gt;
И чакры все мои забанил&lt;br /&gt;
Лишил удачи и потенции меня&lt;br /&gt;
&lt;br /&gt;
И чувство рифмы отобрал&lt;br /&gt;
Лиши меня памяти,&lt;br /&gt;
Чтобы я не страдал,&lt;br /&gt;
Вовеки проклинаю статсы!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-3310729135084144553?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/qwV8jVyJ90E/f5.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>1</thr:total><feedburner:origLink>http://imbolc.name/2010/01/f5.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-3631984111608521105</guid><pubDate>Sat, 26 Dec 2009 17:33:00 +0000</pubDate><atom:updated>2009-12-26T09:34:44.052-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title>Ты пишешь в блог</title><description>Ты пишешь в блог какую-то хуйню&lt;br /&gt;
Но я твою хуйню читать не буду&lt;br /&gt;
Я лучше напишу свою хуйню&lt;br /&gt;
И сразу же о ней забуду&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-3631984111608521105?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/l2gzpOlecQ4/blog-post_6826.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_6826.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-7830177074706765635</guid><pubDate>Sat, 26 Dec 2009 15:18:00 +0000</pubDate><atom:updated>2009-12-26T07:18:40.295-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title /><description>&lt;br /&gt;
Абстрактный смысл, меняющий обличья&lt;br /&gt;
Вдруг там возникнет,&lt;br /&gt;
Что воскликнешь: Нихуя!&lt;br /&gt;
&lt;br /&gt;
Тепень уж точно&lt;br /&gt;
Ни про что на свете&lt;br /&gt;
Я не скажу: попсня, хуйня&lt;br /&gt;
&lt;br /&gt;
Все фильтры брошены в пизду&lt;br /&gt;
Я здесь!&lt;br /&gt;
И врядли снова в понимание уйду&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-7830177074706765635?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/GkIzwoTgTLY/blog-post_142.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_142.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-7859474798290655844</guid><pubDate>Sat, 26 Dec 2009 14:46:00 +0000</pubDate><atom:updated>2009-12-26T06:46:14.038-08:00</atom:updated><title /><description>&lt;br /&gt;
Каплями снова небо плачет&lt;br /&gt;
Почему не сложилось иначе?&lt;br /&gt;
Почему на дворе не лето?&lt;br /&gt;
И зачем же я помню про лето?&lt;br /&gt;
&lt;br /&gt;
Снова эти холодные игры&lt;br /&gt;
Почему я сейчас без тебя?&lt;br /&gt;
Почему между нами так много?&lt;br /&gt;
И зачем же я помню тебя?&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-7859474798290655844?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/3kfeyuBU9PQ/blog-post_5882.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_5882.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-2395718882109171312</guid><pubDate>Sat, 26 Dec 2009 14:30:00 +0000</pubDate><atom:updated>2009-12-26T06:30:59.935-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title>Взгляд</title><description>&lt;br /&gt;
Ну скажи, что меня ещё любишь&lt;br /&gt;
Ты же знаешь, чего я хочу&lt;br /&gt;
Только слово, всего-то лишь слово&lt;br /&gt;
Искренности давно не ищу&lt;br /&gt;
&lt;br /&gt;
Я не скряга, и слова довольно&lt;br /&gt;
Мои мысли допишут картину&lt;br /&gt;
Только слово с тебя, ну а мне&lt;br /&gt;
Дверь, рождение в новом мире&lt;br /&gt;
&lt;br /&gt;
Почему в твоём взгляде презренье?&lt;br /&gt;
Почему не протянешь руки?&lt;br /&gt;
Вот и слово для нас уже роскошь&lt;br /&gt;
Вновь искать обходные пути&lt;br /&gt;
&lt;br /&gt;
Взгляд, и я растворяюсь в мечтаньях&lt;br /&gt;
Взгляд, и я уплываю туда&lt;br /&gt;
Где мы вместе, где счастливы вместе&lt;br /&gt;
Где тебе не бывать никогда&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-2395718882109171312?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/ko93TpSz8Mg/blog-post_5362.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_5362.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-4981077226106989109</guid><pubDate>Sat, 26 Dec 2009 11:09:00 +0000</pubDate><atom:updated>2009-12-26T03:09:50.791-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title>В попытках достать до смысла</title><description>&lt;br /&gt;
В попытках достать до смысла&lt;br /&gt;
А вдруг этот мир живой?&lt;br /&gt;
Умом ли живое постигнуть?&lt;br /&gt;
Пади на колени и вой&lt;br /&gt;
&lt;br /&gt;
К пределу глаза закатывая&lt;br /&gt;
Гортани рви сухожилия&lt;br /&gt;
Кто знает, а может силой&lt;br /&gt;
Твоё обернётся бессилие&lt;br /&gt;
&lt;br /&gt;
Как знать, чем наполнит Вечность&lt;br /&gt;
Умом забытое логово&lt;br /&gt;
Быть может ему в этом мире&lt;br /&gt;
Судьба отыскать дорогу&lt;br /&gt;
&lt;br /&gt;
Свою. Что и ты когда-то&lt;br /&gt;
Смог разглядеть сквозь время&lt;br /&gt;
Да только нагрёб ты много&lt;br /&gt;
И шагу ступить это бремя&lt;br /&gt;
&lt;br /&gt;
Не даст. Чтож застывшим древом&lt;br /&gt;
Пустить в землю гроба корни?&lt;br /&gt;
И вечность вернутся в саване&lt;br /&gt;
Изгнившего мяса клочья&lt;br /&gt;
&lt;br /&gt;
Неужто намертво челюсти&lt;br /&gt;
Вцепились в чужое счастье&lt;br /&gt;
В попытках всё заарканить&lt;br /&gt;
Постигнув умом Настоящее?&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-4981077226106989109?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/FcUJaD-vBys/blog-post_26.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_26.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-5258640160031494869</guid><pubDate>Fri, 25 Dec 2009 19:32:00 +0000</pubDate><atom:updated>2009-12-25T11:32:30.845-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Большой список строк</title><description>&lt;br /&gt;
Стоит задача построчных манипуляций с большим файлом. Пробовал разные подходы. Оказалось, что попытки работы напрямую с файлом упираются в кэш файловой системы. Все эти tell-ы и seek-и выполняются быстро только если файл целиком влазит в этот самый кэш.&lt;br /&gt;
&lt;br /&gt;
Поразмыслив я решил не увеличивать размер кэша. Во первых, память нужна не только этому скрипту. Во вторых работа с даже полностью закэшированным файлом всё же на порядок медленнее, чем с памятью напрямую. В общем, решил загонять весь файл в память.&lt;br /&gt;
&lt;br /&gt;
Первое, что по этому поводу выяснилось, стандартный list питона кушает памяти в 2 раза больше, чем содержит данных. Я тестил на строчках требуемой длины (27 байт).&lt;br /&gt;
&lt;br /&gt;
Вообще, мне хотелось бы даже сжать данные. Потому попробовал я записать bz2 файлик в tmpfs. Это ведь тоже работа с памятью. А потом считывать из него нужные строчки, там тоже можно сики делать. Это оказалось просто невероятно медленно.&lt;br /&gt;
&lt;br /&gt;
Потом посмотрел в сторону &lt;a href="http://docs.python.org/library/mmap.html"&gt;mmap&lt;/a&gt;. &amp;nbsp;Даже если просто в память через неё писать, работает раза в два дольше, чем с закэшированным файлом. Либо кто-то из нас тормоз, либо одно из двух :)&lt;br /&gt;
&lt;br /&gt;
Остановился на&amp;nbsp;&lt;a href="http://docs.python.org/library/array.html"&gt;array&lt;/a&gt;. То, что получилось работает на скорости сравнимой с стандартным list-ом. Вот оно, собственно:&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/python
# -*- coding: utf-8 -*-
import array


def main():
    # тестим
    import random

    a = StringList()
    a.append(u'Утол')
    a.append(u'Мар')
    print len(a)
    print a[1].encode('utf-8')
    print random.choice(a).encode('utf-8')


class StringList(object):
    '''
    Экономичный к памяти список строк
    '''
    def __init__(self, encoding='cp1251'):
        self.data = array.array('c')
        self.index = array.array('L')
        self.encoding = encoding

    def append(self, s):
        self.index.append(len(self.data))
        self.data.fromstring(s.encode(self.encoding))

    def __getitem__(self, id):
        start = self.index[id]
        try:
            end = self.index[id + 1]
        except IndexError:
            end = len(self.data)
        return self.data[start:end].tostring().decode(self.encoding)

    def __len__(self):
        return len(self.index)


if __name__ == "__main__":
    main()
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-5258640160031494869?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/DW5P9G8KKvs/blog-post_25.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_25.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-3890947410863101693</guid><pubDate>Thu, 24 Dec 2009 06:28:00 +0000</pubDate><atom:updated>2009-12-23T22:29:07.870-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title /><description>Найдя причины пиздецов&lt;br /&gt;
Ты радуешься очень сильно&lt;br /&gt;
Порою, радость так обильна&lt;br /&gt;
Что привлекает пиздецов&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-3890947410863101693?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/khQlRfmY5Pw/blog-post_23.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>7</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_23.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-3588055826252073302</guid><pubDate>Wed, 23 Dec 2009 06:58:00 +0000</pubDate><atom:updated>2009-12-22T23:15:31.103-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Python + YAML</title><description>&lt;h2&gt;Зачем это, собственно?&lt;/h2&gt;

&lt;p&gt;Для конфигов. Писать конфиги на питоне и импортить, на мой взгляд, лучший вариант.
Но это не всегда удобно. Типичный пример: нужно загрузить конфиг из родительской папки.
Вариант решения - не импортить, хранить в текстовом формате, читать и парсить.&lt;/p&gt;

&lt;p&gt;Конечно, хочется парсить автоматом. Да ещё, чтобы сам конфиг был читабельным.
Варианты:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XML: избыточный синтаксис, неудобный парсинг&lt;/li&gt;
&lt;li&gt;INI: ConfigParser - это просто пиздец, наследие винды, не иначе&lt;/li&gt;
&lt;li&gt;CSV: удобно, но требует специального редактора&lt;/li&gt;
&lt;li&gt;JSON: почти хорошо, но кое-чего нет и синтаксис немного избыточен&lt;/li&gt;
&lt;li&gt;YAML: наш победитель :)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;По сути yaml - это расширение json. Или json подмножество yaml :)&lt;/p&gt;

&lt;h2&gt;Как это работает&lt;/h2&gt;

&lt;p&gt;Для начала ставим пакет. Я подобные простенькие вещи ставлю глобально.
Например, так:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo aptitude install python-yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;А дальше всё стандартно:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import yaml
&amp;gt;&amp;gt;&amp;gt; yaml.load('[1, a, false]')  # парсим yaml-строку
[1, 'a', False]
&amp;gt;&amp;gt;&amp;gt; yaml.dump([2, 'b', None])  # дампим в yaml-строку
'[2, b, null]\n'
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Можно парсить данные прямо из файла:

&lt;pre&gt;&lt;code&gt;cfg = yaml.load(open('test.yaml'))&lt;/p&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Например, из такого файла test.yaml:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Простые типы, а это камент, кстати :)
word: Строка    # без кавычек удобно
num: 2009       # число
none: null      # None
bool: true      # Bool

# Список одной строкой
lst1: [буквы, 123, null]

# Многострочный вариант списка
lst2:
    - буквы   # тут возможны каменты
    # и тут тоже
    - 123
    - null

# Словарь в одну строку
dic1: {word : буквы, num : 123, none : null}

# Многострочный словарь
dic2:
    word: буквы
    num: 123
    none: null

# Длинная строка, переносы удаляются
big_str1: &amp;gt;
    Тру
    лю
    лю

# Длинная строка, переносы сохраняются
big_str2: |
    Тра
    ля
    ля

# Вложенности
langs:
    - XML:
        читабельность: никакая
        использование: мерзкие парсеры
        назначение: обмен данными
    - YAML:
        читабельность: высокая
        использование: святая простота
        назначение: конфиги
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Получится такая структура данных:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;{
    'word' : u'Строка',
    'num'  : 2009,
    'none' : None,
    'bool' : True,

    'lst1' : [u'Строка', 123, None],
    'lst2' : [u'Строка', 123, None],

    'dic1' : {'none' : None, 'num': 123, 'word' : u'буквы'},
    'dic2' : {'none' : None, 'num': 123, 'word' : u'буквы'},

    'big_str1' : u'Тра ля ля\n',
    'big_str2' : u'Тру\nля\nля\n',

    'langs': {
        'XML': {
            u'читабельность' : u'никакая',
            u'использование' : u'мерзкие парсеры',
            u'назначение'    : u'обмен данными',
        },
        'YAML': {
            u'читабельность' : u'высокая',
            u'использование' : u'святая простота',
            u'назначение'    : u'конфиги',
        }
    },
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Вот, собственно, и всё чем сам пользуюсь.
Но это не все возможности yaml, и желающие изъебнуться и здесь найдут чем позабавиться :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-3588055826252073302?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/pTHroBK60qE/python-yaml.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/python-yaml.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-8142057114748046287</guid><pubDate>Tue, 22 Dec 2009 07:33:00 +0000</pubDate><atom:updated>2009-12-22T07:01:34.042-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">сознание</category><title>Ось жизни</title><description>Недавно И. обратил внимание, что протекающие во времени процессы имеют волновую природу. Дальше результаты моих наблюдений в этом ракурсе.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Про равновесие&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Наверное, всем в голову приходила идея равновесия. Если совсем грубо, хорошего в жизни столько же, сколько и плохого. Очень простая и логичная идея. Ум очень любит подобные идеи и крепко цепляется за них. А для этой идеи куча подтверждений на поверхности валяется. Сегодня выпил(выкурил, съел) что-то энергетическое - завтра как минимум слабость, или откровенно хуёво. Сегодня отдохнул, завтра энергии больше.&lt;br /&gt;
&lt;br /&gt;
Такая вот демотивирующая идея. Какой смысл напрягаться в поисках хорошего, если потом будет откат? Или какой смысл истязать себя аскезами, если последующий кайф лишь уравновесит страдания?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Про ноль&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Так вот, все эти хорошо и плохо измеряются относительно некоторого нуля. Причём, этот ноль у всех разный. Твой привычный завтрак (ноль) для какого-нибудь бомжа будет большой радостью. Аналогично то, к чему ты сейчас стремишься у кого-то не вызывает никаких эмоций, а то и вызывает отвращение.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Про ось&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Итак, этот самый ноль вовсе не абсолютен. Он меняется в течении жизни. Для волн "хорошо-плохо" изменение нуля является осью.&lt;br /&gt;
&lt;br /&gt;
Если эта ось направлена вверх, на фоне локальных успехов-неудач, мы ощущаем улучшение жизни. Если вниз, наоборот. &lt;br /&gt;
&lt;br /&gt;
Вверх относительно чего, спросит математик? Относительно отношения за некоторый период прошлого, думаю. Дело в том, что психика более инертна по сравнению с умом. Ты можешь изменить отношение на противоположное, но подсознательный кайф будет идти в прошлых координатах какое-то время. Он может гаситься осознанным отношением, но он будет.&lt;br /&gt;
&lt;br /&gt;
Обычно же, отношение резко не меняется. Поэтому, я просто буду говорить: вверх и вниз.&lt;br /&gt;
&lt;br /&gt;
Ещё раз: если ось направлена под углом некоторой величины вверх или вниз, мы ощущаем глобальное улучшение или ухудшение жизни на фоне локальных плюсов и минусов. Если же угол невелик, мы не замечаем этих изменений. Они гасятся локальными волнами.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Про отношение&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Дальше я собираюсь использовать термин "Отношение". Под Отношением я буду понимать сумму отношение + действия. На мой взгляд есть только Отношение. На физический уровень оно отражается как действие, а на ментальный как отношение. &lt;br /&gt;
&lt;br /&gt;
Я не представляю, как можно изменить отношение не меняя действий. Разум не поверит в такой фокус и не даст по настоящему измениться отношению.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Управление осью жизни&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Непродолжительные эксперименты показывают, что направление оси регулируется Отношением. И оно инертно. Т.е. при изменении Отношения, ось _постепенно_ меняет направление.&lt;br /&gt;
&lt;br /&gt;
Отследить это можно, если придерживаться определённого отношения некоторое время. Делать это мешают локальные волны. Разум говорит: о, неудача - значит действия неправильные, давай менять. Но это локальная волна. Сколько раз я попадался в эту ловушку. Я менял отношение и этот локальный спад оборачивался глобальным.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Картинка&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Картинка, иллюстрирующая изменение оси на фоне локальных волн при поддержании неизменного отношения. Это реальная статистика отражающая успешность одного проекта.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_dN76p_2FCvw/SzB0gcBj1dI/AAAAAAAAAFY/4JlixYNJ-YU/s1600-h/li" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_dN76p_2FCvw/SzB0gcBj1dI/AAAAAAAAAFY/4JlixYNJ-YU/s320/li" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-8142057114748046287?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/7ALeNYrJOCE/blog-post_21.html</link><author>noreply@blogger.com (Imbolc)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_dN76p_2FCvw/SzB0gcBj1dI/AAAAAAAAAFY/4JlixYNJ-YU/s72-c/li" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_21.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-4744211753322616208</guid><pubDate>Sun, 20 Dec 2009 19:25:00 +0000</pubDate><atom:updated>2009-12-20T11:26:56.101-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">django</category><category domain="http://www.blogger.com/atom/ns#">python</category><title>[django] Как поиметь юзера везде</title><description>Часто текущего юзера хочется иметь там, где его по умолчанию нету. Например, в формах. Для этого нужно засунуть этого юзера в тред-локалс, а потом оттуда доставать в нужном месте.&lt;br /&gt;
&lt;br /&gt;
Я уже давно стырил откуда-то такой вот код для этого самого всовывания/высовывания:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;# -*- coding: utf-8 -*-
try:
    from threading import local
except ImportError:
    from django.utils._threading_local import local

_thread_locals = local()

def set_current_user(user):
    setattr(_thread_locals, 'user', user)

def get_current_user():
    return getattr(_thread_locals, 'user', None)
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Положим этот код, например в common.user, тогда прослойка для засовывания будет такой:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;from common.user import set_current_user

class CurrentUserMiddleware(object):
    def process_request(self, request):
        set_current_user(getattr(request, 'user', None))
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Вот и всё. Теперь в любом месте имеем текущего юзера:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;from common.user import get_current_user

user = get_current_user()
...
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-4744211753322616208?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/ozxxwI-3uLA/django.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>8</thr:total><feedburner:origLink>http://imbolc.name/2009/12/django.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-8341969772903241163</guid><pubDate>Sun, 20 Dec 2009 06:29:00 +0000</pubDate><atom:updated>2009-12-19T22:29:36.635-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">сознание</category><title>Запасные варианты</title><description>Пофиксил очередной баг в сознании.&lt;br /&gt;
&lt;br /&gt;
Вводная. Очевидно, что мысли влияют на мир. Споры ведутся о том непосредственное ли это влияние или опосредованное. Я не знаю ни одного сторонника первого подхода, непосредственно материализующего предметы. И в то же время вижу страдания сторонников второго, в процессе нахождения всё новых и новых путей этого самого влияния. Всякие там феромоны :) &lt;br /&gt;
&lt;br /&gt;
Поэтому, я забил. Бесполезный спор. Если знаешь путь влияния, им можно надёжно пользоваться, это практично. Если не знаешь, но очень хочется результатов, идея о непосредственном влиянии даст силы попытаться. И иногда попытки срабатывают. Не важно было ли влияние через ещё не известные пути, или непосредственное. Важно то, что идея непосредственности помогла достичь результата. Она тоже практична.&lt;br /&gt;
&lt;br /&gt;
Не понял, зачем отвлёкся. Итак, влияние есть. Теперь, про баг сознания. Очевидно, что материальные предметы вызывают определённые мысли. А мысли в свою очередь вызывают определённые изменения. Такой пример: я замечаю повышение активности отморозков на улице. Естественное желание - купить наган. Но наган постоянно будет напоминать мне о том, зачем он куплен и таким образом притягивать не интересную мне ситуацию. Раньше в принятии решения участвовали две переменные: вероятность того, что вещь потребуется (-) ненужные мысли, которые она вызывает.&lt;br /&gt;
&lt;br /&gt;
Чуть подробнее. Раньше я решал однозначно: если конкретной причины покупать нет - не покупаю. Конкретная причина - это когда я уже попал в неприятную ситуацию и уже вижу пути её развития. Рост преступности - причина абстрактная. Наезды на кого-нибудь из близких - конкретная. Именно такое поведение мне казалось оптимальным с точки зрения влияния мыслей. Но при этом было подсознательное чувство недопонимания.&lt;br /&gt;
&lt;br /&gt;
Так вот, происходило примерно следующее. Я не покупаю наган. И этот наган не вызывает ненужных мыслей. Однако, каждый раз выходя на улицу, эти мысли вызывают отморозки. И я занимаюсь тем, что фильтрую мысли. Чтобы бороться нужно помнить о том, с чем борешься. Т.е. в некотором объёме эти мысли должны-таки присутствовать для продолжения борьбы.&lt;br /&gt;
&lt;br /&gt;
Итак, три несовершенства налицо: &lt;br /&gt;
1. негативные мысли всё же присутствуют&lt;br /&gt;
2. постоянно тратятся силы на поддержание их на низком уровне&lt;br /&gt;
3. снижается восприятие настоящего, как следствие п.2&lt;br /&gt;
&lt;br /&gt;
Так вот, в своих рассуждениях я не учитывал влияние нагана как "запасного варианта". Помимо полезности в определённой ситуации, он так же успокаивает разум. Если в кармане наган, я спокоен естественным образом. Я знаю, если неприятная ситуация сложится, выход есть. Разум больше не мечется в попытках придумать этот самый выход. Он не засоряет мою голову мыслями п.1, при этом не нужен п.2 и естественно исчезает п.3.&lt;br /&gt;
&lt;br /&gt;
Ну да, я утрирую, конечно. Правильнее сказать "засоряет меньше", насколько уж он верит в запасной вариант. А верит тем больше, чем вариант рациональнее.&lt;br /&gt;
&lt;br /&gt;
Т.е. в вопросе покупать или не покупать наган я теперь учитываю его влияния как "запасного варианта". Итого: насколько он может пригодиться физически (+) насколько успокоит как запасной вариант (-) насколько сам будет вызывать ненужные мысли.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-8341969772903241163?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/oSIuwe-trE0/blog-post_19.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>5</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_19.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-5089552318001537838</guid><pubDate>Tue, 15 Dec 2009 14:57:00 +0000</pubDate><atom:updated>2009-12-15T07:12:03.209-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">django</category><category domain="http://www.blogger.com/atom/ns#">python</category><title>Эмуляция key-value хранилища в django orm</title><description>Это может пригодиться в нескольких случаях. Например, при разработки проекта который может в будущем поиметь нагрузку. Чтобы на этапе разработки всем участникам не возиться с установкой кв-бд можно использовать эту заглушку. При этом структура проекта будет изначально строиться соответственно и заменой пары строк вы подключите реальное key-value хранилище.&lt;br /&gt;&lt;br /&gt;Ещё один вариант использования - хранение настроек. Допустим заранее не известно, сколько их будет и какие. Вот, используя эту штукенцию можно избежать постоянного перекраивания модели.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class KV(models.Model):&lt;br /&gt;    key = models.CharField(u'Key', max_length=50, unique=True)&lt;br /&gt;    val = PickledObjectField(u'Value')&lt;br /&gt;&lt;br /&gt;    @classmethod&lt;br /&gt;    def get(cls, key, default=None):&lt;br /&gt;        try:&lt;br /&gt;            return cls.objects.get(key=key).val&lt;br /&gt;        except cls.DoesNotExist:&lt;br /&gt;            return default&lt;br /&gt;&lt;br /&gt;    @classmethod&lt;br /&gt;    def put(cls, key, val):&lt;br /&gt;        obj, new = cls.objects.get_or_create(key=key)&lt;br /&gt;        obj.val = val&lt;br /&gt;        obj.save()&lt;br /&gt;&lt;br /&gt;    @classmethod&lt;br /&gt;    def rm(cls, key):&lt;br /&gt;        try:&lt;br /&gt;            cls.objects.get(key=key).delete()&lt;br /&gt;        except cls.DoesNotExist:&lt;br /&gt;            pass&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Работает, соответственно, так:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;KV.put('updated', datetime.now())&lt;br /&gt;print KV.get('updated')&lt;br /&gt;KV.rm('updated')&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;А dict-style интерфейс я так и не написал. Пока думал как лучше сделать, текущую задачу уже решил :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-5089552318001537838?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/Tro6odH6HN8/key-value-django-orm.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>2</thr:total><feedburner:origLink>http://imbolc.name/2009/12/key-value-django-orm.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-61370883375233855</guid><pubDate>Tue, 15 Dec 2009 14:27:00 +0000</pubDate><atom:updated>2009-12-17T21:53:04.159-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">django</category><category domain="http://www.blogger.com/atom/ns#">python</category><title>Django ORM без Джанги</title><description>Я так и не смог себя заставить изучить Алхимию. Не лезет в голову то, что разум трактует как избыточное. А использование Django-orm в не веб проектах раздражало. Пишешь какой-нибудь парсер приходится захламлять папку целиковой джанга-структурой.&lt;br /&gt;
&lt;br /&gt;
Так вот, наконец-то я выделил время и разобрался-таки, как засунуть всю конфигурацию django orm в один файлик. Делюсь сей радостью :)&lt;br /&gt;
&lt;br /&gt;
Всего один файлик models.py:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
#!/usr/bin/python
# -*- coding: utf-8 -*-

from django.conf import settings
settings.configure(
    DATABASE_ENGINE = 'sqlite3',
    DATABASE_NAME = 'var/db.sqlite',
)
from django.db import models


class Person(models.Model):
    nick = models.CharField(max_length=100, unique=True)
    email = models.EmailField(max_length=100, unique=True)

    def __unicode__(self):
        return self.nick

    class Meta:
        app_label = ''


def create_table(cls):
    from django.db import connection
    from django.core.management.color import no_style
    
    sql, references = connection.creation.sql_create_model(cls, no_style())
    cursor = connection.cursor()
    for q in sql:
        try:
            cursor.execute(q)
        except:
            pass
    

def main():
    create_table(Person)


if __name__ == "__main__":
    main()
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для создания таблиц просто запускайте этот файлик. Ну а использовать как обычно&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
from models import Person

Person.objects.....
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-61370883375233855?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/r8504Zd25rA/django-orm.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>4</thr:total><feedburner:origLink>http://imbolc.name/2009/12/django-orm.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-1111643508716081460</guid><pubDate>Tue, 15 Dec 2009 14:06:00 +0000</pubDate><atom:updated>2009-12-15T06:27:01.775-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">траф</category><title>TDS</title><description>Недавно вернулся в доры :) Пошёл трафик, писал тдс-ку. Она поумнее аналогов, например, биды кеев умеет мнговенно определять с незначительной погрешностью. Так вот, дошли руки до анализа уникальности. Задумался над структурой, кв-бд в голову полезли всякие.&lt;br /&gt;&lt;br /&gt;Стоп, думаю, надо отвлечься, в ванной поваляться, чувствую есть решение проще. И оно, действительно, пришло. Куки. Прямо в куках и храню историю посещении тдс-ки. Когда и куда отправлял сёрфера.&lt;br /&gt;&lt;br /&gt;Решение помимо лёгкости реализации и устойчивости к нагрузкам может и на конверте сказаться в лучшую сторону. В случае всевозможных cpa и шопов, везде, где платят процент в той или иной форме. В таких случаях по ипу вы можете отсеять реальный уник, а это потенциальный покупатель. А если продавать траф, то конечно лучше по ипам уникализировать, а то как неуник засчитают частично.&lt;br /&gt;&lt;br /&gt;Т.е. я назвал бы такой способ уникализации более точным. Но использовать эту точность можно только самому, т.к. доказать её невозможно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-1111643508716081460?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/h94c6WvWBi4/tds.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/tds.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-7066289901029207525</guid><pubDate>Tue, 15 Dec 2009 13:48:00 +0000</pubDate><atom:updated>2009-12-15T06:06:52.310-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">python</category><title>Tokyo Cabinet</title><description>Это такая key-value бд, кто не знает. Возможно, самая быстрая из имеющихся. Я до этого юзал gdbm, потому и сравнивал только с оной. Так вот, tc по всем параметрам её превосходит. И размер файла меньше, и скорость больше. И ещё приятная мелочь, в gdbm len(db) первый раз тратил время. Т.е. она не хранит количество записей, а пересчитывает каждый раз. В tc в этом смысле всё отлично.&lt;br /&gt;&lt;br /&gt;Ну и ещё плюшки, которые пока не юзал. Есть серверный вариант. Кроме индекса по ключу есть бТри индексы, некая симпл-дб и поля фиксированной длины, последние должны быть мега-быстрыми на изменение.&lt;br /&gt;&lt;br /&gt;Ещё она может работать с таблицами в памяти, видел сравнение с мемКешд, чуточку уступает.&lt;br /&gt;&lt;br /&gt;Ссылки:&lt;br /&gt;- &lt;a href="http://1978th.net/"&gt;сам кабинет&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://github.com/rsms/tc"&gt;питон-обёртка&lt;/a&gt; которую юзаю. В ней, кстати не всё есть и это может оказаться не кстати. Например, тех же фиксед-лен-филдов нету. Но она не единственная.&lt;br /&gt;- &lt;a href="http://code.google.com/p/pykesto/"&gt;оодб на её основе&lt;/a&gt; написанная на питоне. Код приятный. Но под 2.6 к сожалению. В общем, только взял на заметку пока.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-7066289901029207525?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/FG8zPkxDdFo/tokyo-cabinet.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>1</thr:total><feedburner:origLink>http://imbolc.name/2009/12/tokyo-cabinet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-5520927655953487967</guid><pubDate>Tue, 15 Dec 2009 13:34:00 +0000</pubDate><atom:updated>2009-12-15T05:48:30.487-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">мысли</category><title>Жизнь рождает порядок, но порядок не рождает жизни</title><description>"&lt;span style="font-weight:bold;"&gt;Жизнь рождает порядок, но порядок не рождает жизни&lt;/span&gt;" - некоторое время назад прочитал и всплывает в голове регулярно. Уж сколько раз я пытался сделать что-то идеально. Тужился, тужился и вытужиива херь мертворожденную. А сделанное спонтанно живёт себе, само-структурируется со временем.&lt;br /&gt;&lt;br /&gt;Нет, не хочу я абсолютизировать. Конечно, бывает, и потуги проектирования приносят хороший результат. Но всё же, проявления озвученной мысли я вижу чаще. И ещё забавно, все поисковики обыскал, не могу найти, где прочитал это. Приснилось, что ли :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-5520927655953487967?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/itFBYqPOizs/blog-post_15.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>1</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post_15.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3266129795311501904.post-6588457999136406674</guid><pubDate>Tue, 15 Dec 2009 12:19:00 +0000</pubDate><atom:updated>2009-12-15T04:20:40.729-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">стишки</category><title /><description>Из пизды вприпрыг бежал&lt;br /&gt;Чтоб в могилке полежать&lt;br /&gt;Больше силится сожрать&lt;br /&gt;Но из жопы вылезает&lt;br /&gt;А потом опять бежал&lt;br /&gt;Но уже не убежать&lt;br /&gt;Это выглядит смешно&lt;br /&gt;Только он ещё не знает&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3266129795311501904-6588457999136406674?l=imbolc.name' alt='' /&gt;&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Imbolc/~3/kY4BuXjWcmA/blog-post.html</link><author>noreply@blogger.com (Imbolc)</author><thr:total>0</thr:total><feedburner:origLink>http://imbolc.name/2009/12/blog-post.html</feedburner:origLink></item></channel></rss>
