суббота, 9 апреля 2011 г.

Как отправить bug на launchpad и обзавестись собственным PGP ключиком для почты


Первое выберем способ то каким образом оповестим:
1. Через утилиту  ubuntu-bug:
a) Нажимаем Alt+F2 в открывшемся окне пишем ubuntu-bug <имя пакета >, например  ubuntu-bug firefox
б) Вам предложат отправить отчет разработчика и заполнить специальную форму, которая запустится в вашем браузере
2. Через mail-интерфейс
Учтите несколько моментов: когда вы отправляете сообщение баг-трекеру, то оповестят вас об успехе или не успехе лишь через 4-5 минут (сам бакттрекер проверяет поступление почты каждые 3 минуты ). Кроме того вам потребуется подписывать ваше сообщение при помощи OpenGPG.
Итак что имеем?
Почтовый клиент Thunderbird 3.0.6, Ubuntu 10.04 и неободимость отправить сообщение о предположительной проблеме в ядре)
2.1. Регистрируемся на Launchpade .
2.2 Получаем gpg ключ
a) запускаем в консоли gpg с запросом на генерацию ключа:
gpg --gen-key
б) нас попросят определить тип алгоритма(но нас вполне устроит по умолчанию ), так что жмем enter.
в) размер ключа (опять устраивает вариант по умолчанию), жмем Enter вновь
г) нас попросят определить время действия ключа: жмем enter если хотим получить бессрочный
д) чтобы создать идентификатор ключа нас попросят ввести реальное имя, e-mail к письмам которого и будет применяться ключ и если хотим комментарий.
Вместо реального имени годится любая комбинация английских символов длинной равной или более 5 букв.
е) В результате будет выведена примерно следующая информация:
You selected this USER-ID:
    "Matthew Revell (My test OpenPGP key) "

Если вас все устраивает введите букву о(от слова Okey) и затем нажмите Enter  
ж) Вам будет  предложено ввести пароль для защиты ключа, не делайте его суперсложным, но и не делайте слишком простым
к)   Далее начнется генерация, вводите случайную абракадабру с клавиатуры это поможет генератору случайных значений быть более случайным, вас попросят вводить символы несколько раз. вводите их пока идет процесс генерации.
л) в ответ на команду gpg --list-keys  должна появится такая табличка:
/home/matthew/.gnupg/pubring.gpg
--------------------------------

pub   1024D/12345678 2007-01-26
uid                  Matthew Revell (My test OpenPGP key)
sub   2048g/9ABCDEF1 2007-01-26

Запомните ваш   pub идентификатор(в нашем примере  1024D/12345678 )
Это значит что pgp успешно создала публичный и приватные ключи для подписывания и шифрования сообщений
м) Теперь нам надо сообщить публичный ключ серверу ключей ubuntu:
gpg --send-keys --keyserver keyserver.ubuntu.com 12345678 (замените 12345678 на ваш pub  )

Если все прошло корректно, то вы увидите следующее:
gpg: sending key 12345678 to hkp server keyserver.ubuntu.com
3.  импортируем его своей учетке launchpad:  
а) launchpad не импортирует напрямую с сервера Ubuntu ключи поэтому нам самим придется его оповестить о необходимости этого. Для этого идем сюда  В поле ввода вводим так называемый отпечаток ключа(Fingerprint). Узнать его можно при помощи команды:
gpg --fingerprint.
 В ответ нам будет выведена табличка:

pub   1024D/12345678 2007-01-26
      Key fingerprint = 0464 39CD 2486 190A 2C5A  0739 0E68 04DC 16E7 CB72
uid                  Matthew Revell (My test OpenPGP key)
sub   2048g/ABCDEF12 2007-01-26
Нам нужна только та часть которая идет сразу после знака равно(0464 39CD 2486 190A 2C5A  0739 0E68 04DC 16E7 CB72).
Ее мы вводим в поле ввода на странице, которую мы открыли(страница изменения твоих OpenPGP ключей на Launchpad). Но здесь важен один момент наши ключи сервер Launchpad получит примерно через 10 минут после отправки на сервер Ubuntu. Поэтому между этим шагом и командой gpg --send-keys должно пройти 10 минут. Если все сделано правильно, то к нам придет сообщение зашифрованное, где будет содержаться информация о финальных шагах. И вот здесь нам придется установить  дополнение  Thunderbird для интеграции OpenPGP. Называется   оно  Enigmail. Лучше устанавливать его из Центра приложений, а не из меню  Thunderbird. Из меню будет скачена не совместимая версия с  3.0.6 . Во время установки вас спросят какой ключ и для какого адреса использовать, использовать ли шфрование по умолчанию. Вас так же попросят ввести пароль на ключ.(тот что вы вводили когда генерировали при помощи pgp ).
В шифрованной части письма ссылка    с подтверждением адреса, перейдя по ней вы окончательно активируете ключ.
2.3 Постим баг
В поле отправителя сообщения   помещаем адрес, который указывали при регситрации на Launchpad
В поле  получателя:  new@bugs.launchpad.net для нового бага, для редактирования существующего: bugnumber@bugs.launchpad.net
В поле  тема: краткое описание проблемы(будет использоваться как имя бага)
Ну а тело сообщения должно содержать само описание бага. При чем если баг связан с ядром и аппаратурой, то оочень желателен: вывод: команды dmesg(сообщения ядра ), команды uname -a (полное имя ядра), указать платформу(x86-32/64,alpaha,powerPC,mips),список оборудования: командой sudo lspci и т.д.
Если с обычной программой, то: скриншоты с ошибочным поведением, видеозапись действий своих и т.д. Подробно описывайте свои действия до сбоя.
В конце припишите две строчки
affects <имя-пакета> например для всей Ubuntu:  affects ubuntu, для ubuntu и chrome:  affects ubuntu/chrome
status new Это сразу установит статус бага в новый.
Если все будет верно сделано через 5 мин придет письмо с подтверждением. Допустим вы написали такое письмо:
From: you@example.com
To: 28919@bugs.launchpad.net
Subject: Re: [Bug 28919] error signing code of conduct: "str: No public key"
status incomplete
Тогда в ответ придет:

From:noreply@bugs.launchpad.net
To: you@example.com
Subject: [Bug 28919] error signing code of conduct: "str: No public key"

Public bug report changed:
https://launchpad.net/malone/bugs/28919

Changed in: Launchpad (upstream)
         Status: Unconfirmed => Incomplete
В случае неудачи(здесь мы забыли подписать письмо своим ключом )


From: noreply@bugs.launchpad.net
To: you@example.com
Subject: Submit Request Failure
An error occurred while processing a mail you sent to Malone's email
interface.

Error message:
In order to submit bugs via email you have to sign the message with a
GPG key that is registered in Launchpad
--
For more information about using Malone's email interface, please see
https://wiki.launchpad.canonical.com/Bugs/EmailInterface.Таким образом мне удалось запостить Bug #626255 (https://bugs.launchpad.net/ubuntu/+source/linux/+bug/626255)
2.4 Дополнительные возможности трекера
Формат команды, напоминаю должен быть одна строка на команду. Важно так же отметить, что строка должна начинаться с пробела(спасибо комраду flintstone ).
Ассоциирование бага с определенным/ыми пакетами происходит при помощи команды affects
Синтаксис:     affects [distribution|package|product]
HOWTO написан с использованием страниц справки Launchpad:Bugs/EmailInterface и YourAccount/ImportingYourPGPKey
впервые опубликовано: форум ubuntu


воскресенье, 20 февраля 2011 г.

