2009-07-27

Aptana и тормоза

Краткая заметка для себя.
Устанавливая Aptana, нужно предварительно установить и немного настроить Java:
$sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts
$sudo update-alternatives --config java
Выбрать пункт 1 (/usr/lib/jvm/java-6-sun/jre/bin/java)
Иначе будет очень тормозить.
Взято с хабра.

2009-07-22

Gedit-плагин для фолдинга (folding)

Вообще-то Gedit - это не текстовый редактор. Особенно для программистов. А тем более на Python.
На самом деле это конструктор. Имеющиеся возможности по созданию плагинов делают его эдаким лего - не хватает какой-либо функции - добавь плагин. Нет нужного - напиши сам и не забудь поделиться с другими. И это хорошо и правильно.
Мне не хватало фолдинга - возможности сворачивать блоки кода для облегчения работы с большими объемами текста. Начало положено!
Что можно: сворачивание выделенного текста и сворачивание по отступам (блоки типа def, if, class и т.п.) по горячим клавишам Alt-Z. Разворачивание по ним-же. Развернуть все блоки - Alt-X
Скачать архив и распаковать файлы в ~/.gnome2/gedit/plugins/

Скачать
P.S. Python 2.6, Gedit 2.26.1

2009-07-20

Материнская плата ASUS M3N78 Pro и глюки в Ubuntu

Вкратце: произошел казус при попытке установки Linux Mint (Ubuntu 9.04) на компьютер с материнской платой Socket AM2 ASUS M3N78 Pro {AM2, nF8300, DDR2 1066, SATA2 RAID, PCI-E, 8-ch Audio, GBL, HDMI, 1394, ATX}
Подробнее. Установка прошла без проблем, как обычно. На первый взгляд все работает, звук есть, видео есть. Ставлю обновления. Соответственно обновляю драйвер видеокарты (встроенная в материнскую плату GeForce) с 173-го на 180-й. Все, полный затык. Виснет и глючит.
Итоги разборок, огорчений и открытий:
Драйвер 180 из репозитариев слишком стар для этой видеокарты и вызывает шок X.
173 кое-как работает, но некоторые вещи отображает некорректно (окно "Параметры" в GIMP, например).
Как лечится. Скачиваем с сайта nVidia самый свежий драйвер.








Устанавливаем его. Переходим в режим консоли (Alt+Ctrl+F1). Логинимся там, и останавливаем гном:
$ sudo /etc/init.d/gdm stop
Находясь в каталоге, куда скачан драйвер, запускаем установку:
$ sudo sh NVIDIA-Linux-x86-185.18.14-pkg1.run
Будут задаваться всякие вопросы, типа прописать ли настройки в x.org - соглашайтесь. После того, как все закончится, перезагрузите машину.
$ sudo reboot
Теперь все станет работать нормально. Если посмотреть в меню утилиту "Драйверы устройств", то там будет показано что используется старый драйвер, однако
$ nvidia-settings
скажет совсем другое - используется самый новый драйвер nVidia. И тут наступает счастье.

И напоследок старый unix-совет: не сломалось - не чини! Помните старый анекдот про программиста и его сына, который спросил "А почему солнце каждый день всходит и каждый вечер заходит?"
- Ты проверял?
- Проверял!
- Каждый день работает?
- Каждый день!
- Тогда ничего не трогай, ничего не меняй.

2009-07-09

Новое знакомство со старым другом: gnome-terminal

Как всегда, то что под рукой - то хуже всего знаешь. А узнаешь только когда приспичит.
Кому не известна стандартная гномовская консоль gnome-terminal? Разве что заядлому GUI-шнику. Этот инструмент служит верой и правдой уже многие годы, стал привычным и... хорошо знакомым?
А началось все с того, что я решил освоить легендарный VIM. И очень мне хотелось сделать для него ярлычок в панели запуска приложений, чтобы не лезть в меню. Чтобы одним кликом запустилась консоль и в ней сразу же vim.

Путь первый.
В окне терминала идем в меню "Правка - Настройки профиля - Заголовок и команда - Запускать другую команду вместо моей оболочки". Ставим галочку, вписываем в строку для команды "vim". Теперь при запуске gnome-terminal вместо приглашения shell сразу же будет запущен vim. Что-ж, это уже неплохо.

Путь второй, усовершенствованный.
В меню "Правка - Профили" создаем новый профиль, назовем его, скажем, "vim", в котором пропишем запуск редактора (см. путь 1). Теперь, чтобы запустить терминал с этим профилем, нужно дать команду:
$ gnome-terminal --window-with-profile=vim
Здорово! А теперь, захотим открыть еще одну вкладку в этом терминале. Угадайте, что в этой вкладке автоматически запустится? Правильно, он, родимый. К пути 1 это тоже относится.

Путь третий, продолжаем расти.
Не будем плодить профили, если, конечно, вам не нужны особые расцветки в разных окнах консоли. На этот раз мы используем стандартный профиль, но запустим vim так:
$ gnome-terminal -e vim
Кидаем ярлычок на панель запуска приложений и радуемся. Теперь чуть-чуть его доработаем: нам ведь не нужна панель меню вверху? Да и хорошо бы его на весь экран сразу развернуть, и рабочую директорию задать, чтоб удобнее было.
$ gnome-terminal -e vim --hide-menubar --geometry=1280 --working-directory=/home
Неплохо, верно? Просто указать параметры запуска, и всего делов.

Путь четвертый: совершенство.
Наконец, мне захотелось, чтобы по одному клику открывалась консоль с двумя вкладками, в одной из которых будет vim, а во второй mc, чтобы удобнее было с файлами управляться. Вот, что у меня получилось:
$ gnome-terminal \
--tab-with-profile=Default \
--working-directory=/home/kawaikunee/Проекты/ \
--title=MC \
-e mc \
--tab-with-profile=Default \
--working-directory=/home/kawaikunee/Проекты/ \
--title=VIM \
-e vim \
--hide-menubar \
--geometry=1280
Что мне и требовалось. Остается нажать на F11 чтобы ничто не отвлекало от процесса созидания очередного шедевра. Дерзайте!
P.S. Помощь в понимании вопроса оказана man gnome-terminal

2009-07-06

Linux Mint: долой болтливых животных!

У кого установлен Linux Mint по умолчанию, тот при запуске терминала перед строкой приглашения видит некую заумную фразу на английском языке, которую якобы цитирует одино из нескольких видов животных: олень (или лось?), корова, пингвин, и вроде кто-то еще.
Поначалу прикольно, а потом достает. Как избавиться от этого?
sudo gedit /etc/bash.bashrc
Удаляем или комментируем последнюю строчку, примерно такую:
# /usr/bin/mint-fortune
Больше животные в консоли вас не потревожат.

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

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