среда, 26 декабря 2007 г.

Вышел новый номер The Python Papers

Вышел новый номер бесплатного журнала The Python Papers

В номере:
  • Letter from the editor: Page 4
  • GrrlCamp: Page 6
  • News from the Python Software Foundation: Page 9
  • Interview with Michael Foord: Page 16
  • Screen Scraping Web Pages: Page 22
  • Interview with Resolver Systems: Page 24
  • Eight Tips for Starting with Python: Page 30
  • Python Events: Page 80
  • Acknowledgment of Reviewers: Page 34
  • pypk - A Python extension module to handle chemical kinetics in plasma physics modeling: Page 35
  • The Why and How for Design Patterns: Page 48
  • Python Switch Statement: Page 58
  • An Introduction to Test Driven Generation: Page 64.
Скачать...

воскресенье, 23 декабря 2007 г.

PHP и MySQL на смартфонах с Symbian уже в 2008 году

Интересная новость...
По данным symbianone.com на конференции CCNC в Лас-Вегасе в январе 2008 года будет представлено решение PAMP (Personal Apache, MySQL, PHP) для S60 смартфонов. В дополнение к самому PHP будут так же представлены расширения для доступа к функциональному ядру телефона!

Изначально, новость появилась в форуме компании NOKIA. Некоторые обозреватели полагают, что приход локальных веб-приложений на аппаратную платформу мобильных телефонов несёт за собой новую эру веба даже не смотря на то, что сейчас лидером в области ОС для мобильных устройств является Microsoft.

Источник...

вторник, 18 декабря 2007 г.

SAMBA (Domain controller) Server For Small Workgroups With Ubuntu 7.10

Вольный перевод статьи из HowtoForge.
Оригинал...

В статье описывается один из вариантов установки file- и print-сервера для малого и среднего предприятия до 250 пользователей. Для хранения паролей и информации об аккаунтах пользователей используется Samba с поддержкой tdb.

Что будем ставить:
1. Samba как доменконтроллер

Войдем в режим root командой:
sudo -s -H

Настройка сети.

(K)ubuntu 7.10 при установке настраивает сеть на использование DHCP, т.е присваивает компьютеру динамический адрес. Серверу нужно иметь постоянный (static) адрес, поэтому нам нужно исправить сетевые настройки. Допустим, что наш сервер будет иметь адрес 192.168.0.100. Редактируем файл /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# This is a list of hotpluggable network interfaces.
# They will be activated automatically by the hotplug subsystem.
mapping hotplug
script grep
map eth0

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

Чтобы изменения вступили в силу необходимо перегрузить сетевую подсистему:
/etc/init.d/networking restart

Теперь нужно изменить /etc/hosts, чтобы имя сервера соответствовало реальному IP, т.е. добавляем строчку типа:
192.168.0.100    server1.example.com    server1

Настраиваем Hostname:
echo server1.example.com > /etc/hostname
/etc/init.d/hostname.sh
echo '192.168.0.100 server1.example.com' >> /etc/hosts

Для ограничения дискового пространства пользователей установим пакет quota:
aptitude install quita
Добавим в /etc/fstab параметры usrquota и grpquota в описание нужного раздела, например:

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
# /dev/sda1
UUID=226d9304-88ca-44c0-a3e3-d1ad26cfc084 / ext3 defaults,errors=remount-ro,usrquota,grpquota 0 1
# /dev/sda5
UUID=d824ce36-04b8-4870-83f4-f1a5037c2de4 none swap sw 0 0
/dev/hdc /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/ /media/floppy0 auto rw,user,noauto 0 0

Теперь нужно создать файлы quota.user и quota.group
touch /quota.user /quota.group
chmod 600 /quota.*
mount -o remount /
quotacheck -avugm
quotaon -avug
Команда quotacheck выведет ошибку:
quotacheck: WARNING - Quotafile //quota.user was probably truncated. Cannot save quota settings...
quotacheck: WARNING - Quotafile //quota.group was probably truncated. Cannot save quota settings...
Это нормально для первого запуска, не обращайте внимания.

Установка Samba.
aptitude install libcupsys2 samba samba-common samba-doc smbclient winbind cupsys-common
Отредактируем файл /etc/samba/smb.conf. Должно получиться что-то вроде этого:

[global]
workgroup = MYWORKGROUP
netbios name = SERVER1
server string = %h server (Samba, Ubuntu)


passdb backend = tdbsam
security = user
username map = /etc/samba/smbusers
name resolve order = wins bcast hosts
domain logons = yes
preferred master = yes
wins support = yes

# Set CUPS for printing
load printers = yes
printcap name = CUPS
printing = CUPS