Pygame:учим Python рисовать

    Так уж получилось, что  у меня в универе начался предмет компьютерная геометрия, а на нем,естественно, нужно представлять программы, которые генерируют нужные изображения. У нас выбрали как инструмент представления результатов  Qbasiс. 
Мне это понравилось неслишком по той простой причине, что в Ubuntu он не идет да и в Windows он запускается с бубном.
Память подсказала мне  кроссплатформенную   библиотеку Pygame. Она базируется на С-библиотеке SDL. Гарантировано работает на Windows,Linux,FreeBSD,Mac.
Собственно, чтобы в Ubuntu установить данную библиотеку, можно воспользоваться либо Центром приложений, либо в консоли: 
sudo apt-get install python-pygame. Установится все должно быстро и без вашего участия. 
Проверить,  действительно ли, установилась pygame можно при помощи: 
import pygame  
Если команда отработала без сообщений, то все в порядке. 
   Нарисуем с вами круг, закрашенный и наоборот, а на этом примере увидим, как работать с Pygame.
Начать нужно с инициализации библиотеки: 
import pygame
pygame.init()
Это обязательный шаг: во время этой команды Pygame настраивает себя на работу с вашей системой. Дальше нам надо получить область рисования на экране. Для этого напишем следующее: 

resolution=(420,320)#ширина и высота области 
flag=0#никаких дополнительных условий и настроек 
depth=32#глубина
screen=pygame.display.set_mode(resolution, flag,depth)

Здесь мы обращаемся к той части pygame,которая отвечает за работу с вашим экраном. Мы производим начальную настройку области рисования. Стандартная область 420,320. В переменной flag мы например можем потребовать у pygame использовать полноэкранный режим (pygame.FULLSCREEN) , однако во время отладки вашего приложения лучше его не использовать, так как прибить ошибочно работающий скрипт будет много легче не в полноэкранном режиме. 
Дальше задаем глубину цвета. 
После всех подготовительных действий передаем это все в функцию настройки экрана set_mode()
Дальше закрасим нашу область белым цветом. Для этого вызовем у объекта screen метод fill, а перед этим занесем в переменную color тот цвет, который нам нужен.
 
color=(255, 255, 255)# задаем белый цвет модели RGB цветов   
screen.fill(color) #закрашиваем всю область, цветом color    

цвета в pygame определяются кортежем из трех элементов. Как уже написано  в комментариях цвет должен передаваться в модели RGB. Давайте определим набор цветовых констант: 
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)                 
Я думаю так будет удобней:) 
А меж тем мы изменили изображение на экране, поэтому надо бы картинку на экране обновить, сделаем же это: 
pygame.display.update()      
После того как вы что-либо закрасили, нарисовали фигуру и т.д. обязательно вставляйте строку с вызовом функции обновления изображения экрана. 
Теперь нарисуем закрашенную  окружность черного цвета, а для этого нам понадобится функция circle. 
circolor=BLACK #цвет круга
center=(420/2,320/2)#центр окружности 
radius=100#радиус круга 
pygame.draw.circle(screen, circolor, center, radius)     
Итак с цветом понятно,а центр это кортеж из x-координаты и y-координаты 
радиус число больше нуля. 
На самом деле есть еще параметр width, однако сейчас мы его оставили со значением по умолчанию 0. Так как границы у нового изображения нет, то оно все закрашивается черным цветом. 
Но если в вызов функции после radius мы добавим через запятую 3, то увидим совсем иное. В чем дело? А лаарчик открывается просто: мы дали указание pygame начертить линию с толщиной 3 и цветом BLACK, вот ровно это она и сделала. Собственно говоря именно так можно получить незакрашенные фигуры во многих случаях.      
добавим pygame.display.update() 
В принципе все, за исключением того,что скрипт, не управляем пользователем. Единственный метод сейчас из него выйти это набрать в консоли python pygame.quit()
Это неправильно тем более что pygame нам предоставляет возможность обрабатывать различные события. Напишем код останавливающий  наш скрипт, либо по нажатию крестика в окне, либо по нажатию клавиши Esc:    
while True:
         for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if  event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    sys.exit()            
Что мы сделали? Мы организовали бесконечный цикл обработки событий. Как только  событие  попадает в очередь обработки оно будет извлечено при первой возможности и pygame передаст его в наш цикл. А в нем мы проверим следующее: 
1) Это событие сигнал к выходу? (генерируется при нажатии крестика)Если да,то завершаем  приложение и закрываем сам интерпретатор.      
2) Это нажатие клавиши ? Если да, то проверяем, что нажата клавиша Escape (самая верхняя слева) . Да? закрываем приложение и интерпретатор.   
Мы рассмотрели лишь очень малую часть возможностей этой замечательной библиотеки, зайдите на сайт www.pygame.org 
Там вы найдете документацию, ссылки на руководства и сможете загрузить различные версии библиотеки.Кстати она является OpenSource разработкой и распространяется на условиях LGPL . 
А в завершении заметки полный исходный текст нашего приложения(закрашенный круг): 
# -*- coding: utf-8 -*-
import pygame
import sys 
pygame.init()
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
resolution=(420,320)#ширина и высота области 
flag=0#никаких дополнительных условий и настроек 
depth=32#глубина
screen=pygame.display.set_mode(resolution, flag,depth)
color=(255, 255, 255)# задаем белый цвет модели RGB цветов   
screen.fill(color) #закрашиваем всю область, цветом color
pygame.display.update()
circolor=BLACK #цвет круга
center=(420/2,320/2)#центр окружности 
radius=100#радиус круга 
pygame.draw.circle(screen, circolor, center, radius)
pygame.display.update()
while True:
         for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if  event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    sys.exit()      
А вот и незакрашенная окружность:
# -*- coding: utf-8 -*-
import pygame
import sys 
pygame.init()
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
resolution=(420,320)#ширина и высота области 
flag=0#никаких дополнительных условий и настроек 
depth=32#глубина
screen=pygame.display.set_mode(resolution, flag,depth)
color=(255, 255, 255)# задаем белый цвет модели RGB цветов   
screen.fill(color) #закрашиваем всю область, цветом color
pygame.display.update()
circolor=BLACK #цвет круга
center=(420/2,320/2)#центр окружности 
radius=100#радиус круга 
pygame.draw.circle(screen, circolor, center, radius,3)
pygame.display.update()
while True:
         for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if  event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    sys.exit()            

       

воскресенье, 23 января 2011 г.

Python:загружаем файлы и информируем пользователя о прогрессе операции

       Есть в Python такой модуль urllib2 это высокоуровневый интерфейс к  библиотекам Python, работающим с протоколами HTTP,FTP и так далее. Передо мной встала необходимость реализовать возможность загрузки файла средствами этой библиотеки. Поэтому я определил такую функцию:
def Load(lpath,path):
        percent=10#процент загрузки файла
        myfile=open(lpath,'wb')#итак как в моем случае будут сохранять бинарные данные, то 
 #открываем в бинарном режиме на запись                   
        f=urllib2.urlopen(path)#открываем целевой URL 
        meta=f.info()#получаем информацию об URL (точнее заголовки в виде словаря)
        remotesize=meta['Content-Length'] #получаем размер из ключа Content-Length 
        print remotesize 
        blocksize = int(remotesize)/10.0 # определяем в байтах сколько составляет 10% 
        while 100>=percent:#пока загружено менее или ровно 100%.....
           myfile.write(f.read(blocksize ))#записываем блок данных размером blocksize, прочитанный #объектом f  
           print 'получено %d  процентов файла'%(percent)
           percent=percent+10
       myfile.close() #закрываем файл 
     Открывая URL библиотека urllib2 возвращает нам объект,имитирующий файл. Если мы вызовем read без параметров, то будет считан сразу весь объект, однако это может быть длительный процесс(все зависит от размера файла). Естественно перед использованием импортируйте модуль urllib2 в  вашу программу           

