среда, 18 августа 2010 г.

устанавливаем PyMedia (библиотеку для работы с мультимедиа данными в Python)


Понадобилось мне провести установку вышеуказанной библиотеки и здесь я предоставляю HOWTO по установке:
Итак по горячим следам:
1) Устанавливаем: dev файлы python 2.6
2) libasound2-dev (это файлы разработчика ALSA, именно они нужны что бы установщик pymedia задетектил ALSA )
3) lame 3.98.4 (переходим в папку с исходниками lame и вводим:


./configure
make
make install

)
При чем лучше из под sudo
4) Устанавливаем faad (я сначала установил faad 2.7 из сорцов: переходим в директорию faad и пишем

./configure --with-mp4v2
make
sudo make install


)Однако после импорта pymedia она сказала не видим мы libfaad.so.2. Пришлось установить deb пакет 2.6 и "импортная" ошибка прошла
5) Теперь из консоли перейдя в папку с pymedia введем: sudo python setup.py install. Он должен показать следующее

OGG : found
VORBIS : found
FAAD : found
MP3LAME : found
VORBISENC : found
ALSA : found

Что ж на вопрос отвечаем буквой y и тут у нас могут начаться ошибки из-за того что GCC 4 не дружит с pymedia. Если так то нам придется сделать следующее:
В файле в строке 31 вводим:

#define HAVE_LRINTF
#include
#define HAVE_LRINTF
#include "libavcodec/dsputil.h"
#include "version.h"

наш #define должен быть до #include "libavcodec/dsputil.h" Это обязательно!
Однако этого шаманизма от пользователя Illusion форума на http://indashpc.org/ недостаточен
Админ того же форума jbors дополнил, что строку #define HAVE_LRINTF надо ввести и в
audio/config.h
Вот тогда сборка и установка должна пройти нормально. И инструкция

>>>from pymedia import *

Должна пройти без ошибок
Ссылки:
1) для системы устанавливаем в консоли sudo apt-get install libasound2-dev
2) Для faad: качаем здесь или
здесь
Исходники 2.7:Берем здесь
3) lame:качаем здесь
4) pymedia: качаем здесь
5) Источник поправок: здесь (по dev пакетам для alsa) и страница обсуждений инсталяции pymedia расположен здесь
6) Заголовочные файлы для python sudo apt-get install python2.6- dev
Впервые я опубликовал это HOWTO: здесь

Заметки о python в народном хозяйстве linuxoида: разбор командной строки

Linux и командная строка это единое целое, командная строка это душа Linux. В ней можно ттворить чудесные вещи  в том числе и программно. Python программист имеет возможность активного взаимодействия с командной строкой Linux. Один пример  мы уже разобрали ранее, а теперь рассмотрим тот случай, когда сам скрипт вызывают из командной строки. Самое важное для нас здесь это разбор того что ввел пользователь. Python для этого предоставляет нам модуль sys и optget. Поэтому Америки я вам не открою, если скажу что начнем мы наш скрипт строчкой:
import sys,optget      
Модуль sys предоставляет нам структуру argv. Первый ее элемент мало интересен, это имя скрипта, а вот дальше пойдет компрамат на юзверя:) Но python этим не ограничивается, в нем есть интересная фича: name option, это и позволяет нам предложить пользователю написать не myprog 1 1 2, myprog --mode 1 --depth 1 --time 2 . A как все  это реализовать на практике?
Смотрим следующий скрипт:

import sys,getopt
def Test ():
    
 options,args=getopt.getopt(sys.argv[1:],' ', ['a=', 'b=', 'c=', 'd='])
 print options
 for option,value in options: 
    if option=='--a':
        print 'a=',value
    elif option=='--b':
        print 'b',value
    elif option=='--c':
        print 'c',value
    elif option=='--d':
        print 'd',value
               
Test()      
Что происходит? Объект getopt возвращает нам аргументы командной строки в виде списка двухэлементных кортежей, где первый элемент имя параметра, а второй его значение. А далее мы проходим циклом for по списку, и в две переменные считываем по два элемента из каждого кортежа, а при помощи оператора if ...elif предпринимаем необходимые действия. В переменную option считывается имя параметра, а в переменную value само значение. А что попадает в переменную args? Там находятся все значения командной строки, которые не имеют своего ключа. Удачи в использовании Python           



  

