<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Хешик &#187; Без рубрики</title>
	<atom:link href="http://hash.naikonsoft.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://hash.naikonsoft.com</link>
	<description>Хеш про</description>
	<lastBuildDate>Fri, 19 Mar 2010 12:35:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>django-sendmail</title>
		<link>http://hash.naikonsoft.com/2010/03/19/django-sendmail/</link>
		<comments>http://hash.naikonsoft.com/2010/03/19/django-sendmail/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 12:35:29 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[sendmail]]></category>
		<category><![CDATA[мысли]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=175</guid>
		<description><![CDATA[Не используйте email backend в django, если конечно вам достаточно smtp. А если нет? Вот я лучше прибегну к серверной команде sendmail для отправки почты, чем буду использовать smtp для приложения.
При этом подходе мы получаем возможность очереди отправки, нам не надо писать отдельный скрипт и ложить его в крон задачу. Улучшается производительность системы за счет [...]]]></description>
			<content:encoded><![CDATA[<p>Не используйте email backend в django, если конечно вам достаточно smtp. А если нет? Вот я лучше прибегну к серверной команде sendmail для отправки почты, чем буду использовать smtp для приложения.</p>
<p>При этом подходе мы получаем возможность очереди отправки, нам не надо писать отдельный скрипт и ложить его в крон задачу. Улучшается производительность системы за счет того, что операций запроса, авторизации и отправки прямо из приложения нет. Вместо этого весь контент писем идет сплошным текстом к созданному sendmail каналу (pipe).</p>
<p>Приведу очень простой пример:</p>
<p><code>from django.conf import settings<br />
from django.utils.encoding import smart_str<br />
import os</p>
<p>def sendmail(to, subject, body):<br />
    p = os.popen('/usr/bin/sendmail -t', 'w')<br />
    p.write("MIME-Version: 1.0\n")<br />
    p.write("Content-Type: text/html;charset=utf-8\n")<br />
    p.write("To: %s\n" % to)<br />
    p.write(smart_str("From: %s\n" % settings.EMAIL_FROM))<br />
    p.write(smart_str("Subject: %s\n" % subject))<br />
    p.write("\n")<br />
    p.write(smart_str(body))<br />
    p.close()</code></p>
<p>Такой скрипт не будет работать на windows, я не видел пакета sendmail в этой операционной системе. Да и я не встречал серверов Windows, на которых бы хостились django приложения.</p>
<p>Я не написал чего мы лишаемся при таком подходе. Мы не можем определить какие письма были успешно доставлены, а какие нет.</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2010/03/19/django-sendmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>django теги для jccompressor</title>
		<link>http://hash.naikonsoft.com/2010/03/18/django-tags-for-jccompressor/</link>
		<comments>http://hash.naikonsoft.com/2010/03/18/django-tags-for-jccompressor/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 18:34:40 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[сжатие скриптов]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=172</guid>
		<description><![CDATA[Буквально пару дней назад я выложил пакет с набором классов, которые позволяют сжимать скрипты в один файл, используя yui или google closure compiler. Продолжая развитие темы хочу сообщить что в пакете теперь присутствуют теги для django приложений. Я не буду расписывать как их использовать, это достаточно расписано в README файле репозитория. Вы еще не знаете [...]]]></description>
			<content:encoded><![CDATA[<p>Буквально пару дней назад я выложил пакет с набором классов, которые позволяют сжимать скрипты в один файл, используя yui или google closure compiler. Продолжая развитие темы хочу сообщить что в пакете теперь присутствуют теги для django приложений. Я не буду расписывать как их использовать, это достаточно расписано в README файле репозитория. Вы еще не знаете в каком?</p>
<blockquote><p>git@github.com:hash3g/jccompressor.git</p></blockquote>
<p>Пользуйтесь на здоровье :)</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2010/03/18/django-tags-for-jccompressor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jabber клиент для Emacs</title>
		<link>http://hash.naikonsoft.com/2010/03/18/jabber-client-for-emacs/</link>
		<comments>http://hash.naikonsoft.com/2010/03/18/jabber-client-for-emacs/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 11:42:54 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[jabber]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=166</guid>
		<description><![CDATA[Нашел замечательный плагин для emacs, который позволяет легко и непринужденно посылать сообщения в мой jabber аккаунт. Конечно одним jabber я не ограничился и в основном использую google talk для разговора с собеседниками.
Для установки следует скачать пакет с официального сайта.
Итак вы скачали и распаковали архив, приступим к внедрению плагина в наш любимый редактор. 
Я люблю, когда [...]]]></description>
			<content:encoded><![CDATA[<p>Нашел замечательный плагин для emacs, который позволяет легко и непринужденно посылать сообщения в мой jabber аккаунт. Конечно одним jabber я не ограничился и в основном использую google talk для разговора с собеседниками.</p>
<p>Для установки следует скачать пакет с официального <a href="http://emacs-jabber.sourceforge.net/">сайта</a>.</p>
<p>Итак вы скачали и распаковали архив, приступим к внедрению плагина в наш любимый редактор. </p>
<blockquote><p>Я люблю, когда все плагины находятся в директории ~/.emacs.d и считаю это правильным, но ничего не мешает вам ложить его куда угодно.</p></blockquote>
<p>В ваш .emacs файл пропишем строки</p>
<p><code>(add-to-list 'load-path "/path/to/your/emacs-jabber")<br />
(require 'jabber-autoloads)</code></p>
<p>Обычно при внедрении нового плагина я рестартую редактор, но если вы знаете, как применить изменения, не делая перезапуска буду рад услышать. Итак редактор перезапущен и следующий шаг это добавить свои jabber-аккаунты.</p>
<p>M-x jabber-customize</p>
<p>Для настройки google talk аккаунта я использовал такие данные:<br />
<code>JID: GmailID<br />
Network server: talk.google.com<br />
Port: 5223<br />
Connection type: Legacy SSL/TLS</code></p>
<p>Все, осталось сохранить параметры и выполнить M-x jabber-connect для одного аккаунта или M-x jabber-connect-all, если вы хотите активировать все заведенные аккаунты.</p>
<blockquote><p>Чтобы при запуске постоянно не коннектится к jabber я прописал в самый конец своего .emacs строку (jabber-connect-all)</p></blockquote>
<p>Приятного вам общения через ваш любимый редактор :)</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2010/03/18/jabber-client-for-emacs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>python js/css compressor</title>
		<link>http://hash.naikonsoft.com/2010/03/16/python-js-css-compressor/</link>
		<comments>http://hash.naikonsoft.com/2010/03/16/python-js-css-compressor/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 16:34:28 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[сжатие скриптов]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=163</guid>
		<description><![CDATA[В наших проектах всегда используется n-ное число клиентского кода, как js, так и css. Но на боевые сервера данные скрипты должны попадать сжатыми каким-нибудь компрессором. Каждый раз при обновлении css, добавлении нового js функционала приходится пересжимать скрипты по новой и отдавать клиенту. Это не самый лучший вариант. Поэтому был написан класс, который собирал все скрипты [...]]]></description>
			<content:encoded><![CDATA[<p>В наших проектах всегда используется n-ное число клиентского кода, как js, так и css. Но на боевые сервера данные скрипты должны попадать сжатыми каким-нибудь компрессором. Каждый раз при обновлении css, добавлении нового js функционала приходится пересжимать скрипты по новой и отдавать клиенту. Это не самый лучший вариант. Поэтому был написан класс, который собирал все скрипты в один файл и травил его компоновщику. На стороне клиента оставалось только сделать апдейт скриптов и изменить версию файла и компоновщик сам пересобирал и сжимал скрипты через yuicompressor.</p>
<p>Функционал будет постепенно дополняться. Так к примеру в планах внедрить разбиение скриптов по размеру (IE имеет привычку не грузить css файл полностью если он превышает определенный размер). </p>
<p>Самую последнюю версию можно забрать с github&#8217;а<br />
<code><br />
git clone git@github.com:hash3g/jccompressor.git<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2010/03/16/python-js-css-compressor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Дайте гостю печеньку, он тоже ее достоин!</title>
		<link>http://hash.naikonsoft.com/2009/12/12/give-guest-the-cookies/</link>
		<comments>http://hash.naikonsoft.com/2009/12/12/give-guest-the-cookies/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 17:40:54 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[code refactoring]]></category>
		<category><![CDATA[cookies]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/2009/12/12/%d0%b4%d0%b0%d0%b9%d1%82%d0%b5-%d0%b3%d0%be%d1%81%d1%82%d1%8e-%d0%bf%d0%b5%d1%87%d0%b5%d0%bd%d1%8c%d0%ba%d1%83-%d0%be%d0%bd-%d1%82%d0%be%d0%b6%d0%b5-%d0%b5%d0%b5-%d0%b4%d0%be%d1%81%d1%82%d0%be%d0%b8/</guid>
		<description><![CDATA[Допустим, у вас есть модель, которая хранит состояние в базе данных, данная модель связана с пользователями. Но как быть в случае неавторизованного пользователя? Хранить состояние в кукисах браузера. Для этого пришлось бы пробежаться по модулю и ставить проверки, добавлять новые методы, переменные. В итоге код превратится в сплошной if… else, а оно нам надо? «А [...]]]></description>
			<content:encoded><![CDATA[<p>Допустим, у вас есть модель, которая хранит состояние в базе данных, данная модель связана с пользователями. Но как быть в случае неавторизованного пользователя? Хранить состояние в кукисах браузера. Для этого пришлось бы пробежаться по модулю и ставить проверки, добавлять новые методы, переменные. В итоге код превратится в сплошной if… else, а оно нам надо? «А что делать?» — спросите вы. (Надеюсь что не спросите =) Без паники! Я, как-а-вот, ваш спаситель, расскажу и покажу на выход.</p>
<p><cut><br />
Выход — сделать фейковую модель и орудовать ею, как и с обычной джанговской моделью.</p>
<p>Пример</p>
<p><code><br />
class UserBasket(models.Model):<br />
	user = models.ForeignKey(User)<br />
	shakedtimes = models.IntegerField(default = 0)<br />
</code></p>
<p>Тогда нашей фейковой моделью будет</p>
<p><code><br />
class AnonymousBasket(object):</p>
<p>	def __init__(self, request, response):<br />
		self.shakedtimes = request.COOKIES.get('sk_times', '0')<br />
		self.response = response<br />
</code></p>
<p>Теперь в классе можно просто в одном месте добавить проверку на авторизованного пользователя. Но помимо получения значений, рабочий модуль может выполнить операцию сохранения. С моделью то ясно, жанга все сделает за нас, а вот фейковое сохранение надо прописать ручками.</p>
<p><code><br />
def save(self):<br />
	self.response.set_cookie('sk_times', self.shakedtimes)<br />
</code></p>
<p>Красяво? Думаю да. Минусом выступает то что в фейковую модель необходимо передать объект запроса и ответа, но как вы собрались считывать и сохранять куки, а? А? То-то же.</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2009/12/12/give-guest-the-cookies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>животный инстинкт</title>
		<link>http://hash.naikonsoft.com/2009/07/30/%d0%b6%d0%b8%d0%b2%d0%be%d1%82%d0%bd%d1%8b%d0%b9-%d0%b8%d0%bd%d1%81%d1%82%d0%b8%d0%bd%d0%ba%d1%82/</link>
		<comments>http://hash.naikonsoft.com/2009/07/30/%d0%b6%d0%b8%d0%b2%d0%be%d1%82%d0%bd%d1%8b%d0%b9-%d0%b8%d0%bd%d1%81%d1%82%d0%b8%d0%bd%d0%ba%d1%82/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 12:15:36 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=141</guid>
		<description><![CDATA[На балконе нашего здания, где мы находимся всегда стояла баночка для окурков, ну чтобы не сорить. Сегодня заметил что баночки-то нет и люди выходящие покурить бросают окурки на то место, где она была раньше. На такое наблюдать конечно забавно. Извините, а если у них в сортире убрать унитаз, они продолжуть срать в то место?
]]></description>
			<content:encoded><![CDATA[<p>На балконе нашего здания, где мы находимся всегда стояла баночка для окурков, ну чтобы не сорить. Сегодня заметил что баночки-то нет и люди выходящие покурить бросают окурки на то место, где она была раньше. На такое наблюдать конечно забавно. Извините, а если у них в сортире убрать унитаз, они продолжуть срать в то место?</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2009/07/30/%d0%b6%d0%b8%d0%b2%d0%be%d1%82%d0%bd%d1%8b%d0%b9-%d0%b8%d0%bd%d1%81%d1%82%d0%b8%d0%bd%d0%ba%d1%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Вечером на Хрещатике</title>
		<link>http://hash.naikonsoft.com/2009/07/27/%d0%b2%d0%b5%d1%87%d0%b5%d1%80%d0%be%d0%bc-%d0%bd%d0%b0-%d1%85%d1%80%d0%b5%d1%89%d0%b0%d1%82%d0%b8%d0%ba%d0%b5/</link>
		<comments>http://hash.naikonsoft.com/2009/07/27/%d0%b2%d0%b5%d1%87%d0%b5%d1%80%d0%be%d0%bc-%d0%bd%d0%b0-%d1%85%d1%80%d0%b5%d1%89%d0%b0%d1%82%d0%b8%d0%ba%d0%b5/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 07:16:28 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=139</guid>
		<description><![CDATA[Киев замечательный город. Где еще можно увидеть в центре большого города гитариста, который поет Сплина, и кучу молодых людей, которые громко ему подпевали? И все это почти в 9 часов вечера.
Гитаристу просто огромный респект!
]]></description>
			<content:encoded><![CDATA[<p>Киев замечательный город. Где еще можно увидеть в центре большого города гитариста, который поет Сплина, и кучу молодых людей, которые громко ему подпевали? И все это почти в 9 часов вечера.</p>
<p>Гитаристу просто огромный респект!</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2009/07/27/%d0%b2%d0%b5%d1%87%d0%b5%d1%80%d0%be%d0%bc-%d0%bd%d0%b0-%d1%85%d1%80%d0%b5%d1%89%d0%b0%d1%82%d0%b8%d0%ba%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gnome Drag&#8217;n Drop</title>
		<link>http://hash.naikonsoft.com/2009/07/20/gnome-dragn-drop/</link>
		<comments>http://hash.naikonsoft.com/2009/07/20/gnome-dragn-drop/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 18:40:14 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=137</guid>
		<description><![CDATA[Случайно обнаружил, что окна в оболочке Gnome можно тягать, зажав кнопку Alt и перемещая мышь.
]]></description>
			<content:encoded><![CDATA[<p>Случайно обнаружил, что окна в оболочке Gnome можно тягать, зажав кнопку Alt и перемещая мышь.</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2009/07/20/gnome-dragn-drop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HFS+ в Linux</title>
		<link>http://hash.naikonsoft.com/2009/07/20/hfs-%d0%b2-linux/</link>
		<comments>http://hash.naikonsoft.com/2009/07/20/hfs-%d0%b2-linux/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 12:05:35 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[hfs+]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mac osx]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=135</guid>
		<description><![CDATA[Буквально на днях приобрел для себя внешний винчестер с расчетом на то, что в основном я этот винчестер буду в большинстве своем использовать под MacBook.
Другим для меня свойством было то что интернет у меня дома Волевский и на нем много не скачаешь. Поэтому подключать винт как минимум необходимо было и на моей рабочей машине, на [...]]]></description>
			<content:encoded><![CDATA[<p>Буквально на днях приобрел для себя внешний винчестер с расчетом на то, что в основном я этот винчестер буду в большинстве своем использовать под MacBook.<br />
Другим для меня свойством было то что интернет у меня дома Волевский и на нем много не скачаешь. Поэтому подключать винт как минимум необходимо было и на моей рабочей машине, на которой стоит Ubuntu. И тут натолкнулся на грабли.</p>
<p>Первым делом отформатировал винчестер на HFS через дисковую утилиту. Отформатировал не подумавши с поддержкой журналирования, а драйвер на линуксе журналирование не поддерживал. Пришлось повторно очищать под обычный HFS (Mac OS Extended)</p>
<p>Второе стало то что после этого писать получалось с линукса только пользователю root. Починил это добавив запись в fstab файл:</p>
<p><code>/dev/sdb12      /home/hash3g/data       auto rw,exec,auto,users 0 </code></p>
<p>После этого перемонтировал диск и спокойно смог писать уже в линуксе.</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2009/07/20/hfs-%d0%b2-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Книги? да!</title>
		<link>http://hash.naikonsoft.com/2009/07/17/%d0%ba%d0%bd%d0%b8%d0%b3%d0%b8-%d0%b4%d0%b0/</link>
		<comments>http://hash.naikonsoft.com/2009/07/17/%d0%ba%d0%bd%d0%b8%d0%b3%d0%b8-%d0%b4%d0%b0/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 23:36:16 +0000</pubDate>
		<dc:creator>Виталий Волков</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://hash.naikonsoft.com/?p=133</guid>
		<description><![CDATA[Книги читать полезно, они развивают сознание, расширяют твой кругозор, вот мне лично стыдно за то, что я не прочитал Властелина Колец еще до его премьеры в кино. Каюсь.
]]></description>
			<content:encoded><![CDATA[<p>Книги читать полезно, они развивают сознание, расширяют твой кругозор, вот мне лично стыдно за то, что я не прочитал Властелина Колец еще до его премьеры в кино. Каюсь.</p>
]]></content:encoded>
			<wfw:commentRss>http://hash.naikonsoft.com/2009/07/17/%d0%ba%d0%bd%d0%b8%d0%b3%d0%b8-%d0%b4%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