суббота, 1 января 2011 г.

Когда помощь всегда под рукой

Люблю я этот блог почитать, хотя бы из за того, что мои вопросы по LaTeX успешно решают заметки его автора. Хотя и просто для линуксоида, а особенно линуксоида-дебианщика или debian-based линуксоида   всегда найдется полезное и интересное в его трудовых буднях. А тут я нашел весьма хорошую штуку у автора: The Debian Cookbook Эта книга- сборник рецептов для решения различных насущных задач  линуксоида от того как послушать музыку пока перезагружаешь X-server до того как пересобрать ядро, восстановить данные на поврежденных носителях и сверстать красивый диплом в LaTeX :) Не смотря на название там все нормальном с русском языке +хорошие разъяснения об используемых инструментах.        

SQLalchemy:что это?

Вобще вокруг этого класса систем идет много дискуссий.Но в целом мне кажется очень хорошая идея заложена в ORM системы(Object-Relation System ). Основная их идея в том, чтобы создать слой между языком программирования и SQL. При чем этот слой нужен для абстрагирования от SQL и перевод работы с базой от ее создания до удаления в инструменты и понятия родные для конкретного языка, а не SQL. В данном случае python. И естественно,  исходя из названия предположить что там активно используются классы. Итак что же мы имеем? Таблицы связываются с классами, которые их описывают в программе, поля классов это поля таблиц, естественно к классам можно добавлять методы. Такие вещи как запрос и различные типы фильтрации то же представлены как типичный Python-объект, для задания сложных и не очень условий можно использовать операторы и функции Python. Так же при помощи ORM-модели в терминах языка можно описывать соединения таблиц между собой. Системы типа SQLalchemy стараются быть максимально универсальными, чтобы поддерживать независимость от конкретной СУБД, что не дает возможность задействовать некоторые "фичи" различных СУБД. Но это как говорится борьба универсализма и специализированности.    Для Python главной  ORM системой является sqlalchemy-opensource продукт (либеральная лицензия MIT) .Она позволяет в терминах и структурах данных python создавать приложения для работы с БД, начиная от описание структуры таблиц и связей в БД и заканчивая модификацией и извлечением данных.             

пятница, 31 декабря 2010 г.

LaTeX: пишем и верстаем статьи

Все мы как то привыкли, особенно те кто живет в мире Windows,что кроме MS Office или OpenOffice ничего для создания документов ничего нет. Но это не так и при чем далеко не так. Кроме принципа, что вижу, то и получу есть и системы основанные на языке разметки.Вот об одной из них мы сегодня обзорно и поговорим.
   В 80-ые годы дедушка нынешней информатики, а так же автор замечательной книги "Конкретная математика",математик Дональд Кнут захотел создать систему, которая в наибольшей степени  отвечала бы потребностям математиков при написании статей. Так и появился TeX. Но чуть позже к нему добавили пакет  расширений и  система с этим пакетом расширений называется    LaTEX. Давайте рассмотрим структуру не очень сложного LaTEX документа:
\documentclass[10pt,a4paper]{article}
\usepackage{ucs}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\title{Контрольная Работа №2 Вариант 1}
\begin{document}
\begin {flushleft}
\underline{1 задание}
\underline{условие:}
$z=e^{x+y}*(x\cos{y}+y\sin{x})$
$dz-?$
\underline{Решение:}
$dz=z_x'dx+z_y'dy$
$z_x'=e^{x+y}*(x\cos{y}+y\sin{x})+e^{x+y}(\cos{y}+y\cos{x})$
$z_y'=e^{x+y}*(x\cos{y}+y\sin{x})+e^{x+y}(\sin{x}-x\sin{y})$
$dz=e^{x+y}*(x\cos{y}+y\sin{x})+e^{x+y}(\cos{y}+y\cos{x})dx+e^{x+y}*(x\cos{y}+y\sin{x})+e^{x+y}(\sin{x}-x\sin{y})dy$
\end {flushleft}
\end{document}
Собственно говоря именно для сдачи контрольных, курсовых, дипломов и прочих серьезных по размерам и не очень документов LaTEX и любят использовать.
первая строка documentclass описывает системе LaTEX, а с каким типом документа она имеет дело, это важно для оформления, которое LaTEX использует по умолчанию.Кроме того, что мы говорим LaTEX что это статья мы определяем, что хотим использовать шрифт размером в 10 пунктов и размещать текст как на листе A4 
А вот дальше мы подключаем различные пакеты TeX. А они то как раз и расширяют возможности системы в очень многих направлениях: 
 \usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
Эти пакеты подключают набор хороших шрифтов, математических обозначений и др. символов 
\usepackage{ucs}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
Эти пакеты необходимы для обеспечения нормальной кодировки при вводе\выводе ,а третий для обеспечения поддержки русских символов в документе LaTEX
Дальше мы указываем название документа. 
Строка \begin{document} начинает тело документа. Затем мы производим выравнивание влево. 
Ключевое слово \underline позволяет нам сформировать заголовок с подчеркиванием 
Знаки доллара включают для строки математически режим. То есть для этой строки становятся доступны математические команды, которые в ином случае вызвали бы ошибку. В данном случае применяется т.н. встроенный матрежим, т.к. он позволяет быстро включать и выключать математический режим работы. Имена функций снабжены \ потому, что в LaTeX для их правильного форматирования то же используются представление в виде управляющей конструкции. Как вы может быть догадались ^ требует от LaTeX записать следующие за ним символы как верхний индекс. Обычно в формулах так записывают степени при выражениях и числах.
\end {flushleft}
Эта строка указывает на конец блока с левым выравниванием
А следующая строка на конец документа.
Основное отличие LaTeX от того же Word, что очень мало предположений делается за вас вы определяете расположение его на странице, как его разбивать. При чем делается это специальными управляющими конструкциями. Вобще практически все в LaTeX представляет собой те или иные специальные управляющие команды и данные, которые подлежат обработке.
"Неудобно и странно",- говорите? Ну это только на первый взгляд:
1) TeX имеет большое количество шаблонов и рецептов для форматирования того или иного текста. Особенно он славен очень хорошим форматированием заковыристых формул 
2) TeX имеет очень развитую систему для создания библиографических ссылок и предметных указателей. 
3) Чем больше вы набираете опыта работы с TeX тем меньше времени вы тратите на предварительное оформление: вы можете найти либо готовый шаблон, либо взять оформление из похожего документа ранее вами написанного и простым CONTROL+C и CONTROL+V добавить нужное оформление в документ. 
4) Благодаря четкой семантике и правилам языка TeX большинство математических систем используют его как формат для импорта\экспорта данных (например библиотека sympy,система алгебраических расчетов Maxima,Mapple,MATLAB )
5) TeX документ очень легко передавать, ведь это просто текст 
6) Ядро TeX позволяет генерировать PDFники и PostScript на основе TeX описания
7) Для многих научных издательств это стандарт формата статей для приема от авторов. 
Сама система ТеХ как и редакторы для нее открытый продукт и может быть спокойно установлен как часть программы Texmaker кроссплатформенного редактора TeX. 
Вобщем попробуйте в деле инструмент, проверенный временем. 
Да и это.... че то сегодня все суетятся, к чему бы? А! Новый год! Пооэтому всех поздравляю и желаю чистого кода в новом году, здоровья и счастья, творческих идей и сумасшедших идей в хорошем смысле слова:) С праздником, друзья!

