<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0"><channel><title>cornelius' weblog</title><link>http://andreyfedoseev.name/blog/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cornelius" /><description></description><language>ru</language><lastBuildDate>Thu, 29 Dec 2011 09:34:00 PST</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cornelius" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="cornelius" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>55.08</geo:lat><geo:long>61.3</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://cornelius.net.ru</link><url>http://www.gravatar.com/avatar.php?gravatar_id=75de77176dc22bb6f1970d45d2d3ba9d</url></image><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcornelius" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/cornelius" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fcornelius" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fcornelius" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fcornelius" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fcornelius" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><item><title>Как «очистить» память на Маке</title><link>http://andreyfedoseev.name/blog/post/61/kak-ochistit-pamyat-na-make-</link><category>mac</category><pubDate>Thu, 29 Dec 2011 09:34:00 PST</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/61/kak-ochistit-pamyat-na-make-</guid><description>&lt;p&gt;«Очистить» память на Маке очень просто. Надо открыть терминал, набрать команду &lt;strong&gt;&lt;code&gt;purge&lt;/code&gt;&lt;/strong&gt; и нажать Enter. Всё. Никакие дополнительные программы за $0.99 из App Store для этого не нужны.&lt;/p&gt;
&lt;p&gt;Для любопытных поясню, как это работает и для чего это нужно. Если вы откроете программу «Мониторинг системы», то увидите такую картину:&lt;/p&gt;
&lt;p class="align-center"&gt;&lt;img src="/media/upload/images/sysmon.png" alt="sysmon" width="774" height="779" /&gt;&lt;/p&gt;
&lt;p&gt;Обратите внимание на пункт «Неактивная память» (выделен синим цветом). Эта память, которая была занята каким-то ранее запущеным приложением. Если вы запустите это приложение снова, то, теоретически, оно запустится быстрее, если связанная с ним неактивная память не была занята другими программами. В реальной жизни я не вижу в этом особых преимуществ.&lt;/p&gt;
&lt;p&gt;Напротив, если у вас не хватает свободной памяти и при этом есть куча неактивной, то система начинает активно использовать своп, а это приводит к конкретным тормозам. Поэтому я регулярно очищаю память упомянутой выше командой.&lt;/p&gt;
&lt;p&gt;Чтобы не запускать каждый раз терминал, я сделал &lt;a href="http://cl.ly/3i0c363F0Y0z121T3g3x"&gt;расширение&lt;/a&gt; для &lt;a href="http://www.alfredapp.com/"&gt;Alfred&lt;/a&gt;, которое делает всё за меня.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Обновлено:&lt;/strong&gt; Судя по всему, для использования утилиты &lt;code&gt;purge&lt;/code&gt; у вас должен быть установлен Xcode. В качестве альтернативы в интернетах предлагают установить &lt;a href="http://www.titanium.free.fr/download.php"&gt;OnyX&lt;/a&gt;, но этот способ я не проверял.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=Nmh0m-f8-eU:VZNKPErjpUs:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=Nmh0m-f8-eU:VZNKPErjpUs:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=Nmh0m-f8-eU:VZNKPErjpUs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Как поменять значения кнопок на клавиатуре (на Маке)</title><link>http://andreyfedoseev.name/blog/post/60/kak-pomenyat-znacheniya-knopok-na-klaviatura-na-ma</link><category>mac</category><pubDate>Sat, 24 Dec 2011 06:54:00 PST</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/60/kak-pomenyat-znacheniya-knopok-na-klaviatura-na-ma</guid><description>&lt;p&gt;Когда у меня была писишная клавиатура, я активно пользовался цифровым блоком, который расположен справа. Но не для набора цифр, а для перемещения по тексту туда-сюда с помощью стрелок и кнопок Home/End и PgUp/PgDown. Ещё там были кнопки Enter и Del, так что можно было выполнять кучу разных действий, вообще не перемещая руку .&lt;/p&gt;
&lt;p&gt;Для мака я специально купил полноразмерную клавиатуру с цифровым блоком, но обнаружил, что там есть только цифры. Никаких стрелок и всего остального.&lt;/p&gt;
&lt;p class="align-center"&gt;&lt;img src="/media/upload/images/Apple20Aluminium20ISO20International20English.png" alt="Apple20Aluminium20ISO20International20English" width="242" height="341" /&gt;&lt;/p&gt;
&lt;p&gt;Целый год я бился, чтобы найти способ поменять значения этих кнопок и, наконец-то, нашёл его.&lt;/p&gt;
&lt;p&gt;Способ этот называется &lt;a href="http://pqrs.org/macosx/keyremap4macbook/index.html"&gt;KeyRemap4MacBook&lt;/a&gt; (пусть название вас не смущает, эта программа работает со всеми маками, а не только с макбуками). Сайт программы выглядит очень красноглазо – как раз то, что мне надо!&lt;/p&gt;
&lt;p&gt;Так выглядят окно настроек этой программки:&lt;/p&gt;
&lt;p class="align-center"&gt;&lt;img src="/media/upload/images/keyremap.png" alt="keyremap" width="782" height="769" /&gt;&lt;/p&gt;
&lt;p&gt;Кнопка «Reload XML», упоминания Emacs и X11 сразу выдают в ней продукт, написанный программистом для программистов, а значит для меня. На скриншоте видна куча предустановок, которые можно включать и выключать галочками. Кроме этого, можно создавать свои собственные настройки, которые описываются в специальном файле &lt;a href="http://pqrs.org/macosx/keyremap4macbook/xml.html"&gt;private.xml&lt;/a&gt;. С помощью этого файла можно переназначить вообще все кнопки.&lt;/p&gt;
&lt;p&gt;Формат этого файла достаточно простой. Значения кнопок в нём обозначаются специальными &lt;a href="https://github.com/tekezo/KeyRemap4MacBook/blob/master/src/core/bridge/keycode/data/KeyCode.data"&gt;ключевыми словами&lt;/a&gt;, либо цифровыми кодами. Для того, чтобы узнать цифровой код конкретной кнопки, в составе программы есть утилита EventViewer (вызывается через значок программы в панели меню). Эта утилита отображает код кнопки, которую вы нажимаете в данный момент. Причём код отображается в шестнадцатеричном виде, который вам придётся самостоятельно перевести в десятичный. Ну разве не прелесть?&lt;/p&gt;
&lt;p&gt;Ниже приведён мой файл private.xml.&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;    
  &lt;span class="nt"&gt;&amp;lt;item&amp;gt;&lt;/span&gt;      
    &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Fix Numpad&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;identifier&amp;gt;&lt;/span&gt;fixnumpad&lt;span class="nt"&gt;&amp;lt;/identifier&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Стрелки и кнопки Home,End,PgUp,PgDown --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_1, KeyCode::END&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_2, KeyCode::CURSOR_DOWN&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_3, KeyCode::PAGEDOWN&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_4, KeyCode::CURSOR_LEFT&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_6, KeyCode::CURSOR_RIGHT&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_7, KeyCode::HOME&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_8, KeyCode::CURSOR_UP&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_9, KeyCode::PAGEUP&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Точка на цифровом блоке работает как Del --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_DOT, KeyCode::FORWARD_DELETE&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- Сочетание Shift+0 на цифровом блоке работает как Command+V --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;autogen&amp;gt;&lt;/span&gt;--KeyToKey-- KeyCode::KEYPAD_0, ModifierFlag::SHIFT_L,
                          KeyCode::V, ModifierFlag::COMMAND_L&lt;span class="nt"&gt;&amp;lt;/autogen&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/item&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Как видите, различные модификаторы типа Shift, Control или Command тоже поддерживаются.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=6B6VK6T6DtA:z4AZCV1Bzig:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=6B6VK6T6DtA:z4AZCV1Bzig:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=6B6VK6T6DtA:z4AZCV1Bzig:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Об освобождении Навального</title><link>http://andreyfedoseev.name/blog/post/59/ob-osvobozhdenii-navalnogo</link><category>политика</category><pubDate>Tue, 20 Dec 2011 20:56:51 PST</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/59/ob-osvobozhdenii-navalnogo</guid><description>&lt;p&gt;Высказывания на политические темы я обычно делаю в &lt;a href="https://twitter.com/#!/a_fedoseev"&gt;Твиттере&lt;/a&gt;, но тут вопрос серьёзный и в 140 символов не влезет.&lt;/p&gt;
