воскресенье, 28 июня 2009 г.

Python: input vs raw_input

Вот пример:

#! /usr/bin/python
# This Python file uses the following encoding: utf-8

"""input возвращает объект, являющийся результатом
упрощения выражения. raw_input возвращает строку"""

name = "Илья"
age = 26

first = raw_input("Пожалуйста, введите свой возраст ")
second = input("Пожалуйста, введите свой возраст еще раз ")

# first будет содержать строку
# second может содержать любой объект, вы можете использовать
# в выражении даже "name" и "age" со значениями, которые были
# присвоены во время исполнения...

print "Вы сказали, Вам ",first
print "Потом Вы сказали, что Вам ",second


Примеры запуска этого кода:
Пожалуйста, введите свой возраст 45
Пожалуйста, введите свой возраст еще раз 45
Вы сказали, Вам 45
Потом Вы сказали, что Вам 45

Пожалуйста, введите свой возраст 45 + 7
Пожалуйста, введите свой возраст еще раз 45 + 7
Вы сказали, Вам 45 + 7
Потом Вы сказали, что Вам 52

Пожалуйста, введите свой возраст 10+2
Пожалуйста, введите свой возраст еще раз age+10
Вы сказали, Вам 10+2
Потом Вы сказали, что Вам 36

Настройка NetBeans и SVN для игнорирования pyc-файлов

Хотя Python и является интерпретатором, но в процессе выполнения программы он создает файлы с расширением .pyc, которые содержат байт-код соответствующих исходных файлов. Эти файлы Python размещает в тех же местах, где лежат и исходные выполняемые файлы с расширением .py.

Таким образом, получается, что файлы начинают двоиться, то есть вы наблюдаете пары, типа:

example.py
example.pyc

Очевидно, файлы с байт-кодом являются второстепенными и только мазолят глаза, хотя и заставляют программу работать быстрее. При этом они мазолят глаза не только в директориях на диске, но и NetBeans их охотно отображает. Кроме того, они (pyc-файлы) так и норовят пролезть в SVN-хранилище.

Однако решение есть!

Для SVN:
Открываем конфиг-файл($HOME/.subversion/config или %APPDATA%\Subversion\config под виндовсом) и добавляем в секцию [miscellany] строчку

global-ignores = *.pyc

Для NetBeans:
Файлы, игнорируемые средой, указываются в меню Tools | Options | Miscellaneous | Files | Ignored Files Pattern

Вот и все. Чтоб SVN подцепил конфиг, среду надо перезапустить.

суббота, 27 июня 2009 г.

RGB, aRGB и преобразования

Среди форматов представления RGB есть три, наиболее распространенные:
RGB888 (8 бит на канал);
RGB666 (6 бит на канал);
RGB565 (5 бит на канал для R и B; 6 бит для G).

RGB888 содержит 24 бита, представляющих около 16 миллионов цветов. RGB666 обычно используется в портативной электронике, но работать с 18 битами данных не удобно на обычном 16-битном DSP. Таким образом, RGB565 наиболее популярен в индустрии.

Преобразование R8 в R5 откидыванием последних битов:

R8 >> 3, (255 >> 3 = 31)

Из R5 в R8 вы можете перейти используя масштабирование или дублирование битов:
R5*255/31, R5 << 3 | R5 >>2

В формате aRGB имеется дополнительный альфа-канал (0xAARRGGBB). Альфа указывает на прозрачность пикселя (0x00 для полной прозрачности, 0xff для полной непрозрачности).

выход = a x (пиксель тона) + (1-a) x (пиксель фона)

Преобразование RGB888 в aRGB:
r = (rgb >> 16) & 0xFF (или сначала маска, потом сдвиг: 0xff0000, >>16)
g = (rgb >> 8) & 0xFF
b = (rgb >> 0) & 0xFF
aRGB = 0xff000000 | (r << 16) | (g << 8) | (b)

aRGB в RGB888:
r = (aRGB >> 16) &0xFF
g = (aRGB >> 8) &0xFF
b = (aRGB >> 0) &0xFF
a = (aRGB >> 24) &0xFF
RGB888 = (r << 16) | (g << 8) | (b)

RGB888 в RGB565:
r >> 3 
g >> 2
b >> 3
(r << 11) | (g << 6) | (b)

пятница, 26 июня 2009 г.

Настройка nginx для ClickOnce

Наконец-то я добрался до завершающей стадии -- настройки nginx. Тут нет ничего суперсложного. Достаточно просто указать откуда и, что отдавать.