четверг, 30 декабря 2010 г.

OSI против сделки по продаже Novell

OSI(Open Source Initiative) обратилась к антимонопольщикам Германии с предложением обратить повышенное внимание на сделку по покупке фирмой Attachment фирмы Novell. Причина такого обращения неясная и туманная судьба 882 патентов фирмы Novell. Ранее они помогали останавливать патентные атаки против FOSS, однако сейчас ситуация может резко изменится: к этим патентам проявил интерес консорциум CPTN и он готов купить эти патенты за 450 млн $. Меж тем в этот консорциум входят: Microsoft,Apple,Oracle,EMC. Роль главной скрипки там естественно играет M$.Как говорят анонимные источники из этих четырех компаний: эти патенты будут играть важную роль в бизнес-планах корпораций.(источник)
С учетом той опасности(война компаний,входящих в CPTN против открытого софта весьма внушительна), которую представляет данная сделка для открытого сообщества OSI направило письмо в соответствующее ведомство Германии. Ведомство подтвердило его получение и приняло в рассмотрение, т.к. публичные комментарии по поводу сделки принимаются до конца декабря антимонопольным ведомством Германии. Со своей стороны OSI обещает максимальное содействие в случае необходимости получения дополнительной информации.
Новость взята c LOR'a
Добавлю небольшую так сказать ист. справку: 
Довольно долгое время патентное ведомство США вобще не видело необходимости в патентовании алгоритмов. Ведь фактически это закрепление идеи и запрет на ее использовании без роялти в сторону того кто запатентовал. Но в конце концов убеди крупные корпорации я думаю не без платежей на лапу, но не об том сейчас разговор(80-ые годы). В конце концов все было для копирастов очень хорошо и посыпались патенты один глупее другого, с точки зрения нормального   человека: например делая двойной  клик мышкой мы на самом деле, используем патентованную MS технологию "доступа к данным".Вот так вот товарищи, да все  схвачено. Но самое приятное для пропиетарщины   здесь в том, что это бумажка с печатью может стать смертоносным оружием в руках корпораций в судах. И последние патентные войны между Oracle и Google хорошее тому свидетельство.Недавно, а именно в начале декабря фирма Novell пошла с молотка. А у этой фирмы было 882(!) патента на технологии, которые охватывают для UNIX базисные технологии вроде конвеерной обработки данных. Ранее была эпичная сага между SCO и IBM , когда SCO хотела поставить вне закона Linux, но здесь как раз появился Novell со своими патентами и SCO вынуждена была уйти ни с чем. Но как видим история имеет свойство повторятся.                  

четверг, 23 декабря 2010 г.

Свободные стандарты становятся национальными

ODF это открытая альтернатива пропиетарным форматам от Microsoft К сожалению ODF довольно долгое время был на правах бедного родственника и мог рассчитывать исключительно сам на себя. MS старательно на него закрывала глаза и только под давлением роста популярности Open\LibreOffice в 2010 MSO была введена ограниченная поддержка данного формата, который по факту стал международным стандартом! ( ISO/IEC 26300:2006) Но MS стандарты не указ) 
Однако сначала ЕС начал политику перехода на открытые стандарты, а теперь этот стандарт принят и Россией:
"21 декабря Федеральное агентство по техническому регулированию и метрологии выпустило уведомление о том, что утверждён стандарт ГОСТ Р ИСО/МЭК 26300-2010 «Информационная технология. Формат Open Document для офисных приложений (OpenDocument) v1.0».
Стандарт идентичен ISO/IEC 26300:2006 и вводится в действие с 01.06.2011 с правом досрочного применения." 
Что же сделан еще один шаг в пользу того чтобы у человек был выбор и он не зависел от прихотей одной фирмы.  
Официальное извещение можно прочесть здесь

воскресенье, 12 декабря 2010 г.

атаке подвергся репозиторий Free Software Foundation

Веб-интерфейс к репозиторию FSF был восстановлен после атаки на сервер в прошлые выходные, где хранятся материалы для сайта gnu.org. Атакующими были загружены все имена пользователей и их зашифрованные пароли. Как заявил Matt Lee, один из менеджеров FSF, программное обеспечение проекта GNU не подверглось каким либо вредоносным воздействиям со стороны атакующих.
Админстраторы хостинга откатили все изменения, начиная с 23 ноября. Разработчики, использующие репозиторий FSF, могут загрузить свои изменения из локальных копий, однако должны сменить пароль.
Сама атака произошла 24 ноября при помощи SQL-инжекта, направленного против багтрекерной системы Savane. Атакующие смогли создать новую учетную запись администратора и изменить домашнюю страницу gnu.org
Кроме того, атакующие нашли директорию с правом записи и поместили в нее шелл для дальнейшего доступа. Однако, в FSF надеются, что атакующие не смогли получить root-доступ к самому серверу.
Стоит отметить, что недавно атаке, в ходе которой была скомпрометирована база данных логинов и паролей, вместе с сайтом также подвергся сервер Apache Software Foundation.

суббота, 6 ноября 2010 г.

Python:алгоритм бинарного поиска

Идея этого алгоритма проста(работает на отсортированных массивах\списках):
Сначала высчитываем индекс среднего элемента по формуле (m+n)//2.Где n это индекс начального элемента, а m количество элементов в массиве  В случае нечетного числа элементов округляем до ближайшего целого полученный результат. А дальше уже смотрим  что получается:
а) Элемент найден и мы возвращаем его индекс 
б) Средний элемент меньше ключа поиска 
в) Средний элемент больше ключа поиска 
В случае б) мы должны отсечь те элементы которые меньше среднего, то есть правую часть массива\списка. Дробится этого можно приняв за начальную границу поиска первый элемент со значением больше чем средний элемент, а у нас массив\список сортированный значит это элемент с индексом  i+1, где  i индекс среднего элемента. а конечная граница поиска последний элемент. в случае в) нам нужно принять за начальную границу первый элемент меньший среднего, а значит нам нужен элемент с индексом i-1.  Как конечная граница поиска естественно принять индекс первого элемента. Итак весь процесс будем повторять пока не выполниться любое из трех условий:
1) Элемент найден 
2) Начальная граница стала равна наибольшему элементу массива
3) Начальная граница стала равна индексу наименьшего элемента.
Самый положительный для нас случай 1.Преимущество алгоритма в том что при каждом сравнении убавляется половина отрезка, где происходит поиск элементов.
Краткое описание алгоритма:
1. Взять  индекс первого  элемента (n)
2. Взять индекс конечного элемента (длину массива ) (m)
3. Рассчитать индекс среднего элемента по формуле (m+n)\2 (i)
4. Сравнить средний элемент с ключом
4a Пока 0<=i
5а Если ключ = =элементу в выходим из программы
5б Если ключ>элементу,то n=i+1 m=len(l)
5в Если ключ<элементу, то n=i m=i-1  
6. Переходим к шагу 4a      
А вот и код на python,реализующий алгоритм:
def  quick_sort(l,k):
    m=len(l)
    n=0
    i=(m+n)//2
    while 0<=i
        if l[i]==k:
            return i
        elif  l[i]
            m=len(l)
            n=i+1
        elif  l[i]>k:
            m=i-1
            n=i
        i=(m+n)//2  
    return None  

воскресенье, 31 октября 2010 г.

Python: списки