&lt;p&gt;Сегодня ночью освободили Алексея Навального. Мне из Челябинска плохо видно, что там на самом деле происходит, но, судя по &lt;a href="http://devo4ka-e.livejournal.com/8805.html"&gt;этому посту&lt;/a&gt;, чуть раньше в этот же день освободили и других людей, задержанных вместе с ним.&lt;/p&gt;
&lt;p&gt;Я не знаю имён этих людей. Никто их не знает. Но они являются такими же политзаключёнными, как и Алексей. То, что у них нет ста тысяч фолловеров, не делает их задержание и освобождение менее значимым, чем освобождение Алексея.&lt;/p&gt;
&lt;p&gt;Однако, я не вижу всеобщего ликования по поводу их освобождения. А по поводу Навального вижу. Вот, например, Леонид Волков &lt;a href="http://twitter.com/leonidvolkov/status/149254026544951296"&gt;пишет&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Доброе утро! На Урале - пятый час утра, мчусь в героически встречающую Навального столицу.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;И &lt;a href="http://twitter.com/leonidvolkov/status/149280471115759616"&gt;ещё&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Радуюсь беспричинно, как будто меня откуда-нибудь выпустили.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Мне кажется (во всяком случае, я на это надеюсь), что Алексей был бы рад, если бы вот так встречали не его, а тех самых простых людей. Если бы такие же простые, незнакомые им люди пришли, и встретили их так, как встретили Навального. Это и есть гражданское общество, в котором главной ценностью являются не лидеры, а обычные люди, помогающие друг другу.&lt;/p&gt;
&lt;p&gt;У нас уже есть культ одной личности. Скоро он закончится. Не хочется, чтобы ему смену пришёл культ другой личности, даже если эта личность – Навальный.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=fGuG2VEiRzg:MxKnsKck8YU:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=fGuG2VEiRzg:MxKnsKck8YU:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=fGuG2VEiRzg:MxKnsKck8YU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Afro Celt Sound System</title><link>http://andreyfedoseev.name/blog/post/58/afro-celt-sound-system</link><category>музыка</category><pubDate>Tue, 18 Oct 2011 04:04:00 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/58/afro-celt-sound-system</guid><description>&lt;p&gt;С группой Afro Celt Sound System я «знакомился» несколько раз. Первый раз их композицию я услышал кажется в конце 90-х в эфире радио «Маяк». Из той же передачи я узнал и название группы. Собственно, кроме необычного названия, я ничего про них не запомнил.&lt;/p&gt;
&lt;p&gt;При этом я, сам того не зная, каждый день слушал их музыку. Тут нужно пояснить. В 1998 году вышла игра &lt;a href="http://ru.wikipedia.org/wiki/Magic_and_Mayhem"&gt;Magic and Mayhem&lt;/a&gt;. Я достаточно много в неё рубился и мне очень нравился саундтрек. Я думаю, что именно тогда у меня зародилась тяга к так называемой «world music». И только лет пять-шесть спустя я узнал, что саундтрек к этой игре написали те самые афрокельты.&lt;/p&gt;
&lt;p&gt;Обстоятельно познакомиться с их творчеством мне удалось в 2005 или 2006 году. Одна из их песен оказалась на каком-то сборнике кельтской музыки, который давно лежал у меня в закромах. Вспомнив передачу на «Маяке», я выкачал все их альбомы и не пожалел.&lt;/p&gt;
&lt;p&gt;Я не слушаю их помногу, чтобы не приедались. Сейчас наступил один из тех моментов, когда я снова про них вспомнил, ну и решил рассказать вам.&lt;/p&gt;
&lt;p&gt;Послушать Afro Celt Sound System можно на &lt;a href="http://music.yandex.ru/#!/artist/90902"&gt;Яндекс.Музыке&lt;/a&gt;. Одна из моих любимых композиций — &lt;a href="http://music.yandex.ru/#!/track/452090/album/46841"&gt;Sure-As-Not/Sure-As-Knot&lt;/a&gt; (особенно ближе к концу).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Обновлено:&lt;/strong&gt; Нашёл &lt;a href="http://rutracker.org/forum/viewtopic.php?t=2067212"&gt;саундтрек к Magic &amp;amp; Mayhem&lt;/a&gt;. Некоторые композиции взяты из альбома 1996 года, а некоторые вошли в альбом 1999 года, который вышел после выпуска самой игры.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=Fc87ImlNalI:G3gUFNOYF74:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=Fc87ImlNalI:G3gUFNOYF74:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=Fc87ImlNalI:G3gUFNOYF74:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Фотки из Гоа, 2009 год</title><link>http://andreyfedoseev.name/blog/post/57/fotki-iz-goa-2009-god</link><category>путешествия</category><category>фотография</category><pubDate>Fri, 14 Oct 2011 10:39:54 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/57/fotki-iz-goa-2009-god</guid><description>&lt;p&gt;Выкладываю фотки из Гоа, где я был в 2009 году. Выкладываю просто так, чтобы было. Ну и чтобы потестить &lt;a href="http://fotoramajs.com/"&gt;Фотораму&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Хронологический порядок может быть нарушен. Подписей нет. Может быть потом появятся.&lt;/p&gt;
&lt;div class="fotorama"&gt;
&lt;a href="/media/cache/6a/fc/6afcbae92ae2b1495367fdb092840c41.jpg" title="image-1.jpg"&gt;&lt;img src="/media/cache/3e/61/3e61b1e2471e2a72247f00fe223987ec.jpg" alt="image-1.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/08/3c/083c72a1d443abb2d5d01d9674f989c1.jpg" title="image-2.jpg"&gt;&lt;img src="/media/cache/ea/7a/ea7afc4e9146ca758dbca468910d2410.jpg" alt="image-2.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/46/9c/469c468cc052f8c121fc2d20a34caa5c.jpg" title="image-3.jpg"&gt;&lt;img src="/media/cache/eb/8d/eb8da0cfe6be033f33b0eeb0ced54b02.jpg" alt="image-3.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/33/65/33653f1cb138e46e97a4fc9db9832031.jpg" title="image-4.jpg"&gt;&lt;img src="/media/cache/76/99/7699a748c16da08a5a626d4bba5b2565.jpg" alt="image-4.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/a6/ed/a6ed726c8e69a0a48a196f4260aeb796.jpg" title="image-5.jpg"&gt;&lt;img src="/media/cache/7e/bb/7ebba7727b67ae4223572a884593c31e.jpg" alt="image-5.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/fe/d3/fed323c85a87e08210f4614e37b8ff13.jpg" title="image-6.jpg"&gt;&lt;img src="/media/cache/f2/de/f2def088df5c9254d9603c3c3d3da66a.jpg" alt="image-6.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/d7/45/d745814058ec9c619d880d63a0494521.jpg" title="image-7.jpg"&gt;&lt;img src="/media/cache/28/6b/286b5883c3d0b4049ce02b595976b615.jpg" alt="image-7.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/d6/27/d627ca90a6bac8b80605d17342475f7c.jpg" title="image-8.jpg"&gt;&lt;img src="/media/cache/53/b2/53b254b4a58d55372ceea43f5bd30f37.jpg" alt="image-8.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/8a/09/8a09d7cba9776b6719d8d08d9fd6348c.jpg" title="image-9.jpg"&gt;&lt;img src="/media/cache/3e/35/3e3597285e5ba14701639fe28aa5c1ec.jpg" alt="image-9.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/06/ea/06eae5aa4721951136e85d9f289dea7d.jpg" title="image-10.jpg"&gt;&lt;img src="/media/cache/e8/04/e804637d00be654b09097e0109a13682.jpg" alt="image-10.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/63/56/635649eddb56378b0f4248fb6b5f6bff.jpg" title="image-11.jpg"&gt;&lt;img src="/media/cache/ff/5a/ff5aa08ab215a2f8dbacdd489246eb68.jpg" alt="image-11.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/96/86/96864eb1b038eaecfb1e956a2580fe9c.jpg" title="image-12.jpg"&gt;&lt;img src="/media/cache/35/6e/356ed46f7e606869fba88e58c7e1c6b3.jpg" alt="image-12.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/8f/93/8f9313c7a45cf5faf34108a6a261c311.jpg" title="image-13.jpg"&gt;&lt;img src="/media/cache/02/96/029657b2514ce732d4597ae06f11aa90.jpg" alt="image-13.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/b6/d8/b6d89c50d2e1ffcdd120d2a452d594be.jpg" title="image-14.jpg"&gt;&lt;img src="/media/cache/37/40/374060f724a99aeecf1657b1aab8fa03.jpg" alt="image-14.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/2f/38/2f3813d19318334c2bd8b3e851e556d7.jpg" title="image-15.jpg"&gt;&lt;img src="/media/cache/ca/25/ca258b1b2594c3ba77f84711f677db2c.jpg" alt="image-15.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/c6/82/c6829467ff4db1dcbce0176bb3099f1f.jpg" title="image-16.jpg"&gt;&lt;img src="/media/cache/d6/e7/d6e722819aaa9de4df166ac4731e260a.jpg" alt="image-16.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/d6/c7/d6c70c0e17b6643910053c693e1f8980.jpg" title="image-17.jpg"&gt;&lt;img src="/media/cache/66/77/66778a14cdc45a51762ed9303cadaa9a.jpg" alt="image-17.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/e4/ef/e4ef6305273c12e855e0ad3389c0dfad.jpg" title="image-18.jpg"&gt;&lt;img src="/media/cache/c8/42/c842fce1b92f9dc38fec9f538f1ce69c.jpg" alt="image-18.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f3/2e/f32e8b075f99ce879fc4ae70101ab477.jpg" title="image-19.jpg"&gt;&lt;img src="/media/cache/ec/48/ec48de331e309e4b5dd65b357aef53b7.jpg" alt="image-19.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/13/72/137217d92eacb8d77e8e7926eea90a1e.jpg" title="image-20.jpg"&gt;&lt;img src="/media/cache/7e/9a/7e9a85c2b34ce80740a3754b81073171.jpg" alt="image-20.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/5a/59/5a59b361474c90be2f0dd4f548c17c13.jpg" title="image-21.jpg"&gt;&lt;img src="/media/cache/9f/6c/9f6c958277ee847202fb3564f6e92043.jpg" alt="image-21.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/af/27/af27637cd7ff2f9da30e6cfbc1b1ec60.jpg" title="image-22.jpg"&gt;&lt;img src="/media/cache/ba/08/ba0830890bd3f9a6c013cff336045cdc.jpg" alt="image-22.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f5/c6/f5c65f7c070dd3545050dc8d26e4e0a7.jpg" title="image-23.jpg"&gt;&lt;img src="/media/cache/fd/30/fd30c5ef3387fcd9d4b892a4279f7db4.jpg" alt="image-23.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/dd/05/dd059a3274480a3b6096f5b4bf6976e8.jpg" title="image-24.jpg"&gt;&lt;img src="/media/cache/71/48/714807ab85ebaad96992f06b790a1bb7.jpg" alt="image-24.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/51/b9/51b9ddb4dc5fb1a6ae90050180ce3c14.jpg" title="image-25.jpg"&gt;&lt;img src="/media/cache/3a/fe/3afea45f34e288f10e10d581f5b6993b.jpg" alt="image-25.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f6/33/f633f4d5493a09557ec0a8105f726381.jpg" title="image-26.jpg"&gt;&lt;img src="/media/cache/86/ed/86edb261d03fcbff5ebc98f81e2ae7da.jpg" alt="image-26.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/83/be/83be84d5ca25b132a8f0f2dea1bcd2e7.jpg" title="image-27.jpg"&gt;&lt;img src="/media/cache/43/67/436718ff4b45f9777384b13c604f22f4.jpg" alt="image-27.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/8c/62/8c62286b426a264b2081069d328fa796.jpg" title="image-28.jpg"&gt;&lt;img src="/media/cache/ba/86/ba86cf45155fc28bb5c1df19be9aa483.jpg" alt="image-28.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/23/ff/23ff422f170b8359aeff6bafcdfeba7f.jpg" title="image-29.jpg"&gt;&lt;img src="/media/cache/f7/7c/f77c7bfa1916522e3d8f1aadd6a808d4.jpg" alt="image-29.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/bc/30/bc3034f620bac0b744dab3d1213c03be.jpg" title="image-30.jpg"&gt;&lt;img src="/media/cache/c0/d0/c0d03c0d330fd977e08f0d325016a6c4.jpg" alt="image-30.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/ae/e5/aee5c7575287d3f845fc23fa9fc1cedb.jpg" title="image-31.jpg"&gt;&lt;img src="/media/cache/12/5a/125ad29ecc340a5f87c00512b05ca244.jpg" alt="image-31.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/3d/93/3d936ed587b6ad18001d0a2731185050.jpg" title="image-32.jpg"&gt;&lt;img src="/media/cache/87/c9/87c9b8996b8bd8512f7e1c606077f57e.jpg" alt="image-32.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f8/40/f840ec62d52f7a6c0477a2d6a944a48f.jpg" title="image-33.jpg"&gt;&lt;img src="/media/cache/eb/ab/ebab3dae484f9e0e7e89519f506268bc.jpg" alt="image-33.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/8e/0e/8e0ec733e5e258e0c21294f42ec6e16f.jpg" title="image-34.jpg"&gt;&lt;img src="/media/cache/54/e7/54e77598009db599b8d47d3d574f48de.jpg" alt="image-34.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/36/cc/36ccf238d2711f219f26284fab5ef9e3.jpg" title="image-35.jpg"&gt;&lt;img src="/media/cache/ef/39/ef39773c9a39de8571597dc5a3b3453a.jpg" alt="image-35.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/d3/75/d375fd0db9f12c8d19709aafe5d40db8.jpg" title="image-36.jpg"&gt;&lt;img src="/media/cache/4e/21/4e21bcecb4947ae3717d0f6b0f6e8487.jpg" alt="image-36.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/6e/ba/6eba9f713df2b3b27172e238a3473245.jpg" title="image-37.jpg"&gt;&lt;img src="/media/cache/9a/95/9a958bd7559bd5e67f76e68a5f81098d.jpg" alt="image-37.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f8/91/f8910fff1b1f3398a0046a692419ca4c.jpg" title="image-38.jpg"&gt;&lt;img src="/media/cache/ef/df/efdfff2987322b72267cdbcec37d46b7.jpg" alt="image-38.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f6/f3/f6f30f91c5c284a0d44a97fa24c8e7cf.jpg" title="image-39.jpg"&gt;&lt;img src="/media/cache/52/a7/52a7ee48a6c31ef2ade802da103dae88.jpg" alt="image-39.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f5/89/f5891b69be4c868060329c341f7b89f9.jpg" title="image-40.jpg"&gt;&lt;img src="/media/cache/c2/23/c22309c11818a5187e7974371a2b654c.jpg" alt="image-40.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/5c/a2/5ca2a3006adf79b2abb2c2efb6597634.jpg" title="image-41.jpg"&gt;&lt;img src="/media/cache/bd/0a/bd0a1c77a27eb35fb25f6c35da77de87.jpg" alt="image-41.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/d6/55/d655772235db3dd5c4be23fa0016f1b9.jpg" title="image-42.jpg"&gt;&lt;img src="/media/cache/c2/1f/c21fb9600319f53aa088227c46769f94.jpg" alt="image-42.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/a9/43/a943ca831c8bfbae80c3c030f17f6f96.jpg" title="image-43.jpg"&gt;&lt;img src="/media/cache/86/1b/861b08474ac4d919eff296eaf6c67a5c.jpg" alt="image-43.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f1/c6/f1c6a900954305987863fab648c04ba0.jpg" title="image-44.jpg"&gt;&lt;img src="/media/cache/9f/3f/9f3f43725a393c83f83790f035fdb964.jpg" alt="image-44.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/a8/d4/a8d4e4117c68ea4d116c1a30aad833ba.jpg" title="image-45.jpg"&gt;&lt;img src="/media/cache/3d/6a/3d6ae0adee283180ea32bb63988a7db9.jpg" alt="image-45.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/24/b0/24b04e4b5c2dd41d2765973d06cb60a3.jpg" title="image-46.jpg"&gt;&lt;img src="/media/cache/ad/1b/ad1b32097517b54f47544a4c7949fc11.jpg" alt="image-46.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/c1/57/c157105e01a9e676be76b23b893c134f.jpg" title="image-47.jpg"&gt;&lt;img src="/media/cache/7e/78/7e78a43186220c2ce46f38b91cf1e6e9.jpg" alt="image-47.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/70/25/7025f12cdfb8b08e04a4405fc96b8216.jpg" title="image-48.jpg"&gt;&lt;img src="/media/cache/80/66/8066561bd03613e270b85d2c4bf5a950.jpg" alt="image-48.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/6f/ee/6fee92549b9b5b2430c3e911668312c0.jpg" title="image-49.jpg"&gt;&lt;img src="/media/cache/83/5d/835d96418207cef76228f7adfd74d078.jpg" alt="image-49.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/a0/3c/a03c9e86c2eb362c511f67ffc034df32.jpg" title="image-50.jpg"&gt;&lt;img src="/media/cache/48/91/489176b27cb1fb508036b5efcfe0e5c2.jpg" alt="image-50.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/70/7d/707db6e9f2664767a8a561511bd1f197.jpg" title="image-51.jpg"&gt;&lt;img src="/media/cache/b7/4a/b74a61a5e33b078443d0ec06bce0e320.jpg" alt="image-51.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/9e/23/9e23551ca056f8450f4910c7f815ad27.jpg" title="image-52.jpg"&gt;&lt;img src="/media/cache/7c/98/7c98742f80961327e2554da4ce07892e.jpg" alt="image-52.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/f7/1f/f71f1e18a3d6376db50ca76db5c70bac.jpg" title="image-53.jpg"&gt;&lt;img src="/media/cache/c0/3f/c03f8de7848641cd42f1653cc2e7750f.jpg" alt="image-53.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/64/93/64938bddcd82796a9de6479610ae5ff6.jpg" title="image-54.jpg"&gt;&lt;img src="/media/cache/82/7d/827d727206bb87c534858c5d575d321d.jpg" alt="image-54.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/33/7c/337c2db2959ed8298bbbda1b598f7a89.jpg" title="image-55.jpg"&gt;&lt;img src="/media/cache/94/e3/94e30c9e14f9762243d52a0ad098ae12.jpg" alt="image-55.jpg" width="32" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/2c/ce/2ccea0fa5648d6d10d849d490472de5e.jpg" title="image-56.jpg"&gt;&lt;img src="/media/cache/d0/70/d070a51f5dc91bf1de56880f14d426eb.jpg" alt="image-56.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/a0/a4/a0a4689dd6395657870d4ead765574d2.jpg" title="image-57.jpg"&gt;&lt;img src="/media/cache/bb/48/bb486038c8e8c8bcb60b87e084836be8.jpg" alt="image-57.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/d0/9c/d09c345bc9b60dfbf2685165df713cbf.jpg" title="image-58.jpg"&gt;&lt;img src="/media/cache/3c/bb/3cbb29841aee3b97602dfa6c5a9597fc.jpg" alt="image-58.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/61/5d/615d8091559320502f255ed07b84133b.jpg" title="image-59.jpg"&gt;&lt;img src="/media/cache/b8/b3/b8b359ba8cacb7ebfab94f91e63e85b1.jpg" alt="image-59.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/14/c4/14c49c49e096ba4bd85a90d9058b8ab8.jpg" title="image-60.jpg"&gt;&lt;img src="/media/cache/07/f6/07f6ad568452c3f152edc9cb0a99572b.jpg" alt="image-60.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/aa/75/aa75607ad34e57cbd57003f2f79ec20a.jpg" title="image-61.jpg"&gt;&lt;img src="/media/cache/92/4b/924bef9994e9e53983fe864051725202.jpg" alt="image-61.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/0b/2e/0b2ecd446982006cb8dac36fbf23c0ae.jpg" title="image-62.jpg"&gt;&lt;img src="/media/cache/d2/6e/d26ecfc39c07a86cad3105aa34c0a9cf.jpg" alt="image-62.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;a href="/media/cache/05/4a/054a1d1729a7937e8b9b8f1c81a447b1.jpg" title="image-63.jpg"&gt;&lt;img src="/media/cache/37/97/379748816efc47ace8d518951011c1d7.jpg" alt="image-63.jpg" width="72" height="48" /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=bYJJUKMTuHE:lESQ59Fiwd0:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=bYJJUKMTuHE:lESQ59Fiwd0:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=bYJJUKMTuHE:lESQ59Fiwd0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Сниппеты #1</title><link>http://andreyfedoseev.name/blog/post/56/snippets-1</link><category>django</category><category>python</category><pubDate>Fri, 23 Sep 2011 06:45:00 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/56/snippets-1</guid><description>&lt;p&gt;Время от времени буду выкладывать небольшие кусочки кода собственного сочинения. Буду рад, если кому-то они пригодятся. И ещё больше рад, если кто-то придумает, как их улучшить. Сегодня таких кусочков будет два.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Номер раз&lt;/strong&gt;. Дано: Django и модель с несколькими текстовыми полями. Надо сделать простейший поиск по этим полям. При этом достаточно, чтобы искомый текст содержался хотя бы в одном поле.
И самое интересное — список полей для поиска заранее не определён, он может варьироваться.&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;django.db&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Model&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;field_1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;field_2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;field_3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CharField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Поиск по одному полю сделать просто:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;MyModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;field_1__icontains&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;search_term&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;В случае с несколькими полями их нужно соединить оператором &lt;code&gt;OR&lt;/code&gt;. В Django это делается так:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;MyModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;field_1__icontains&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;search_term&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;field_2__icontains&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;search_term&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;А что делать, если полей много и они заранее не известны? Например, названия полей хранятся в списке:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;fields_to_search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;field_1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;field_2&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;field_3&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Я сделал вот так:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3
4
5
6
7
8&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;operators&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;or_&lt;/span&gt;

