<?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>LSDEEX</title>
	<atom:link href="http://www.lsdeex.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://www.lsdeex.ru</link>
	<description>Сборник ФАКов и мануалов</description>
	<lastBuildDate>Tue, 31 Jan 2012 19:20:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>python/php на freebsd</title>
		<link>http://www.lsdeex.ru/archives/356</link>
		<comments>http://www.lsdeex.ru/archives/356#comments</comments>
		<pubDate>Tue, 31 Jan 2012 19:13:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=356</guid>
		<description><![CDATA[Некоторые особенности фряхи, которые стоит знать для установки софта.
1. настройка апача, установка питона из сорцов (хотя можно было бы из портов)
2. установка пхп из портов.

updatedb  /usr/libexec/locate.updatedb
/usr/local/etc/apache22/httpd.conf
отключить deflate
убедиться что включен cgi
изменить DocumentRoot
настроить

	Options +ExecCGI
	DirectoryIndex start.pyw
	AddHandler cgi-script .pyw .py
	
/*  НЕ ДОБАВЛЯТЬ
добавить вирт

    ServerAdmin admin@localhost
    DocumentRoot /var/www/html
    ServerName [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторые особенности фряхи, которые стоит знать для установки софта.</p>
<p>1. настройка апача, установка питона из сорцов (хотя можно было бы из портов)<br />
2. установка пхп из портов.<br />
<span id="more-356"></span><br />
updatedb  /usr/libexec/locate.updatedb<br />
/usr/local/etc/apache22/httpd.conf</p>
<p>отключить deflate<br />
убедиться что включен cgi</p>
<p>изменить DocumentRoot</p>
<p>настроить<br />
<Directory "путь"><br />
	Options +ExecCGI<br />
	DirectoryIndex start.pyw<br />
	AddHandler cgi-script .pyw .py<br />
</Directory>	</p>
<p>/*  НЕ ДОБАВЛЯТЬ<br />
добавить вирт</p>
<p><VirtualHost localhost:80><br />
    ServerAdmin admin@localhost<br />
    DocumentRoot /var/www/html<br />
    ServerName localhost<br />
    ErrorLog logs/python_errors<br />
    CustomLog logs/python_custom common<br />
</VirtualHost><br />
*/</p>
<p>создать mkdir -p /var/www/html</p>
<p>apachectl restart</p>
<p># создать тестовый start.pyw<br />
echo &#8220;#!/usr/local/bin/python3&#8243; > start.pyw &#038;&#038; echo &#8220;import ssl, sqlite3&#8243; >> start.pyw</p>
<p># поставить питон<br />
mkdir /var/www/python &#038;&#038; cd /var/www/python</p>
<p>wget http://python.org/ftp/python/3.2.2/Python-3.2.2.tgz &#038;&#038; tar -xzf Python-3.2.2.tgz &#038;&#038; cd Python-3.2.2 &#038;&#038; ./configure &#038;&#038; make &#038;&#038; make install &#038;&#038; which python3</p>
<p>2. Ставим пхп</p>
<p>cd /usr/ports/lang/php5</p>
<p>make; make install; make clean</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/356/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>arch + xfce4</title>
		<link>http://www.lsdeex.ru/archives/346</link>
		<comments>http://www.lsdeex.ru/archives/346#comments</comments>
		<pubDate>Thu, 03 Nov 2011 14:53:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=346</guid>
		<description><![CDATA[поставить, создать юзеров (useradd), создать домашние директории
passwd &#8211; поставить им пароли
dhcpd eth0 &#8211; интерфейс для инета. 
обновляем базу пакмена &#8211; pacman -Sy
поставить вим pacman -S vim
включить репозитории в /etc/pacman.d/mirrorlist
указать в /etc/rc.conf  INTERFACE=eth0
ставить xfce: pacman -S xfce4
#pacman -S xorg-server
если virtualbox &#8211; pacman -S virtualbox-archlinux-additions
в xinitrc указать startxfce4
startx
продолжение следует
]]></description>
			<content:encoded><![CDATA[<p>поставить, создать юзеров (useradd), создать домашние директории<br />
passwd &#8211; поставить им пароли</p>
<p>dhcpd eth0 &#8211; интерфейс для инета. </p>
<p>обновляем базу пакмена &#8211; pacman -Sy</p>
<p>поставить вим pacman -S vim<br />
включить репозитории в /etc/pacman.d/mirrorlist<br />
указать в /etc/rc.conf  INTERFACE=eth0<br />
ставить xfce: pacman -S xfce4<br />
#pacman -S xorg-server<br />
если virtualbox &#8211; pacman -S virtualbox-archlinux-additions<br />
в xinitrc указать startxfce4<br />
startx<br />
продолжение следует</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/346/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как поднять ftp-демона на чистой машине</title>
		<link>http://www.lsdeex.ru/archives/338</link>
		<comments>http://www.lsdeex.ru/archives/338#comments</comments>
		<pubDate>Wed, 19 Oct 2011 09:07:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[хостинги]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=338</guid>
		<description><![CDATA[Это делается просто.
1 ставим pure-ftpd.i686 : Lightweight, fast and secure FTP server
yum install pure-ftpd
2 создаем ftp-юзера: adduser ftpadmin
3 ставим ему пароль: passwd ftpadmin
3.2 ставим ему домашней директорией www: usermod -d /var/www/ ftpadmin
4 запускаем сервер: pure-ftpd -4 -A -B -M -l unix -U 022:022
Если ругается на libmysqlclient.so:
wget -O /usr/lib64/libmysqlclient.so.15 http://files.directadmin.com/services/es_5.0_64/libmysqlclient.so.15
chmod 755 /usr/lib64/libmysqlclient.so.15
ldconfig
5 подключаемся по FTP: ftpadmin:пароль@сервер [...]]]></description>
			<content:encoded><![CDATA[<p>Это делается просто.</p>
<p>1 ставим pure-ftpd.i686 : Lightweight, fast and secure FTP server<br />
yum install pure-ftpd</p>
<p>2 создаем ftp-юзера: adduser ftpadmin<br />
3 ставим ему пароль: passwd ftpadmin<br />
3.2 ставим ему домашней директорией www: usermod -d /var/www/ ftpadmin</p>
<p>4 запускаем сервер: pure-ftpd -4 -A -B -M -l unix -U 022:022</p>
<p>Если ругается на libmysqlclient.so:</p>
<p>wget -O /usr/lib64/libmysqlclient.so.15 http://files.directadmin.com/services/es_5.0_64/libmysqlclient.so.15<br />
chmod 755 /usr/lib64/libmysqlclient.so.15<br />
ldconfig</p>
<p>5 подключаемся по FTP: ftpadmin:пароль@сервер и попадаем в /home/ftpadmin/</p>
<p><a href="http://www.linuxcenter.ru/lib/articles/networking/linux_pureftpd.phtml">конспектом отсюда</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/338/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Навигация в Total Commander как в lynx</title>
		<link>http://www.lsdeex.ru/archives/332</link>
		<comments>http://www.lsdeex.ru/archives/332#comments</comments>
		<pubDate>Mon, 10 Oct 2011 13:47:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=332</guid>
		<description><![CDATA[В линуксе я использую mc (midnight commander) и очень нравится его режим &#8220;Навигация в стиле lynx&#8221;
Вкратце &#8211; она позволяет войти в директорию нажатием стрелки &#8220;вправо&#8221;, а выйти из директории стрелкой &#8220;влево&#8221;.
Чтобы её включить в mc: Настройки &#8211; настройки панели &#8211; &#8220;навигация в стиле lynx&#8221;
Есть способ сделать то же самое в Total Commander

1 Настройка &#8211; разное [...]]]></description>
			<content:encoded><![CDATA[<p>В линуксе я использую mc (midnight commander) и очень нравится его режим &#8220;Навигация в стиле lynx&#8221;<br />
Вкратце &#8211; она позволяет войти в директорию нажатием стрелки &#8220;вправо&#8221;, а выйти из директории стрелкой &#8220;влево&#8221;.</p>
<p>Чтобы её включить в mc: Настройки &#8211; настройки панели &#8211; &#8220;навигация в стиле lynx&#8221;</p>
<p>Есть способ сделать то же самое в Total Commander<br />
<span id="more-332"></span></p>
<p>1 Настройка &#8211; разное &#8211; Переопределить горячие клавиши<br />
2 включаем радиобаттон &#8220;Клавиша&#8221;<br />
3 выбираем из выпадающего списка &#8220;Вправо (RIGHT)&#8221;, в поле команда пишем &#8220;cm_GoToDir&#8221; без кавычек<br />
4 выбираем из выпадающего списка &#8220;Влево (LEFT)&#8221;, в поле команда пишем &#8220;cm_GoToParent&#8221; без кавычек </p>
<p>Всё<br />
Теперь кнопка вправо открывает директорию, кнопка влево &#8211; вернуться в родительскую</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/332/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firstvds.ru с python 3.2 с нуля</title>
		<link>http://www.lsdeex.ru/archives/329</link>
		<comments>http://www.lsdeex.ru/archives/329#comments</comments>
		<pubDate>Sun, 11 Sep 2011 09:56:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[хостинги]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=329</guid>
		<description><![CDATA[Цель: получить рабочий vds, на котором выполняются скрипты на питон 3.2 с консольным/веб-интерфейсом
Подробности для freebsd
Покупаем VDS
http://firstvds.ru/products/vds_vps_hosting
На данный момент (09.2011) самый дешевый тарифный план 149р.

указываем логин, пароль, телефон
робот звонит на телефон, сообщает код из трех цифр
вводим их и активируем аккаунт
идем в раздел &#8220;Виртуальные серверы&#8221;, вверху жмем &#8220;Заказать&#8221;, далее, далее, &#8220;Шаблон диска&#8221; я выбрал debian 5.0 (ispmanager [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Цель:</strong> получить рабочий vds, на котором выполняются скрипты на питон 3.2 с консольным/веб-интерфейсом</p>
<p><a href='http://www.lsdeex.ru/archives/356'>Подробности для freebsd</a></p>
<p>Покупаем VDS<br />
<a href="http://firstvds.ru/products/vds_vps_hosting">http://firstvds.ru/products/vds_vps_hosting</a><br />
На данный момент (09.2011) самый дешевый тарифный план 149р.<br />
<span id="more-329"></span><br />
указываем логин, пароль, телефон<br />
робот звонит на телефон, сообщает код из трех цифр<br />
вводим их и активируем аккаунт</p>
<p>идем в раздел &#8220;Виртуальные серверы&#8221;, вверху жмем &#8220;Заказать&#8221;, далее, далее, &#8220;Шаблон диска&#8221; я выбрал debian 5.0 (ispmanager &#8211; важно, чтобы он был), всё остальное по дефолту.<br />
если дебиан с испменеджер нет в списке &#8211; потом надо переустановить в ВДСпанели</p>
<p>Таким образом мы создаем заказ, теперь осталось оплатить, что я и делаю с помощью <strong>вебмани отстойнейшей платёжной системы</strong>.</p>
<p>Платим в разделе &#8220;Информация о счетах&#8221;, потом идет обратно в вирт. серверы, жмем по созданному, выбираем оплатить с текущего счета, а не добавить в заказ и ждем.</p>
<p>Далее, получаем на почту письмо с доступами, идем в панель ISPManager &#8212; https://188.120.236.94/manager/ispmgr (ip берем в письме)</p>
<p>заводим FTP-юзера в разделе &#8220;Пользователи&#8221;. Даем ему все права.</p>
<p>Заходим по SSH</p>
<p><b>yum install mc gcc make libsqlite3x-devel openssl-devel libsqlite3-dev libssl-dev</b><br />
debian: <b>yum install mc gcc make libsqlite3-dev libssl-dev</b><br />
centos: <b>sqlite-devel</b></p>
<p>Идем в /etc/apache2/<br />
Копируем sites-available/default в sites-enabled/default<br />
Правим этот файл, чтобы cgi директория была /var/www/наш-фтп-юзер/data<br />
И имела строку<br />
Options +ExecCGI</p>
<p>Создаем вирт. хост, если его нет:</p>
<p><VirtualHost *:80><br />
    DocumentRoot /var/www/html<br />
    AddHandler cgi-script .py .pyw<br />
    DirectoryIndex index.py index.pyw start.py start.pyw<br />
</VirtualHost></p>
<p>Добавляем в опции вирт. хоста строки:</p>
<p>AddHandler cgi-script .py .pyw<br />
DirectoryIndex index.py index.pyw start.py start.pyw</p>
<p>Отключаем mod_deflate<br />
Перезагружаем апач: apache2ctl restart или service httpd/apache/apache2 restart</p>
<p>Ставим gcc:<br />
apt-get install gcc make</p>
<p>Ставим поддержку sqlite3 и ssl:<br />
apt-get install libsqlite3-dev libssl-dev<br />
В других случаях пакеты могут называться libsqlite3x-devel и openssl-devel</p>
<p>Ставим питон на сервер:<br />
wget http://python.org/ftp/python/3.2.2/Python-3.2.2.tgz &#038;&#038; tar -xzf Python-3.2.2.tgz &#038;&#038; cd Python-3.2.2 &#038;&#038; ./configure &#038;&#038; make &#038;&#038; make install &#038;&#038; which python3</p>
<p>построчно:<br />
wget http://python.org/ftp/python/3.2.2/Python-3.2.2.tgz<br />
tar -xzf Python-3.2.2.tgz<br />
./configure &#038;&#038; make &#038;&#038; make install</p>
<p>Убедимся что питон в наличии:<br />
which python3<br />
#!/usr/local/bin/python3</p>
<p>Теперь сделаем тестовый скрипт</p>
<p>#!/usr/local/bin/python3<br />
import sys, sqlite3, ssl<br />
sys.stdout.buffer.write(b&#8217;Content-type: text/html;charset=utf-8\n\n&#8217;)</p>
<p>print(&#8217;hello&#8217;)</p>
<p>Сохраним его как start.py, дадим все права на выполнение и зальем на ftp в /var/www/фтп-юзер/data/</p>
<p>Откроем http://айпи-сервера/<br />
Мы должны увидеть &#8220;hello&#8221;</p>
<p>Репозитории для centos: <a href="http://www.osresources.com/11_6_en.html">http://www.osresources.com/11_6_en.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/329/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Письмо про эксепшены (дабы не пропало)</title>
		<link>http://www.lsdeex.ru/archives/327</link>
		<comments>http://www.lsdeex.ru/archives/327#comments</comments>
		<pubDate>Sat, 10 Sep 2011 06:28:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=327</guid>
		<description><![CDATA[Хочу поделиться своим соображением по поводу эксепшенов
тк. я не люблю читать книжки по кодингу, а если и читаю то все моментально забываю &#8211; некоторые приемы, давно описанные в книгах, ко мне приходят лишь с опытом, когда я начинаю понимать зачем это нужно и как мне поможет
с пхп я вообще не юзал эксепшены &#8211; просто не [...]]]></description>
			<content:encoded><![CDATA[<p>Хочу поделиться своим соображением по поводу эксепшенов</p>
<p>тк. я не люблю читать книжки по кодингу, а если и читаю то все моментально забываю &#8211; некоторые приемы, давно описанные в книгах, ко мне приходят лишь с опытом, когда я начинаю понимать зачем это нужно и как мне поможет</p>
<p>с пхп я вообще не юзал эксепшены &#8211; просто не понимал зачем они нужны<br />
с питоном ситуация изменилась</p>
<p>жирным я выделил те места в коде, на которые стоит обратить внимание<br />
<span id="more-327"></span></p>
<p>сначала я научился проверять наличие индекса у листа, т.к встроенных средств для этого в питоне нет:</p>
<p><strong>try:</strong><br />
   test = arr[5]<br />
<strong>except:</strong><br />
   print(&#8217;fail&#8217;)</p>
<p>потом я нашел универсальный способ узнать в чем ошибка:</p>
<p>try:<br />
   test = arr[5]<br />
except<strong> Exception as ex</strong>:<br />
   print(&#8217;fail: &#8216; + <strong>ex</strong>)</p>
<p>в это время я ещё узнал что строки в питоне неизменяемые и создается три строки в памяти: &#8216;fail: &#8216;, ex, &#8216;fail: ex&#8217;<br />
поэтому начал везде применять проценты (хз как грамотно назвать):</p>
<p>try:<br />
   test = arr[5]<br />
except Exception as ex:<br />
   print(&#8217;fail: <strong>%s&#8217; %</strong> ex)</p>
<p>Но отсюда нельзя получить трейсбек &#8211; список вызовов функций, по которому можно определить где ошибка, поэтому делаем вот что:</p>
<p><strong>import traceback</strong></p>
<p>try:<br />
   test = arr[5]<br />
except Exception as ex:<br />
    print(&#8217;fail: %s&#8217; % ex)<br />
    <strong>print(traceback.print_exc(file=sys.stdout))</strong></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Далее,<br />
Я сделал функцию parse, для удобного выдирания регулярок:</p>
<p>    def parse(pattern, data):<br />
        &#8221;&#8217; возвращает первое совпадение pattern в data &#8221;&#8217;</p>
<p>        m = re.search(pattern, data)</p>
<p>        if not m:<br />
            return &#8216;NOT FOUND&#8217;</p>
<p>        return m.group(1)</p>
<p>Возвращать фразу Нот фаунд &#8211; идиотское решение.<br />
Я стал мучаться с нерабочими запросами, куда вместо значения паттерна попадала эта фраза, например:</p>
<p>t = hlp.parse(r&#8217;регулярка&#8217;, page)</p>
<p>data = {<br />
    &#8216;data&#8217;: t   # и сюда мы получаем &#8216;NOT FOUND&#8217;, даже не зная о проблеме<br />
}</p>
<p>Ещё хуже, когда из ответа к примеру бралось первое значение:</p>
<p>t = hlp.parse(r&#8217;регулярка&#8217;, page)</p>
<p>t[0] # F  &#8212; такое было совсем недавно, полный ппц, долго ломал голову что за клятая F</p>
<p>Тогда стал проверять значение:</p>
<p>t = hlp.parse(r&#8217;регулярка&#8217;, page)<br />
if t == &#8216;NOT FOUND&#8217;  </p>
<p>Тут заметь что нельзя делать is вместо ==. Is возвращает true только для маленьких строк, что закешировались в памяти и имеют постоянный адрес. Большие строки и числа свой адрес меняют и is возвращает False</p>
<p>t = &#8216;abc&#8217;<br />
t is &#8216;abc&#8217; # True</p>
<p>t = 12312312312<br />
t is 12312312312 # False</p>
<p>В общем, функция стала возвращать False:</p>
<p>    def parse(pattern, data):<br />
        &#8221;&#8217; возвращает первое совпадение pattern в data &#8221;&#8217;</p>
<p>        m = re.search(pattern, data)</p>
<p>        if not m:<br />
            <strong>return False</strong></p>
<p>        return m.group(1)</p>
<p>Это удобно, код весь полнится проверками и работает стабильно:</p>
<p>        numbr = hlp.parse(r&#8217;playa_link = \&#8217;http://promodj.ru/prelisten/\&#8217; + ([0-9]+)&#8217;, page)<br />
       <strong> if numbr is False</strong>:<br />
            self.log(&#8217;не нашел numbr&#8217;, &#8216;!&#8217;, tid=tid)</p>
<p>Но недавно, Эл приехал в Новосиб и мы сидели на кухне, я ему рассказывал про эксепшены в питоне.</p>
<p>У меня в том же линкедине самое обычное дело:</p>
<p>         path = hlp.parse(&#8217;SUCCESS&#8221;,&#8221;value&#8221;:&#8221;([^"]+)&#8217;, page)</p>
<p>         if path is False:<br />
            self.log(&#8217;[#%d] не могу выдрать path&#8217; % tid, &#8216;!&#8217;)<br />
             return</p>
<p>        part = hlp.parse(&#8217;name=&#8221;addPosition&#8221; href=&#8221;([^"]+)&#8217;, page.replace(&#8217;\\&#8221;&#8216;, &#8216;&#8221;&#8216;))<br />
        if part is False:<br />
            self.log(&#8217;[#%d] не нашел ссылку на добавление компании акка&#8217; % tid, &#8216;!&#8217;)<br />
            return False</p>
<p>        uid = hlp.parse(r&#8217;LIM:([0-9]+)&#8217;, cookie)</p>
<p>        if uid is False:<br />
            self.log(&#8217;[#%d] не нашел uid в куках&#8217; % tid, &#8216;!&#8217;)<br />
            return False</p>
<p>Потом я правда упростил до такого:</p>
<p>        csrf = hlp.parse(r&#8217;csrfToken&#8221; value=&#8221;([^"]+)&#8217;, page)<br />
        upld_info = hlp.parse(r&#8217;upload_info&#8221; type=&#8221;hidden&#8221; value=&#8221;([^"]*)&#8217;, page)<br />
        upldjs = hlp.parse(r&#8217;upload_info_with_js&#8221; type=&#8221;hidden&#8221; value=&#8221;([^"]*)&#8217;, page)</p>
<p>        <strong>if False in [csrf, upld_info, upldjs]</strong>:<br />
            self.log(&#8217;[#%d] не нашли переменные csrf, upld_info, upldjs&#8217; % tid, &#8216;!&#8217;)<br />
            return False</p>
<p>Но сейчас меня внезапно осенило.<br />
Я ему сам сказал что можно все завернуть в один try-catch и это очень удобно, при том что сам делаю наоборот!</p>
<p>try:<br />
        csrf = hlp.parse(r&#8217;csrfToken&#8221; value=&#8221;([^"]+)&#8217;, page)<br />
        upld_info = hlp.parse(r&#8217;upload_info&#8221; type=&#8221;hidden&#8221; value=&#8221;([^"]*)&#8217;, page)<br />
        upldjs = hlp.parse(r&#8217;upload_info_with_js&#8221; type=&#8221;hidden&#8221; value=&#8221;([^"]*)&#8217;, page)<br />
except Exception as ex:</p>
<p>         print(<strong>&#8216;parsing exception: %s&#8217; % ex</strong>)</p>
<p>Надо лишь сделать чтобы все parse не возвращали False, а кидали эксепшен</p>
<p>raise Exception(&#8221;error parsing csrf&#8221;)<br />
raise Exception(&#8221;error parsing upld_info&#8221;)<br />
raise Exception(&#8221;error parsing upldjs&#8221;)</p>
<p>Хреново лишь то, что у меня все проекты заточены на False<br />
менять на эксепшен &#8211; значит переписывать кучу кода</p>
<p>Сейчас я в раздумьях как сделать функцию универсальной, чтобы в новом коде она уже могла кидать эксепшен.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/327/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поддержка ssl и sqlite3 в python 3.2</title>
		<link>http://www.lsdeex.ru/archives/325</link>
		<comments>http://www.lsdeex.ru/archives/325#comments</comments>
		<pubDate>Wed, 15 Jun 2011 07:13:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=325</guid>
		<description><![CDATA[Поддержка появляется сразу после компиляции, при условии что в системе есть необходимые dev-пакеты.
Итак, для начала ставим (или проверяем наличие) пакеты libssl-dev и libsqlite3-dev
Затем качаем сорцы питона Python 3.2 compressed source tarball (for Linux, Unix or Mac OS X)
Распаковываем: tar -xzf Python-3.2.tgz
переходим: cd Python-3.2
конфигурируем и компилируем: ./configure &#038;&#038; make &#038;&#038; make install
Запускаем свежеиспеченный питон: python3.2
Проверяем:
> import [...]]]></description>
			<content:encoded><![CDATA[<p>Поддержка появляется сразу после компиляции, при условии что в системе есть необходимые dev-пакеты.</p>
<p>Итак, для начала ставим (или проверяем наличие) пакеты libssl-dev и libsqlite3-dev<br />
Затем качаем сорцы питона <a href="http://python.org/download/">Python 3.2 compressed source tarball (for Linux, Unix or Mac OS X)</a></p>
<p>Распаковываем: tar -xzf Python-3.2.tgz<br />
переходим: cd Python-3.2<br />
конфигурируем и компилируем: ./configure &#038;&#038; make &#038;&#038; make install</p>
<p>Запускаем свежеиспеченный питон: python3.2<br />
Проверяем:<br />
> import ssl<br />
> import sqlite3</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/325/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>профилирование python 3 с cProfile и gprof2dot</title>
		<link>http://www.lsdeex.ru/archives/318</link>
		<comments>http://www.lsdeex.ru/archives/318#comments</comments>
		<pubDate>Wed, 08 Jun 2011 07:17:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=318</guid>
		<description><![CDATA[Мои первые опыты в профилировании python-скриптов в линукс.
Попробовал 2 варианта.
нам понадобится python 3 (в моем случае 3.2) и скрипт, например start.pyw
1 вариант
также надо установить gprof2dot: gprof2dot.noarch : Generate dot graphs from the output of several profilers
и pydot: pydot.noarch : Python interface to Graphviz&#8217;s Dot language
На выходе получаем png-файл, типа такого:


1 профилируем:
python3 -m cProfile -o out.pstats [...]]]></description>
			<content:encoded><![CDATA[<p>Мои первые опыты в профилировании python-скриптов в линукс.<br />
Попробовал 2 варианта.</p>
<p>нам понадобится python 3 (в моем случае 3.2) и скрипт, например start.pyw</p>
<p><strong>1 вариант</strong></p>
<p>также надо установить <strong>gprof2dot</strong>: gprof2dot.noarch : Generate dot graphs from the output of several profilers<br />
и <strong>pydot</strong>: pydot.noarch : Python interface to Graphviz&#8217;s Dot language</p>
<p>На выходе получаем png-файл, типа такого:<br />
<img src="http://clip2net.com/clip/m68436/1307517435-clipw28538-36kb.png" alt="" /><br />
<span id="more-318"></span></p>
<p>1 профилируем:<br />
python3 -m cProfile -o <span style='color: blue'>out.pstats</span> start.pyw</p>
<p>2 создаем png-файл:<br />
gprof2dot -f pstats  out.pstats | dot -Tpng -o <span style='color: blue'>out.png</span></p>
<p><strong>2 вариант</strong></p>
<p><img src='http://clip2net.com/clip/m68436/1307533858-clipj17942-106kb.png' /></p>
<p>Понадобится поставить <strong>kdesdk</strong>: kdesdk.i686 : The KDE Software Development Kit (SDK)<br />
и <strong>pyprof2calltree</strong>: http://pypi.python.org/pypi/pyprof2calltree/ (для него необходимо иметь питон 2.7)</p>
<p>1 профилируем:<br />
python3 -m cProfile -o <span style='color: blue'>out.pyprof</span> start.pyw</p>
<p>2 конвертируем:<br />
pyprof2calltree -i my.pyprof -o <span style='color: blue'>my.out</span></p>
<p>3 запускаем прогу <a href='http://kcachegrind.sourceforge.net/html/Home.html'>kcachegrind</a> из состава kdesdk<br />
и в ней открываем полученный my.out</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/318/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Подключение python 3.2 к Apache 2.2 как CGI</title>
		<link>http://www.lsdeex.ru/archives/316</link>
		<comments>http://www.lsdeex.ru/archives/316#comments</comments>
		<pubDate>Fri, 06 May 2011 15:21:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=316</guid>
		<description><![CDATA[В общем, вот рабочий пример запуска python3 как CGI в апач 2.2 с кириллицей в браузере:

 #!/usr/local/bin/python3
 import sys, os
 os.dup2(1, 2) # copy stderr->stdout
 sys.stdout.buffer.write(b'Content-type: text/html;charset=utf-8\n\n')
 def out(msg):
 sys.stdout.buffer.write(msg.encode('utf8'))
 sys.stdout.flush() 
 # test
 import time
 for i in range(10):
 out('кириллица')
 time.sleep(1)

 файл сохраняем в utf-8
 в браузере тоже должна быть выбрана эта кодировка
 все [...]]]></description>
			<content:encoded><![CDATA[<p>В общем, вот рабочий пример запуска python3 как CGI в апач 2.2 с кириллицей в браузере:<br />
<code lang=python><br />
 #!/usr/local/bin/python3<br />
 import sys, os<br />
 os.dup2(1, 2) # copy stderr->stdout<br />
 sys.stdout.buffer.write(b'Content-type: text/html;charset=utf-8\n\n')</p>
<p> def out(msg):<br />
 sys.stdout.buffer.write(msg.encode('utf8'))<br />
 sys.stdout.flush() </p>
<p> # test<br />
 import time<br />
 for i in range(10):<br />
 out('кириллица<br />')<br />
 time.sleep(1)<br />
</code></p>
<p> файл сохраняем в utf-8<br />
 в браузере тоже должна быть выбрана эта кодировка<br />
 все ошибки копируются в stdout, т.е. в браузер</p>
<p> подключение в httpd.conf:<br />
 &#8211; создаем вирт. хост, добавляем хэндлер<br />
 &#8211; в директории со скриптами добавляем +ExecCGI<br />
 &#8211; ставим на скрипт права на выполнение: chmod +x script.py<br />
<code lang=><br />
 <VirtualHost localhost:80><br />
 ServerAdmin admin@localhost2<br />
 DocumentRoot /home/python3/www<br />
 ServerName pyweb<br />
 ErrorLog logs/pyweb_errors<br />
 CustomLog logs/pyweb_custom common</p>
<p> AddHandler cgi-script .cgi .py .pyw # важно<br />
 </VirtualHost></p>
<p> <Directory "/home/python3/www"><br />
 DirectoryIndex start.pyw<br />
 Options +ExecCGI # важно<br />
 </Directory></code></p>
<p> вроде бы больше ничего не требуется</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/316/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Наша сборка python3.1/pyqt4/futures</title>
		<link>http://www.lsdeex.ru/archives/310</link>
		<comments>http://www.lsdeex.ru/archives/310#comments</comments>
		<pubDate>Wed, 09 Mar 2011 05:16:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=310</guid>
		<description><![CDATA[скачать (15.9 mb)
Перед вами &#8211; статичная сборка python 3.1 для запуска скриптов, написанных на замечательном языке python.
- директория _SOFT для скриптов
- в пути к сборке не должно быть пробелов (т.е. нельзя установить её на рабочем столе), кладите в корень диска
- для установки надо запустить install.bat, который пропишет в системе путь к библиотеке pyqt4
- сборка содержит [...]]]></description>
			<content:encoded><![CDATA[<p><center><a href="http://http://www.sendspace.com/file/5k8jt7"><strong style='color: blue'>скачать (15.9 mb)</strong></a></center></p>
<p>Перед вами &#8211; статичная сборка python 3.1 для запуска скриптов, написанных на замечательном языке python.</p>
<p>- директория _SOFT для скриптов<br />
- в пути к сборке не должно быть пробелов (т.е. нельзя установить её на рабочем столе), кладите в корень диска<br />
- для установки надо запустить install.bat, который пропишет в системе путь к библиотеке pyqt4<br />
- сборка содержит модули concurrent.futures для удобной работы с многопоточностью и pyQt4 для оконного интерфейса<br />
- для запуска скрипта, необходимо ассоциировать файл start.pyw (он лежит в корне скрипта) с pythonW.exe (важно! обычный python.exe &#8211; для консольных скриптов, pythonw.exe &#8211; для оконных приложений)</p>
<p>Распаковав сборку и запустив bat-файл, вы получаете возможность запускать любые скрипты написанные на python 3.1 с использованием pyqt4 на вашем компьютере </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/310/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