Обойти вниманием такой тип данных языка Python нельзя.
Списки это последовательность элементов. Данный тип данных относится к изменяемым. Фактически список это структура данных которая реализует хорошол известную структуру данных в программировании: связный список.
Список как структура данных Python поддерживает следующие операции:
append (a)--вставка элемента любого типа в конец списка    
extended(a)--присоединяет в конец  списка другой список переданный параметром функции
count(a)--подсчитывает количество элементов c значением a
index(a)--возвращает индекс искомого элемента или возбуждает исключение ValueError
insert(i,a)--вставить объект  a произвольного типа в позицию i
remove(a)--удаляем элемент со значением a
pop()--удаляем у списка последний элемент и считываем его в переменную имитируя поведение стека.
reverse-переворачивает список, т.е. первый элемент меняется местами с последним и т.д.
sort-сортируем список
Еще список позволяет брать срезы:
a=range(10)#генерируем список из 10 значений от 0 до 10(исключая 10)

 a[1:5]#берем срез с 1 по 5 элемент
[1, 2, 3, 4]
 a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Обратим внимание что первый элемент имеет индекс 0, а не 1!
Кроме того мы можем брать срезы с определенным шагом:
 a[1:5:2]#выбираем каждый второй элемент начиная с 1-го и до 5-го
[1, 3]
А если хотим получить весь список:
 a[:]#выбираем все элементы списка
Все элементы начиная с 1-го
 a[1:]#выбираем все элементы списка начиная с 1(по умолчанию шаг 1)
 [1, 2, 3, 4, 5, 6, 7, 8, 9]
Все элементы с шагом 2:
 a[::2]
[0, 2, 4, 6, 8]
Но Python предоставляет нам дзен-возможности: отрицательные индексы:)
выберем последний элемент:
a[-1]
9
А такой срез нам даст пред предпоследний и предпоследний:
a[-3:-1]
[7, 8]
Ну и весь список в обратном порядке:

a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Пара слов о срезах. Срезы это общий инструмент для всех последовательностей. Срез это независимый объект от первоначального, точнее копия выбранной части. Проверим это:
a=range(10)
asl=a[0:3]
for i in xrange(0,len(asl)): #здесь применена функция xrange, которая возвращает нам #итератор по объекту xrange. Хrange генерирует цифру только во время обращения, чем #экономится память и время выполнения
asl[i]=asl[i]*3

asl
[0, 9, 6]

a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Как видим изменения внесенные в срез никоим образом не затронули исходный объект.
А вот если мы присвоим двум переменным одинаковый список таким образом:

 a=b=range(10)
 a[1]=a[1]*10
 a[1]
10
 a
[0, 10, 2, 3, 4, 5, 6, 7, 8, 9]
 b
[0, 10, 2, 3, 4, 5, 6, 7, 8, 9]
Этот интересный результат связан с тем что в данном случае произошло так называемое поверхностное копирование объектов. Так как в python все переменные это на самом деле ссылки, то когда python обрабатывает присвоения вида: a=b=4 то он прост связывает с именами a и b одну и ту же ссылку
А если мы напишем так:  


a=range(10)
b=range(10)
a[1]=a[1]*10
a
[0, 10, 2, 3, 4, 5, 6, 7, 8, 9]
b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


 То все стандартно так как Python свяжет с каждым именем свою собственную ссылку.
В список можно вкладывать списки и любые другие объекты. Наиболее быстрые операции это pop и append, а вставка элементов и их удаление из середины займут больше времени из за перенастройки указателей в списке.

понедельник, 25 октября 2010 г.

Python: типы данных.

Здесь я решил собирать небольшие записки путешествия по миру python +примеры. И начнем мы его с типов данных. Python это язык типизированный, но сама система типизации в нем динамическая. Что это для нас значит?   Это значит что в одной и той же переменной мы можем совершенно спокойно хранить: числа, строки,кортежи, списки и ваши собственные типы данных. Кошмар:)И например такие строки совершенно нормально воспримет интерпретатор:
 a='Stroka'
a=1
a=[4,3]
Как такое возможно ? Вся тонкость в том чтобы понять что такое переменная в python: это не жестко статически выделенная область памяти, а динамически распределяемая область памяти, которая реализована за счет не типизированных указателей С. Именно поэтому python может свободно жонглировать типами данных, приводя переменную к нужному типу данных по мере необходимости.
А зачем же типы? А они нужны затем, что для каждого типа данных определен свой собственный набор операций и то что например вполне корректно для числа будет совсем некорректно для списка или кортежа.
Так же важно помнить, что python делит все типы данных на две категории:
1. Изменяемые
2. Неизменяемые
На всякий случай поясню: если мы создаем объект первого типа, то мы можем его изменять целиком или отдельные части и мы будем работать все с тем же объектом.
А вот со вторым типом объектов такие штучки не пройдут.
Продемонстрируем это на примере работы с двумя одинаковыми по содержанию коллекциями, но одна из них это список (изменяемый тип данных), а вторая кортеж (неизменяемые объекты).
am=[1,2,3,4]
aim=(1,2,3,4)
for i in xrange(0,len(am)-1):
     am[i]=7*am[i]
 print am           
В результате нам спокойно покажут:
>>>
[7, 14, 21, 4]
Но стоит нам добавить такие строки в скрипт:
 for i in xrange(0,len(am)-1):
     aim[i]=7*aim[i]
print aim
Как Python нам сообщит:
Traceback (most recent call last):
  File "/home/abc/блог/PyMutInmut.py", line 7, in
    aim[i]=7*aim[i]
TypeError: 'tuple' object does not support item assignment  
Собственно и произошло то о чем говорилось ранее: нельзя в неизменяемых объектах менять отдельные части,
Зачем так было придумано? Логика в этом есть и неплохая между прочим, неизменяемость объектов позволяет легче реализовывать, быстрее доступ к таким объектам на чтение но не на запись.Кроме того неизменяемые объекты нужны для функционального программирования, где воздействия на аргументы кроме возврата результата функции не допускаются.  
Здесь есть одна тонкость: неизменяемые объекты можно изменять!) Как ?Ну например так:
stri='hel'
stri=stri+'hel'
Произойдет прозаическая конкатенация строк. Однако заглянем за кулисы:
1) Python возьмет копию исходной строки+вторая
2) Пометит а потом и утилизирует (то есть уничтожит в памяти) исходную строку
3) Присвоит идентификатор новой строке.
То есть видите любая операция с неизменяемым объектом где он меняется порождает новый объект . Но на самом деле список и другие изменяемые структуры могут легко решить ваши проблемы по скорости записи и уступают по скорости чтения не намного.        

пятница, 22 октября 2010 г.

Gedit+FASM

