2009-07-03

Pylons, несколько ньюансов.

Изучаю питоновский веб-фреймворк Pylons. На английском языке полно официальной документации к его компонентам, на русском же бедновато. Так как присутствует несколько самостоятельных кирпичиков, приходится изучать сразу в нескольких направлениях. Хорошо джангистам, у них один DjangoBook на все случаи жизни. А тут и paste, и mako, и sqlalchemy, и webhelpers, и вообще невпроворот всего, и у каждого своя документация. А потом надо по доке Pylons учесть ньюансы их взаимодействия. Иногда мозг вскипает, пока сообразишь как и что. Чтобы не позабыть находок, что были сделаны в процессе исследования, немного о них расскажу.

Работа с базами данных.

По умолчанию, в Ubuntu пилоны комплектуются библиотекой sqlalchemy, хотя можно использовать sqlobject или вообще не использовать ничего, кроме стандартного db-api. Я не стал ничего менять - алхимия так алхимия.
Построение модели в докуметации пилонов описано так: создаем описания таблиц, потом классы, потом привязываем одно к другому и определяем отношения между ними. Сайт SQLAlchemy предлагает вариант совмещения этого в одном определении класса. Можно и так и эдак, но вот чтобы из определения таблиц создать реальную схему в базе данных путем "paster setup-app development.ini" второй способ не самый лучший. У меня они не создавались ни в какую, только первый пилоновский метод дает ожидаемый результат. Зато если таблицы создавать вручную, мне больше понравился именно способ sqlalchemy, получается компактнее как-то, все в кучке.

Теперь дальше. Использование SQLite и MySQL проблем не вызвало. Но по работе мне потребовалось коннектить приложение с MSSQL Server 2005, а это уже куда интереснее. Не буду вдаваться в подробности, просто сразу дам совет: используйте ODBC. Модуль python-mssql время от времени падал с ошибкой, а вот pyodbc повел себя молодцом. Поэтому в файле development.ini, раздел [app:main], нужно прописать соединение с MSSQL через ODBC, используя модуль pyodbc:

sqlalchemy.url = mssql://user:password@host\instance/dbname
sqlalchemy.module_name=pyodbc

Именно так. Кто не понял, что такое instance? Это имя установленного сервера. В 2005 Express версии оно SQLEXPRESS по умолчанию. Остальное должно быть понятно.
Теперь дальше. Угадайте, в какой кодировке отдает данные этот сервер? Правильно, в cp1251. А нам надо в какой? Конечно, unicode. Там же:

sqlalchemy.encoding='cp1251'
sqlalchemy.convert_unicode = true

В документации по SQLAlchemy, в разделе API Reference есть еще несколько параметров.

Роутинг.
Тут пара ньюансов. Там, где в Ubuntu map.connect('',controller="index",action="index"), в Windows версии '' пришлось заменить на '/', загадочно это конечно, но вот у меня так. Иначе ошибка.
И там, где в Linux:
map.connect("/:controller/:action/:id")

в Windows:
map.connect("/{controller}/{action}/{id}").
Тоже какая-то тайна тут кроется...

Шаблоны Mako. Чудесная штука. Есть две вещи, о которых я должен упомянуть.
Во-первых, это отвратительная реакция редакторов и IDE на теги <%. Об этом я писал чуть раньше. Кстати, в Windows второй из описанных способов не работает, не знаю почему.
Во-вторых, мне хотелось, чтобы если в шаблоне указанная переменная отсутствует, то показывалась бы пустая строка на ее месте, а не ошибка. Вот два пути:
Этот я нашел где-то в сети, но мне кажется, он не работает как надо, в начале шаблона ставить такой блок:
<%!

UNDEFINED=''

%>
А этот более кардинальный. В файле /config/environment.py, в функции load_environment добавить:
config['pylons.strict_c'] = False


В версии 1.0 эта строка выгладит как
config['pylons.strict_tmpl_context'] = False

И ошибки нехватки переменных в шаблоне как рукой сняло.
Пока что все. У кого есть толковые советы - милости прошу.

2009-06-25

Работа с образами дисков (в том числе PlayStation)