Будем считать, что ngnix уже поставлен и настроен для решения каких-то задач. Этот расклад соответствует тому, какой был у меня. Так вот, для правильной работы надо поправить конфигурационный файл.

Основной конфигурационный файл находится (в Debian, в моем случае) вот здесь: /etc/nginx/nginx.conf. В этом файле нужно найти строчку типа:

include /etc/nginx/sites-enabled/*

Далее, как советует автор nginx, ее лучше заменить на

include /etc/nginx/sites-enabled/*.conf

Это нужно для того, чтобы nginx не подцеплял при конфигурировании файлы из директории sites-enabled, которые создаются некоторыми текстовыми редакторами в качестве резервных копий.

Теперь файл default из папки sites-enabled переименовываем в default.conf соответственно с предыдущей модификацией.

Остается внести в default.conf соответствующие настройки для http-отдачи из соответствующей папочки.

server{
listen 98.229.99.10:80;
listen 98.229.100.10:80;

server_name soft.example.com;

access_log /var/log/nginx/soft.example.access.log;

location / {
root /var/ftp/clickonce;
index index.html index.htm;
}
}

Сие означает -- слушать оба серверных интерфейса на 80 порту, обслуживать запросы обращенные к soft.example.com, вести лог в заданом файле, директорий /var/ftp/clickonce сопоставить с корнем soft.example.com.

Теперь можно разместить в директории /var/ftp/clickonce тестовый файл index.htm, перезапустить nginx, попробовать открыть адрес soft.example.com в браузере и порадоваться :-)

В следующем посте перейдем к тестированию.

Установка ftp-сервера для ClickOnce

Послания множатся и множатся. На тему ClickOnce уже имеются целых два: первое и второе. В них можно отыскать истоки рассматриваемой темы.

Настала пора переходить к практическим действиям по настройке удаленного хранилища для ClickOnce. Напомню, что удаленный сервер в моем случае под управлением Debian. Попробуем настроить ftp-сервер, который будет отвечать за процесс публикации проекта.

Для этого нужно выбрать какой-то ftp-сервер и настроить его. Без долгих предыханий сообщу, что остановил выбор на vsftpd, хотя объяснить, почему именно он был выбран, я врядли смогу.

Итак, установка. Заходим на удаленный сервер по ssh. К слову сказать, я для этой цели использую Xshell. Но это тут ни при чем.

1. Переключаемся в рута

apalkoff@myserv:~$ su
2. Устанавливаем vsftpd
myserv:/home/apalkoff# apt-get install vsftpd
3. Создаем директорий для ftp-сервера, например /var/ftp
# mkdir /var/ftp
4. Устанавливаем доступ к папке
# chmod 750 /var/ftp
5. Создаем группу пользователей
# groupadd ftpgroup
6. Устанавливаем нового владельца директория
#chown root.ftpgroup /var/ftp
7. Добавляем пользователя (ftp не анонимный будет, ессно)
# useradd -g ftpgroup -d /var/ftp/clickonce pubuser
8. Устанавливаем пользователю пароль
# passwd pubuser
9. Редактируем файл настроек /etc/vsftpd.conf, чтоб он был примерно таким (что-то по умолчанию, что-то я поправил):
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=0022
file_open_mode=0744
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome to apalkoff FTP service.
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
10. Перезапускаем vsftp-сервер
# /etc/init.d/vsftpd restart
10a. А если он и не работал, то запускаем
# /etc/init.d/vsftpd start
11. Проверяем работает ли
# netstat -apn
В случае успеха в ответе на команду должно присутствовать что-то вроде
tcp   0   0 0.0.0.0:21   0.0.0.0:*   LISTEN   23582/vsftpd
12. Коннектимся каким-нибудь клиентом, вводим пароль и логин созданного пользователя.

Дополнительно надо проверить, что создаваемые через FTP файлы имеют набор разрешений -rwxr--r--, а директории drwxr-xr-x. Это совершенно необходимо для отдачи содержимого по http. Но об этом в следующем посте.

четверг, 25 июня 2009 г.

План настройки хранилища ClickOnce

В предыдущем посте я рассказал о технологии ClickOnce, которая позволяет устанавливать приложения из сети и притом регулярно и самостоятельно проверяет наличие обновлений.

Технология позволяет опубликовать программу:

  • на локальной машине -- C:\deploy\myapplication
  • на файл-сервере -- \\fileserver\myapplication
  • на FTP-сервере -- ftp://ftp.example.com/myapplication
  • на HTTP-сервере -- http://www.example.com/myapplication
Однако, для установки приложения могут использоваться только протоколы:
  • http://
  • https://
  • file://
Таким образом, установка с FTP-сервера невозможна, хотя туда можно производить публикацию.

Сейчас я открою страшный секрет: что у меня имеется виртуальный сервер с Debian в качестве операционной системы. Естественно возникло желаение настроить хранилище там, чтобы можно было выкладывать свои проекты. Как знать, может и PicLab туда переберется со временем.

Было принято решение, что публикация будет происходить по протоколу FTP, а установка конечным пользователям по протоколу HTTP. Надо отметить, что на сервере уже установлен nginx, за которым находится apache. Поскольку предполагается отдавать по http статику, то надо, чтоб эти запросы обслуживал именно nginx.

Итак, сформировался план действий необходимых для достижения цели:
  1. Установка и настройка ftp-сервера, приконнекченного к \var\ftp
  2. Настройка nginx на отдачу по http содержания папочки \var\ftp
  3. Пробная публикация тестового приложения и наслаждение плодами трудов
Продолжение, как говорится, следует...

Технология ClickOnce

Вы, наверное, знаете, что программы не растут на программном дереве, а делаются особым подвидом людей: программерами. Так вот, опять же вы знаете, что большинство программ приходит к потребителю ввиде дистрибутива, то есть программы установки. Дистрибутив призван поставить все как надо и куда надо, чтобы пользователь не заморачивался всякими записями в реестре и т.д. Короче говоря, с помощью носителя информации и дистрибутива производится доставка софта пользователю. Например, PicLab имеет дистрибутив, который забирается к себе домой с помощью, ну допустим, флешки.

Все это хорошо, но мне захотелось теперь сделать так, как велит великий и могучий интернет: чтобы софт ставился прямо из сети (особенно если функционал софта на сеть завязан и на уединенной машине бесполезен). При этом я, конечно, захотел, чтобы обновления приезжали прямо по сети. И к тому же мне нужно было готовое решение. Уж не изобретать ли велосипед, как многие (и вы таких знаете) делают?

Короче говоря, я нашел, что есть де технология ClickOnce, которая решает (я не сказал, но мы тут про винду, конечно, говорим). Приятным сюрпризом стало то, что она уже живет на моем компе вместе с Visual Studio, и, стало быть, ею можно пользоваться легко и непринужденно.

Основные черты:

  • Автоматическое обновление
  • Откат после установки
  • Обновление через Интернет
  • Добавление приложения в меню Пуск
Проверка обновлений может быть настроена двумя способами:
  • До запуска программы -- сначала проверка, обновление (если надо), запуск.
  • После запуска -- запуск программы, проверка по расписанию, обновление (если надо) .
Это все круто, но есть минусы, ну то есть то, что эта технология не умеет:
  • Установка общих файлов
  • Установка драйверов
  • Установка глобального кэша сборок
  • Установка для нескольких пользователей
  • Добавление приложения в группу «Автозагрузка»
Кроме того, надо отметить, что программы могут оставаться сетевыми (при клике на ссылку программа загружается и запускается, после закрытия -- удаляется), или быть установленными на компьютер. В первом случае обновления вовсе бесполезны, поскольку каждый раз будет загружаться и запускаться свежая версия. Но тут надо помнить про нагрузку на сеть (программа должна быть каких-то вменяемых размеров). Во втором случае остается локальная копия, которая проверяет (а может и не проверять) наличие обновлений. Локальная установка, кстати, не завязывает выполнение программы на сеть (ну вдруг у инет отвалился).

Замечу еще, что программа ставится не в Program Files. Это как-то непривычно, конечно, но можно свыкнуться. Спрашивать куда ставится можно, но не нужно ;-) Официально это называется кэш ClickOnce. Реально это находится в папке пользователя со страшным-престрашным путем.

Вот так выглядит процесс обновления при запуске:

Короче говоря -- технология ClickOnce проста в использовании и эффективна. Надо брать.

Вы догадались, наверное, что в сети надо где-то размещать хранилище для «дистрибутива». Это безусловно так. Но об этом в следующем послании граду и миру.

Рекомендую к просмотру доклад:
Использование ClickOnce для быстрого разворачивания приложений

пятница, 19 июня 2009 г.

What is a browser?

Узнайте мнение американского народа... Хи-хи