Редактор Gedit я думаю в особых представлениях не нуждается:) И кроме всего прочего (а про прочее можно прочесть здесь) он позволяет подсвечивать синтаксис разных языков программирования. Чтобы включить этот режим достаточно выбрать:
Вид->Подсветка синтаксиса->...(нужный язык)
Итак что же мы имеем? Имеем мы много чего кроме ассемблера. Я остановил свой выбор на FASM(Flat Assembler). И заглянув на форум FASM-community обнаружил следующее: http://board.flatassembler.net/topic.php?t=6365 
Тем в топике не так уж и мало что вдохновляло, а с подсветкой синтаксиса FASM для Gedit была связана эта:http://board.flatassembler.net/topic.php?t=8523
Итак качаем файлики из темы. Это описания в формате xml лексем для ассемблера разновидности fasm. Эти файлы нужны для GTKSourceView. Это в свою очередь С-библиотека расширение для GTK, которое позволяет осуществлять многострочное редактирование текста, операции redo/undo   неограниченной глубины,регистронезависимый  поиск в тексте с кодировкой UTF-8, и прочие вещи специфичные для редакторов исходных текстов. Именно на этой библиотеке работает например Gedit,Anjuta(среда разработки для GNOME). Так вот, чтобы добавить возможности   подсветки нового синтаксиса в Gedit нам нужно распакавать файлики из темы, после чего кидаем в папку GTKSourceView по адресу: /usr/share или /usr/local/share или /user/gnome/share или /usr/X11R6/gnome/share  (у меня сработал первый путь ). Но здесь нас ждет засада: usr относится к системным папкам, которые Linux абы кому модифицировать не дает поэтому root спешит нам на помощь=)
И здесь есть два пути (точнее 3:)):
1) Пойти истинным Unix-way и копировать все командой sudo cp /path/to/your/file  /usr/share/ GTKSourceView/language-specs/asembly.lang
2)запустить nautilus из командной строки sudo nautilus
3) или его же запустить но немного иначе gksu nautilus
Далее когда вы скопируете файл asembly.lang  в language-specs,а в styles   oblivion2.xml останется только перезапустить gedit и возрадоваться.
    
 

воскресенье, 17 октября 2010 г.

Python: запускаем скрипты

 Если вы пользователь Linux то скорее всего у вас уже все есть и проверить наличие python довольно просто:откройте командную  строку и наберите: python
На самом деле все вы уже можете писать программы) Каждое ваше действие вы непосредственно передаете интерпретатору и его результаты будут немедленно показаны на экране в командной строке. Можно так же установить IDLE это штатная и очень неплохая среда разработки на python:
apt-get install idle. 
  А если нам захочется немедленнот в консоли проверить команду python? Ответ: 
python -c "print( 'Twest')"
-с заставляет python интерпретировать строку как код. 
Чтобы запустить скрипт в консоли можно написать python имя_скрипта.py 
А если написать в скрипте первой строчкой: #!env/python 
То python будет запущен с этим скриптом автоматом по команде 
./имя_скрипта.py    
./ Так как заставляет искать скрипт не по переменным окружения, а в текущем каталоге   

Что такое copyleft?

Все нам внушают то что собственность это святое и неприкосновенное, и то что за все нужно платить.Производители коммерческого программного обеспечения явно довольно таким положением вещей и всячески его стремятся закрепить.Однако практика развития ИТ показала, что оказывается можно иначе. Как? Окунемся немного в историю OpenSource движения
Первые открытые лицензии это лицензия MIT и BSD. Но это были весьма мягкие лицензии для пропиетарных программ.Но свою пользу они принесли, например система FreeBSD и ей родственные используются и поныне.   главное отличие лицензий MIT и BSD от GPL и сходных с ней лицензий в том, что они не запрещают совмещать открытый код и закрытый и делать весь код закрытым. Пропиетарные дельцы этим пользуются, например продукт LabVIEW использует виртуальную машину LLVM для организации выполнения байт-кода, однако исходные тексты LabVIEW вы не получите:) 
В 1984 году Ричард Столлман выдвинул новый тип лицензии GPL. Ее отличиемот предыдущих лицензий открытого типа была очень жесткая позиция по отношению к закрытым программам, а именно: ни одной строчки кода под GPL не может попасть в закрытый продукт. Для защиты от пропиетарных(закрытых) продуктов GPL-кода от закрытия было выдвинуто 4 права и одно ограничение GPL лицензии. 
Права:

  • Выполнять программу с любыми целями как коммерческого так и некоммерческого характера 
  • Свободно получать исходный текст программы 
  • Модифицировать исходный текст программы 
  • Распространять свою версию программы вместе со всеми   изменениями на условиях той же лицензии с которой вы ее получили 
Именно благодаря последнему пункту мы наблюдаем бурное развитие GPL-софта и его возрождение из пепла даже если разработчики бросили проект. Конечно то что производные работы заставляют то же лицензировать под GPL очень не нравится производителям коммерческого софта и они потому не особо то и хотят участвовать в OpenSource движении.Microsoft кроме того открыто поливает грязью открытый код. 
   Хотя и я уже об этом и говорил, но повторюсь: приучать со школы надо именно к открытым GPL-разработкам, так как они гораздо дешевле государству, либо равны, а часто и лучше своих коммерческих аналогов  по возможностям. Кроме того так как многие открытые программы таят в себе множество возможностей при внимательном изучении и требуют своего изучения, то пользователь приучится читать документацию. 
Теперь посмотрим на это и с другой стороны: государству то же есть немалая выгода в OpenSource, ведь вокруг нужного продукта формируется сообщество, которое может помочь тестированием кодом и т.д. При чем процесс можно вполне контролировать госорганизациям.А реализация научных разработок в рамках открытой модели это и дальновидное решение с точки зрения правительства. Почему? 
1) Открытая форма распространения знаний позволит более эффективно совершенствовать разработку. Если применять GNU/GPL  то и воровать код, чего так боятся, будет невыгодно потому что разработка будет нелегальной и это будет грозить судебными разбирательствами. 
2) Разработка комплекса ПО для исследований с открытым исходным текстом позволит избежать волокиты и высоких затрат для университетов и НИИ страны. Кроме того открытые исходники будучи способствовать более лучшему вовлечению студента в процесс обучения программирования.        
3) Государству и крупным корпорациям будет выгодно распространять часть технологий как открытые стандарты, привязывая тем самым разработчиков к своей инфраструктуре            

вторник, 5 октября 2010 г.

wget: менеджер заначек командной строки

В Windows для многих является совершенно привычной вещью менеджер закачек. Linux нам то же его предоставляет при том несколько вариантов, но мы рассмотрим один из самых популярных, особенно когда дело касается больших файлов: консольную качалку wget. На самом деле ее интерфейс весьма прост, поэтому начнем с ней знакомится не откладывая   дело в долгий ящик.
Решим с помощью нее несколько простых задач(качать будем ну например CentOS с зеркала Яндекс):
Задача 1 просто скачать файл:
wget       http://mirror.yandex.ru/centos/5.5/isos/i386/CentOS-5.5-i386-bin-DVD.iso
В этом случае файл сохранится в домашнем каталоге. Или в том каталоге в который перешел пользователь до начала загрузки wget'ом
Задача 2  Скачать и сохранить файл в определенный каталог:
wget  -P /home/auser/download      http://mirror.yandex.ru/centos/5.5/isos/i386/CentOS-5.5-i386-bin-DVD.iso
Не забываем про волшебное сочетание: ./ Это указывает на текущий каталог и заставляет уже в нем искать необходимую папку. Обратите внимание при необходимости иерархия папок указанная после ключа -P будет создана.
Задача 3: скачать файлы из списка, хранящемся в файле:wget -i spisok.txt
В сам файл нужно записать прямые ссылки на файлы. И wget последовательно скачает файлы из списка.
Задача 4: докачка файла:
wget   -с    http://mirror.yandex.ru/centos/5.5/isos/i386/CentOS-5.5-i386-bin-DVD.iso
Здесь важно предварительно перейти в директорию, где хранится нужный файл, а ключ c(continue) укажет что необходима докачка.    
Задача 5: создать зеркальную копию сайта(на примере http://mirror.yandex.ru/):
wget -r  http://mirror.yandex.ru/
Ключ -r заставляет заходить wget последовательно во все подкаталоги и воссоздавать всю структуру каталогов у вас на компьютере. Так же можно указать уровень рекурсии, то приведет к скачиванию только части каталогов. Допустим файловая структура site/content/1.htm  и внутри  content еще есть каталог subcontent. Вот если мы укажем уровень рекурсии 2, то будет загружен лишь каталог content , а подкаталог subcontent нет.      
Задача 6:отключить машину по окончании загрузки:
sudo wget   http://mirror.yandex.ru/centos/5.5/isos/i386/CentOS-5.5-i386-bin-DVD.iso &&shutdown -h now
Нам обязательно нужно предоставить права суперпользователя для того чтобы могла сработать команда shutown, флаг -h(halt) говорит о том что компьютер нужно выключить а now я думаю объяснять не надо:) При помощи операции логического И(&&) мы объединяем две операции для последовательного выполнения, т.е. сначала будет выполнено скачивание файла, а затем команда shutdown. Внимательно изучите вывод команды wget --help в нем много интересного:)  
Удачных закачек!  