Установка приложений в Linux: часть 2(записки Windows эмигранта)

Из 1 части мы с вами узнали как устанавливать приложения из пакетов, однако trueUNIX way в ином: сборка программы из ее исходных вот этим мы и займемся. Сначала поясним понятия базовые для всего процесса.
Исходные тексты (Source). Это текстовые файлы и другие,идущие вместе с ним, которые позволят получить рабочую версию программы. 
Бинарная сборка(файл). Тот файл который можно непосредственно запускать 
Компилятор.  Программа преобразующая исходный текст в бинарный файл, но он еще не исполняем 
Линкер. Программа, собирающая из отдельных бинарных модулей программу, в частности именно он пристыковывает к программе функции стандартной библиотеки языка программирования С или любого другого языка    
Стандартная библиотека  Набор функций, который поставляется с компилятором и позволяет решать многие задачи возникающие перед программистом. В случае языка С это так называемая LibC и она идет совместно с системным компилятором Linux: GCC.
Зачем вам понадобится сборка из исходников? Во первых многие авторы распространяют свои творения  в исходниках. Причины такого положения дел могут быть разными: проект активно развивается, исходники часто обновляются, разработчик испытывает трудности в создании пакета(на самом деле создать пакет, учитывающий все зависимости и т.д. не так то и просто ).Есть и еще одна важная деталь, т.к. при компиляции GCC оптимизирует бинарный код под особенности вашего процессора и системы, то сборка из исходников это путь к получению более эффективной программы.
    Как же проводится сборка? Вы загружаете исходники из интернета, либо через SVN. Затем обычно уже в консоли(командная строка) переходите в каталог с исходниками и набираете три заветные команды:
./configure
make
make install
Первая из них подготовит инструменты сборки и настроит согласно требованиям программы
Вторая проведет сборку (компиляцию+линковку)
а третья проведет инсталляцию 
Все эти команды запускают скрипты специальным образом написанные, которые в свою очередь запрашивают действия у различных инструментов системы, формируют командную строку для GCC и т.д. Довольно часто приходится запускать процесс сборки под sudo, поскольку многие программы, особенно представляющие функции для других помещают свои компоненты  в системные папки, которые обычному пользователю недоступны, а доступны только под учетной записью root'а.Поэтому возможно полезно перед сборкой сразу переключится под root'a, введите в командной строке: sudo -i  Можно кстати все три команды объединить и записать так: sudo ./configure&& make&&make install . Конструкция && это как союз И, то есть получается: сначала выполни команду  ./configure, а потом  make. 
Какие возникнут проблемы при сборке из исходников?
1) Исходники могут содержать ошибки. Поэтому если вдруг процесс остановится внимательно смотрите вывод компилятора GCC  и линкера. Особенно там где встречаются слова error
2) Вам придется внимательно следить за тем, чтобы соблюдены все зависимости перед сборкой. К сожалению делать это все придется вручную
3) Установленная программа не будет известна утилите dpkg, которая является основой менеджера пакетов. Одним словом система контроля пакетов что RPM, что deb ничего не будет знать о программе
4) Удалять ее придется в лучшем случае через make uninstall clean или в ручную, не все программы содержат деинсталятор      
Внимательно читайте документацию к программе! Особенно файл README. Обычно там описана вся процедура сборки и необходимые зависимости.  
        

среда, 11 августа 2010 г.

Установка приложений в Linux: часть 1(записки Windows эмигранта)

