<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Just another life hacker...</title>
	<atom:link href="http://programmizm.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://programmizm.wordpress.com</link>
	<description></description>
	<lastBuildDate>Mon, 07 Jul 2008 18:55:36 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='programmizm.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Just another life hacker...</title>
		<link>http://programmizm.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://programmizm.wordpress.com/osd.xml" title="Just another life hacker..." />
	<atom:link rel='hub' href='http://programmizm.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Автор, Nikolai Gishkevich, отзовись. :)</title>
		<link>http://programmizm.wordpress.com/2008/07/07/%d0%b0%d0%b2%d1%82%d0%be%d1%80-nikolai-gishkevich-%d0%be%d1%82%d0%b7%d0%be%d0%b2%d0%b8%d1%81%d1%8c/</link>
		<comments>http://programmizm.wordpress.com/2008/07/07/%d0%b0%d0%b2%d1%82%d0%be%d1%80-nikolai-gishkevich-%d0%be%d1%82%d0%b7%d0%be%d0%b2%d0%b8%d1%81%d1%8c/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 18:55:36 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/?p=24</guid>
		<description><![CDATA[Nikolai Gishkevich, который писал про хибернейт и статьи которого попали в фид планеты, этот пост вам. Фид битый :) не могу прочитать статьи, а очень хочется. Почините фид и ссылки на статью, очень хочется почитать. :)<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=24&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span class="entry-author-name">Nikolai Gishkevich, который писал про хибернейт и статьи которого попали в фид планеты, этот пост вам. Фид битый :) не могу прочитать статьи, а очень хочется. Почините фид и ссылки на статью, очень хочется почитать. :)<br />