воскресенье, 3 октября 2010 г.

Прокачиваем gedit

Gedit это программа, которая идет по умолчанию с GNOME и является аналогом Блокнота Windows. Точнее говоря  Блокнот Windows это жалкая тень Gedit:) Gedit по своим возможностям споставим с OpenSource проектом Notepad++ в Windows. Нам итак из коробки предоставляется возможность подсветки синтаксиса многих языков программирования, проверки орфографии, вывода статистики документа, сопряжения с внешними программами и т.д. 
Но на самом деле это далеко не все: у Gedit есть постоянно расширяющийся набор плагинов. Вот о них то мы и поговорим. Чтобы установить их наберем в командной строке:
 sudo apt-get install gedit-plugins
Дальше запускаем Gedit и входим в меню плагинов: Правка->Параметры->Модули 
А здесь нам откроется выбор плагинов. 
Меня заинтересовали такие модули:
1)  Встроенный терминал. При помощи этого модуля вы сможете получить доступ из Gedit к командной строке Linux.
2) Дополнение скобок. Добавляет автоматически закрывающие скобки
3) Python консоль. Комментарии не требуются:)     
На самом деле это далеко не все плагины. Не забудьте включить нижнюю панель в меню Вид             

четверг, 30 сентября 2010 г.

Python для студента

Python это простой для освоения, открытый интерпритируемый язык. Но чем он полезен студенту? Кроме всех перечисленных свойств он имеет кучу открытых расширений.
Пройдемся по некоторым:
Numpy это библиотека матричных вычислений на Python. Его особенностью является использование С++ и С кода для реализации матричных вычислений.Это дает хороший прирост скорости,так как все эти операции сразу используют скомпилированные расширения python, написанные на С/С++ c использованием низкоуровневой библиотеки  LAPPACK(решатель задач линейной алгебры). Эта же библиотека лежит в основе MATLAB
Но одной линейной алгебры мало нам и по сему обратим свой взор к Scipy она использует numpy и предоставляет такие возможности(взято из Википедии):
Доступные субпакеты

  • constants: Физические константы и коэффициенты пересчёта (с версии 0.7.0)
  • cluster: Векторное квантование
  • fftpack: Дискретные алгоритмы преобразования Фурье
  • integrate: Инструменты для интегрирования
  • interpolate: Инструменты для интерполяции
  • io: Ввод/вывод данных
  • lib: Врапперы Python для внешних библиотек
  • linalg: Линейная алгебра
  • misc: Разные утилиты
  • optimize: Средства оптимизации
  • sandbox: Экспериментальный код
  • signal: Обработка сигналов
  • sparse: Поддержка разреженных матриц
  • special: Специальные функции
  • stats: Статистические функции
  • weave: Позволяет включение кода C/C++ внутри кода Python

Дополнительная функциональность:
Основной функционал SciPy расширяется за счёт других инструментов.
Например:
Графика. На данный момент рекомендованным пакетом для отрисовки двухмерной графики является Matplotlib, тем не менее существует множество других, например HippoDraw, Chaco, и Biggles. Также популярными являются Python Imaging Library и MayaVi (для 3D визуализации)
Оптимизация. Хотя SciPy имеет свой пакет для оптимизации, OpenOpt имеет доступ к большему количеству оптимизационных пакетов и решателей
Продвинутый анализ данных. При помощи RPy, SciPy обеспечивает интерфейс к статистическому пакету R предназначенному для сложного анализа данных.
База данных. SciPy может взимодействовать с  PyTables, иерархической базой данных разработанной для эффективного управления большими объёмами данных на основе HDF5.
Интерактивная оболочка. IPython это интерактивная среда которая обеспечивает дебаггинг и создание кода в стиле близком к MATLAB. Ну что ж мне кажется Вики все вполне хорошо описала для затравки.
Символьная математика. Существует несколько библиотек для Python, такие как PyDSTool, Symbolic и SymPy-- которые позволяют работать с символьной математикой.Библиотеки
Как видите это довольно серьезный набор для математика.Кроме того такие библиотеки как NetworkX,Boost.Python,igraph позволяют работать со структурами типа графов.  
    Если же касаться вопроса о символьной математике детальней, то остановемся на Sympy
Это библиотека позволяет дифференцировать, интегрировать, раскладывать в ряды и производить упрощения символических выражений. Библиотека свободная для использования под лицензией BSD, а по сему вы можете делать на ее основе и коммерческие продукты. В конце статьи будут приведены некоторые дополнительные ссылки.
А если мы хотим написать игру? Пожалуйста BSD библиотека PyGame спешит нам на помощь.Она позволит нам:
Создать нестандартный интерфейс
Работать с текстурами
Звуком
Другими графическими файлами
Библиотека использует средства OpenGL. Кроссплатформеная. Легка в инсталяции. На ее основе сделаны различные разработки в области графики кроме 2D игр.
Кстати если вы психолог, то вас может заинтересовать система проведения экспериментов в области восприятия PsychoPy. Это открытая разработка интгерирующая в себе инструменты для проведения экспериментов и их последующую численную обработку. Начинается все с того что вы пишите python скрипт, который описывает будущий эксперимент. Затем уже по его результатам система позволит провести различные статистические рассчеты по его результатам. Поддерживается весьма широкий спектр статических и прочих математических функций.
  А захотелось нам например реализовать задачи связанные со сложной обработкой и анализом текстов. Пожалуйста! для этого у нас есть такой инструмент как NLTK (опять же под лицензией Apache).Эта библиотека разработана для того, чтобы предоставить инструменты анализа слов, синтаксического анализа и максимально облегчить работу с информацией текстового характера. Вокруг этой библиотеки реализовано много академических и учебных проектов. Кроме того на основе этой библиотеки написан учебник по синтаксическому анализу и прочим вопросам работы с текстовой информацией: Natural Language Processing with python.Книжечка зарубежная и непереведенная, но сама в рунете есть. Можете поискать ее в списке книг на форуме сайта python.su 
На самом деле есть еще большое множество иных библиотек, которые в обзор не попали. А для многих компонентов Linux и OpenSource приложений поставляются python-библиотеки, открывающие доступ к возможностям последних. Вобщем возможности python заслцуживают внимания:)
Ссылки:
Расширения Python,упомянутые в заметке:

  1. Библиотека Numpy 
  2. Библиотека Scipy
  3. Библиотека Sympy
  4. Библиотека   анализа данных, имитации систем и физ. процессов  PyDSTool    
  5. Библиотека  NetworkX
  6. Библиотека Boost.Python
  7. Библиотека igraph
  8. Комплекс Psychopy
  9. Библиотека NLTK 
  10. библиотека Pygame
