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