Когда автор еще считал верхом поэзии невнятные звуки агу-агу на свет появилась Linux и была она младенцем с большим потенциалом, но которого надо было учить всему и вся, и собирать по кусочкам. Linux выросла из пеленок и теперь сама в некоторых странах знакомит маленьких с миром информатики(проект Edubuntu) . Одним из самых сложных процессов в младенчестве Linux была установка программ. А какая же ОСь нужна без программ? Вобщем-то никакая! Вот и поговорим мы о том, что было есть и будет в этой важной сфере любой операционной системы.
Начиналось все с сурового пути самоотречения от всех удобств и прямой сборки программ из исходников. Такой путь самурая вел к полному  контролю над  системой и собой:) Но время самураев прошло и Linux стала поворачиваться лицом и к простым смертным. И появились системы deb и rpm.
Основная суть пакетной системы в том, что deb и rpm пакет, содержит все файлы, которые нужны программе и может определить зависимости, которые необходимо соблюсти для установки приложения. Фактически deb и rpm пакеты это особые типы архивов. Еще одним важным свойством таких систем является, что они ведут базу данных установленных пакетов в системе и их зависимостей. А что такое зависимости? Все просто: зависимости это компоненты системы и сторонние компоненты, которые нужны для функционирования программы, которую вы устанавливаете.  Пакет содержит список зависимостей для программы и поэтому вас проинформирует установщик о неустановленных зависимостях. К тому же пакет может содержать в себе скрипты, проверяющие например какие либо параметры системы.Таким образом deb пакет представляет собой очень неплохой аналог различного рода установщиков из мира Windows.
Важно отметить что есть две основные системы пакетной установки: deb и rpm совпадающие в своем названии с форматами пакетов. deb система применяется во всех дистрибутивах основанных на Linux Debian(например Ubuntu), а rpm в системах базирующихся на Linux Red Hat (например Linux Fedore Core ). Между собой форматы не совместимы. Но в принципе предоставляют равные возможности. Рассмотрим установки на основе deb системы.
Можно скачать сам deb пакет и два раза по нему кликнуть, а если программа распространенная, то скорее всего она содержится в репозиториях вашего дистрибутива. Репозиторий это хранилище пакетов и исходниных текстов программ, которые позволяют устанавливать приложения по сети. С репозиториями (жаргонная "репа")  работает в deb системах приложение apt. При использовании Ubuntu вы можете использовать Центр приложений
Приложения->Центр приложений
или из командной строки
sudo apt-get install <имя пакета> . Вам придется ввести свой пароль, так как apt-get изменяет системные компоненты. Например установим читалку DjView ридер.
вводим в консоли sudo apt-get install djview, свой пароль и ждем когда все сделают за нас:) Еще нас попросят подтвердить скачивание пакетов.
Удалить пакет можно либо через Центр приложений, либо через команду sudo apt-get remove <имя пакета>.
В следующей части будем учиться сборке из исходников интересных для нас приложений.
 
                                         

четверг, 5 августа 2010 г.

СПО и школы (некоторые размышления)

