пятница, 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, а во второй части изучим все эти процессы детальней.            
       
                      

        
                       
                    

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

      Система безопасности Linux


      Итак мы уже говорили о том как устанавливать приложения из исходников и пакетов, а теперь самое время поговорить о безопасности Linux. История системы безопасности Linux уходит в те времена когда Билли был всего лишь одним из кодеров IBM, а уж о Балмере вобще никто не знал, за то UNIX правила бал. И главное для ее концепции безопасности было то, что работает она в многопользовательском режиме. Система UNIX обязана обеспечить корректную работу нескольких пользователей в системе. Что мы в данном случае понимаем под корректностью работы:
      а) Изменения произведенные одним пользователем не должны затрагивать другого пользователя в большинстве случаев.
      б)Должна быть предусмотрена легкая система переключения активных пользователей
      в) Должна быть реализована возможность назначения разным процессам, разных прав.
      г) Должна быть реализована надежная система защиты аунтетификационных данных пользователя.
      Ну это конечно грубый список требований. Рассмотрим как все это реализуется в Linux.
      Начнем с процесса аунтентификации и идентификации пользователя. Итак определимся для начала с терминами. Пользователь это тот кто использует систему с определенным уровнем прав, то есть разрешенных действий. Ну например пользователю root можно все и немножечко больше:) А вот обычному пользователю системы можно далеко не все, например изменить системные библиотеки ему не дадут, а вежливо пошлют например фразой acess dined:).Но сама система узнать кто ее включил не может и был придуманы различные механизмы идентификации пользователя. Мы не будем говорить о такой экзотике как биометрия или что нибудь такое, а поговорим про рабоче-крестьянский пароль и логин. Это старая добрая система, используемая практически всюду.
      Итак когда вы вводите пароль, то система проверяет наличие вашего имени в системе, а так же корректность введенного пароля. Но было бы слишком не осмотрительно хранить такую важную информацию как пароль открытым текстом. Что же придумали для решения этой проблемы? Пароли не хранятся в открытом виде и даже не шифруются, вместо этого хранятся их хеши. Что такое хеш? Хеш это некое контрольное значение вычисленное на основе пароля, в нашем случае, при чем по самому значение пароль невосстановим в идеальном случае кроме как подбором.То есть даже если я получу хеш, то мне придется долго сидеть и придумывать различные комбинации разных символов, в надежде что я таки угадаю пароль:) Это можно перепоручить компьютеру тогда процесс ускорится, но все ж не настолько как хотелось бы.Мы можем себя поздравить: Linux умеет надежно защищать наши пароли. Однако есть несколько проблем: если мы этим паролем будем светить везде, то... ну вы поняли). Сейчас есть довольно таки много словарей, где есть миллионы слов даже очень заковыристых, а потому слова даже сложные как пароль не годятся. Клички животных ваших, имена вас и ваших знакомых, друзей, родных то же. Слишком маленькие пароли(не более 5 символов) ломаются к сожалению довольно быстро. С другой стороны не делайте пароли суперсложными, чобы потом сами не помнили. Ну ладненько хватит нам теории перейдем ближе к практике.
      1 фаза общения с системой для вас это старт загрузчика GRUB. Он позволит вам выбрать ту операционную систему, которую вы хотите загрузить сейчас. Вы можете установить пароль на доступ к GRUB, см. здесь.
      2 фаза это запуск оболочки. Оболочка это процессор командной строки, который может принимать от вас текстовые команды и выполнять их. Обычно это bash. Именно через оболочку защитные механизмы системы запрашивают логин/пароль для входа.
      3 фаза Запуск графической оболочки(среды) в современных дистрибутивах обычно все настроено таким образом, что сразу после запуска оболочки(шелла) происходит старт X-сервера(подсистемы графических возможностей UNIX системы), а после этого графической среды рабочего стола например GNOME или KDE.У них есть собственные системы аунтентификации пользователя и именно с ними вы и сталкиваетесь, когда система запрашивает пароль окном следующего вида:
      (картинку)
      4 фаза: работа в системе как обычного пользователя, а в случае выполнения каких то важных для системы действий получения прав root.
        Теперь поговорим о таком понятии как группы  и пользователи в Linux.В Linux пользователь обладает правами на выполнение определенных файлов, доступа к определенным каталогам, а вот те файлы, для которых пользователь не прописан в разрешенных ему будут не доступны. Действует жесткое правило: все что явно не разрешено, то запрещено.
      Для определения кому что можно действуют так называемые ACL Posix списки, где явно прописаны  права для всех пользователей. Права есть такие: чтение, запись и выполнение. Всего есть три категории с точки зрения ACL POSIX: пользователь владелец файла, группа пользователей в которую входит пользователь -владелец файла и остальные. Права на файл можно назначать и в графическом режиме:(контекстное меню файла->свойства->права )

      И в консольном.Вот с последним разберемся подробнее.Но прежде подытожим насчет ACL POSIX общую информацию:

      1. Списки ACL POSIX позволяют назначать различные права разным пользователям на основе групп. Группа это набор пользователей, который для системы безопасности имеют одинаковые права. Система идентифицирует  принадлежность пользователя к той или иной группе при помощи специального параметра GUID. Это особый идентификатор, который хранится вместе с другой информацией об учетной записи и именно по нему подсистема безопасности в ядре узнает а к какой группе пользователей относится данный пользователей. Сам пользователь ядру известен по UID (User ID). Пользователь с UID это root, а называться он может по разному. Важно отметить что любой пользователь входит в группу, если ее не назначает администратор, то система создает группу одноименную с логином пользователя(то есть пользователь с именем exampuser будет по умолчанию входить в группу exampuser )      
      2. Система    ACL POSIX различает: пользователя-владельца, который может менять любые права у файла, вплоть до удаления из системы, группу пользователей куда входит владелец, остальных. Каждой группе может быть назначена своя комбинация прав. 
      3. Права: чтение/запись, выполнение. По поводу последнего права: UNIX система, когда решает нужно ли выполнять файл смотрит отнюдь не на расширение, расширение может быть любым, она смотрит на то выставлен ли у файла бит разрешающий выполнение, если бит выставлен то она его выполнит без лишних вопросов. Поэтому будьте внимательны при даче такого права: во первых если файл например просто текст, то система будет пытаться его выполнить, что может привести к зависанию. И второе : файл может быть вирусом. Не давайте права выполнение тем кому это не надо даже если программа безобидна, то же самое переполнение буфера правильно использованное хакером сделает из безопасной программы крайне опасный таран системы безопасности любой ОС.     
      Теперь рассмотрим как в консоли выставить права для файла . Есть такая команда chmod. Вот при помощи нее такие вопросы и решаются.Для начала создадим файлик Test и напишем туда веселое  echo "Hello Linux!", а на первой строчке #!/bin/bash. Таким образом наш файлик будет таков:

      #!/bin/bash
      echo "Hello Linux!" 

      У меня он хранится в папке /home/gur/python_compitation. Итак первое мы хотим посмотреть права, которые есть:
      сделаем переход в папку:

      cd /home/gur/python_compitation
       ls -l  test
      -rw-r--r-- 1 gur gur 20 2010-08-31 20:28 Test
       
      Допустим мы хотим наделить наш файл правом выполнения Для этого напишем
      chmod +x Test

      Такой командой мы добавили себе право на выполнение этого файла, а если напишем
      chmod user_name +x Test  то тем самым дадим право заданному пользователю.
      Вот какие права есть в Linux:
      r-чтение
      w-запись
      x-выполнение
      такая комбинация как rw означает одновременную комбинацию прав чтение и запись.
      более подробно о правах на файлы можно прочесть здесь
      Рассмотрим теперь вопрос о том какие есть дополнительные средства безопасности в Linux.
      Есть во всех UNIX системах такая вещь как chroot.   Что это такое? Это ни что иное как средство ограничения  для определенных программ. Точнее даже их обмана. Это системный вызов, который меняет для программы корневой каталог. В обычных условиях мы знаем что это ни что иное как / . А сhroot позволяет сказать что для некоторой программой корневой папкой является myroot. Что это значит на практике? На практике это означает что программа даже и знать не будет о тех файлах и папках. которые не находятся внутри подставного корневого каталога. Так должно быть в идеале. На практике в реализации chroot, выявлялись ошибки, которые приводили к тому что программы могли сами обмануть chroot. Чаще всего сам chroot одинокий никому не интересен, он интегрируется в комплекс программ реализующих концепцию Jail(темница ). Это концепция и реализующая политика безопасности позволяет:
      -Запускать программу с измененным корневым каталогом, что позволит создать изолированное окружение  для подопытной программы
      -Наделять теми привилегиями, которые минимально необходимы службе или программе для выполнения
      -Накладывать ограничения на расход ресурсов программой находящейся в Jail(память и процессор)
      -Жестко ограничивать и контролировать сетевую активность приложения
       Правда неплохо? Да, но все же не забывайте, что все же остаются методы вырваться узнику из темницы. Например, если программа под правами root (Суперпользователя), то она может выполнить системный вызов chroot повторно, а в некоторых UNIX-системах ядро может некорректно его обработать... и темница разлетится в вдребезги.
      Еще один важный механизм безопасности Linux это SElinux.Данная система позволяет создавать сложные политики безопасности, которые позволят контролировать доступ к различным системным компонентам со стороны программ. При чем здесь речь идет отнюдь не только о файлах, но и многом другом.
      Последней системой безопасности, которую мы не рассмотрим в этой заметке будут системы актуализации. В чем ее суть? На физической машине имитируется виртуальная при чем все ее компоненты важные для запуска программ. Поэтому практически вы получаете в распоряжение второй компьютер, на который вам нужно установить операционную систему и вы можете работать с программами. При этом чащ всего, если только это неспециально написанный вредный код, ошибки и сбои программ никак не выходят за рамки виртуальных машин. Есть простые пользовательские решения типа Virtual Box, а есть решения, которые могут использовать целые наборы компьютеров балансировать нагрузки на них. Одно из них это XEN.Очень часто именно на нем организуют виртуальные серверы VPS.          
      Ссылки:  
      подсистема Jail
      XEN 
      SELinux
                              
                    

                

      среда, 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 <имя пакета>.
      В следующей части будем учиться сборке из исходников интересных для нас приложений.