<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <atom:link rel="self" type="application/rss+xml" href="http://breys.ru/rss"/>
    <language>ru</language>
    <copyright>Copyright 2008,2009 breys.ru</copyright>
    <title>Заметки на breys.ru</title>
    <link>http://breys.ru/blog/</link>
    <description>Заметки по теме: Программирование, Брейс - дизайн студия</description>
    <item>
      <link>http://breys.ru/blog/1617.html</link>
      <guid>http://breys.ru/blog/1617.html</guid>
      <title>Flask, создание собственных, расширенных виджетов форм для Flask.admin</title>
      <pubDate>Fri, 28 Nov 2014 08:36:19 +0400</pubDate>
      <description>&lt;p&gt;Часто требуется на формах Flask.admin создавать виджеты поведение которых не предусмотренно стандарными моделями и для решения этой проблемы необходимо уметь создавать свои виджеты, путём наследования базовых и расширением их функционала&lt;/p&gt;
&lt;p&gt;Например, мне в модели страницы необходимо указывать путь к шаблону с помощью которого будет генерироваться редактируемая страница, а список шаблонов получается путём сканирования директории шаблонов текущего домена (мультидоменная CMS), для решения этой проблемы наследую от&amp;nbsp; wtforms.fields.SelectField новый класс SelectTemplateField у которого переопределяю конструктор, где инициализирую параметр choices для родительского класса&lt;/p&gt;
&lt;p&gt;&lt;a title="открыть: Flask, wtforms.fields, SelectField" rel="lightbox[roadtrip]" href="/upload/1417153460.04.png"&gt;&lt;img src="/upload/images/1417153460.04.png" alt="Flask, wtforms.fields, SelectField" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;делается это вот так, в файле fields.py объявляю новый класс&lt;/p&gt;
&lt;pre&gt;class SelectTemplateField(SelectField):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self, *args, **kwargs):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; template_dir = os.path.join(kwargs[&amp;#039app_template&amp;#039], g.domen.template_path)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; choices = [ (name,name) for name in os.listdir(template_dir) if os.path.isfile(os.path.join(template_dir,name))]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; choices.sort()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kwargs.pop(&amp;#039app_template&amp;#039)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kwargs[&amp;#039choices&amp;#039] = choices&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return super(SelectTemplateField, self).__init__(*args, **kwargs)&lt;/pre&gt;
&lt;p&gt;в конструкторе&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;вычисляю путь к директории шаблонов текущего домена (template_dir)&lt;/li&gt;
&lt;li&gt;заполняю список именами файлов из этой директории&lt;/li&gt;
&lt;li&gt;сортирую список&lt;/li&gt;
&lt;li&gt;удаляю из kwargs элемент app_template, иначе базовый класс вылетит с ошибкой&lt;/li&gt;
&lt;li&gt;добавляю в отсортированный список с доступными шаблонами в kwargs&lt;/li&gt;
&lt;li&gt;вызываю конструктор базового класса&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Затем этот виджен нужно подключить к классу PageAdmin, делается это путём добавления в класс PageAdmin опции form_extra_fields сделующим образом:&lt;/p&gt;
&lt;pre&gt;form_extra_fields = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#039template&amp;#039: SelectTemplateField(u&amp;#039шаблон&amp;#039,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app_template = os.path.join(app.root_path, app.template_folder)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;
&lt;p&gt;Здесь определяется стандартный класс для свойства template у класса Page, путём переопределения для него виджета с его инициализацией свойств label и app_template (которое затем используется в конструкторе переопредённого класса)&lt;/p&gt;
&lt;p&gt;Вот так легко и просто можно очень существенно расширить возможности генераторов форм во Flask&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/1608.html</link>
      <guid>http://breys.ru/blog/1608.html</guid>
      <title>Sqlite3 работа с несколькими базами</title>
      <pubDate>Mon, 21 Jul 2014 15:12:29 +0400</pubDate>
      <description>&lt;p&gt;Когда необходимо поработать сразу с несколькими базами SQLite, используя их в одном запросе, то приходится пошаманить и найти не самые хорошо задокументированные функции консольного клиента&lt;/p&gt;
&lt;p&gt;Допустим вы работаете с текущей сессии с base.db и подключили её вот так:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ &lt;strong&gt;sqlite3 base.db&lt;/strong&gt;&lt;br /&gt;SQLite version 3.8.2 2013-12-06 14:53:30&lt;br /&gt;Enter ".help" for instructions&lt;br /&gt;Enter SQL statements terminated with a ";"&lt;br /&gt;sqlite&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;проверяем подключенные базы и видим&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sqlite&amp;gt; &lt;strong&gt;.database&lt;/strong&gt;&lt;br /&gt;seq&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;---&amp;nbsp; ---------------&amp;nbsp; ----------------------------------------------------------&lt;br /&gt;0&amp;nbsp;&amp;nbsp;&amp;nbsp; main&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /home/ffsdmad/Flask/base.db&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;подключем ещё одну и проверяем&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;sqlite&amp;gt; &lt;strong&gt;attach database &amp;#039base.dbbase.db&amp;#039 as b2;&lt;/strong&gt;&lt;br /&gt;sqlite&amp;gt; &lt;strong&gt;.database&lt;/strong&gt;&lt;br /&gt;seq&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; file&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;---&amp;nbsp; ---------------&amp;nbsp; ----------------------------------------------------------&lt;br /&gt;0&amp;nbsp;&amp;nbsp;&amp;nbsp; main&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /home/ffsdmad/Flask/base.db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp; b2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /home/ffsdmad/Flask/base.dbbase.db&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;sqlite&amp;gt;&lt;strong&gt; select id, date from b2.pages;&lt;/strong&gt;&lt;br /&gt;1|2014-03-27&lt;br /&gt;2|2014-03-27&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;вот так, теперь легко можно стряпать вставки из другой базы используя алиас&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/621.html</link>
      <guid>http://breys.ru/blog/621.html</guid>
      <title>Пакетная обработка DBF Foxpro файлов, Import в FoxPRO</title>
      <pubDate>Wed, 26 May 2010 15:36:55 +0400</pubDate>
      <description>&lt;p&gt;Потребовалось импортировать данные из реляционный Mysql в ненавистный FoxPRO. Как всегда приходится использовать не менее ненавистный Perl&lt;/p&gt;
&lt;pre&gt;#!/usr/bin/perl&lt;br /&gt;use XBase;&lt;br /&gt;use DBI;&lt;br /&gt;&lt;br /&gt;my $dsn = &amp;#039;DBI:mysql:AF3:mysql.a&amp;#039;;&lt;br /&gt;my $db_user_name = &amp;#039;root&amp;#039;;&lt;br /&gt;my $db_password = &amp;#039;root&amp;#039;;&lt;br /&gt;&lt;br /&gt;my $dbh = DBI-&amp;gt;connect($dsn, $db_user_name, $db_password);&lt;br /&gt;&lt;br /&gt;sub mysql_2_dbf{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $nfile = "$_[0]";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $table = new XBase "struct/$_[0]"&amp;nbsp; or die XBase-&amp;gt;errstr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $newtable = $table-&amp;gt;create("name" =&amp;gt; $nfile, "codepage" =&amp;gt; "cp1251");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $table-&amp;gt;close();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $table = new XBase $nfile&amp;nbsp; or die XBase-&amp;gt;errstr;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $sth = $dbh-&amp;gt;prepare(qq{set names cp1251});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sth-&amp;gt;execute();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sth = $dbh-&amp;gt;prepare(qq{select * from $_[0]});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sth-&amp;gt;execute();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $recno = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (my @data = $sth-&amp;gt;fetchrow_array())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $table-&amp;gt;set_record($recno,@data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #print ($recno,@data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $recno++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($recno&amp;gt;0){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "expot to $_[0] -- $recno record\n";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sth-&amp;gt;finish();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $table-&amp;gt;close();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;my @table = ("FOND","FOND3","MOVE","OPIS","OPIS2");&lt;br /&gt;&lt;br /&gt;while ( my $arg = shift @table ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; mysql_2_dbf($arg);&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;Следует обратить внимание на функции создания структуры новой таблицы на основе эталонной table-&amp;gt;create&lt;/p&gt;
&lt;p&gt;На функцию добавления новой записи -- как ни странно необходимо указывать уникальный номер для вставки новой записи&lt;/p&gt;
&lt;p&gt;А так же на то, что FoxPRO структура данных в самих полях может отличаться от нормальной, например данные могут выравниваться по краям или центру&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/617.html</link>
      <guid>http://breys.ru/blog/617.html</guid>
      <title>Выбор платформы для презентаций</title>
      <pubDate>Mon, 19 Apr 2010 14:56:21 +0400</pubDate>
      <description>&lt;p&gt;По долгу службы мне приходится заниматься презентациями, вернее помогать сотрудникам в создании этих самых презентаций. Насоздавали мы их уже не мало, но ни одна не удовлетворяет наших претензий. Давным давно мы использовали win32 программу которая обрабатывала список файлов-изображений и текстов, затем для создания презентаций использовать OOo Impress и распространяли в форматах ppt и odp. Затем с появлением в OOo возможности экспорта презентации в swf начали делать в виде вебсайта со страничками на флеше. Даже был опыт создания диска с запускающимся вебсервером и базой данных с предоставление возможности поиска.&lt;/p&gt;
&lt;p&gt;Так как наша аудитория школы и гуманитарная интеллигенция &amp;mdash; мы успели в доволь отведать кактусов совместно с нашими пользователями: у одного антивирус заблокировал программу, у другого нет Impress или PowepPoint у третьего нет флеша, а самостоятельно разобраться&amp;nbsp; с установкой и настройкой необходимого ПО им не плечу. Это для нас звучит просто &amp;mdash; установить OpenOffice, последнюю версию Firefox или Flash плагина, а для человека который сохраняет результат многолетних трудов на floppy дискете или добровольно использующих MS Vista на ноутбуке эти задачи не то что не посильны, но даже не понятен их смысл. Плюсом к этой проблеме является то, что мы разрабатываем, тестируем и презентуем эти самые презентации полностью в Linux, тоесть нам важна их кросплатформенность и лёгкость в использовании &amp;mdash; пришёл человек, а наш сотрудник вставил диск в компьютер и презентовал ему нашу работу&lt;/p&gt;
&lt;p&gt;Итак мы пришли к выводу, что для презентаций мы должны использовать минимум программ и программы эти должны быть установленным у всех. Напрашивается простой вывод, на каждом настольном компьютере имеются видеопрогрыватель и браузер. Презентация в виде видеоролика хороша тем, что сделать её проще всего и можно подобрать кодеки так, что они будут работать на всех платформах, но такие презентации лишены интерактивности и создавать их придётся мне, так как сотрудники не владеют навыками создания роликов (впрочем как и я)&lt;/p&gt;
&lt;p&gt;Таким образом остаётся HTML+JS, с помощью этих технологий можно создавать красивые, удобные и главное кросплатформенные презентации &amp;mdash; вставил диск, открывается с системном браузере индексная страничка офлайн версия сайта, а сайт этот коллективно создаётся в организации и вывешивается на поддомене её основного сайта с дополнительными возможностями в виде голосовалок, рейтингов и комментариев&lt;/p&gt;
&lt;p&gt;Технически в HTML + jQuery можно быстро и легко создавать галереии фотодокументов, слайдеры статей и научных работ и наверняка уже имеются готовые решения. Только я пока не нашёл таких полностью готовых и с удовольствие бы протестировал&lt;/p&gt;
&lt;p&gt;Кстати, вот с помощью таких файликов в корне компакт диска можно запускать индексные файлы как в Linux так и Windows&lt;/p&gt;
&lt;pre&gt;cat Autorun.inf&lt;br /&gt;[autorun] &lt;br /&gt;shellexecute=index.html&lt;br /&gt;&lt;br /&gt;cat autorun&lt;br /&gt;#!/bin/sh&lt;br /&gt;firefox index.html || mozilla-firefox index.html || mozilla index.html || konqueror index.html || opera index.html || chromium-browser index.html&lt;/pre&gt;
&lt;p&gt;А тут я буду собирать информацию о подобных системах&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/601.html</link>
      <guid>http://breys.ru/blog/601.html</guid>
      <title>Путаница в Glade-3</title>
      <pubDate>Mon, 15 Mar 2010 13:14:03 +0400</pubDate>
      <description>&lt;p&gt;В ходе освоения pygtk и собственно Glade3 натолкнулся на непонятную вещь: Если в свойствах проекта указан формат libglade, то часть виджетов недоступна с сообщением:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;этот виджет поддерживается только в libglade&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;А после переключения к формату GtkBuilder виджеты становятся доступны но с тем же сообщением&lt;/p&gt;
&lt;p&gt;&lt;a title="открыть: Glade-3 интерфейс" rel="lightbox[roadtrip]" href="/upload/1268648068.21.png"&gt;&lt;img src="/upload/images/1268648068.21.png" alt="Glade-3 интерфейс" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Видимо всё делов в файле &lt;a href="http://l10n.gnome.org/POT/glade3.HEAD/glade3.HEAD.ru.po"&gt;http://l10n.gnome.org/POT/glade3.HEAD/glade3.HEAD.ru.po&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;который содержит следующие переводы:&lt;/p&gt;
&lt;p&gt;#: ../gladeui/glade-project.c:1566 &lt;br /&gt;msgid "This widget is only supported in libglade format" &lt;br /&gt;msgstr "Этот виджет поддерживается только в libglade"&lt;/p&gt;
&lt;p&gt;#: ../gladeui/glade-project.c:1572 &lt;br /&gt;msgid "This widget is not supported in libglade format" &lt;br /&gt;msgstr "Этот виджет поддерживается только в libglade"&lt;/p&gt;
&lt;p&gt;Мне почему то кажется, что где то тут кроется ошибка&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/548.html</link>
      <guid>http://breys.ru/blog/548.html</guid>
      <title>python: try except else, кто бы мог подумать</title>
      <pubDate>Sun, 10 Jan 2010 04:01:41 +0400</pubDate>
      <description>&lt;p&gt;Читая исходники одного тулкита от yahoo нашёл вот такую интересную запись. Ни когда не видел подобного кода и приёма, вроде не совсем привычно, но вполне логично. Работает вот так:&lt;/p&gt;
&lt;pre&gt;def test(a, b):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # тестируемый код&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = a / b&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except Exception, e:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # перехват ошибки&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print e&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # собственно код ради чего проводился тест&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print c&lt;br /&gt;a, b = 4, 2&lt;br /&gt;test(a, b)&lt;br /&gt;a, b = 0, 0&lt;br /&gt;test(a, b)&lt;/pre&gt;
&lt;p&gt;пруф: &lt;a href="http://docs.python.org/tutorial/errors.html#handling-exceptions"&gt;http://docs.python.org/tutorial/errors.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;похоже, что я всё ещё не слез с c++&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/542.html</link>
      <guid>http://breys.ru/blog/542.html</guid>
      <title>python: работа со строками и словарями, формирование sql запросов</title>
      <pubDate>Wed, 30 Dec 2009 10:00:29 +0400</pubDate>
      <description>&lt;p&gt;Иногда приходится формировать sql запроса (where, set) из словаря, то есть имеющиеся значения вроде этих:&lt;/p&gt;
&lt;pre&gt;val = {&amp;#039a&amp;#039: 1, &amp;#039c&amp;#039: 3, &amp;#039b&amp;#039: 2, &amp;#039d&amp;#039: 4}&lt;/pre&gt;
&lt;p&gt;необходимо представить в виде такой строки:&lt;/p&gt;
&lt;pre&gt;where = "`a`=&amp;#0391&amp;#039 and `c`=&amp;#0393&amp;#039 and `b`=&amp;#0392&amp;#039 and `d`=&amp;#0394&amp;#039"&lt;/pre&gt;
&lt;p&gt;Можно изобретать велосипед с циклами и дополнительными условиями, чтобы не поставить лишний and , можно воспользоваться замечательным синтаксисом python&lt;/p&gt;
&lt;pre&gt;a = {&amp;#039a&amp;#039:1, &amp;#039b&amp;#039:2, &amp;#039c&amp;#039:3, &amp;#039d&amp;#039:4, &amp;#039e&amp;#039:5 }&lt;br /&gt;&lt;br /&gt;where = " and ".join(["`%s`=&amp;#039%s&amp;#039"%(k,a[k]) for k in a.keys()&amp;nbsp; ])&lt;/pre&gt;
&lt;p&gt;Выглядит страшно, но всё просто: join объединяет список разделяя значения через " and ", а внутри [] скобок словарь преобразуется в список строк соответвутющих шаблону "`%s`=&amp;#039%s&amp;#039", при этом всего одна строка и минимум ошибок&lt;/p&gt;
&lt;p&gt;Зачем это нужно, а чтобы не встречать такого в чужом коде&lt;/p&gt;
&lt;pre&gt;def make_where(values):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where = "where "&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k in values:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where += "`%s`=&amp;#039%s&amp;#039 and "%( k,values[k] )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return where[:-4]&lt;/pre&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/521.html</link>
      <guid>http://breys.ru/blog/521.html</guid>
      <title>Python: strip split join</title>
      <pubDate>Fri, 18 Dec 2009 10:40:54 +0400</pubDate>
      <description>&lt;p&gt;Постоянно путаюсь в этих функциях управления строками и списками, так вот&lt;/p&gt;
&lt;p&gt;str.strip() # удаляет начальные и конечные пробелы - "&lt;strong&gt;раздевает строку"&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/strong&gt; s = " Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18) "&lt;br /&gt;&lt;strong&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/strong&gt; s.strip()&lt;br /&gt;&amp;#039;Python 2.6.2 (release26-maint, Apr 19 2009, 01:58:18)&amp;#039;&lt;/pre&gt;
&lt;p&gt;str.split() # преобразует строку в список слов - &lt;strong&gt;"разделяет строку" &lt;/strong&gt;(вспоминаем ADSL сплиттеры), по умолчанию разделение идёт на пробелы, но можно задать любой разделитель&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/strong&gt; s.split()&lt;br /&gt;[&amp;#039;Python&amp;#039;, &amp;#039;2.6.2&amp;#039;, &amp;#039;(release26-maint,&amp;#039;, &amp;#039;Apr&amp;#039;, &amp;#039;19&amp;#039;, &amp;#039;2009,&amp;#039;, &amp;#039;01:58:18)&amp;#039;]&lt;/pre&gt;
&lt;p&gt;str.join(list) # &lt;strong&gt;объединяет список&lt;/strong&gt; в строку с учётом заданного разделителя&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/strong&gt; " - ".join( s.split() )&lt;br /&gt;&amp;#039;Python - 2.6.2 - (release26-maint, - Apr - 19 - 2009, - 01:58:18)&amp;#039;&lt;br /&gt;&lt;strong&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/strong&gt; " - ".join( s.split(",") )&lt;br /&gt;&amp;#039; Python 2.6.2 (release26-maint -&amp;nbsp; Apr 19 2009 -&amp;nbsp; 01:58:18) &amp;#039;&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;Такие простые, нужные и полезные функции но почему то я постоянно путаюсь в них, как в atoi и itoa&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/518.html</link>
      <guid>http://breys.ru/blog/518.html</guid>
      <title>С/C++: libconfig - библиотека для обработки конфигурационных файлов</title>
      <pubDate>Mon, 14 Dec 2009 23:27:51 +0400</pubDate>
      <description>&lt;p&gt;Потребовалось включить в программу удобочитаемый и легко редактируемый конфигурационный файл. После перебора нескольких библиотек решил остановиться на &lt;a href="http://www.hyperrealm.com/libconfig/"&gt;libconfig&lt;/a&gt;. Вроде отличная библиотека, к тому же её легче всего удалось адптировать. Для установки нужно (мне нужен был биндинг для C++)&lt;/p&gt;
&lt;pre&gt;sudo aptitude install libconfig++-dev libconfig8-dev&lt;/pre&gt;
&lt;p&gt;Затем подключаем в проект вот так:&lt;/p&gt;
&lt;pre&gt;#include &amp;lt; libconfig.h++ &amp;gt;&lt;br /&gt;libconfig::Config conf;&lt;/pre&gt;
&lt;p&gt;А использовать ещё проще&lt;/p&gt;
&lt;pre&gt;// загружаю конфиг, в случае ошибки ловим исключение с описание ошибки&lt;br /&gt;try{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conf.readFile("config.conf");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;catch(libconfig::ParseException e){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::cout &amp;lt;&amp;lt; e.getError() &amp;lt;&amp;lt; " line:" &amp;lt;&amp;lt; e.getLine() &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;// получаю значения различных типов&lt;br /&gt;bool fullscreen = conf.lookup("application.screen.fullscreen");&lt;br /&gt;string fontname = conf.lookup("application.fontname");&lt;br /&gt;...&lt;br /&gt;//&amp;nbsp; используя скрытое преобразование типов передаю параметры в функцию&lt;br /&gt;SDL_SetVideoMode(conf.lookup("application.screen.size.w") ,conf.lookup("application.screen.size.h") ,bpp,flags);&lt;br /&gt;...&lt;br /&gt;// меняю значений переменных и сохраняю &lt;br /&gt;conf.lookup("application.screen.fullscreen")= (fullscreen?false:true);&lt;br /&gt;conf.writeFile("config.conf");&lt;/pre&gt;
&lt;p&gt;В конфигах можно использовать довольно сложные стурктуры:&lt;/p&gt;
&lt;pre&gt;application : &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; version = "0.51";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name = "app";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; screen : &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; size : &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w = 1280;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h = 1024;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fullscreen = false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; shadows = "1";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; detaillevel = "1";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keys : &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; up_key = 273;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; down_key = 274;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left_key = 276;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; right_key = 275;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fire_key = 32;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pause_key = 27;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fontname = "fonts/verdana.ttf";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; level = "3";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; map = "original.map";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sound = true;&lt;br /&gt;};&lt;/pre&gt;
&lt;p&gt;Вроде очень простой и удобный класс, только необходимо помнить о приведении типа, например если вы ждёте в программе bool, а в конфиге используется "true" или "false", то выскочит ексепшен&lt;/p&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
    <item>
      <link>http://breys.ru/blog/461.html</link>
      <guid>http://breys.ru/blog/461.html</guid>
      <title>Пакетная обработка DBF Foxpro файлов</title>
      <pubDate>Tue, 03 Nov 2009 21:12:34 +0400</pubDate>
      <description>&lt;p&gt;Потребовалось вывести статистику и проверить базу данных, родным Виндовс программы абсолютно не справлялись и даже не смогли найти запись из-за которой программа зависала. Пришлось немного освоить Perl XBase и написать небольшой bash скрипт&lt;/p&gt;
&lt;pre&gt;for t in *DBF; do &lt;br /&gt;&amp;nbsp;echo parse $t;&lt;br /&gt;&amp;nbsp;dbf_dump --info --SQL $t| \&lt;br /&gt; sed s/boolean/tinyint/g | \&lt;br /&gt; sed s/date/varchar/g | \&lt;br /&gt; sed -r &amp;#039;s/numeric\(([0-9]+)\)/int(\1)/g&amp;#039; |\&lt;br /&gt; mmysql AF3 &amp;amp;&amp;amp; ./parse.pl $t |\&lt;br /&gt; mmysql AF3 || \&lt;br /&gt; echo error parse $t &lt;br /&gt;done&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;В скрипте с помощью dbf_dump для очереди DBF файлов генерируюется sql таблица&lt;/li&gt;
&lt;li&gt;затем с помощью sed приводит к виду понятному для mysql, затем вставляется в базу&lt;/li&gt;
&lt;li&gt;потом выбранный DBF файл обрабатывается Perl скриптом, который геренируется запросы вставки данных при этом обрабатывая их соотвествующим образом&lt;/li&gt;
&lt;li&gt;через конвеер данные вставляются в базу&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;А вот Perl скрипт для экспорта dbf to mysql&lt;/p&gt;
&lt;pre&gt;#!/usr/bin/perl&lt;br /&gt;use Text::Iconv;&lt;br /&gt;use XBase;&lt;br /&gt;$conv = Text::Iconv-&amp;gt;new(&amp;#039;windows-1251&amp;#039;,&amp;#039;utf-8&amp;#039;);&lt;br /&gt;sub read_dbf{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $table = new XBase $_[0] or die XBase-&amp;gt;errstr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fields=join(", ",$table-&amp;gt;field_names);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; my $cursor = $table-&amp;gt;prepare_select();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (my @data = $cursor-&amp;gt;fetch) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @var=();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach $t (@data){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #$t = $conv-&amp;gt;convert($r);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $t=~s/^\s+//g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $t=~s/\r//g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $t=~s/\n/\\n/g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $t=~s/(\\n)+/\\n/g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $t=~s/&amp;#039;/&amp;amp;\#039/g;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push @var, $t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $var = join("&amp;#039;, &amp;#039;",@var);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $name = $_[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $name =~ s!^.*/|\.dbf$!!ig;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sql= $conv-&amp;gt;convert("insert into $name ($fields) values(&amp;#039;$var&amp;#039;);");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print $sql,"\n"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;while ( my $arg = shift @ARGV ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; read_dbf($arg)&lt;br /&gt;}&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;#!/usr/bin/perl&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;use Text::Iconv;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;use XBase;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;$conv = Text::Iconv-&amp;gt;new(&amp;#039;windows-1251&amp;#039;,&amp;#039;utf-8&amp;#039;);&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;sub read_dbf{&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;my $table = new XBase $_[0] or die XBase-&amp;gt;errstr;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;$fields=join(", ",$table-&amp;gt;field_names);&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;my $cursor = $table-&amp;gt;prepare_select();&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (my @data = $cursor-&amp;gt;fetch) {&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@var=();&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;foreach $t (@data){&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #$t = $conv-&amp;gt;convert($r);&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $t=~s/^\s+//g;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $t=~s/\r//g;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $t=~s/\n/\\n/g;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $t=~s/(\\n)+/\\n/g;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $t=~s/&amp;#039;/&amp;amp;\#039/g;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; push @var, $t;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$var = join("&amp;#039;, &amp;#039;",@var);&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$name = $_[0];&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$name =~ s!^.*/|\.dbf$!!ig;&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$sql= $conv-&amp;gt;convert("insert into $name ($fields) values(&amp;#039;$var&amp;#039;);");&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print $sql,"\n"&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;}&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;while ( my $arg = shift @ARGV ) {&lt;/div&gt;
&lt;div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;read_dbf($ar&lt;/div&gt;</description>
      <author>ffsdmad@jabber.ru ( Басманов ) </author>
    </item>
  </channel>
</rss>

