Архив за Март, 2008

Проверяю постинг из гнома ;)

Сабж. Нашел такую штуку - gnome-blog-poster.

ЗЫ. Результат: работает, но заголовок вставляет прямо в тело сообщения вместо соответствующего поля. Вобщем, пока — недоделка. Авось когда-нить заработает нормально.

Читать далее

Комментариев (8)


  • Рыбки: день двадцать девятый
  • QIP и ISQ
  • Вот табачёк бы прикупить
  • Шины нужно менять во время
  • Контент без проблем
  • Рыбки: день двадцать девятый

    Обнаружил в аквариуме малька, пока не понял от какой именно рыбки, буду ждать пока подрастет :)

    Читать далее

    Комментариев (5)


  • Кто бы знал
  • Вот вам креативная бизнес идея
  • Это интересно
  • Тупые анекдоты
  • Почти двадцать лет назад…
  • Воруют

    Комментариев (5)


  • Грибоедов в Симферополе
  • Креатив от Google!
  • Ко дню рождения Древних Баварских Иллюминатов…
  • Новое начинание - новый тематический блог
  • Утро пятницы
  • Завтрак в четверг

    По причине, которую мне не раскрывают, завтракал сегодня я один. И пробежку тоже делал один. Зато каша удалась. Для начала я ее приварил еще вчера - то есть залили кипятком, довел до кипения - и оставил томиться на ночь, а утром добавил еще воды и варил на крошечном огне еще сорок минут.

    Жаль не сохранилась вчерашняя фотография вечернего салата я как раз хотел сказать, что если в салат добавить свежего лука перьями – то получается очень летний вкус. Все равно никто кроме меня не смог оценить его вкус.

    Posted by Picasa
    Читать далее

    Комментариев (5)


  • II - Воскресенье
  • II - Завтрак в субботу
  • Завтрак
  • Утро пятницы
  • Пятница - ужин
  • И у меня теперь есть тайное место желаний

    Вот, открыл для себя сегодня сервис WishList.ru, место где сбываются мечты и желания.

    Чрезвычайно полезный ресурс. Причем всем сторонам, и те кто ждет подарки, и те кто хочет подарить и попасть в точку :) А то же выбор подарка это каждый раз муки и загруз мозга, а тут все просто, вы брал из списка че по карману и подарил :) и всем приятно!

    Если у кого есть, пишите, буду отслеживать, чего вам полезного подарить :))

    Свой список вставил в блог, вы всегда будите в курсе моих потребностей :)

    My Wishlist - dr2

    Читать далее

    Комментариев (5)


  • Вот такие кондишины у нас теперь
  • Огранизовать хороший праздник теперь не проблема
  • Искусственный камень теперь круче чем дерево
  • В чем прелесть эмердженси маркета?
  • Полезная информация никому не помешает
  • Аутентификация: pam_usb

    Это уж двухлетней давности моя статья, сейчас с удивлением обнаружил, что в блоге ее не опубликовал. Исправляюсь ;)

    Наткнулся я тут на весьма интересную штуку - pam_usb называется. Коротко говоря, она позволяет производить аутентификацию пользователей в системе не по паролю, а по криптографическому ключу на флэшке.

    Во-первых, кто такой PAM?

    PAM - это Plugable Authentithication Modules, т.е. подключаемые модули аутентификации. Идея состоит в том, что любая софтина, которой нужно аутентифицировать пользователя (напр.: login, passwd, sudo...) обращается к сервису PAM. Тот, в свою очередь, глядя в конфиг, по очереди обращается к указанным модулям, спрашивая у них - пускать или не пускать? Если напротив модуля стоит required, то "признание" этим модулем пользователя является условием необходимым, но не достаточным. Если стоит sufficient - значит, признания даже только одним этим модулем достаточно. Там еще много настроек указать можно...

    Т.е. теоретически, ничего не стоит, написав дополнителный модуль для PAM, настроить систему так, чтобы она вместо пароля спрашивала сетчатку глаза там или отпечатки пальцев...

    PAM_USB

    Это, как вы уже поняли, один из таких модулей. При попытке логина он ищет на указанном в конфиге устройстве файл вида /.auth/user.host, в хомяке пользователя - файл ~/.auth/id_pub, и проверяет их соответствие по алгоритму DSA.

    Почему-то pam_usb нету в Debian, хотя распространяется он по GPL, и исходник весит 27Kb. Взять его можно на pamusb.org, жалко только, сайт в состоянии редизайна, и информации там по минимуму...

    И еще: вообще-то, этому модулю пофиг, что вы ему укажете в качестве дивайса. С тем же успехом это может быть дискета или CD.

    А нафига оно?

    А вы еще не поняли? Пароль-то придумать ведь надо еще! Придумаешь простой - просто подобрать, придумаешь сложный - просто забыть. Про пароли, написанные карандашом на мониторе, я молчу. А носить всегда в кармане флэшку и выдергивать ее, уходя - все-таки гораздо легче, чем помнить пароль типа $KHYhguh(7438!

    Как это сделать?

    Итак, предположим, вы скачали и поставили пакет pam_usb. Что дальше делать?

    Во-первых, надо сгенерировать ключи для нужных юзеров. Монтируем флэшку, скажем, в /mnt/flash, и говорим

    # usbadm keygen /mnt/flash username 2048,

    где username - это имя интересующего нас юзера, а 2048 - длина ключа. Повторяем это для всех нужных юзеров и отмонтируем флэшку.

    Теперь надо настроить сам PAM. В директории /etc/pam.d лежат файлы, соответствующие программам, которые используют PAM: login, xdm, ... У меня в Debian'е все они включают (директивой @include) файл common-auth. В случае другого дистра, вероятно, придется поискать, куда именно вставлять интересующие нас строчки:

    а) если мы хотим, чтобы система в случае вставленной флэшки пускала без пароля, а без флэшки спрашивала пароль - должны быть строки

    auth sufficient pam_usb.so check_device=-1 check_if_mounted=-1 force_device=/dev/transcend fs=vfat

    auth required pam_unix.so nullok_secure

    (где /dev/transcend - дивайс флэшки, а vfat - тип файловой системы на ней).

    б) если мы хотим, чтобы в систему можно было зайти только по флэшке, зато без пароля:

    auth required pam_usb.so check_device=-1 check_if_mounted=-1 force_device=/dev/transcend fs=vfat

    в) наконец, если мы хотим, чтобы можно было зайти только при вставленной флэшке, и спрашивался пароль:

    auth required pam_usb.so check_device=-1 check_if_mounted=-1 force_device=/dev/transcend fs=vfat

    auth required pam_unix.so nullok_secure

    Например, у меня сейчас в файле common-auth записаны строки из варианта а).

    Читать далее

    Комментариев (6)


  • Доклад по Python: About
  • “99 франков”: рекламная тусовка, ТМ “М?анон”, наркотики, черный юмор - все это смотрим в кино
  • Вот такие кондишины у нас теперь
  • Доклад по Python: часть III
  • Дегустируем виски
  • Доклад по Python: часть II

    3. Объекты.

    Питон - это объектно-ориентированный язык. Среди всего прочего, это означает: всё есть объект.
    В C++, на примере которого (к сожалению) обычно обучают объектно-ориентированному программированию, объектами являются только экземпляры классов. Числа, например, объектами не являются.
    В Java значения атомарных типов тоже являются объектами, но несколько искуственно: для них создаются так называемые boxed значения, то есть для каждого (например) числа создается экземпляр спецциального класса, содержащий это число.
    В Питоне же всё является объектом. Например: экземпляры классов, собственно классы, типы, атомарные объекты (числа и строки), а также функци. Пример с числом:

    >>> a = 1
    >>> a.__str__() # этот метод дает строковое представление объекта
    '1'

    Функции принимают в качестве аргументов объекты и возвращают объекты. Например, функция может принимать функцию в качестве аргумента и возвращать класс, или принимать строку и возвращать функцию.

    Рассмотрим помаленьку все традиционные принципы ООП.

    4. Инкапсуляция.

    Инкапсуляция подразумевает: алгоритмы работы с данными хранятся вместе с данными. Для атомарных значений мы это уже видели в предыдущем разделе (a.__str__()). Для экземпляров пользовательских классов это реализуется образом, очень похожим на C++ или Java:

    class A(object): # object - класс, стоящий в вершине иерархии наследованияx = 0y = 0
    
    def move(self,x,y):  self.x = x  self.y = y
    
    a = A()a.move(2,3)

    Здесь можно увидеть, что в Питоне указатель на экземпляр класса передается в методы явным образом, как первый аргумент (из стандарта С++ известно, что там это реализовано так же, только этот первый аргумент явно не выписывается). Здесь видно следование первому принципу философии Питона: явное лучше неявного.

    Главное в инкапсуляции, как мы увидим позже - не надо путать инкапсуляцию и сокрытие данных.

    5. Наследование.

    Наследование подразумевает возможность создания классов объектов, ведущих себя почти также, как "родительский" класс, но "немного по-другому". В простейшем случае реализация наследования в Питоне похожа на C++:

    class A(object):x = 0
    
    class B(A):y = 1

    Возможно и множественное наследование: class A(B,C,D):...

    Типичная проблема, возникающая при проектировании в стиле ООП, состоит в следующем. Объект некоторого типа (например, Сотрудник) требуется передавать в качестве аргумента в различные функции. Разным функциям нужны разные свойства и методы этого объекта, причем набор свойств и методов объекта, которые нужны каждой функции, фиксирован. При этом хотелось бы сделать все эти функции полиморфными, то есть способными принимать объекты разных типов.

    Эта проблема решается различными способами. В С++ для этого используется множественное наследование. В Java - интерфейсы. В Ruby - mix-ins (примеси).

    В Питоне используется концепция, называемая Duck Typing: «Если ЭТО ходит, как утка, и крякает, как утка - значит, это утка». То есть, если у объекта есть все нужные функции свойства и методы, то он подходит в качестве аргумента. Например, в функцию

    def f(x):return x.get_value()

    можно передавать объект любого типа, лишь бы у него был метод get_value().

    Еще одна типичная проблема, возникающая в связи с множественным наследованием - не всегда очевидно, в каком порядке будут просматриваться родительские классы в поисках нужного свойства или метода. В Питоне для упрощения этой проблемы у каждого класса есть свойство __mro__ (method resolution order):

    >>> class A(object): pass
    ...
    >>> class B(object):
    ... x = 0
    ...
    >>> class C(A,B):
    ... z = 3
    ...
    >>> C.__mro__
    (<class 'C'>, <class 'A'>, <class 'B'>, <type 'object'>)

    6. Полиморфизм.

    Полиморфизм - это способность функции работать с аргументами разных типов.
    В C++ и Java полиморфизм тесно связан с наследованием. Например, в C++, если объявлено, что функция f принимает экземпляр класса A, то она может принимать экземпляр любого класса, унаследованного от A. В Java это поведение расширено: за счет интерфейсов (interfaces) есть возможность передавать в функцию экземпляры классов, не связанных "генетически" (но реализующих один интерфейс).

    В Питоне полиморфизм реализован за счет Duck Typing: любая функция может принимать объекты любого типа, но если она попытается использовать свойства, которых у данного объекта нет, возникнет исключение (exception) (функция может перехватить его в конструкции try...except и сделать в этом случае что-то другое). За счет этого, например, функция, работающая с файлами, может принимать в качестве аргумента имя файла или дескриптор открытого файла - и действовать по обстоятельствам.

    Таким образом, в Питоне (как и было задумано создателями парадигмы ООП) полиморфизм и наследование - совершенно ортогональные принципы.

    7. Интроспекция.

    Про этот принцип регулярно забывают, когда рассказывают об ООП на примере С++, а между тем это один из основополагающих принципов.

    Заключается он в том, что каждый объект может (во время исполнения) получить информацию об интерфейсах и свойствах, предоставляемых любым другим объектом. Например, в разделе о типизации мы видели, как можно получать информацию о типе переменной во время исполнения.

    У каждого объекта есть некоторое количество атрибутов. Атрибуты, имена которых, начинаются с подчеркивания, считаются приватными (private), хотя это и не влияет на область видимости - это только соглашение. "Более приватными" являются атрибуты, имена которых начинаются с двух подчеркиваний - снаружи они винды только как __имя-объекта__имя-атрибута__. Атрибуты, начинающиеся с двух подчеркиваний и заканчивающиеся двумя подчеркиваниями, имеют специальный смысл.

    Список всех атрибутов любого объекта можно получить с помощью встроенной функции dir:

    >>> a = 1
    >>> dir(a)
    ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']

    Объект, имеющий атрибут __call__, можно вызывать как функцию (собственно, функции в Питоне отличаются от остальных объектов только наличием этого атрибута). Для проверки, можно ли использовать объект как функцию, используется стандартная функция callable(f). Таким образом, методы объекта - это атрибуты, которые можно вызывать.

    У функций и классов есть атрибут __doc__, содержащий так называемый docstring - строку документации. При описании функции она пишется на отдельной строке после def, при описании класса - после class. Стандартная функция help() выдает информацию о любом объекте.

    Атрибут __name__ любого объекта содержит его имя. У экземпляров классов атрибут __class__ содержит ссылку на класс этого объекта.

    Стандартная функция type() возвращает тип объекта (тип - это тоже объект).

    С помощью функции isinstance(obj,cls) можно выяснить, является ли объект экземпляром данного класса (или одного из дочерних классов). А функция issubclass(cls1,cls2) выясняет, является ли cls1 потомком cls2.

    Модуль inspect, входящий в стандартную поставку Питона, содержит некоторые дополнительные возможности интроспекции. В частности, функция inspect.getargspec(func) сообщает, сколько и каких аргументов ожидает получить функция.

    8. Динамизм.

    Этот принцип не был сформулирован как один из основных для ООП, однако референсная реализация ООП - Smalltalk - этим свойством обладает.

    Речь идет о том, что свойства объекта (включая даже его тип) могут изменяться во время исполнения. Пример:

    >>> class A(object):
    ... pass

    >>> a = A()
    >>> a.x = 25 # создаем новый атрибут объекта
    >>> b = A() # другой экземпляр того же класса
    >>> print b.x # вызовет исключение: у объекта b нет атрибута x
    >>> b.y = 30 # создаем другой атрибут
    >>> dir(a)
    ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'x']
    >>> dir(b)
    ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 'y']

    Можно создавать "на ходу" даже методы класса:

    >>> A.method = lambda self,s: "<%s %s>" % (s,self.x)
    >>> c = A()
    >>> c.x = 25
    >>> c.method("Text")
    '<Text 25>'

    Читать далее

    Комментариев (5)


  • Доклад по Python: часть III
  • Доклад по Python: About
  • Доклад по Python: часть I
  • “99 франков”: рекламная тусовка, ТМ “М?анон”, наркотики, черный юмор - все это смотрим в кино
  • Кто бы знал
  • Дегустируем виски

    Решил делиться своими впечатлениями от продегустрированных мной и моими друзьями виски.

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

    Максимальный балл в моей оценочной шкале: 5.

    LAUDER`S

    Scotch Whisky.
    Хороший шотландский блендовый виски из Глазго.
    Обладает мягким вкусом, легко пьется.
    Приятный золотисто медовый цвет.
    Был куплен в Финляндии во время рождественского отдыха в 2008 году.
    Оценка: 4+

    Jack Daniels

    Хороший американский виски из Теннесси.
    Легко пьется, обладает специфическим послевкусием, но это не портит общее впечатление.
    Пожалуй, единственная на данный момент торговая марка американского виски, которая мне нравится.
    Оценка: 4.

    Подробнее об этой теме на новом тематическом блоге "Мой бар", посвященному домашним мини-барам, выбору алкоголя и отзывам после дегустаций.


    Читать далее

    Комментариев (5)


  • Виски: Tullamore Dew
  • Новое начинание - новый тематический блог
  • Доклад по Python: About
  • “99 франков”: рекламная тусовка, ТМ “М?анон”, наркотики, черный юмор - все это смотрим в кино
  • II - Воскресенье
  • Виски: Tullamore Dew

    8 марта мной было опробовано 2 сорта купажированого виски.
    Первый – это на данный момент самый любимый мой виски - Tullamore Dew (Ирландия) о котором я и расскажу подробнее.

    Tullamore Dew («Талламорская роса») – ирландский купажированный виски.

    На мой взгляд – лучший среди ирландцев.

    Цвет травяного настоя.

    Вкус – мягкий сладковатый с сливочными тонами так присущими ирландским сливочно-кремовым ликерам. Несколько более резкий (наверное, из-за большого насыщения «тяжелыми» эфирными маслами) по сравнению с шотландцами, но очень интересный.

    Оценка, на данный момент, 5.

    Очень понравилась следующая оценка эффекта от этого виски:
    «Существенного подъема творческих потенций не зафиксировано, Tullamore Dew обладает скорее расслабляющим и раскрепощающим действием. При поддержке этого сорта значительно облегчается выполнение разного рода рутинной работы. Мы бы рекомендовали его всем тем, чья работа пусть и однообразна, но требует внимания и способности решать нестандартные проблемы».

    А вот так, что пишут продавцы данного виски:
    "Золотой ирландский ячмень и кристально чистая вода рождают легендарный ирландский виски Tullamore Dew. Этот виски характеризуется интенсивным букетом, в котором проявляются нежные ароматы различных сортов ячменного виски, проращенного ячменя, кукурузы и пшеницы. Секрет исключительной мягкости ирландского виски Tullamore Dew заключается в искусстве тройной дистилляции".

    Второй – «Chivas Regal» (12 лет), Шотландия.
    О нем в другой раз. И уже на новом тематическом блоге "Мой бар", посвященному домашним мини-барам, выбору алкоголя и отзывам после дегустаций.

    Читать далее

    Комментариев (4)


  • Новое начинание - новый тематический блог
  • Дегустируем виски
  • II - Воскресенье
  • II - Завтрак в субботу
  • Завтрак
  • Логика толпы


    В первую половину дня мы посвятили фиксации заработанного. И, словно отрабатывая вчерашний сценарий в Америке, капитально присели, откатившись на исходные позиции. Если бы у нашего рынка была логика... если бы она была, можно было бы предположить, что скоро должно начаться возвратное движение. Благо сегодняшний день беден на новости, и лишь бенефис Morgan Stenley может нагнать тучи на небосклон.

    Читать далее

    Комментариев (5)


  • Завтрак
  • Тупой ли яша?
  • Пятница - ужин
  • II - Воскресенье
  • Страницы 4 из 7«1234567»