Автор, Nikolai Gishkevich, отзовись. :)

Июль 7, 2008 от masteddev

lazy initialization, python.

Июнь 11, 2008 от masteddev

Наверное все знают зачем эта ленивая инициализация нужна и как, в общем случае, реализуется.
Для тех кто не знает, ниже я попытался, как мог, объяснить как оно работает. А еще ниже, привел пример кода декоратора, который немного упрощает реализацию «ленивой» инициализации в программах на питоне.

Прочтите эту запись до конца »

Немного о __doc__ и декораторах.

Сентябрь 5, 2007 от masteddev

Недавно появилась потребность документировать декораторы… казалось бы ну и что тут такого? Бери и в коде документируй.
Но не все так просто, понадобилось документировать декораторы создаваемые уже на этапе выполнения, следовательно и документировать их нужно было на этом этапе.
Прочтите эту запись до конца »

vpn-сервер за NAT

Июнь 13, 2007 от masteddev

Задча ниже.
Дано:
Есть сеть за NAT’ом, наша сетка, в которой мы имеем возможность что-то сделать. (

locale_home_network)
Есть сеть на другой стороне ната, там мы, практически, ни чего сделать не можем. (remote_home_network).
Из locale_home_network в remote_home_network можно ходить только через нат, в обратном направлении вообще ни как.
Сеть locale_home_network имеет доступ еще к одной сети(other_network), к которой пользователи remote_home_network
доступа не имеют, но очень хотят.

Нужно:
Дать доступ к other_network пользователям из remote_home_network

Вот вроде так.)
«Белые решения», типа реального адреса для vpn-сервера и т.д., не подходят)

Ниже то, что я уже придумал.
Прочтите эту запись до конца »

Сериализация объектов и twisted.spread.pb

Июнь 9, 2007 от masteddev

В принципе там всё просто и в рамках документации, пока объекты примерно таких классов используются:


class basicObject(object):
    def __init__(self):
        print "A bugogoa"

Всё становится гораздо сложнее, когда у нас в объекте появляется ссылка на другой объект, например:


class extendedObject(object):
    def __init__(self):
        self.basicObject = basicObject()

Тут мы на приеме объекта получим InsecureJelly, я примерно догадываюсь почему, но связно объяснить сейчас не могу, может кто расскажет?
В общем встал вопрос, а что делать?
Встал ответ: а хрен его знает.
Я сел. Думать.
Хорошенько подумав решил, что нужно сериализовать self.basicObject руками и слать его уже упакованным в строку, чтоб нидаибались), родилось вот это:


from StringIO import StringIO
import pickle, zlib

class extendedObject(object):
    def setBasicObject(self, basicObject):
        s_basicObject = StringIO()
        pickle.dump(basicObject, s_basicObject)
        s_basicObject.flush()
        self.basicObject = zlib.compress(
                                s_basicObject.getvalue())

zlib.compress здесь для того, чтобы у нас StringIO объекта не оставалось, zlib.compress возвращает сжатую строку.

Ну вот вроде и всё, я не знаю, на сколько такое решение правильное и безопасное, сдается мне, что есть и более прямые пути, просто я о них еще не знаю)

Как только вкурю, как это всё работает «изнутри», то отпишусь.

websvn+utf8

Июнь 7, 2007 от masteddev

Ни как не получилось заставить нормально работать websvn с utf8.
Пришлось сделать quick&dirty патчик, он отключает кеширование логов, проблемы с кодировками именно на этапе кеширования возникают.
diff патча можно взять тут.
После установки необходимо добавить в конфиг строку:
$config->myLocale=’<вашалокаль>’.
например $config->myLocale=’ru_RU.UTF-8′ в моём случае.

конфиг клиента mpd

Март 25, 2007 от masteddev

Давно валяется этот файлик, кину сюда, чтоб не потерять Прочтите эту запись до конца »

void* как указатель на функцию, в ANSI C

Январь 9, 2007 от masteddev

Вчера узнал, что ANSI C не разрешает приводить void* к указателю на функцию, даже явно, например код:


void *(*screngine_init)(void);
screngine_init = dlsym(screngine_lib, “screngine_init”);
(*screngine_call)(void);

будет не корректным.
Существует два варианта, как справиться с этой задачей:

  1. Использовать функцию dlfunc заместо dlsym.
  2. Использовать union такого вида: union { void *ptr; void (*call)(void); }

Прочтите эту запись до конца »

sysadnotes I

Январь 2, 2007 от masteddev

активация рута в postgresql:
#createuser -P -U pgsql root
шутдаун ноды нетграфа:
#ngctl shutdown ng0