<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Vladimir Prudnikov</title>
	
	<link>http://prudnikov.com</link>
	<description>&lt;!-- Еще один блог --&gt;</description>
	<pubDate>Thu, 18 Dec 2008 15:25:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/prudnikov" type="application/rss+xml" /><item>
		<title>Как скрыть код скрипта на Python для последующей его продажи.</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/488498883/%d0%9a%d0%b0%d0%ba-%d1%81%d0%ba%d1%80%d1%8b%d1%82%d1%8c-%d0%ba%d0%be%d0%b4-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0-%d0%bd%d0%b0-python-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d1%83.html</link>
		<comments>http://prudnikov.com/2008/12/%d0%9a%d0%b0%d0%ba-%d1%81%d0%ba%d1%80%d1%8b%d1%82%d1%8c-%d0%ba%d0%be%d0%b4-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0-%d0%bd%d0%b0-python-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d1%83.html#comments</comments>
		<pubDate>Thu, 18 Dec 2008 10:50:36 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[python]]></category>

		<category><![CDATA[Бизнес]]></category>

		<category><![CDATA[Кодинг]]></category>

		<category><![CDATA[bytecode]]></category>

		<category><![CDATA[script]]></category>

		<category><![CDATA[деньги]]></category>

		<category><![CDATA[заработок]]></category>

		<category><![CDATA[продажа]]></category>

		<category><![CDATA[скрипты]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=183</guid>
		<description><![CDATA[Если вы пишите скрипты на продажу либо на заказ рано или поздно встает вопрос как скрыть код скрипта который вы продаете и не отдавать исходный код. Зачем это надо? Например для того чтобы скрипт сам по себе не пошел по рукам, за что вы будете получать 0$ со скрипта, который вы сделали для продажи. Для [...]]]></description>
			<content:encoded><![CDATA[<p>Если вы <a href="http://prudnikov.com/" >пишите скрипты на продажу либо на заказ</a> рано или поздно встает вопрос как скрыть код скрипта который вы продаете и не отдавать исходный код. Зачем это надо? Например для того чтобы скрипт сам по себе не пошел по рукам, за что вы будете получать 0$ со скрипта, который вы сделали для продажи. Для PHP был создан <a title="Zend Encoder" href="http://www.zend.com/en/products/guard/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.zend.com/en/products/guard/');" target="_blank">Zend Encoder</a>. Но я уже не сижу на <a title="PHP" href="http://www.php.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.php.net/');" target="_blank">PHP</a>, поэтому сегодня расскажу как скрыть <a title="Пример скрипта на Python" href="http://prudnikov.com/2008/12/python-gmail-smtp-logging-handler.html"  target="_blank">код скрипта на Python</a>.</p>
<p>Дело в том что все скрипты на <a href="http://www.python.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/');">Python</a> при первом запуске пишутся интерпретатором в виде байткода в файлы с расширением .pyc (это не рус типа РУСский или что-нибудь в этом роде, это PYthonCompiled - т.е. скомпилированый Python код). Интерпретатор Python по умолчанию пытается запускать именно эти файлы, а если он не существует, то использует исходный код после чего записывает этот же pyc-файл. Эти файлы можно создать, так сказать, вручную перед распространением файлов.<span id="more-183"></span></p>
<p>Делается это так</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">py_compile</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #dc143c;">py_compile</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'megascript.py'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>В результате рядом с megascript.py будет создан файл megascript.pyc который вы и будете продавать. Удачной разработки, и больших заработков!</p>
<p>Links: <a title="PEP 304 -- Controlling Generation of Bytecode Files" href="http://www.python.org/dev/peps/pep-0304/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/dev/peps/pep-0304/');" target="_blank">PEP 304 - Controlling Generation of Bytecode Files</a></p>
<p>Понравилось? помогло? – <a href="http://feeds.feedburner.com/Prudnikov" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://feeds.feedburner.com/Prudnikov');">Подпишись на RSS</a>!</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/488498883" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/12/%d0%9a%d0%b0%d0%ba-%d1%81%d0%ba%d1%80%d1%8b%d1%82%d1%8c-%d0%ba%d0%be%d0%b4-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0-%d0%bd%d0%b0-python-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d1%83.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/12/%d0%9a%d0%b0%d0%ba-%d1%81%d0%ba%d1%80%d1%8b%d1%82%d1%8c-%d0%ba%d0%be%d0%b4-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b0-%d0%bd%d0%b0-python-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d1%83.html</feedburner:origLink></item>
		<item>
		<title>Ориентация во сне по времени и связь с реальной жизнью.</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/473757018/%d0%9e%d1%80%d0%b8%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%b2%d0%be-%d1%81%d0%bd%d0%b5-%d0%bf%d0%be-%d0%b2%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b8-%d1%81%d0%b2%d1%8f%d0%b7%d1%8c-%d1%81-%d1%80.html</link>
		<comments>http://prudnikov.com/2008/12/%d0%9e%d1%80%d0%b8%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%b2%d0%be-%d1%81%d0%bd%d0%b5-%d0%bf%d0%be-%d0%b2%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b8-%d1%81%d0%b2%d1%8f%d0%b7%d1%8c-%d1%81-%d1%80.html#comments</comments>
		<pubDate>Wed, 03 Dec 2008 17:44:50 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[Оффтоп]]></category>

		<category><![CDATA[События]]></category>

		<category><![CDATA[баскетбол]]></category>

		<category><![CDATA[сон]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=179</guid>
		<description><![CDATA[Сегодня приснился довольно прикольный сон, в котором я был как бы в настоящем времени, как бы понимая свое текущее положение.
Общем во сне я был в Минске, и мне позвонил знакомый чел пригласил поиграть в баскет в каком то зале. Так вот я ему ответил что вчера тоже играл в баскет (а это так и было [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня приснился довольно прикольный сон, в котором я был как бы в настоящем времени, как бы понимая свое текущее положение.</p>
<p>Общем во сне я был в Минске, и мне позвонил знакомый чел пригласил поиграть в баскет в каком то зале. Так вот я ему ответил что вчера тоже играл в баскет (а это так и было в действительности), и через пару дней, в субботу, должен буду играть на, так называемом, баскетбольном марафоне (о нем чуть ниже), и лишний раз потренироваться мне не помешало бы. И марафоне я тоже буду играть в эту субботу.</p>
<p>Получается что я во сне расказал события и планы из реальной жизни. Прикольно как то получилось, у кого-нибудь бывали и бывают ли такие случаи?</p>
<p>Баскетбольный марафон это такая штука когда местные организовывают команды с 2-х соседних городов и играют друг против друга 8 часов нон стоп в первую субботу декабря. Представляете 8 часов баскета? в прошлом году я первый раз попал на это событие и играл за местную команду, и даже (хвастаюсь) занял второе место по количеству набранных очков среди двух команд :). Нет там не какие то ламеры играли, у всех довольно хорошего уровня баскет. В этом буду второй и наверно последний раз, потому что к следующему году к декабрю я уже свалю отсюда куда то дальше. Хотя возможно приеду просто поиграть если не буду далеко где-то.</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/473757018" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/12/%d0%9e%d1%80%d0%b8%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%b2%d0%be-%d1%81%d0%bd%d0%b5-%d0%bf%d0%be-%d0%b2%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b8-%d1%81%d0%b2%d1%8f%d0%b7%d1%8c-%d1%81-%d1%80.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/12/%d0%9e%d1%80%d0%b8%d0%b5%d0%bd%d1%82%d0%b0%d1%86%d0%b8%d1%8f-%d0%b2%d0%be-%d1%81%d0%bd%d0%b5-%d0%bf%d0%be-%d0%b2%d1%80%d0%b5%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b8-%d1%81%d0%b2%d1%8f%d0%b7%d1%8c-%d1%81-%d1%80.html</feedburner:origLink></item>
		<item>
		<title>Отправляем сообщения об ошибках используя Gmail и модуль logging в Python.</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/471742919/python-gmail-smtp-logging-handler.html</link>
		<comments>http://prudnikov.com/2008/12/python-gmail-smtp-logging-handler.html#comments</comments>
		<pubDate>Mon, 01 Dec 2008 22:12:31 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[python]]></category>

		<category><![CDATA[Кодинг]]></category>

		<category><![CDATA[coding]]></category>

		<category><![CDATA[gmail]]></category>

		<category><![CDATA[handler]]></category>

		<category><![CDATA[logging]]></category>

		<category><![CDATA[smtp]]></category>

		<category><![CDATA[лог]]></category>

		<category><![CDATA[логирование]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=163</guid>
		<description><![CDATA[Наверное многие как и я пользуются сервисами Google в том числе Google Apps for your domain, который позволяется не загоняться как минимум почтой на своем сервере и не бороться со спамерами использующими SMTP релей. В том числе сам Gmail имеет много преимуществ перед другими почтовиками. Отправляю почту я как правило тоже используя сервера gmail.
У программистов [...]]]></description>
			<content:encoded><![CDATA[<p>Наверное многие как и <a href="http://prudnikov.com/" >я</a> пользуются сервисами <a href="http://www.google.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.google.com/');">Google</a> в том числе <a href="http://www.google.com/a/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.google.com/a/');">Google Apps for your domain</a>, который позволяется не загоняться как минимум почтой на своем сервере и не бороться со спамерами использующими SMTP релей. В том числе сам <a href="http://gmail.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://gmail.com/');">Gmail</a> имеет много преимуществ перед другими почтовиками. Отправляю почту я как правило тоже используя сервера gmail.</p>
<p>У программистов иногда стоит задача скриптами отправлять почту ( я не про спам <img src='http://prudnikov.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), это может быть как контактная форма, так и какая то служебная информация от скриптов. Например скрипт оповещает о завершении какой-либо задачи, это могут быть какие то периодические отчеты, либо в случае ошибки отправлять письмо с данными о &#8220;происшествии&#8221;.<span id="more-163"></span></p>
<p>Так вот для последнего в <a title="Python" href="http://www.python.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/');">Python</a> есть такая библиотека которая называется, как не сложно догадаться, <a title="Python logging module" href="http://www.python.org/doc/2.5.2/lib/module-logging.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/module-logging.html');">logging</a>. У нее есть много возможностей, но основная ее задача это логирование сообщений со скриптов. Вот так выглядит простейшее использование этой библиотеки:</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>
<span style="color: #dc143c;">logging</span>.<span style="color: black;">basicConfig</span><span style="color: black;">&#40;</span>level=<span style="color: #dc143c;">logging</span>.<span style="color: black;">DEBUG</span>,
                    filename=<span style="color: #483d8b;">'/tmp/my_demo.log'</span>,
                    filemode=<span style="color: #483d8b;">'a'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Потом в любом месте скрипта делаем так</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>
<span style="color: #dc143c;">logging</span>.<span style="color: black;">debug</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'My demo log string...'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>и в файле /tmp/my_demo.log мы увидем строчку</p>
<pre>DEBUG:root:Demom log string...</pre>
<p>Так вот когда я сказал что у модуля logging есть много возможностей, я не имел ввиду что логировать так как показано в примере это круто. По умолчанию да, сообщения логируются просто в файл. Но изначально существуют <a href="http://www.python.org/doc/2.5.2/lib/node409.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node409.html');">обработчики</a>, назовем их логерами.</p>
<ul>
<li><a href="http://www.python.org/doc/2.5.2/lib/node410.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node410.html');">StreamHandler</a> посылает логируемое сообщение в поток (файл подобные объекты).</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node411.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node411.html');">FileHandler</a> – в файл на диске.</li>
<li>BaseRotatingHandler - это базовый класс для обработчиков которые &#8220;ротируют&#8221; лог файлы. Не рекомендуется использовать его напрямую, используйте вместо него TimedRotatingFileHandler.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node412.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node412.html');">RotatingFileHandler</a> - сообщения пишутся в файл на диске, ротируются по достижении указанного размера файла.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node413.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node413.html');">TimedRotatingFileHandler</a> тоже самое что и предыдущий, только ротируется при определенных временных интервалах.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node414.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node414.html');">SocketHandler</a> пишет сообщение в TCP/IP сокет.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node415.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node415.html');">DatagramHandler</a> – в UDP сокет.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node418.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node418.html');">SMTPHandler</a> отправляет сообщение по на почту.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node416.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node416.html');">SysLogHandler</a> отправляет сообщение демону syslog в Unix, возможно и на удаленную машину.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node417.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node417.html');">NTEventLogHandler</a> посылает сообщение логу событий Windows NT/2000/XP (о винде даже позаботились, хотя зачем ей это <img src='http://prudnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ).</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node419.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node419.html');">MemoryHandler</a> пишем в буфер в памяти который сбрасывается при определенных критериях.</li>
<li><a href="http://www.python.org/doc/2.5.2/lib/node420.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.python.org/doc/2.5.2/lib/node420.html');">HTTPHandler</a> отправляет сообщение в виде &#8220;GET&#8221; или &#8220;POST&#8221; HTTP запроса на сервер.</li>
</ul>
<p>Вот какой богатый набор. Но и этого бывает недостаточно иногда. Об этом сегодня и говорим, и мне недостаточно стандартного SMTPHandler, т.к. у него есть один недостаток - он не может авторизоваться на сервере. Но и для того чтобы отсылать через smtp сервер gmail, нужно еще небольшое дополнение.</p>
<p>Все что нам потребуется, это расширить стандартный SMTPHandler, немножко дописав метод __init__ чтобы он принимал наши логин и пароль, и переписать метод emit, так, чтобы он правильно отправил сообщение через гмыло. Вот что получилось.</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#! /usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>, <span style="color: #dc143c;">logging</span>.<span style="color: black;">handlers</span>, <span style="color: #dc143c;">types</span>, <span style="color: #dc143c;">smtplib</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">MIMEText</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEText
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> GmailHandler<span style="color: black;">&#40;</span><span style="color: #dc143c;">logging</span>.<span style="color: black;">handlers</span>.<span style="color: black;">SMTPHandler</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, mailhost, fromaddr, toaddrs, subject, <span style="color: #66cc66;">*</span>args, <span style="color: #66cc66;">**</span>kwargs<span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;
        Initialize the handler.
&nbsp;
        Initialize the instance with the from and to addresses and subject
        line of the email. To specify a non-standard SMTP port, use the
        (host, port) tuple format for the mailhost argument.
        &quot;&quot;&quot;</span>
        <span style="color: #dc143c;">logging</span>.<span style="color: black;">Handler</span>.<span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">type</span><span style="color: black;">&#40;</span>mailhost<span style="color: black;">&#41;</span> == <span style="color: #dc143c;">types</span>.<span style="color: black;">TupleType</span>:
            host, port = mailhost
            <span style="color: #008000;">self</span>.<span style="color: black;">mailhost</span> = host
            <span style="color: #008000;">self</span>.<span style="color: black;">mailport</span> = port
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">mailhost</span> = mailhost
            <span style="color: #008000;">self</span>.<span style="color: black;">mailport</span> = <span style="color: #008000;">None</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">fromaddr</span> = fromaddr
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">type</span><span style="color: black;">&#40;</span>toaddrs<span style="color: black;">&#41;</span> == <span style="color: #dc143c;">types</span>.<span style="color: black;">StringType</span>:
            toaddrs = <span style="color: black;">&#91;</span>toaddrs<span style="color: black;">&#93;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">toaddrs</span> = toaddrs
        <span style="color: #008000;">self</span>.<span style="color: black;">subject</span> = subject
&nbsp;
        <span style="color: #808080; font-style: italic;"># added this lines</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">auth_username</span> = kwargs.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'auth_username'</span>, <span style="color: #008000;">None</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">auth_password</span> = kwargs.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'auth_password'</span>, <span style="color: #008000;">None</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">auth_username</span> <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #008000;">self</span>.<span style="color: black;">auth_password</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">auth_required</span> = <span style="color: #008000;">True</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">auth_required</span> = <span style="color: #008000;">False</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> emit<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, record<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">try</span>:
            msg = MIMEText<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">format</span><span style="color: black;">&#40;</span>record<span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'html'</span>, <span style="color: #483d8b;">'utf-8'</span><span style="color: black;">&#41;</span>
            msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Subject'</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">self</span>.<span style="color: black;">getSubject</span><span style="color: black;">&#40;</span>record<span style="color: black;">&#41;</span>
            msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'From'</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">self</span>.<span style="color: black;">fromaddr</span>
            msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Sender'</span><span style="color: black;">&#93;</span> = <span style="color: #008000;">self</span>.<span style="color: black;">fromaddr</span>
            msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">','</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">toaddrs</span><span style="color: black;">&#41;</span>
&nbsp;
            port = <span style="color: #008000;">self</span>.<span style="color: black;">mailport</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> port:
                port = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP_PORT</span>
&nbsp;
            session = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">mailhost</span>, port<span style="color: black;">&#41;</span>
            session.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #808080; font-style: italic;"># TLS</span>
            session.<span style="color: black;">starttls</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            session.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">auth_required</span>:
                session.<span style="color: black;">login</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">auth_username</span>, <span style="color: #008000;">self</span>.<span style="color: black;">auth_password</span><span style="color: black;">&#41;</span>
            session.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">fromaddr</span>, <span style="color: #483d8b;">','</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">toaddrs</span><span style="color: black;">&#41;</span>, msg.<span style="color: black;">as_string</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
            session.<span style="color: black;">quit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: black;">&#40;</span><span style="color: #008000;">KeyboardInterrupt</span>, <span style="color: #008000;">SystemExit</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">raise</span>
        <span style="color: #ff7700;font-weight:bold;">except</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">handleError</span><span style="color: black;">&#40;</span>record<span style="color: black;">&#41;</span></pre></div></div>

<p>Пользоваться вот так</p>

<div class="wp_syntax"><div class="code"><pre class="python python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>
<span style="color: #ff7700;font-weight:bold;">from</span> gmail_logging_handler <span style="color: #ff7700;font-weight:bold;">import</span> GmailHandler
&nbsp;
rootLogger = <span style="color: #dc143c;">logging</span>.<span style="color: black;">getLogger</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
gmail_handler = GmailHandler<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'smtp.gmail.com'</span>, <span style="color: #ff4500;">587</span><span style="color: black;">&#41;</span>,  <span style="color: #483d8b;">'from_email@gmail.com'</span>, <span style="color: #483d8b;">'to_email@gmail.com'</span>, <span style="color: #483d8b;">&quot;Error at site.com&quot;</span>, auth_username=<span style="color: #483d8b;">&quot;GMAIL_EMAIL&quot;</span>, auth_password=<span style="color: #483d8b;">&quot;PASSWORD&quot;</span><span style="color: black;">&#41;</span>
rootLogger.<span style="color: black;">addHandler</span><span style="color: black;">&#40;</span>gmail_handler<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #dc143c;">logging</span>.<span style="color: black;">error</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'This is an error message that should be sent by mail.'</span><span style="color: black;">&#41;</span></pre></div></div>

<p>Естественно вам надо вставить свои логин и пароль на гмыле.</p>
<p><a title="Gmail logging handler" href="http://prudnikov.com/examples/gmail_logging_handler.py" >Скачать GmailLoggingHandler одним файлом</a>.</p>
<p>Пользуйтесь наздоровье.</p>
<p>Вот тут например есть реализация обработчика который отсылает сообщения на Jabber аккаунт (он же Google Talk). А куда вам еще надо отсылать лог сообщения?</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/471742919" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/12/python-gmail-smtp-logging-handler.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/12/python-gmail-smtp-logging-handler.html</feedburner:origLink></item>
		<item>
		<title>Постим в twitter из командной строки.</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/470489915/%d0%9f%d0%be%d1%81%d1%82%d0%b8%d0%bc-%d0%b2-twitter-%d0%b8%d0%b7-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8.html</link>
		<comments>http://prudnikov.com/2008/11/%d0%9f%d0%be%d1%81%d1%82%d0%b8%d0%bc-%d0%b2-twitter-%d0%b8%d0%b7-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8.html#comments</comments>
		<pubDate>Sun, 30 Nov 2008 19:35:53 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[Bash]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[Кодинг]]></category>

		<category><![CDATA[Рабочая среда]]></category>

		<category><![CDATA[command line]]></category>

		<category><![CDATA[curl]]></category>

		<category><![CDATA[mac]]></category>

		<category><![CDATA[posting]]></category>

		<category><![CDATA[script]]></category>

		<category><![CDATA[terminal]]></category>

		<category><![CDATA[twit]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=173</guid>
		<description><![CDATA[Это очень простой скрипт использующий curl который поможет вам постить твиты в twitter прямо из командной строки. Создайте новый файл и добавьте в него следующие строки.

#!/bin/bash
curl --basic --user USERNAME:PASSWORD \
--data status=&#34;$*&#34; http://twitter.com/statuses/update.xml -o /dev/null;

где USERNAME и PASSWORD должны быть заменены вашими данными. Сохраните файл с именем twit (ну или как вам захочется). Этот файл должен [...]]]></description>
			<content:encoded><![CDATA[<p>Это очень простой скрипт использующий curl который поможет вам постить твиты в twitter прямо из командной строки. Создайте новый файл и добавьте в него следующие строки.</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
curl <span style="color: #660033;">--basic</span> <span style="color: #660033;">--user</span> USERNAME:PASSWORD \
<span style="color: #660033;">--data</span> <span style="color: #007800;">status</span>=<span style="color: #ff0000;">&quot;$*&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>twitter.com<span style="color: #000000; font-weight: bold;">/</span>statuses<span style="color: #000000; font-weight: bold;">/</span>update.xml <span style="color: #660033;">-o</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null;</pre></div></div>

<p>где USERNAME и PASSWORD должны быть заменены вашими данными. Сохраните файл с именем twit (ну или как вам захочется). Этот файл должен лежать внутри $PATH (незнаю как это умно сказать), например /usr/local/bin/twit или /bin/twit. Скрипт готов к употреблению.</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">twit <span style="color: #ff0000;">&quot;Тестим постинг в twitter из командной строки&quot;</span></pre></div></div>

<p>Вот и все. У меня на маке работает, на любом линуксе тоже должно работать (должен стоять curl). Хотя нет, не все. Мы же не хотим так просто светить свои логин и пароль на твитер. Поэтому совершим еще несколько телодвижений.</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">551</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>twit
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> +s <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>twit
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> root <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>twit</pre></div></div>

<p>Теперь контент этого скрипта сможет читать только root, а запускать может кто угодно.</p>
<p style="text-align: left;">Stay tuned for more! </p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/470489915" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/11/%d0%9f%d0%be%d1%81%d1%82%d0%b8%d0%bc-%d0%b2-twitter-%d0%b8%d0%b7-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/11/%d0%9f%d0%be%d1%81%d1%82%d0%b8%d0%bc-%d0%b2-twitter-%d0%b8%d0%b7-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8.html</feedburner:origLink></item>
		<item>
		<title>SaaS. Что это такое, и кому это надо?</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/449882193/saas-%d0%a7%d1%82%d0%be-%d1%8d%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-%d0%b8-%d0%ba%d0%be%d0%bc%d1%83-%d1%8d%d1%82%d0%be-%d0%bd%d0%b0%d0%b4%d0%be.html</link>
		<comments>http://prudnikov.com/2008/11/saas-%d0%a7%d1%82%d0%be-%d1%8d%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-%d0%b8-%d0%ba%d0%be%d0%bc%d1%83-%d1%8d%d1%82%d0%be-%d0%bd%d0%b0%d0%b4%d0%be.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 20:41:24 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[SaaS]]></category>

		<category><![CDATA[Бизнес]]></category>

		<category><![CDATA[business]]></category>

		<category><![CDATA[google docs]]></category>

		<category><![CDATA[salesforce]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=151</guid>
		<description><![CDATA[Случилось так что мне пришлось/захотелось связаться с довольно новым понятием как SaaS. Когда я к нему подходил, а это было больше чем пол года назад, я не знал о том, что это так называется, и что это вообще как-то называется. Я просто хотел написать сервис который, так сказать, будет сдаваться в аренду.
С течением времени я [...]]]></description>
			<content:encoded><![CDATA[<p id="xpge5" style="font-family: Trebuchet MS;"><img class="alignright" title="SaaS" src="http://prudnikov.com/images/saas.jpg" alt="" width="250" height="165" />Случилось так что мне пришлось/захотелось связаться с довольно новым понятием как SaaS. Когда я к нему подходил, а это было больше чем пол года назад, я не знал о том, что это так называется, и что это вообще как-то называется. Я просто хотел написать сервис который, так сказать, будет сдаваться в аренду.</p>
<p style="font-family: Trebuchet MS;">С течением времени я въезжал в тему, читал и вникал в то как это работает. Но к моему удивлению почему то оказалось так что в рунете вообще мало внимания уделено этой модели бизнеса, поэтому пришлось изучать ее по англоязычным ресурсам. И теперь я решил время от времени делиться этой информацией. Сегодня я вкратце расскажу о том, что это такое. Итак, что же это такое?<span id="more-151"></span></p>
<p id="xpge5" style="font-family: Trebuchet MS;">SaaS (Software-as-a-Service) - это бизнес модель предполагающая, попросту говоря, сдачу софта в виде вебсервиса в аренду. Т.е. это веб приложения доступные как правило из браузера имеющего доступ в интернет, и хостятся они на серверах провайдера. Отсюда и название Software-as-a-service — &#8220;Софт как сервис&#8221;. Ярким представителем этой бизнес модели является SalesForce, так же считается что эта компания является первооткрывателем этого направления.</p>
<p id="xpge5" style="font-family: Trebuchet MS;">В западном интернете этот год уже ознаменовался бурным развитием и использованием этой бизнес модели, некоторые даже называют этот год годом SaaS. Кажется что эта бизнес модель является выгодной для обоих сторон — для провайдеров и для покупателей.</p>
<p id="xpge6" style="font-family: Trebuchet MS;">Стоит заметить что SaaS это не web 2.0. Web 2.0 это больше про социальные сети, блоги, генерируемый пользователями для других пользователей контент, разукрашеные дизайны и AJAX интерфейсы и т.д. Хотя в SaaS проектах AJAX интерфейс в любом случае приятен потому что он прост и быстр. SaaS это ваши традиционные бизнес приложения работающие через интернет и размещенные на ресурсах провайдера.</p>
<p id="xpge6" style="font-family: Trebuchet MS;">Главное что делает SaaS такой крутой штуко<span>й так это возможность совместной работы и коммуникации. Простой наглядный пример это Google Docs. Попробуйте писать в нем документ совместно с вашими друзьями </span>или сотрудниками и вы поймете эту мощь. Больше нет необходимости редактировать документы, отсылать их прикрепленными к емейлу и т.д. Вот она красота, на ладони. Более того, вам больше нет необходимости держать свои сервера и персонал который будет их обслуживать. Все делают провайдеры.</p>
<p id="xpge6" style="font-family: Trebuchet MS;">Но не все так сладко как показалось на первый взгляд. О преимуществах и недостатках этой бизнес модели, о ярких представителях, о проблемах создания а так же использования SaaS проектов и о многом другом я расскажу вам в следующихстатьях.</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/449882193" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/11/saas-%d0%a7%d1%82%d0%be-%d1%8d%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-%d0%b8-%d0%ba%d0%be%d0%bc%d1%83-%d1%8d%d1%82%d0%be-%d0%bd%d0%b0%d0%b4%d0%be.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/11/saas-%d0%a7%d1%82%d0%be-%d1%8d%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5-%d0%b8-%d0%ba%d0%be%d0%bc%d1%83-%d1%8d%d1%82%d0%be-%d0%bd%d0%b0%d0%b4%d0%be.html</feedburner:origLink></item>
		<item>
		<title>Используем MacFUSE в Mac OS X</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/442171548/%d0%98%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-macfuse-%d0%b2-mac-os-x.html</link>
		<comments>http://prudnikov.com/2008/11/%d0%98%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-macfuse-%d0%b2-mac-os-x.html#comments</comments>
		<pubDate>Tue, 04 Nov 2008 16:01:16 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[Рабочая среда]]></category>

		<category><![CDATA[filesystem]]></category>

		<category><![CDATA[fuse]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[google docs]]></category>

		<category><![CDATA[macfuse]]></category>

		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=142</guid>
		<description><![CDATA[Недавно открыл для себя такую штуку как MacFUSE и сильно упростил себе жизнь и работу. Некоторые блогеры называют MacFUSE технологией будущего.
Проект  MacFUSE, созданный разработчиком из Google Amit Singh, произошел от линуксового проекта FUSE, который позволяет создать файловую систему из любого контента любого сервиса или приложения.
Примеров использования этой технологии полно. Например подключение виндовой файловой системы в [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 132px"><img title="MacFUSE" src="http://prudnikov.com/images/macfuse.png" alt="MacFUSE" width="122" height="140" /><p class="wp-caption-text">MacFUSE</p></div>
<p>Недавно открыл для себя такую штуку как <a href="http://code.google.com/p/macfuse/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://code.google.com/p/macfuse/');" target="_blank">MacFUSE</a> и сильно упростил себе жизнь и работу. Некоторые блогеры называют MacFUSE технологией будущего.</p>
<p><a href="http://code.google.com/p/macfuse/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://code.google.com/p/macfuse/');" target="_blank">Проект  MacFUSE</a>, созданный разработчиком из Google <span class="google-src-active-text" style="direction: ltr; text-align: left;">Amit Singh</span>, произошел от линуксового проекта <a id="y.76" title="FUSE" href="http://fuse.sourceforge.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://fuse.sourceforge.net/');" target="_blank">FUSE</a>, который позволяет создать файловую систему из любого контента любого сервиса или приложения.</p>
<p>Примеров использования этой технологии полно. Например подключение виндовой файловой системы в линуксе для всякого рода манипуляций с файлами и папками. Банально? А как вам создание файловой системы из RSS лент где папки это сами ленты, а файлы внутри этих папок это посты в RSS фиде которые можно редактировать, удалять, перемещать и т.д. Не юзабельно? Кому как. А более приближенный к реальности пример файловой системы на основе <a href="http://docs.google.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://docs.google.com/');" target="_blank">Google Docs</a> где документы этого сервиса доступны в файловой системе? Фантастика, не так ли? Вот <a id="me4." title="здесь" href="http://video.google.com/videoplay?docid=3138515991250095768" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://video.google.com/videoplay?docid=3138515991250095768');" target="_blank">здесь</a> или <a href="http://www.youtube.com/watch?v=-7Jje6qTG64" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.youtube.com/watch?v=-7Jje6qTG64');" target="_self">здесь</a> можно посмотреть примеры использования MacFUSE.</p>
<p>Я пока что воспользовался только утилитой <a href="http://code.google.com/p/macfuse/downloads/list" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://code.google.com/p/macfuse/downloads/list');" target="_blank">SSHFS</a> которая мне позволила иметь локальное зеркало сервера, за счет чего я могу копировать файл на сервер просто перетянув файл из одной локальный папки в другую, могу редактировать серверные файлы как локальные и т.д. Очень удобно. В планах вмонтировать Google Docs в свою файловую систему.</p>
<p>Вот <a title="здесь" href="http://toxic-public.googlecode.com/svn/trunk/Projects/Misc/FuseTest/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://toxic-public.googlecode.com/svn/trunk/Projects/Misc/FuseTest/');" target="_blank">здесь</a> товарищи постарались и создали несколько примеров таких файловых систем. Весь код открытый, поэтому можно попробовать силы в этом направлении, и, возможно, появится на свет новый полезный проект, а не бестолковые социальные сети <img src='http://prudnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/442171548" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/11/%d0%98%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-macfuse-%d0%b2-mac-os-x.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/11/%d0%98%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-macfuse-%d0%b2-mac-os-x.html</feedburner:origLink></item>
		<item>
		<title>Получаем ширину скролла в браузере используя JavaScript.</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/438179008/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d0%b5%d0%bc-%d1%88%d0%b8%d1%80%d0%b8%d0%bd%d1%83-%d1%81%d0%ba%d1%80%d0%be%d0%bb%d0%bb%d0%b0-%d0%b2-%d0%b1%d1%80%d0%b0%d1%83%d0%b7%d0%b5%d1%80%d0%b5-%d0%b8%d1%81.html</link>
		<comments>http://prudnikov.com/2008/10/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d0%b5%d0%bc-%d1%88%d0%b8%d1%80%d0%b8%d0%bd%d1%83-%d1%81%d0%ba%d1%80%d0%be%d0%bb%d0%bb%d0%b0-%d0%b2-%d0%b1%d1%80%d0%b0%d1%83%d0%b7%d0%b5%d1%80%d0%b5-%d0%b8%d1%81.html#comments</comments>
		<pubDate>Fri, 31 Oct 2008 17:09:03 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Кодинг]]></category>

		<category><![CDATA[browser]]></category>

		<category><![CDATA[scroll]]></category>

		<category><![CDATA[scroll size]]></category>

		<category><![CDATA[snippet]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=113</guid>
		<description><![CDATA[Вечно создаю какие то непонятные вещи. Вот сегодня мне понадобилось определять ширину скроллбара в браузере. Причем не буду же я вручную их определять и задавать каким то массивом чтобы потом это срабатывало. Это не наш путь. Нужно чтобы динамически определялась эта ширина и выполнялись соответствующие действия.
Мне например нужен был этот функционал чтобы работал мой плагин [...]]]></description>
			<content:encoded><![CDATA[<p>Вечно создаю какие то непонятные вещи. Вот сегодня мне понадобилось определять ширину скроллбара в браузере. Причем не буду же я вручную их определять и задавать каким то массивом чтобы потом это срабатывало. Это не наш путь. Нужно чтобы динамически определялась эта ширина и выполнялись соответствующие действия.</p>
<p>Мне например нужен был этот функционал чтобы работал мой плагин к jQuery (который совершает хитрые манипуляции со скролами) как было задумано. Сам плагин расшарю немножко попозже, когда убежусь что он работает как надо и посчитаю что уже можно выложить :). Возможно кому то тоже такое пригодится.  <span id="more-113"></span></p>
<p>Код функции выглядит вот так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> getScrollBarWidth <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> inner <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span>;
	inner.<span style="color: #660066;">style</span>.<span style="color: #660066;">width</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'100%'</span>;
	inner.<span style="color: #660066;">style</span>.<span style="color: #660066;">height</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'200px'</span>;
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> outer <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">position</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'absolute'</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">top</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'0px'</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">left</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'0px'</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">visibility</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'hidden'</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">width</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'200px'</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">height</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'150px'</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">overflow</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'hidden'</span>;
	outer.<span style="color: #660066;">appendChild</span> <span style="color: #009900;">&#40;</span>inner<span style="color: #009900;">&#41;</span>;
&nbsp;
	document.<span style="color: #660066;">body</span>.<span style="color: #660066;">appendChild</span> <span style="color: #009900;">&#40;</span>outer<span style="color: #009900;">&#41;</span>;
	<span style="color: #003366; font-weight: bold;">var</span> w1 <span style="color: #339933;">=</span> inner.<span style="color: #660066;">offsetWidth</span>;
	outer.<span style="color: #660066;">style</span>.<span style="color: #660066;">overflow</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'scroll'</span>;
	<span style="color: #003366; font-weight: bold;">var</span> w2 <span style="color: #339933;">=</span> inner.<span style="color: #660066;">offsetWidth</span>;
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>w1 <span style="color: #339933;">==</span> w2<span style="color: #009900;">&#41;</span>
		w2 <span style="color: #339933;">=</span> outer.<span style="color: #660066;">clientWidth</span>;
	document.<span style="color: #660066;">body</span>.<span style="color: #660066;">removeChild</span> <span style="color: #009900;">&#40;</span>outer<span style="color: #009900;">&#41;</span>;
&nbsp;
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>w1 <span style="color: #339933;">-</span> w2<span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span>;</pre></div></div>

<p>Пример можно посмотреть <a href="http://prudnikov.com/examples/scrollbarsize.html"  target="_blank">здесь</a> и оценить размер своего &#8230;. кхмм&#8230; скролла. У кого какие размеры? <img src='http://prudnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> у меня 15.</p>
<p>Stay tuned for more&#8230;.</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/438179008" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/10/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d0%b5%d0%bc-%d1%88%d0%b8%d1%80%d0%b8%d0%bd%d1%83-%d1%81%d0%ba%d1%80%d0%be%d0%bb%d0%bb%d0%b0-%d0%b2-%d0%b1%d1%80%d0%b0%d1%83%d0%b7%d0%b5%d1%80%d0%b5-%d0%b8%d1%81.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/10/%d0%9f%d0%be%d0%bb%d1%83%d1%87%d0%b0%d0%b5%d0%bc-%d1%88%d0%b8%d1%80%d0%b8%d0%bd%d1%83-%d1%81%d0%ba%d1%80%d0%be%d0%bb%d0%bb%d0%b0-%d0%b2-%d0%b1%d1%80%d0%b0%d1%83%d0%b7%d0%b5%d1%80%d0%b5-%d0%b8%d1%81.html</feedburner:origLink></item>
		<item>
		<title>Google Developer Day в Праге.</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/436848486/google-developer-day-%d0%b2-%d0%9f%d1%80%d0%b0%d0%b3%d0%b5.html</link>
		<comments>http://prudnikov.com/2008/10/google-developer-day-%d0%b2-%d0%9f%d1%80%d0%b0%d0%b3%d0%b5.html#comments</comments>
		<pubDate>Thu, 30 Oct 2008 13:00:00 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[Конференции]]></category>

		<category><![CDATA[События]]></category>

		<category><![CDATA[android]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[google developer day]]></category>

		<category><![CDATA[prague]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[social web]]></category>

		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=94</guid>
		<description><![CDATA[ Сегодня я расскажу о том как я посетил Google Developer Day который проходил в Праге 24 октября 2008 года. Поехали.
День начался очень рано и с приключениями. Как некоторые мои читатели уже знают я живу не в Праге, а на самом юге Чехии. Поэтому мне пришлось встать в 3 часа утра (надо же, более привычно [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: left; margin-right: 15px; width: 182px; height: 121px;" src="http://prudnikov.com/photos/Photos_files/Media/IMG_4167/thumb.jpg" alt="Отметился" /> Сегодня я расскажу о том как я посетил Google Developer Day который проходил в Праге 24 октября 2008 года. Поехали.</p>
<p>День начался очень рано и с приключениями. Как некоторые мои читатели уже знают я живу не в Праге, а на самом юге Чехии. Поэтому мне пришлось встать в 3 часа утра (надо же, более привычно ложиться спать в это время) чтобы быть в праге в 8 утра. Так вот так получилось что поезд, который по расписанию прибывает в 7:53 чудесным образом добрался до Праги примерно в 11:30. Незнаю на самом деле что произошло, но по пути поезд стал, и простоял на одном месте 2.5 часа, никаких автобусов все это время на подмену пригнать не могли – как говорили их небыло, но потом появились. Вообще с чешскими драгами (Ceske Drahy, аналог БЧ, РЖД) часто случается что поезд задерживается. Я всегда думал что это обусловлено глобальным ремонтом нашего направления дороги, но слышал много от кого что это не только в нашем направлении (впринципе даже поезд Москва - Прага, на котором мы сюда ездим обычно, тоже иногда с большими опозданиями приходит). Таким образом я приехал к обеду получается. Хотя успел попасть на 15 минут на сессию об Open Social так ничего интересного не услышав.</p>
<p><span id="more-94"></span>Сразу после регистрации выдали беджик, расписание сессий, небольшую книжечку по сервисам гугла, анкету, которую надо было сдать на выходе и получить <a href="http://prudnikov.com/photos/Photos.html#17" >кружку-термос с выгравированой надписью Google</a>, и майку. Майка сразу скажу не очень понравилась – спереди логотип андроида выбился из стиля остальных 3-х логотипов, да и цвет майки не очень приятный.</p>
<p>На каждой сессии каждому выдавались анкеты, так называемый фидбек от слушателей, которую надо было заполнять по окончании сессии. Анкета маленькая, поэтому никакого труда не составляло ее заполнить. Думаю эту информацию они используют для улучшения сего события.</p>
<p>Не очень понравилось что в последний день были внесены изменения в программу. Хотя при регистрации на сайте об этом предупреждали. Так, например, была убрана сессия и практический семинар о Google Gears на которые я хотел сходить, можно сказать из-за которой ехал сюда. Из практических семинаров было только по Google App Engine, на которую я не пошел, потому что сомневаюсь что узнал бы что-либо нового.</p>
<p><strong>Advanced Python.</strong><br />
На эту сессию пошел можно сказать от безысходности, т.к. остальные сессии которые проходили паралельно были не очень привлекательными для меня. Да и углубить свои знания Питона никогда не против, темболее речь шла действительно об advanced python. Многие вещи я уже знал, а некоторые поверхностно знал, в результате какие то знания улучшились, чего-то нового услышал, ну и просто посмотрел на умных людей из гугла в живую. Кстати, эта же сессия у меня есть на винте, но более обширная, но и кое чего в ней небыло из того что услышал на GDD.</p>
<p><strong>Gadgets Best practices.</strong><br />
На этой сессии речь конечто же шла про гаджеты <a href="http://www.google.com/ig/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.google.com/ig/');" target="_blank">iGoogle</a>. На этот раз парочка хитрых парней из местной конторы подсунулись и читали это дело на чешском, решив пропиариться за счет гугла. Начиналось все совсем с основ типа страницы состоят из HTML, JS, CSS, о том что JS может делать запросы на сервер и лучше всего данные получать в формате <a href="http://www.json.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.json.org/');" target="_blank">JSON</a> а не XML (кто бы мог подумать). Дальше показали скелет виджета гугла, рассказали что они много виджетов наделали которыми пользуются во всем мире, и показали как они пользуются <a title="Aptana Studio" href="http://www.aptana.com/studio" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.aptana.com/studio');" target="_blank">Aptana Studio</a> для минификации JS и CSS файлов. Парни решили не подкачать и в &#8220;дрес коде&#8221;. Один из них видно специально к этому событию по дороге прикупил белую рубашечку, а потому и погладить не удалось. На груди у него вырисовывался прямоугольник :).</p>
<p><strong>Intro to Android. Android Application.</strong><br />
По андроиду было 2 сессии, но я их обобщу в одну, т.к. они об одном и том же, одна продолжает другую, и читали одни и те же люди. Андроид это хорошо. Я так предполагаю что когда мне встанет кокретно нужда подобного коммуникатора,  вероятнее всего придется выбирать iPhone vs. Android, и я предпочту устройство на основе андроид. Да первое устройство T-mobile G1 немножко корявое по дизайну, но 1) это всего лишь первое устройство, и неизвестно сколько и какие они будут к тому моменту когда у меня встанет такой вопрос, 2) по отзывам первых реальных пользователей в реальности он намного приятнее чем на картинках (как, впринципе, с большинством качественных девайсов).<br />
Конкретно по этой сессии сказать сложно что-либо интересное. Довольно специфический вопрос, да и все что рассказывали там это создание приложений, архитектура, история появления этой ОС и т.д. Едиственное что не понравилось так это то, что эта сессия была тоже на чешском. Другие свежеиспеченные фанаты андроида тоже решили пропиариться со своей тоже свежеиспеченной конторой. Не то чтобы я там нчиего не понял, моего уровня хватило чтобы понять что там рассказывали, но хотелось совершенствовать свой английский.<br />
Теперь жду когда я всетаки сяду делать андроид клиент для своего проекта, а ведь в первую очередь надо сделать iPhone клиент. Еще далеко до сравнения размеров аудитории этих двух устройств, хотя <a href="http://habrahabr.ru/blogs/android/43147/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://habrahabr.ru/blogs/android/43147/');" target="_blank">первая мутная статистика показывает</a> что аудитория Android более привлекательная для моего проекта.</p>
<p>Теперь немножко в общем о конференции и моих ощущениях. Проходила она в довольно таки большом и современенном отеле, в котором целый этаж предусмотрен для проведения конференций. Что касается организации — 5 баллов, хотя не совсем это уж сложное мероприятие, да и гугл уже имеет большой опыт в этом (Сам Google Developer Day проходил и проходит уже не первый десяток раз в разных городах). Само мероприятие было бесплатным куда входили не только теоретические и практические семинары, но и еда, питье и подарки.</p>
<p><strong>Relax Zone</strong><br />
Основное что приметилось, это созданный в стиле гугла зал который назывался Relax zone, предназначен понятно для чего. Чтобы тупо не описывать словами, <a href="http://prudnikov.com/photos/Photos.html#15"  target="_blank">вот оно</a>. Чесно признаться мне понравилось. Играет легенький музончик, довольно таки приятная обстановка, каждый занимается тем чем хочет. Попробовать поработать впринципе не удалось, поэтому реальных ощущений нет. Но я думаю что мне бы понравилось вылезть из повседневного рабочего места в офисе, и поработать часок другой в таком зале. Мне кажется что это от большого зала, ничего не давит по бокам, ничего не напрягает, все чем то заняты, из-за наличия музыки ты не слышишь разговоров других людей и т.д.</p>
<p>В заключение хочется сказать что я не получил большую пачку знаний которых небыло, чего я, впринципе, и не ожидал от его посещения, но зато поимел опыт участия в подобных мероприятиях. Не так давно уже посещал onAIR Tour от Adobe.</p>
<p><a href="http://prudnikov.com/photos/Photos.html" >Мои фотки;</a><br />
<a href="http://habrahabr.ru/blogs/google/43558/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://habrahabr.ru/blogs/google/43558/');" target="_blank">Вот тут</a> коллега уже успел рассказать о том как проходил Google Developer Day в Москве.</p>
<p style="text-align: left;">I love Google. Stay tuned&#8230; </p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/436848486" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/10/google-developer-day-%d0%b2-%d0%9f%d1%80%d0%b0%d0%b3%d0%b5.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/10/google-developer-day-%d0%b2-%d0%9f%d1%80%d0%b0%d0%b3%d0%b5.html</feedburner:origLink></item>
		<item>
		<title>Быстрый сайт #1</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/428401159/%d0%91%d1%8b%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b0%d0%b9%d1%82-1.html</link>
		<comments>http://prudnikov.com/2008/10/%d0%91%d1%8b%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b0%d0%b9%d1%82-1.html#comments</comments>
		<pubDate>Wed, 22 Oct 2008 10:57:04 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[Оптимизация]]></category>

		<category><![CDATA[домен]]></category>

		<category><![CDATA[оптимизация]]></category>

		<category><![CDATA[Оптимизация сайтов]]></category>

		<category><![CDATA[статика]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=67</guid>
		<description><![CDATA[Расположите контент на разных субдоменах для ускорения паралельной загрузки.
Идея в том что браузер может загружать только 2 файла (запроса) в один момент времени с одного домена. Это требование спецификации HTML 1.1 которой подчиняются браузеры. Таким образом если мы сможем загружать паралельно больше файлов, мы загрузим всю страницу быстрее. В этом случа используется лазейка в определении [...]]]></description>
			<content:encoded><![CDATA[<h4>Расположите контент на разных субдоменах для ускорения паралельной загрузки.</h4>
<p>Идея в том что браузер может загружать только 2 файла (запроса) в один момент времени с одного домена. Это требование спецификации HTML 1.1 которой подчиняются браузеры. Таким образом если мы сможем загружать паралельно больше файлов, мы загрузим всю страницу быстрее. В этом случа используется лазейка в определении &#8220;с одного домена&#8221;. Таким образом на практике можно распределить картинки, файлы таблиц стилей, JavaScript файлы, статические HTML страницы по разным субдоменам которые будут отличаться от основного домена.</p>
<p>Тем не менее вы должны учитывать что не рекомендуется использовать очень много субдоменов, т.к. каждый субдомен заставляет браузер делать поиск по DNS. Коллеги из Yahoo провели небольшое <a title="Yahoo performance research: Paralel downloads." href="http://yuiblog.com/blog/2007/04/11/performance-research-part-4/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://yuiblog.com/blog/2007/04/11/performance-research-part-4/');" target="_blank">исследование</a> на эту тему и пришли к выводу что вы должны использовать оптимально 2, но не больше 4 субдоменов. Я, например, в последнее время разделяю статику и динамику на 2 субдомена.</p>
<p>Источники: <a title="Permanent Link to Circumventing browser connection limits for fun and profit" href="http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/');">Circumventing browser connection limits for fun and profit</a>; <a title="Optimizing page load time" href="http://www.die.net/musings/page_load_time/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.die.net/musings/page_load_time/');" target="_blank">Optimizing Page Load Time</a>;</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/428401159" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/10/%d0%91%d1%8b%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b0%d0%b9%d1%82-1.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/10/%d0%91%d1%8b%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d0%b0%d0%b9%d1%82-1.html</feedburner:origLink></item>
		<item>
		<title>Привет друзья</title>
		<link>http://feeds.feedburner.com/~r/prudnikov/~3/417104154/%d0%9f%d1%80%d0%b8%d0%b2%d0%b5%d1%82-%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f.html</link>
		<comments>http://prudnikov.com/2008/10/%d0%9f%d1%80%d0%b8%d0%b2%d0%b5%d1%82-%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f.html#comments</comments>
		<pubDate>Fri, 10 Oct 2008 18:29:00 +0000</pubDate>
		<dc:creator>Prudnikov Vladimir</dc:creator>
		
		<category><![CDATA[Оффтоп]]></category>

		<guid isPermaLink="false">http://prudnikov.com/?p=3</guid>
		<description><![CDATA[Привет всем&#8230; После долгого отсуствия и &#8220;дауна&#8221; блога я возвращаюсь к этому, неизвестно на сколько полезному, делу. Если кто-то не заметил, блог небыл доступен с начала августа и до сих пор, т.е. чуть больше 2 месяцев. Обусловлено это было моим &#8220;отпуском&#8221; и временным неимением сервера в распоряжении. Сложно себе представить отпуск у фрилансера, но я [...]]]></description>
			<content:encoded><![CDATA[<p>Привет всем&#8230; После долгого отсуствия и &#8220;дауна&#8221; блога я возвращаюсь к этому, неизвестно на сколько полезному, делу. Если кто-то не заметил, блог небыл доступен с начала августа и до сих пор, т.е. чуть больше 2 месяцев. Обусловлено это было моим &#8220;отпуском&#8221; и временным неимением сервера в распоряжении. Сложно себе представить отпуск у фрилансера, но я себе такой сделал – у нас в Чехии побывали родственники, и мы с женой побывали на родине.</p>
<p>За время отсутсвия я немного изменил отношение к своему блогу, и теперь попробую отнестись к нему более внимательно, писать более полезные вещи в надежде что они будут кому-либо полезны или просто интересны. Хотя я и решил по другому отнестись к своему блогу, понятие блогов в моем понимании не изменилось, т.е. я думаю что блоги не должны быть такими как они сейчас есть. О своем понимании блогов я думаю напишу в будещем.</p>
<p>Как некоторые могли заметить блог начинаю &#8220;снуля&#8221; в связи с тем, что, как я уже сказал, я переосмыслил свое отношение к ведению блога. А именно я решил вести его так, чтобы он был лицом моей профессиональной деятельности. То что было до этого сложно отнести к новому восприятию, хотя некоторые посты были нормальными, поэтому вероятно некоторые из них я перенесу сюда.</p>
<p>Так же произошли некоторые изменения в расположении блога. Раньше он был на домене blog.prudnikov.com, а теперь я перенес его на головной домен <a href="http://prudnikov.com/" >http://prudnikov.com/</a>. Поэтому если кто-то оставался подписаным на RSS летну блога, прошу проверить адрес – для блога он должен быть таким <a href="http://feeds.feedburner.com/prudnikov" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://feeds.feedburner.com/prudnikov');" target="_self">http://feeds.feedburner.com/prudnikov</a>. А мой микроблог (Powered by <a href="http://tumblr.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://tumblr.com/');" target="_blank">tumblr.com</a>) сейчас находится на <a href="http://tumblr.prudnikov.com/"  target="_blank">http://tumblr.prudnikov.com/</a> (<a href="http://feeds.feedburner.com/prudnikov-microblog" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://feeds.feedburner.com/prudnikov-microblog');" target="_blank">RSS</a>), перекочевав из домена prudnikov.com. Прошу извинить за такие миграции и обновить адреса в своих RSS ридерах.</p>
<p>А зачем вести и блог и микроблог? Отвечаю. Микроблог на tumblr удобен для постинга мелких вещей типа полезные линки, интересные видеоролики, фотки, цитаты – мне это удобно, особенно расшаривать линки. Я часто там расшариваю линки которые считаю полезными и интересными, поэтому рекомендую <a href="http://feeds.feedburner.com/prudnikov-microblog" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://feeds.feedburner.com/prudnikov-microblog');">подписаться и на микроблог</a>. В блоге же я решил писать полезные вещи по профессиональной теме. Так что <a href="http://feeds.feedburner.com/prudnikov" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://feeds.feedburner.com/prudnikov');">подписываемся и на блог</a> <img src='http://prudnikov.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Stay tuned.</p>
<img src="http://feeds.feedburner.com/~r/prudnikov/~4/417104154" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://prudnikov.com/2008/10/%d0%9f%d1%80%d0%b8%d0%b2%d0%b5%d1%82-%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f.html/feed</wfw:commentRss>
		<feedburner:origLink>http://prudnikov.com/2008/10/%d0%9f%d1%80%d0%b8%d0%b2%d0%b5%d1%82-%d0%b4%d1%80%d1%83%d0%b7%d1%8c%d1%8f.html</feedburner:origLink></item>
	</channel>
</rss>