&lt;span class="n"&gt;MyModel&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;objects&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nb"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;or_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;models&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Q&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;__icontains&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt;
        &lt;span class="n"&gt;fields_to_search&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Номер два&lt;/strong&gt;. Надо узнать дату первого дня текущей недели. Например, сегодня пятница, 23 сентября 2011 года. В этом случае, какое число было в понедельник?&lt;/p&gt;
&lt;p&gt;Я сделал вот так:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;calendar&lt;/span&gt;

&lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;cal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;calendar&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Calendar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;# Или, если неделя начинатеся с воскресенья&lt;/span&gt;
&lt;span class="c"&gt;# cal = calendar.Calendar(6)&lt;/span&gt;

&lt;span class="n"&gt;week_start_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;  &lt;span class="c"&gt;# Сюда мы сохраним искомую дату&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;week&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cal&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;monthdatescalendar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;week&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;week_start_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;week&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=afFuP752tbc:JvoOHTHZ9ec:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=afFuP752tbc:JvoOHTHZ9ec:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=afFuP752tbc:JvoOHTHZ9ec:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Про технику безопасности</title><link>http://andreyfedoseev.name/blog/post/55/pro-tehniku-bezopasnosti</link><category>роисся вперде!</category><pubDate>Mon, 12 Sep 2011 09:06:32 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/55/pro-tehniku-bezopasnosti</guid><description>&lt;p&gt;&lt;img src="/media/upload/images/transport-9.jpeg" alt="transport-9" width="530" height="298" /&gt;&lt;/p&gt;
&lt;p&gt;Давно у меня зрел пост на эту тему, в частности, про ремни безопасности. И пока он зрел, uncle_chelya уже всё &lt;a href="http://uncle-chelya.livejournal.com/355317.html"&gt;написал за меня&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;К этому и добавить-то вроде нечего, но я добавлю.&lt;/p&gt;
&lt;p&gt;Менталитет снижения расходов свойственен, как мне кажется, не только русским. В самом желании снизить расходы нет ничего плохого, оно вполне естественно и присуще всем. А клин надо клином вышибать. Штраф за перевозку пассажиров стоя должен быть ощутимо больше выручки за их провоз. Гаишник, выписывающий штраф, должен быть уверен, что за взятку его посадят. Ну и так далее. Главное, чтобы наказание было неотвратимым.&lt;/p&gt;
&lt;p&gt;Где-то такая система более-менее работает (уверен, что идеально она не работает нигде). У нас она работает плохо. Но есть места. где всё гораздо хуже, см. &lt;a href="http://www.google.ru/search?q=%D0%B8%D0%BD%D0%B4%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B9+%D0%BF%D0%BE%D0%B5%D0%B7%D0%B4&amp;amp;tbm=isch"&gt;КДПВ&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=JFjnZk76mJM:GWi3DIm_fCM:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=JFjnZk76mJM:GWi3DIm_fCM:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=JFjnZk76mJM:GWi3DIm_fCM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Python: поиск элемента в списке и множестве</title><link>http://andreyfedoseev.name/blog/post/54/in-list-vs-set</link><category>python</category><pubDate>Fri, 02 Sep 2011 01:12:14 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/54/in-list-vs-set</guid><description>&lt;p&gt;А вы знали, что в Питоне операция &lt;code&gt;in&lt;/code&gt; для множеств (&lt;code&gt;set&lt;/code&gt;) работает намного быстрее, чем для списков (&lt;code&gt;list&lt;/code&gt;)? &lt;small&gt;Да, я слоупок.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Julian Andres Klode приводит &lt;a href="http://juliank.wordpress.com/2008/04/29/python-speed-x-in-list-vs-x-in-set/"&gt;пример&lt;/a&gt; у себя в блоге:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nv"&gt;%timeit&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="n"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;best&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;31.8&lt;/span&gt; &lt;span class="n"&gt;ms&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;

