<?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/"
	>

<channel>
	<title>Ikke's blog</title>
	<atom:link href="http://eikke.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://eikke.com</link>
	<description>'cause this is what I do</description>
	<pubDate>Mon, 11 May 2009 21:05:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Joined the Twitter train</title>
		<link>http://eikke.com/joined-the-twitter-train/</link>
		<comments>http://eikke.com/joined-the-twitter-train/#comments</comments>
		<pubDate>Mon, 11 May 2009 21:05:39 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://eikke.com/joined-the-twitter-train/</guid>
		<description><![CDATA[Created a Twitter profile today, let&#8217;s see what it brings.
]]></description>
			<content:encoded><![CDATA[<p>Created a <a href="http://twitter.com">Twitter</a> <a href="http://twitter.com/eikke">profile</a> today, let&#8217;s see what it brings.</p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/joined-the-twitter-train/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python value swap</title>
		<link>http://eikke.com/python-value-swap/</link>
		<comments>http://eikke.com/python-value-swap/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 18:44:55 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://eikke.com/?p=103</guid>
		<description><![CDATA[Been looking (again) at XMPP recently. While browsing through existing source code and samples in several languages, there&#8217;s one pattern which comes back quite frequently in &#8216;echobot&#8217; demos: when a message comes in, the to and from attributes are swapped, and the message is sent.
The most common approach is something like (pseudocode):

temp = from
from = [...]]]></description>
			<content:encoded><![CDATA[<p>Been looking (again) at XMPP recently. While browsing through existing source code and samples in several languages, there&#8217;s one pattern which comes back quite frequently in &#8216;echobot&#8217; demos: when a message comes in, the to and from attributes are swapped, and the message is sent.</p>
<p>The most common approach is something like (pseudocode):<br />
<code>
<pre>temp = from
from = to
to = temp</pre>
<p></code></p>
<p>In Python there&#8217;s an easier approach though which seems to be unknown to several developers. It uses the multi-assignment/expansion syntax:<br />
<code>
<pre>from, to = to, from</pre>
<p></code></p>
<p>Basically, the tuple on the right (to, from) is constructed, then expanded to locals &#8216;from&#8217; and &#8216;to&#8217;.</p>
<p>Just a hint <img src='http://eikke.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> It&#8217;s a pretty elegant line of code IMHO.</p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/python-value-swap/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sun -&gt; Oracle</title>
		<link>http://eikke.com/sun-oracle/</link>
		<comments>http://eikke.com/sun-oracle/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 12:07:27 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<category><![CDATA[oracle]]></category>

		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://eikke.com/?p=98</guid>
		<description><![CDATA[Sun acquired by Oracle. Yet another employer  
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sun.com/third-party/global/oracle/index.jsp">Sun acquired by Oracle</a>. Yet another employer <img src='http://eikke.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/sun-oracle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Erlang, Python and Twisted mashup using TwOTP</title>
		<link>http://eikke.com/erlang-python-and-twisted-mashup-using-twotp/</link>
		<comments>http://eikke.com/erlang-python-and-twisted-mashup-using-twotp/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 19:03:30 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Technology]]></category>

		<category><![CDATA[erlang]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[twisted]]></category>

		<category><![CDATA[twotp]]></category>

		<guid isPermaLink="false">http://eikke.com/?p=90</guid>
		<description><![CDATA[Recently, I&#8217;ve been toying around with Erlang again. After creating some simple apps I wanted to integrate some Erlang code inside a Python application (since that&#8217;s still my favorite day-to-day language, it&#8217;s used at work and I&#8217;m sort-of convinced Erlang would be a good choice for several of the applications we need to develop, integrated [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I&#8217;ve been toying around with <a href="http://erlang.org">Erlang</a> again. After creating some simple apps I wanted to integrate some Erlang code inside a <a href="http://www.python.org">Python</a> application (since that&#8217;s still my favorite day-to-day language, it&#8217;s used at work and I&#8217;m sort-of convinced Erlang would be a good choice for several of the applications we need to develop, integrated with our existing Python code). The most obvious solution would be to use an Erlang port, but this is IMHO rather cumbersome: it requires a developer to define a messaging format, parsing code for incoming messages, etc. There&#8217;s a <a href="http://www.kazmier.net/computer/port-howto/">tutorial</a> available if you want to take this route.</p>
<p>A more elegant solution is creating a node using Python, similar to <a href="http://erlang.org/doc/apps/jinterface/index.html">JInterface</a> and equivalents. Luckily there&#8217;s an existing project working on a library to create Erlang nodes using Python and <a href="http://www.twistedmatrix.com">Twisted</a>: <a href="https://code.launchpad.net/twotp">TwOTP</a>.</p>
<p>One downside: it&#8217;s rather underdocumented&#8230; So here&#8217;s a very quick demo how to call functions on an Erlang node from within a Twisted application.</p>
<p>First of all we&#8217;ll create 2 Erlang functions: one which returns a simple &#8220;Hello&#8221; message, one which uses an extra process to return &#8216;pong&#8217; messages on calls to &#8216;ping&#8217;, and counts those.</p>
<p>The code:</p>
<p><code>
<pre>-module(demo).
-export([hello/1, ping/0, start/0]).

hello(Name) ->
    Message = "Hello, " ++ Name,
    io:format(Message ++ "~n", []),
    Message.

ping_loop(N) ->
    receive
        {get_id, From} ->
            From ! {pong, N},
            ping_loop(N + 1)
    end.

ping() ->
    pingsrv ! {get_id, self()},
    receive
        {pong, N} -&gt; ok
    end,
    {pong, N}.

start() ->
    Pid = spawn_link(fun() -> ping_loop(1) end),
    register(pingsrv, Pid).
</pre>
<p></code></p>
<p>This should be straight-forward if you&#8217;re familiar with Erlang (which I assume).</p>
<p>The Python code is not that hard to get either: it follows the basic Twisted pattern. First one should create a connection to EPMD, the Erlang Port Mapper Daemon (used to find other nodes), then a connection to the server node should be created, and finally functions can be called (calls happen the same way as Erlang&#8217;s <a href="http://erlang.org/doc/man/rpc.html">RPC module</a>).</p>
<p>Here&#8217;s the code. I&#8217;d advise to read it bottom-to-top:</p>
<p><code>
<pre>import sys

from twisted.internet import reactor
import twotp

def error(e):
    '''A generic error handler'''
    print 'Error:'
    print e
    reactor.stop()

def do_pingpong(proto):
    def handle_pong(result):
        # Parse the result
        # 'ping' returns a tuple of an atom ('pong') and an integer (the pong
        # id)
        # In TwOTP, an Atom object has a 'text' attribute, which is the string
        # form of the atom
        text, id_ = result[0].text, result[1]
        print 'Got ping result: %s %d' % (text, id_)
        # Recurse
        reactor.callLater(1, do_pingpong, proto)

    # Call the 'ping' function of the 'demo' module
    d = proto.factory.callRemote(proto, 'demo', 'ping')
    # Add an RPC call handler
    d.addCallback(handle_pong)
    # And our generic error handler
    d.addErrback(error)

def call_hello(proto, name):
    def handle_hello(result):
        print 'Got hello result:', result
        # Erlang strings are lists of numbers
        # The default encoding is Latin1, this might need to be changed if your
        # Erlang node uses another encoding
        text = ''.join(chr(c) for c in result).decode('latin1')
        print 'String form:', text
        # Start pingpong loop
        do_pingpong(proto)

    # Call the 'hello' function of the 'demo' module, and pass in argument
    # 'name'
    d = proto.factory.callRemote(proto, 'demo', 'hello', name)
    # Add a callback for this function call
    d.addCallback(handle_hello)
    # And our generic error handler
    d.addErrback(error)

def launch(epmd, remote, name):
    '''Entry point of our demo application'''
    # Connect to a node. This returns a deferred
    d = epmd.connectToNode(remote)
    # Add a callback, called when the connection to the node is established
    d.addCallback(call_hello, name)
    # And add our generic error handler
    d.addErrback(error)

def main():
    remote = sys.argv[1]
    name = sys.argv[2]
    # Read out the Erlang cookie value
    cookie = twotp.readCookie()
    # Create a name for this node
    this_node = twotp.buildNodeName('demo_client')
    # Connect to EPMD
    epmd = twotp.OneShotPortMapperFactory(this_node, cookie)
    # Call our entry point function when the Twisted reactor is started
    reactor.callWhenRunning(launch, epmd, remote, name)
    # Start the reactor
    reactor.run()

if __name__ == '__main__':
    main()</pre>
<p></code></p>
<p>Finally, to run it, you should first start a server node, and run the &#8216;pingsrv&#8217; process:</p>
<p><code>
<pre>MacBook:pyping nicolas$ erl -sname test@localhost
Erlang (BEAM) emulator version 5.6.5 [source] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.6.5  (abort with ^G)
(test@localhost)1> c(demo).
{ok,demo}
(test@localhost)2> demo:start().
true</pre>
<p></code></p>
<p>Notice we started <em>erl</em> providing <em>test@localhost</em> as short node name.</p>
<p>Now we can launch our client:</p>
<p><code>
<pre>(pythonenv)MacBook:pyping nicolas$ python hello.py 'test' Nicolas
Got hello result: [72, 101, 108, 108, 111, 44, 32, 78, 105, 99, 111, 108, 97, 115]
String form: Hello, Nicolas
Got ping result: pong 1
Got ping result: pong 2
Got ping result: pong 3</pre>
<p></code></p>
<p>&#8216;test&#8217; is the shortname of the server node.</p>
<p>You can stop the ping loop using <em>CTRL-C</em>. If you restart the client afterwards, you can see the ping IDs were retained:</p>
<p><code>
<pre>(pythonenv)MacBook:pyping nicolas$ python hello.py 'test' Nicolas
Got hello result: [72, 101, 108, 108, 111, 44, 32, 78, 105, 99, 111, 108, 97, 115]
String form: Hello, Nicolas
Got ping result: pong 4
Got ping result: pong 5</pre>
<p></code></p>
<p>That&#8217;s about it. Using TwOTP you can also develop a node which exposes functions, which can be called from an Erlang node using <em>rpc:call/4</em>. Check the documentation provided with TwOTP for a basic example of this feature.</p>
<p>Combining Erlang applications as distributed, fault tolerant core infrastructure and Python/Twisted applications for &#8216;everyday coding&#8217; can be an interesting match in several setups, an TwOTP provides all required functionalities to integrate the 2 platforms easily.</p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/erlang-python-and-twisted-mashup-using-twotp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>s/Q-layer/Sun/</title>
		<link>http://eikke.com/sun-acquires-qlayer/</link>
		<comments>http://eikke.com/sun-acquires-qlayer/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 18:21:14 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Various]]></category>

		<category><![CDATA[Q-layer]]></category>

		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://eikke.com/?p=84</guid>
		<description><![CDATA[It&#8217;s finally public: Q-layer, the company I&#8217;m employed at, has been acquired by Sun (VirtualBox, MySQL, Java, OpenSolaris, SPARC,&#8230; You know). Press release here.
Pretty exciting times ahead. The social event with several guys from the Sun Cloud computing department (among others) last night was really fun, looks like Sun is one of those companies ensuring [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s finally public: <a title="Q-layer" href="http://www.qlayer.com">Q-layer</a>, the company I&#8217;m employed at, has been acquired by <a title="Sun" href="http://www.sun.com">Sun</a> (VirtualBox, MySQL, Java, OpenSolaris, SPARC,&#8230; You know). Press release <a title="Q-layer acquisition press release" href="http://www.sun.com/aboutsun/pr/2009-01/sunflash.20090107.1.xml">here</a>.</p>
<p>Pretty exciting times ahead. The social event with several guys from the Sun Cloud computing department (among others) last night was really fun, looks like Sun is one of those companies ensuring a pleasant work environment (which ensures the continuation of the spirit at Q-layer before). I&#8217;m really thrilled to see how this adventure continues, since it&#8217;s the first time I&#8217;ll be involved in a large company.</p>
<p>Hi to all Sun colleagues reading this, by the way <img src='http://eikke.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Interesting times&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/sun-acquires-qlayer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Got to love the open source communities&#8230;</title>
		<link>http://eikke.com/got-to-love-the-open-source-communities/</link>
		<comments>http://eikke.com/got-to-love-the-open-source-communities/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 14:16:39 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://eikke.com/got-to-love-the-open-source-communities/</guid>
		<description><![CDATA[Hanging around in #coreboot@irc.freenode.net recently, this just passed by:
15:28  &#60;eikke&#62; is it possible in linux to access partitions in an losetup&#8217;ed raw image?
15:29  &#60;carldani&#62;  eikke: yes, I wrote a kernel patch for that
15:29  &#60;eikke&#62; ah, patch :p i did it using &#8211;offset now, but thats kinda hackish
15:29  &#60;carldani&#62;  eikke: the easiest way is to use [...]]]></description>
			<content:encoded><![CDATA[<p>Hanging around in #coreboot@irc.freenode.net recently, this just passed by:</p>
<p>15:28  &lt;eikke&gt; is it possible in linux to access partitions in an losetup&#8217;ed raw image?<br />
15:29  &lt;carldani&gt;  eikke: yes, I wrote a kernel patch for that<br />
15:29  &lt;eikke&gt; ah, patch :p i did it using &#8211;offset now, but thats kinda hackish<br />
15:29  &lt;carldani&gt;  eikke: the easiest way is to use kpartx<br />
15:29  &lt;carldani&gt;  eikke: that was impossible back then<br />
15:30  &lt;eikke&gt; i see<br />
15:30  &lt;carldani&gt;  eikke: kpartx -a /dev/loop0<br />
15:30  &lt;carldani&gt;  eikke: that will give you /dev/mapper/loop0p1 /dev/mapper/loop0p5 etc<br />
15:30  &lt;eikke&gt; cool<br />
15:30  &lt;carldani&gt;  eikke: are you the eikke responsible for ivman?<br />
15:31  &lt;eikke&gt; a long time ago, yes<br />
15:31  &lt;eikke&gt; dont start the flames please :p<br />
15:31  &lt;carldani&gt;  eikke: thanks! I&#8217;m still using it on my laptop</p>
<p>A helps out B, B helps out A, A writes something useful for B, B wrote something used by A, etc. Got to love the open source movement.</p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/got-to-love-the-open-source-communities/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Python gotcha</title>
		<link>http://eikke.com/python-gotcha/</link>
		<comments>http://eikke.com/python-gotcha/#comments</comments>
		<pubDate>Fri, 26 Sep 2008 19:35:37 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://eikke.com/python-gotcha/</guid>
		<description><![CDATA[Don&#8217;t ever do this unless it&#8217;s really what you want:
import os

def some_func(fd):
    f = os.fdopen(fd, 'w')
    f.write('abc')

fd = get_some_fd()
some_func(fd)
some_other_func(fd)
Here&#8217;s what goes wrong: when some_func comes to an end, f (which is a file-like objects) goes out of scope, is destructed, which causes fd to be closed. I think this is pretty [...]]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t ever do this unless it&#8217;s really what you want:</p>
<pre>import os

def some_func(fd):
    f = os.fdopen(fd, 'w')
    f.write('abc')

fd = get_some_fd()
some_func(fd)
some_other_func(fd)</pre>
<p>Here&#8217;s what goes wrong: when some_func comes to an end, f (which is a file-like objects) goes out of scope, is destructed, which causes fd to be closed. I think this is pretty weird behavior (an object closing an fd it didn&#8217;t open itself), but well.</p>
<p>Here&#8217;s a better version, for reference:</p>
<pre>def some_func(fd):
    f = os.fdopen(os.dup(fd), 'w')
    #Use f here</pre>
<p>Try this on fd 0/1/2 in an (I)Python shell <img src='http://eikke.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/python-gotcha/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scripting your app</title>
		<link>http://eikke.com/scripting-your-app/</link>
		<comments>http://eikke.com/scripting-your-app/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 21:12:28 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Desktop]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[gnome]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://eikke.com/scripting-your-app/</guid>
		<description><![CDATA[Lots of buzz on adding scripting interfaces to applications on Planet GNOME recently, cool. Looks like Alexander Larsson hacked together a wrapper around SpiderMonkey (the Mozilla Engine) to get JavaScript integrated. Related to the jscore-python thing I blogged about before.
Not sure this is the best way to tackle this cool new opportunity though. JavaScript can [...]]]></description>
			<content:encoded><![CDATA[<p>Lots of buzz on adding scripting interfaces to applications on <a href="http://planet.gnome.org" title="Planet GNOME">Planet GNOME</a> recently, cool. Looks like <a href="http://blogs.gnome.org/alexl" title="Alexander Larsson">Alexander Larsson</a> hacked together a wrapper around SpiderMonkey (the Mozilla Engine) to get JavaScript integrated. Related to the jscore-python thing I blogged about <a href="http://eikke.com/embedding-javascript-in-python/" title="Embedding JavaScript in Python - Ikke's Blog">before</a>.</p>
<p>Not sure this is the best way to tackle this cool new opportunity though. JavaScript can be pretty hard to &#8220;get&#8221; for people not used to it, but more familiar with classical languages (wrt object oriented paradigms). I guess lots of current code contributors are not very familiar with JavaScript, but do have an in-depth knowledge of some other scripting language though (not listing any here, you certainly can name some).</p>
<p>So, wouldn&#8217;t it be nice if the GScript interface would be abstract for the application developer, who should just create a script context, put some objects in it, and launch a script, after which the GScript runtime figures out which interpreter to use for this script, so scripting languages become plugable?</p>
<p>Reminds me a little of my old OPluginManager work <img src='http://eikke.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/scripting-your-app/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Embedding JavaScript in Python</title>
		<link>http://eikke.com/embedding-javascript-in-python/</link>
		<comments>http://eikke.com/embedding-javascript-in-python/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 23:05:16 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[javascriptcore]]></category>

		<category><![CDATA[python]]></category>

		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://eikke.com/embedding-javascript-in-python/</guid>
		<description><![CDATA[Reading some posts about embedding languages/runtimes in applications on Planet GNOME reminded me I still had to announce some really quick and incomplete code blob I created some days after last GUADEC edition (which was insanely cool, thanks guys).
It takes WebKit&#8217;s JavaScriptCore and allows you to embed it in some Python program, so you, as [...]]]></description>
			<content:encoded><![CDATA[<p>Reading some posts about embedding languages/runtimes in applications on <a href="http://planet.gnome.org" title="Planet GNOME">Planet GNOME</a> reminded me I still had to announce some really quick and incomplete code blob I created some days after last <a href="http://www.guadec.org" title="GUADEC">GUADEC</a> edition (which was insanely cool, thanks guys).</p>
<p>It takes <a href="http://www.webkit.org" title="WebKit">WebKit</a>&#8217;s JavaScriptCore and allows you to embed it in some <a href="http://www.python.org" title="Python">Python</a> program, so you, as a Python developer, can allow consumers to write plugins using JavaScript. Don&#8217;t ask me whether it&#8217;s useful, maybe it&#8217;s not, but anyway.</p>
<p>There&#8217;s one catch: currently there is no support to expose custom Python objects to the JavaScript runtime: you&#8217;re able to use JavaScript objects and functions etc. from within Python, but not the other way around. I started working on this, but the JSCore API lacked some stuff to be able to implement this cleanly (or I missed a part of it, that&#8217;s possible as well), maybe it has changed by now&#8230; There is transparent translation of JavaScript base types: unicode strings, booleans, null (which becomes None in Python), undefined (which becomes jscore.UNDEFINED) and floats.</p>
<p>I did not work on the code for quite a long time because of too much real-job-work, maybe it no longer compiles, sorry&#8230; Anyway, it&#8217;s available in git <a href="http://git.nicolast.be/?p=python-jscore.git;a=summary" title="python-jscore git">here</a>, patches welcome etc. I guess <a href="http://git.nicolast.be/?p=python-jscore.git;a=blob;f=test/test_object.py;h=1604e4db7bb1e9333bcbed305ec3107921708ab0;hb=HEAD#l261">this</a> is the best sample code around. It&#8217;s using <a href="http://www.cython.org" title="Cython">Cython</a> for compilation (never tried with Pyrex, although this might work as well). If anyone can use it, great, if not, too bad, I did learn Cython doing this <img src='http://eikke.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/embedding-javascript-in-python/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Free Software startups</title>
		<link>http://eikke.com/free-software-startups/</link>
		<comments>http://eikke.com/free-software-startups/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 13:39:43 +0000</pubDate>
		<dc:creator>Nicolas</dc:creator>
		
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://eikke.com/free-software-startups/</guid>
		<description><![CDATA[At GUADEC last days, fun times. One thing I noticed (again) is the growth of the number of small companies, some of them driven by young guys (like, between 25 and 30) doing some really great stuff with Free Software, combining a steady income, whilst still providing valuable contributions to the community.
I&#8217;d want to write [...]]]></description>
			<content:encoded><![CDATA[<p>At GUADEC last days, fun times. One thing I noticed (again) is the growth of the number of small companies, some of them driven by young guys (like, between 25 and 30) doing some really great stuff with Free Software, combining a steady income, whilst still providing valuable contributions to the community.</p>
<p>I&#8217;d want to write more about this seen, but here&#8217;s a quick idea: how about creating a mailing list for, at one side, these young startups or people interested in starting one, and on the other side people who already got their business running, or already established investors or managers, to discuss issues they encounter, potential business plans, how to get in contact with potential customers, how to combine open communication at one side and dealing with closed environments on the other,&#8230;</p>
<p>This could lower the barrier for people to start working full-time on the projects they love, it&#8217;d add value to Free Software because larger companies can start using it even more, because more expertise and consultancy is available on the market,&#8230;</p>
<p>I guess this is just a shot in the dark, but I think it could be pretty useful. Thoughts?</p>
]]></content:encoded>
			<wfw:commentRss>http://eikke.com/free-software-startups/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
