<?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>Sat, 05 May 2012 15:25:01 +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>установка Fedora 16 на virtualbox в windows</title>
		<link>http://www.lsdeex.ru/archives/391</link>
		<comments>http://www.lsdeex.ru/archives/391#comments</comments>
		<pubDate>Sat, 05 May 2012 15:25:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=391</guid>
		<description><![CDATA[В общем-то установить и то и другое &#8211; легко.
Но вот поставить VboxGuestTools &#8211; в линуксе немного сложнее чем в винде.
Поэтому тут следует придерживаться этого мануала:
http://www.if-not-true-then-false.com/2010/install-virtualbox-guest-additions-on-fedora-centos-red-hat-rhel/
И лишь после этого заработают Общие папки
]]></description>
			<content:encoded><![CDATA[<p>В общем-то установить и то и другое &#8211; легко.<br />
Но вот поставить VboxGuestTools &#8211; в линуксе немного сложнее чем в винде.<br />
Поэтому тут следует придерживаться этого мануала:<br />
<a href="http://www.if-not-true-then-false.com/2010/install-virtualbox-guest-additions-on-fedora-centos-red-hat-rhel/">http://www.if-not-true-then-false.com/2010/install-virtualbox-guest-additions-on-fedora-centos-red-hat-rhel/</a></p>
<p>И лишь после этого заработают Общие папки</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/391/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Добавление поддержки python в denwer</title>
		<link>http://www.lsdeex.ru/archives/359</link>
		<comments>http://www.lsdeex.ru/archives/359#comments</comments>
		<pubDate>Sat, 25 Feb 2012 21:34:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[other]]></category>

		<guid isPermaLink="false">http://www.lsdeex.ru/?p=359</guid>
		<description><![CDATA[под виндой надо поставить денвер (в C:/webservers/) и питон 3.2 (в C:/python32/)
В папке денвера C:/webservers/home/localhost/www/ создаем файл .htaccess с текстом:
    DirectoryIndex start.pyw index.py
    Options ExecCGI
    AddHandler cgi-script .cgi .py .pyw
    ScriptInterpreterSource Registry-Strict
Потом создаем файл install_python.reg с текстом:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.pyw]
@=&#8221;Python.File&#8221;
&#8220;Content Type&#8221;=&#8221;text/plain&#8221;
[HKEY_CLASSES_ROOT\.pyw\Shell]
[HKEY_CLASSES_ROOT\.pyw\Shell\ExecCGI]
[HKEY_CLASSES_ROOT\.pyw\Shell\ExecCGI\Command]
@=&#8221;c:\\Python32\\python.exe&#8221;
[HKEY_CLASSES_ROOT\.py]
@=&#8221;Python.File&#8221;
&#8220;Content Type&#8221;=&#8221;text/plain&#8221;
[HKEY_CLASSES_ROOT\.py\Shell]
[HKEY_CLASSES_ROOT\.py\Shell\ExecCGI]
[HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command]
@=&#8221;c:\\Python32\\python.exe&#8221;
Запускаем [...]]]></description>
			<content:encoded><![CDATA[<p>под виндой надо поставить <a href='http://denwer.ru'>денвер</a> (в C:/webservers/) и <a href='http://python.org/download/'>питон 3.2</a> (в C:/python32/)</p>
<p>В папке денвера C:/webservers/home/localhost/www/ <strong>создаем файл .htaccess с текстом:</strong></p>
<p>    DirectoryIndex start.pyw index.py<br />
    Options ExecCGI<br />
    AddHandler cgi-script .cgi .py .pyw<br />
    ScriptInterpreterSource Registry-Strict</p>
<p><strong>Потом создаем файл install_python.reg с текстом:</strong></p>
<p>Windows Registry Editor Version 5.00</p>
<p>[HKEY_CLASSES_ROOT\.pyw]<br />
@=&#8221;Python.File&#8221;<br />
&#8220;Content Type&#8221;=&#8221;text/plain&#8221;</p>
<p>[HKEY_CLASSES_ROOT\.pyw\Shell]</p>
<p>[HKEY_CLASSES_ROOT\.pyw\Shell\ExecCGI]</p>
<p>[HKEY_CLASSES_ROOT\.pyw\Shell\ExecCGI\Command]<br />
@=&#8221;c:\\Python32\\python.exe&#8221;</p>
<p>[HKEY_CLASSES_ROOT\.py]<br />
@=&#8221;Python.File&#8221;<br />
&#8220;Content Type&#8221;=&#8221;text/plain&#8221;</p>
<p>[HKEY_CLASSES_ROOT\.py\Shell]</p>
<p>[HKEY_CLASSES_ROOT\.py\Shell\ExecCGI]</p>
<p>[HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command]<br />
@=&#8221;c:\\Python32\\python.exe&#8221;</p>
<p>Запускаем и на вопрос &#8220;Добавить информацию в реестр?&#8221; жмем &#8220;Да&#8221;</p>
<p><strong>Закидываем скрипты</strong> в C:/webservers/home/localhost/www/, запускаем денвер и открываем в браузере http://localhost/</p>
<p>Если ошибка 500, надо открыть Пуск->Выполнить, ввести regedit, развернуть h_classes_root, найти расширение .pyw/.py и убедиться что в самой последней вложенной папке установлено значение &#8211; путь к питону (C:\python32\python.exe)</p>
<p>Если питон не обрабатывается, добавляем в папку www файл .htaccess со строкой<br />
Options +ExecCGI</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lsdeex.ru/archives/359/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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[Некоторые особенности фряхи, которые стоит знать для установки софта.
поиск среди установленных пакетов: pkg_info &#124; grep python
установка: portinstall psearch
поиск пакета: psearch python3
В /etc/make.conf правим версию питона:
PYTHON_DEFAULT_VERSION=python3.2
portinstall databases/py-sqlite3  (или make -C /usr/ports/databases/py-sqlite3 install clean)
portinstall lang/python32
/usr/libexec/locate.updatedb
vim /usr/local/etc/apache22/httpd.conf
apachectl restart
mv /usr/local/etc/apache22/extra/httpd-vhosts.conf /usr/local/etc/apache22/Includes
ln -s /usr/local/bin/python3.2 /usr/local/bin/python3
/etc/make.conf: PYTHON_DEFAULT_VERSION=&#8217;python3.2&#8242;
1. настройка апача, установка питона из сорцов (хотя можно было бы из портов)
2. установка [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторые особенности фряхи, которые стоит знать для установки софта.</p>
<p>поиск среди установленных пакетов: pkg_info | grep python<br />
установка: portinstall psearch<br />
поиск пакета: psearch python3</p>
<p>В /etc/make.conf правим версию питона:<br />
PYTHON_DEFAULT_VERSION=python3.2</p>
<p>portinstall databases/py-sqlite3  (или make -C /usr/ports/databases/py-sqlite3 install clean)<br />
portinstall lang/python32</p>
<p>/usr/libexec/locate.updatedb</p>
<p>vim /usr/local/etc/apache22/httpd.conf<br />
apachectl restart<br />
mv /usr/local/etc/apache22/extra/httpd-vhosts.conf /usr/local/etc/apache22/Includes</p>
<p>ln -s /usr/local/bin/python3.2 /usr/local/bin/python3</p>
<p>/etc/make.conf: PYTHON_DEFAULT_VERSION=&#8217;python3.2&#8242;</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
Версия 2.0 от 07-03-12 (старая версия)
- регаем firstvds.ru самый дешевый с виртуализацией openVz: http://firstvds.ru/products/vds_vps_hosting

- активируем, пополняем счет, создаем вирт.сервер с образом debian-5.0-i386-ispmanager
- приходит письмо, берем ip и пароль root
- подключаемся ssh root@ip
# ставим все необходимое
- apt-get -y install locate mc gcc [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Цель:</strong> получить рабочий vds, на котором выполняются скрипты на питон 3.2 с консольным/веб-интерфейсом</p>
<p><a href='http://www.lsdeex.ru/archives/356'>Подробности для freebsd</a></p>
<p><strong>Версия 2.0 от 07-03-12</strong> (<a href='http://www.lsdeex.ru/archives/366'>старая версия</a>)</p>
<p>- регаем firstvds.ru самый дешевый с виртуализацией openVz: <a href='http://firstvds.ru/products/vds_vps_hosting'>http://firstvds.ru/products/vds_vps_hosting</a></p>
<p><center><img src='http://clip2net.com/clip/m68436/1332065582-clipj19455-85kb.png' /></center></p>
<p>- активируем, пополняем счет, создаем вирт.сервер с образом debian-5.0-i386-ispmanager<br />
- приходит письмо, берем ip и пароль root<br />
- подключаемся ssh root@ip</p>
<p># ставим все необходимое<br />
- apt-get -y install locate mc gcc make libsqlite3x-devel openssl-devel libsqlite3-dev libssl-dev<br />
либо<br />
- yum -y install locate mc gcc make openssl-devel sqlite-devel</p>
<p># добавляем вирт.хост<br />
- cp /etc/apache2/sites-available/default /etc/apache2/sites-enabled/</p>
<p># ставим свежий питон<br />
<code>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 &#038;&#038; python3 -c "import sqlite3,ssl"</code></p>
<p># настраиваем апач<code><br />
- vim /etc/apache2/sites-enabled/default<br />
	Добавляем:<br />
    AddHandler cgi-script .py .pyw<br />
    DirectoryIndex start.pyw index.py<br />
<Directory /var/www/html><br />
    Order allow,deny<br />
    Allow from all<br />
    Options ExecCGI<br />
</Directory></code></p>
<p>- apache2ctl restart</p>
<p>если вдруг 403 &#8211; не дает запустить скрипт или директорию &#8211; в первую очередь смотрим логи апача<br />
который указаны для вирт.хоста или общий error_log</p>
<p>- заливаем по ssh скрипт в /var/www<br />
- chmod -R 777 /var/www</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>
	</channel>
</rss>