Статьи:
  1. Программирование и научные вычисления на языке Python

  2. Математический Python
  3. Анализ социального графа
              


      понедельник, 27 сентября 2010 г.

      автоматизируем Linux: установка многих пакетов в один присест

      Допустим каждый раз нам приходится устанавливать группу пакетов на машины. Все это набивать каждый раз в консоли утомительно, но та же консоль может снять с нас эту рутину. Все достаточно просто, напишем такой скриптик:
      apt-get install djview python-djvu
      При чем в строчку через пробел можно вписывать любое количество пакетов. Запускать надо его из под sudo таким образом(предположим что сохранили мы его в myinst.sh):
        sudo ./myinst.sh
      ./ заставит оболчку просмотреть тот каталог где вы сейчас находитесь 


      среда, 22 сентября 2010 г.

      Запускаем и выключаем Linux: Часть 1

      Это вопрос довольно таки важный для любой операционной системы. Мы рассмотрим его в двух статьях, где поговорим о следующих вопросах:
      • Этапы запуска системы 
      • Что такое MBR 
      • Что такое загрузчики, какие они бывают и что позволяют делать 
      • rc сценарии загрузки
      • начальное монтирование файловых систем при загрузке системы
      • Проблемы загрузки
      • Этапы выключения системы 
      • Два способа выключения  системы. 
      В первой статье мы рассмотрим вопросы общетеоретического характера(кратко), и это нужно для того, чтобы читатель знал как загружается система более детально, нежели "я нажал на кнопку и жду появления окошка ввода пароля GNOME/ KDE/XFCE etc" а так же научимся выключать компьютер и поймем как это происходит.


      1. Запускаем Linux:  этапы большого пути)
      Ясно что первый этап он очень сложен нажать на кнопочку power у блока машины:). После этого начинает выполняться BIOS(Basic Input Output System  ) это как бы встроенная ОС компьютера, которая должна его подготовить к работе с настоящей ОС. BIOS производит проверку оборудования (т.н. POST ),активирует жесткий диск, распознает другое базовое   как результат вы слышите различные звуки из спикера. Если все пройдет успешно, то BIOS насчет считывать первые 512 байт с жесткого диска, т.н. MBR(Main Boot Record Главную Загрузочную Запись ). Она должна иметь особую структуру и передать управление загрузчику. Для Linux это либо LILO либо GRUB. Они позволяют  выбрать необходимую операционную систему и ядро Linux для загрузки. Рассматривать в 1 части будем GRUB как наиболее распространенный из загрузчиков, итак что же он позволяет?

      • Выбирать какую операционную систему из установленных загрузить, выбирать необходимую версию ядра 
      • Передавать параметры ядру перед его загрузкой
      • Производить операции по просмотру дисковых разделов и т.д. из командной строки 
      Я думаю что с первым пунктом все ясно, а вот со вторым разберемся.

      1.1 Загрузка ядра и параметры загрузки 
      загрузчик и ядро Linux выполняет много дел. Что ж кратко пробежимся по параметрам строки:
      Возьмем для примера эту:
      root (hd0,0)
      kernel /boot/vmlinuz-2.6.26-2-686
      root =/dev/sda1 ro qeit
      initrd  /boot/initrd.img 2.6.26-2-386
      Первая строчка говорит загрузчику на каком устройстве размещено устройство
      Вторая, где ядро
      Третья куда монтировать.  параметр qeit задает ожидание
      Четвертая показывает, где находится сценарий загрузки.  
      Что ж с этим я думаю понятно
      1.2 От скрипта Init до DE(Desktop Envirement )

        Если загрузка ядра корректна, то ядро начнет инициализацию своих подсистем  и поиск оборудования. Каждое действие ядра сопровождается выводом сообщений и они сохраняются в лог. Если поиск оборудования прошел успешно, то следующий этап это:
      а) Старт оболочки командной строки (обычно bash). Правда это не первый процесс запускаемой системой, родителем всех процессов в системе является скрипт init. Если все пройдет успешно, то вы увидите запрос на авторизацию в системе
      б) Если в системе предустановлена графическая оболочка, то после активации всех систем ядра произойдет запуск X-server это базовая графическая система в *Nix системах 
      И уже, исходя из файлов конфигурации X будет запущена та или иная графическая среда рабочего стола.
      Вот после этого можно считать что загрузка завершена. Итак если обобщить:

      1. Запуск BIOS и самотестирование оборудования
      2. Поиск  MBR и передача управления программе, записанной в MBR
      3. Запуск загрузчика, выбор ядра при необходимости корректировка параметров загрузки 
      4.  Определение оборудования, загрузка необходимых модулей(выгрузка если в течении 10 сек не использованы), запуск сценариев инициализации системы
      5.  Запрос авторизации и после успеха штатный режим работы. 

      2. Выключаем Linux
      Когда система выключается перед ней возникает несколько задач:


      •  Остановка всех процессов,выполняющихся в системе
      • Сброс на диск данных из буферов ввода/вывода
      • Закрытие всех объектов ядра и освобождение памяти
      • Останов аппаратуры 
      • Отключение электропитания через ACPI 
       Важно что при выключении системы будет послан сигнал всем процессам на их выключение. При несохранении данных до выключения они могут быть утеряны. Кроме всего прочего Linux и другие Nix системы применяют отложенную запись на диск, т.е. ядро не сразу сбрасывает данные на диск, а спустя некоторое время. Вот это время они находятся в буферах ввода/вывода. И если система в этот момент внезапно отключится, например вы нажмете на кнопку отключения питания, или отключится электричество, то все данные находящиеся в ОЗУ, в том числе буферы ввода/вывода просто исчезнут и данные будут утрачены.
      Отсюда два вывода:
      1. Всегда выключайте компьютер через средства операционной системы 
      2. Обзаводитесь такими приборами как ИБП (источники бесперебойного питания) они дадут вам время для сохранения данных и корректного завершения работы      
      При некорректном завершении операций ввода/вывода может сложится ситуация полного разрушения файловой системы и это не вина Linux такая ситуация характерна для любой операционной системы. К слову, журналируемые файловые системы типа Ext4/3, Raiser и другие предоставляют инструменты для максимального снижения развития ситуации по описанному сценарию. В штатном режиме работы операционная система в обязательном порядке гарантирует сброс данных диск из буферов(либо при полном их заполнении, либо при выключении).На самом деле то, что применяется такая политика записи данных имеет свои преимущества,  а именно: уменьшение обращений к жесткому диску что повышает скорость работы системы. При выключении системы ядро закрывает открытые файлы, завершает все процессы, потоки, закрывает все сетевые соединения. После этого ядро останавливает различные подсистемы управления оборудованием. Ну и в конце концов ядро на современных машинах может управлять электропитанием и следовательно может программно выключить машину.     
      Как мы можем выключить машину?
      1 способ через графический интерфейс и здесь никаких комментариев не требуется.
      2 способ  через командную строку, так как выключение компьютера это процесс глобальный, то вам потребуются права суперпользователя(root) значит вам придется запустить команду  выключения из под sudo, а сама команда выключения это shutdown. Для этой команды существуют различные ключи и параметры, нас же интересует следующие: -h это указание к останову системы, указать время мы можем либо словесно(например чтобы немедленно выключить машину: sudo shutdown -h now) или в форме указания времени до выключения (sudo shutdown -h +30 это приведет к выключению системы через 30 мин ) или указав точное время, например(shutdown -h 18:30).
      На этом завершим краткое введение в тему старта/останова Linux, а во второй части изучим все эти процессы детальней.