Не раз наблюдал, как люди ищут и спрашивают аналоги привычных в Windows программ в мире Linux. Много, много альтернативного софта может предложить пингвиниус, но вот разобраться в этой куче - с полпинка не получается.
Не так давно захотелось поиграть в Final Fanasy VIII, вспомнить молодость ^_^
Диски есть, а вот торчать у телевизора не хочется; да и такие вещи, как играть до опупения (т.е. до ближайшей сохранки) меня не радуют. Чтобы надоело - сохранился и выключил. Все это позволяют эмуляторы PlayStation. Их несколько штук, я использую pSX, он прост в настройках. Но тема не об этом.
Вопрос: как сделать из дисков PS образы для эмулятора? В Windows пользователю потребовалось бы проделать примерно такой путь: найти в сети Alcohol 120%, потом кряк для него, потом создать образы. Мы же так не делаем и никому не советуем.
Наконец к делу: вам нужен AcetoneISO. Он умеет делать чудесные вещи с дисками и образами. Меня выручил как нельзя вовремя, у него есть опция по созданию iso PlayStation (раздел ImageConversion). Спасибо, господа разработчики!

2009-06-24

SciTE и шаблоны mako (mako templates) для Python

Несмотря на то, какой гибкий редактор этот SciTE, я обнаружил в нем заковыку, с которой боролся пару дней. Дело в том, что когда используешь его для создания шаблонов на движке mako (используется во фреймворках типа Pylons и сам по себе), то всё после тега типа <%include>, <%def> и т.п. будет подсвечено одним болотным цветом. Редактор считает это началом блока ASP. Цвет видимо подходящий...
Долгие поиски и копания в гугле и файлах .properties были неутешительны. Во-первых, эта проблема не только SciTE (Scintilla), но и других редакторов и IDE, и я нашел только один, который игнорировал эту засаду - обычный gEdit. Во-вторых, несмотря на гибкость, обработчик лексеров все-же изменить правкой конфигов нельзя, это вшито в программу, и придется очень глубоко вникать, изменять, пересобирать...


Вот простой путь, для тех, кто хочет использовать SciTE и при этом видеть нормальную подсветку синтаксиса: после каждого тега mako добавляйте конструкцию:
<!--%>-->
Она скажет редактору, что блок ASP закончен, и можно продолжать обрабатывать HTML код. При этом, из-за html-комментариев, закрывающий тег на странице виден не будет.


Второй вариант - более глобальный поначалу, но зато намного упрощающий жизнь потом. Я ковыряю Pylons, поэтому покажу, как это делается там:
В файле /config/environment.py вносим дополнительно:

def load_environment(global_conf, app_conf):
.......... содержимое функции ..........
tmpl_options['mako.preprocessor']=mako_replase_tag_to_my
def mako_replase_tag_to_my(s):
return s.replace('<mako:','<%').replace('</mako:','</%')

После этого в шаблонах вместо <% пишем <mako:, а вместо </% пишем </mako:
Уф. Ну и намучился я с этим. Но Слава Богу!

2009-06-23

Программа для изучения Библии в Linux. Часть 3.

Продолжается работа над программой для работы с текстами Священного Писания под Linux.
На сегодня (26.06.2009) предлагается версия 0.3: http://files.mail.ru/9A2QKM
В зависимостях шрифты от MS, чтобы отображалось все, как задумано.
Просмотр текстов, поиск, как обычный так и путем выделения слова и нажатия кнопки с буквой "f". Получения списка параллельных мест при клике мышью на номер стиха в основном окне. Получение текста главы по клику мышью на название книги в поле результатов поиска. Сохранение книги, главы и фразы поиска текущего сеанса. Скриншот в предыдущем посте.
А вот так выглядит программа на экране моей Nokia N810. Я планирую сделать deb-пакет и для этой планшетки.

2009-06-19

И все-таки SciTE!

Некоторое время назад, когда писал о стандартном редакторе файлов Gnome, я упомянул о SciTE. Писал, что сложно настроить человеку, привыкшему к GUI, и с кодировками проблемы... Хотя пользовался им довольно долго. Но польстился на модули и расширения gedit. А недавно на глаза снова попалась информация о SciTE, о настройке и возможностях этой чудесной программы.
Разные люди бывают. Кому-то хочется чтобы установил и стал работать. Кого-то хлебом не корми, а дай только поковыряться в настройках и конфигурационных файлах. SciTE позволяет и то, и другое. И я вернулся.
Прежде всего - он использует Scintilla, тот-же движок, что и небезызвестный Notepad++. Стандартные установки вполне позволяют сразу начать программировать, к примеру, на python. Поддерживает просто массу языков. И для любителей все настраивать - это находка. Когда я читал перевод документации - то понял, что gedit все-таки еще не дорос...
Настоятельно рекомендую! Не поленитесь прочитать:
Документация SciTE