</span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/24/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/24/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/24/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/24/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/24/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=24&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2008/07/07/%d0%b0%d0%b2%d1%82%d0%be%d1%80-nikolai-gishkevich-%d0%be%d1%82%d0%b7%d0%be%d0%b2%d0%b8%d1%81%d1%8c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>lazy initialization, python.</title>
		<link>http://programmizm.wordpress.com/2008/06/11/lazy-initialization-python/</link>
		<comments>http://programmizm.wordpress.com/2008/06/11/lazy-initialization-python/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 13:03:48 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[decorators]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/?p=13</guid>
		<description><![CDATA[Наверное все знают зачем эта ленивая инициализация нужна и как, в общем случае, реализуется. Для тех кто не знает, ниже я попытался, как мог, объяснить как оно работает. А еще ниже, привел пример кода декоратора, который немного упрощает реализацию &#171;ленивой&#187; инициализации в программах на питоне. Кратко о &#171;ленивой&#187; инициализации. Предположим, что у нас имеется некий [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=13&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Наверное все знают зачем эта ленивая инициализация нужна и как, в общем случае, реализуется.<br />
Для тех кто не знает, ниже я попытался, как мог, объяснить как оно работает. А еще ниже, привел пример кода декоратора, который немного упрощает реализацию &laquo;ленивой&raquo; инициализации в программах на питоне.</p>
<p><span id="more-13"></span></p>
<p><strong>Кратко о &laquo;ленивой&raquo; инициализации.</strong><br />
Предположим, что у нас имеется некий объект класса A, в процессе работы этому объекту, для его внутренних нужд, может понадобится экземпляр класса VeryBigObject, а может и не понадобится, зависит от условий и событий происходящих во время выполнения программы. Мы знаем о том, что создание и инициализация объекта VeryBigObject займет большое время, а вероятность того, что он понадобится не очень велика, поэтому вместо инициализации экземпляр VeryBigObject во время инициализации объекта класса A мы бы хотели инициализировать объект VeryBigObject непосредственно перед его использованием, вот один из способов добиться такого поведения:</p>
<div class="highlight">
<pre><span style="font-weight:bold;color:#007020;">class</span> <span style="font-weight:bold;color:#0e84b5;">A</span>(<span style="color:#007020;">object</span>):
    <span style="font-weight:bold;color:#007020;">def</span> <span style="color:#06287e;">__init__</span>(<span style="color:#007020;">self</span>):
        <span style="color:#007020;">self</span><span style="color:#666666;">.</span>__lazy_attr <span style="color:#666666;">=</span> <span style="color:#007020;">None</span>

    <span style="font-weight:bold;color:#555555;">@property</span>
    <span style="font-weight:bold;color:#007020;">def</span> <span style="color:#06287e;">lazy_attr</span>(<span style="color:#007020;">self</span>):
        <span style="font-weight:bold;color:#007020;">if</span> <span style="color:#007020;">self</span><span style="color:#666666;">.</span>__lazy_attr <span style="font-weight:bold;color:#007020;">is</span> <span style="color:#007020;">None</span>:
            <span style="color:#007020;">self</span><span style="color:#666666;">.</span>__lazy_attr <span style="color:#666666;">=</span> VeryBigObject()
        <span style="font-weight:bold;color:#007020;">return</span> <span style="color:#007020;">self</span><span style="color:#666666;">.</span>__lazy_attr

    <span style="font-weight:bold;color:#007020;">def</span> <span style="color:#06287e;">process</span>(<span style="color:#007020;">self</span>):
        <span style="font-weight:bold;color:#007020;">try</span>:
            <span style="color:#666666;">...</span>
        <span style="font-weight:bold;color:#007020;">except</span> SomeRareError, error:
            <span style="color:#007020;">self</span><span style="color:#666666;">.</span>__lazy_attr<span style="color:#666666;">.</span>process(error)
        <span style="font-weight:bold;color:#007020;">except</span> AnotherRareError, error:
            <span style="color:#007020;">self</span><span style="color:#666666;">.</span>__lazy_attr<span style="color:#666666;">.</span>process(error)</pre>
</div>
<p><strong>Декоратор.</strong><br />
Сегодня мне наконец-то надоело писать один и тот-же код, а именно установку и проверку значений приватных атрибутов. Немного подумав выдумал вот такой декоратор, делающий за меня надоевшие телодвижения:</p>
<div class="highlight">
<pre><span style="font-weight:bold;color:#007020;">def</span> <span style="color:#06287e;">lazy</span>(func):
    <span style="font-weight:bold;color:#555555;">@property</span>
    <span style="font-weight:bold;color:#007020;">def</span> <span style="color:#06287e;">wrapper</span>(<span style="color:#007020;">self</span>):
        attr_name <span style="color:#666666;">=</span> <span style="color:#4070a0;">'__</span><span style="font-style:italic;color:#70a0d0;">%s</span><span style="color:#4070a0;">'</span> <span style="color:#666666;">%</span> func<span style="color:#666666;">.</span>__name__
        <span style="font-weight:bold;color:#007020;">try</span>:
            value <span style="color:#666666;">=</span> <span style="color:#007020;">getattr</span>(<span style="color:#007020;">self</span>, attr_name)
        <span style="font-weight:bold;color:#007020;">except</span> <span style="color:#007020;">AttributeError</span>:
            value <span style="color:#666666;">=</span> func(<span style="color:#007020;">self</span>)
            <span style="color:#007020;">setattr</span>(<span style="color:#007020;">self</span>, attr_name, value)
        <span style="font-weight:bold;color:#007020;">return</span> value
    <span style="font-weight:bold;color:#007020;">return</span> wrapper</pre>
</div>
<p>И сразу же пример того, как выглядел бы наш класс A, если бы мы использовали декоратор lazy:</p>
<div class="highlight">
<pre><span style="font-weight:bold;color:#007020;">class</span> <span style="font-weight:bold;color:#0e84b5;">A</span>(<span style="color:#007020;">object</span>):
 <span style="font-weight:bold;color:#555555;">   @lazy</span>
    <span style="font-weight:bold;color:#007020;">def</span> <span style="color:#06287e;">lazy_attr</span>(<span style="color:#007020;">self</span>):
        <span style="font-weight:bold;color:#007020;">return</span> VeryBigObject()
    <span style="color:#666666;">....</span></pre>
</div>
<p>Декоратор работает очень просто, он оборачивает указанный метод, в нашем случае это lazy_attr .При этом обернутый метод становится свойством (<a href="http://www.ragbag.ru/2006/11/02/python_descriptors/" target="_blank">property</a>) объекта. Далее, при первом обращении к свойству, декоратор устанавливает приватный атрибут вида &laquo;__имя_свойства&raquo;,  у нас это будет атрибут self.__lazy_attr. Значением которого является результат вызова обернутого метода и возвращает это значение. Обернутый нами метод lazy_attr вернет экземпляр VeryBigObject. При следующих обращениях декоратор просто берет из установленного им атрибута значение и возвращает его запросившей стороне.<br />
Немного запутанно, но, я надеюсь, глядя на код вы разберетесь. :)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=13&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2008/06/11/lazy-initialization-python/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>Немного о __doc__ и декораторах.</title>
		<link>http://programmizm.wordpress.com/2007/09/05/%d0%9d%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-__doc__-%d0%b8-%d0%b4%d0%b5%d0%ba%d0%be%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b0%d1%85/</link>
		<comments>http://programmizm.wordpress.com/2007/09/05/%d0%9d%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-__doc__-%d0%b8-%d0%b4%d0%b5%d0%ba%d0%be%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b0%d1%85/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 10:50:08 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/09/05/%d0%9d%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-__doc__-%d0%b8-%d0%b4%d0%b5%d0%ba%d0%be%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b0%d1%85/</guid>
		<description><![CDATA[Недавно появилась потребность документировать декораторы&#8230; казалось бы ну и что тут такого? Бери и в коде документируй. Но не все так просто, понадобилось документировать декораторы создаваемые уже на этапе выполнения, следовательно и документировать их нужно было на этом этапе. Чтобы стало понятно , о чем я говорю, приведу пример функции, которая создает декоратор: def mkrequire_type_(type, error, doc_string=''): @append_doc_string(doc_string) def _make_decorator(n=0): def _decorator(func): def _wrapper(*args, **kwargs): if not isinstance(args[n], type): raise TypeError, 'function require %s' % error return [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=11&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Недавно появилась потребность документировать декораторы&#8230; казалось бы ну и что тут такого? Бери и в коде документируй.<br />
Но не все так просто, понадобилось документировать декораторы создаваемые уже на этапе выполнения, следовательно и документировать их нужно было на этом этапе.<br />
<span id="more-11"></span>Чтобы стало понятно , о чем я говорю, приведу пример функции, которая создает декоратор:</p>
<pre>
def mkrequire_type_(type, error, doc_string=''):
    @append_doc_string(doc_string)
    def _make_decorator(n=0):
        def _decorator(func):
            def _wrapper(*args, **kwargs):
                if not isinstance(args[n], type):
                    raise TypeError, 'function require %s' % error
                return func(*args, **kwargs)
            return _wrapper
        return _decorator
    return _make_decorator</pre>
<p>Для тех, кто знает, как работают декораторы, должно быть всё понятно, для тех, кто<br />
не знает, <a TITLE="Максим Деркачев уже все написал :)" TARGET="_blank" HREF="http://www.ragbag.ru/2006/11/07/python_decorators/">Максим Деркачев уже все написал :)</a>. На декоратор append_doc_string и аргумент<br />
doc_string внимания пока не обращайте, об этом далее.<br />
Пример использования,  допустим нам нужен декоратор, который проверяет, является ли аргумент целым числом:</p>
<pre> require_int = mkrequire_type_(int, 'integer')</pre>
<p>Подумаем, как мы можем документировать наш только что созданный декоратор<br />
require_int? Мы знаем, что докстринг это по сути атрибут __doc__ и нам ни чего не мешает задать его значение руками, значит можно сделать так:</p>
<pre> require_int = mkrequire_type_(int, 'integer')
 require_int.__doc__ = 'require int decorator'</pre>
<p>Но, имхо, не очень красиво, хотелось бы определять докстринг сразу, при создании<br />
декоратора. Эту задачу как раз решает  append_doc_string, код которого приведен ниже:</p>
<pre> def append_doc_string(doc_string):
    def _decorator(function):
        function.__doc__ = doc_string
        return function
    return _decorator</pre>
<p>Все просто и прозрачно, этот декоратор делает все тоже самое, что мы выше делали руками, теперь создание декоратора require_int будет выглядить вот так:</p>
<pre> require_int = mkrequire_type_(int, 'integer', doc_string='require int decorator')</pre>
<p>Если строка документации не нужна, то достаточно не определять аргумент doc_string.<br />
Вот вроде и всё. Have fun. :)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=11&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/09/05/%d0%9d%d0%b5%d0%bc%d0%bd%d0%be%d0%b3%d0%be-%d0%be-__doc__-%d0%b8-%d0%b4%d0%b5%d0%ba%d0%be%d1%80%d0%b0%d1%82%d0%be%d1%80%d0%b0%d1%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>vpn-сервер за NAT</title>
		<link>http://programmizm.wordpress.com/2007/06/13/vpn-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b7%d0%b0-nat/</link>
		<comments>http://programmizm.wordpress.com/2007/06/13/vpn-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b7%d0%b0-nat/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 07:23:32 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[Мысли и идеи]]></category>
		<category><![CDATA[странное]]></category>
		<category><![CDATA[sysad]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/06/13/vpn-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b7%d0%b0-nat/</guid>
		<description><![CDATA[Задча ниже. Дано: Есть сеть за NAT&#8217;ом, наша сетка, в которой мы имеем возможность что-то сделать. ( locale_home_network) Есть сеть на другой стороне ната, там мы, практически, ни чего сделать не можем. (remote_home_network). Из locale_home_network в remote_home_network можно ходить только через нат, в обратном направлении вообще ни как. Сеть locale_home_network имеет доступ еще к одной [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=10&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Задча ниже.<br />
<strong>Дано:</strong><br />
Есть сеть за NAT&#8217;ом, наша сетка, в которой мы имеем возможность что-то сделать. (</p>
<p><em>locale_home_network</em>)<br />
Есть сеть на другой стороне ната, там мы, практически, ни чего сделать не можем. (<em>remote_home_network</em>).<br />
Из<em> locale_home_network</em> в <em>remote_home_network</em> можно ходить только через нат, в обратном направлении вообще ни как.<br />
Сеть <em>locale_home_network</em> имеет доступ еще к одной сети(<em>other_network</em>), к которой пользователи <em>remote_home_network</em><br />
доступа не имеют, но очень хотят.</p>
<p><strong>Нужно:</strong><br />
Дать доступ к <em>other_network</em> пользователям из <em>remote_home_network</em></p>
<p>Вот вроде так.)<br />
&laquo;Белые решения&raquo;, типа реального адреса для vpn-сервера и т.д., не подходят)</p>
<p>Ниже то, что я уже придумал.<br />
<span id="more-10"></span> 1. Вариант бэк-коннекта, когда не клиент просит соединения у сервера, а наоборот, сервер у клиента.<br />
Я думаю самый простой способ, но тут нужно придумать какой-то тригер, по которому сервер будет просить соединения.<br />
Пока остановился на irc-боте. И, пока еще, не знаю, есть ли клиенты, которые умеют ждать запроса на соединение от сервера.</p>
<pre>
 .-------------------,          .---------,
 |remote_home_network|------.---|vpnclient|
 `-------------------`      |   `---------`
                            |       |
                         1.-|       |
                            |    3.-|
                ____________|___    |
                    nat     |       |
                ------------|---    |
                            |    2. |
                       .-------, |  |
                       |irc-bot|----.
                       `-------`    |
                                    |
 .-------------------,    4.    .-------,
 |locale_home_network| -------- |  vpn  |
 `-------------------`          | server|
          |                     `-------`
          |
   .-------------,
   |other_network|
   `-------------`</pre>
<pre>    1. Зарос от клиента irc-боту, наш тригер.
    2. Срабатывает тригер, сервер просит соединения у клиента.
    3. Соединение установлено.
    4. Ну и собственно туннель, vpnclient-&gt;vpnserver-&gt;
                                locale_home_network-&gt;other_network</pre>
<p>2. вариант, с промежуточным узлом, попозже опишу)<br />
Предложения, идеи?</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=10&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/06/13/vpn-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b7%d0%b0-nat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>Сериализация объектов и twisted.spread.pb</title>
		<link>http://programmizm.wordpress.com/2007/06/09/%d0%a1%d0%b5%d1%80%d0%b8%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d0%b8-twistedspreadpb/</link>
		<comments>http://programmizm.wordpress.com/2007/06/09/%d0%a1%d0%b5%d1%80%d0%b8%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d0%b8-twistedspreadpb/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 18:50:51 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[twisted]]></category>
		<category><![CDATA[twisted.spread.pb]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/06/09/%d0%a1%d0%b5%d1%80%d0%b8%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d0%b8-twistedspreadpb/</guid>
		<description><![CDATA[В принципе там всё просто и в рамках документации, пока объекты примерно таких классов используются: class basicObject(object): def __init__(self): print "A bugogoa" Всё становится гораздо сложнее, когда у нас в объекте появляется ссылка на другой объект, например: class extendedObject(object): def __init__(self): self.basicObject = basicObject() Тут мы на приеме объекта получим InsecureJelly, я примерно догадываюсь почему, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=8&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>В принципе там всё просто и в рамках документации, пока объекты примерно таких классов используются:</p>
<pre><code>
class basicObject(object):
    def __init__(self):
        print "A bugogoa"</code></pre>
<p>Всё становится гораздо сложнее, когда у нас в объекте появляется ссылка на другой объект, например:</p>
<pre><code>
class extendedObject(object):
    def __init__(self):
        self.basicObject = basicObject()</code></pre>
<p>Тут мы на приеме объекта получим InsecureJelly, я примерно догадываюсь почему, но связно объяснить сейчас не могу, может кто расскажет?<br />
В общем встал вопрос, а что делать?<br />
Встал ответ: а хрен его знает.<br />
Я сел. Думать.<br />
Хорошенько подумав решил, что нужно сериализовать self.basicObject руками и слать его уже упакованным в строку, чтоб нидаибались), родилось вот это:</p>
<pre><code>
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())</code></pre>
<p>zlib.compress здесь для того, чтобы у нас StringIO объекта не оставалось, zlib.compress возвращает сжатую строку.</p>
<p>Ну вот вроде и всё, я не знаю, на сколько такое решение правильное и безопасное, сдается мне, что есть и более прямые пути, просто я о них еще не знаю)</p>
<p>Как только вкурю, как это всё работает &laquo;изнутри&raquo;, то отпишусь.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=8&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/06/09/%d0%a1%d0%b5%d1%80%d0%b8%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%be%d0%b1%d1%8a%d0%b5%d0%ba%d1%82%d0%be%d0%b2-%d0%b8-twistedspreadpb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>websvn+utf8</title>
		<link>http://programmizm.wordpress.com/2007/06/07/websvnutf8/</link>
		<comments>http://programmizm.wordpress.com/2007/06/07/websvnutf8/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 07:15:06 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[quick&dirty]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/06/07/websvnutf8/</guid>
		<description><![CDATA[Ни как не получилось заставить нормально работать websvn с utf8. Пришлось сделать quick&#38;dirty патчик, он отключает кеширование логов, проблемы с кодировками именно на этапе кеширования возникают. diff патча можно взять тут. После установки необходимо добавить в конфиг строку: $config-&#62;myLocale=&#8217;&#60;вашалокаль&#62;&#8217;. например $config-&#62;myLocale=&#8217;ru_RU.UTF-8&#8242; в моём случае.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=7&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ни как не получилось заставить нормально работать websvn с utf8.<br />
Пришлось сделать quick&amp;dirty патчик, он отключает кеширование логов, проблемы с кодировками именно на этапе кеширования возникают.<br />
diff патча можно взять <a HREF="http://masted.affiza.biz/files/patch/websvn.encoding-fastpatch-1" TARGET="_blank">тут</a>.<br />
После установки необходимо добавить в конфиг строку:<br />
$config-&gt;myLocale=&#8217;&lt;вашалокаль&gt;&#8217;.<br />
например $config-&gt;myLocale=&#8217;ru_RU.UTF-8&#8242; в моём случае.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=7&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/06/07/websvnutf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>конфиг клиента mpd</title>
		<link>http://programmizm.wordpress.com/2007/03/25/%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-mpd/</link>
		<comments>http://programmizm.wordpress.com/2007/03/25/%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-mpd/#comments</comments>
		<pubDate>Sun, 25 Mar 2007 06:02:54 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[Конфиги]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[sysad]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/03/25/%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-mpd/</guid>
		<description><![CDATA[Давно валяется этот файлик, кину сюда, чтоб не потерятьпример рабочего конфига: - — cut here (mpd.conf) — default: load vpn vpn: new -i ng0 vpn vpn set iface disable on-demand set iface addrs 192.168.1.1 192.168.2.1 set iface idle 0 set iface route default set bundle disable multilink set bundle authname “XXXXXX” set bundle password “YYYYYY” [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=6&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Давно валяется этот файлик, кину сюда, чтоб не потерять<span id="more-6"></span>пример рабочего конфига:</p>
<p>- — cut here (mpd.conf) —<br />
default:<br />
load vpn</p>
<p>vpn:<br />
new -i ng0 vpn vpn<br />
set iface disable on-demand<br />
set iface addrs 192.168.1.1 192.168.2.1<br />
set iface idle 0<br />
set iface route default<br />
set bundle disable multilink<br />
set bundle authname “XXXXXX”<br />
set bundle password “YYYYYY”<br />
set link yes acfcomp protocomp<br />
set link disable chap pap<br />
set link accept chap pap<br />
#       set link no pap<br />
#       set link yes chap<br />
# If remote machine is NT you need this..<br />
set link enable no-orig-auth<br />
set link keep-alive 10 75<br />
set ipcp yes vjcomp<br />
set ipcp ranges 0.0.0.0/0 0.0.0.0/0<br />
#<br />
# The five lines below enable Microsoft Point-to-Point encryption<br />
# (MPPE) using the ng_mppc(8) netgraph node type.<br />
#<br />
set bundle enable compression<br />
set ccp yes mppc<br />
set ccp yes mpp-e40<br />
set ccp yes mpp-e128<br />
set bundle enable crypt-reqd<br />
set ccp yes mpp-stateless<br />
open<br />
- — cut here —</p>
<p>- — cut here (mpd.links) —<br />
vpn:<br />
set link type pptp<br />
set pptp self A.B.C.D<br />
set pptp peer X.Y.Z.W<br />
set pptp enable originate incoming outcall<br />
- — cut here —</p>
<p>XXXXXX — username<br />
YYYYYY — password<br />
A.B.C.D — твой IP<br />
X.Y.Z.W — IP pptp сервера</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=6&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/03/25/%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d0%b0-mpd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>void* как указатель на функцию, в ANSI C</title>
		<link>http://programmizm.wordpress.com/2007/01/09/void-%d0%ba%d0%b0%d0%ba-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8e-%d0%b2-ansi-c/</link>
		<comments>http://programmizm.wordpress.com/2007/01/09/void-%d0%ba%d0%b0%d0%ba-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8e-%d0%b2-ansi-c/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 07:19:35 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[ansi c]]></category>
		<category><![CDATA[C]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/01/09/void-%d0%ba%d0%b0%d0%ba-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8e-%d0%b2-ansi-c/</guid>
		<description><![CDATA[Вчера узнал, что ANSI C не разрешает приводить void* к указателю на функцию, даже явно, например код: void *(*screngine_init)(void); screngine_init = dlsym(screngine_lib, “screngine_init”); (*screngine_call)(void); будет не корректным. Существует два варианта, как справиться с этой задачей: Использовать функцию dlfunc заместо dlsym. Использовать union такого вида: union { void *ptr; void (*call)(void); } Использование dlfunc конечно хороший вариант, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=5&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Вчера узнал, что ANSI C не разрешает приводить void* к указателю на функцию, даже явно, например код:</p>
<pre><code>
void *(*screngine_init)(void);
screngine_init = dlsym(screngine_lib, “screngine_init”);
(*screngine_call)(void);</code></pre>
<p>будет не корректным.<br />
Существует два варианта, как справиться с этой задачей:</p>
<ol>
<li>Использовать функцию <a TITLE="man dlfunc" HREF="http://www.freebsd.org/cgi/man.cgi?query=dlfunc&amp;sektion=3">dlfunc</a> заместо <a TITLE="man dlsym" HREF="http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html">dlsym</a>.</li>
<li>Использовать union такого вида: union { void *ptr; void (*call)(void); }</li>
</ol>
<p><span id="more-5"></span>Использование dlfunc конечно хороший вариант, но эта функция есть не во всех системах, например на своём домашнем debian gnu/linux я её не обнаружил, хотя на соседних freebsd 6.0 она есть, поэтому я решил использовать union-метод, посчитав его более переносимым, тем более что он не на много сложнее варианта с вызовом dlfunc:</p>
<pre><code>
union { void *ptr; void (*call)(void); } screngine_init;
screngine_init.ptr = dlsym(screngine_lib, “screngine_init”);
screngine_init.call(void);</code></pre>
<p>По моему даже красивее, чем в первоначальном варианте. :)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=5&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/01/09/void-%d0%ba%d0%b0%d0%ba-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c-%d0%bd%d0%b0-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8e-%d0%b2-ansi-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
		<item>
		<title>sysadnotes I</title>
		<link>http://programmizm.wordpress.com/2007/01/02/sysadnotes-i/</link>
		<comments>http://programmizm.wordpress.com/2007/01/02/sysadnotes-i/#comments</comments>
		<pubDate>Tue, 02 Jan 2007 06:07:55 +0000</pubDate>
		<dc:creator>masted</dc:creator>
				<category><![CDATA[sysad]]></category>

		<guid isPermaLink="false">http://programmizm.wordpress.com/2007/01/02/sysadnotes-i/</guid>
		<description><![CDATA[активация рута в postgresql: #createuser -P -U pgsql root шутдаун ноды нетграфа: #ngctl shutdown ng0<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=4&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>активация рута в postgresql:<br />
#createuser -P -U pgsql root<br />
шутдаун ноды нетграфа:<br />
#ngctl shutdown ng0</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/programmizm.wordpress.com/4/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/programmizm.wordpress.com/4/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/programmizm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/programmizm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/programmizm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/programmizm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/programmizm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/programmizm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/programmizm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/programmizm.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=programmizm.wordpress.com&amp;blog=1607290&amp;post=4&amp;subd=programmizm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://programmizm.wordpress.com/2007/01/02/sysadnotes-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d67aa63f4310c3b595c889724c589ecc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">masteddev</media:title>
		</media:content>
	</item>
	</channel>
</rss>
