2009-03-25

IIS и Python

Чтобы подружить IIS (у меня 5 версия, но думаю, и на поздних всё также) и Python, и заставить файлы с расширением .py обрабатываться интерпретатором, нужно:
1) Если еще не создали, то создать виртуальный каталог, например test
2) Открыть свойства виртуального каталога и перейти во вкладку "Виртуальный каталог".
3) В пункте "Разрешен запуск" должен быть разрешен запуск сценариев.
4) Правее этого пункта жмем на кнопку "Настройка". Там нажимаем "Добавить".
5) В графе "Исполняемый файл" должно быть примерно так:
"C:\Python26\python.exe" -u "%s"
6) Расширение установим как .py
7) Пусть галочки "Обработчик сценариев" и "Проверка наличия файла" будут включены.
8) Теперь осталось только нажать ОК.

Не забудьте, что питоновый файл должен начинаться с того, что указывается правильный заголовок. Примерно так:
[ файл python.py ]

# -*- coding: utf-8 -*-

print 'Status: 200 OK'
print 'Content-type: text/html; charset=utf-8;'
print
print """
Работает!
"""

Теперь, если в адресной строке браузера набрать http://localhost/test/python.py то мы увидим слово "Работает!".

2009-03-24

Полезности

В этой статье я буду собирать всякого рода полезности при работе в консоли, которые мне будут попадаться на глаза. Если захочется сказать "А, я знаю откуда ты это взял!" - не надо. Конечно же не сам придумал.

Вход более одного пользователя в систему с графическим интерфейсом
Для начала переходим в другую консоль, чем стандартная седьмая: Ctrl-Alt-F(1-6). Водим логин и пароль. Теперь мы вошли как второй пользователь в системе. Переходить в другие консоли можно c помощью сочетания клавиш Alt-F(1-7) Чтобы получить графическую оболочку, введем команду:
startx -- :1

Дефрагментация базы данных MySQL
В ходе изменений в структуре БД и информации в ней происходит фрагментирование данных. Дефрагментация выполняется командой:
mysqlcheck -o имя_базы_данных -u пользователь_бд -p пароль_бд
И вообще man mysqlcheck расскажет еще много интересного.

Поиск в мануалах
Иногда знаешь что надо найти, но не знаешь, где искать. Команда man позволяет воплотиться такой дикой мечте:
man -k ключевое_слово
Ну и стандартный метод поиска в открытом мануале - используем клавишу / и сразу за ней - искомое слово, Enter. Чтобы найти следующее вхождение этого-же слова, жмем клавишу n.

Узнать, какой процесс использует примонтированный носитель
lsof +D /media/имя_устройства

Закрыть все приложения, использующие примонтированный носитель
fuser -km /media/имя_устройства

Массовое конвертирование кодировки текста
Скорее всего, вам известно, как весело в Windows переводить текстовые файлы из одной кодировки в другую. Открыл в редакторе, сохранить как, повторять до изнеможения.
Linux открыл для меня прелесть утилиты enca. Поэтому
sudo apt-get enca
После этого текст в ненашей (не utf-8) кодировке приводится в норму так:
enconv *.txt

Массовая замена текста в файлах
Заменить один текст на другой в файлах указанного каталога (включая подкаталоги):
find . -name '*.txt' -print0 | xargs -0 sed -i -e 's/это_заменить/на_это/g'

Многое взято отсюда.

2009-03-17

Python и удаленный Microsoft SQL Server 2005

Для работы из Python с удаленным сервером MSSQL 2005 понадобится провести некоторую подготовку на обоих концах этого тандема.

На стороне сервера баз данных делаем так:
Пуск - Все программы - Microsoft SQL Server 2005 - Средства настройки - Настройка контактной зоны SQL Server. Далее внизу ссылка "Настройка контактной зоны для служб и соединений". В левой панели в первой вкладке видим такие параметры, как "Database Engine", а в нем "Служба" (ставим "Тип запуска" = "Авто" и "Состояние службы" = "Запущена") и "Удаленные соединения" (ставим "Локальные и удаленные соединения").
Ниже Database Engine есть параметр "SQL Server Browser" - "Служба" (ставим тип запуска - "Авто" и состояние службы - "Запущена").
При запуске "Среды SQL Server Management Studio Express", в окошке "Соединение с сервером" будет поле "Имя сервера". Оно выглядит как ИМЯ_КОМПЬЮТЕРА\ИМЯ_СЕРВЕРА_БД. Запомним эти данные, они пригодятся.