То что наши школы не являют собой образец богатства всем известно. Поэтому не мудрено что внедрение свободного программного обеспечения (СПО) является серьезным прогрессом и экономией. Естественно здесь должна идти речь и о Linux. Основная претензия к Linux в школах это трудность ее освоения. Ну конечно если мы берем что нибудь типа GENTOO, то да. Это дистрибутив с "исходниковой" ориентацией и его трудно порекомендовать начинающим. Но Linux Mint или Linux Ubuntu вполне дружелюбны к пользователю, если конечно он будет все же немного осторожен в своих действиях. Очень часто можно слышать тезис о некой сложности Linux для повседневной жизни. Ну давайте посмотрим так ли уж страшен черт как его малюют:
1) Процесс установки. В большинстве крупных дистрибутивов предусмотрены продуманные средства управления установкой. И потому если вы хоть раз устанавливали Windows и прочтете инструкции по установке Linux то это все будет довольно просто. Тем более например Ubuntu  имеет режим, который позволяет автоматически ее инсталлировать для совместного проживания с Windows. При чем все что потребуется от пользователя нажать на кнопку а перед этим нажать переключатель, да это супер сложно! 
2) Установка приложений. Ну начнем с того  что в принципе в Linux имеются довольно много крупных программ, которые поддерживаются и  разработчиками дистрибутивов и сообществом. В Linux давно разработаны две системы установки rpm и deb. Установка из таких пакетов даже проще чем из Windows инсталяторов.А разработка Центра приложений Ubuntu вобще облегчила задачу установки ПО до безобразия:) Да и из командной строки установить не сложнее: sudo apt-get install <название приложения>. А вот со сборкой приложений из исходников школьный учитель скорее всего не столкнется.Хотя и этот пункт не смотря на большие трудности документирован весьма подробно от HOWTO документов до глав в книгах для чайников Linux и страниц man. Хотя во многом для школьного компьютера  устанавливать ничего не придется: GNOME предлагает и Open Office готовым к работе, и аудио видео редакторы, некоторые средства разработки.Поэтому и этот пункт не может быть серьезным контрвозражением 
3)Железо. Linux не стоит на месте и уже во многом может заниматься автоопределением  железа. Наиболее дальновидные разработчики такие как nVidia предоставляют и пропиетарные  драйверы для Linux. Само сообщество постоянно работает над расширением спектра поддерживаемой аппаратуры. Если компьютер имеет стандартную комплектацию то о драйверах под linux вы и не вспомните. 
4) Несоответсвие образовательным стандартам. Это для меня вообще тайна за семью печатями:) Несоответсвие в чем?
а) Локализации. Встретить не русифицированные места в системе можно, но все меню и инструменты            
управления системой, офисные приложения давно переведены на русский. Полно русскоязычных ресурсов поддержки. 
б) ПО. Честно говоря и в самом деле, если надо ребенок и сам научиться писать текстовые документы, работать с картинками, шастать по инету. Все же это уже к информатике как науке мало имеет отношение. Конечно для некоторых мест нашей страны где компьютер в каждом доме у ребенка не является нормой такие занятия необходимы, но они не должны занимать 90% времени. Но какая разница ребенку это изучающему на чем он будет учиться: на Open Office,Koffice или MS Office. Задача школы в данном случае дать ребенку общий навык. А если школа его привязывает к конкретному продукту какая от нее тогда польза? 
в) Обучающее и тестирующее ПО. М-да казалось бы проблема: здесь правит бал Windows.Но! Во первых что то я не заметил чтобы в школах повально применялось компьютерное программное обеспечение в обучении, а потом Linux это платформа для кучи программного обеспечения в целях обучения от астрономической Celestia до редакторов и визуализаторов хим формул и программ геометрического профиля. Да руссифицированность этих программ практически нулевая, но что мешает государству профинансировать проект по переводу выбранного обучающего ПО. Это же ни чуть не дороже поддержки лицензионного софта, а то и дешевле. Потом и само ссообщество OpenSource поможет. Всякого рода тестируюшее ПО: ну уровень современного ПО без веб-технологий таков, что и первокурсник немного знающий язык программирования и принцип перетащил и отпустил его напишет. RAD системы под linux то же имеются хотя бы тот же QT. Так что для нормального программиста шока и ломки мировоззрения не наступит. 
г) Учителя. Во первых Linux как мы уже выяснили хоть и другой, но чтобы пользоваться им уровень гуру от вас не требуется. А привыкнуть кновому расположению кнопок и немного почитать книжечку, да это очень сложно.Ну а птом у нас же вроде как всякого рода институты Открытого образования имеются, а там кафедры информатики с курсами для учителей.    
д) Языки программирования. Pascal  в Linux есть вам тут и Lazarus и его основа FPC. Visual Basic в Линукс нет, но есть другие диалекты basic. Ну уж про С и С++ и говорить не приходится. 
То есть в чем не соответствие неким мифическим стандартам неясно.  
Так в чем проблема на самом деле? Как мне кажется их несколько:
1) Министерство образования выстраивало схемы закупки, многие фирмы на этом уже прегрелись, а тут такой облом с этим СПО. 
2) Информатика в школе сейчас конкурент серии книг для чайника. Хотя изначально информатика это наука о ЭВМ, а не о том как нажимать на кнопочки.Современный школьник по выходе из школы не знает ни элементарных основ алгоритмики. Алгоритм "пузырька"  для многих студентов первокурсников тайна за семью печатями, понятие о сложности алгоритма еще большая тайна. Само составление алгоритмов у школьников то же явно не в лучшем состоянии, хотя в принципе это во многом сродни решению задач по математике и помогло в лучшем понимании этого. Знание об устройстве компьютера у учащегося то же весьма смутные, уж не говоря о структуре ОС. Образование должно дать человеку возможность осознанного выбора, это заявляется как одна из целей. Однако что по факту: тебя привязывают к одной платформе,учат по принципу обезьяны. Спросите современного школьника что такое OpeenSource,FreeBSD,Linux. Боюсь что он сделает жуткие глаза и ничего не ответит. Так о каком выборе можно говорить?                       
3) Привычка, неграмотность и боязнь перемен. Что ж конечно всегда привычней жить как тебе хочется и идти по накатанному, но мир информатики не таков. Чиновники не слишком грамотны и забот у них очень много, чтоб еще с Linux возиться, ведь он до сих пор живет одной командной строкой, а про GNOME и KDE мы не слышали.      
Фактически внедрению СПО мешают лишь косность, финансовые интересы и схемы и в принципе неверная трактовка назначения курса информатики.