&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nv"&gt;%timeit&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="mi"&gt;10000000&lt;/span&gt; &lt;span class="n"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;best&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;98.6&lt;/span&gt; &lt;span class="n"&gt;ns&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;В случае со списком операция выполняется за 31,8 миллисекунды, а для множества результат составляет 98,6 наносекунд. Нанотехнологии в действии!&lt;/p&gt;
&lt;p&gt;От себя добавлю, что в реальной жизни скорее всего придётся конвертировать список в множество, а на это тоже требуется время:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nv"&gt;%timeit&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="n"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;best&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;60.2&lt;/span&gt; &lt;span class="n"&gt;ms&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;В данном случае на преобразование требуется 60,2 мс. Это значит, что использование множества здесь имеет смысл, только если нужно произвести поиск не менее двух раз.&lt;/p&gt;
&lt;p&gt;Скорость поиска в списке также зависит от того, какой именно элемент нужно найти. В своём примере Julian рассматривает элемент, который расположен в самом конце.&lt;/p&gt;
&lt;p&gt;А что если он расположен в начале?&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nv"&gt;%timeit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="mi"&gt;10000000&lt;/span&gt; &lt;span class="n"&gt;loops&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;best&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;107&lt;/span&gt; &lt;span class="n"&gt;ns&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;loop&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Не сильно отличается от множества.&lt;/p&gt;
&lt;p&gt;Но, тем не менее, я всё-таки рекомендую использовать множества, если требуется многократно производить поиск по произвольному списку.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=fjAACDabk4Q:bVnXGhregx8:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=fjAACDabk4Q:bVnXGhregx8:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=fjAACDabk4Q:bVnXGhregx8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Как контролировать расходы</title><link>http://andreyfedoseev.name/blog/post/49/kak-kontrolirovat-rashodyi</link><category>lifehack</category><pubDate>Wed, 10 Aug 2011 06:55:00 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/49/kak-kontrolirovat-rashodyi</guid><description>&lt;p&gt;Решил я подкопить деньжат. А чтобы деньги лучше копились, надо меньше их тратить. С этим у меня всегда была проблема — очень часто я импульсивно покупаю всякую фигню, тем более, что финансы позволяют.&lt;/p&gt;
&lt;p&gt;Попытки себя ограничивать результата не давали. Поэтому я решил пойти на самообман. А точнее договориться сам с собой. Смысл договора заключается в том, чтобы установить ежемесячный лимит трат и не превышать его. Это позволяет иногда всё-таки покупать фигню, но делать это более разумно.&lt;/p&gt;
&lt;p&gt;Важно то, что сумма, оставшаяся с предыдущего месяца переходит на следующий. Таким образом можно копить деньги на дорогую фигню. А ещё есть шанс, что в процессе накопления вообще расхочется её покупать.&lt;/p&gt;
&lt;p&gt;Чтобы мониторить расходы есть куча разных программ. Я уже пробовал использовать многие из них и остановился на никакой. Тем более что мне не надо планировать семейный бюджет с учётом выплат по ипотеке, надо просто считать расходы на фигню. Для этого подойдёт обычная таблица.&lt;/p&gt;
&lt;p&gt;Вот такая таблица получилась у меня:&lt;/p&gt;
&lt;p&gt;&lt;img src="/media/upload/images/%D0%A0%D0%B0%D1%81%D1%85%D0%BE%D0%B4%D1%8B_%D0%BD%D0%B0_%D1%84%D0%B8%D0%B3%D0%BD%D1%8E.png" alt="Расходы на фигню" width="515" height="375" /&gt;&lt;/p&gt;
&lt;p&gt;Напротив каждого месяца надо вписывать величину установленного лимита, например, 5 000 р. Внизу показана сумма, которую можно потратить прямо сейчас (вычисляется автоматически как сумма всех чисел в колонке). Ну и, соответственно, надо вписывать расходы.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=fizJwUGwGnE:0eQTHQ-ywm8:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=fizJwUGwGnE:0eQTHQ-ywm8:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=fizJwUGwGnE:0eQTHQ-ywm8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Про мысли, деревья и малограмотных людей</title><link>http://andreyfedoseev.name/blog/post/47/pro-myisli-derevya-i-malogramotnyih-lyudej</link><category>идиоты</category><category>русский язык</category><pubDate>Sat, 06 Aug 2011 08:31:46 PDT</pubDate><guid isPermaLink="true">http://andreyfedoseev.name/blog/post/47/pro-myisli-derevya-i-malogramotnyih-lyudej</guid><description>&lt;p&gt;&lt;img src="/media/upload/images/thoughts-and-trees.png" alt="thoughts-and-trees" width="339" height="96" /&gt;&lt;/p&gt;
&lt;p&gt;Меня разражает, когда кто-нибудь говорит «растекаться мыслью по древу». Я уверен, что человек, произнесший эту фразу, не сможет объяснить её смысл. И я могу его понять, ведь в этой фразе нет никакого смысла.&lt;/p&gt;
&lt;p&gt;Откуда же она взялась? Взялась она из школьной программы, а конкретно — из «Слова о полку Игореве».&lt;/p&gt;
&lt;p&gt;Вот что говорит по этому поводу &lt;a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B2%D0%BE_%D0%BE_%D0%BF%D0%BE%D0%BB%D0%BA%D1%83_%D0%98%D0%B3%D0%BE%D1%80%D0%B5%D0%B2%D0%B5"&gt;Википедия&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Выражение «растѣкашется мыслію по древу, сѣрымъ вълкомъ по земли, шизымъ орломъ подъ облакы» смущало многих исследователей, так как было непонятно, как мысль может двигаться по дереву. В 1833 году Н. А. Полевой предположил, что под «мыслію» имеется в виду какой-нибудь зверь или птица, так как в тексте имеется явная постепенность сравнений: облака, земля, дерево — орёл, волк, мысль. Ряд переводчиков, согласились с ним и заменяли слово «мысль» на «соловей» (Н. Павлов, А. Скульский), «рысь» (Корш) или «бусый горностай» (Андриевский), однако данные замены, по сути, являлись произвольными. В 1854 году Н. П. Корелкин предположил, что фраза «растѣкашеся мыслію по древу» является опиской, в тексте, по его гипотезе, имеется в виду не «мысль», а «мысь». Мысью же, по словам Н. П. Корелкина, в Опочецком уезде Псковской губернии называют белку, или векшу. Соответственно, метафора становится логичной — волк как символ земли, орёл как символ неба, а белка как символ деревьев, связывающих небо с землёю. Большинство исследователей «Слова о полку Игореве» согласились с Корелкиным и в дальнейшем обсуждали лишь какая именно белка имеется в виду и не может ли слово «мысь» означать также, например, «мышь».&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Теперь стало понятнее? Люди аж в 1854 году поняли, что речь тут идёт про белку. Ну или на худой конец про мышь. А в 21 веке выпускники средних школ, многие из которых имеют высшее образование, продолжают нести бред про мысли на деревьях.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=ZYP_rFapiuk:SrD8YTh3f_Y:ozPqQDaSF7U"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?i=ZYP_rFapiuk:SrD8YTh3f_Y:ozPqQDaSF7U" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/cornelius?a=ZYP_rFapiuk:SrD8YTh3f_Y:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/cornelius?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item></channel></rss>