На стороне нашего компьютера с Ubuntu:
sudo apt-get install python-pymssql
Вот и всё. Теперь краткий пример работы с БД:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Импортируем библиотеку для работы с MSSQL
import pymssql

# Соединение с БД. Если вы не в том-же домене, что и сервер БД, то вместо
# ИМЯ_КОМПЬЮТЕРА впишите его IP.
con = pymssql.connect(host='ИМЯ_КОМПЬЮТЕРА\ИМЯ_СЕРВЕРА_БД', user='ПОЛЬЗОВАТЕЛЬ_БД', password='ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД', database='ИМЯ_БД')

# Создаем курсор для работы с соединением
cur = con.cursor()

# Выполняем запрос
cur.execute("SELECT somefield FROM dbo.sometable;")

# Прокручиваем все записи из запроса
for i in cur.fetchall():

   # Данные в БД в кодировке cp1251, поэтому сначала переводим их в юникод
   i=unicode(i[0],'windows-1251')

   # А затем напечатаем их в utf-8 кодировке
   print "%s" % i.encode('utf-8')

# Подтверждаем транзакцию и закрываем соединение
con.commit()
con.close()

По сравнению с тем, как организовать такое соединение из php (через odbc, используя freetds) - просто праздник какой-то!

2009-03-03

Рисуем почтовую марку в GIMP


Заметка, скорее всего, только для себя. Потребовалось для стенгазеты на 8 марта нарисовать большую марку с фотографией весны на ней. Что делаем:
1) Доводим саму картинку до нужной кондиции (размер, цвета, яркость и т.п.).
2) Идем в меню Изображение - Размер холста и увеличиваем его процентов на 10-15, после чего жмем на кнопку "Центр", чтобы наша картинка получилось как бы в белой неширокой рамке.
3) Потом берем инструмент "Ластик", обычный круглый, и примеряем его к краю, чтобы половинка ластика задала как-бы половину ответстия линии отрыва марки (надеюсь вы понимаете, о чем я).
4) После этого чуть ниже палитры кистей находим параметр "Интервал" и увеличиваем его, скажем, до 150, чтобы линия, рисуемая ластиком, была не сплошная, а пунктирная.
5) Ставим край ластика на белую рамку вокруг рисунка, где начнется линия отрыва марки, делаем первый клик. Потом, нажав Shift поставим конечную точку. И так 4 раза по краям нашей марки.
В завершении, можно добавить легкую тень вокруг марки, чтобы добавить объема (Фильтры - Свет и тень - Отбрасываемая тень). Смещение по X и Y пусть будет нулевым. Поэкспериментируйте!

2009-03-02

Несколько решений, пригодившихся мне в последнее время.

Prism через прокси-сервер.
Находим в файле /usr/share/xulrunner/greprefs/all.js строки с настройками network.proxy. Мне понадобилось изменить 5 строк после 720-й.
pref("network.proxy.type", 1);
pref("network.proxy.ftp", "IP_PROXY_SERVER");
pref("network.proxy.ftp_port", PORT_PROXY_SERVER);
pref("network.proxy.http", "IP_PROXY_SERVER");
pref("network.proxy.http_port", PORT_PROXY_SERVER);
Меняем IP_PROXY_SERVER и PORT_PROXY_SERVER соответственно на свои данные.

Midnight Commander не сохраняет настройки.
Обнаружил, что файл ~/.mc/ini не позволяет сохранять данные - нет прав. Что-ж, поменяем их так, чтоб наверняка:
sudo chown ваш_логин ~/.mc/ini
sudo chgrp ваш_логин ~/.mc/ini
sudo chmod 664 ~/.mc/ini
Теперь все будет в порядке.

Эмулятор PlayStation pSX на Acer Aspire One (Ubuntu 8.10).
Возникают проблемы со звуком. Сначала он вообще не запускается и пишет сообщение об ошибке. Решается отключением pulseaudio:
sudo /etc/init.d/pulseaudio stop
killall pulseaudio
После этого начинает работать но страшно дергается - терпеть дольше 10 секунд невозможно. Выдает в консоли что-то вроде sound: underrun. Решается изменением параметра Latency в ~/.pSX/psx.ini, секция [Sound], строка 167. Значения 128 достаточно для корректно работающего звука. Вообще этот эмулятор чрезвычайно простой в настройке, есть русский язык, сохранение по горячей клавише иногда очень кстати.