<?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>Handsome stuff for lovely people!</title>
	<atom:link href="http://g3cko.org/wordpress/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://g3cko.org/wordpress</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Sun, 06 Jun 2010 16:56:58 +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>Python weave</title>
		<link>http://g3cko.org/wordpress/?p=349</link>
		<comments>http://g3cko.org/wordpress/?p=349#comments</comments>
		<pubDate>Fri, 04 Jun 2010 15:45:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=349</guid>
		<description><![CDATA[As part of my master thesis I have developed a data mining algorithm and implemented it in Python. Benchmarks revealed that most of the time is spend iterating over big arrays and calculating the statistical relevance of sub arrays. After some time of tweaking I came to think that maybe involving some C/C++ code might [...]]]></description>
			<content:encoded><![CDATA[<p>As part of my master thesis I have developed a data mining algorithm and implemented it in Python. Benchmarks revealed that most of the time is spend iterating over big arrays and calculating the statistical relevance of sub arrays. After some time of tweaking I came to think that maybe involving some C/C++ code might speed things up a bit&#8230;</p>
<p style="text-align: left;">I stumbled across <a title="weave" href="http://www.scipy.org/Weave" target="_blank">weave</a>, which lets you include inline C/C++ code in your Python script. The usage is quite simple. You basically provide the C/C++ code as a string and execute it. The first time this is done takes some time, since the compiler gets invoked, but afterwards your script simply calls the compiled code fragments. I have to admit, that this is not a fair and fully blown benchmark, but the first tests blew my mind =)</p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;width:560px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br /></div></td><td><div class="python codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">from</span> numpy <span class="kw1">import</span> <span class="kw3">array</span><br />
<span class="kw1">from</span> <span class="kw3">time</span> <span class="kw1">import</span> <span class="kw3">time</span><br />
<span class="kw1">import</span> scipy.<span class="me1">weave</span>.<span class="me1">inline_tools</span> <span class="kw1">as</span> inline_tools<br />
<br />
<span class="kw1">def</span> weaveInline<span class="br0">&#40;</span>arr<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; <span class="kw3">code</span> = <span class="st0">&quot;&quot;&quot;<br />
&nbsp; &nbsp; long int res = 0;<br />
&nbsp; &nbsp; for (int i = 0; i &amp;lt; Narr[0]; i++) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; res += arr[i];<br />
&nbsp; &nbsp; }<br />
&nbsp; &nbsp; return_val = res;<br />
&nbsp; &nbsp; &quot;&quot;&quot;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> inline_tools.<span class="me1">inline</span><span class="br0">&#40;</span><span class="kw3">code</span>,<span class="br0">&#91;</span><span class="st0">'arr'</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
<br />
<span class="kw1">def</span> nativePython<span class="br0">&#40;</span>arr<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; res = <span class="nu0">0</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">xrange</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>arr<span class="br0">&#41;</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; res += arr<span class="br0">&#91;</span>i<span class="br0">&#93;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> res<br />
<br />
<span class="kw1">if</span> __name__ == <span class="st0">'__main__'</span>:<br />
&nbsp; &nbsp; checksum1 = <span class="nu0">0</span><br />
&nbsp; &nbsp; checksum2 = <span class="nu0">0</span><br />
<br />
&nbsp; &nbsp; f = <span class="kw2">open</span><span class="br0">&#40;</span><span class="st0">'benchmark.dat'</span>, <span class="st0">'w'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; f.<span class="me1">write</span><span class="br0">&#40;</span><span class="st0">&quot;#calls, arraysize, zero, native on python array, inline on numpy array<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">for</span> calls <span class="kw1">in</span> <span class="kw2">xrange</span><span class="br0">&#40;</span><span class="nu0">10</span>,<span class="nu0">110</span>,<span class="nu0">10</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> arraysize <span class="kw1">in</span> <span class="kw2">xrange</span><span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">55000</span>,<span class="nu0">5000</span><span class="br0">&#41;</span>:<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr1 = <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span>, arraysize<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr2 = <span class="kw3">array</span><span class="br0">&#40;</span><span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">1</span>, arraysize<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>calls<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checksum1 += nativePython<span class="br0">&#40;</span>arr1<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t1 = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span> - tmp<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmp = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>calls<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; checksum2 += weaveInline<span class="br0">&#40;</span>arr2<span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t2 = &nbsp;<span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span> - tmp<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f.<span class="me1">write</span><span class="br0">&#40;</span><span class="st0">&quot;%d %d %f %f %f<span class="es0">\n</span>&quot;</span> <span class="sy0">%</span><span class="br0">&#40;</span>calls, arraysize, <span class="nu0">0.0</span>, t1, t2<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; f.<span class="me1">write</span><span class="br0">&#40;</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; f.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">print</span> checksum1<br />
&nbsp; &nbsp; <span class="kw1">print</span> checksum2</div></td></tr></tbody></table></div>
<p style="text-align: left;">Basically I was interested in how much runtime is spend on the call of the function and how it evolves with the size of the array.</p>
<p style="text-align: center;"><a href="http://g3cko.org/wordpress/wp-content/uploads//2010/06/pyvsweave.png"><img class="alignnone size-thumbnail wp-image-351" title="pyvsweave" src="http://g3cko.org/wordpress/wp-content/uploads//2010/06/pyvsweave.png" alt="pyvsweave" width="250" height="145" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2010/06/onlyweave.png"><img class="alignnone size-thumbnail wp-image-363" title="onlyweave" src="http://g3cko.org/wordpress/wp-content/uploads//2010/06/onlyweave.png" alt="onlyweave" width="250" height="145" /></a></p>
<p style="text-align: left;">The first plot shows a comparison between Pythons native arrays and the C++ implementation. The second plot just illustrates that the C++ way doesn&#8217;t run in const time, but shows the same growth behaviour (only flatter). One thing about the implementation:</p>
<p style="text-align: left;">I did run the pure python version on numpy arrays too, but normal python lists seemed to perform best here.</p>
<p style="text-align: left;">After all keep in mind, that this is not a serious benchmark. I simply wanted to share this info =)</p>
<p style="text-align: left;">&lt;3  gecko</p>
<p style="text-align: left;"><strong>Update</strong></p>
<p style="text-align: left;">Here are the results of what Jörn ased for in one of the comments:</p>
<p style="text-align: center;"><a href="http://g3cko.org/wordpress/wp-content/uploads//2010/06/all.png"><img class="alignnone size-thumbnail wp-image-382" title="all" src="http://g3cko.org/wordpress/wp-content/uploads//2010/06/all.png" alt="all" width="250" height="148" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2010/06/joernvsc.png"><img class="alignnone size-thumbnail wp-image-383" title="joernvsc" src="http://g3cko.org/wordpress/wp-content/uploads//2010/06/joernvsc.png" alt="joernvsc" width="250" height="148" /></a></p>
<p>The first graph shows that Jörn&#8217;s code performs similar to the weave code, although the weave version is a tiny bit faster, as shown in the second graph. I also tried arrays, that were bigger than my CPU&#8217;s L1 cache, but no significant difference here.<br />
An interesting thing though is that depending on the size of the array, sometimes a periodic up and down in the runtime of the native python version occurs. This might be caching related&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=349</wfw:commentRss>
		</item>
		<item>
		<title>Istanbul</title>
		<link>http://g3cko.org/wordpress/?p=287</link>
		<comments>http://g3cko.org/wordpress/?p=287#comments</comments>
		<pubDate>Fri, 18 Dec 2009 17:15:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Photo]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=287</guid>
		<description><![CDATA[Hier ein paar Fotos, die ich dort gemacht habe:
 
 
  
Und hier noch die Dreingabe&#8230; Alles scharf, außer mir! Priceless  

]]></description>
			<content:encoded><![CDATA[<p>Hier ein paar Fotos, die ich dort gemacht habe:</p>
<p><a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03596.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03596_thumb.jpg" alt="dsc03596" title="dsc03596" width="250" height="155" class="alignnone size-thumbnail wp-image-294" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03550.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03550_thumb.jpg" alt="dsc03550" title="dsc03550" width=229"" height="155" class="alignnone size-thumbnail wp-image-294" /></a></p>
<p><a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03698.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03698_thumb.jpg" alt="dsc03698" title="dsc03698" width="267" height="143" class="alignnone size-thumbnail wp-image-294" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03482.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03482_thumb.jpg" alt="dsc03482" title="dsc03482" width="212" height="143" class="alignnone size-thumbnail wp-image-294" /></a></p>
<p><a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03507.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03507_thumb.jpg" alt="dsc03507" title="dsc03507" width="163" height="245" class="alignnone size-thumbnail wp-image-294" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/hagiasophia.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/hagiasophia_thumb.jpg" alt="hagiasophia" title="hagiasophia" width="148" height="245" class="alignnone size-thumbnail wp-image-300" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03519.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03519_thumb.jpg" alt="dsc03519" title="dsc03519" width="162" height="245" class="alignnone size-thumbnail wp-image-294" /></a></p>
<p>Und hier noch die Dreingabe&#8230; Alles scharf, außer mir! Priceless <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03512.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/dsc03512_thumb1.jpg" alt="dsc03512" title="dsc03512" width="485" height="262" class="alignnone size-thumbnail wp-image-290" /></a></p>
<p><3 gecko</p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=287</wfw:commentRss>
		</item>
		<item>
		<title>Python: Finding shared items</title>
		<link>http://g3cko.org/wordpress/?p=263</link>
		<comments>http://g3cko.org/wordpress/?p=263#comments</comments>
		<pubDate>Fri, 18 Dec 2009 15:58:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=263</guid>
		<description><![CDATA[Today I investigated in how to find shared items in listes. My first approach was straight forward and I checked for each item in list1, if it occurs in list2. Over time this became a bit more elegant and turned into:
shared_items = dict( (s,0) for s in list1 if s in list2 )
But this takes [...]]]></description>
			<content:encoded><![CDATA[<p>Today I investigated in how to find shared items in listes. My first approach was straight forward and I checked for each item in list1, if it occurs in list2. Over time this became a bit more elegant and turned into:<br />
shared_items = dict( (s,0) for s in list1 if s in list2 )<br />
But this takes quite a while and so I wondered, if there were better solutions. First thing I found, was that the numpy arrays seem to be much faster to iterate, but the second thing is much more performance boosting&#8230; It makes a huge difference for the runtime, if you use<br />
shared_items = dict((s,0) for s in set(list1) and set(list2))<br />
instead of<br />
shared_items = dict( (s,0) for s in list1 if s in list2 )<br />
EDIT:<br />
Jörn posted in a comment, to just skip the bulls##t an go straight for:<br />
shared_items = set(list1) &#038; set(list2)<br />
Have a look:<br />
<a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/runtimecomparison1.png"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/runtimecomparison1.png" alt="runtime comparison" title="runtime comparison" width="180" height="135" class="alignnone size-thumbnail wp-image-267" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/runtime_edited.png"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/runtime.png" alt="runtime" title="runtime" width="180" height="135" class="alignnone size-thumbnail wp-image-269" /></a> <a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/runtimecomparisonjvsg.png"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/runtimecomparisonjvsg.png" alt="runtime Joern vs Gecko" title="runtime" width="180" height="135" class="alignnone size-thumbnail wp-image-269" /></a><br />
And here is the code, to give you an idea, of what I did&#8230;enjoy <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;width:560px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="python codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">#!/usr/bin/env python</span><br />
<span class="co1"># Task: Find all shared elements in two arrays</span><br />
<span class="kw1">from</span> numpy.<span class="kw3">random</span> <span class="kw1">import</span> randint<br />
<span class="kw1">from</span> <span class="kw3">time</span> <span class="kw1">import</span> <span class="kw3">time</span><br />
<br />
<span class="kw1">print</span> <span class="st0">&quot;Comparing two ways of finding shared elements&quot;</span><br />
<span class="co1"># Two arrays with size 10000, filled with </span><br />
<span class="co1"># random values between 1 and &nbsp;1000000</span><br />
list1 = randint<span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">1000000</span>,<span class="nu0">10000</span><span class="br0">&#41;</span><br />
list2 = randint<span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">1000000</span>,<span class="nu0">10000</span><span class="br0">&#41;</span><br />
<br />
<span class="co1"># Slow</span><br />
t1_start = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
shared1 = <span class="kw2">dict</span><span class="br0">&#40;</span><span class="br0">&#40;</span>s,<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">for</span> s <span class="kw1">in</span> list1 <span class="kw1">if</span> s <span class="kw1">in</span> list2<span class="br0">&#41;</span><br />
t1_stop = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
<br />
<span class="co1"># Fast</span><br />
t2_start = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
shared2 = <span class="kw2">dict</span><span class="br0">&#40;</span><span class="br0">&#40;</span>s,<span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">for</span> s <span class="kw1">in</span> <span class="kw2">set</span><span class="br0">&#40;</span>list1<span class="br0">&#41;</span> <span class="kw1">and</span> <span class="kw2">set</span><span class="br0">&#40;</span>list2<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
t2_stop = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
<span class="co1"># Joern fast:</span><br />
<span class="co1"># Edited, after a comment from Joern...</span><br />
t3_start = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
shared3 = <span class="kw2">set</span><span class="br0">&#40;</span>list1<span class="br0">&#41;</span> <span class="sy0">&amp;</span> <span class="kw2">set</span><span class="br0">&#40;</span>list2<span class="br0">&#41;</span><br />
t3_stop = <span class="kw3">time</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<br />
<br />
<span class="co1"># Results</span><br />
<span class="kw1">print</span> <span class="st0">&quot;Slow algorithm: &nbsp;%.5f seconds.&quot;</span> <span class="sy0">%</span><span class="br0">&#40;</span>t1_stop - t1_start<span class="br0">&#41;</span><br />
<span class="kw1">print</span> <span class="st0">&quot;Fast algorithm: &nbsp;%.5f seconds.&quot;</span> <span class="sy0">%</span><span class="br0">&#40;</span>t2_stop - t2_start<span class="br0">&#41;</span><br />
<span class="kw1">print</span> <span class="st0">&quot;Joern algorithm: %.5f seconds.&quot;</span> <span class="sy0">%</span><span class="br0">&#40;</span>t3_stop - t3_start<span class="br0">&#41;</span><br />
<span class="kw1">print</span> <span class="st0">&quot;Same result: &nbsp; &nbsp;&quot;</span>, shared1 == shared2 == shared3</div></td></tr></tbody></table></div>
<p>Although not shown here both methods do not only work on numbers, but on strings, or anything else that is sortable too&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=263</wfw:commentRss>
		</item>
		<item>
		<title>Letztens im Milchschaum:</title>
		<link>http://g3cko.org/wordpress/?p=252</link>
		<comments>http://g3cko.org/wordpress/?p=252#comments</comments>
		<pubDate>Mon, 07 Dec 2009 10:57:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Photo]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=252</guid>
		<description><![CDATA[Kaffeesatz lesen ist ja ein alter Hut, aber manchmal offenbart sich die Zukunft auch im Milchschaum. Ich sehe, ich sehe:

Ich sehe ein Eichhörnchen! Die Zukunft meint es gut mit Ihnen und hält ein Eichhörnchen bereit.
]]></description>
			<content:encoded><![CDATA[<p>Kaffeesatz lesen ist ja ein alter Hut, aber manchmal offenbart sich die Zukunft auch im Milchschaum. Ich sehe, ich sehe:<br />
<a href="http://g3cko.org/wordpress/wp-content/uploads//2009/12/eichhoernchen.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/12/26082009035.jpg" width="400" height="286" class="alignnone size-thumbnail wp-image-253" /></a><br />
Ich sehe ein Eichhörnchen! Die Zukunft meint es gut mit Ihnen und hält ein Eichhörnchen bereit.</p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=252</wfw:commentRss>
		</item>
		<item>
		<title>Say cheeeeeeese!</title>
		<link>http://g3cko.org/wordpress/?p=247</link>
		<comments>http://g3cko.org/wordpress/?p=247#comments</comments>
		<pubDate>Sun, 08 Nov 2009 12:11:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Photo]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=247</guid>
		<description><![CDATA[This is the tip of a ballpoint pen&#8230;
I love my Macro lens 

]]></description>
			<content:encoded><![CDATA[<p>This is the tip of a ballpoint pen&#8230;<br />
I love my Macro lens <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<a href="http://g3cko.org/wordpress/wp-content/uploads//2009/11/dsc03420.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/11/dsc03420.jpg" alt="Self portrait on a ballpoint pen" title="Self portrait on a ballpoint pen" width="400" height="233" class="alignnone size-thumbnail wp-image-248" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=247</wfw:commentRss>
		</item>
		<item>
		<title>Ich habe Land geschaffen&#8230;</title>
		<link>http://g3cko.org/wordpress/?p=234</link>
		<comments>http://g3cko.org/wordpress/?p=234#comments</comments>
		<pubDate>Sat, 24 Oct 2009 19:45:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=234</guid>
		<description><![CDATA[Hier mein neustes kleines Projekt:
Eine kleine Agenten-Simulation. Das ganze besteht aus einer Server/Client Architektur. Eine Welt in die sich per Socket Agenten einloggen können. Natürlich gibt es Server und Client in Python, aaaaber&#8230; man kann die Agenten auch per netcat kreieren und steuern, wie man im Bild erkennen kann 
Man kann mittels eines Bildes die [...]]]></description>
			<content:encoded><![CDATA[<p>Hier mein neustes kleines Projekt:<br />
Eine kleine Agenten-Simulation. Das ganze besteht aus einer Server/Client Architektur. Eine Welt in die sich per Socket Agenten einloggen können. Natürlich gibt es Server und Client in Python, aaaaber&#8230; man kann die Agenten auch per netcat kreieren und steuern, wie man im Bild erkennen kann <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Man kann mittels eines Bildes die Wände der Welt definieren, die von den Agenten erkannt werden. Die Jungs kollidieren auch schon mit den Wänden, aber noch nicht unter einander.<br />
<a href="http://g3cko.org/wordpress/wp-content/uploads//2009/10/screenshot.png"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/10/screenshot.png" alt="Simulation" title="Kleine Roboter Welt" width="400" height="366" class="alignnone size-thumbnail wp-image-173" /></a><br />
Falls jemand Teile davon gebrauchen kann, oder den Code weiterentwickeln will: Fühlt euch frei den Code nach gut Dünken zu nutzen (quasi MIT-Lizenz). <a href="http://g3cko.org/DUMP/LittleRobots.tar.gz">Hier gehts zum Download.</a><br />
Der Code ist dokumentiert und eine README gibt&#8217;s auch, die die API und die Architektur erklärt. Viel Spass <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=234</wfw:commentRss>
		</item>
		<item>
		<title>Spaß mit Bildern</title>
		<link>http://g3cko.org/wordpress/?p=209</link>
		<comments>http://g3cko.org/wordpress/?p=209#comments</comments>
		<pubDate>Thu, 15 Oct 2009 00:41:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=209</guid>
		<description><![CDATA[Bin letztens auf ein interessantes Paper gestoßen:
Das Thema ist, Copy &#38; Paste in Bildern zu erkennen. Also im Prinzip den Einsatz von Photoshops Clone-tool.
Die Grundgedanke ist ganz einfach:
Zuerst werden aus dem Bild alle möglichen 16&#215;16 Pixel großen Unterbilder extrahiert. Jedes Unterbild wird dann diskret Cosinus Transformiert (man schaut quasi welche Cosinus Anteile wie stark in [...]]]></description>
			<content:encoded><![CDATA[<p>Bin letztens auf ein <a href="http://www.ws.binghamton.edu/fridrich/Research/copymove.pdf">interessantes Paper</a> gestoßen:<br />
Das Thema ist, Copy &amp; Paste in Bildern zu erkennen. Also im Prinzip den Einsatz von Photoshops Clone-tool.<br />
Die Grundgedanke ist ganz einfach:<br />
Zuerst werden aus dem Bild alle möglichen 16&#215;16 Pixel großen Unterbilder extrahiert. Jedes Unterbild wird dann diskret Cosinus Transformiert (man schaut quasi welche Cosinus Anteile wie stark in den Unterbildern vorhanden sind) Zum Schluss vergleicht man die Ergebnisse der Transformationen untereinander. Cluster von ähnlichen Transformationen deuten stark auf Copy &amp; Paste hin.</p>
<p><a href="http://www.jgc.org/blog/2008/02/tonight-im-going-to-write-myself-aston.html">Hier</a> hat sich jemand daran versucht das ganze nachzubauen. Ich hab&#8217;s auch probiert&#8230; überaschender Weise in Python <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Allerdings habe ich mich aus Gründen der Performanz gegen eine selbst geschriebene DCT und für numPy&#8217;s FFT entschieden. Es funktioniert, aber das Ergebnis überzeugt mich noch nicht so recht&#8230; Dafür habe ich mich in diesem Rahmen mal mit der Image-Library auseinander gesetzt und jetzt kann ich Bilder invertieren <img src='http://g3cko.org/wordpress/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;width:560px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br /></div></td><td><div class="python codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="kw1">from</span> PIL <span class="kw1">import</span> Image,ImageOps<br />
<span class="kw1">from</span> <span class="kw3">sys</span> <span class="kw1">import</span> argv<br />
<br />
<span class="co1"># open the image</span><br />
filename = argv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><br />
im = Image.<span class="kw2">open</span><span class="br0">&#40;</span>filename<span class="br0">&#41;</span><br />
w,h = im.<span class="me1">size</span><br />
<br />
<span class="co1"># read the pixel data in a list</span><br />
data = <span class="kw2">list</span><span class="br0">&#40;</span>im.<span class="me1">getdata</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<br />
<span class="co1"># invert each pixel</span><br />
counter = <span class="nu0">0</span><br />
<span class="kw1">for</span> y <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">0</span>,h<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; <span class="kw1">for</span> x <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">0</span>,w<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; RGBs = data<span class="br0">&#91;</span>counter<span class="br0">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; counter += <span class="nu0">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">putpixel</span><span class="br0">&#40;</span><span class="br0">&#40;</span>x,y<span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">255</span>-RGBs<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="nu0">255</span>-RGBs<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, <span class="nu0">255</span>-RGBs<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<br />
<span class="co1"># come up with a good name</span><br />
tmp = filename.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">'.'</span><span class="br0">&#41;</span><br />
tmp.<span class="me1">pop</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1"># kick file-extension</span><br />
outputName = <span class="st0">''</span><br />
<span class="kw1">for</span> part <span class="kw1">in</span> tmp: <span class="co1"># In case there is a '.' in the name...</span><br />
&nbsp; &nbsp; outputName += part<br />
&nbsp; &nbsp; outputName += <span class="st0">'_inverted.png'</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># save the inverted image</span><br />
&nbsp; &nbsp; im.<span class="me1">save</span><span class="br0">&#40;</span>outputName<span class="br0">&#41;</span></div></td></tr></tbody></table></div>
<p>Hier ein Beispiel:</p>
<p><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/10/oiginal.jpg" alt="original" width="200" height="180" /></p>
<p><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/10/original_inverted.png" alt="original_inverted" width="200" height="180" /></p>
<p>Einfach den Code unter Invert.py speichern und im Terminal folgendes tippen:</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;width:560px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">python Invert.py original.jpg</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=209</wfw:commentRss>
		</item>
		<item>
		<title>Der Barcode hatte Geburtstag</title>
		<link>http://g3cko.org/wordpress/?p=206</link>
		<comments>http://g3cko.org/wordpress/?p=206#comments</comments>
		<pubDate>Wed, 14 Oct 2009 23:48:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=206</guid>
		<description><![CDATA[Letztens hatte der Barcode Geburtstag und die Jungs von Hackaday.com hatten eine kleine Challange aufgesetzt. Es ging darum einen Barcode zu entziffern&#8230;
Das hat mein Interesse geweckt! Hier ist meine Lösung dazu und noch zwei Barcodes zum rumspielen&#8230; Enjoy =)


123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175#!/usr/bin/python

import Image
from sys import argv

# lookup tables for the 3 different charsets
CharSetA = &#160;&#123;
&#160; &#160; ' ':0, [...]]]></description>
			<content:encoded><![CDATA[<p>Letztens hatte der Barcode Geburtstag und die Jungs von <a href="http://hackaday.com">Hackaday.com</a> hatten eine kleine <a href="http://hackaday.com/2009/10/07/barcode-challenge/">Challange</a> aufgesetzt. Es ging darum einen Barcode zu entziffern&#8230;<br />
Das hat mein Interesse geweckt! Hier ist meine Lösung dazu und noch zwei Barcodes zum rumspielen&#8230; Enjoy =)</p>
<p><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/10/wikipedia.jpg" alt="wikipedia Barcode" title="wikipedia Barcode" width="241" height="58" /></p>
<p><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/10/hackaday.jpg" alt="hackaday Barcode" title="hackaday Barcode" width="470" height="188" /></p>
<div class="codecolorer-container python twitlight" style="overflow:auto;white-space:nowrap;width:560px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br /></div></td><td><div class="python codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">#!/usr/bin/python</span><br />
<br />
<span class="kw1">import</span> Image<br />
<span class="kw1">from</span> <span class="kw3">sys</span> <span class="kw1">import</span> argv<br />
<br />
<span class="co1"># lookup tables for the 3 different charsets</span><br />
CharSetA = &nbsp;<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="st0">' '</span>:<span class="nu0">0</span>, <span class="st0">'!'</span>:<span class="nu0">1</span>, <span class="st0">'&quot;'</span>:<span class="nu0">2</span>, <span class="st0">'#'</span>:<span class="nu0">3</span>, <span class="st0">'$'</span>:<span class="nu0">4</span>, <span class="st0">'%'</span>:<span class="nu0">5</span>, <span class="st0">'&amp;'</span>:<span class="nu0">6</span>, <span class="st0">&quot;'&quot;</span>:<span class="nu0">7</span>,<br />
&nbsp; &nbsp; <span class="st0">'('</span>:<span class="nu0">8</span>, <span class="st0">')'</span>:<span class="nu0">9</span>, <span class="st0">'*'</span>:<span class="nu0">10</span>, <span class="st0">'+'</span>:<span class="nu0">11</span>, <span class="st0">','</span>:<span class="nu0">12</span>, <span class="st0">'-'</span>:<span class="nu0">13</span>, <span class="st0">'.'</span>:<span class="nu0">14</span>, <span class="st0">'/'</span>:<span class="nu0">15</span>,<br />
&nbsp; &nbsp; <span class="st0">'0'</span>:<span class="nu0">16</span>, <span class="st0">'1'</span>:<span class="nu0">17</span>, <span class="st0">'2'</span>:<span class="nu0">18</span>, <span class="st0">'3'</span>:<span class="nu0">19</span>, <span class="st0">'4'</span>:<span class="nu0">20</span>, <span class="st0">'5'</span>:<span class="nu0">21</span>, <span class="st0">'6'</span>:<span class="nu0">22</span>, <span class="st0">'7'</span>:<span class="nu0">23</span>,<br />
&nbsp; &nbsp; <span class="st0">'8'</span>:<span class="nu0">24</span>, <span class="st0">'9'</span>:<span class="nu0">25</span>, <span class="st0">':'</span>:<span class="nu0">26</span>, <span class="st0">';'</span>:<span class="nu0">27</span>, <span class="st0">'&lt;'</span>:<span class="nu0">28</span>, <span class="st0">'='</span>:<span class="nu0">29</span>, <span class="st0">'&gt;'</span>:<span class="nu0">30</span>, <span class="st0">'?'</span>:<span class="nu0">31</span>,<br />
&nbsp; &nbsp; <span class="st0">'@'</span>:<span class="nu0">32</span>, <span class="st0">'A'</span>:<span class="nu0">33</span>, <span class="st0">'B'</span>:<span class="nu0">34</span>, <span class="st0">'C'</span>:<span class="nu0">35</span>, <span class="st0">'D'</span>:<span class="nu0">36</span>, <span class="st0">'E'</span>:<span class="nu0">37</span>, <span class="st0">'F'</span>:<span class="nu0">38</span>, <span class="st0">'G'</span>:<span class="nu0">39</span>,<br />
&nbsp; &nbsp; <span class="st0">'H'</span>:<span class="nu0">40</span>, <span class="st0">'I'</span>:<span class="nu0">41</span>, <span class="st0">'J'</span>:<span class="nu0">42</span>, <span class="st0">'K'</span>:<span class="nu0">43</span>, <span class="st0">'L'</span>:<span class="nu0">44</span>, <span class="st0">'M'</span>:<span class="nu0">45</span>, <span class="st0">'N'</span>:<span class="nu0">46</span>, <span class="st0">'O'</span>:<span class="nu0">47</span>,<br />
&nbsp; &nbsp; <span class="st0">'P'</span>:<span class="nu0">48</span>, <span class="st0">'Q'</span>:<span class="nu0">49</span>, <span class="st0">'R'</span>:<span class="nu0">50</span>, <span class="st0">'S'</span>:<span class="nu0">51</span>, <span class="st0">'T'</span>:<span class="nu0">52</span>, <span class="st0">'U'</span>:<span class="nu0">53</span>, <span class="st0">'V'</span>:<span class="nu0">54</span>, <span class="st0">'W'</span>:<span class="nu0">55</span>,<br />
&nbsp; &nbsp; <span class="st0">'X'</span>:<span class="nu0">56</span>, <span class="st0">'Y'</span>:<span class="nu0">57</span>, <span class="st0">'Z'</span>:<span class="nu0">58</span>, <span class="st0">'['</span>:<span class="nu0">59</span>, <span class="st0">'<span class="es0">\'</span>:60, '</span><span class="br0">&#93;</span><span class="st0">':61, '</span>^<span class="st0">':62, '</span>_<span class="st0">':63,<br />
&nbsp; &nbsp; '</span>\x00<span class="st0">':64, '</span>\x01<span class="st0">':65, '</span>\x02<span class="st0">':66, '</span>\x03<span class="st0">':67, '</span>\x04<span class="st0">':68, '</span>\x05<span class="st0">':69, '</span>\x06<span class="st0">':70, '</span>\x07<span class="st0">':71,<br />
&nbsp; &nbsp; '</span>\x08<span class="st0">':72, '</span>\x09<span class="st0">':73, '</span>\x0A<span class="st0">':74, '</span>\x0B<span class="st0">':75, '</span>\x0C<span class="st0">':76, '</span>\x0D<span class="st0">':77, '</span>\x0E<span class="st0">':78, '</span>\x0F<span class="st0">':79,<br />
&nbsp; &nbsp; '</span>\x10<span class="st0">':80, '</span>\x11<span class="st0">':81, '</span>\x12<span class="st0">':82, '</span>\x13<span class="st0">':83, '</span>\x14<span class="st0">':84, '</span>\x15<span class="st0">':85, '</span>\x16<span class="st0">':86, '</span>\x17<span class="st0">':87,<br />
&nbsp; &nbsp; '</span>\x18<span class="st0">':88, '</span>\x19<span class="st0">':89, '</span>\x1A<span class="st0">':90, '</span>\x1B<span class="st0">':91, '</span>\x1C<span class="st0">':92, '</span>\x1D<span class="st0">':93, '</span>\x1E<span class="st0">':94, '</span>\x1F<span class="st0">':95,<br />
&nbsp; &nbsp; '</span>FNC3<span class="st0">':96, '</span>FNC2<span class="st0">':97, '</span>SHIFT<span class="st0">':98, '</span>Code C<span class="st0">':99, '</span>Code B<span class="st0">':100, '</span>FNC4<span class="st0">':101, '</span>FNC1<span class="st0">':102, '</span>START A<span class="st0">':103,<br />
&nbsp; &nbsp; '</span>START B<span class="st0">':104, '</span>START C<span class="st0">':105, '</span> STOP<span class="st0">':106<br />
}<br />
<br />
CharSetB = {<br />
&nbsp; &nbsp; '</span> <span class="st0">':0, '</span><span class="sy0">!</span><span class="st0">':1, '</span><span class="st0">&quot;':2, '#':3, '$':4, '%':5, '&amp;':6, &quot;</span><span class="st0">'&quot;:7,<br />
&nbsp; &nbsp; '</span><span class="br0">&#40;</span><span class="st0">':8, '</span><span class="br0">&#41;</span><span class="st0">':9, '</span><span class="sy0">*</span><span class="st0">':10, '</span>+<span class="st0">':11, '</span>,<span class="st0">':12, '</span>-<span class="st0">':13, '</span>.<span class="st0">':14, '</span>/<span class="st0">':15,<br />
&nbsp; &nbsp; '</span><span class="nu0">0</span><span class="st0">':16, '</span><span class="nu0">1</span><span class="st0">':17, '</span><span class="nu0">2</span><span class="st0">':18, '</span><span class="nu0">3</span><span class="st0">':19, '</span><span class="nu0">4</span><span class="st0">':20, '</span><span class="nu0">5</span><span class="st0">':21, '</span><span class="nu0">6</span><span class="st0">':22, '</span><span class="nu0">7</span><span class="st0">':23,<br />
&nbsp; &nbsp; '</span><span class="nu0">8</span><span class="st0">':24, '</span><span class="nu0">9</span><span class="st0">':25, '</span>:<span class="st0">':26, '</span><span class="sy0">;</span><span class="st0">':27, '</span><span class="sy0">&lt;</span><span class="st0">':28, '</span>=<span class="st0">':29, '</span><span class="sy0">&gt;</span><span class="st0">':30, '</span><span class="sy0">?</span><span class="st0">':31,<br />
&nbsp; &nbsp; '</span>@<span class="st0">':32, '</span>A<span class="st0">':33, '</span>B<span class="st0">':34, '</span>C<span class="st0">':35, '</span>D<span class="st0">':36, '</span>E<span class="st0">':37, '</span>F<span class="st0">':38, '</span>G<span class="st0">':39,<br />
&nbsp; &nbsp; '</span>H<span class="st0">':40, '</span>I<span class="st0">':41, '</span>J<span class="st0">':42, '</span>K<span class="st0">':43, '</span>L<span class="st0">':44, '</span>M<span class="st0">':45, '</span>N<span class="st0">':46, '</span>O<span class="st0">':47,<br />
&nbsp; &nbsp; '</span>P<span class="st0">':48, '</span>Q<span class="st0">':49, '</span>R<span class="st0">':50, '</span>S<span class="st0">':51, '</span>T<span class="st0">':52, '</span>U<span class="st0">':53, '</span>V<span class="st0">':54, '</span>W<span class="st0">':55,<br />
&nbsp; &nbsp; '</span>X<span class="st0">':56, '</span>Y<span class="st0">':57, '</span>Z<span class="st0">':58, '</span><span class="br0">&#91;</span><span class="st0">':59, '</span>\<span class="st0">':60, '</span><span class="br0">&#93;</span><span class="st0">':61, '</span>^<span class="st0">':62, '</span>_<span class="st0">':63,<br />
&nbsp; &nbsp; '</span><span class="st0">' :64, '</span>a<span class="st0">':65, '</span>b<span class="st0">':66, '</span>c<span class="st0">':67, '</span>d<span class="st0">':68, '</span>e<span class="st0">':69, '</span>f<span class="st0">':70, '</span>g<span class="st0">':71,<br />
&nbsp; &nbsp; '</span>h<span class="st0">':72, '</span>i<span class="st0">':73, '</span>j<span class="st0">':74, '</span>k<span class="st0">':75, '</span>l<span class="st0">':76, '</span>m<span class="st0">':77, '</span>n<span class="st0">':78, '</span>o<span class="st0">':79,<br />
&nbsp; &nbsp; '</span>p<span class="st0">':80, '</span>q<span class="st0">':81, '</span>r<span class="st0">':82, '</span>s<span class="st0">':83, '</span>t<span class="st0">':84, '</span>u<span class="st0">':85, '</span>v<span class="st0">':86, '</span>w<span class="st0">':87,<br />
&nbsp; &nbsp; '</span>x<span class="st0">':88, '</span>y<span class="st0">':89, '</span>z<span class="st0">':90, '</span><span class="br0">&#123;</span><span class="st0">':91, '</span>|<span class="st0">':92, '</span><span class="br0">&#125;</span><span class="st0">':93, '</span>~<span class="st0">':94, '</span>\x7F<span class="st0">':95,<br />
&nbsp; &nbsp; '</span>FNC3<span class="st0">':96, '</span>FNC2<span class="st0">':97, '</span>SHIFT<span class="st0">':98, '</span>Code C<span class="st0">':99, '</span>FNC4<span class="st0">':100, '</span>Code A<span class="st0">':101, '</span>FNC1<span class="st0">':102, '</span>START A<span class="st0">':103,<br />
&nbsp; &nbsp; '</span>START B<span class="st0">':104, '</span>START C<span class="st0">':105, '</span> STOP<span class="st0">':106<br />
}<br />
<br />
CharSetC = {<br />
&nbsp; &nbsp; '</span>00<span class="st0">':0, '</span>01<span class="st0">':1, '</span>02<span class="st0">':2, '</span>03<span class="st0">':3, '</span>04<span class="st0">':4, '</span>05<span class="st0">':5, '</span>06<span class="st0">':6, '</span>07<span class="st0">':7,<br />
&nbsp; &nbsp; '</span>08<span class="st0">':8, '</span>09<span class="st0">':9, '</span><span class="nu0">10</span><span class="st0">':10, '</span><span class="nu0">11</span><span class="st0">':11, '</span><span class="nu0">12</span><span class="st0">':12, '</span><span class="nu0">13</span><span class="st0">':13, '</span><span class="nu0">14</span><span class="st0">':14, '</span><span class="nu0">15</span><span class="st0">':15,<br />
&nbsp; &nbsp; '</span><span class="nu0">16</span><span class="st0">':16, '</span><span class="nu0">17</span><span class="st0">':17, '</span><span class="nu0">18</span><span class="st0">':18, '</span><span class="nu0">19</span><span class="st0">':19, '</span><span class="nu0">20</span><span class="st0">':20, '</span><span class="nu0">21</span><span class="st0">':21, '</span><span class="nu0">22</span><span class="st0">':22, '</span><span class="nu0">23</span><span class="st0">':23,<br />
&nbsp; &nbsp; '</span><span class="nu0">24</span><span class="st0">':24, '</span><span class="nu0">25</span><span class="st0">':25, '</span><span class="nu0">26</span><span class="st0">':26, '</span><span class="nu0">27</span><span class="st0">':27, '</span><span class="nu0">28</span><span class="st0">':28, '</span><span class="nu0">29</span><span class="st0">':29, '</span><span class="nu0">30</span><span class="st0">':30, '</span><span class="nu0">31</span><span class="st0">':31,<br />
&nbsp; &nbsp; '</span><span class="nu0">32</span><span class="st0">':32, '</span><span class="nu0">33</span><span class="st0">':33, '</span><span class="nu0">34</span><span class="st0">':34, '</span><span class="nu0">35</span><span class="st0">':35, '</span><span class="nu0">36</span><span class="st0">':36, '</span><span class="nu0">37</span><span class="st0">':37, '</span><span class="nu0">38</span><span class="st0">':38, '</span><span class="nu0">39</span><span class="st0">':39,<br />
&nbsp; &nbsp; '</span><span class="nu0">40</span><span class="st0">':40, '</span><span class="nu0">41</span><span class="st0">':41, '</span><span class="nu0">42</span><span class="st0">':42, '</span><span class="nu0">43</span><span class="st0">':43, '</span><span class="nu0">44</span><span class="st0">':44, '</span><span class="nu0">45</span><span class="st0">':45, '</span><span class="nu0">46</span><span class="st0">':46, '</span><span class="nu0">47</span><span class="st0">':47,<br />
&nbsp; &nbsp; '</span><span class="nu0">48</span><span class="st0">':48, '</span><span class="nu0">49</span><span class="st0">':49, '</span><span class="nu0">50</span><span class="st0">':50, '</span><span class="nu0">51</span><span class="st0">':51, '</span><span class="nu0">52</span><span class="st0">':52, '</span><span class="nu0">53</span><span class="st0">':53, '</span><span class="nu0">54</span><span class="st0">':54, '</span><span class="nu0">55</span><span class="st0">':55,<br />
&nbsp; &nbsp; '</span><span class="nu0">56</span><span class="st0">':56, '</span><span class="nu0">57</span><span class="st0">':57, '</span><span class="nu0">58</span><span class="st0">':58, '</span><span class="nu0">59</span><span class="st0">':59, '</span><span class="nu0">60</span><span class="st0">':60, '</span><span class="nu0">61</span><span class="st0">':61, '</span><span class="nu0">62</span><span class="st0">':62, '</span><span class="nu0">63</span><span class="st0">':63,<br />
&nbsp; &nbsp; '</span><span class="nu0">64</span><span class="st0">':64, '</span><span class="nu0">65</span><span class="st0">':65, '</span><span class="nu0">66</span><span class="st0">':66, '</span><span class="nu0">67</span><span class="st0">':67, '</span><span class="nu0">68</span><span class="st0">':68, '</span><span class="nu0">69</span><span class="st0">':69, '</span><span class="nu0">70</span><span class="st0">':70, '</span><span class="nu0">71</span><span class="st0">':71,<br />
&nbsp; &nbsp; '</span><span class="nu0">72</span><span class="st0">':72, '</span><span class="nu0">73</span><span class="st0">':73, '</span><span class="nu0">74</span><span class="st0">':74, '</span><span class="nu0">75</span><span class="st0">':75, '</span><span class="nu0">76</span><span class="st0">':76, '</span><span class="nu0">77</span><span class="st0">':77, '</span><span class="nu0">78</span><span class="st0">':78, '</span><span class="nu0">79</span><span class="st0">':79,<br />
&nbsp; &nbsp; '</span><span class="nu0">80</span><span class="st0">':80, '</span><span class="nu0">81</span><span class="st0">':81, '</span><span class="nu0">82</span><span class="st0">':82, '</span><span class="nu0">83</span><span class="st0">':83, '</span><span class="nu0">84</span><span class="st0">':84, '</span><span class="nu0">85</span><span class="st0">':85, '</span><span class="nu0">86</span><span class="st0">':86, '</span><span class="nu0">87</span><span class="st0">':87,<br />
&nbsp; &nbsp; '</span><span class="nu0">88</span><span class="st0">':88, '</span><span class="nu0">89</span><span class="st0">':89, '</span><span class="nu0">90</span><span class="st0">':90, '</span><span class="nu0">91</span><span class="st0">':91, '</span><span class="nu0">92</span><span class="st0">':92, '</span><span class="nu0">93</span><span class="st0">':93, '</span><span class="nu0">94</span><span class="st0">':94, '</span><span class="nu0">95</span><span class="st0">':95,<br />
&nbsp; &nbsp; '</span><span class="nu0">96</span><span class="st0">':96, '</span><span class="nu0">97</span><span class="st0">':97, '</span><span class="nu0">98</span><span class="st0">':98, '</span><span class="nu0">99</span><span class="st0">':99, '</span>Code B<span class="st0">':100, '</span>Code A<span class="st0">':101, '</span>FNC1<span class="st0">':102, '</span>START A<span class="st0">':103,<br />
&nbsp; &nbsp; '</span>START B<span class="st0">':104, '</span>START C<span class="st0">':105, '</span> STOP<span class="st0">':106<br />
}<br />
<br />
# The barcode and the according number in the according char-set<br />
ValueEncodings = {<br />
&nbsp; &nbsp; 0:'</span><span class="nu0">11011001100</span><span class="st0">', &nbsp;1:'</span><span class="nu0">11001101100</span><span class="st0">', &nbsp;2:'</span><span class="nu0">11001100110</span><span class="st0">', <br />
&nbsp; &nbsp; 3:'</span><span class="nu0">10010011000</span><span class="st0">', &nbsp;4:'</span><span class="nu0">10010001100</span><span class="st0">', &nbsp;5:'</span><span class="nu0">10001001100</span><span class="st0">',<br />
&nbsp; &nbsp; 6:'</span><span class="nu0">10011001000</span><span class="st0">', &nbsp;7:'</span><span class="nu0">10011000100</span><span class="st0">', &nbsp;8:'</span><span class="nu0">10001100100</span><span class="st0">',<br />
&nbsp; &nbsp; 9:'</span><span class="nu0">11001001000</span><span class="st0">', 10:'</span><span class="nu0">11001000100</span><span class="st0">', 11:'</span><span class="nu0">11000100100</span><span class="st0">',<br />
&nbsp; &nbsp; 12:'</span><span class="nu0">10110011100</span><span class="st0">', 13:'</span><span class="nu0">10011011100</span><span class="st0">', 14:'</span><span class="nu0">10011001110</span><span class="st0">',<br />
&nbsp; &nbsp; 15:'</span><span class="nu0">10111001100</span><span class="st0">', 16:'</span><span class="nu0">10011101100</span><span class="st0">', 17:'</span><span class="nu0">10011100110</span><span class="st0">',<br />
&nbsp; &nbsp; 18:'</span><span class="nu0">11001110010</span><span class="st0">', 19:'</span><span class="nu0">11001011100</span><span class="st0">', 20:'</span><span class="nu0">11001001110</span><span class="st0">',<br />
&nbsp; &nbsp; 21:'</span><span class="nu0">11011100100</span><span class="st0">', 22:'</span><span class="nu0">11001110100</span><span class="st0">', 23:'</span><span class="nu0">11101101110</span><span class="st0">',<br />
&nbsp; &nbsp; 24:'</span><span class="nu0">11101001100</span><span class="st0">', 25:'</span><span class="nu0">11100101100</span><span class="st0">', 26:'</span><span class="nu0">11100100110</span><span class="st0">',<br />
&nbsp; &nbsp; 27:'</span><span class="nu0">11101100100</span><span class="st0">', 28:'</span><span class="nu0">11100110100</span><span class="st0">', 29:'</span><span class="nu0">11100110010</span><span class="st0">',<br />
&nbsp; &nbsp; 30:'</span><span class="nu0">11011011000</span><span class="st0">', 31:'</span><span class="nu0">11011000110</span><span class="st0">', 32:'</span><span class="nu0">11000110110</span><span class="st0">',<br />
&nbsp; &nbsp; 33:'</span><span class="nu0">10100011000</span><span class="st0">', 34:'</span><span class="nu0">10001011000</span><span class="st0">', 35:'</span><span class="nu0">10001000110</span><span class="st0">',<br />
&nbsp; &nbsp; 36:'</span><span class="nu0">10110001000</span><span class="st0">', 37:'</span><span class="nu0">10001101000</span><span class="st0">', 38:'</span><span class="nu0">10001100010</span><span class="st0">',<br />
&nbsp; &nbsp; 39:'</span><span class="nu0">11010001000</span><span class="st0">', 40:'</span><span class="nu0">11000101000</span><span class="st0">', 41:'</span><span class="nu0">11000100010</span><span class="st0">',<br />
&nbsp; &nbsp; 42:'</span><span class="nu0">10110111000</span><span class="st0">', 43:'</span><span class="nu0">10110001110</span><span class="st0">', 44:'</span><span class="nu0">10001101110</span><span class="st0">',<br />
&nbsp; &nbsp; 45:'</span><span class="nu0">10111011000</span><span class="st0">', 46:'</span><span class="nu0">10111000110</span><span class="st0">', 47:'</span><span class="nu0">10001110110</span><span class="st0">',<br />
&nbsp; &nbsp; 48:'</span><span class="nu0">11101110110</span><span class="st0">', 49:'</span><span class="nu0">11010001110</span><span class="st0">', 50:'</span><span class="nu0">11000101110</span><span class="st0">',<br />
&nbsp; &nbsp; 51:'</span><span class="nu0">11011101000</span><span class="st0">', 52:'</span><span class="nu0">11011100010</span><span class="st0">', 53:'</span><span class="nu0">11011101110</span><span class="st0">',<br />
&nbsp; &nbsp; 54:'</span><span class="nu0">11101011000</span><span class="st0">', 55:'</span><span class="nu0">11101000110</span><span class="st0">', 56:'</span><span class="nu0">11100010110</span><span class="st0">',<br />
&nbsp; &nbsp; 57:'</span><span class="nu0">11101101000</span><span class="st0">', 58:'</span><span class="nu0">11101100010</span><span class="st0">', 59:'</span><span class="nu0">11100011010</span><span class="st0">',<br />
&nbsp; &nbsp; 60:'</span><span class="nu0">11101111010</span><span class="st0">', 61:'</span><span class="nu0">11001000010</span><span class="st0">', 62:'</span><span class="nu0">11110001010</span><span class="st0">',<br />
&nbsp; &nbsp; 63:'</span><span class="nu0">10100110000</span><span class="st0">', 64:'</span><span class="nu0">10100001100</span><span class="st0">', 65:'</span><span class="nu0">10010110000</span><span class="st0">',<br />
&nbsp; &nbsp; 66:'</span><span class="nu0">10010000110</span><span class="st0">', 67:'</span><span class="nu0">10000101100</span><span class="st0">', 68:'</span><span class="nu0">10000100110</span><span class="st0">',<br />
&nbsp; &nbsp; 69:'</span><span class="nu0">10110010000</span><span class="st0">', 70:'</span><span class="nu0">10110000100</span><span class="st0">', 71:'</span><span class="nu0">10011010000</span><span class="st0">',<br />
&nbsp; &nbsp; 72:'</span><span class="nu0">10011000010</span><span class="st0">', 73:'</span><span class="nu0">10000110100</span><span class="st0">', 74:'</span><span class="nu0">10000110010</span><span class="st0">',<br />
&nbsp; &nbsp; 75:'</span><span class="nu0">11000010010</span><span class="st0">', 76:'</span><span class="nu0">11001010000</span><span class="st0">', 77:'</span><span class="nu0">11110111010</span><span class="st0">',<br />
&nbsp; &nbsp; 78:'</span><span class="nu0">11000010100</span><span class="st0">', 79:'</span><span class="nu0">10001111010</span><span class="st0">', 80:'</span><span class="nu0">10100111100</span><span class="st0">',<br />
&nbsp; &nbsp; 81:'</span><span class="nu0">10010111100</span><span class="st0">', 82:'</span><span class="nu0">10010011110</span><span class="st0">', 83:'</span><span class="nu0">10111100100</span><span class="st0">',<br />
&nbsp; &nbsp; 84:'</span><span class="nu0">10011110100</span><span class="st0">', 85:'</span><span class="nu0">10011110010</span><span class="st0">', 86:'</span><span class="nu0">11110100100</span><span class="st0">',<br />
&nbsp; &nbsp; 87:'</span><span class="nu0">11110010100</span><span class="st0">', 88:'</span><span class="nu0">11110010010</span><span class="st0">', 89:'</span><span class="nu0">11011011110</span><span class="st0">',<br />
&nbsp; &nbsp; 90:'</span><span class="nu0">11011110110</span><span class="st0">', 91:'</span><span class="nu0">11110110110</span><span class="st0">', 92:'</span><span class="nu0">10101111000</span><span class="st0">',<br />
&nbsp; &nbsp; 93:'</span><span class="nu0">10100011110</span><span class="st0">', 94:'</span><span class="nu0">10001011110</span><span class="st0">', 95:'</span><span class="nu0">10111101000</span><span class="st0">',<br />
&nbsp; &nbsp; 96:'</span><span class="nu0">10111100010</span><span class="st0">', 97:'</span><span class="nu0">11110101000</span><span class="st0">', 98:'</span><span class="nu0">11110100010</span><span class="st0">',<br />
&nbsp; &nbsp; 99:'</span><span class="nu0">10111011110</span><span class="st0">',100:'</span><span class="nu0">10111101110</span><span class="st0">',101:'</span><span class="nu0">11101011110</span><span class="st0">',<br />
&nbsp; &nbsp; 102:'</span><span class="nu0">11110101110</span><span class="st0">',103:'</span><span class="nu0">11010000100</span><span class="st0">',104:'</span><span class="nu0">11010010000</span><span class="st0">',<br />
&nbsp; &nbsp; 105:'</span><span class="nu0">11010011100</span><span class="st0">',106:'</span><span class="nu0">11000111010</span><span class="st0">'<br />
}# '</span><br />
<br />
<span class="co1"># swap the dictionaries</span><br />
<span class="kw1">def</span> swap_dictionary<span class="br0">&#40;</span>original_dict<span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; <span class="co1"># old version</span><br />
<span class="co1"># &nbsp; return dict( [(v, k) for (k, v) in original_dict.iteritems()] )</span><br />
&nbsp; &nbsp; <span class="co1"># refined version... with generator expressions...thx J</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">dict</span><span class="br0">&#40;</span> <span class="br0">&#40;</span>v, k<span class="br0">&#41;</span> <span class="kw1">for</span> <span class="br0">&#40;</span>k, v<span class="br0">&#41;</span> <span class="kw1">in</span> original_dict.<span class="me1">iteritems</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><br />
<br />
<span class="co1"># I found these encoding tables on the web...</span><br />
<span class="co1"># sadly the key:value pairs are the wrong way for my need</span><br />
<span class="co1"># so i swap them =)</span><br />
CharSetA = swap_dictionary<span class="br0">&#40;</span>CharSetA<span class="br0">&#41;</span><br />
CharSetB = swap_dictionary<span class="br0">&#40;</span>CharSetB<span class="br0">&#41;</span><br />
CharSetC = swap_dictionary<span class="br0">&#40;</span>CharSetC<span class="br0">&#41;</span><br />
ValueEncodings = swap_dictionary<span class="br0">&#40;</span>ValueEncodings<span class="br0">&#41;</span><br />
<br />
<br />
<span class="co1"># read in image</span><br />
im_file = Image.<span class="kw2">open</span><span class="br0">&#40;</span>argv<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><br />
im = im_file.<span class="me1">getdata</span><span class="br0">&#40;</span><span class="br0">&#41;</span><br />
width = im.<span class="me1">size</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><br />
height = im.<span class="me1">size</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> / <span class="nu0">2</span><br />
<br />
<span class="co1"># convert to 1 pixel high stripe in the middle of the image</span><br />
cropped = im.<span class="me1">crop</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">0</span>,height,width,height+<span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<br />
<span class="co1"># translate to 0's and 1's</span><br />
<span class="kw3">code</span> = <span class="st0">''</span><br />
<span class="kw1">for</span> pixel <span class="kw1">in</span> cropped:<br />
&nbsp; &nbsp; <span class="kw1">try</span>: <span class="co1"># if is RGB picture</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pix = pixel<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; <span class="kw1">except</span>: <span class="co1"># if is greyscale picture</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pix = pixel<br />
&nbsp; &nbsp; <span class="kw1">if</span> pix <span class="sy0">&gt;</span><span class="nu0">200</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; pix = <span class="nu0">0</span><br />
&nbsp; &nbsp; <span class="kw1">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; pix = <span class="nu0">1</span><br />
&nbsp; &nbsp; <span class="kw3">code</span> += <span class="kw2">str</span><span class="br0">&#40;</span>pix<span class="br0">&#41;</span><br />
<br />
<br />
<span class="co1"># remove leading and trailing 0's</span><br />
<span class="kw3">code</span> = <span class="kw3">code</span>.<span class="me1">lstrip</span><span class="br0">&#40;</span><span class="st0">'0'</span><span class="br0">&#41;</span>.<span class="me1">rstrip</span><span class="br0">&#40;</span><span class="st0">'0'</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
<span class="co1"># pop first 11 bits from the code</span><br />
<span class="co1"># these 11 bits stand for a char</span><br />
<span class="kw1">def</span> get_char<span class="br0">&#40;</span><span class="kw3">code</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; char = <span class="kw3">code</span><span class="br0">&#91;</span>:<span class="nu0">11</span><span class="br0">&#93;</span><br />
&nbsp; &nbsp; <span class="kw3">code</span> = <span class="kw3">code</span><span class="br0">&#91;</span><span class="nu0">11</span>:<span class="br0">&#93;</span><br />
&nbsp; &nbsp; <span class="kw1">return</span> char, <span class="kw3">code</span><br />
<br />
<br />
out_buff = <span class="st0">&quot;&quot;</span><br />
<span class="co1"># determine the encoding</span><br />
first, <span class="kw3">code</span> = get_char<span class="br0">&#40;</span><span class="kw3">code</span><span class="br0">&#41;</span><br />
encoding = ValueEncodings<span class="br0">&#91;</span>first<span class="br0">&#93;</span><br />
<br />
<span class="kw1">if</span> encoding == <span class="nu0">103</span>:<br />
&nbsp; &nbsp; charset = CharSetA<br />
&nbsp; &nbsp; out_buff += <span class="st0">'START A '</span><br />
<span class="kw1">elif</span> encoding == <span class="nu0">104</span>:<br />
&nbsp; &nbsp; charset = CharSetB<br />
&nbsp; &nbsp; out_buff += <span class="st0">'START B '</span><br />
<span class="kw1">elif</span> encoding == <span class="nu0">105</span>:<br />
&nbsp; &nbsp; charset = CharSetC<br />
&nbsp; &nbsp; out_buff += <span class="st0">'START C '</span><br />
<span class="kw1">else</span>:<br />
&nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;Encoding unknown&quot;</span><br />
&nbsp; &nbsp; exit<span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><br />
<br />
<br />
<span class="co1"># decypher the message</span><br />
<span class="kw1">while</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">code</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span>= <span class="nu0">11</span><span class="br0">&#41;</span>:<br />
&nbsp; &nbsp; next_char, <span class="kw3">code</span> = get_char<span class="br0">&#40;</span><span class="kw3">code</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; encoding_number = ValueEncodings<span class="br0">&#91;</span>next_char<span class="br0">&#93;</span><br />
&nbsp; &nbsp; out_buff += charset<span class="br0">&#91;</span>encoding_number<span class="br0">&#93;</span><br />
<br />
<span class="co1"># display the message</span><br />
<span class="kw1">print</span> out_buff</div></td></tr></tbody></table></div>
<p>Einfach als barcode.py speichern und von der Konsole aus mit:</p>
<div class="codecolorer-container text twitlight" style="overflow:auto;white-space:nowrap;width:560px"><table cellspacing="0" cellpadding="0"><tbody><tr><td class="line-numbers"><div>1<br /></div></td><td><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">python barcode.py BarcodeBild.jpg</div></td></tr></tbody></table></div>
<p>starten. Das Ganze funktiniert allerdings nur unter bestimmten Voraussetzungen. Der Barcode muss vom Typ 128 sein und das Bild des Barcodes muss eine 1 mit einem ein Pixel breiten Strich kodieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=206</wfw:commentRss>
		</item>
		<item>
		<title>Nachtbild</title>
		<link>http://g3cko.org/wordpress/?p=186</link>
		<comments>http://g3cko.org/wordpress/?p=186#comments</comments>
		<pubDate>Wed, 09 Sep 2009 18:39:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Photo]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=186</guid>
		<description><![CDATA[Hier mal ein Bild mit Langzeitbelichtung vom Stahldrachen an der Feinkost in Leipzig.

]]></description>
			<content:encoded><![CDATA[<p>Hier mal ein Bild mit Langzeitbelichtung vom Stahldrachen an der Feinkost in Leipzig.<br />
<a href="http://g3cko.org/wordpress/wp-content/uploads//2009/09/dsc03062-klein.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/09/dsc03062-klein.jpg" alt="dsc03062-klein" title="dsc03062-klein" width="300" height="207" class="alignnone  size-thumbnail wp-image-187" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=186</wfw:commentRss>
		</item>
		<item>
		<title>1st school day</title>
		<link>http://g3cko.org/wordpress/?p=172</link>
		<comments>http://g3cko.org/wordpress/?p=172#comments</comments>
		<pubDate>Wed, 26 Aug 2009 22:49:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Photo]]></category>

		<guid isPermaLink="false">http://g3cko.org/wordpress/?p=172</guid>
		<description><![CDATA[My little nieces had their first day in school and I took a some pictures.


]]></description>
			<content:encoded><![CDATA[<p>My little nieces had their first day in school and I took a some pictures.</p>
<p><a href="http://g3cko.org/wordpress/wp-content/uploads//2009/08/bild-17.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/08/bild-17.jpg" alt="bild-17" title="bild-17" width="300" height="188" class="alignnone size-thumbnail wp-image-173" /></a></p>
<p><a href="http://g3cko.org/wordpress/wp-content/uploads//2009/08/bild-21.jpg"><img src="http://g3cko.org/wordpress/wp-content/uploads//2009/08/bild-21.jpg" alt="bild-21" title="bild-21" width="300" height="209" class="alignnone size-thumbnail wp-image-174" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://g3cko.org/wordpress/?feed=rss2&amp;p=172</wfw:commentRss>
		</item>
	</channel>
</rss>