# Default logon
logon drive = H:
logon script = scripts/logon.bat
logon path = \\server1\profile\%U


# Useradd scripts
# add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
add user script = /usr/sbin/useradd -m '%u' -g users -G users
delete user script = /usr/sbin/userdel -r %u
add group script = /usr/sbin/groupadd %g
delete group script = /usr/sbin/groupdel %g
add user to group script = /usr/sbin/usernod -G %g %u
add machine script = /usr/sbin/useradd -s /bin/false/ -d /var/lib/nobody %u
idmap uid = 15000-20000
idmap gid = 15000-20000
template shell = /bin/bash


# sync smb passwords woth linux passwords
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd chat debug = yes
unix password sync = yes

# set the loglevel
log level = 3

[public]
browseable = yes
public = yes


[homes]
comment = Home
valid users = %S
read only = no
browsable = no


[printers]
comment = All Printers
path = /var/spool/samba
printable = yes
public = no
writable = no
create mode = 0700

[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
write list = root, @smbadmin


[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
admin users = Administrator
valid users = %U
read only = no
guest ok = yes
writable = no
share modes = no


[profile]
comment = User profiles
path = /home/samba/profiles
valid users = %U
create mode = 0600
directory mode = 0700
writable = yes
browsable = no
guest ok = no


Создадим директории для domain logons и profiles:
mkdir /home/samba
mkdir /home/samba/netlogon
mkdir /home/samba/profiles
chmod 777 /var/spool/samba/
chown -R root:users /home/samba/
chmod -R 771 /home/samba/

Перезапустим сервис Samba:
/etc/init.d/samba restart
В файле /etc/nsswitch.conf нужно изменить строку:
hosts: files dns
на
hosts: files wins dns
Добавить все компьютеры группы в /etc/hosts:
192.168.0.100 server1 server1.example.com
192.168.0.110 workstation1
192.168.0.111 workstation2
192.168.0.112 workstation3
192.168.0.113 workstation4
Теперь добавим пользователя root (alias: Administrator), он будет domain-адиминистратором для добавления новых машин в Samba domain.
smbpasswd -a root
Создадим файл /etc/samba/smbusers и добавим в него такую запись:
echo "root = Administrator" > /etc/samba/smbusers
Создадим дефолтные доменные группы для виндов:
net groupmap add ntgroup="Domain Admins" unixgroup="root" type=domain -U root
net groupmap add ntgroup="Domain Users" unixgroup="users" type=domain -U root
net groupmap add ntgroup="Domain Guests" unixgroup="nogroup" type=domain -U root
Для примера добавим в наш домен пользователя tom с паролем secret:
net rpc user add tom -U root
net rpc user password tom "secret" -U root
smbpasswd -e tom
Создадим общий для всех пользователей домена каталог:
mkdir -p /home/shares/allusers
chown -R root:users /home/shares/allusers/
chmod -R ug+rwx,o+rx-w /home/shares/allusers/
Добавим его в конфигурационный файл Samba /etc/samba/smb.conf:
[allusers]
comment = All Users
path = /home/shares/allusers
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
writable = yes
Перезапустим сервис Samba:
/etc/init.d/samba restart

суббота, 15 декабря 2007 г.

Основы работы с потоками в Python

Если вы желаете, чтобы ваше приложение выполняло несколько задач в одно и то же время, то можете воспользоваться потоками (threads). Python может работать с потоками, но много разработчиков находят программирование потоков очень сложным. Среди прочего Peyton McCullough объяснит как порождать и уничтожать потоки в этом популярном языке.

Читать...

четверг, 13 декабря 2007 г.

(K)ubuntu 7.10 и /var/run в tmpfs

Ну чего людям неймется? А потом появляются в сети страшные истории про Линукс.
Вот наткнулся на такое:
Боролся с Ubuntu 7.10 в VE. Полдня. Всё потому, что я дотошный и упорный.

Благодаря своим таковым качествам выяснил, что эти, ммм, граждане, например, не стопают networking, полагаясь на то, что /var/run лежит на tmpfs и при загрузке девственно чист. При этом, блин, если /var/run НЕ на tmpfs, то ничего не работает, конечно, потому что ifup думает, что всё уже поднято.
Отсюда...

Ну и соответственно вопрос, а зачем самому делать раздел под /var/run?
Чем не устраивает разбивка, предлагаемая дистрибутивом и здравым смыслом?
Я понимаю желание вынести на отдельный раздел весь /var, но один из его подкаталогов, а потом плясать с бубном.... Разработчикам из Каноникал наверно и в страшном сне такое не приснится. Они вынесли каталог /var/run в оперативную память с целью не писать скрипт очистки оного при перезагрузке или старте системы, и правильно сделали.

3D-программирование с Vpython

Vpython позволяет создавать 3D объекты и размещать их на 3D сцене. Vpython запускается в отдельном процессе (thread) и контролирует 3D сцену, программисту остается только писать логику программы. Пользователь, работая с такой программой, может перемещаться по сцене и масштабировать, поворачивать и перемещать объекты, используя мыша.
Модуль можно скачать с официального сайта http://vpython.org. В зависимостях у модуля: Numpy, gtkglarea и boost. Для пользователей Debian и Ubuntu в репозиториях уже есть пакет python-visual, который ставится стандартными средствами, например:

sudo aptitude install python-visual

Можно также поставить и модуль gamepy для музыкального оформления программы

sudo aptitude install gamepy

Теперь, по традиции, напишем программу, выводящую 3D "Hellow World"

from visual.text import *

# At present, VPython supports only numbers and uppercase characters. Other characters will be displayed as *
# Specifying the Title of the window
scene.title = "Hello World"
# Here goes the hello world text
text(pos=(0,3,0), string='HELLO WORLD', color=color.orange, depth=0.3, justify='center')

Вот как это должно выглядеть.



Теперь нарисуем синусоиду, естественно объемную

from visual import *

"""
This will print the sin curve
"""
scene.title = "Sin Curve"
scene.center = vector(0,0,0)

# using a suitable 'box' as x- axis
xaxis = box(length= 20, height=0.2, width= 0.5, color=color.blue)

#creating the sine curve object
sinecurve = curve( color = color.red, radius=0.2)
dt = 0.1

for t in arange(0,10,dt):
dydt = vector( t,sin(t), 0 );
sinecurve.append( pos=dydt, color=(1,0,0) )
rate( 500 )

Смотрим что получилось


Ее можно двигать мышкой.

Ну и более "живой" пример - 3D часы.

from visual.text import *
import time

scene.title = "3D Clock"
while 1:
rate(100)
cur_time = time.localtime()
time_string = str(cur_time[3]) +": "+ str(cur_time[4]) + ": "+ str(cur_time[5])
timer = text(pos=(-3,0,-2), string=time_string, color= color.red, depth=0.5 )
time.sleep(1)
timer.makeinvisible()




С помощью Vpython можно создавать RedBlue стерео-объекты, которые нужно смотреть в красно-синих очках (прямо как в "Дети шпионов 3"). Для включения стерео режима служит команда:

scene.stero='redblue'

Для примера, выведем анимированную стерео 3D-строку

from visual.text import *
import time

#importing pygame to play the background music :)
#import pygame
#Uncomment it if you have the redblue goggles
scene.stereo='redblue'

scene.title = "Renaissance"
#scene.fullscreen = 1
scene.fov = 0.001
scene.range = 0
rate(100)

# Uncomment this if you need to play the background music
#pygame.mixer.init()
#intromusic=pygame.mixer.Sound("/usr/share/sounds/KDE_Startup.wav")
#pygame.mixer.Sound.play(intromusic)

def intro():
Title= text(pos=(0,3,0), string='MCA PROUDLY PRESENTS', color=color.red, depth=0.3, justify='center')
for i in range(20):
rate(10)
scene.range = i
Title.makeinvisible()
scene.range = 0
Header= text(pos=(0,3,0), string='RENAISSANCE 2005', color=color.yellow, depth=0.3, justify='center')
for i in range(20):
rate(10)
scene.fov = 3
scene.range = i
# Now play with colors
Header.reshape(color= color.cyan)
time.sleep(1)
Header.reshape(color= color.blue)
time.sleep(1)
Header.reshape(color= color.green)
time.sleep(1)
Header.reshape(color=color.orange)
time.sleep(1)
Header.reshape(color= color.red)
# Now let's delete the Header
Header.makeinvisible()
scene.range = 10
scene.fov = 0.2
Body= text(pos=(0,3,0), string='A CELEBRATION OF LINUX ', color=color.red, depth=0.3, justify='center')
Body.reshape(color=color.orange)
#Here I am not adding the rest of the code as it just shows the schedule of that days programs
# Invoking intro()
if __name__ == '__main__':
intro()




Удачного программирования.
При написании данного поста использовалась статья в Linux Gazette #144

среда, 12 декабря 2007 г.

Kubuntu 7.10 на слабом компьютере

Достался моей матушке древний компьютер в такой конфигурации:
  1. Процессор - Celeron 466Mg или 433, не помню
  2. Память - 256Mb
  3. Жесткий диск - 10Gb
  4. Видео - какая-то древняя ATI-шка
  5. Монитор - 14 дюймов
Решил поставить на него Kubuntu 7.10. Таки она на этого старика встала, да еще и довольно не тормозно работает. OpenOffice открывается долго, но работает нормально.
Дай, думаю, поставлю мультимедию. Mp3 тормозить не будут :) А вот видео... пусть хоть не в полном экране, но может будет показывать без тормозров...
Я не знаю с какими оптимизациями собирается kubuntu, но видео (avi, mpeg, mov, dvd) mplayer и kaffeine показывают в полно-экранном режиме и без пропусков и скачков, и звук синхронизирован с изображением.
Так что (k)ubuntu вполне может работать как мультимедиа центр, даже на старых железяках.

четверг, 6 декабря 2007 г.

Сделайте свой код совместимым с PHP6

С выходом PHP6 некоторые скрипты, разработчики которых используют устаревшие конструкции PHP, перестанут работать. Чтобы избежать такой ситуации нужно придерживаться некоторых новых правил.
  1. register_globals. В PHP6 больше не будет поддержки register_globals. Уже в 5-ой версии разработчики PHP рекомендовали отключать эту переменную в php.ini, да и по умолчанию она была в off. Так вот, в 6-й версии от register_globals полностью отказались. Пользуйтесь суперглобальными массивами: $_GET, $_POST, $_SERVER, $_REQUEST и т.д.
  2. magic_quotes. При включенной данной переменной, PHP автоматом экранировал символы: одинарной кавычки, двойной кавычки, обратного слэша и NULL. Часто имела место быть ситуация повторной экранировки, когда у разработчика скрипта и пользователя magic_quotes в php.ini принимала разные значения (on/off). Разработчики PHP в 6-й версии наконец решили совсем избавиться от этой переменной.
  3. register_long_arrays. Вместо длинных массивов типа $HTTP_POST_VARS (их больше не будет), пользуйтесь суперглобальными $_GET, $_POST, $_SERVER, $_REQUEST и т.д.
  4. preg вместо ereg. Для работы с регулярными выражениями вместо функции ereg нужно использовать preg. ereg уходит из языка.
  5. Классы. Не создавайте экземпляр класса при помощи оператора ссылки (&).
    $a = & new object(); // Не будет работать в PHP6
    $a = new object(); // Будет работать в PHP 6
Источник...

Вышел новый номер PHP Inside - #20

После огромного промежутка, почти в год (прошлый номер выходил в январе 2007) состоялся релиз нового номера PHP Inside. На этот раз двадцатый! Прекращать выпуски мы не будем и далее.
Как я и обещал на майской конференции PHPConf, до конца года мы обязательно выпустим новый номер. И вот выпустили!
Скачать!
В номере:
  • Новости, обзоры, работа
  • Интервью: Athlon Sports об использовании PHP и Flash
  • Интервью: UMI.CMS обещает производительность и красивый код
  • Вся правда о поисковых системах, написанных на PHP
  • Реализация загрузки по требованию
  • Ассамблея программистов. Ведение проектов он-лайн
  • Грамотная конфигурация проекта
  • Командная строка в PHP? Это возможно!
  • Секреты предметной области. Автоматизация преобразования состояния объектов предметной области в XML
  • 10 с лишним способов обвалить работу MySQL

среда, 5 декабря 2007 г.

Конвертирование видео в формат 3gp

Попросила меня дочка закинуть ей на мобильник очень прикольный мультик - Буревестник.
Труба, Моторола рейзр V3i, поддерживает видео в формате 3gp. Помятуя, что под Kubuntu 7.04 я это делал без проблем, ввел в консоле строку для конвертации avi-шника:
ffmpeg -i in.avi -acodec amr_nb -ar 8000 -ac 1 -ab 32 -vcodec h263 -s qcif -r 12 out.3gp
Но ffmpeg выдал ошибку и сообщение, что он не в курсе звукового кодека amr_nb. Т.е. получается что в (K)ubuntu 7.10 что-то поломали. Поиски в на форумах и Гугле в основном предлагали собирать ffmpeg с поддержкой amr_nb самостоятельно... Я был уверен, что кто-то это "самостоятельно" уже проделал. Погуглил более тщательно, и нашел правильный ответ.
Нужно в список репозиториев добавить ссылку на http://packages.medibuntu.org/:

deb http://packages.medibuntu.org/ gutsy free non-free

и скачать ключ командой:

wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update

Далее обновиться:

sudo aptitude update
sudo aptitude safe-upgrade

ffmpeg и сопутствующие библиотеки обновятся до нужной версии. Теперь конвертирование в 3gp проходит без проблем.
В этом же репозитории есть еще интересные пакеты: hot-babe, mencoder, mplayer, acroread, googleearth, skype, w32codecs.