<?xml version="1.0"?>
<rdf:RDF
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:foaf="http://xmlns.com/foaf/0.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://planet.grep.be">
	<title>Planet Grep</title>
	<link>http://planet.grep.be</link>
	<description>Planet Grep - http://planet.grep.be</description>

	<items>
		<rdf:Seq>
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-2099374008738347758.post-504368836665435476" />
			<rdf:li rdf:resource="http://www.wains.be/?p=1059" />
			<rdf:li rdf:resource="http://blog.futtta.be/?p=3563" />
			<rdf:li rdf:resource="http://grep.be/blog/en/life/fjp" />
			<rdf:li rdf:resource="http://www.krisbuytaert.be/1016 at http://www.krisbuytaert.be/blog" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4309414151374220630.post-9071364185895974910" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4309414151374220630.post-271178198412504073" />
			<rdf:li rdf:resource="http://garrels.be/219 at http://garrels.be" />
			<rdf:li rdf:resource="http://www.wains.be/?p=1052" />
			<rdf:li rdf:resource="http://chitlesh.wordpress.com/?p=1014" />
			<rdf:li rdf:resource="http://www.jedi.be/blog/2010/08/30/virtualbox-savestate-restore-network-problem/" />
			<rdf:li rdf:resource="http://www.jedi.be/blog/2010/08/30/capturing-the-screen-of-your-virtual-machines-using-x-vnc-rdp-or-native/" />
			<rdf:li rdf:resource="http://blog.futtta.be/?p=3488" />
			<rdf:li rdf:resource="http://blog.elisehuard.be/?p=1260" />
			<rdf:li rdf:resource="http://www.jedi.be/blog/2010/08/29/sending-keystrokes-to-your-virtual-machines-using-X-vnc-rdp-or-native/" />
			<rdf:li rdf:resource="http://debaer.org/blog/?p=220" />
			<rdf:li rdf:resource="http://amedee.be/121 at http://amedee.be" />
			<rdf:li rdf:resource="http://amedee.be/120 at http://amedee.be" />
			<rdf:li rdf:resource="http://www.jedi.be/blog/2010/08/27/ssh-tricks-the-usual-and-beyond/" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7603704315097619422.post-7374543518539424977" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7603704315097619422.post-4602410202070376056" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7603704315097619422.post-5246941762365808930" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7603704315097619422.post-4901049628521426992" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7603704315097619422.post-6700500994224439466" />
			<rdf:li rdf:resource="http://thomas.apestaart.org/log/?p=1199" />
			<rdf:li rdf:resource="http://www.wains.be/?p=1047" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4309414151374220630.post-9040542503795862278" />
			<rdf:li rdf:resource="http://www.arrfab.net/blog/?p=233" />
			<rdf:li rdf:resource="http://www.jedi.be/blog/2010/08/26/Webby Rss feed and Syntax Highlighting/" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7603704315097619422.post-15642748880174239" />
			<rdf:li rdf:resource="http://grep.be/blog/en/computer/play/povanim.mk" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-18697195.post-3827789416689615894" />
			<rdf:li rdf:resource="http://www.fosdem.org/14 at http://www.fosdem.org/2011" />
			<rdf:li rdf:resource="http://www.fosdem.org/20 at http://www.fosdem.org/2011" />
			<rdf:li rdf:resource="http://dieter.plaetinck.be/89 at http://dieter.plaetinck.be" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-7036379482487192438.post-3241920929378395427" />
			<rdf:li rdf:resource="http://www.norio.be/162 at http://www.norio.be" />
			<rdf:li rdf:resource="http://pvanhoof.be/blog/?p=583" />
			<rdf:li rdf:resource="http://blog.bdesmet.be/?p=446" />
			<rdf:li rdf:resource="http://blog.penumbra.be/?p=463" />
			<rdf:li rdf:resource="http://dieter.plaetinck.be/88 at http://dieter.plaetinck.be" />
			<rdf:li rdf:resource="http://blog.futtta.be/?p=3460" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-18697195.post-6004048042196837295" />
			<rdf:li rdf:resource="http://www.fosdem.org/87 at http://www.fosdem.org/2011" />
			<rdf:li rdf:resource="http://joost.damad.be/?p=221" />
			<rdf:li rdf:resource="http://kristof.willen.be/1108 at http://kristof.willen.be" />
			<rdf:li rdf:resource="http://blog.cone.be/?p=4352" />
			<rdf:li rdf:resource="http://www.lefred.be/130 at http://www.lefred.be" />
			<rdf:li rdf:resource="http://dag.wieers.com/224 at http://dag.wieers.com/blog" />
			<rdf:li rdf:resource="http://blog.futtta.be/?p=3436" />
			<rdf:li rdf:resource="http://blog.cone.be/?p=4337" />
			<rdf:li rdf:resource="http://www.arrfab.net/blog/?p=230" />
			<rdf:li rdf:resource="tag:blogger.com,1999:blog-4309414151374220630.post-4499224127093841605" />
			<rdf:li rdf:resource="http://acko.net/243 at http://acko.net" />
			<rdf:li rdf:resource="http://www.norio.be/161 at http://www.norio.be" />
			<rdf:li rdf:resource="http://www.toshaan.be/?p=459" />
			<rdf:li rdf:resource="http://blog.cone.be/?p=4334" />
			<rdf:li rdf:resource="http://blog.cone.be/?p=4329" />
			<rdf:li rdf:resource="http://www.fosdem.org/9 at http://www.fosdem.org/2011" />
			<rdf:li rdf:resource="http://buytaert.net/1786 at http://buytaert.net" />
		</rdf:Seq>
	</items>
</channel>

<item rdf:about="tag:blogger.com,1999:blog-2099374008738347758.post-504368836665435476">
	<title>Mark Van den Borre: "La cité du mâle" and self censhorship</title>
	<link>http://feedproxy.google.com/~r/MarkVanDenBorre/~3/Vs-rXpP0UVU/la-cite-du-male-and-self-censhorship.html</link>
	<content:encoded>&lt;a href=&quot;http://www.lemonde.fr/actualite-medias/article/2010/09/02/arte-deprogramme-un-documentaire-sur-la-banlieue-par-prudence_1406060_3236.html&quot;&gt;La cité du mâle&lt;/a&gt; (&lt;a href=&quot;http://translate.google.com/translate?tl=en&amp;u=http://www.lemonde.fr/actualite-medias/article/2010/09/02/arte-deprogramme-un-documentaire-sur-la-banlieue-par-prudence_1406060_3236.html&quot;&gt;EN&lt;/a&gt;) is a documentary on the position of women in those &quot;hot&quot; quarters of major French cities mostly inhabited by people of North African descent. It was coproduced by &lt;a href=&quot;http://en.wikipedia.org/wiki/Arte&quot;&gt;Arte&lt;/a&gt;, a French-German TV channel with a reputation to uphold. Think NPR, not Fox.&lt;br /&gt;&lt;br /&gt;Arte has scrapped &quot;La cité du mâle&quot; from its broadcast schedule for now, &quot;to protect participants who feel threatened&quot;.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/2099374008738347758-504368836665435476?l=blog.markvdb.be&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/MarkVanDenBorre/~4/Vs-rXpP0UVU&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-09-02T20:43:00+00:00</dc:date>
</item>
<item rdf:about="http://www.wains.be/?p=1059">
	<title>Sébastien Wains: Setting up Synergy between Mac OS and Linux</title>
	<link>http://www.wains.be/index.php/2010/09/02/setting-up-synergy-between-mac-os-and-linux/</link>
	<content:encoded>&lt;p&gt;&lt;em&gt;This post should be OK for any kind of client/server combination. That&amp;#8217;s just that I only had a MacBook and a Linux netbook under my hands at the moment of writing this.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Quoting their homepage : &amp;#8220;Synergy lets you easily share a single mouse and keyboard between multiple computers with different operating systems, without special hardware. All you need is a LAN connection. It&amp;#8217;s intended for users with multiple computers, where each system uses its own display.&amp;#8221;&lt;/p&gt;
&lt;p&gt;They forget to mention clipboard along with mouse and keyboard sharing. But it&amp;#8217;s not completely working for some reason. See below.&lt;/p&gt;
&lt;p&gt;For the setup, either see here : &lt;a href=&quot;http://synergy-foss.org/pm/projects/synergy/wiki/Setup&quot;&gt;http://synergy-foss.org/pm/projects/synergy/wiki/Setup&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or for the quick way :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On the Mac (Synergy server, right screen) :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Edit synergy.conf somewhere on the filesystem :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;section: screens
   mac.intranet.example.com:
   linux.intranet.example.com:
end
section: links
   mac.intranet.example.com:
       left = linux.intranet.example.com
   linux.intranet.example.com:
       right = mac.intranet.example.com
end&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start the server :&lt;br /&gt;
&lt;code&gt;synergys  -f --config synergy.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Under Linux (Synergy client, left screen) :&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;synergyc -f mac.intranet.example.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Done !&lt;/p&gt;
&lt;p&gt;By the way, I was able to capture the clipboard from Linux to Mac but the contrary didn&amp;#8217;t work for some reason.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t forget : if you want to get rid of any keyboard or mouse on the client computer, make sure synergy starts at boot &lt;img src=&quot;http://www.wains.be/wp-content/plugins/tango/face-wink.png&quot; alt=&quot;;-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/wains/~4/CjAMql6Ds88&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-09-02T20:38:53+00:00</dc:date>
</item>
<item rdf:about="http://blog.futtta.be/?p=3563">
	<title>Frank Goossens: Lui klust met hout</title>
	<link>http://feedproxy.google.com/~r/futtta/~3/0Y4N0lJIm9A/</link>
	<content:encoded>&lt;p&gt;&lt;img class=&quot;alignright size-medium wp-image-3564&quot; title=&quot;m'n eigenste houtkot&quot; src=&quot;http://blog.futtta.be/wp-content/uploads/2010/09/houtkot-300x200.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;200&quot; /&gt;Indien ik Kabouter zou zijn, dan was ik niet Klus, maar Lui. Ik ben immers echt niet handig en van hard werken word ik zo moe. Mijn Kwebbel zou dat zeker bevestigen, maar ik hoop dat ze er wel aan zou toevoegen dat als ik eenmaal hamer en zaag vastheb, ik niet meer te stoppen ben.&lt;/p&gt;
&lt;p&gt;Maar soit, te stoppen of niet, ik heb hoedanook twee linkerhanden. Toen ik een jaar of 14 was, droeg m&amp;#8217;n vader me op om tijdens de grote vakantie een vogelkastje te timmeren. Ik kreeg wat hout, het gereedschap en een week de tijd om pakweg een koolmees een dak boven kop en kroost te klussen. Maar dat liep, ondanks de hulp van buurtvriend Patrick, al van bij het begin verkeerd; ik had de 6 plankjes schots en scheef gezaagd. Vooral de zijkanten, die bovenaan een hoek van pakweg 35 graden moesten hebben, waren een ramp. Bij elke poging om linker- en rechterkant enigszins gelijk te zagen, werd het vogelkastje weer een stukje kleiner. Ik denk dat we, op aangeven van m&amp;#8217;n wanhopige vader, de zijkanten uiteindelijk samen in de Black&amp;amp;Decker Workmate hebben geklemd en met een grove houtvijl, rasp of schaaf de boel enigszins gelijk hebben gedwongen. Toen het kastje min of meer in elkaar zat, hebben we de resterende gaten en kieren met Gupa dichtgestopt. Ik was misschien onhandig, maar ook een beetje trots, want we hebben dat vogelkastje aan het huis opgehangen en gedurende pakweg 15 jaar hebben zich daar elk jaar kool- en andere meesjes in genesteld.&lt;/p&gt;
&lt;p&gt;We zijn nu 27 jaar verder maar er is op dat vlak weinig veranderd. Ik voel me opnieuw onhandig maar trots; ik heb met wat overbleef van het houtschuurtje van de vorige bewoners, eigenhandig een nieuw afdak voor brandhout in elkaar gezaagd en getimmerd! Het is niet volgens de regels van de doe-het-zelf kunst, het staat allemaal niet waterpas, maar het is wel stevig (het dak droeg een kortstondige belasting van 85kg) en m&amp;#8217;n hout zal de komende 15 jaar min of meer droog liggen. Ik denk dat deze Lui nu echt wel een frisse pint uit de Melkherberg verdiend heeft, toch?&lt;/p&gt;


&lt;p&gt;Possibly related twitterless twaddle:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://blog.futtta.be/2008/11/26/nog-even/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Nog even &amp;#8230;&quot;&gt;Nog even &amp;#8230;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.futtta.be/2010/06/01/het-schrijven-verleerd/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Het schrijven verleerd&quot;&gt;Het schrijven verleerd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.futtta.be/2007/05/25/dj-lieze/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: DJ Lieze (en dus niet: elise246)&quot;&gt;DJ Lieze (en dus niet: elise246)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=0Y4N0lJIm9A:RsFZdHy8nVU:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?i=0Y4N0lJIm9A:RsFZdHy8nVU:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=0Y4N0lJIm9A:RsFZdHy8nVU:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=0Y4N0lJIm9A:RsFZdHy8nVU:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=0Y4N0lJIm9A:RsFZdHy8nVU:I9og5sOYxJI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?d=I9og5sOYxJI&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/futtta/~4/0Y4N0lJIm9A&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-09-02T19:41:32+00:00</dc:date>
</item>
<item rdf:about="http://grep.be/blog/en/life/fjp">
	<title>Wouter Verhelst: Frans Pop</title>
	<link>http://grep.be/blog/en/life/fjp</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/wouter_verhelst&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;I'm shocked to learn that Frans has died.&lt;/p&gt;
&lt;p&gt;Even more shocked to learn that, due to me sitting with my head in
the sand, I almost missed it.&lt;/p&gt;
&lt;p&gt;You'll be missed, Frans. I didn't always agree with you or your
methods, but I deeply respected you for who you were, what you did, and
what you were willing to do.&lt;/p&gt;
&lt;p&gt;May you rest in peace.&lt;/p&gt;</content:encoded>
	<dc:date>2010-09-02T11:30:54+00:00</dc:date>
</item>
<item rdf:about="http://www.krisbuytaert.be/1016 at http://www.krisbuytaert.be/blog">
	<title>Kris Buytaert: Pidgin and OAUth</title>
	<link>http://www.krisbuytaert.be/blog/pidgin-and-oauth</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/sdog&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;So earlier today the nice folks over at twitter figured it was a good time to change all the authentication to oauth ...  they might have announced it all over the place .. but it never catched my attention&lt;/p&gt;
&lt;p&gt;The onlything that did catch my attention was that after not having ued pidgin for about 2 weeks I didn't have access to twitter anymore.&lt;/p&gt;
&lt;p&gt;I`m using the &lt;a href=&quot;http://code.google.com/p/microblog-purple/&quot; rel=&quot;nofollow&quot;&gt;purple-microblog plugin&lt;/a&gt;  and the default version of that plugin in Fedora 12 wasn't really up2date.   The plugin supports OAuth as of 3.0 which was released ages ago.&lt;/p&gt;
&lt;p&gt;The version in fedora-updates-testing however was already recent enough ..&lt;/p&gt;
&lt;p&gt;So enabling that repo and running&lt;br /&gt;
&lt;span class=&quot;geshifilter&quot;&gt;&lt;code class=&quot;text geshifilter-text&quot;&gt;yum &amp;nbsp;update &amp;nbsp;purple-microblog&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;
quickly solved my proble ..  till I disabled twitter in my pidgin again as there was way to much talk about some weird fruit ...&lt;/p&gt;
&lt;div class=&quot;technorati_tags&quot;&gt;&lt;img alt=&quot;Technorati Tags:&quot; src=&quot;http://www.krisbuytaert.be/blog/sites/all/modules/technorati/technobubble.gif&quot; /&gt;&lt;strong&gt;Technorati Tags: &lt;/strong&gt;&lt;a href=&quot;http://technorati.com/tag/oauth&quot; rel=&quot;tag&quot;&gt;oauth&lt;/a&gt; &lt;a href=&quot;http://technorati.com/tag/pidgin&quot; rel=&quot;tag&quot;&gt;pidgin&lt;/a&gt; &lt;a href=&quot;http://technorati.com/tag/twitter&quot; rel=&quot;tag&quot;&gt;twitter&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;sharomaticbutton&quot;&gt; &lt;a href=&quot;http://www.shareomatic.com/http://www.krisbuytaert.be/blog/pidgin-and-oauth/shareomatic-drupal/Pidgin and OAUth&quot;&gt;&lt;img src=&quot;http://www.shareomatic.com/images/s_16_black.gif&quot; alt=&quot;Share with Shareomatic!&quot; title=&quot;Post this item on various social news sites with Shareomatic!&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.shareomatic.com/http://www.krisbuytaert.be/blog/pidgin-and-oauth/shareomatic-drupal/Pidgin and OAUth&quot;&gt;Share with Shareomatic!&lt;/a&gt; &lt;/div&gt;
&lt;!--
&lt;rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:trackback=&quot;http://madskills.com/public/xml/rss/module/trackback/&quot;&gt;
&lt;rdf:Description rdf:about=&quot;http://www.krisbuytaert.be/blog/pidgin-and-oauth&quot; dc:identifier=&quot;http://www.krisbuytaert.be/blog/pidgin-and-oauth&quot; dc:title=&quot;Pidgin and OAUth&quot; trackback:ping=&quot;http://www.krisbuytaert.be/blog/trackback/1016&quot; /&gt;
&lt;/rdf:RDF&gt;
--&gt;
&lt;div class=&quot;trackback-url&quot;&gt;&lt;div class=&quot;box&quot;&gt;

  &lt;h3&gt;Trackback URL for this post:&lt;/h3&gt;

  &lt;div class=&quot;content&quot;&gt;http://www.krisbuytaert.be/blog/trackback/1016&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2010-09-01T18:53:42+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4309414151374220630.post-9071364185895974910">
	<title>Tom Baeyens: What Do BPM Industry Experts Say About Activiti?</title>
	<link>http://processdevelopments.blogspot.com/2010/09/what-do-bpm-industry-experts-say-about.html</link>
	<content:encoded>James Tayler had &lt;a href=&quot;http://jtonedm.com/2010/08/31/first-look-alfresco-activiti/&quot;&gt;a first look at Activiti&lt;/a&gt;. It's a very accurate and well written overview of Alfresco's motivations and the direction of the Activiti project.  He concludes:&lt;i&gt;&lt;blockquote&gt;I liked the potential of the collaboration environment to bridge the gaps when rules and process are both being used in a solution and I also liked the potential of applying content management to business rules. Interesting ideas both of them and I look forward to learning more.&lt;/blockquote&gt;&lt;/i&gt;&lt;div&gt;This confirms what the BPM Analysts h&lt;span class=&quot;Apple-style-span&quot;&gt;ave said about&lt;/span&gt; us at the launch.  &lt;a href=&quot;http://www.jorambarrez.be/blog/2010/05/19/reactions-to-the-activiti-launch/&quot;&gt;Joram created a nice overview of the reactions&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;ul&gt;&lt;li&gt;Sandy Kemsley, renowned BPM analyst, &lt;a href=&quot;http://www.column2.com/2010/05/open-source-bpm-with-alfrescos-activiti/&quot;&gt;wrotea an objective analysis&lt;/a&gt; of the Activiti platform. She is eager to see how Activiti will evolve. And we won’t dissapoint her.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;BPM expert Scott Francis of BP3 wrote &lt;a href=&quot;http://www.bp-3.com/blogs/2010/05/will-open-source-software-meet-the-challenge-activiti-enters-the-ring/&quot;&gt;a very motivating blogpost&lt;/a&gt;. He actually downloaded the distribution and played with it. Let me quote him a few times here&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;&lt;em&gt;“Did I mention that the whole stack &lt;strong&gt;ran just fine, natively&lt;/strong&gt;, on my Mac as well as a Windows VM?”&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;“The documentation is already pretty comprehensive, and gets down to no-nonsense details (not true for many commercial products).”&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;“I think &lt;strong&gt;the market is ripe for an open source BPM platform&lt;/strong&gt; that leverages standard underlying technologies and is built from the beginning to allow for cloud-based deployment”&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;“We may end up&lt;strong&gt; investing some time&lt;/strong&gt; in the project ourselves.”&lt;/em&gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;The 451 Group posted &lt;a href=&quot;http://blogs.the451group.com/opensource/2010/05/17/alfrescos-new-activiti-en-route-to-apache/&quot;&gt;a spot-on business analysis&lt;/a&gt; of the announcement, and let me quote them:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Activiti is likely to shake-up the BPM market&lt;/strong&gt; with a ubiquitous project that supports the BPMN 2.0 standard from the Object Management Group.&lt;/p&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Peter Hilton from Lunatech Research, &lt;a href=&quot;http://www.lunatech-research.com/archives/2010/05/18/activiti-next-generation-business-process-management-and-work-flow&quot;&gt;hits the nail on the head&lt;/a&gt;:&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p&gt;business processes and work-flow are aspects of most business software and integrating&lt;strong&gt;embeddable BPM will be a key element in reducing the cost&lt;/strong&gt; of business software development.&lt;/p&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Theo Priestly &lt;a href=&quot;http://www.reduxonline.com/blog/2010/5/18/tale-of-the-tape-the-fight-for-open-source-bpm-dominance-beg.html?utm_source=twitterfeed&amp;utm_medium=twitter&quot;&gt;asks the question everybody wanted to ask&lt;/a&gt;: “has the fight for open-source dominance begun?”&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;It's great fun to shake the BPM market ;-)&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4309414151374220630-9071364185895974910?l=processdevelopments.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-09-01T08:31:02+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4309414151374220630.post-271178198412504073">
	<title>Tom Baeyens: Activiti 5.0.beta1 Rocks</title>
	<link>http://processdevelopments.blogspot.com/2010/09/activiti-50beta1-rocks.html</link>
	<content:encoded>This release &lt;div&gt;&lt;ul&gt;&lt;li&gt;Adds a first preview of &lt;a href=&quot;http://activiti.org/cycle.html&quot;&gt;Activiti Cycle&lt;/a&gt;, contributed by &lt;a href=&quot;http://camunda.com&quot;&gt;Camunda&lt;/a&gt;. &lt;a href=&quot;http://www.bpm-guide.de/2010/08/27/activiti-cycle-explained/&quot;&gt;Bernd explains Activiti Cycle&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Adds &lt;a href=&quot;http://activiti.org/userguide/index.html#N101EA&quot;&gt;documentation about the Spring integrations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;We extracted &lt;a href=&quot;http://www.infoq.com/news/2008/05/processvirtualmachine&quot;&gt;the Process Virtual Machine&lt;/a&gt; as a separate module&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://activiti.org/download.html&quot;&gt;Enjoy&lt;/a&gt;!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and &lt;a href=&quot;http://forums.activiti.org/en/viewforum.php?f=3&quot;&gt;let us know what you think&lt;/a&gt;.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4309414151374220630-271178198412504073?l=processdevelopments.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-09-01T08:31:02+00:00</dc:date>
</item>
<item rdf:about="http://garrels.be/219 at http://garrels.be">
	<title>Machtelt Garrels: Wired Treefrog</title>
	<link>http://garrels.be/2010_Froscon_Creative_Contest</link>
	<content:encoded>&lt;p&gt;A couple of hours of crocheting and soldering resulted in the first prize of the &lt;a href=&quot;http://fcc.froscon.de&quot;&gt;Froscon Creative Contest&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://garrels.be/sites/www.garrels.be/images/froscon_contest_001.jpg&quot; alt=&quot;wired frog&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The pattern for the frog is an adaptation of &lt;a href=&quot;http://littlegreen.typepad.com/romansock/tutorial-tree-frog.html&quot;&gt;this one&lt;/a&gt;.  I crocheted the head and body in one part and also the feet and the suckers are one part.&lt;/p&gt;
&lt;p&gt;You will need 6 LEDs that fit in the holes of the suckers.  The wiring follows this scheme:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://garrels.be/sites/www.garrels.be/images/wiring-for-treefrog.png&quot; alt=&quot;simple circuit&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A 3V coin-cell battery attached in a holder under the belly of the frog provides the power to this circuit.&lt;/p&gt;</content:encoded>
	<dc:date>2010-09-01T07:44:38+00:00</dc:date>
</item>
<item rdf:about="http://www.wains.be/?p=1052">
	<title>Sébastien Wains: Force SSH password authentication</title>
	<link>http://www.wains.be/index.php/2010/08/31/force-ssh-password-authentication/</link>
	<content:encoded>&lt;p&gt;If for some reason you want to disable public key authentication temporarily when SSH&amp;#8217;ing into a machine, type :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssh -o PubkeyAuthentication=no user@machine&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You should get the prompt for the password.&lt;/p&gt;
&lt;p&gt;This goes without saying, but ChallengeResponseAuthentication (at least on Debian) must be set to yes on the server side for this to work.&lt;/p&gt;
&lt;p&gt;Thanks to Philip for proof-reading this post &lt;img src=&quot;http://www.wains.be/wp-content/plugins/tango/face-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/wains/~4/wv81bgmXcZc&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-31T20:25:43+00:00</dc:date>
</item>
<item rdf:about="http://chitlesh.wordpress.com/?p=1014">
	<title>Chitlesh GOORAH: FEL: Bugfix release of Perl-Verilog 3.302</title>
	<link></link>
	<content:encoded>Verilog::Language 3.302 was released shortly after 3.300 to fix a few bugs, namely Increase define recursions before error.  [Paul Liu] Fix documentation on verilog_text and link, bug278. [Mike Z] Use Digest::SHA instead of SHA1, bug189.  [Ahmed El-Mahmoudy] Fix false test failure if Math::BigInt not installed. It will soon be among your updates. Special credits go [...]&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=chitlesh.wordpress.com&amp;blog=8235459&amp;post=1014&amp;subd=chitlesh&amp;ref=&amp;feed=1&quot; width=&quot;1&quot; height=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-30T21:17:25+00:00</dc:date>
</item>
<item rdf:about="http://www.jedi.be/blog/2010/08/30/virtualbox-savestate-restore-network-problem/">
	<title>Patrick Debois: Virtualbox Savestate Restore Network Problems</title>
	<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/ar9DEoIVu48/</link>
	<content:encoded>&lt;h3&gt;Virtualbox Savestate and restore does not restore the network&lt;/h3&gt;

&lt;p&gt;I make extensive use of Virtualbox to test my installations. When I automate the installation , I use the savestate and restore to rollback changes I do to the virtual machine. Recently the network of the virtual machine would not be accessible anymore after the restore. A network ping from both inside or outside the virtualmachine fails. Several tickets have been created for it, and the bug seems to pop up every new update or so &lt;a href=&quot;http://www.virtualbox.org/changeset/25205&quot;&gt;Fixed in 25205&lt;/a&gt; , &lt;a href=&quot;http://www.virtualbox.org/ticket/5666&quot;&gt;re-introduced in Ticket 5666&lt;/a&gt;, &lt;a href=&quot;http://www.virtualbox.org/ticket/5654&quot;&gt;Ticket 5654&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;The first work-around I found was:&lt;/p&gt;

&lt;p&gt;On a linux machine restart the network stack with  a &lt;em&gt;/etc/init.d/network restart&lt;/em&gt; . But that is not very portable, and it's hard to automate because the network is gone.&lt;/p&gt;

&lt;p&gt;A more generic work-around is to temporary disable the network link:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ VBoxManage controlvm &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;yourvmname&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; setlinkstate1 off
$ VBoxManage controlvm &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;yourvmname&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; setlinkstate1 on
$ sleep 2

&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;NAT: re-establish port-forwarding after savestate / restore state&lt;/h3&gt;

&lt;p&gt;Another quite annoying bug is that virtualbox sometimes looses it's NAT mappings &lt;a href=&quot;http://www.virtualbox.org/changeset/25402&quot;&gt;Ticket 25402&lt;/a&gt;
There is no other way then re-executing the NAT mapping.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-30T19:04:27+00:00</dc:date>
</item>
<item rdf:about="http://www.jedi.be/blog/2010/08/30/capturing-the-screen-of-your-virtual-machines-using-x-vnc-rdp-or-native/">
	<title>Patrick Debois: Capturing the Screen or Video of Your Virtual Machines Using X, Vnc, Rdp or Native ways</title>
	<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/WwG1EiS5C-E/</link>
	<content:encoded>&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://www.flickr.com/photos/nlscotland/4700299708/sizes/o/in/photostream/
&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/blog/2010/08/30/capturing-the-screen-of-your-virtual-machines-using-x-vnc-rdp-or-native/window-capture.jpg&quot; /&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;
With this blogpost we continue the previous investigation to interact with a virtual machine using X, VNC , RDP or native ways with a virtual machine. This time instead of &lt;a href=&quot;http://feeds.feedburner.com/jedi/&lt;a href=&quot;&gt;&lt;a href=&quot;&gt;&lt;a href=&quot;&gt;&lt;a href=&quot;&gt;&lt;a href=&quot;&gt;&lt;a href=&quot;&gt;&lt;a href=&quot;&gt;&lt;a href=&quot;http://feeds.feedburner.com/jedi/2010/08/29/sending-keystrokes-to-your-virtual-machines-using-X-vnc-rdp-or-native/&quot;&gt;sending keystrokes&lt;/a&gt; we are looking for &lt;b&gt;capture screenshots or even capture the complete session as a video&lt;/b&gt;. 
&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;




&lt;hr /&gt;


&lt;h3&gt;Interacting with X-Windows&lt;/h3&gt;

&lt;h4&gt;Capturing a screenshot:&lt;/h4&gt;

&lt;p&gt;Grabbing a screen of an X-Windows session is easy: in order to grab the screen on an X-session on :1 issue the following command:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ import -window root -display :1 screenshot.png
&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;Recording a video:&lt;/h4&gt;

&lt;p&gt;I got the idea of using the &lt;a href=&quot;http://www.ffmpeg.org&quot;&gt;ffmpeg&lt;/a&gt; command for capturing the X-session from&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://gasubasu.com/2009/05/06/flash2video/&quot;&gt;http://gasubasu.com/2009/05/06/flash2video/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I installed ffmpeg using macports&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ sudo port install ffmpeg
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;When I executed it, it complained about &lt;em&gt;Unknown input format: 'x11grab'&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ffmpeg -f x11grab -vc x264 -s vga -r 30 -b 2000k -g 300 -i :1.0 session-recording.avi
FFmpeg version 0.6, Copyright (c) 2000-2010 the FFmpeg developers
  built on Aug 29 2010 16:56:51 with gcc 4.2.1 (Apple Inc. build 5664)
  configuration: --prefix=/opt/local --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --enable-libvpx --enable-libspeex --enable-nonfree --mandir=/opt/local/share/man --enable-shared --enable-pthreads --disable-indevs --cc=/usr/bin/gcc-4.2 --arch=x86_64
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.19. 0 /  1.19. 0
  libswscale     1.11. 0 /  1.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Unknown input format: &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;x11grab&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;There was no variant or option for macports to have ffmpeg take this flag for compiling. So I downloaded the sourcecode from the ffmpeg repository:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ wget http://www.ffmpeg.org/releases/ffmpeg-0.6.tar.gz
$ cd ffmpeg-0.6
$  ./configure --enable-x11grab --enable-gpl
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Although I had specified the &lt;em&gt;--enable-x11grab&lt;/em&gt; option, ffmpeg still complained about the Unknown input format.&lt;/p&gt;

&lt;p&gt;I got some clues &lt;a href=&quot;http://soledadpenades.com/2010/04/26/unknown-input-or-output-format-x11grab-ubuntu/&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.linuxquestions.org/questions/slackware-14/ffmpeg-x11grab-unknown-format-522296/&quot;&gt;here&lt;/a&gt;. And after a look at the the configure file, I found that in order to work, it required the Xfixes and Xext libraries:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
enabled x11grab                         &lt;span class=&quot;Operators&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
check_header &lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;Xlib.h                 &lt;span class=&quot;Operators&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
check_header &lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;extensions&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;XShm&lt;/span&gt;.h      &lt;span class=&quot;Operators&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
check_header &lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;extensions&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;Xfixes.h    &lt;span class=&quot;Operators&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
check_func &lt;span class=&quot;Variables&quot;&gt;XOpenDisplay&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;lX11           &lt;span class=&quot;Operators&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
check_func &lt;span class=&quot;Variables&quot;&gt;XShmCreateImage&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;lX11 &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;lXext &lt;span class=&quot;Operators&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
check_func &lt;span class=&quot;Variables&quot;&gt;XFixesGetCursorImage&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;lX11 &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;lXext &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;lXfixes
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;So after installing those libraries:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ sudo port install xorg&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libXext
$ sudo port install xorg&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libXfixes
$  .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;configure &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;x11grab &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;gpl &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;nonfree &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;extra&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;cflags&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;-I/opt/local/include -I/opt/local/include/X11&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;extra&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;ldflags&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;opt&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib

....
&lt;span class=&quot;Variables&quot;&gt;Enabled&lt;/span&gt; indevs:
x11_grab_device
...
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now with the input x11_grab_device available, I was all set to record a running session.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;ffmpeg &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;f x11grab &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;vc x264  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;s xga &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;r &lt;span class=&quot;Numbers&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;b 2000k &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;g &lt;span class=&quot;Numbers&quot;&gt;300&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;i :&lt;span class=&quot;Numbers&quot;&gt;1.0&lt;/span&gt; session&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;recording.avi
&lt;span class=&quot;Variables&quot;&gt;FFmpeg&lt;/span&gt; version &lt;span class=&quot;Numbers&quot;&gt;0.6&lt;/span&gt;, &lt;span class=&quot;Variables&quot;&gt;Copyright&lt;/span&gt; (c) &lt;span class=&quot;Numbers&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;2010&lt;/span&gt; the &lt;span class=&quot;Variables&quot;&gt;FFmpeg&lt;/span&gt; developers
  built on &lt;span class=&quot;Variables&quot;&gt;Aug&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;2010&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;09&lt;/span&gt;:&lt;span class=&quot;Numbers&quot;&gt;11&lt;/span&gt;:&lt;span class=&quot;Numbers&quot;&gt;02&lt;/span&gt; with gcc &lt;span class=&quot;Numbers&quot;&gt;4.2&lt;/span&gt;.&lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt; (&lt;span class=&quot;Variables&quot;&gt;Apple&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Inc&lt;/span&gt;. build &lt;span class=&quot;Numbers&quot;&gt;5664&lt;/span&gt;)
  configuration: &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;x11grab &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;gpl &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;nonfree &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;extra&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;cflags&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;-I/opt/local/include -I/opt/local/include/X11&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;extra&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;ldflags&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;opt&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;disable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;shared
  libavutil     &lt;span class=&quot;Numbers&quot;&gt;50.15&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;50.15&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt;
  libavcodec    &lt;span class=&quot;Numbers&quot;&gt;52.72&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;52.72&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;
  libavformat   &lt;span class=&quot;Numbers&quot;&gt;52.64&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;52.64&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;
  libavdevice   &lt;span class=&quot;Numbers&quot;&gt;52&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;52&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;
  libswscale     &lt;span class=&quot;Numbers&quot;&gt;0.11&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;  &lt;span class=&quot;Numbers&quot;&gt;0.11&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;
[x11grab @ &lt;span class=&quot;Numbers&quot;&gt;0x10100b000&lt;/span&gt;]device: :&lt;span class=&quot;Numbers&quot;&gt;1.0&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; display: :&lt;span class=&quot;Numbers&quot;&gt;1.0&lt;/span&gt; x: &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; y: &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; width: &lt;span class=&quot;Numbers&quot;&gt;1024&lt;/span&gt; height: &lt;span class=&quot;Numbers&quot;&gt;768&lt;/span&gt;
[x11grab @ &lt;span class=&quot;Numbers&quot;&gt;0x10100b000&lt;/span&gt;]shared memory extension  found
[x11grab @ &lt;span class=&quot;Numbers&quot;&gt;0x10100b000&lt;/span&gt;]&lt;span class=&quot;Variables&quot;&gt;Estimating&lt;/span&gt; duration from bitrate, this may be inaccurate
&lt;span class=&quot;Variables&quot;&gt;Input&lt;/span&gt; &lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;0, x11grab, from ':1.0':&lt;/span&gt;
  &lt;span class=&quot;Variables&quot;&gt;Duration&lt;/span&gt;: &lt;span class=&quot;Variables&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;A&lt;/span&gt;, start: &lt;span class=&quot;Numbers&quot;&gt;1283153847.281641&lt;/span&gt;, bitrate: &lt;span class=&quot;Numbers&quot;&gt;754974&lt;/span&gt; kb&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;s
    &lt;span class=&quot;Variables&quot;&gt;Stream&lt;/span&gt; &lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;0.0: Video: rawvideo, bgra, 1024x768, 754974 kb/s, 30 tbr, 1000k tbn, 30 tbc&lt;/span&gt;
&lt;span class=&quot;Variables&quot;&gt;File&lt;/span&gt; &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;session-recording.avi&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt; already exists. &lt;span class=&quot;Variables&quot;&gt;Overwrite&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;?&lt;/span&gt; [y&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;N&lt;/span&gt;] y
&lt;span class=&quot;Variables&quot;&gt;Output&lt;/span&gt; &lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;0, avi, to 'session-recording.avi':&lt;/span&gt;
  &lt;span class=&quot;Variables&quot;&gt;Metadata&lt;/span&gt;:
    &lt;span class=&quot;Variables&quot;&gt;ISFT&lt;/span&gt;            : &lt;span class=&quot;Variables&quot;&gt;Lavf52&lt;/span&gt;.&lt;span class=&quot;Numbers&quot;&gt;64.2&lt;/span&gt;
    &lt;span class=&quot;Variables&quot;&gt;Stream&lt;/span&gt; &lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;0.0: Video: mpeg4, yuv420p, 1024x768, q=2-31, 2000 kb/s, 30 tbn, 30 tbc&lt;/span&gt;
&lt;span class=&quot;Variables&quot;&gt;Stream&lt;/span&gt; mapping:
  &lt;span class=&quot;Variables&quot;&gt;Stream&lt;/span&gt; &lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;0.0 -&amp;gt; #0.0&lt;/span&gt;
&lt;span class=&quot;Variables&quot;&gt;Press&lt;/span&gt; [q] to stop encoding
frame&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;  &lt;span class=&quot;Numbers&quot;&gt;310&lt;/span&gt; fps&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;30&lt;/span&gt; q&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;2.0&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Lsize&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;    2810kB time&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;11.83&lt;/span&gt; bitrate&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;1945.&lt;/span&gt;1kbits&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;s dup&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; drop&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;21&lt;/span&gt;    
video:2796kB audio:0kB global headers:0kB muxing overhead &lt;span class=&quot;Numbers&quot;&gt;0.502798&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;%&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;This worked fine! But the recording only captured 1024x768 (flag = xga), when I tried to have ffmpeg capture a larger screen 1600x1024 (flag wsxga), it told me an error about &lt;em&gt;Can't get shared memory&lt;/em&gt; . No clue why. For now, the xga option is enough for me.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
.&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;ffmpeg &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;f x11grab &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;vc x264  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;s wsxga &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;r &lt;span class=&quot;Numbers&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;b 2000k &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;g &lt;span class=&quot;Numbers&quot;&gt;300&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;i :&lt;span class=&quot;Numbers&quot;&gt;1.0&lt;/span&gt; session&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;recording.avi
&lt;span class=&quot;Variables&quot;&gt;FFmpeg&lt;/span&gt; version &lt;span class=&quot;Numbers&quot;&gt;0.6&lt;/span&gt;, &lt;span class=&quot;Variables&quot;&gt;Copyright&lt;/span&gt; (c) &lt;span class=&quot;Numbers&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;2010&lt;/span&gt; the &lt;span class=&quot;Variables&quot;&gt;FFmpeg&lt;/span&gt; developers
  built on &lt;span class=&quot;Variables&quot;&gt;Aug&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;30&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;2010&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;09&lt;/span&gt;:&lt;span class=&quot;Numbers&quot;&gt;11&lt;/span&gt;:&lt;span class=&quot;Numbers&quot;&gt;02&lt;/span&gt; with gcc &lt;span class=&quot;Numbers&quot;&gt;4.2&lt;/span&gt;.&lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt; (&lt;span class=&quot;Variables&quot;&gt;Apple&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Inc&lt;/span&gt;. build &lt;span class=&quot;Numbers&quot;&gt;5664&lt;/span&gt;)
  configuration: &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;x11grab &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;gpl &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;enable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;nonfree &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;extra&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;cflags&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;-I/opt/local/include -I/opt/local/include/X11&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;extra&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;ldflags&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;opt&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;local&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;disable&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;shared
  libavutil     &lt;span class=&quot;Numbers&quot;&gt;50.15&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;50.15&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt;
  libavcodec    &lt;span class=&quot;Numbers&quot;&gt;52.72&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;52.72&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;
  libavformat   &lt;span class=&quot;Numbers&quot;&gt;52.64&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;52.64&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;
  libavdevice   &lt;span class=&quot;Numbers&quot;&gt;52&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;52&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;2&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;
  libswscale     &lt;span class=&quot;Numbers&quot;&gt;0.11&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;  &lt;span class=&quot;Numbers&quot;&gt;0.11&lt;/span&gt;. &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;
[x11grab @ &lt;span class=&quot;Numbers&quot;&gt;0x10100b000&lt;/span&gt;]device: :&lt;span class=&quot;Numbers&quot;&gt;1.0&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; display: :&lt;span class=&quot;Numbers&quot;&gt;1.0&lt;/span&gt; x: &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; y: &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; width: &lt;span class=&quot;Numbers&quot;&gt;1600&lt;/span&gt; height: &lt;span class=&quot;Numbers&quot;&gt;1024&lt;/span&gt;
[x11grab @ &lt;span class=&quot;Numbers&quot;&gt;0x10100b000&lt;/span&gt;]shared memory extension  found
[x11grab @ &lt;span class=&quot;Numbers&quot;&gt;0x10100b000&lt;/span&gt;]&lt;span class=&quot;Variables&quot;&gt;Fatal&lt;/span&gt;: &lt;span class=&quot;Variables&quot;&gt;Can&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t get shared memory!&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;




&lt;hr /&gt;


&lt;h3&gt;Interacting with VNC&lt;/h3&gt;

&lt;h4&gt;Capturing a screenshot:&lt;/h4&gt;

&lt;p&gt;I found two projects that touted the ability to capture the screen of a VNC session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VncSnapshot (C)- &lt;a href=&quot;http://vncsnapshot.sourceforge.net/&quot;&gt;http://vncsnapshot.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;VncCapture (Perl) - &lt;a href=&quot;http://search.cpan.org/~lbrocard/Net-VNC-0.36/bin/vnccapture&quot;&gt;http://search.cpan.org/~lbrocard/Net-VNC-0.36/bin/vnccapture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;None of them really worked for me. So I resorted back to using Xvfb as an intermediate:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ vncpasswd mypasswordfile
$ &lt;span class=&quot;Variables&quot;&gt;Xvfb&lt;/span&gt;  :&lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;screen &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; 1024x768x24 &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;fbdir &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;var&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;tmp&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;
(&lt;span class=&quot;Variables&quot;&gt;EE&lt;/span&gt;) &lt;span class=&quot;Variables&quot;&gt;AIGLX&lt;/span&gt; error: dlopen of &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;dri&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;swrast_dri.so failed (dlopen(&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;usr&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;dri&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;swrast_dri.so, &lt;span class=&quot;Numbers&quot;&gt;5&lt;/span&gt;): image &lt;span class=&quot;Operators&quot;&gt;not&lt;/span&gt; found)
(&lt;span class=&quot;Variables&quot;&gt;EE&lt;/span&gt;) &lt;span class=&quot;Variables&quot;&gt;GLX&lt;/span&gt;: could &lt;span class=&quot;Operators&quot;&gt;not&lt;/span&gt; load software renderer
(&lt;span class=&quot;Variables&quot;&gt;EE&lt;/span&gt;) &lt;span class=&quot;Variables&quot;&gt;XKB&lt;/span&gt;: &lt;span class=&quot;Variables&quot;&gt;Couldn&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t open rules file /usr/X11/share/X11/xkb/rules/base&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;(EE) XKB: No components provided for device Virtual core keyboard&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;$ DISPLAY=:1 rdesktop -u username -p password -d domain remotehost&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;$ import -window root -display :1 screenshot-rdp.png&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;Recording a video:&lt;/h4&gt;

&lt;p&gt;To record an vnc session to flash I found the following pointers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cs.ubc.ca/~bsd/vncrecording.html&quot;&gt;http://www.cs.ubc.ca/~bsd/vncrecording.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.unixuser.org/~euske/vnc2swf/&quot;&gt;http://www.unixuser.org/~euske/vnc2swf/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.unixuser.org/~euske/vnc2swf/pyvnc2swf.html&quot;&gt;http://www.unixuser.org/~euske/vnc2swf/pyvnc2swf.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.unixuser.org/~euske/python/vnc2flv/index.html&quot;&gt;http://www.unixuser.org/~euske/python/vnc2flv/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I went for the C version of vnc2swf :&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ wget http&lt;span class=&quot;Constants&quot;&gt;&lt;span class=&quot;Constants&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;www.unixuser.org&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;euske&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;vnc2swf&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;vnc2swf&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;0.5&lt;/span&gt;.&lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;.tar.gz
$ cd vnc2swf&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;0.5&lt;/span&gt;.&lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;
$  &lt;span class=&quot;Variables&quot;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;X11R6&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib  .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;configure 
$  &lt;span class=&quot;Variables&quot;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;X11R6&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib  make
$ .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;vnc2swf
usage: .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;vnc2swf [&lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;options&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;] &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;out.swf&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;host&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Constants&quot;&gt;&lt;span class=&quot;Constants&quot;&gt;:&lt;/span&gt;&amp;lt;&lt;/span&gt;display&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;&amp;gt;&lt;/span&gt;
       .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;vnc2swf [&lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;options&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;] &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;out.swf&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;listen [&lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;display&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;&amp;gt;]&lt;/span&gt;

&lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;options&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; are standard &lt;span class=&quot;Variables&quot;&gt;Xt&lt;/span&gt; options, &lt;span class=&quot;Operators&quot;&gt;or&lt;/span&gt;:
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;shared
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;viewonly
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;fullscreen
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;passwd &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;passwd&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;file&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;noauto
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;encodings &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;encoding&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;list&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; (e.g. &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;raw copyrect&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;geometry &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;geometry&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;bgr233
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;owncmap
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;truecolour
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;depth &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;depth&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;framerate &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;frames&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;per&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;sec&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;startrecording
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;nowindow
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;nostatus
              &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;clippinggeometry &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;geometry&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Àn alternative is to ffmpeg as explained in the X-session, with vncviewer  displayed in Xvfb session&lt;/p&gt;

&lt;hr /&gt;


&lt;h3&gt;Interacting with RDP&lt;/h3&gt;

&lt;h4&gt;Capturing a screenshot:&lt;/h4&gt;

&lt;p&gt;I found &lt;strong&gt;0 tools&lt;/strong&gt; to capture a screenshot directly from an RDP (at least a tool on Linux or MacosX). While poking around I found a reference to VNC inside the code of Rdesktop: there was mention of &lt;em&gt;rdp2vnc&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;configure &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;help &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;grep vnc
  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;with&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libvncserver&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;config&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;CMD&lt;/span&gt;  use &lt;span class=&quot;Variables&quot;&gt;CMD&lt;/span&gt; as libvncserver&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;config
  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;with&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libvncserver     make rdp2vnc
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;I almost got it to work by checking out the latest svn&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ svn co https&lt;span class=&quot;Constants&quot;&gt;&lt;span class=&quot;Constants&quot;&gt;:&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;rdesktop.svn.sourceforge.net&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;svnroot&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;rdesktop rdesktop
$ cd rdesktop
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;It required the installation of LibVNCServer library - &lt;a href=&quot;http://libvncserver.sourceforge.net/&quot;&gt;http://libvncserver.sourceforge.net/&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
.&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;configure &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;prefix &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;opt
make
make install
&lt;/pre&gt;
&lt;/div&gt;




&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ cd rdesktop
$ .&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;configure  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;with&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libvncserver  &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;x&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;includes&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;local&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Keywords&quot;&gt;include&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;x&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libraries&lt;span class=&quot;Operators&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;opt&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;local&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;with&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;libvncserver&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;config
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;But in the end - nothing and I was facing a &lt;a href=&quot;http://osdir.com/ml/network.rdesktop.devel/2007-01/msg00037.html&quot;&gt;Compile problem&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So of to the X-session fallback using rdesktop and xvfb:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ &lt;span class=&quot;Variables&quot;&gt;Xvfb&lt;/span&gt;  :&lt;span class=&quot;Numbers&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;screen &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt; 1024x768x24 &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;fbdir &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;var&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;tmp&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;
(&lt;span class=&quot;Variables&quot;&gt;EE&lt;/span&gt;) &lt;span class=&quot;Variables&quot;&gt;AIGLX&lt;/span&gt; error: dlopen of &lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;usr&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;dri&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;swrast_dri.so failed (dlopen(&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;usr&lt;/span&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;&lt;span class=&quot;RegularExpressions&quot;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Variables&quot;&gt;X11&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;lib&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;dri&lt;span class=&quot;Operators&quot;&gt;/&lt;/span&gt;swrast_dri.so, &lt;span class=&quot;Numbers&quot;&gt;5&lt;/span&gt;): image &lt;span class=&quot;Operators&quot;&gt;not&lt;/span&gt; found)
(&lt;span class=&quot;Variables&quot;&gt;EE&lt;/span&gt;) &lt;span class=&quot;Variables&quot;&gt;GLX&lt;/span&gt;: could &lt;span class=&quot;Operators&quot;&gt;not&lt;/span&gt; load software renderer
(&lt;span class=&quot;Variables&quot;&gt;EE&lt;/span&gt;) &lt;span class=&quot;Variables&quot;&gt;XKB&lt;/span&gt;: &lt;span class=&quot;Variables&quot;&gt;Couldn&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t open rules file /usr/X11/share/X11/xkb/rules/base&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;(EE) XKB: No components provided for device Virtual core keyboard&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;$ DISPLAY=:1 vncviewer -FullColor --Passwordfile mypasswordfile localhost&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;$ import -window root -display :1 screenshot-vnc.png&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;Recording a video:&lt;/h4&gt;

&lt;p&gt;The only way (I found) is to capture the RDP session as a video is to use ffmpeg as explained in the X-session, with rdesktop displayed in Xvfb session.&lt;/p&gt;

&lt;hr /&gt;


&lt;h3&gt;Virtual Server helpers:&lt;/h3&gt;

&lt;h4&gt;Capturing screenshots with Vmware Esx&lt;/h4&gt;

&lt;p&gt;The Vsphere API allows the creation of a task by using CreateScreenshot_Task() command. I used the &lt;a href=&quot;http://vijava.sourceforge.net/&quot;&gt;VMware VI (vSphere) Java API&lt;/a&gt; - &lt;a href=&quot;http://vijava.sourceforge.net/&quot;&gt;http://vijava.sourceforge.net/&lt;/a&gt; and coded an example to create the screenshot. The file itself is saved by vmware in the datastore root, so you need something like scp to grab it from there.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;&lt;span class=&quot;Keywords&quot;&gt;import&lt;/span&gt; java.net.URL;
&lt;span class=&quot;Keywords&quot;&gt;import&lt;/span&gt; com.vmware.vim25.*;
&lt;span class=&quot;Keywords&quot;&gt;import&lt;/span&gt; com.vmware.vim25.mo.*;

public class takescreenshot 
{
    public static void main(String[] args) &lt;span class=&quot;Keywords&quot;&gt;throws&lt;/span&gt; Exception
    {
        String url=&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;https://localhost/sdk&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;; 
        String username=&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;root&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;; 
        String password=&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;thepassword&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
        long start = System.currentTimeMillis();
        ServiceInstance si = &lt;span class=&quot;Keywords&quot;&gt;new&lt;/span&gt; ServiceInstance(&lt;span class=&quot;Keywords&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;Constants&quot;&gt;URL&lt;/span&gt;(url), username, password, &lt;span class=&quot;LanguageConstants&quot;&gt;true&lt;/span&gt;);
        long end = System.currentTimeMillis();
        System.out.println(&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;time taken:&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;+&lt;/span&gt; (end&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;start));
        Folder rootFolder = si.getRootFolder();
        String name = rootFolder.getName();
        System.out.println(&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;root:&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;+&lt;/span&gt; name);
        ManagedEntity[] mes = &lt;span class=&quot;Keywords&quot;&gt;new&lt;/span&gt; InventoryNavigator(rootFolder).searchManagedEntities(&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;VirtualMachine&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
        &lt;span class=&quot;ControlStructures&quot;&gt;if&lt;/span&gt;(mes&lt;span class=&quot;Operators&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;LanguageConstants&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;||&lt;/span&gt; mes.length &lt;span class=&quot;Operators&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;)
        {
            &lt;span class=&quot;ControlStructures&quot;&gt;return&lt;/span&gt;;
        }
        
        VirtualMachine vm = (VirtualMachine) mes[&lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;]; 
        Task screentask=vm.CreateScreenshot_Task();
        si.getServerConnection().logout();
    }
}
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;For an example using the perl API have a look at the script at &lt;a href=&quot;http://communities.vmware.com/docs/DOC-10497&quot;&gt;http://communities.vmware.com/docs/DOC-10497&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Screencapture and recording a video in Virtualbox&lt;/h4&gt;

&lt;p&gt;I found that virtualbox itself has a way to capture the screen (--capture) and to record the session to file. Internally it uses ffmpeg. I wasn't able to run it on my mac, as it is not supported on that platform, but it might work for you.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ &lt;span class=&quot;Variables&quot;&gt;VBoxVRDP&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;help
&lt;span class=&quot;Variables&quot;&gt;Oracle&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;VM&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;VirtualBox&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Headless&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Interface&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;3.2&lt;/span&gt;.&lt;span class=&quot;Numbers&quot;&gt;8&lt;/span&gt;
(&lt;span class=&quot;Variables&quot;&gt;C&lt;/span&gt;) &lt;span class=&quot;Numbers&quot;&gt;2008&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Numbers&quot;&gt;2010&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Oracle&lt;/span&gt; &lt;span class=&quot;Variables&quot;&gt;Corporation&lt;/span&gt;
&lt;span class=&quot;Variables&quot;&gt;All&lt;/span&gt; rights reserved.

&lt;span class=&quot;Variables&quot;&gt;Usage&lt;/span&gt;:
   &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;s, &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;startvm, &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;startvm &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;name&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;uuid&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;   &lt;span class=&quot;Variables&quot;&gt;Start&lt;/span&gt; given &lt;span class=&quot;Variables&quot;&gt;VM&lt;/span&gt; (required argument)
   &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;v, &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;vrdp, &lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;-&lt;/span&gt;vrdp on&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;off&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;config       &lt;span class=&quot;Variables&quot;&gt;Enable&lt;/span&gt; (default) &lt;span class=&quot;Operators&quot;&gt;or&lt;/span&gt; disable the &lt;span class=&quot;Variables&quot;&gt;VRDP&lt;/span&gt;
                                         server &lt;span class=&quot;Operators&quot;&gt;or&lt;/span&gt; don&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t change the setting&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -p, -vrdpport, --vrdpport &amp;lt;ports&amp;gt;     Comma-separated list of ports the VRDP&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;                                         server can bind to. Use a dash between&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;                                         two port numbers to specify a range&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -a, -vrdpaddress, --vrdpaddress &amp;lt;ip&amp;gt;  Interface IP the VRDP will bind to &lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -c, -capture, --capture               Record the VM screen output to a file&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -w, --width                           Frame width when recording&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -h, --height                          Frame height when recording&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -r, --bitrate                         Recording bit rate when recording&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;   -f, --filename                        File name when recording.  The codec&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;                                         used will be chosen based on the&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;                                         file extension&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-30T13:30:09+00:00</dc:date>
</item>
<item rdf:about="http://blog.futtta.be/?p=3488">
	<title>Frank Goossens: The state of WP YouTube Lyte (now with fresh Pomplamoose)</title>
	<link>http://feedproxy.google.com/~r/futtta/~3/ws_h936R_jU/</link>
	<content:encoded>&lt;p&gt;Although it has been a few months since I last wrote about my baby WordPress plugin, time did not stand still between version 0.3.0 and 0.5.2; the player size can now be changed in the options-screen, I&amp;#8217;ve replaced &lt;a title=&quot;older blogpost about including newTube in wp-youtube-lyte&quot; href=&quot;http://blog.futtta.be/2010/06/16/embedding-html5-youtube-video-with-wp-youtube-lyte/&quot;&gt;my newTube html5-hack &lt;/a&gt;with &lt;a title=&quot;YouTube api blog about the new embed code&quot; href=&quot;http://apiblog.youtube.com/2010/07/new-way-to-embed-youtube-videos.html&quot;&gt;Google&amp;#8217;s official (yet experimental) new html5-compatible embed code&lt;/a&gt; and I started migrating the CSS from the mess that had become the JavaScript-file. And I almost forgot what may be the most important change; I started searching for blogs that use WP-YouTube-Lyte to see how it behaves in the wild. Some of the bugs I discovered that way;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WordPress has a &lt;a href=&quot;http://www.aaronrussell.co.uk/blog/improving-wordpress-the_excerpt/&quot;&gt;lousy &amp;#8220;the_excerpt&amp;#8221;-function&lt;/a&gt; which removes script-tags but not the script itself, which caused my JavaScript to be displayed as normal text in excerpts (typically in category-pages). Fixed with some unpleasant CDATA-tinkering.&lt;/li&gt;
&lt;li&gt;Some blogs allow crawlers to see the contents of a directory if no index.* is in place, so e.g. &lt;a title=&quot;solved, thanks to mark at wordpress.org support forums&quot; href=&quot;http://wordpress.org/support/topic/call-to-undefined-function-add_action-2?replies=3&quot;&gt;options.php gets indexed with an ugly (but logical) error-message&lt;/a&gt;. Fixed with an &lt;a title=&quot;index.html, containing some relevant info and links for google to index ;-)&quot; href=&quot;http://blog.futtta.be/wp-content/plugins/wp-youtube-lyte/index.html&quot;&gt;index.html&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There&amp;#8217;s a lot of themes and some of those have CSS that impacts the way WP YouTube Lyte is displayed. Most issues should be fixed by better CSS for my plugin, but &lt;a title=&quot;contact me!&quot; href=&quot;http://blog.futtta.be/contact/&quot;&gt;do let me know if you encounter more weird display-problems&lt;/a&gt; (especially the controls that are incorrectly positioned).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But with all those changes you might start to wonder if WP-YouTube-Lyte still reduces download size &amp;amp; rendering time substantially, no? So I ran a couple of new tests for &lt;a title=&quot;example overview-page on my blog with 3 embedded youtube's&quot; href=&quot;http://blog.futtta.be/tag/lyte/&quot;&gt;this page on my blog&lt;/a&gt; (it has 3 embedded YouTube&amp;#8217;s) on webpagetest.org (settings: 5 runs on IE7 via Amsterdam, excluding requests to stats.wordpress.com). The difference is &amp;#8230; well, judge for yourself (or see below the tables for the summary)&lt;/p&gt;
&lt;p&gt;With normal Flash-based embeds (&lt;a title=&quot;normal flash-based youtube embeds&quot; href=&quot;http://www.webpagetest.org/result/100827_3PSK&quot;&gt;full results here&lt;/a&gt;):&lt;/p&gt;
&lt;table id=&quot;tableResults&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;10&quot; align=&quot;center&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;/th&gt;
&lt;th colspan=&quot;3&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;/th&gt;
&lt;th colspan=&quot;3&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;Document Complete&lt;/th&gt;
&lt;th colspan=&quot;3&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;Fully Loaded&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Load Time&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;First Byte&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Start Render&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Requests&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Bytes In&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Requests&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Bytes In&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; valign=&quot;middle&quot;&gt;First View&lt;/td&gt;
&lt;td id=&quot;fvLoadTime&quot; valign=&quot;middle&quot;&gt;1.850s&lt;/td&gt;
&lt;td id=&quot;fvTTFB&quot; valign=&quot;middle&quot;&gt;0.634s&lt;/td&gt;
&lt;td id=&quot;fvStartRender&quot; valign=&quot;middle&quot;&gt;1.330s&lt;/td&gt;
&lt;td id=&quot;fvDocComplete&quot; valign=&quot;middle&quot;&gt;1.850s&lt;/td&gt;
&lt;td id=&quot;fvRequestsDoc&quot; valign=&quot;middle&quot;&gt;15&lt;/td&gt;
&lt;td id=&quot;fvBytesDoc&quot; valign=&quot;middle&quot;&gt;343 KB&lt;/td&gt;
&lt;td id=&quot;fvFullyLoaded&quot; valign=&quot;middle&quot;&gt;5.350s&lt;/td&gt;
&lt;td id=&quot;fvRequests&quot; valign=&quot;middle&quot;&gt;22&lt;/td&gt;
&lt;td id=&quot;fvBytes&quot; valign=&quot;middle&quot;&gt;524 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; valign=&quot;middle&quot;&gt;Repeat View&lt;/td&gt;
&lt;td id=&quot;rvLoadTime&quot; valign=&quot;middle&quot;&gt;1.142s&lt;/td&gt;
&lt;td id=&quot;rvTTFB&quot; valign=&quot;middle&quot;&gt;0.346s&lt;/td&gt;
&lt;td id=&quot;rvStartRender&quot; valign=&quot;middle&quot;&gt;0.497s&lt;/td&gt;
&lt;td id=&quot;rvDocComplete&quot; valign=&quot;middle&quot;&gt;1.142s&lt;/td&gt;
&lt;td id=&quot;rvRequestsDoc&quot; valign=&quot;middle&quot;&gt;5&lt;/td&gt;
&lt;td id=&quot;rvBytesDoc&quot; valign=&quot;middle&quot;&gt;17 KB&lt;/td&gt;
&lt;td id=&quot;rvFullyLoaded&quot; valign=&quot;middle&quot;&gt;2.455s&lt;/td&gt;
&lt;td id=&quot;rvRequests&quot; valign=&quot;middle&quot;&gt;5&lt;/td&gt;
&lt;td id=&quot;rvBytes&quot; valign=&quot;middle&quot;&gt;17 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;And with WP YouTube Lyte (&lt;a title=&quot;same page, but now with LYTE embeds&quot; href=&quot;http://www.webpagetest.org/result/100827_3PRK/&quot;&gt;full results here&lt;/a&gt;):&lt;/p&gt;
&lt;table id=&quot;tableResults&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;10&quot; align=&quot;center&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;/th&gt;
&lt;th colspan=&quot;3&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;/th&gt;
&lt;th colspan=&quot;3&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;Document Complete&lt;/th&gt;
&lt;th colspan=&quot;3&quot; align=&quot;center&quot; valign=&quot;middle&quot;&gt;Fully Loaded&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Load Time&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;First Byte&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Start Render&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Requests&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Bytes In&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Requests&lt;/th&gt;
&lt;th align=&quot;center&quot; valign=&quot;middle&quot;&gt;Bytes In&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; valign=&quot;middle&quot;&gt;First View&lt;/td&gt;
&lt;td id=&quot;fvLoadTime&quot; valign=&quot;middle&quot;&gt;1.201s&lt;/td&gt;
&lt;td id=&quot;fvTTFB&quot; valign=&quot;middle&quot;&gt;0.355s&lt;/td&gt;
&lt;td id=&quot;fvStartRender&quot; valign=&quot;middle&quot;&gt;0.974s&lt;/td&gt;
&lt;td id=&quot;fvDocComplete&quot; valign=&quot;middle&quot;&gt;1.201s&lt;/td&gt;
&lt;td id=&quot;fvRequestsDoc&quot; valign=&quot;middle&quot;&gt;10&lt;/td&gt;
&lt;td id=&quot;fvBytesDoc&quot; valign=&quot;middle&quot;&gt;55 KB&lt;/td&gt;
&lt;td id=&quot;fvFullyLoaded&quot; valign=&quot;middle&quot;&gt;2.065s&lt;/td&gt;
&lt;td id=&quot;fvRequests&quot; valign=&quot;middle&quot;&gt;20&lt;/td&gt;
&lt;td id=&quot;fvBytes&quot; valign=&quot;middle&quot;&gt;103 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;left&quot; valign=&quot;middle&quot;&gt;Repeat View&lt;/td&gt;
&lt;td id=&quot;rvLoadTime&quot; valign=&quot;middle&quot;&gt;0.605s&lt;/td&gt;
&lt;td id=&quot;rvTTFB&quot; valign=&quot;middle&quot;&gt;0.352s&lt;/td&gt;
&lt;td id=&quot;rvStartRender&quot; valign=&quot;middle&quot;&gt;0.473s&lt;/td&gt;
&lt;td id=&quot;rvDocComplete&quot; valign=&quot;middle&quot;&gt;0.605s&lt;/td&gt;
&lt;td id=&quot;rvRequestsDoc&quot; valign=&quot;middle&quot;&gt;2&lt;/td&gt;
&lt;td id=&quot;rvBytesDoc&quot; valign=&quot;middle&quot;&gt;12 KB&lt;/td&gt;
&lt;td id=&quot;rvFullyLoaded&quot; valign=&quot;middle&quot;&gt;1.447s&lt;/td&gt;
&lt;td id=&quot;rvRequests&quot; valign=&quot;middle&quot;&gt;5&lt;/td&gt;
&lt;td id=&quot;rvBytes&quot; valign=&quot;middle&quot;&gt;14 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Did you see that? &lt;strong&gt;Less requests, less data and faster rendering&lt;/strong&gt; for first and repeat views. Hurray for WP-YouTube-Lyte! But enough with that ego-tripping already, I&amp;#8217;ve got &lt;a title=&quot;opera only activates the first embed, after that it stops. will have to start doing domcontentloaded. interesting yet kind of disturbing as well. watch out for version 0.5.3!&quot; href=&quot;http://stackoverflow.com/questions/3594088/javascript-scope-issue-in-opera&quot;&gt;an Opera-bug to look into&lt;/a&gt;! Or wait, I&amp;#8217;ll watch this great new &lt;a title=&quot;I love my pomplamoose fresh!&quot; href=&quot;http://blog.futtta.be/2009/11/02/liefde-voor-vers-geperste-pomplamoose/&quot;&gt;Pomplamoose&lt;/a&gt;+Ben Folds+Nick Hornby  videosong first:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;lyte&quot; id=&quot;6G5JaicYuVU&quot;&gt;&lt;a href=&quot;http://youtu.be/6G5JaicYuVU&quot;&gt;&lt;img src=&quot;http://img.youtube.com/vi/6G5JaicYuVU/default.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-30T06:02:53+00:00</dc:date>
</item>
<item rdf:about="http://blog.elisehuard.be/?p=1260">
	<title>Elise Huard: Land Rat</title>
	<link>http://xfruits.com/spacebug/?id=69461&amp;clic=595909945&amp;url=http%3A%2F%2Ffeedproxy.google.com%2F%7Er%2FTheSoundOfOneHandClapping%2F%7E3%2FHYhU4N-BnN8%2F</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://blog.elisehuard.be/wp-content/uploads/2010/08/sunfast.jpg&quot;&gt;&lt;img src=&quot;http://blog.elisehuard.be/wp-content/uploads/2010/08/sunfast.jpg&quot; alt=&quot;&quot; title=&quot;sunfast&quot; width=&quot;299&quot; height=&quot;199&quot; class=&quot;left&quot; /&gt;&lt;/a&gt; Yesterday was my second time sailing.  A friendly coworker is the proud owner of a cruiser-racer hybrid sailboat, which can take a crew of 6.  He&amp;#8217;s often looking for crew, and as the end of summer is nearing, I thought I&amp;#8217;d give it another shot.&lt;/p&gt;
&lt;p&gt;First time was a mixed experience.  The weather was good, and I enjoyed most of it, but ended the trip thoroughly cold and a little seasick.  The sea wind is very efficient at sucking every heat out of you, and I was glad when the day was over.&lt;/p&gt;
&lt;p&gt;So this time I came prepared for the cold, I had 3 layers of fleece over normal clothing, a windbreaker, and windbreaker pants.  But, foolishly, I didn&amp;#8217;t come prepared for seasickness. &lt;/p&gt;
&lt;p&gt;The trip started out fine &amp;#8211; the weather forecast was not promising, but we actually had a clear sky.  The wind was whipping up large waves, and as soon as we left port, the boat started dancing on tall waves &amp;#8211; impressive but fun.&lt;/p&gt;
&lt;p&gt;The idea was to run a race.  Races in that kind of boat means going through a virtual starting line as soon as the starting shot is fired, and doing a few loops around a couple of buoys.  The buoys are dynamic so that you need to sail at least one of the legs upwind.&lt;/p&gt;
&lt;p&gt;This being a race, the more experienced sailors got to steer and adjust the sails, and I was left playing intelligent counterweight.  I listened to anything that sounded like &amp;#8216;changing tack&amp;#8217; or &amp;#8216;ready to gipe ?&amp;#8217; and scrambled over to the other side of the boat.  Not that simple when you climb over a near featureless expanse of white plastic, and the boat is changing inclination dramatically, and you need to avoid a sail swiping past over your head.&lt;/p&gt;
&lt;p&gt;As it was, it was fortunate that I didn&amp;#8217;t get to do anything more complex than hanging over the correct side of the boat.  About 45 minutes in, my stomach started playing up, and the fun part was over.  I learned that seasickness comes in waves, like the sea: you feel steadily worse, until you start retching up (whatever&amp;#8217;s left) a few times, and then you get a reprieve for about 10 minutes, until the buildup starts again.&lt;/p&gt;
&lt;p&gt;During reprieves, I tried to understand what was going on.  Sailing vocabulary takes some translation (starting with bloody &amp;#8216;left&amp;#8217; and &amp;#8216;right&amp;#8217;, for god&amp;#8217;s sake), especially when you have to parse it in two languages (dutch and english).  There are many rules, and numbers in knots and degrees.  We were at times surrounded by other boats, not that surprising, in a race, and priority was to be observed.  Keeping two sails taut and functioning at all times in changing and violent winds also takes a lot of ongoing monitoring and action.  A sailboat, like good open source projects, is no democracy, and you quickly understand why that&amp;#8217;s necessary.&lt;/p&gt;
&lt;p&gt;There&amp;#8217;s no graceful way to be seasick.  I puked a few times on myself before finding the right way to get everything to go down the side.  The upside was that I was showered with brine on a regular basis, so the worst got washed off.  Also I hadn&amp;#8217;t eaten anything since 6o&amp;#8217;clock in the morning, so I was spared anything solid.&lt;/p&gt;
&lt;p&gt;I had a major case of cognitive dissonance.  I love the idea of sailing, and have wanted to do it for ages.  The waves glinting in the sun, the graceful shapes of other sailboats, would normally have me sighing with contentment.  As it was, I was feeling way too bad to enjoy it, which felt like a shame, even through the nausea.&lt;/p&gt;
&lt;p&gt;As I was hanging there, my feet soaked with seawater, painting Peter&amp;#8217;s boat with the contents of my stomach, I reflected on how I could be sitting in my living room reading a good book, with no more movement than the slow, slow sliding of tectonic plates a few miles below.  Not having eaten since six, being wet and violently sick left me a shivering wreck, just waiting for it to be over.&lt;/p&gt;
&lt;p&gt;There was another unhappy sailor on board, so I was spared being the only one.  The skipper ended up taking pity on us and cut the race short.  He explained to me that at that point, there weren&amp;#8217;t many points to lose anyway.  As soon as we hit port and quieter waters, I felt better.  I took a shower, changed clothes, and forced down some sandwiches, feeling almost human again.  Then I scrubbed whatever traces of sick that were left on the boat.&lt;/p&gt;
&lt;p&gt;If I&amp;#8217;m allowed back, I&amp;#8217;ll give it another try.  This time I&amp;#8217;ll take the pills, and I&amp;#8217;ll wear the many layers, and plastic boots, and I&amp;#8217;ll hope the experience will be somewhat more like what I keep imagining it should be.  Arrrr.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-29T16:18:16+00:00</dc:date>
</item>
<item rdf:about="http://www.jedi.be/blog/2010/08/29/sending-keystrokes-to-your-virtual-machines-using-X-vnc-rdp-or-native/">
	<title>Patrick Debois: Sending Keystrokes to Your (Virtual) Machines using X, Vnc , Rdp or Native ways</title>
	<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/nalgRK13lTI/</link>
	<content:encoded>&lt;h3&gt;Options overview&lt;/h3&gt;

&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;http://feeds.feedburner.com/blog/2010/08/29/sending-keystrokes-to-your-virtual-machines-using-X-vnc-rdp-or-native/mission-impossible.jpg&quot; /&gt;
&lt;/td&gt;
&lt;td&gt;
The most common way to interact with a virtual machine is by remote login via ssh. This blogpost is about a different way of interaction: it will show you how to send keystrokes (or mouse) directly to the remote screen of the machine. This can be used for instance for kickstarting a machine before the network is up (typing linux), or automating things that require screen interaction. 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;p&gt;In general three types of remote screen sessions exist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Vnc&quot;&gt;VNC&lt;/a&gt;: is a graphical desktop sharing system that uses the RFB protocol&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Remote_Desktop_Protocol&quot;&gt;RDP&lt;/a&gt;: A proprietary developed by Microsoft&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/X_Window_System&quot;&gt;X-session&lt;/a&gt;: based on the X Window System (commonly X or X11)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Most virtualization solutions allow you to activate one of these remote session options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://bradarsenault.com/post/482&quot;&gt;Enable VNC in Vmware Fusion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.petri.co.il/virtual_using_vnc_and_vmware_server.htm&quot;&gt;Enable VNC in Vmware Esx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.virtuatopia.com/index.php/Configuring_a_VNC_based_Graphical_Console_for_a_Xen_Paravirtualized_domainU_Guest#Configuring_a_Xen_domainU_for_VNC_Access&quot;&gt;Enable VNC in Xen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.howtoforge.com/virtualization-with-kvm-on-a-fedora-13-server&quot;&gt;Enable VNC in KVM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.virtualbox.org/manual/ch07.html&quot;&gt;Enable RDP in Virtualbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;hr /&gt;


&lt;h3&gt;Keycodes versus keys&lt;/h3&gt;

&lt;p&gt;Before we start of with the different solutions, I would like to point out that sending keystrokes to these remote sessions is not the same as printing a character to the screen.&lt;/p&gt;

&lt;p&gt;Keyboards and for that matter virtual keyboards interact with &lt;a href=&quot;http://en.wikipedia.org/wiki/Scancode&quot;&gt;scancodes&lt;/a&gt; : every key on the keyboard is assigned a scancode. This has a few consequences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An uppercase letter is a combination of a scancode for Shift and a scancode for the letter&lt;/li&gt;
&lt;li&gt;The same scancode on a different keyboard layout can cause a different letter to be send: f.i. scancode 10 (hex) generate a 'Q' on a Qwerty keyboard but 'A' on an Azerty keyboard&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Most of the tools assume the use of a US Layout keyboard. A good overview of the different scancodes can be found at &lt;a href=&quot;http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html&quot;&gt;http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;


&lt;h3&gt;Interacting with X-Windows&lt;/h3&gt;

&lt;p&gt;Before VNC and RDP existed , people already had the option of using an X-client to an X-server.&lt;/p&gt;

&lt;p&gt;P.S. I know you are probably looking for RDP or VNC interaction, but this description will come in handy as we will use this through Xvfb.&lt;/p&gt;

&lt;p&gt;I found two tools that help sending keystrokes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;xte : &lt;a href=&quot;http://hoopajoo.net/projects/xautomation.html&quot;&gt;http://hoopajoo.net/projects/xautomation.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;xdotool : &lt;a href=&quot;http://www.semicomplete.com/projects/xdotool/&quot;&gt;http://www.semicomplete.com/projects/xdotool/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;C++ example code : &lt;a href=&quot;http://www.doctort.org/adam/nerd-notes/x11-fake-keypress-event.html&quot;&gt;http://www.doctort.org/adam/nerd-notes/x11-fake-keypress-event.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I couldn't get xte to compile on my mac but xdotool is conveniently available in macports.&lt;/p&gt;

&lt;p&gt;What is xdotool?
This tool lets you simulate keyboard input and mouse activity, move and resize windows, etc. It does this using X11's XTEST extension and other Xlib functions.
Additionally, you can search for windows and move, resize, hide, and modify window properties like the title. If your window manager supports it, you can use xdotool to switch desktops, move windows between desktops, and change the number of desktops.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ sudo port install xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Computing dependencies &lt;span class=&quot;ControlStructures&quot;&gt;for&lt;/span&gt; xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Fetching xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Verifying checksum(s) &lt;span class=&quot;ControlStructures&quot;&gt;for&lt;/span&gt; xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Extracting xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Applying patches to xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Configuring xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Building xdotool
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Staging xdotool into destroot
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Installing xdotool @2.20100818.3004_0
---&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;  Activating xdotool @2.20100818.3004_0

To use xdotool (and avoid the error message &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;Error: XTEST extension unavailable&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;on '(null)'&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) you need to enable the XTEST extension. If you&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;re using Apple&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;s
X11.app, the command to &lt;span class=&quot;ControlStructures&quot;&gt;do&lt;/span&gt; so is: 

defaults write org.x.X11 enable_test_extensions -boolean true 

If you&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;re using the MacPorts X11.app, use: &lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;defaults write org.macports.X11 enable_test_extensions -boolean true &lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;This only needs to be done once.&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;---&amp;gt;  Cleaning xdotool&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Sending the key 'a' to your X-sessions&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ xdotool key &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;a&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;The tool has a lot of ways of interacting with the windows, and for our purposes it has a option to send a &lt;em&gt;key&lt;/em&gt; and even &lt;em&gt;mouse&lt;/em&gt; .&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ xdotool
Usage: xdotool &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;args&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
Available commands:
  getactivewindow
  getwindowfocus
  getwindowname
  getwindowpid
  search
  selectwindow
  help
  version
  click
  getmouselocation
  key
  keydown
  keyup
  mousedown
  mousemove
  mousemove_relative
  mouseup
  type
  windowactivate
  windowfocus
  windowmap
  windowmove
  windowraise
  windowsize
  windowunmap
  windowreparent
  windowkill
  set_window
  behave
  set_num_desktops
  get_num_desktops
  set_desktop
  get_desktop
  set_desktop_for_window
  get_desktop_for_window
  get_desktop_viewport
  set_desktop_viewport
&lt;/pre&gt;
&lt;/div&gt;




&lt;hr /&gt;


&lt;h3&gt;Interacting with VNC&lt;/h3&gt;

&lt;h4&gt;Using Ruby-vnc&lt;/h4&gt;

&lt;p&gt;The easiest way I found to interact with a VNC session is by using the excellent ruby-vnc library &lt;a href=&quot;http://code.google.com/p/ruby-vnc/&quot;&gt;http://code.google.com/p/ruby-vnc/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The example on the website gives you a good idea on how it works:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt; launch xclock on localhost. note that there is an xterm in the top-left&lt;/span&gt;
Net::VNC.open &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;localhost:0&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;Constants&quot;&gt;&lt;span class=&quot;Constants&quot;&gt;:&lt;/span&gt;shared&lt;/span&gt; =&amp;gt; &lt;span class=&quot;LanguageConstants&quot;&gt;true&lt;/span&gt;, &lt;span class=&quot;Constants&quot;&gt;&lt;span class=&quot;Constants&quot;&gt;:&lt;/span&gt;password&lt;/span&gt; =&amp;gt; &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;mypass&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;ControlStructures&quot;&gt;do &lt;/span&gt;|&lt;span class=&quot;Variables&quot;&gt;vnc&lt;/span&gt;|
  vnc.pointer_move &lt;span class=&quot;Numbers&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;Numbers&quot;&gt;10&lt;/span&gt;
  vnc.type &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;xclock&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
  vnc.key_press &lt;span class=&quot;Constants&quot;&gt;&lt;span class=&quot;Constants&quot;&gt;:&lt;/span&gt;return&lt;/span&gt;
&lt;span class=&quot;ControlStructures&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;Using vncviewer and xvfb&lt;/h4&gt;

&lt;p&gt;If you are not that confident with ruby, there is another option. Xvfb allows you to create a virtual screen on which you can interact. Together with the vncviewer (X-client) we can use it with xdotool to interact with a vnc session.&lt;/p&gt;

&lt;p&gt;The first step is to create a vnc password file, as with vncviewer the password can not be supplied on the commandline.&lt;/p&gt;

&lt;p&gt;Create password file name 'mypasswordfile'&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ vncpasswd mypasswordfile
Password:
Verify:
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Start Xfvb screen (:1 means another display and 24 is the colordepth)&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ Xvfb  :1 -screen 0 1024x768x24 -fbdir /var/tmp/
(EE) AIGLX error: dlopen of /usr/X11/lib/dri/swrast_dri.so failed (dlopen(/usr/X11/lib/dri/swrast_dri.so, 5): image not found)
(EE) GLX: could not load software renderer
(EE) XKB: Couldn&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t open rules file /usr/X11/share/X11/xkb/rules/base&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;(EE) XKB: No components provided for device Virtual core keyboard&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now we can start vncviewer (that logs in automatically) within the Virtual Frame buffer&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ DISPLAY=:1 vncviewer -FullColor --Passwordfile mypasswordfile localhost
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;Now we are back to using xdotool to interact with the session.&lt;/p&gt;

&lt;hr /&gt;


&lt;h3&gt;Interacting with RDP&lt;/h3&gt;

&lt;h4&gt;Using properjavardp&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;Properjava rdp&lt;/em&gt; -  &lt;a href=&quot;http://properjavardp.sourceforge.net/&quot;&gt;http://properjavardp.sourceforge.net/&lt;/a&gt; is a full implementation of the RDP protocol in Java. It doesn't seem to be maintained and several 'forks' are available.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://github.com/kohsuke/properjavardp/tree/master/src/net/propero/&quot;&gt;http://github.com/kohsuke/properjavardp/tree/master/src/net/propero/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.elusiva.com/opensource/&quot;&gt;http://www.elusiva.com/opensource/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jrdesktop.sourceforge.net/&quot;&gt;http://jrdesktop.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I used the original source to get it running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import the src directory in a java project&lt;/li&gt;
&lt;li&gt;Add the src files like RdpPacket_Localised for the src-1.4 directory&lt;/li&gt;
&lt;li&gt;Add the jar files to the project (log4j.jar, ..)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The following code will give you an idea on how you can use it&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;&lt;span class=&quot;Keywords&quot;&gt;package&lt;/span&gt; net.propero.rdp;

&lt;span class=&quot;Keywords&quot;&gt;import&lt;/span&gt; java.net.InetAddress;
&lt;span class=&quot;Keywords&quot;&gt;import&lt;/span&gt; net.propero.rdp.rdp5.Rdp5;
&lt;span class=&quot;Keywords&quot;&gt;import&lt;/span&gt; net.propero.rdp.rdp5.VChannels;

public class SendKeysRdp {
    public static void main(String[] args) {
        int logonflags = Rdp.&lt;span class=&quot;Constants&quot;&gt;RDP_LOGON_NORMAL&lt;/span&gt;;
        Rdp5 RdpLayer = &lt;span class=&quot;LanguageConstants&quot;&gt;null&lt;/span&gt;;
    
        VChannels channels = &lt;span class=&quot;Keywords&quot;&gt;new&lt;/span&gt; VChannels();
        RdpLayer = &lt;span class=&quot;Keywords&quot;&gt;new&lt;/span&gt; Rdp5(channels);
        Common.rdp = RdpLayer;      
        &lt;span class=&quot;ControlStructures&quot;&gt;try&lt;/span&gt; {
&lt;span class=&quot;CommentsBlock&quot;&gt;&lt;span class=&quot;CommentsBlock&quot;&gt;/*&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;CommentsBlock&quot;&gt; *                  RdpLayer.connect(Options.username, InetAddress&lt;/span&gt;
&lt;span class=&quot;CommentsBlock&quot;&gt;                            .getByName(server), logonflags, Options.domain,&lt;/span&gt;
&lt;span class=&quot;CommentsBlock&quot;&gt;                            Options.password, Options.command,&lt;/span&gt;
&lt;span class=&quot;CommentsBlock&quot;&gt;                            Options.directory);         &lt;/span&gt;
&lt;span class=&quot;CommentsBlock&quot;&gt; &lt;span class=&quot;CommentsBlock&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;
            RdpLayer.connect(&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;Username&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, InetAddress.getByName(&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;192.168.2.30&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) , logonflags, &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;Domain&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;Command&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;Directory&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;);
            RdpLayer.sendInput(Input.getTime(), Input.&lt;span class=&quot;Constants&quot;&gt;RDP_INPUT_SCANCODE&lt;/span&gt;, Input.&lt;span class=&quot;Constants&quot;&gt;RDP_KEYPRESS&lt;/span&gt;, &lt;span class=&quot;Numbers&quot;&gt;0x1f&lt;/span&gt;, &lt;span class=&quot;Numbers&quot;&gt;0&lt;/span&gt;);

        } &lt;span class=&quot;ControlStructures&quot;&gt;catch&lt;/span&gt;(Exception e){
            System.out.println(e.toString());
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;Using rdesktop and Xvfb&lt;/h4&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ sudo port install rdesktop
$ Xvfb  :1 -screen 0 1024x768x24 -fbdir /var/tmp/
(EE) AIGLX error: dlopen of /usr/X11/lib/dri/swrast_dri.so failed (dlopen(/usr/X11/lib/dri/swrast_dri.so, 5): image not found)
(EE) GLX: could not load software renderer
(EE) XKB: Couldn&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t open rules file /usr/X11/share/X11/xkb/rules/base&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;(EE) XKB: No components provided for device Virtual core keyboard&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ DISPLAY=:1 rdesktop -u &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;username&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; -p &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;password&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; -d &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;domain&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; remotehost
&lt;/pre&gt;
&lt;/div&gt;


&lt;h4&gt;Directly from C code re-using code from rdesktop&lt;/h4&gt;

&lt;p&gt;I found a link to an xrdp overflow tool that seems to use the &lt;em&gt;rdp_send_scancode&lt;/em&gt; function to send the keystroke.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://webcache.googleusercontent.com/search?q=cache:GIucABEgkT8J:packetstormsecurity.org/0904-exploits/xrdp-overflow.txt+rdp_send_scancode&amp;cd=7&amp;hl=nl&amp;ct=clnk&amp;gl=be&amp;client=firefox-a&quot;&gt;http://webcache.googleusercontent.com/search?q=cache:GIucABEgkT8J:packetstormsecurity.org/0904-exploits/xrdp-overflow.txt+rdp_send_scancode&amp;amp;cd=7&amp;amp;hl=nl&amp;amp;ct=clnk&amp;amp;gl=be&amp;amp;client=firefox-a&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another cool trick I picked up, was the way to launch commands using rdesktop :&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.singularity.be/2008/03/using-rdesktop-to-script-windows.html&quot;&gt;http://www.singularity.be/2008/03/using-rdesktop-to-script-windows.html&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;


&lt;h3&gt;Virtualbox option&lt;/h3&gt;

&lt;p&gt;Virtualbox provides a way to send keyboard scancodes directly using it's excellent API. The option &lt;em&gt;keyboardputscancode&lt;/em&gt; allows to specify the hex code of the scancode. You can also send multiple keycodes after each other. In my experience this doesn't work well for a long sequence. It seems the buffer it limited and your best option is to send the different keycodes in multiple calls to the command line.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
VBoxManage controlvm        &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;uuid&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;name&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt;
                            pause&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;resume&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;reset&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;poweroff&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;savestate&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
                            acpipowerbutton&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;acpisleepbutton&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
                            keyboardputscancode &lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;hex&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; [&lt;span class=&quot;Operators&quot;&gt;&amp;lt;&lt;/span&gt;hex&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; ...]&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;




&lt;hr /&gt;


&lt;h3&gt;Using a non-headless solution&lt;/h3&gt;

&lt;p&gt;In order to automate visual tasks, there exist a lot of macro/recording tools, the downside of them is that they need an actual display to run. When scripting you are mostly looking for headless solutions though. The disadvantage of headless solutions is that they are cumbersome to create as you have to move the pointer and the keys at the exact spot.&lt;/p&gt;

&lt;h4&gt;Sikuli&lt;/h4&gt;

&lt;p&gt;When you are interacting with a session you as a person do a lot more then just typing things. You yourself also locate which window to focus, what button to click.&lt;/p&gt;

&lt;p&gt;Sikuli is a great tool that tries to help you in those tasks. It uses image recognition tools to find the correct place on the screen. Think of it a visual scripting language for screen interaction. An example script looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://feeds.feedburner.com/blog/2010/08/29/sending-keystrokes-to-your-virtual-machines-using-X-vnc-rdp-or-native/sikuli-example.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It allows you use these commands within java and it seems that someone is working on &lt;a href=&quot;https://answers.launchpad.net/sikuli/+question/118598&quot;&gt;replacing the java.awt.robot to a vnc version&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More background can be found at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.software-testing.com.au/blog/2010/08/16/automating-flash-ajax-popups-and-more-using-ruby-watir-and-sikuli/&quot;&gt;http://www.software-testing.com.au/blog/2010/08/16/automating-flash-ajax-popups-and-more-using-ruby-watir-and-sikuli/
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.csail.mit.edu/uid/projects/sikuli/sikuli-uist2009.pdf&quot;&gt;http://groups.csail.mit.edu/uid/projects/sikuli/sikuli-uist2009.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sikuli.org/documentation.shtml#/trac/wiki/How%20to%20use%20Sikuli%20Script%20in%20your%20JAVA%20programs?&quot;&gt;http://sikuli.org/documentation.shtml#/trac/wiki/How%20to%20use%20Sikuli%20Script%20in%20your%20JAVA%20programs?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The function type() simulates keyboard typing just as a user types text in a application. However, type() doesn't work for different keyboard layouts other than QWERTY, such as DVORAK. We provide a workaround paste() since 0.9.7 (20100127). The function paste() transfers text through system's clipboard, which is fully independent of keyboard layouts. A sample usage that paste &quot;network&quot; into a search box is shown as follows.&lt;/p&gt;

&lt;h4&gt;Other options&lt;/h4&gt;

&lt;p&gt;For completeness I provide different options I found useful&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pywinauto : &lt;a href=&quot;http://pywinauto.openqa.org/&quot;&gt;http://pywinauto.openqa.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;autoit :  &lt;a href=&quot;http://www.autoitscript.com/&quot;&gt;http://www.autoitscript.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Using applescript: &lt;a href=&quot;http://jehiah.cz/projects/ARD-SendUnixCommands.php&quot;&gt;http://jehiah.cz/projects/ARD-SendUnixCommands.php
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ osascript -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;tell application &amp;quot;System Events&amp;quot; to keystroke &amp;quot;LOGIN_NAME&amp;quot;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;;&lt;/span&gt; \
$ osascript -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;tell application &amp;quot;System Events&amp;quot; to keystroke tab&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;;&lt;/span&gt; \
$ osascript -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;tell application &amp;quot;System Events&amp;quot; to delay 0.5&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;;&lt;/span&gt; \
$ osascript -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;tell application &amp;quot;System Events&amp;quot; to keystroke &amp;quot;PASSWORDHERE&amp;quot;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;;&lt;/span&gt; \
$ osascript -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;tell application &amp;quot;System Events&amp;quot; to delay 0.5&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Operators&quot;&gt;;&lt;/span&gt; \
$ osascript -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;tell application &amp;quot;System Events&amp;quot; to keystroke return&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;

Replace LOGIN_NAME and PASSWORD with the proper values
Run as &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;root&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; user
&lt;/pre&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-29T14:35:42+00:00</dc:date>
</item>
<item rdf:about="http://debaer.org/blog/?p=220">
	<title>Jo De Baer: Adelaide Australia - Beach Run and Wine Tasting</title>
	<link>http://debaer.org/blog/?p=220</link>
	<content:encoded>&lt;p&gt;Good time today: ran 13k in just over an hour, 12.9kph on average. A large part was on the &lt;a href=&quot;http://www.mapmyrun.com/route/au/glenelg/821128307723741297&quot; target=&quot;_blank&quot;&gt;beach&lt;/a&gt;. Bit better than my &lt;a href=&quot;http://www.mapmyrun.com/route/us/ut/provo/818128307976921824&quot; target=&quot;_blank&quot;&gt;Provo run&lt;/a&gt; to the Salt Lake (average was 12.09kph), but then again that was at a much higher altitude. Today&amp;#8217;s run brought my week&amp;#8217;s total to 46k, which is more than my 42k goal. Was not easy, considering two time zone shifts of at least 8 hours each, and having a 6 day week (lost the 27th somewhere in the Pacific). I ran the whole week with my new set of shoes, Adistar Salvation 2. First impression is very good.&lt;/p&gt;
&lt;p&gt;In the afternoon the people from our local Novell partner took us on a trip to the Fleurieu wine area. We visited D&amp;#8217;Arenberg and Woodstock. I&amp;#8217;m not a big wine drinker, but we had a glass of the 2004 Woodstock Cabernet Sauvignon during lunch, and I must say - &amp;#8220;yum&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://debaer.org/blog/wp-content/uploads/2010/08/dsc_0439.jpg&quot; title=&quot;dsc_0439.jpg&quot;&gt;&lt;img src=&quot;http://debaer.org/blog/wp-content/uploads/2010/08/dsc_0439.jpg&quot; alt=&quot;dsc_0439.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-29T11:24:07+00:00</dc:date>
</item>
<item rdf:about="http://amedee.be/121 at http://amedee.be">
	<title>Amedee Van Gasse: Visual Editor 1.4 voor Eclipse 3.6 (Helios)</title>
	<link>http://amedee.be/visual-editor-14-voor-eclipse-36-helios</link>
	<content:encoded>&lt;p&gt;Een van de &lt;a href=&quot;http://amedee.be/mijn-plugins-voor-java-development-eclipse&quot;&gt;plugins&lt;/a&gt; die ik gebruik in &lt;a href=&quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt; is &lt;a href=&quot;http://www.eclipse.org/vep/&quot;&gt;Visual Editor&lt;/a&gt;. De &lt;a href=&quot;http://wiki.eclipse.org/VE/Update&quot;&gt;installatie instructies&lt;/a&gt; zeggen dat je &lt;a href=&quot;http://download.eclipse.org/tools/ve/updates/1.4/&quot; title=&quot;http://download.eclipse.org/tools/ve/updates/1.4/&quot;&gt;http://download.eclipse.org/tools/ve/updates/1.4/&lt;/a&gt; moet invullen in de Install Manager.&lt;/p&gt;
&lt;p&gt;En toen dook er een vies bugje op. Blijkbaar is Visual Editor nog niet voorzien op Eclipse 3.6. De bug staat in detail beschreven op de &lt;a href=&quot;http://www.eclipse.org/forums/index.php?t=msg&amp;th=170792&quot;&gt;Eclipse Community Forums&lt;/a&gt;. Kort samengevat verwacht VE één heel specifieke versie van com.ibm.icu, in plaats van te kijken naar een minimum versie.&lt;/p&gt;
&lt;p&gt;Gelukkig is er een vriendelijke Japanse medemens die al de manifest files van VE aangepast heeft zodat er niet meer gekeken wordt naar één bepaalde versie. Het resultaat daarvan is te vinden op &lt;a href=&quot;http://sourceforge.jp/projects/tmdmaker/wiki/VisualEditor1.4.0ForHelios&quot; title=&quot;http://sourceforge.jp/projects/tmdmaker/wiki/VisualEditor1.4.0ForHelios&quot;&gt;http://sourceforge.jp/projects/tmdmaker/wiki/VisualEditor1.4.0ForHelios&lt;/a&gt;. Uitpakken, in de dropins folder zetten, GEF SDK en EMF SDK installeren, Eclipse herstarten, klaar.&lt;/p&gt;
&lt;p&gt;Sharing is caring, dus bij deze. En ook nog: arigato, nakaG.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-28T21:11:24+00:00</dc:date>
</item>
<item rdf:about="http://amedee.be/120 at http://amedee.be">
	<title>Amedee Van Gasse: Mijn plugins voor Java development in Eclipse</title>
	<link>http://amedee.be/mijn-plugins-voor-java-development-eclipse</link>
	<content:encoded>&lt;p&gt;Ik heb me ingeschreven voor een cursus Java in &lt;a href=&quot;http://www.leerstad.be&quot;&gt;avondschool&lt;/a&gt;. Om er direct al goed in te vliegen, installeer ik nu al &lt;a href=&quot;http://www.eclipse.org&quot;&gt;Eclipse&lt;/a&gt;, nog voor de eerste les. En ja, ik weet 100% zeker dat Eclipse gaat gebruikt worden.&lt;/p&gt;
&lt;p&gt;Vorig jaar heb ik wel eens EasyEclipse gebruikt, maar ik ga het nu houden bij een &quot;standaard&quot; Eclipse waarin ik alleen die plugins installeer die ik echt ga gebruiken. Voorlopig zijn dat de volgende:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/vep/&quot;&gt;Visual Editor&lt;/a&gt;&lt;br /&gt;
Er is wel een probleem mee, maar &lt;a href=&quot;http://amedee.be/visual-editor-14-voor-eclipse-36-helios&quot;&gt;een vriendelijke Japanse medemens heeft dat kunnen oplossen&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://andrei.gmxhome.de/anyedit/index.html&quot;&gt;AnyEdit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.eclipse.org/egit/&quot;&gt;EGit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Welke Eclipse plugins raden jullie mij nog aan? De comments staan open.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-28T21:10:57+00:00</dc:date>
</item>
<item rdf:about="http://www.jedi.be/blog/2010/08/27/ssh-tricks-the-usual-and-beyond/">
	<title>Patrick Debois: ssh tricks - the usual and beyond</title>
	<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/x9-q_PeQmwM/</link>
	<content:encoded>&lt;table&gt;&lt;tr&gt;&lt;td&gt;
&lt;img src=&quot;http://feeds.feedburner.com/blog/2010/08/27/ssh-tricks-the-usual-and-beyond/ssh-bank.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;SSH is an amazing beast. I nearly use it everyday and I'm amazed every time I learn something new. The following is a list of my tricks in the bag. It starts with the usual tricks that you find all over the place, but I hope there will be some new tricks for you too. &lt;br /&gt;&lt;br /&gt;
What's your best trick? Share it in the comments with the world. Nobody can know enough of ssh!
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;




&lt;hr /&gt;


&lt;h2&gt;The basics:&lt;/h2&gt;

&lt;h3&gt;&lt;strong&gt;Password-less login:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;This is usually the first thing start doing when want automation with ssh&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;Create a new keypair&lt;/span&gt;
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file &lt;span class=&quot;ControlStructures&quot;&gt;in&lt;/span&gt; which to save the key (/Users/patrick/.ssh/id_dsa): 
Enter passphrase (empty &lt;span class=&quot;ControlStructures&quot;&gt;for&lt;/span&gt; no passphrase): 
Enter same passphrase again: 
Your identification has been saved &lt;span class=&quot;ControlStructures&quot;&gt;in&lt;/span&gt; /Users/patrick/.ssh/id_dsa.
Your public key has been saved &lt;span class=&quot;ControlStructures&quot;&gt;in&lt;/span&gt; /Users/patrick/.ssh/id_dsa.pub.
The key fingerprint is:
87:66:b7:a0:f6:0e:6a:71:2c:5d:ee:5f:17:2a:b7:2f patrick@localhost
The key&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;s randomart image is:&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;+--[ DSA 1024]----+&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|                 |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|                 |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|                 |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|        ..       |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|     o oS o   .  |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|    o ++.+ . . . |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|     ++.  o + .  |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|    .o o.  +Eo   |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;|   ..  .o.. .o.  |&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;+-----------------+&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;$ cat ~/.ssh/id_dsa.pub | ssh user@remotehost &amp;quot;cat - &amp;gt;&amp;gt; ~/.ssh/authorized_keys&amp;quot;&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;$ ssh user@remotehost&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Install your keys on a remote server:&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh-copy-id -i &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/id_dsa.pub user@remotehost
&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;Alternative &lt;/span&gt;
$ cat &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/id_dsa.pub &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt; ssh user@remotehost &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;cat - &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Passphrase automation:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;If you have protected your keys with a passphrase (which you should), then it is annoying to re-enter that all the time. You can avoid that by running your environment inside an &lt;em&gt;ssh-agent&lt;/em&gt; and using &lt;em&gt;ssh-add&lt;/em&gt; to enter the passphrase once.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh-add &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/id_dsa
Need passphrase &lt;span class=&quot;ControlStructures&quot;&gt;for&lt;/span&gt; /home/mah/.ssh/id_dsa (you@example.com).
Enter passphrase:
$
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Pseudo Terminal&lt;/strong&gt; :&lt;/h3&gt;

&lt;p&gt;some commands like sudo require a pseudo terminal to be activated&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -t patrick@remotehost sudo cat /etc/passwd
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Avoid lastlog:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Log in without appearing in lastlog/w and who output.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -T user@hostname.com
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Piping&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Example of using piping to backup over the network&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ufsdump 0uf - /dev/md/rdsk/d33 &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt; ssh r280n &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;dd obs=32k ibs=32k of=/dev/rmt/0n&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Rsync over ssh&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ rsync -avz -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;ssh -i /home/thisuser/cron/thishost-rsync-key&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; remoteuser@remotehost:/remote/dir /this/dir/ 
&lt;/pre&gt;
&lt;/div&gt;




&lt;hr /&gt;


&lt;h2&gt;Tunnels and firewall-piercings:&lt;/h2&gt;

&lt;h3&gt;&lt;strong&gt;X-forwarding:&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -X patrick@remotehost
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data&lt;span class=&quot;Operators&quot;&gt;;&lt;/span&gt; using fake authentication data &lt;span class=&quot;ControlStructures&quot;&gt;for&lt;/span&gt; X11 forwarding.
Last login: Fri Aug 27 20:27:40 2010
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Port forwarding:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Set up a localforward from the remote machine port 25 to a local port 9025&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -L 9025:localhost:25 patrick@remotehost
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;No command:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Sometimes you just want to setup a forward with having a shell&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -N -L 9025:localhost:25 patrick@remotehost
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;KeepAlive:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Getting tired of those timeouts by the firewall? Have ssh send a keepalive/&lt;/p&gt;

&lt;p&gt;Put the following options in your $HOME/.ssh/ssh_config&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
    KeepAlive yes
    &lt;span class=&quot;Keywords&quot;&gt;ServerAliveInterval&lt;/span&gt; &lt;span class=&quot;Numbers&quot;&gt;60&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Socks Daemon for proxying:&lt;/strong&gt; (-D)&lt;/h3&gt;

&lt;p&gt;Sometimes it's interesting to start a socks daemon. You can configure this in your browser to surf as it seems to come from the remote machine.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -D 9999 patrick@remotehost
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Tunneling over an http proxy:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Corporate firewalls often only allow http to go outside. See &lt;a href=&quot;http://www.agroman.net/corkscrew/&quot;&gt;corkscrew&lt;/a&gt;&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
&lt;span class=&quot;Keywords&quot;&gt;ProxyCommand&lt;/span&gt; /usr/bin/corkscrew proxy-ip &lt;span class=&quot;Numbers&quot;&gt;8080&lt;/span&gt; %h %p ~/.ssh/myauth
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Chaining ssh hopping:&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
Host pc1.example.org pc2.example.org
&lt;span class=&quot;Keywords&quot;&gt;ForwardAgent&lt;/span&gt; yes
&lt;span class=&quot;Keywords&quot;&gt;ProxyCommand&lt;/span&gt; ssh -qax bastion.example.org /usr/bin/nc -w &lt;span class=&quot;Numbers&quot;&gt;120&lt;/span&gt; %h %p
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Netcat mode:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Starting from openssh 5.4: we can have ssh act as netcat. (-W) This connects stdio on the client to a single port forward on the server. This allows, for example, using ssh as a ProxyCommand to route connections via intermediate servers.”&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -p 443 -W remotehost2:23 patrick@remotehost
Trying remotehost2...
Connected to remotehost2.
Escape character is &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;^]&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;.

User Name : ^]
telnet&lt;span class=&quot;Operators&quot;&gt;&amp;gt;&lt;/span&gt; close
$

&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Mounting over ssh:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Sometimes it's nice to mount a remote directory over ssh. Fuse and sshfs are your friend&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ sshfs remote-user@remote.server:/remote/directory /mnt/remote-fs/
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href=&quot;http://fuse.sourceforge.net/sshfs.html&quot;&gt;http://fuse.sourceforge.net/sshfs.html&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;VPN Tunneling:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Did you know that ssh can do layer 2 and 3 VPN tunneling?&lt;/p&gt;

&lt;p&gt;Check out ssh -w. Example from manpage:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -f -w 0:1 192.168.1.15 true
$ ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;SSH http multiplexer:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;sslh lets one accept both HTTPS and SSH connections on the same port. It makes it possible to connect to an SSH server on port 443 (e.g. from inside a corporate firewall) while still serving HTTPS on that port.
&lt;a href=&quot;http://www.rutschle.net/tech/sslh.shtml&quot;&gt;http://www.rutschle.net/tech/sslh.shtml&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;


&lt;h2&gt;Speed&lt;/h2&gt;

&lt;h3&gt;&lt;strong&gt;Compression&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;If you are working on a slow link, compression (-C) and using a simple cipher (-c blowfish) saves you speed&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -C -c blowfish patrick@remotehost
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Multiplexing - ControlMaster:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Another great way to speed up ssh is to re-use the same connection when you connect multiple times to the same host&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ mkdir –p &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/connections
$ chmod 700 &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/connections

Add this to your &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/config file:
Host *
ControlMaster auto
ControlPath &lt;span class=&quot;Operators&quot;&gt;~&lt;/span&gt;/.ssh/connections/%r_%h_%p
&lt;/pre&gt;
&lt;/div&gt;




&lt;hr /&gt;


&lt;h2&gt;Managing keys&lt;/h2&gt;

&lt;h3&gt;&lt;strong&gt;Ignore Hostkeys:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;When you're re-installing a machine over and over again, you often want to get rid of the hostfile key verification. This is what you need:&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh user@host -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Check if hostkey exists:&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
k$ ssh-keygen -F 192.168.2.152
&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt; Host 192.168.2.152 found: line 31 type RSA&lt;/span&gt;
192.168.2.152 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAwHH15HpeJo21wyqpe2iFM8/0CtoYnE9DDXfCewws7iMhM+vgp7pjnaC83IgAt7G/x/VDHcbnyuI4odrGSEAE5wm7LNuT6uSfQMbXCayE+uoOIrAVhf41ZnAFQrs/+Mutk5LFEjPPNhuriq5ltBT4UwMlYQMa5z/SzmxV0ZAGXks5GMDz0o89yUwRarRfsGudASEtzUxgnxnOo5STBMZOdQ0GNEVdfJDgfJDAOi34T1FidpCqAtm8akYuB+Qsj3/hDQmIT+GsKYaGNZvz8ZNnPBAc9kWlS6VqXXNreyEeu7AmHDWXjMP3NW1tsibmZ8zeOSZdmEVEiuaYCIvERDq3MQ==
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Remove a hostkey:&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh-keygen -R 192.168.2.152
/Users/patrick/.ssh/known_hosts updated.
Original contents retained as /Users/patrick/.ssh/known_hosts.old
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Get hostkey of remote server:&lt;/strong&gt;&lt;/h3&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh-keyscan remotehost
&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt; remotehost SSH-2.0-OpenSSH_5.2&lt;/span&gt;
remotehost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyREFGMBB6Qi1uoEYIk4GlqLXdS26moAxmV69UX0icQjp0Rw53xZ/2L0ZQwhsUiFV1vq4QfZNeUO142IzBgSspgsJZ7wJq213tsE7WIJGIBqvWnhU3vJuL9wgYT8f6BAvLoEfapFhLy24TDmn2DXldJAYgo8MnUbRrJlvnhQZPpd5cDWCXkzPGQE8r7REZsAWbWNlVOFRvZioPoGCGYMtsDWSBelBISGkedoNpTSpRkMmBAnsHBfvIzDPoTDYL4PZR0jJ8MaJrDhRtD4caRw4HVyhzSa3/FCpcm09PyBRabH/CyxNSOZjLc2+N9Ph9AKeTNgvmxP70wx668XaGYwCrQ==
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;SSH DNS Keys&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Instead of using your local hostfile, you can store your keys in DNS. Have a look at &lt;a href=&quot;http://freshmeat.net/projects/sshfp/&quot;&gt;sshfp&lt;/a&gt; to do the job. Then you can specify that ssh needs to&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh localhost -o &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;VerifyHostKeyDNS=yes&lt;span class=&quot;Strings&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
yes authenticity of host &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;localhost (127.0.0.1)&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt; can&lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;t be established.&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;RSA key fingerprint is 2d:d3:29:bd:4d:e2:7d:a3:b0:15:96:26:d4:60:13:34.&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;Matching host key fingerprint found in DNS.&lt;/span&gt;
&lt;span class=&quot;Strings&quot;&gt;Are you sure you want to continue connecting (yes/no)?&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;SSH Escape Sequences:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;It often happens to me that I'm working into an ssh shell that used forwarding. I always thought there was no way to change the forwarding rules and that I had to logout. It seems not! SSh has an internal shell activated by a tilde. Seeing is believing!&lt;/p&gt;

&lt;p&gt;Escape sequences are only recognized after a newline and are initiated with a tilde (~) unless you modify it with the -e flag.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
Hit ENTER ~? on a running ssh session to see a list of escapes:

Supported escape sequences:

~. – terminate connection
~B – send a BREAK to the remote system
~C – open a command line
~R – Request rekey (SSH protocol 2 only)
~^Z – suspend ssh
~# – list forwarded connections
~&amp;amp; – background ssh (when waiting for connections to terminate)
~? – this message
~~ – send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
~. and ~# are particularly useful.
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Visualize hostkeys:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Every host key has it's own visual fingerprint&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ssh -o VisualHostKey=yes patrick@localhost
Host key fingerprint is 9f:a0:03:c1:63:8b:b8:c6:d6:83:cb:22:33:cb:83:cc
+--[ RSA 2048]----+
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;                 &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;   .             &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;    =            &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt; . o +           &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;. . o   S        &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;..o  . . o .     &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;== o  o   o      &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;@E. .  .         &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
&lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;+B.              &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt;
+-----------------+
&lt;/pre&gt;
&lt;/div&gt;




&lt;hr /&gt;


&lt;h2&gt;Security hacks&lt;/h2&gt;

&lt;h3&gt;&lt;strong&gt;Local Password sniffing:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;If you have process that connects to your ssh and you want to see the password it's using, then strace is your friend.&lt;/p&gt;

&lt;div class=&quot;UltraViolet&quot;&gt;
&lt;pre class=&quot;pastels_on_dark&quot;&gt;
$ ps axuww &lt;span class=&quot;Operators&quot;&gt;|&lt;/span&gt; egrep &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;PID|ssh&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;Comments&quot;&gt;&lt;span class=&quot;Comments&quot;&gt;#&lt;/span&gt;Now become root and attach to the running daemon with strace, changing the PID as appropriate:&lt;/span&gt;

$ sudo strace -f -e &lt;span class=&quot;Strings&quot;&gt;&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;read,write&lt;span class=&quot;Strings&quot;&gt;'&lt;/span&gt;&lt;/span&gt; -p12345
&lt;/pre&gt;
&lt;/div&gt;


&lt;h3&gt;&lt;strong&gt;Remote Password sniffing:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;A more passive way of listening into ssh sessions (v1) is using dsniff
- &lt;a href=&quot;http://www.allguru.net/security/running-network-sniffer-dsniff/&quot;&gt;Dsniff&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;Fingerprint fuzzing:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;This one is to lure a lazy administrator into accepting your certificate. It generates keys with an almost similar fingerprint.
&lt;a href=&quot;http://freeworld.thc.org/papers/ffp.html&quot;&gt;http://freeworld.thc.org/papers/ffp.html&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;&lt;strong&gt;SSH Honeypot:&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;And to go totally security. Launch your own ssh honeypot and capture all the remote commands (and typos) with Kippo&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/p/kippo/&quot;&gt;http://code.google.com/p/kippo/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.securitytube.net/SSH-Password-Capture-using-Kippo-video.aspx&quot;&gt;http://www.securitytube.net/SSH-Password-Capture-using-Kippo-video.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;hr /&gt;


&lt;h2&gt;Need more?&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.mynitor.com/2010/08/16/top-50-ssh-helper-tools-omg/&quot;&gt;Top 50 SSH Helper tools - OMG!&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;


&lt;h2&gt;Share yours! I'm definitely interested&lt;/h2&gt;</content:encoded>
	<dc:date>2010-08-27T13:16:34+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7603704315097619422.post-7374543518539424977">
	<title>Geert Vanderkelen: Find out if every element of a list is part of another, with Python</title>
	<link>http://geert.vanderkelen.org/2010/08/find-out-if-every-element-of-list-is.html</link>
	<content:encoded>&lt;p&gt;&lt;i&gt;&lt;b&gt;Update 2010-08-27&lt;/b&gt;: Comments indicated that what I did here is not the best solution. Like noted in my original post, a &lt;tt&gt;set&lt;/tt&gt; would be better in this case. I eventually used &lt;tt&gt;set(r).issubset(set(l))&lt;/tt&gt;. Marius also pointed out to &lt;tt&gt;set(r) = set(l)&lt;/tt&gt;, but I like the &lt;tt&gt;issubset&lt;/tt&gt; one more.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;I wanted to check if every element of one list or tuple is part of another one using Python. A &lt;tt&gt;set&lt;/tt&gt; has the &lt;tt&gt;issubset()&lt;/tt&gt;-method, but I couldn't find anything build-in for a tuple. It was, however, rather quickly done:&lt;/p&gt;&lt;pre&gt;&gt;&gt;&gt; r = (1,2)
&gt;&gt;&gt; l = (3,4,1,5,2)
&gt;&gt;&gt; False not in [ e in l for e in r ]
True
&gt;&gt;&gt; r = (1,9)
&gt;&gt;&gt; False not in [ e in l for e in r ]
False
&lt;/pre&gt;&lt;p&gt;Why I'm posting this? I just found it cute code, somehow.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7603704315097619422-7374543518539424977?l=geert.vanderkelen.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-27T08:57:02+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7603704315097619422.post-4602410202070376056">
	<title>Geert Vanderkelen: Using Globals in Pylons.. everywhere</title>
	<link>http://geert.vanderkelen.org/2010/08/using-globals-in-pylons-everywhere.html</link>
	<content:encoded>&lt;p&gt;In &lt;a href=&quot;http://pylonshq.com/&quot;&gt;Pylons&lt;/a&gt; v1.0 you can define global variables by adding them to the &lt;tt&gt;Globals&lt;/tt&gt;-class. If you want a variable called &lt;tt&gt;spam&lt;/tt&gt; and you want it to be globally available, your &lt;tt&gt;lib.app_globals.Globals&lt;/tt&gt;-class would look like this:&lt;/p&gt;&lt;pre&gt;class Globals(object):
  def __init__(self, config):
    self.cache = CacheManager(**parse_cache_config_options(config))
    self.spam = False
&lt;/pre&gt;&lt;p&gt;To use it in a model-module for example, you have to import &lt;tt&gt;app_globals&lt;/tt&gt; from the &lt;tt&gt;pylons&lt;/tt&gt; module, like this:&lt;/p&gt;&lt;pre&gt;from pylons import app_globals as g

print g.spam
&lt;/pre&gt;&lt;p&gt;It took me a while to figure this out.. And I'm starting to like Pylons somehow.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7603704315097619422-4602410202070376056?l=geert.vanderkelen.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T19:06:15+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7603704315097619422.post-5246941762365808930">
	<title>Geert Vanderkelen: AppleScript exporting photos from Aperture</title>
	<link>http://geert.vanderkelen.org/2010/08/applescript-exporting-photos-from.html</link>
	<content:encoded>&lt;p&gt;The following AppleScript will:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Prompt for a destination folder&lt;br /&gt;
&lt;li&gt;Ask for an album name, which will be a folder in destination folder&lt;br /&gt;
&lt;li&gt;Get currently selected photo(s) from Aperture&lt;br /&gt;
&lt;li&gt;Store the image files using the Image ID of Aperture&lt;br /&gt;
&lt;li&gt;Store some META information in a text file, with similar name as image file&lt;br /&gt;
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The export format is &lt;tt&gt;PNG 1024x1024&lt;/tt&gt;. I needed only that, so I hardcoded it.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Note dependencies&lt;/b&gt;: You need the &lt;a href=&quot;http://geert.vanderkelen.org/2010/08/renaming-file-using-applescript.html&quot;&gt;renameFile&lt;/a&gt;, &lt;a href=&quot;http://geert.vanderkelen.org/2010/08/splitting-as-string-and-joining-list.html&quot;&gt;joinList and splitString&lt;/a&gt; functions found in earlier blog entries.&lt;/p&gt;&lt;pre&gt;property defExportSetting : &quot;PNG - Fit within 1024 x 1024&quot;

on apertureExport(fldAlbum)
 tell application &quot;Aperture&quot;
  set imageSel to (get selection)
 end tell
 
 set out to {}
 repeat with img in imageSel
  tell application &quot;Aperture&quot;
   set kwList to (get id of every keyword of img)
   set imgDate to value of EXIF tag &quot;ImageDate&quot; of img
  end tell
  set imgId to id of img
  
  set imgName to name of img
  set imgTags to my joinList(kwList, &quot;,&quot;)
  
  copy &quot;Name: &quot; &amp;amp; imgName to end of out
  copy &quot;Tags: &quot; &amp;amp; imgTags to end of out
  copy &quot;ApertureId: &quot; &amp;amp; imgId to end of out
  
  set dstFileMeta to (fldAlbum &amp;amp; imgId &amp;amp; &quot;.meta&quot;) as string
 end repeat
 
 tell application &quot;Aperture&quot;
  set dstFile to (export imageSel using export setting defExportSetting to fldAlbum)
 end tell
 set dstFile to my renameFile(dstFile, imgId)
 copy &quot;File: &quot; &amp;amp; (POSIX path of dstFile) to end of out
 tell application &quot;Finder&quot;
 end tell
 
 set fp to open for access file dstFileMeta with write permission
 write (joinList of out given delimiter:return) to fp
 close access fp
 
end apertureExport

on run
 set dstFolder to (choose folder with prompt &quot;Choose an destination&quot;) as text
 set dlgAlbum to display dialog &quot;Album name&quot; buttons {&quot;OK&quot;, &quot;Cancel&quot;} default answer &quot;Picture pool&quot;
 
 set dstAlbum to (text returned of dlgAlbum) as text
 
 tell application &quot;Finder&quot;
  if not (exists alias (dstFolder &amp;amp; dstAlbum)) then
   make new folder at alias (dstFolder) with properties {name:dstAlbum}
  end if
 end tell
 set fldAlbum to (dstFolder &amp;amp; dstAlbum) as alias
 
 apertureExport(fldAlbum)
end run
&lt;/pre&gt;&lt;p&gt;This script is safe, but I don't take any responsibility when it screws up you Aperture library. It shouldn't really, I coded it on my main library: hardcore!&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7603704315097619422-5246941762365808930?l=geert.vanderkelen.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T18:48:17+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7603704315097619422.post-4901049628521426992">
	<title>Geert Vanderkelen: Renaming a file using AppleScript</title>
	<link>http://geert.vanderkelen.org/2010/08/renaming-file-using-applescript.html</link>
	<content:encoded>&lt;p&gt;The following &lt;a href=&quot;http://en.wikipedia.org/wiki/Applescript&quot;&gt;AppleScript&lt;/a&gt; function renames a file. If you thought this to be a simple thing, try to write it without looking here below. I spend a lot time on this, I might not even use it, but here it is for other mortals wishing to lose weight exercising AppleScript:&lt;/p&gt;&lt;pre&gt;to renameFile(oldAlias, newFileName)
 tell application &quot;Finder&quot;
  set f to item (oldAlias as text)
  tell f
   set ext to its name extension
   set nFn to (newFileName &amp;amp; &quot;.&quot; &amp;amp; ext)
   set its name to nFn
  end tell
 end tell
 set tmp to my splitString(oldAlias as text, &quot;:&quot;)
 set the last item of tmp to nFn
 return my joinList(tmp, &quot;:&quot;)
end renameFile
&lt;/pre&gt;&lt;p&gt;No comments in code, I do not want to spoil your fun!&lt;/p&gt;&lt;p&gt;I needed while writing an export script for Aperture. Here is how I used it after a photo was exported from Aperture:&lt;/p&gt;&lt;pre&gt;tell application &quot;Aperture&quot;
 set dstFile to (export imageSel using export setting defExportSetting to fldAlbum)
end tell
set dstFile to my renameFile(dstFile, imgId)
&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7603704315097619422-4901049628521426992?l=geert.vanderkelen.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T18:36:42+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7603704315097619422.post-6700500994224439466">
	<title>Geert Vanderkelen: Splitting as string and joining a list using AppleScript</title>
	<link>http://geert.vanderkelen.org/2010/08/splitting-as-string-and-joining-list.html</link>
	<content:encoded>&lt;p&gt;Two small helper &lt;a href=&quot;http://en.wikipedia.org/wiki/Applescript&quot;&gt;AppleScript&lt;/a&gt; functions for joining a list and splitting a string given delimiter. Sure, quite an easy task, but it involves setting a global delimiter. Bit like &lt;tt&gt;FS&lt;/tt&gt; in shell. I hope this helps a few folks out there starting out with AppleScript.&lt;/p&gt;&lt;pre&gt;to joinList(aList, delimiter)
 set retVal to &quot;&quot;
 set prevDelimiter to AppleScript's text item delimiters
 set AppleScript's text item delimiters to delimiter
 set retVal to aList as string
 set AppleScript's text item delimiters to prevDelimiter
 return retVal
end joinList

to splitString(aString, delimiter)
 set retVal to {}
 set prevDelimiter to AppleScript's text item delimiters
 log delimiter
 set AppleScript's text item delimiters to {delimiter}
 set retVal to every text item of aString
 set AppleScript's text item delimiters to prevDelimiter
 return retVal
end splitString
&lt;/pre&gt;&lt;p&gt;Here a few lines showing how to use them:&lt;/p&gt;&lt;pre&gt;set tmp to my splitString(oldAlias as text, &quot;:&quot;)
set imgTags to my joinList(kwList, &quot;,&quot;)&lt;/pre&gt;&lt;p&gt;&lt;a href=&quot;http://geert.vanderkelen.org/2010/08/renaming-file-using-applescript.html&quot;&gt;Again&lt;/a&gt;, no comments! Enjoy!&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7603704315097619422-6700500994224439466?l=geert.vanderkelen.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T18:36:19+00:00</dc:date>
</item>
<item rdf:about="http://thomas.apestaart.org/log/?p=1199">
	<title>Thomas Vander Stichele: long life external batteries for laptops ?</title>
	<link>http://thomas.apestaart.org/log/?p=1199</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;m probably going to be doing some long flights pretty soon and I&amp;#8217;d like to maximize my laptop time hacking on the plane.&lt;/p&gt;
&lt;p&gt;Who of you have experience with big external batteries, what&amp;#8217;s a good one to get, how long can I expect them to last and how long do they take to charge ?&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-26T18:19:27+00:00</dc:date>
</item>
<item rdf:about="http://www.wains.be/?p=1047">
	<title>Sébastien Wains: Red Hat Cluster Suite monitoring with SNMP</title>
	<link>http://www.wains.be/index.php/2010/08/26/red-hat-cluster-suite-monitoring-with-snmp/</link>
	<content:encoded>&lt;p&gt;I&amp;#8217;ll consider your cluster is already up and running.&lt;/p&gt;
&lt;p&gt;Install cluster-snmp (available in Red Hat Cluster repository) :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yum install cluster-snmp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s see what we have in there :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# rpm -ql cluster-snmp&lt;br /&gt;
/usr/lib/cluster-snmp&lt;br /&gt;
/usr/lib/cluster-snmp/libClusterMonitorSnmp.so&lt;br /&gt;
/usr/share/doc/cluster-snmp-0.12.1&lt;br /&gt;
/usr/share/doc/cluster-snmp-0.12.1/COPYING&lt;br /&gt;
/usr/share/doc/cluster-snmp-0.12.1/README&lt;br /&gt;
/usr/share/doc/cluster-snmp-0.12.1/README.snmpd&lt;br /&gt;
/usr/share/doc/cluster-snmp-0.12.1/REDHAT-CLUSTER-MIB&lt;br /&gt;
/usr/share/doc/cluster-snmp-0.12.1/REDHAT-MIB&lt;br /&gt;
/usr/share/snmp/mibs/REDHAT-CLUSTER-MIB&lt;br /&gt;
/usr/share/snmp/mibs/REDHAT-MIB&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now on every node of the cluster, edit /etc/snmp/snmpd.conf and add this :&lt;/p&gt;
&lt;p&gt;At the very beginning of the file :&lt;br /&gt;
&lt;code&gt;dlmod RedHatCluster    /usr/lib/cluster-snmp/libClusterMonitorSnmp.so&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you run a 64 bits node :&lt;br /&gt;
&lt;code&gt;dlmod RedHatCluster    /usr/lib64/cluster-snmp/libClusterMonitorSnmp.so&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After other view items :&lt;br /&gt;
&lt;code&gt;view    systemview    included    REDHAT-CLUSTER-MIB:RedHatCluster&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now reload SNMP and restart modclusterd :&lt;br /&gt;
&lt;code&gt;service snmpd reload&lt;br /&gt;
service modclusterd restart&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You should now be able to query your nodes with any LDAP client.&lt;/p&gt;
&lt;p&gt;On a Linux client, copy the MIB&amp;#8217;s from the RPM under ~/.snmp/mibs and then run :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ snmpwalk -v 2c -c public node1.example.com REDHAT-CLUSTER-MIB::RedHatCluster&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcMIBVersion.0 = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterName.0 = STRING: &quot;MailServerExample&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterStatusCode.0 = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterStatusDesc.0 = STRING: &quot;All services and nodes functional&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterVotesNeededForQuorum.0 = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterVotes.0 = INTEGER: 2&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterQuorate.0 = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterNodesNum.0 = INTEGER: 2&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterNodesNames.0 = STRING: &quot;node1.example.com, node2.example.com&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterAvailNodesNum.0 = INTEGER: 2&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterAvailNodesNames.0 = STRING: &quot;node1.example.com, node2.example.com&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterUnavailNodesNum.0 = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterUnavailNodesNames.0 = &quot;&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterServicesNum.0 = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterServicesNames.0 = STRING: &quot;MailServer&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterRunningServicesNum.0 = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterRunningServicesNames.0 = STRING: &quot;MailServer&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterStoppedServicesNum.0 = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterStoppedServicesNames.0 = &quot;&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterFailedServicesNum.0 = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcClusterFailedServicesNames.0 = &quot;&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeName.&quot;node1.example.com&quot; = STRING: &quot;node1.example.com&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeName.&quot;node2.example.com&quot; = STRING: &quot;node2.example.com&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeStatusCode.&quot;node1.example.com&quot; = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeStatusCode.&quot;node2.example.com&quot; = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeStatusDesc.&quot;node1.example.com&quot; = STRING: &quot;Participating in cluster&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeStatusDesc.&quot;node2.example.com&quot; = STRING: &quot;Participating in cluster&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeRunningServicesNum.&quot;node1.example.com&quot; = INTEGER: 1&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeRunningServicesNum.&quot;node2.example.com&quot; = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeRunningServicesNames.&quot;node1.example.com&quot; = STRING: &quot;MailServer&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcNodeRunningServicesNames.&quot;node2.example.com&quot; = &quot;&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcServiceName.&quot;MailServer&quot; = STRING: &quot;MailServer&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcServiceStatusCode.&quot;MailServer&quot; = INTEGER: 0&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcServiceStatusDesc.&quot;MailServer&quot; = STRING: &quot;running&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcServiceStartMode.&quot;MailServer&quot; = STRING: &quot;automatic&quot;&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcServiceRunningOnNode.&quot;MailServer&quot; = STRING: &quot;node1.example.com&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You are now provided with very interesting information, like :&lt;br /&gt;
&lt;code&gt;REDHAT-CLUSTER-MIB::rhcClusterStatusDesc&lt;br /&gt;
REDHAT-CLUSTER-MIB::rhcServiceRunningOnNode&lt;/code&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/wains/~4/WxtFtg4BBg0&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-26T18:04:43+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4309414151374220630.post-9040542503795862278">
	<title>Tom Baeyens: Alfresco Developer Conferences In Paris And New York</title>
	<link>http://processdevelopments.blogspot.com/2010/08/alfresco-developer-conferences-in-paris.html</link>
	<content:encoded>&lt;div&gt;The timing of the Alfresco Developer Conferences couldn't be better for Activiti.  The one in Paris is October 20-21 and the one in New York is 3-4 November: Exactly around the time that Activiti 5.0 GA will be released.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://www.amiando.com/alfresco-developer-conference-new-york-2010.html&quot;&gt;&lt;img src=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs036.ash2/35138_127197587321443_125746187466583_121716_1427459_n.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I'll be speaking together with Joram about it and also Erik Winlof who started the Activiti Explorer and Activiti Probe web UI's is present so you can expect some nice demos and concrete insights.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://www.amiando.com/alfresco-developer-conference-paris-2010.html&quot;&gt;&lt;img src=&quot;http://sphotos.ak.fbcdn.net/hphotos-ak-ash2/hs037.ash2/35195_127420273965841_125746187466583_122459_7391731_n.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Hope to see you there!&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4309414151374220630-9040542503795862278?l=processdevelopments.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T16:02:56+00:00</dc:date>
</item>
<item rdf:about="http://www.arrfab.net/blog/?p=233">
	<title>Fabian Arrotin: FrOSCon 2010 is over .. waiting now for 2011 :-)</title>
	<link>http://www.arrfab.net/blog/?p=233</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fabian_arrotin&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;It was the first time that I was at &lt;a href=&quot;http://www.froscon.org/&quot;&gt;FrOSCon&lt;/a&gt; and I admit I enjoyed it. Not only because I can always see in real life some other CentOS contributors (thanks again Andreas, Sarah, Didi and Christoph), but also because I can see some other people really happy with CentOS. Last year (even if i was not there), CentOS &lt;a href=&quot;http://dag.wieers.com/blog/centos-based-livecd-at-froscon&quot; target=&quot;_blank&quot;&gt;was used to &amp;#8216;power&amp;#8217; some TFT screens&lt;/a&gt; at the entrance. So we did the same this year and just because Dag asked it, we took a picture this year too &lt;img src=&quot;http://www.arrfab.net/blog/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignleft size-medium wp-image-234&quot; title=&quot;CentOS @ FrOSCon 2010&quot; src=&quot;http://www.arrfab.net/blog/wp-content/uploads/2010/08/22082010025-300x225.jpg&quot; alt=&quot;CentOS @ FrOSCon 2010&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-26T14:40:10+00:00</dc:date>
</item>
<item rdf:about="http://www.jedi.be/blog/2010/08/26/Webby Rss feed and Syntax Highlighting/">
	<title>Patrick Debois: Webby Rss feed and Syntax Highlighting</title>
	<link>http://feedproxy.google.com/~r/jedi/IZwx/~3/RLosc2d9UPg/</link>
	<content:encoded>&lt;p&gt;When I first started blogging I used &lt;a href=&quot;http://www.wordpress.org&quot;&gt;Wordpress&lt;/a&gt;, while it was nice at that time, it felt rather cumbersome to use for posting technical stuff like code samples. Also having everything in the database make it difficult to use my favorite text editor to manage my content. So I decided to move to &lt;a href=&quot;http://feeds.feedburner.com/jedi/webby.rubyforge.org/&quot;&gt;Webby&lt;/a&gt; : &lt;strong&gt;it allows you to use the power of ruby erb inside you html pages without the overkill of running a rails&lt;/strong&gt; Another advantage is that it creates static html so it's both fast and secure.&lt;/p&gt;

&lt;p&gt;I've been running it now for more then a year and have been happy ever since. This blogpost shares some of my scripts/enhancements I've used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wordpress exporter to Webby&lt;/strong&gt; : this was my first challenge, how do I get everything from my wordpress out of that database. I wrote a little script that reads from the RSS feed of the wordpress and export everything into webby structure . It's not the most robust script (it was early stages ruby for me at that time), but you'll get the idea.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RSS feed in Webby&lt;/strong&gt;: I didn't find any good rss feed code, most of it didn't pass the rss validation. So here you can find my take on it. As a bonus the script tries to make your images absolute, which is important for having your images displayed in some rss feedreaders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Absoultify helper&lt;/strong&gt;: It takes a string of an filename and prepends the correctpath before it to make it an absolute URL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Highlighting with Coderay&lt;/strong&gt; : webby includes a way to highlight parts of the code. This works very well, but I found myself missing a way to include a file instead of pasting the code directly into the blogpost. This has many advantages: I can edit the file separate and the correct syntax  highlighting in my favorite text editor still works. And the escaping works better for ruby code as there can not be a problem with escaping special characters.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;This is all for now.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Codify helper: put inside your webby-root/lib&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;
&lt;pre&gt;&lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; try_require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;coderay&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;enumerator&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;co&quot;&gt;Loquacious&lt;/span&gt;.configuration_for(&lt;span class=&quot;sy&quot;&gt;:webby&lt;/span&gt;) {
  desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;lt;&amp;lt;-__&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;k&quot;&gt;
    Options for CodeRay syntax highlighting. See the CodeRay home page
    (http://coderay.rubychan.de/) for more information about the available
    options.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;
  __&lt;/span&gt;&lt;/span&gt;
  codify {
    desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;The language being highlighted (given as a symbol).&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
    lang &lt;span class=&quot;sy&quot;&gt;:ruby&lt;/span&gt;

    desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;The file you want to read instead of a string&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
    lang &lt;span class=&quot;sy&quot;&gt;:file&lt;/span&gt;

    desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Include line numbers in :table, :inline, :list or nil (no line numbers).&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
    line_numbers &lt;span class=&quot;pc&quot;&gt;nil&lt;/span&gt;

    desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Where to start line number counting.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
    line_number_start &lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;

    desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Make every N-th number appear bold.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
    bold_every &lt;span class=&quot;i&quot;&gt;10&lt;/span&gt;

    desc &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Tabs will be converted into this number of space characters.&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
    tab_width &lt;span class=&quot;i&quot;&gt;8&lt;/span&gt;
  }
}

&lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;Webby::Helpers&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;module&lt;/span&gt; &lt;span class=&quot;cl&quot;&gt;CodifyHelper&lt;/span&gt;

  &lt;span class=&quot;c&quot;&gt;# The +codify+ method applies syntax highlighting to source code embedded&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# in a webpage. The CodeRay highlighting engine is used for the HTML&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# markup of the source code. The page sections to be highlighted are given&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# as blocks of text to the +coderay+ method.&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# Options can be passed to the CodeRay engine via attributes in the&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# +codify+ method.&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    &amp;lt;% codify( :lang =&amp;gt; &amp;quot;ruby&amp;quot;, :line_numbers =&amp;gt; &amp;quot;inline&amp;quot; ) do -%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    # Initializer for the class.&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    def initialize( string )&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#      @str = stirng&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    end&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    &amp;lt;% end -%&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    &lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;# The supported Codify options are the following:&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    :lang               : the language to highlight (ruby, c, html, ...)&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    :file               : the file to highlight&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    :line_numbers       : include line numbers in 'table', 'inline',&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#                          or 'list'&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    :line_number_start  : where to start with line number counting&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    :bold_every         : make every n-th number appear bold&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#    :tab_width          : convert tab characters to n spaces&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#&lt;/span&gt;
  
  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;codify&lt;/span&gt;( *args, &amp;amp;block )
    opts = args.last.instance_of?(&lt;span class=&quot;co&quot;&gt;Hash&lt;/span&gt;) ? args.pop : {}

    parent=&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.dirname(&lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.path)
     file=opts[&lt;span class=&quot;sy&quot;&gt;:file&lt;/span&gt;]
    text=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; (!file.nil?) 
      &lt;span class=&quot;r&quot;&gt;begin&lt;/span&gt;
        filename=parent+&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;SEPARATOR&lt;/span&gt;+file
        file=&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.open(filename,&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
        text=file.read
        syntax=guess_syntax(filename)
        &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; !syntax.nil? &amp;amp;&amp;amp; opts[&lt;span class=&quot;sy&quot;&gt;:lang&lt;/span&gt;].nil? &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt;
          opts[&lt;span class=&quot;sy&quot;&gt;:lang&lt;/span&gt;]=syntax
       &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;rescue&lt;/span&gt;
        puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Error reading code file&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+filename
      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt;
      text = capture_erb(&amp;amp;block)
    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
    
    &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; text.empty?

    defaults = ::&lt;span class=&quot;co&quot;&gt;Webby&lt;/span&gt;.site.coderay
    lang = opts.getopt(&lt;span class=&quot;sy&quot;&gt;:lang&lt;/span&gt;, defaults.lang).to_sym

    cr_opts = {}
    &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%w(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;line_numbers       to_sym
       line_number_start  to_i
       bold_every         to_i
       tab_width          to_i&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;)&lt;/span&gt;&lt;/span&gt;.each_slice(&lt;span class=&quot;i&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |key,convert|
      key = key.to_sym
      val = opts.getopt(key, defaults[key])
      &lt;span class=&quot;r&quot;&gt;next&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; val.nil?
      cr_opts[key] = val.send(convert)
    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;#cr.swap(CodeRay.scan(text, lang).html(opts).div)&lt;/span&gt;
    out = &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%Q{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;div class=&amp;quot;CodeRay&amp;quot;&amp;gt;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;pre&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
    out &amp;lt;&amp;lt; ::&lt;span class=&quot;co&quot;&gt;CodeRay&lt;/span&gt;.scan(text, lang).html(cr_opts)
    out &amp;lt;&amp;lt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%Q{&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;

    &lt;span class=&quot;c&quot;&gt;# put some guards around the output (specifically for textile)&lt;/span&gt;
    out = _guard(out)

    concat_erb(out, block.binding)
    &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt;
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

  &lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;guess_syntax&lt;/span&gt;(filename)
    extension=&lt;span class=&quot;r&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.extname(filename).downcase
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.rb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:ruby&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:html&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.sh&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:sh&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.css&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:css&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.js&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:java_script&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.diff&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:diff&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.yaml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:yaml&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.json&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:json&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.java&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:java&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.xml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:xml&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.txt&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:plaintext&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.py&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:python&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.xml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:xml&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.c&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:c&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;.sql&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;r&quot;&gt;then&lt;/span&gt; &lt;span class=&quot;sy&quot;&gt;:sql&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;pc&quot;&gt;nil&lt;/span&gt;
    &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
    &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt; extension

  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;span class=&quot;c&quot;&gt;# module CodefyHelper&lt;/span&gt;

register(&lt;span class=&quot;co&quot;&gt;CodifyHelper&lt;/span&gt;)

&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;span class=&quot;c&quot;&gt;# module Webby::Helpers&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;  &lt;span class=&quot;c&quot;&gt;# try_require&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# EOF&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Rss feed file&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;
&lt;pre&gt;---
title:     &lt;span class=&quot;co&quot;&gt;JEDI&lt;/span&gt; - &lt;span class=&quot;co&quot;&gt;Just&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Enough&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Developed&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Infrastructure&lt;/span&gt;
subtitle:  www.jedi.be
description: development, infrastructure &lt;span class=&quot;r&quot;&gt;and&lt;/span&gt; other stuff
site:      www.jedi.be
author:    &lt;span class=&quot;co&quot;&gt;Patrick&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Debois&lt;/span&gt;
email:     &lt;span class=&quot;co&quot;&gt;Patrick&lt;/span&gt;.&lt;span class=&quot;co&quot;&gt;Debois&lt;/span&gt;&lt;span class=&quot;iv&quot;&gt;@jedi&lt;/span&gt;.be
extension: xml
layout:    &lt;span class=&quot;pc&quot;&gt;nil&lt;/span&gt;
dirty:     &lt;span class=&quot;pc&quot;&gt;true&lt;/span&gt;
filter:    
- erb
&lt;span class=&quot;c&quot;&gt;# &amp;lt;?xml-stylesheet type=&amp;quot;text/css&amp;quot; media=&amp;quot;screen&amp;quot; href=&amp;quot;http://www.jedi.be/css/blueprint/screen.css&amp;quot;?&amp;gt;&lt;/span&gt;
---
&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; require 'rexml/document' &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;-&lt;/span&gt;&lt;/span&gt;%&amp;gt;
&amp;lt;&lt;span class=&quot;i&quot;&gt;?x&lt;/span&gt;ml version=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;1.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; encoding=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;utf-8&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;?&amp;gt;
&amp;lt;rss version=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; xmlns&lt;span class=&quot;sy&quot;&gt;:atom=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://www.w3.org/2005/Atom&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; xmlns&lt;span class=&quot;sy&quot;&gt;:content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://purl.org/rss/1.0/modules/content/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; xmlns&lt;span class=&quot;sy&quot;&gt;:wfw=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://wellformedweb.org/CommentAPI/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; xmlns&lt;span class=&quot;sy&quot;&gt;:dc=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://purl.org/dc/elements/1.1/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&amp;gt;
        &amp;lt;channel&amp;gt;
                &amp;lt;atom&lt;span class=&quot;sy&quot;&gt;:link&lt;/span&gt; href=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;http://www.jedi.be/blog/feed/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; rel=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; type=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;application/rss+xml&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; /&amp;gt;
                &amp;lt;title&amp;gt;&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; h(@page.title) %&amp;gt;&amp;lt;/title&amp;gt;
                &amp;lt;description&amp;gt;&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; h(&lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.description) %&amp;gt; &amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;description&amp;gt;
                &amp;lt;link&amp;gt;http:&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;/&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; @page.site %&amp;gt;/blog&amp;lt;/link&amp;gt;
                &amp;lt;pubDate&amp;gt;&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Time&lt;/span&gt;.now.gmtime.rfc822 &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;/pubDate&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
                &amp;lt;generator&amp;gt;webby rss script&amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;generator&amp;gt;
                &amp;lt;lastBuildDate&amp;gt;&amp;lt;%= Time.now.gmtime.rfc822 %&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;lastBuildDate&amp;gt;
                &amp;lt;managingEditor&amp;gt;&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; @page.email %&amp;gt; (&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.author &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&amp;lt;/managingEditor&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
                &amp;lt;webMaster&amp;gt;&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; @page.email %&amp;gt; (&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.author &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;)&amp;lt;/webMaster&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
                &amp;lt;language&amp;gt;en&amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;language&amp;gt;
         &amp;lt;%- @pages.find( :limit =&amp;gt; 10,
                 :in_directory =&amp;gt; 'blog',
                 :recursive =&amp;gt; true,
                 :sort_by =&amp;gt; 'created_at',
                 :reverse =&amp;gt; true).each do |article|

             next if article.blog_post.nil?
         -%&amp;gt;
                &amp;lt;item&amp;gt;
                        &amp;lt;title&amp;gt;&amp;lt;%= h(article.title) %&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;title&amp;gt;
                        &amp;lt;link&amp;gt;http&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;/&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; @page.site %&amp;gt;&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; article.url &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;/link&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
                        &amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt; &lt;/span&gt;&lt;/span&gt;article.guid.nil? &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;
                        &amp;lt;guid isPermaLink=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;http&lt;span class=&quot;sy&quot;&gt;:/&lt;/span&gt;/&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; @page.site %&amp;gt;&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; article.url%&amp;gt;&amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;guid&amp;gt;
                        &amp;lt;% else %&amp;gt;
                        &amp;lt;guid isPermaLink=&amp;quot;false&amp;quot;&amp;gt;&amp;lt;%= article.guid %&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;guid&amp;gt;
                        &amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt; &lt;/span&gt;&lt;/span&gt;%&amp;gt;
                        &amp;lt;pubDate&amp;gt;&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; article.created_at.gmtime.rfc822 %&amp;gt;&amp;lt;/pubDate&amp;gt;
                        &amp;lt;comments&amp;gt;http://&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.site &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;%= article.url %&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;#comments&amp;lt;/comments&amp;gt;&lt;/span&gt;
                        &amp;lt;description&amp;gt;&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; normaltext&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt;render(article); 
                        normaltext.gsub!(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;img src=&amp;quot;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;img src=&amp;quot;http://&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;+&lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.site+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
                        normaltext.gsub!(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;img src='/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;img src='http://&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+&lt;span class=&quot;iv&quot;&gt;@page&lt;/span&gt;.site+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)

                         h(normaltext) %&amp;gt;&amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;description&amp;gt;
                
                        &amp;lt;%- if !article.keywords.nil? %&amp;gt;
                                &amp;lt;%- article.keywords.each do |keyword| %&amp;gt;
                                           &amp;lt;category&amp;gt;&amp;lt;![CDATA[&amp;lt;%= keyword %&amp;gt;]]&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;category&amp;gt;
                                &amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; end %&amp;gt;
                   &amp;lt;% else %&amp;gt;
                           &amp;lt;% if !article.tags.nil? %&amp;gt;
                                        &amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;-&lt;/span&gt;&lt;/span&gt; article.tags.each &lt;span class=&quot;r&quot;&gt;do&lt;/span&gt; |tag| &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%&amp;gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;
                                                   &amp;lt;category&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;lt;![&lt;span class=&quot;co&quot;&gt;CDATA&lt;/span&gt;[&amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;%=&lt;/span&gt;&lt;span class=&quot;k&quot;&gt; tag %&amp;gt;]]&amp;gt;&amp;lt;/category&amp;gt;
                                        &amp;lt;% end %&amp;gt;
                        &amp;lt;% end %&amp;gt;
                   &amp;lt;% end %&amp;gt;
                        &amp;lt;content:encoded&amp;gt;&amp;lt;![CDATA[&amp;lt;%&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;REXML&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;CData&lt;/span&gt;.new(render(article)) %&amp;gt;]]&amp;gt;&amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;content:encoded&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mod&quot;&gt;i&lt;/span&gt;&lt;/span&gt;tem&amp;gt;
        &amp;lt;&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;% &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt; &lt;/span&gt;&lt;/span&gt;%&amp;gt;
        &amp;lt;&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;channel&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;rss&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Wordpress to webby conversion script&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;
&lt;pre&gt;&lt;span class=&quot;dt&quot;&gt;#!/usr/bin/env ruby&lt;/span&gt;
require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rubygems&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;rfeedparser&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;pp&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;net/http&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
require &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;uri&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;write_feed&lt;/span&gt;(feed)
  pp feed.title
  pp feed.subtitle
  pp feed.links[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;].href

  &lt;span class=&quot;iv&quot;&gt;@site_url&lt;/span&gt;=feed.wp_base_blog_url
  &lt;span class=&quot;c&quot;&gt;#feed.wp_base_site_url&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.updated&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.generator&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.updated_time&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.updated_parsed&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.wp_tag_name&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.wp_tag_slug&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.wp_cat_name&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.wp_category_parent&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.wp_category&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#feed.wp_wxr_version&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;write_entry&lt;/span&gt;(e)
  &lt;span class=&quot;c&quot;&gt;#File.open(local_filename, 'w') {|f| f.write(doc) }&lt;/span&gt;
  
  base=e.link.gsub(&lt;span class=&quot;iv&quot;&gt;@site_url&lt;/span&gt;+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;).gsub(e.wp_post_name+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
  path=&lt;span class=&quot;iv&quot;&gt;@webby_dir&lt;/span&gt;+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+base+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;+e.wp_post_name
  &lt;span class=&quot;co&quot;&gt;FileUtils&lt;/span&gt;.mkdir_p path
  filename=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;index.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;iv&quot;&gt;@counter&lt;/span&gt;=&lt;span class=&quot;iv&quot;&gt;@counter&lt;/span&gt;+&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;
  
  &lt;span class=&quot;c&quot;&gt;#write entries&lt;/span&gt;
  puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;iv&quot;&gt;@counter&lt;/span&gt;&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;]creating &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+path+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+filename
  &lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.open(path+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+filename, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;w&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;) { |f| 
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) 
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;title: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+e.title+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;author: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+e.author+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;guid: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+e.guid+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    format=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;%Y-%m-%d %H:%M:%S.0 +00:00&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;#created_at: 2009-09-10 22:16:41.382708 +02:00&lt;/span&gt;
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;created_at: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+ &lt;span class=&quot;co&quot;&gt;Time&lt;/span&gt;.parse(e.wp_post_date).strftime(format)+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;blog_post: &lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+ &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;filter:&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;  - erb&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;  - basepath&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
&lt;span class=&quot;c&quot;&gt;#    f.write(&amp;quot;  - tidy\n&amp;quot;)&lt;/span&gt;

    tags=&lt;span class=&quot;co&quot;&gt;Hash&lt;/span&gt;.new
    categories=&lt;span class=&quot;co&quot;&gt;Hash&lt;/span&gt;.new
    rssterms=e.tags
    rssterms.each { |t|
      scheme=t[&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;scheme&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;]
      term=t[&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;term&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;]
      &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; scheme==&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;tag&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
        tags[term]=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;   
      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
      &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; scheme==&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;category&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
        categories[term]=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;   
      &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;
    }
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;categories:&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    categories.keys.each { |c| 
      f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;   - &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;c&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    }
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;tags:&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    tags.keys.each { |c| 
      f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;   - &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;c&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    }

    &lt;span class=&quot;c&quot;&gt;#f.write(&amp;quot;  - maruku\n&amp;quot;)&lt;/span&gt;
    f.write(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    &lt;span class=&quot;c&quot;&gt;#fixing empty lines to be a hard break&lt;/span&gt;
    f.write(e.content[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;].value.gsub(&lt;span class=&quot;rx&quot;&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;/&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;&amp;lt;br&amp;gt;&lt;/span&gt;&lt;span class=&quot;ch&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)) 
    
    &lt;span class=&quot;c&quot;&gt;#fixing URL's for the images and relative paths&lt;/span&gt;
  }
  &lt;span class=&quot;c&quot;&gt;#fixing directory urls&lt;/span&gt;
  
  &lt;span class=&quot;c&quot;&gt;#browsing subdirectories index.html?&lt;/span&gt;


  puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;---------------------------&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  
  
  &lt;span class=&quot;r&quot;&gt;return&lt;/span&gt;
  
  puts e.link

  puts counter.to_s+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.wp_post_date&lt;/span&gt;
  pp e.wp_post_type
  pp e.title
  &lt;span class=&quot;c&quot;&gt;#e.summary_detail[0]&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.post_meta&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.wp_meta_key&lt;/span&gt;
  pp e.wp_post_name
  &lt;span class=&quot;c&quot;&gt;#e.wp_post_date_gmt&lt;/span&gt;
  pp e.author
  pp e.wp_post_id
  pp e.wp_status
  &lt;span class=&quot;c&quot;&gt;#e.wp_comment_status&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.summary&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.guidislink&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.title_detail[0]&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.wp_meta_value&lt;/span&gt;
  pp e.wp_post_parent
  &lt;span class=&quot;c&quot;&gt;#e.wp_ping_status&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#pp e.content[0].value&lt;/span&gt;
  pp e.content[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;].type
  pp e.content[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;].language
  pp e.links[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;].href
  &lt;span class=&quot;c&quot;&gt;#e.links[0].rel&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.links[0].type&lt;/span&gt;
  pp e.link
  &lt;span class=&quot;c&quot;&gt;#e.wp_post_password&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.wp_menu_order&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.wp_post_id&lt;/span&gt;
  &lt;span class=&quot;c&quot;&gt;#e.excerpt_encoded&lt;/span&gt;
  pp e.updated
  &lt;span class=&quot;c&quot;&gt;#e.updated_time&lt;/span&gt;
  e.updated_parsed
  
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;download_attachment&lt;/span&gt;(e)
  url=e.wp_attachment_url
  puts url
  base=&lt;span class=&quot;iv&quot;&gt;@webby_dir&lt;/span&gt;+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+url.gsub(&lt;span class=&quot;iv&quot;&gt;@site_url&lt;/span&gt;+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;,&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;).gsub(e.wp_post_name+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;)
  directory=&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.dirname(base)
  filename=&lt;span class=&quot;co&quot;&gt;File&lt;/span&gt;.basename(base)
  puts directory
  puts filename
  &lt;span class=&quot;co&quot;&gt;FileUtils&lt;/span&gt;.mkdir_p directory
  
  myURI = &lt;span class=&quot;co&quot;&gt;URI&lt;/span&gt;.parse(url)
  pp myURI
  &lt;span class=&quot;co&quot;&gt;Net&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;HTTP&lt;/span&gt;.start(myURI.host) { |http|
    resp = http.get(myURI.path)
    open(directory+&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;+filename, &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;wb&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) { |file|
      file.write(resp.body)
     }
  }
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;r&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;fu&quot;&gt;write_entries&lt;/span&gt;(entries)
  &lt;span class=&quot;iv&quot;&gt;@counter&lt;/span&gt;=&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;
  entries.each { |e|
    
    &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; e.wp_post_type == &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;post&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt; &amp;amp;&amp;amp; e.wp_status == &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;publish&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;

      write_entry(e)
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

    &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; e.wp_post_type == &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;attachment&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;'&lt;/span&gt;&lt;/span&gt;
      &lt;span class=&quot;c&quot;&gt;#we should download it      &lt;/span&gt;
      download_attachment(e)
  &lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

  }
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;pc&quot;&gt;ARGV&lt;/span&gt;.length &amp;lt; &lt;span class=&quot;i&quot;&gt;2&lt;/span&gt;
  puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Usage: wp2ruby &amp;lt;feed_url&amp;gt; &amp;lt;webby_dir&amp;gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
  exit
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

&lt;span class=&quot;iv&quot;&gt;@feed_url&lt;/span&gt;=&lt;span class=&quot;pc&quot;&gt;ARGV&lt;/span&gt;[&lt;span class=&quot;i&quot;&gt;0&lt;/span&gt;]
&lt;span class=&quot;iv&quot;&gt;@webby_dir&lt;/span&gt;=&lt;span class=&quot;pc&quot;&gt;ARGV&lt;/span&gt;[&lt;span class=&quot;i&quot;&gt;1&lt;/span&gt;]
&lt;span class=&quot;iv&quot;&gt;@site_url&lt;/span&gt;=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;

wpr=&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;r&quot;&gt;begin&lt;/span&gt;
  wpr=&lt;span class=&quot;co&quot;&gt;FeedParser&lt;/span&gt;.parse(&lt;span class=&quot;iv&quot;&gt;@feed_url&lt;/span&gt;)
&lt;span class=&quot;r&quot;&gt;rescue&lt;/span&gt;
  puts &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;Error parsing feed&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;+&lt;span class=&quot;gv&quot;&gt;$!&lt;/span&gt;
  exit
&lt;span class=&quot;r&quot;&gt;end&lt;/span&gt;

write_feed(wpr.feed)
write_entries(wpr.entries)
&lt;/pre&gt;
&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T14:37:23+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7603704315097619422.post-15642748880174239">
	<title>Geert Vanderkelen: MySQL Connector/Python and database pooling</title>
	<link>http://geert.vanderkelen.org/2010/08/mysql-connectorpython-is-or-should-be.html</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;https://launchpad.net/myconnpy&quot;&gt;MySQL Connector/Python&lt;/a&gt; is (or should be) compliant with the &lt;a href=&quot;http://python.org&quot;&gt;Python&lt;/a&gt; &lt;a href=&quot;http://www.python.org/dev/peps/pep-0249/&quot;&gt;DB-API 2.0&lt;/a&gt; specification. This means that you can use &lt;a href=&quot;http://www.webwareforpython.org/DBUtils&quot;&gt;DBUtils' PooledDB&lt;/a&gt; module to implement database connection pooling.&lt;/p&gt;&lt;p&gt;Here below you'll find an example which will output the connection ID of each connection requested through the pooling mechanism.&lt;/p&gt;&lt;pre&gt;from DBUtils.PooledDB import PooledDB
import mysql.connector

def main():
    pool_size = 3
    pool = PooledDB(mysql.connector, pool_size,
        database='test', user='root', host='127.0.0.1')
    
    cnx = [None,] * pool_size
    for i in xrange(0,pool_size):
        cnx[i] = pool.connection()
        cur = cnx[i].cursor()
        cur.execute(&quot;SELECT CONNECTION_ID()&quot;)
        print &quot;Cnx %d has ID %d&quot; % (i+1,cur.fetchone()[0])
        cur.close()
    
    for c in cnx:
        c.close()
&lt;/pre&gt;&lt;p&gt;The output will be something like this:&lt;/p&gt;&lt;pre&gt;Cnx 1 has ID 42
Cnx 2 has ID 41
Cnx 3 has ID 40
&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7603704315097619422-15642748880174239?l=geert.vanderkelen.org&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-26T11:12:55+00:00</dc:date>
</item>
<item rdf:about="http://grep.be/blog/en/computer/play/povanim.mk">
	<title>Wouter Verhelst: include povanim.mk</title>
	<link>http://grep.be/blog/en/computer/play/povanim.mk</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/wouter_verhelst&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;I was finding myself to be running the same povray command lines over
and over again. And then ffmpeg2theora. And occasionally forget to
update one or two .png files in the mean time, because I was trying and
trying and trying some stuff all the time, and forgot that one frame in
the final render. That's silly; that's why we have make.&lt;/p&gt;
&lt;p&gt;So I wrote me a makefile.
&lt;pre&gt;
START := $(shell grep 'Initial_Frame' $(INIFILE) | cut -d'=' -f 2)
STOP := $(shell grep 'Final_Frame' $(INIFILE) | cut -d'=' -f 2)
NUMBERS := $(shell seq -w $(START) $(STOP) )
POVFILE := $(shell grep 'Input_File_Name' $(INIFILE) | cut -d'&quot;' -f 2)
ifeq ($(OUTPUT),)
OUTPUT := $(basename $(shell grep 'Output_File_Name' $(INIFILE) | cut -d'&quot;' -f 2))
endif
ifeq ($(OUTPUT),)
OUTPUT := $(basename $(INIFILE))_$(basename $(POVFILE))
endif
PNGFILES := $(foreach nr, $(NUMBERS), $(OUTPUT)$(nr).png)
LEN := $(shell echo &quot;$(STOP)&quot; | wc -m)

$(OUTPUT).ogv : PATTERN := $(OUTPUT)%$(LEN)d
$(OUTPUT).ogv : $(PNGFILES)
	ffmpeg2theora -f image2 -i '$(PATTERN)'.png -o $@

$(OUTPUT)%.png : ONAME := $(OUTPUT)
$(OUTPUT)%.png : INAME := $(INIFILE)
$(OUTPUT)%.png: $(POVFILE) $(INIFILE)
	povray $(INAME) -D +SF'$*' +EF'$*' +O$(ONAME)

ifeq ($(CLEANFILES),)
clean:
	$(RM) $(CLEANFILES)
endif

CLEANFILES := $(CLEANFILES) $(PNGFILES)
&lt;/pre&gt;
&lt;p&gt;The first part, to just write the makefile so that it would work, was
easy. The second bit, write it so that you can include it in the same
Makefile several times and have it generate patterns for the files you
need, without having them conflict with eachother, was... slightly
harder. But not impossible, apparently, with GNU make.&lt;/p&gt;
&lt;p&gt;Use like this:&lt;/p&gt;
&lt;pre&gt;
INIFILE=foo.ini
include povanim.mk
INIFILE=bar.ini
OUTPUT=bar
include povanim.mk
&lt;/pre&gt;
&lt;p&gt;with &lt;tt&gt;povanim.mk&lt;/tt&gt; containing the above Makefile&lt;/p&gt;
&lt;p&gt;Now just run 'make' or 'make bar.ogv', wait for the rendering and
encoding to complete, and you have an animation film. You can even use
make's '-j' option to speed up processing by using multiple processors.
Which will no longer be useful when povray 3.7 comes out (since that
uses multithreading to use all cores with a single povray instance,
anyway), but it is for now.&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-26T01:58:00+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-18697195.post-3827789416689615894">
	<title>Paul Cobbaut: simple zfs snapshot demo</title>
	<link>http://cobbaut.blogspot.com/2010/08/simple-zfs-snapshot-demo.html</link>
	<content:encoded>create a zfs file system on four disks&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zpool create zzz c2t0d0 c2t1d0 c3t0d0 c3t1d0&lt;br /&gt;root@sol10u8 /# zfs create zzz/data42&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;populate it with 2MB of data&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# dd if=/dev/urandom of=/zzz/data42/file2MB count=2048 bs=1024&lt;br /&gt;2048+0 records in&lt;br /&gt;2048+0 records out&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;verify the used disk space is 2MB&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zfs list -o space&lt;br /&gt;NAME        AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD&lt;br /&gt;zzz         7.81G  2.11M         0     23K              0      2.09M&lt;br /&gt;zzz/data42  7.81G  2.02M         0   2.02M              0          0&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;add 3MB&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# dd if=/dev/urandom of=/zzz/data42/file3MB count=3072 bs=1024&lt;br /&gt;3072+0 records in&lt;br /&gt;3072+0 records out&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;wait a couple of seconds, then verify usage of diskspace&lt;br /&gt;2MB + 3MB = 5MB&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zfs list -o space&lt;br /&gt;NAME        AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD&lt;br /&gt;zzz         7.81G  5.12M         0     23K              0      5.10M&lt;br /&gt;zzz/data42  7.81G  5.03M         0   5.03M              0          0&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;create a snapshot to preserve this 5MB forever&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zfs snapshot zzz/data42@Wednesday&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;snapshot = read only copy&lt;br /&gt;snapshot = takes almost zero diskspace when created&lt;br /&gt;snapshot = consumes diskspace as data changes&lt;br /&gt;snapshot = because it keeps the original data&lt;br /&gt;&lt;br /&gt;verify diskspace used by snapshot&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zfs list -o space&lt;br /&gt;NAME                  AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD&lt;br /&gt;zzz                   7.81G  5.12M         0     23K              0      5.10M&lt;br /&gt;zzz/data42            7.81G  5.03M         0   5.03M              0          0&lt;br /&gt;zzz/data42@Wednesday      -      0         -       -              -          -&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;force 3MB of data changes on the original file system&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# dd if=/dev/urandom of=/zzz/data42/file3MB count=3072 bs=1024&lt;br /&gt;3072+0 records in&lt;br /&gt;3072+0 records out&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;this new 3MB of data was written over 3MB of existing data&lt;br /&gt;&lt;br /&gt;wait a couple of seconds!!&lt;br /&gt;then verify disk usage of file system and snapshot&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zfs list -o space&lt;br /&gt;NAME                  AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD&lt;br /&gt;zzz                   7.81G  8.15M         0     23K              0      8.13M&lt;br /&gt;zzz/data42            7.81G  8.05M     3.02M   5.03M              0          0&lt;br /&gt;zzz/data42@Wednesday      -  3.02M         -       -              -          -&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;notice that the snapshot uses 3MB --&gt; it's keeping the original 3MB forever!&lt;br /&gt;notice that the zpool consumes 8MB : 5MB of current data + 3MB snapshot data&lt;br /&gt;&lt;br /&gt;copying the snapshot to another file system would total to 5MB&lt;br /&gt;the same 5MB that existed at the time we took the snapshot&lt;br /&gt;3MB inside the snapshot + 2MB of original data still on zzz/data42&lt;br /&gt;&lt;br /&gt;add another 4MB of data to the file system&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# dd if=/dev/urandom of=/zzz/data42/file4MB count=4096 bs=1024&lt;br /&gt;4096+0 records in&lt;br /&gt;4096+0 records out&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;wait a couple of seconds&lt;br /&gt;verify that data42 now consumes 9MB&lt;br /&gt;snapshot stays at 3MB&lt;br /&gt;total for the pool is now 12 MB&lt;br /&gt;12MB = 3MB snapshot + 2MB original data + 3MB new data + 4MB new data&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# zfs list -o space&lt;br /&gt;NAME                  AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD&lt;br /&gt;zzz                   7.80G  12.2M         0     23K              0      12.1M&lt;br /&gt;zzz/data42            7.80G  12.1M     3.02M   9.03M              0          0&lt;br /&gt;zzz/data42@Wednesday      -  3.02M         -       -              -          -&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;this new 4MB data is in a new file, so it does not influence the snapshot&lt;br /&gt;&lt;br /&gt;take a look at the file system&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# ls -l /zzz/data42/&lt;br /&gt;total 18457&lt;br /&gt;-rw-r--r--   1 root     root     2097152 Aug 25 21:45 file2MB&lt;br /&gt;-rw-r--r--   1 root     root     3145728 Aug 25 21:49 file3MB&lt;br /&gt;-rw-r--r--   1 root     root     4194304 Aug 25 21:51 file4MB&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;take a look at the snapshot&lt;br /&gt;&lt;pre&gt;root@sol10u8 /# ls -l /zzz/data42/.zfs/snapshot/Wednesday/&lt;br /&gt;total 10256&lt;br /&gt;-rw-r--r--   1 root     root     2097152 Aug 25 21:45 file2MB&lt;br /&gt;-rw-r--r--   1 root     root     3145728 Aug 25 21:46 file3MB&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;notice the difference in the time stamp on the 3MB file!!&lt;br /&gt;&lt;br /&gt;use zfs send/receive to copy the snapshot&lt;br /&gt;&lt;pre&gt;zfs send zzz/data42@Wednesday | ssh server &quot;zfs receive yyy/data42&quot;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;or use cp, tar, cpio, rsync... to backup a snapshot&lt;br /&gt;&lt;a href=&quot;http://www.linux-training.be/&quot;&gt;www.linux-training.be&lt;/a&gt; explains these commands&lt;br /&gt;&lt;br /&gt;destroy the snapshot&lt;br /&gt;&lt;pre&gt;zfs destroy zzz/data42@Wednesday&lt;/pre&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/18697195-3827789416689615894?l=cobbaut.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-25T22:47:06+00:00</dc:date>
</item>
<item rdf:about="http://www.fosdem.org/14 at http://www.fosdem.org/2011">
	<title>FOSDEM organizers: Call for Main Speakers and Devrooms</title>
	<link>http://www.fosdem.org/2011/call_for_mainspeakers_devrooms</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fosdem&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;
&lt;a href=&quot;http://fosdem.org&quot;&gt;FOSDEM&lt;/a&gt;, the biggest free and non-commercial event organized by and for the open source community, is taking place in &lt;a href=&quot;http://fosdem.org/practical/transportation&quot;&gt;Brussels, Belgium&lt;/a&gt; on &lt;b&gt;Saturday 5 and Sunday 6 February 2011&lt;/b&gt;. Apart from having many invited speakers, the conference offers developer rooms, stands and lightning talks to projects from the Free and Open source community. This results in a staggering number of 250+ lectures!
&lt;/p&gt;
&lt;p&gt;
We hereby &lt;b&gt;invite&lt;/b&gt; ideas and proposals for &lt;b&gt;main speakers&lt;/b&gt;, and proposals for &lt;b&gt;developer rooms&lt;/b&gt;. The call for stands and lightning talks will be done after announcing the accepted devrooms.
&lt;p&gt;
Details and dates below.
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.fosdem.org/2011/call_for_mainspeakers_devrooms&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-25T20:46:16+00:00</dc:date>
</item>
<item rdf:about="http://www.fosdem.org/20 at http://www.fosdem.org/2011">
	<title>FOSDEM organizers: Distribution Miniconf</title>
	<link>http://www.fosdem.org/2011/distrominiconf</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fosdem&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;
Last year we organized a Distribution Miniconf for the first time, and we are eager to do it again this year and improve the concept.
&lt;/p&gt;

&lt;p&gt;
Subscribe to the &lt;a href=&quot;http://lists.fosdem.org/mailman/listinfo/dist2011&quot;&gt;mailinglist&lt;/a&gt; to join the discussion.
&lt;/p&gt;

&lt;p&gt;
At FOSDEM we care strongly about open source projects small and large. FOSDEM was created as a meeting place where developers from different projects and with different backgrounds can come together and share ideas, discuss, etc.
&lt;br /&gt;
The devrooms have always been premier place for this. However, in recent years we have reached the limit of our capacity, with more than double proposals over rooms available. Distributions have always had a strong presence at FOSDEM, however, we were faced with having to choose some distributions over others.
&lt;/p&gt;
&lt;p&gt;
Holding the distro miniconf provides a way to better achieve our goals in two ways:
&lt;br /&gt;
- by organizing a mini conference where all distributions can participate in, we foster collaboration and cross pollination,
&lt;br /&gt;
- additionally, some rooms become available for use by other projects, thereby diversifying the audience and topics at FOSDEM.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.fosdem.org/2011/distrominiconf&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-25T20:44:07+00:00</dc:date>
</item>
<item rdf:about="http://dieter.plaetinck.be/89 at http://dieter.plaetinck.be">
	<title>Dieter Plaetinck: the "Community Contributions" section on the Arch Linux forums is a goldmine</title>
	<link>http://dieter.plaetinck.be/the_Community_Contributions_section_on_the_Arch_Linux_forums_is_a_goldmine</link>
	<content:encoded>&lt;p&gt;The &lt;a href=&quot;https://bbs.archlinux.org/viewforum.php?id=27&quot;&gt;Community contributions&lt;/a&gt; subforum of the Arch Linux forums is awesome.&lt;br /&gt;
It is the birthplace of many applications, most of them not Arch Linux specific.&lt;br /&gt;
File managers, media players, browsers, window managers, text editors, todo managers, and so on.  Many shell scripts, urxvt extensions and dwm patches aswell.&lt;br /&gt;
Most of the apps are designed after suckless/KISS principles, but there are also some GUI programs.&lt;/p&gt;
&lt;p&gt;If you like to discover new apps and tools, check it out.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-25T20:11:58+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-7036379482487192438.post-3241920929378395427">
	<title>Bert de Bruijn: Comparing bluetooth carkits</title>
	<link>http://virtwo.blogspot.com/2010/08/comparing-bluetooth-carkits.html</link>
	<content:encoded>Bluetooth carkits come in three main categories: those with &lt;a href=&quot;http://en.wikipedia.org/wiki/Bluetooth_profile#Headset_Profile_.28HSP.29&quot;&gt;bluetooth HSP&lt;/a&gt;, those with &lt;a href=&quot;http://en.wikipedia.org/wiki/Bluetooth_profile#Hands-Free_Profile_.28HFP.29&quot;&gt;bluetooth HFP&lt;/a&gt;, and ones that do &lt;a href=&quot;http://en.wikipedia.org/wiki/Bluetooth_profile#SIM_Access_Profile_.28SAP.2C_SIM.2C_rSAP.29&quot;&gt;bluetooth SAP&lt;/a&gt;. Some implement multiple of these profiles and allow you to choose.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HSP (head set profile) is the simplest profile: your carkit is basically a speaker-microphone combo, and will play the received audio and send your voice to the telephone. The telephone connects to the cellular network and handles the call. HSP is commonly used in bluetooth earpieces.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HFP (hands free profile) is the most common protocol in carkits with a display: your phone still handles the call, and the carkit provides the two-way audio function just like HSP. But the carkit also has basic control over the phone: it can access the received/dialled/missed call lists. It can also instruct the phone to dial a number, to accept or to reject an incoming call. Most carkits also access the phonebook.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SAP (SIM access profile, also known as rSAP or SIM) is the most complex of the three: this carkit contains a cell phone ! The mobile phone will disconnect from the network, and lend its SIM card to the carkit phone. Calling is now done by the carkit phone. The carkit will typically also sync the phonebook of the phone via another bluetooth profile.&lt;/li&gt;&lt;/ul&gt;this is my list of pros and cons for all:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HSP pro: your phone can do everything it wants, and you speak to the carkit the way you'd speak into your phone. You still have 3G, and if your phone does smart tricks like voice commands, that probably still works over the carkit. You can seamlessly disconnect the bluetooth kit during a call and continue the call on your phone.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;HSP con: your phone is the only place to control calls, see caller ID, etc. Also, your phone emits radiation inside your car.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HFP pro: you can still use your phone to control calls, but also the carkit display and buttons. On your phone, you'll still have 3G. In my experience, things like voice commands for your phone won't work anymore, but maybe your carkit has similar functionality. As with HSP, you can seamlessly disconnect/connect the carkit during a call.&lt;/li&gt;&lt;li&gt;HFP con: your phone emits radiation inside your car, although with a suitable cradle, your mobile phone may benefit from an external antenna. Depending on phone and carkit, you may not hear your personal ringtone anymore.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SAP pro: no more phone radiation inside your car! The carkit has an external antenna, which means better reception. Battery usage on your mobile phone is minimal.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SAP con: you can't seamlessly switch from carkit to mobile phone. Getting in your car during a call means ending the call and redialing from your carkit phone. Your phone can't do 3G anymore while connected to the carkit. Not all phones support this profile (most notably the iPhone doesn't). You don't hear your fancy personal ringtone anymore, because it's now you carkit phone that's ringing.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/7036379482487192438-3241920929378395427?l=virtwo.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-25T20:07:51+00:00</dc:date>
</item>
<item rdf:about="http://www.norio.be/162 at http://www.norio.be">
	<title>Litrik De Roy: Dynamic working sets</title>
	<link>http://www.norio.be/blog/2010/08/dynamic-working-sets</link>
	<content:encoded>&lt;p&gt;If you have a lot of projects in your Eclipse workspace you should check out the &lt;a href=&quot;http://marketplace.eclipse.org/content/javadude-dynamic-working-sets&quot;&gt;Dynamic Working Sets&lt;/a&gt; plug-in.&lt;/p&gt;
&lt;p&gt;It allows you to define working sets based on a regular expression. If a project name matches the regex it will be included in the working set.&lt;/p&gt;
&lt;p&gt;It sure beats adding new projects to existing working sets all the time. Really handy to keep your workspace organized.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/norio/~4/RUASyPXkcZM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-25T10:28:41+00:00</dc:date>
</item>
<item rdf:about="http://pvanhoof.be/blog/?p=583">
	<title>Philip Van Hoof: Tracker’s new class signal system being developed</title>
	<link>http://pvanhoof.be/blog/index.php/2010/08/24/trackers-new-class-signal-system-being-developed</link>
	<content:encoded>&lt;p&gt;&lt;strong&gt;Tracker 0.8&amp;#8217;s situation&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In Tracker 0.8 we have a &lt;a href=&quot;http://live.gnome.org/Tracker/Documentation/SignalsOnChanges#Tracker_0.8&quot;&gt;signal system&lt;/a&gt; that causes quite a bit of overhead. The overhead comes from:&lt;/p&gt;
&lt;ol type=&quot;a&quot;&gt;
&lt;li&gt;Having to store the URIs of the resources involved in a changeset in &lt;tt&gt;tracker-store&lt;/tt&gt;&amp;#8217;s memory;&lt;/li&gt;
&lt;li&gt;Having to store the predicates involved in a changeset in &lt;tt&gt;tracker-store&lt;/tt&gt;&amp;#8217;s memory (less severe than A because we can store a pointer to an instance instead of a string);&lt;/li&gt;
&lt;li&gt;Having to UTF-8 validate the strings when we emit them over D-Bus (D-Bus does this implicitly);&lt;/li&gt;
&lt;li&gt;DBus&amp;#8217;s own copying and handling of string data;&lt;/li&gt;
&lt;li&gt;Heavy traffic on D-Bus;&lt;/li&gt;
&lt;li&gt;Context switching between &lt;tt&gt;tracker-store&lt;/tt&gt; and &lt;tt&gt;dbus-daemon&lt;/tt&gt;;&lt;/li&gt;
&lt;li&gt;We have to wait with turning on the D-Bus objects until after we have the latest ontology. So after journal replay. And we need to reset the situation after a backup restore. Complex!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;small&gt;Not all aggregators show this list as A, B, C, D, E, F and G. Sorry for that. I&amp;#8217;ll nevertheless refer to the items as such later in this article.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consumer&amp;#8217;s problems with Tracker 0.8&amp;#8217;s signal&lt;/strong&gt;&lt;/p&gt;
&lt;ol type=&quot;1&quot;&gt;
&lt;li&gt;Aforementioned overhead: consumes a lot of D-Bus traffic. This is caused by sending over URLs for the subjects and the predicates;&lt;/li&gt;
&lt;li&gt;Doesn&amp;#8217;t make it possible, in case of a delete of &lt;tt&gt;&amp;lt;a&amp;gt;&lt;/tt&gt;, to know &lt;tt&gt;&amp;lt;b&amp;gt;&lt;/tt&gt; in &lt;tt&gt;&amp;lt;a&amp;gt; nfo:isLogicalPartOf &amp;lt;b&amp;gt;&lt;/tt&gt;, as &lt;tt&gt;&amp;lt;a&amp;gt;&lt;/tt&gt; is removed at the point of signal emission;&lt;/li&gt;
&lt;li&gt;Round trips to know the literals create more D-Bus traffic;&lt;/li&gt;
&lt;li&gt;Transactional changes can&amp;#8217;t be reliably identified with &lt;tt&gt;SubjectsAdded&lt;/tt&gt;, &lt;tt&gt;SubjectsChanged&lt;/tt&gt; and &lt;tt&gt;SubjectsRemoved&lt;/tt&gt; being separate signals;&lt;/li&gt;
&lt;li&gt;A lot of D-Bus objects, instead of letting clients use D-Bus&amp;#8217;s filtering system.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;The &lt;a href=&quot;http://git.gnome.org/browse/tracker/log/?h=class-signal&quot;&gt;solution that we&amp;#8217;re developing&lt;/a&gt; for Tracker 0.9&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Direct access&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;With direct-access we remove most of the round-trip cost of a query coming from a consumer that wants a literal object involved in a changeset: by utilizing the &lt;a href=&quot;http://git.gnome.org/browse/tracker/tree/src/libtracker-sparql/tracker-cursor.vala&quot;&gt;&lt;tt&gt;TrackerSparqlCursor&lt;/tt&gt;&lt;/a&gt; API with direct-access enabled, you end up doing &lt;tt&gt;sqlite3_step()&lt;/tt&gt; in your own process, directly on meta.db.&lt;/p&gt;
&lt;p&gt;For the consumers of the signal, this removes &lt;strong&gt;3&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Sending integer IDs instead of string URIs&lt;br /&gt;
&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A while ago we introduced the SPARQL function &lt;tt&gt;tracker:id(&lt;span&gt;resource&lt;/span&gt; uri)&lt;/tt&gt;. The &lt;tt&gt;tracker:id(&lt;span&gt;resource&lt;/span&gt; uri)&lt;/tt&gt; function gives you a unique number that Tracker&amp;#8217;s RDF store uses internally.&lt;/p&gt;
&lt;p&gt;Each resource, each class and each predicate (latter are resources like any other) have such an unique internal ID.&lt;/p&gt;
&lt;p&gt;Given that Tracker&amp;#8217;s class signal system is specific anyway, we decided not to give you subject URL strings. Instead, we&amp;#8217;ll give you the integer IDs.&lt;/p&gt;
&lt;p&gt;The &lt;tt&gt;Writeback&lt;/tt&gt; signal also got changed to do this, for the same reasons. But this API is entirely internal and shouldn&amp;#8217;t be used outside of the project.&lt;/p&gt;
&lt;p&gt;This for us removes &lt;strong&gt;A&lt;/strong&gt;, &lt;strong&gt;B&lt;/strong&gt;, &lt;strong&gt;C&lt;/strong&gt;, &lt;strong&gt;D&lt;/strong&gt; and &lt;strong&gt;E&lt;/strong&gt;. For the consumers of the signal, this removes &lt;strong&gt;1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Merge added, changed and removed into the one signal&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We give you two arrays in one signal: &lt;tt&gt;inserts&lt;/tt&gt; and &lt;tt&gt;deletes&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;For consumers of the signal, this removes &lt;strong&gt;4&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Add the class name to the signal&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This allows you to use a string filter on your signal subscription in D-Bus.&lt;/p&gt;
&lt;p&gt;For us this removes &lt;strong&gt;G&lt;/strong&gt;. For consumers of the signal, this removes &lt;strong&gt;5&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pass the object-id for resource objects&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You&amp;#8217;ll get a third number in the &lt;tt&gt;inserts&lt;/tt&gt; and &lt;tt&gt;deletes&lt;/tt&gt; arrays: &lt;tt&gt;object-id&lt;/tt&gt;. We don&amp;#8217;t send object literals, although for integral objects we&amp;#8217;re still discussing this. But for resource objects we give without much extra cost the &lt;tt&gt;object-id&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;For consumers of the signal, this removes &lt;strong&gt;2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;SPARQL IN, tracker:id(&lt;span&gt;resource&lt;/span&gt; uri) and tracker:uri(&lt;span&gt;int&lt;/span&gt; id)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We recently added support for SPARQL IN, we already had &lt;tt&gt;tracker:id(&lt;span&gt;resource&lt;/span&gt; uri)&lt;/tt&gt; and I implemented &lt;tt&gt;tracker:uri(&lt;span&gt;int&lt;/span&gt; id)&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;This makes things like this possible:&lt;/p&gt;
&lt;pre&gt;SELECT ?t { ?r nie:title ?t .
            FILTER (tracker:id(?r) IN (800, 801, 802, 807)) }&lt;/pre&gt;
&lt;p&gt;Where 800, 801, 802 and 807 will be the IDs that you receive in the class signal. And with &lt;tt&gt;tracker:uri(&lt;span&gt;int&lt;/span&gt; id)&lt;/tt&gt; it goes like:&lt;/p&gt;
&lt;pre&gt;SELECT tracker:uri (800) tracker:uri (801)
       tracker:uri (802) tracker:uri (807) { }&lt;/pre&gt;
&lt;p&gt;For consumers this removes most of the burden introduced by the IDs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Context switching of processes&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What is left is context switching between &lt;tt&gt;tracker-store&lt;/tt&gt; and &lt;tt&gt;dbus-daemon&lt;/tt&gt;, &lt;strong&gt;F&lt;/strong&gt;. Mostly important for mobile targets (ARM hardware). We reduce them by grouping transactions together and then bursting larger sets. It&amp;#8217;s both timeout and data-size based (after either a certain amount of time, or a certain memory limit, we emit). We&amp;#8217;re still testing what the most ideal timeouts and sizes are on target hardware.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Where is the stuff?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The work isn&amp;#8217;t yet reviewed nor thoroughly tested. This will happen next few days and weeks.&lt;/p&gt;
&lt;p&gt;Anyway, here&amp;#8217;s &lt;a title=&quot;Warning: branch will be rebased soon&quot; href=&quot;http://git.gnome.org/browse/tracker/log/?h=class-signal&quot;&gt;the branch&lt;/a&gt;, &lt;a href=&quot;http://live.gnome.org/Tracker/Documentation/SignalsOnChanges#Tracker_0.9&quot;&gt;documentation&lt;/a&gt;, &lt;a title=&quot;Warning: File might be moved around&quot; href=&quot;http://git.gnome.org/browse/tracker/tree/examples/class-signal/class-signal.c?h=class-signal&quot;&gt;example in Plain C&lt;/a&gt;, &lt;a title=&quot;Warning: File might be moved around&quot; href=&quot;http://git.gnome.org/browse/tracker/tree/tests/functional-tests/class-signal-test.vala?h=class-signal&quot;&gt;example in Vala&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-24T22:49:53+00:00</dc:date>
</item>
<item rdf:about="http://blog.bdesmet.be/?p=446">
	<title>Bert Desmet: iRail hackathon</title>
	<link>http://blog.bdesmet.be/2010/08/irail-hackathon/</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/bert_desmet&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;Hi all!&lt;/p&gt;
&lt;p&gt;A friend of me, &lt;a href=&quot;http://bonsansnom.wordpress.com/&quot;&gt;Pieter Colpaert&lt;/a&gt;, is one of the core developers on &lt;a href=&quot;http://project.irail.be/cgi-bin/trac.fcgi&quot;&gt;iRail&lt;/a&gt;. I don&amp;#8217;t know if you all followed the &lt;a href=&quot;http://blog.tuinslak.org/2010/06/stopping-irail-be/&quot;&gt;buzz&lt;/a&gt; &lt;a href=&quot;http://www.6minutes.be/NL/Artikel.aspx?ArtikelID=19338&amp;RubriekID=34&amp;UserID=1&quot;&gt;around&lt;/a&gt; &lt;a href=&quot;http://bonsansnom.wordpress.com/2010/08/06/creating-an-open-transport-api/&quot;&gt;iRail&lt;/a&gt;, but iRail is more alive than ever!&lt;/p&gt;
&lt;p&gt;And because they want to get that extra push, they are organizing a hackathon at &lt;a href=&quot;http://0x20.be&quot;&gt;Whitespace&lt;/a&gt; on Friday 17 September from 18h. I won&amp;#8217;t be able to make it because of &lt;a href=&quot;http://fedoraproject.org/wiki/FUDCon:Zurich_2010&quot;&gt;Fudcon&lt;/a&gt;, but I want to give them my full support!&lt;/p&gt;
&lt;p&gt;More information is available on the &lt;a href=&quot;http://0x20.be/Project_iRail&quot;&gt;Whitespace wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignnone&quot; title=&quot;iRail logo&quot; src=&quot;http://project.irail.be/htdocs/common/irail.png&quot; alt=&quot;&quot; width=&quot;57&quot; height=&quot;57&quot; /&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-24T21:00:09+00:00</dc:date>
</item>
<item rdf:about="http://blog.penumbra.be/?p=463">
	<title>Tom De Vylder: Fixing strange device names using Ubuntu templates on VMware ESX or vSphere</title>
	<link>http://blog.penumbra.be/2010/08/udev-ubuntu-vmware-vsphere/</link>
	<content:encoded>If you regularly deploy Ubuntu VM templates on your VMware ESX(i) or VMware vSphere boxes you will probably run into strange network device numbers. This is caused by a udev rule. This problem has been confirmed to exist in Ubuntu 9.04, 9.10 and 10.04. I haven&amp;#8217;t had the time to check out other versions. As [...]</content:encoded>
	<dc:date>2010-08-23T18:12:55+00:00</dc:date>
</item>
<item rdf:about="http://dieter.plaetinck.be/88 at http://dieter.plaetinck.be">
	<title>Dieter Plaetinck: Review of "Python 3 Object Oriented Programming"</title>
	<link>http://dieter.plaetinck.be/review_of_Python_3_Object_Oriented_Programming</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://archlinux.me/dusty/&quot;&gt;Dusty Phillips&lt;/a&gt;, Arch Linux shwag guy, Archcon co-organizer, (python) consultant and since recently &lt;a href=&quot;http://dieter.plaetinck.be/back_from_canada_archcon&quot;&gt;buddy of mine&lt;/a&gt; wrote his first &lt;a href=&quot;https://www.packtpub.com/python-3-object-oriented-programming/book?utm_source=dieter.plaetinck.be&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_004281&quot;&gt;book: Python 3 Object Oriented Programming&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I got the opportunity to get a free pdf copy in exchange for a review on my blog, so here we go.&lt;br /&gt;
Mind you, my Python knowledge is very limited.  I have done some python programming, and I once read (most of) &lt;a href=&quot;http://diveintopython.org/&quot;&gt;Dive into python&lt;/a&gt;, but over the years that experience has vanished from my memory.  Dusty's book has had many proofreads/reviews by python-aficionado's, now it gets a fresh perspective from an amateur, and for me this was a good opportunity to work on my python skills.&lt;/p&gt;
&lt;p&gt;To paraphrase the &quot;who this book is for&quot; paragraph, which is in the beginning of the book and in &lt;a href=&quot;https://www.packtpub.com/python-3-object-oriented-programming/book?utm_source=dieter.plaetinck.be&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_004281&quot;&gt;online advertisements&lt;/a&gt; for the book:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people new to OO programming and people with basic python skills who want to improve their python OO.&lt;/li&gt;
&lt;li&gt;OO programmers experienced in other languages who want to get into python.&lt;/li&gt;
&lt;li&gt;python 2 programmers interested in learning python 3, although this is not the target audience.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Good, that includes me (category 2)&lt;/p&gt;
&lt;p&gt;Pro's:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;seems very accurate&lt;/li&gt;
&lt;li&gt;OO focused.   But not in a college/university-ish way.  Real experience, nuanced, real examples and exercises.  Tells you when *not* to use OO.  Teaches you the difference between object orientation, OO programming and OO design, and makes you understand that in the end everything are just means to end, and thanks to the versatility of Python, teaches you various tricks to implement certain designs in less then obvious ways.&lt;/li&gt;
&lt;li&gt;Chapters about design patterns (there sure are many of them), testing, libraries, and some other topics not directly related to OO.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con's:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not an introduction to Python.  Assumes some basic knowledge about Python. (like data structures and loops). There is a chapter about (some of the) datatypes later on in the book but it focuses more on their OO nature, and to get to know the basics, you're referred to &lt;a href=&quot;http://docs.python.org/py3k/tutorial/&quot;&gt;the official python tutorial&lt;/a&gt;.
&lt;li&gt;Does not cover *everything*.&lt;/li&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;I should clarify my last point.  Here and there I found some information to be lacking.  Especially  static class methods (they are only mentioned very briefly in a case study somewhere) and static properties/variables.&lt;br /&gt;
Other then that, sometimes an example or explanation was not entirely clear to me.  This didn't happen often, but there were moments where I thought 95% of what you need to know is explained, but the other 5% you have to google up yourself.&lt;br /&gt;
It is quite convenient however, to have the author of a book available in your jabber client.&lt;br /&gt;
So FWIW here are the things I asked him about and which responses I got, with some comments added by me afterwards.&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;pre class=&quot;geshifilter-text&quot;&gt;&lt;ol&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; hmm you mention that methods *need* a self param, but why is this?&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           can't python automatically make a variable self available in the scope of the function, when calling it?&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    no, they are always explicit&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; but why?&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    it's part of the python philosophy, I guess. &amp;quot;explicit is better than implicit&amp;quot; is in the zen of python poem.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           Basically, if you are accessing a variable in any namespace, that variable has to be have been made explicitly available in that &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           namespace. The one exception is the from X import * syntax, which 98% of python programmers avoid exactly because of the namespace issues.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; right&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;# good to know.  Too bad this isn't really mentioned anywhere.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; i don't quite get why - in your notebook example of chap 2 - you iterate over the list to find the correct note based on its id.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           can't you just get the element based on it's index in the list? (ie keep the node id in sync with the index in the list)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    I don't have the code in front of me, but I suspect that it's because if a note is deleted, that id should not be recycled and applied to another note.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; but still, since you keep the last used id, and keep increasing it, you won't recycle id's.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    yeah, but the index in the list will change&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    when you delete #4&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; oh&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    the object with ID 5 becomes the object at #4&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; thanks buddy&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    no problem. :)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;# again, makes perfect sense.  But if you don't know the ins and outs of the datatypes, you're on your own.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; i had a question about your example for the decorator pattern.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           you use a socket and then you have 2 decorators that implement a send function which do some stuff (logging and what not)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           but also the actual sending on the socket&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; and you mention you can have multiple decorators on the same object.  but since each decorator also does the sending on the socket,&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           doesn't that mean the sending happens multiple times?&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    no, because the first decorator is decorating the second decorator&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    which is decorating the socket&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; ah yes you're right. and although you did not specify it like this in the explanation text, it should be clear from the code.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;# If I would have looked better at the code I would have figured it out.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;# I just assumed something had to be wrong, I'm too used to the way 'behaviors' are implemented in CakePHP.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; one last remark i have about the book: i couldn't find an explanation of static variables/properties.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           i did see a very short mention of static methods in the case study at the end of chap 3, i would have expected to have that info a bit more &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;           prominent, in it's own subsection or something&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; especially because you use static class methods a few times throughout the book&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dusty&amp;gt;    I had a long section on them and ended up removing it because the chapter was too long and one of my reviewers suggested that they aren't very good form in Python.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&amp;lt;Dieterbe&amp;gt; hmm. i see&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;The writing is pretty informal, and here and there you'll find a subtle reference or joke.  But of course that's not what you buy this book for.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I would say the &quot;who this book is for&quot; part is a bit too optimistic.  You won't learn Python (3) from scratch by only using this book.  It's not a book restricted to mere OO subjects (in python), but neither does it cover all basics of the Python language.&lt;/p&gt;
&lt;p&gt;So if you are a python newbie, I would probably recommend you 'Dive into python'.  It's free, covers the basics, but doesn't contain so many real life examples.&lt;/p&gt;
&lt;p&gt;If you want to know more about OO in python, design patterns, some real life examples and techniques, or advice from a pro, then I definitely recommend this book.&lt;/p&gt;
&lt;p&gt;Free chapter: &lt;a href=&quot;https://www.packtpub.com/sites/default/files/1261-chapter-7-Python%20object-oriented-shortcuts.pdf&quot;&gt;Chapter No. 7 – Python Object-oriented Shortcuts&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-23T17:01:09+00:00</dc:date>
</item>
<item rdf:about="http://blog.futtta.be/?p=3460">
	<title>Frank Goossens: Protecting wp-contact-form from spam</title>
	<link>http://feedproxy.google.com/~r/futtta/~3/98Vcfx-Aars/</link>
	<content:encoded>&lt;p&gt;Ever since I installed WordPress on my (virtual) server, I&amp;#8217;ve been using &lt;a href=&quot;http://wordpress.org/extend/plugins/wp-contact-form/&quot;&gt;the WP Contact Form plugin&lt;/a&gt; to provide me with &lt;strong&gt;simple contact form&lt;/strong&gt;. The plugin isn&amp;#8217;t exactly under active development (Last Updated: 2009-8-28), but it got the job done and I was quite happy with it. Until &lt;strong&gt;spammers&lt;/strong&gt; found the page and started abusing it, that is. There&amp;#8217;s a bunch of other Contactform-plugins in the wordpress.org plugins repository, but most of them were either &lt;a title=&quot;contact-form-7 looks great if you need a versatile form-manager. i don't.&quot; href=&quot;http://wordpress.org/extend/plugins/contact-form-7&quot;&gt;too feature-packed&lt;/a&gt; or &lt;a title=&quot;yoast's enhanced contact form&quot; href=&quot;http://wordpress.org/extend/plugins/enhanced-wordpress-contactform/&quot;&gt;development for them seemed to have stopped&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I considered adding &lt;a title=&quot;recaptcha on google.com&quot; href=&quot;http://www.google.com/recaptcha&quot;&gt;ReCaptcha&lt;/a&gt; at first, but why would I want to put my visitors through such an ordeal; the &lt;strong&gt;captcha&amp;#8217;s seem to have gotten very difficult to decipher&lt;/strong&gt;.  Next possibility; implement &lt;a title=&quot;akistmet = part of automattic = the wordpress-guys&quot; href=&quot;http://akismet.com/&quot;&gt;Akismet&lt;/a&gt; (&lt;a title=&quot;mollom originated in the drupal-sphere, the other guys quoi&quot; href=&quot;http://mollom.com/&quot;&gt;Mollom&lt;/a&gt; would have been a great choice as well)? There&amp;#8217;s &lt;a title=&quot;akismet php5 class&quot; href=&quot;http://www.achingbrain.net/stuff/php/akismet&quot;&gt;a great Akismet PHP5-class&lt;/a&gt;, you just provide your API-key and off you go. But it seemed kind of inefficient to have to do all that with &lt;a title=&quot;automattic's akismet plugin&quot; href=&quot;http://wordpress.org/extend/plugins/akismet/&quot;&gt;the official Akismet-plugin&lt;/a&gt; already in place?&lt;/p&gt;
&lt;p&gt;But wait a minute, why not &lt;strong&gt;just piggyback on the Akismet-plugin&lt;/strong&gt;, as &lt;a title=&quot;clean contact; nice plugin, but building your form in javascript is not the way i wanted to go ...&quot; href=&quot;http://wordpress.org/extend/plugins/clean-contact/&quot;&gt;the Clean-contact plugin&lt;/a&gt; and &lt;a title=&quot;does not work with wp2.5? sounds like abandonware to me ;-)&quot; href=&quot;http://www.bloggingexpertise.com/plugins/wp-contactform-akismet/&quot;&gt;wp-contactform-akismet&lt;/a&gt; did? Keep it simple stupid and so I just &lt;strong&gt;copy/pasted the clean_contact_akismet-function&lt;/strong&gt; &lt;a title=&quot;cleancontact 1.2.1 code on plugins.svn.wordpress.org&quot; href=&quot;http://plugins.svn.wordpress.org/clean-contact/tags/1.2.1/clean_contact.php&quot;&gt;from Clean Contact&amp;#8217;s code&lt;/a&gt; into my wp-content/plugins/wp-contact-form/wp-contactform.php and on line 142 I changed:&lt;/p&gt;
&lt;pre class=&quot;brush: php;&quot;&gt;mail($recipient, $subject, $fullmsg, $headers);
$results = '&amp;lt;div style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;' . $success_msg . '&amp;lt;/div&amp;gt;';
echo $results;&lt;/pre&gt;
&lt;p&gt;into:&lt;/p&gt;
&lt;pre class=&quot;brush: php;&quot;&gt;$akismet=clean_contact_akismet($msg,$subject,$email,$name);
if (!$akismet) {
mail($recipient, $subject, $fullmsg, $headers);
$results = $success_msg;
} else {
$results = 'If it looks like spam and smells like spam, it must be spam. Leave (or rephrase)!';
}
echo '&amp;lt;div style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;'.$results.'&amp;lt;/div&amp;gt;';&lt;/pre&gt;
&lt;p&gt;That was all it took to add Akismet spam-filtering to that KISS-y wp-contact-form plugin. I wonder why this isn&amp;#8217;t in the plugin already?&lt;/p&gt;


&lt;p&gt;Possibly related twitterless twaddle:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://blog.futtta.be/2009/03/16/ivitation-to-comment-dofollow/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Invitation to comment: dofollow&quot;&gt;Invitation to comment: dofollow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.futtta.be/2010/05/25/lovin-the-wordpress-plugin-ecosystem/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: Lovin&amp;#8217; the WordPress plugin ecosystem&quot;&gt;Lovin&amp;#8217; the WordPress plugin ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.futtta.be/2009/11/09/5-valuable-cufon-tips/&quot; rel=&quot;bookmark&quot; title=&quot;Permanent Link: 5 valuable Cufón tips&quot;&gt;5 valuable Cufón tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=98Vcfx-Aars:55QZ9J7PzSA:D7DqB2pKExk&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?i=98Vcfx-Aars:55QZ9J7PzSA:D7DqB2pKExk&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=98Vcfx-Aars:55QZ9J7PzSA:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=98Vcfx-Aars:55QZ9J7PzSA:qj6IDK7rITs&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?d=qj6IDK7rITs&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/futtta?a=98Vcfx-Aars:55QZ9J7PzSA:I9og5sOYxJI&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/futtta?d=I9og5sOYxJI&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/futtta/~4/98Vcfx-Aars&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-23T15:25:33+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-18697195.post-6004048042196837295">
	<title>Paul Cobbaut: Impressions on Oracle</title>
	<link>http://cobbaut.blogspot.com/2010/08/impressions-on-oracle.html</link>
	<content:encoded>There are enough blogposts mourning &lt;a href=&quot;http://www.opensolaris.org&quot;&gt;OpenSolaris&lt;/a&gt; (or hoping for &lt;a href=&quot;http://www.illumos.org&quot;&gt;Illumos&lt;/a&gt;). What follows are some real world experiences in dealing with Oracle since it took over the Sun Solaris trainings in Belgium.&lt;br /&gt;&lt;br /&gt;1. Remote labs are free!&lt;br /&gt;Solaris teachers and students can now connect to remote labs with nice hardware for free. This is a great addition to the simple Intel machines in the classroom.&lt;br /&gt;&lt;br /&gt;2. Support is excellent!&lt;br /&gt;In the weeks prior to the first Oracle Solaris training several people from Oracle called and/or emailed me to make sure everything was okay. These are real people that don't mind sharing their real email address and their real phone number. Cool! And they were very friendly and helpful!&lt;br /&gt;&lt;br /&gt;3. Support is excellent!&lt;br /&gt;When sending an email on Sunday to report a problem, there is an almost immediate response from one of these real people. On a Sunday?! Super cool!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/18697195-6004048042196837295?l=cobbaut.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-22T21:33:13+00:00</dc:date>
</item>
<item rdf:about="http://www.fosdem.org/87 at http://www.fosdem.org/2011">
	<title>FOSDEM organizers: FOSDEM 2011: 5+6 February 2011</title>
	<link>http://www.fosdem.org/2011/date</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fosdem&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;The date for the coming FOSDEM edition is set, mark it in your agenda:

&lt;center&gt;&lt;h1&gt;5 and 6 February 2011&lt;/h1&gt;&lt;/center&gt;

&lt;p&gt;
Preparations are starting and a call for devrooms and speaker suggestions will be sent out soon.
&lt;br /&gt;
Check this website or subscribe to the &lt;a href=&quot;http://fosdem.org/rss.xml&quot;&gt;RSS&lt;/a&gt; feed to stay informed !
&lt;p&gt;

&lt;p&gt;
The FOSDEM staff
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-22T19:40:53+00:00</dc:date>
</item>
<item rdf:about="http://joost.damad.be/?p=221">
	<title>Joost Damad: digicorder and recording subsequent programs</title>
	<link>http://joost.damad.be/2010/08/digicorder-gripes/</link>
	<content:encoded>&lt;p&gt;Digital television is getting the norm in Belgium, and typically people rent a &amp;#8220;digicorder&amp;#8221; from the TV provider. This allows you to watch television and also record programs for later consumption.&lt;/p&gt;
&lt;p&gt;In practice my family only records a few programs and watch them later. It&amp;#8217;s very convenient not to be bound to a specific schedule. (On the other hand it would probably be cheaper to just buy the DVD boxes of the series we like instead of having television at all, but that is another discussion &lt;img src=&quot;http://joost.damad.be/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt;  ).&lt;/p&gt;
&lt;p&gt;In general, the digicorder works fine, I have one big gripe with it though: recording of subsequent programs.&lt;/p&gt;
&lt;p&gt;Lets say we&amp;#8217;re recording subsequent programs A and B from channel 0. Let&amp;#8217;s assume there is some advertisement in between programs. This gives as timescale something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale.png&quot;&gt;&lt;img class=&quot;size-full wp-image-222 alignnone&quot; title=&quot;timescale&quot; src=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale.png&quot; alt=&quot;&quot; width=&quot;570&quot; height=&quot;38&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now, there are three ways the digicorder can record the program, not counting the completely faulty ways when timing goes all wrong.&lt;/p&gt;
&lt;p&gt;Both programs want to record a time-slice before and after their program, but this goes wrong in the middle, and only one recording ends up with the middle part.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;em&gt;correct&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The correct recording is with the break point in the middle like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale2.png&quot;&gt;&lt;img class=&quot;size-full wp-image-223 alignnone&quot; title=&quot;timescale2&quot; src=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale2.png&quot; alt=&quot;&quot; width=&quot;570&quot; height=&quot;94&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I presume there are not some kind of markers in between the broad-casted programs on commercial television because it makes their advertisement store even worse.&lt;/p&gt;
&lt;p&gt;Therefor, in practice you typically end up with one if these two:&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;em&gt;B in recording 1&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale3.png&quot;&gt;&lt;img class=&quot;size-full wp-image-224 alignnone&quot; title=&quot;timescale3&quot; src=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale3.png&quot; alt=&quot;&quot; width=&quot;570&quot; height=&quot;94&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is problematic because if you don&amp;#8217;t remember not to erase recording 1 after watching program A, the start of program 2 will be lost.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;em&gt;A in recording 2&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;
&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale4.png&quot;&gt;&lt;img class=&quot;size-full wp-image-225 alignnone&quot; title=&quot;timescale4&quot; src=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale4.png&quot; alt=&quot;&quot; width=&quot;570&quot; height=&quot;94&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is even worse. Lets say you want to watch program B first.&lt;/p&gt;
&lt;p&gt;You first have to open recording 1, fast forward all the way to the start of program B, start watching and after a few minutes switch to recording 2. This will also leave recording 1 marked as &amp;#8220;watched&amp;#8221; even though you didn&amp;#8217;t watch program A yet. More confusion!&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;&lt;em&gt;A simple solution&lt;/em&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;In the end this is a simple technical problem with an even simpler solution: record the overlap in a separate file and make it part of both recordings. Visual:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale5.png&quot;&gt;&lt;img class=&quot;size-full wp-image-226 alignnone&quot; title=&quot;timescale5&quot; src=&quot;http://joost.damad.be/wp-uploads/2010/08/timescale5.png&quot; alt=&quot;&quot; width=&quot;570&quot; height=&quot;95&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you watch recording 1, you get recording 1 + X. If you watch recording 2, you get X + recording 2.&lt;/p&gt;
&lt;p&gt;If you erase recording 1, X stays. Only if both recording 1 and recording 2 are erased, X gets deleted.&lt;/p&gt;
&lt;p&gt;More in general there will be X areas both in front and at the end, etc&amp;#8230;&lt;/p&gt;
&lt;p&gt;Would be nice if the biggest TV provider of Belgium could implement this. If the digicorder was open source I would&amp;#8217;ve done this already months ago&amp;#8230;&lt;br /&gt;
I guess I&amp;#8217;ll have to look into some kind of MythTV like setup one day.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-22T06:19:46+00:00</dc:date>
</item>
<item rdf:about="http://kristof.willen.be/1108 at http://kristof.willen.be">
	<title>Kristof Willen: Running the native Nvidia drivers</title>
	<link>http://kristof.willen.be/node/1108</link>
	<content:encoded>&lt;img src=&quot;http://kristof.willen.be/files/category_pictures/topiclinux.gif&quot; alt=&quot;Linux&quot; title=&quot;Linux&quot; width=&quot;60&quot; height=&quot;70&quot; align=&quot;right&quot; /&gt;&lt;p&gt;Since the upgrade to Karmic on my desktop, graphic performance &lt;a href=&quot;http://kristof.willen.be/node/1062&quot;&gt;has gone down considerably&lt;/a&gt;. I solved this in the past by downgrading Nvidia, but since Lucid, this has become impossible.  It's not that I cannot live without the desktop bling, but suspend-resume is impossible without running the Nvidia drivers.  The problem manifest itself by very high CPU bursts by kernel processes (kondemand, ksoftirqd), which makes the desktop unworkably slow. &lt;/p&gt;
&lt;p&gt;I tried everything, from disabling PAT, KMS modesetting, switching framebuffers, all without success.  I even tried to enable Lenny's Nvidia drivers, but that pulled in a 2.6.26 kernel, which I cannot use, because my filesystems are ext4.  &lt;/p&gt;
&lt;p&gt;I eventually turned in despair to the Nvidia website, looking for older drivers.  The 173 release was still available in the archive download section, which came as a ncurses-based installer.  These Nvidia based drivers are famous for messing up a Linux system, so I was rather reluctant to use those.  I still decided to give them a go, which rather went surprisingly really well.  &lt;/p&gt;
&lt;p&gt;Finally a performant system again !&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-21T07:27:03+00:00</dc:date>
</item>
<item rdf:about="http://blog.cone.be/?p=4352">
	<title>Gert Schepens: Creating Dutch dictionary for android</title>
	<link>http://blog.cone.be/2010/08/20/creating-dutch-dictionary-for-android/</link>
	<content:encoded>&lt;p&gt;As a follow up to yesterdays post, a howto for creating the LatinIME dictionary (in this case raw-nl/main.dict) files!&lt;/p&gt;
&lt;p&gt;All info necessary to do so is readily available on &lt;a href=&quot;http://code.google.com/p/softkeyboard/wiki/BinaryDictionaries&quot;&gt;http://code.google.com/p/softkeyboard/wiki/BinaryDictionaries&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a base, you need a wad of decent text, the more the better! The quality of the dictionary will improve as more data is fed into the file. The example on SoftKeyboard uses the Wikipedia for bulk text!&lt;/p&gt;
&lt;p&gt;The dutch dump is available on &lt;a href=&quot;http://download.wikimedia.org/nlwiki/20100813/&quot;&gt;http://download.wikimedia.org/nlwiki/20100813/&lt;/a&gt; Considering the different dumps, I chose the one containing the Articles, templates, image descriptions, and primary meta-pages, but not the revision or user data..&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;2010-08-13 16:17:13 done Articles, templates, image descriptions, and primary meta-pages.&lt;br /&gt;
2010-08-13 16:17:13: nlwiki 1003105 pages (382.643/sec), 1003105 revs (382.643/sec), 92.5% prefetched, ETA 2010-08-13 16:59:24 [max 1971556]&lt;br /&gt;
This contains current versions of article content, and is the archive most mirror sites will probably want.&lt;br /&gt;
pages-articles.xml.bz2 549.0 MB&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The SoftPedia explenation offers the following bash script to analyse the wad of text into a weighed word list.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
My blog screws up code, check &lt;a href=&quot;http://www.gertschepens.be/android-dictionary-files&quot;&gt;gertschepens.be&lt;/a&gt; or the original page for the commands&lt;br /&gt;
Code from &lt;a href=&quot;http://code.google.com/p/softkeyboard/wiki/BinaryDictionaries&quot;&gt;Softkeyboard&lt;/a&gt;, contributed by Jacob Nordfalk&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This creates a weighed and sorted list of the words in the file. The more data, the more reliable this set will be. (The database dump of a dutch forum would be a nice addition to get more of the common language in there, as a counterweight to the dictionary wording.)&lt;br /&gt;
The weighed values are between 194 and 8671269 (this is the # of times a word is found in the text) in case of this specific export. The &lt;a href=&quot;http://android.git.kernel.org/?p=platform/packages/inputmethods/LatinIME.git;a=blob;f=dictionaries/sample.xml;h=85233b63a8b8a1043fceae592b567b93ee275504;hb=HEAD&quot;&gt;sample.xml&lt;/a&gt; however speaks of a frequency value from 0 to 255.&lt;/p&gt;
&lt;p&gt;So I created a perl script to fix the numbering; the script needs a sorted list, frequent words first, infrequent ones later. It cycles trough and replaces the initial numbering (in the correctly formatted xml) by the weighed alternative.&lt;/p&gt;
&lt;p&gt;The source is not available here for formatting reasons; click &lt;a href=&quot;http://www.gertschepens.be/android-dictionary-files&quot;&gt;the Perl script&lt;/a&gt; link!&lt;/p&gt;
&lt;p&gt;Once we have a decent .xml, all we need to do is convert it to the necessary .dict format, which is described in the Softpedia text; and the necessary software is in their repositories.&lt;/p&gt;
&lt;p&gt;After this, we have a valid main.dict file, ready to be compiled into a LatinIME pack. Compiling all languages into the pack will not be possible due to very limited space on the system partition (My magic has about 1 MB free space on its /system partition), so a solution will have to be found to store the dictionary files out of the LatinIME keyboard apk. (which is preferable at any rate!) My dutch dictionary was submitted to CM but will probably not make it in until the external/internal dictionary problem is solved! (in the mean while, Im using a home-rolled version! The default CM keyboard with added raw-nl, currently available &lt;a href=&quot;http://files.cone.be/2010/LatinIME.apk&quot;&gt;here&lt;/a&gt;)&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-20T19:52:24+00:00</dc:date>
</item>
<item rdf:about="http://www.lefred.be/130 at http://www.lefred.be">
	<title>Frederic Descamps: Windows 7 and Samba</title>
	<link>http://www.lefred.be/?q=node/130</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fred&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;Today I tried to put in production an update of Samba 3 (3.5.4) to allow Windope 7 clients to join the domain.&lt;/p&gt;
&lt;p&gt;After having performed what's on the samba wiki page about this topic [&lt;a href=&quot;http://wiki.samba.org/index.php/Windows7&quot;&gt;here&lt;/a&gt;], I could join the machine to the domain but I was not able to login  !? :(&lt;/p&gt;
&lt;p&gt;In the log :&lt;/p&gt;
&lt;pre&gt;
[2010/08/20 16:55:20.682477,  0] rpc_server/srv_netlog_nt.c:714(_netr_ServerAuthenticate3)
  _netr_ServerAuthenticate3: netlogon_creds_server_check failed. Rejecting auth request from client RO-BACKUP machine account RO-BACKUP$
[2010/08/20 16:55:30.993850,  0] lib/util_sock.c:474(read_fd_with_timeout)
[2010/08/20 16:55:30.993958,  0] lib/util_sock.c:1432(get_peer_addr_internal)
  getpeername failed. Error was Transport endpoint is not connected
  read_fd_with_timeout: client 0.0.0.0 read error = Connection reset by peer.
&lt;/pre&gt;&lt;p&gt;
The problem was easy to solve but not easy to find : the two machines had not the same time (30 secs delay !)&lt;/p&gt;
&lt;p&gt;Fixing the time sync fixed the problem (and I'm not using kerberos and AD)&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-20T19:39:32+00:00</dc:date>
</item>
<item rdf:about="http://dag.wieers.com/224 at http://dag.wieers.com/blog">
	<title>Dag Wieers: Is 10 years of RHEL support still sufficient ?</title>
	<link>http://dag.wieers.com/blog/is-10-years-of-rhel-support-still-sufficient</link>
	<content:encoded>&lt;p&gt;Almost exactly a year ago, I posted a blog article titled &lt;strong&gt;&lt;a href=&quot;http://dag.wieers.com/blog/is-7-years-of-rhel-support-still-sufficient&quot;&gt;Is 7 years of RHEL support still sufficient ?&lt;/a&gt;&lt;/strong&gt;. In that article I make the case that with RHEL major releases moving from 1.5 years to 3 years &lt;em&gt;and&lt;/em&gt; virtualization reducing the importance of hardware life cycles, RHEL support should be extended beyond 7 years.&lt;/p&gt;
&lt;p&gt;Yesterday Red Hat &lt;a href=&quot;http://www.redhat.com/rhel/server/extended_lifecycle_support/&quot;&gt;announced&lt;/a&gt; that it did just that. From today Red Hat offers RHEL Extended Life Cycle Support (ELS) on top of normal subscriptions for specific versions and variants. Meaning that for RHEL3 only i686 AS/ES and for RHEL4 i686 and x86_64 AS/ES and ia64 AS are taken into consideration and are thus more expensive than regular support. No pricing information is available yet.&lt;/p&gt;
&lt;p&gt;As a result of this the timeline of RHEL releases looks like this:&lt;br /&gt;
&lt;a href=&quot;http://dag.wieers.com/blog/sites/dag.wieers.com.blog/files/rhel-business-continuity.png&quot;&gt;&lt;img src=&quot;http://dag.wieers.com/blog/sites/dag.wieers.com.blog/files/rhel-business-continuity-small.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;em&gt;Click the picture to see it in all its glory&lt;/em&gt;&lt;/p&gt;
&lt;!--break--&gt;&lt;!--break--&gt;&lt;p&gt;Honestly, the announcement comes too late for a lot of companies that already have planned and executed (sometimes painful) RHEL3 migrations. Extended support could in some of these cases be a more cost-effective solution. On the other hand, with this late announcement Red Hat might have anticipated lowering the number of applicants at the start of the offering. And a sufficient high price tag will influence decision makers even more...&lt;/p&gt;
&lt;p&gt;An offering like this also risks that application vendors might hold on to (too) old RHEL releases rather than spending time testing and fixing their software (often agents) on the latest RHEL release. Which is one of the most important reasons why companies delay implementing newer RHEL releases today. Which makes Open Source alternatives more attractive (as they do not suffer from that). Companies that suffer from this delayed availability of proprietary software should complain loudly to vendors and threaten to move (or simply move) to alternatives.&lt;/p&gt;
&lt;p&gt;All in all, this new support option clearly strengthens Red Hat's position in the wider Enterprise OS market and makes their virtualization product (RHEV) offering even more attractive compared to the competition.&lt;/p&gt;
&lt;p&gt;And to answer the question, yes, 10 years of support should suffice for some time ;-)&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-20T07:31:17+00:00</dc:date>
</item>
<item rdf:about="http://blog.futtta.be/?p=3436">
	<title>Frank Goossens: Switching back from Froyo to HTC’s Eclair</title>
	<link>http://feedproxy.google.com/~r/futtta/~3/AoORp8VMjKU/</link>
	<content:encoded>&lt;p&gt;Although I was quite pleased with my Hero after &lt;a title=&quot;blog.futtta.be about villainrom 10.3 and 12 on my hero&quot; href=&quot;http://blog.futtta.be/tag/eclair/&quot;&gt;installing HTC&amp;#8217;s version of Android 2.1&lt;/a&gt; (in the guise of &lt;a title=&quot;villainrom12 page on the VR wiki&quot; href=&quot;http://www.villainrom.co.uk/wiki/index.php?title=VillainROM_12_Series&quot;&gt;VillainRom 12&lt;/a&gt;), I couldn&amp;#8217;t refrain myself from wanting to install Froyo, the latest and greatest version of Android. The guys over at VillainRom provided a great Froyo rom (&lt;a title=&quot;froydvillain wiki page, empty for now due to technical problems&quot; href=&quot;http://www.villainrom.co.uk/wiki/index.php?title=FroydVillain&quot;&gt;Froydvillain 1.2&lt;/a&gt;) based on the official Android sources and the work of the &lt;a title=&quot;cyanogenmod 6 status mid august&quot; href=&quot;http://www.cyanogenmod.com/home/cyanogenmod-6-0-status-update&quot;&gt;CyanogenMod team with CM6&lt;/a&gt; and added &lt;a title=&quot;launcherpro.com&quot; href=&quot;http://www.launcherpro.com/&quot;&gt;LauncherPro&lt;/a&gt;, a beautiful alternative to HTC&amp;#8217;s Sense, to the mix:&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;lyte&quot; id=&quot;Du25UEycF8M&quot;&gt;&lt;a href=&quot;http://youtu.be/Du25UEycF8M&quot;&gt;&lt;img src=&quot;http://img.youtube.com/vi/Du25UEycF8M/default.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-20T06:08:22+00:00</dc:date>
</item>
<item rdf:about="http://blog.cone.be/?p=4337">
	<title>Gert Schepens: Where are the Keyboard Dictionaries in #Android?</title>
	<link>http://blog.cone.be/2010/08/19/android-keyboard-dictionaries/</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://developer.android.com/sdk/android-2.2-highlights.html&quot;&gt;&lt;img class=&quot;alignright&quot; title=&quot;Multiple Languages&quot; src=&quot;http://developer.android.com/sdk/images/2.2/22keyboard.png&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;306&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
I love the &lt;a href=&quot;http://developer.android.com/sdk/android-2.2-highlights.html&quot;&gt;Froyo multiple languages keyboard feature&lt;/a&gt;! Its AWESOME, sliding a finger over the keyboard to change language .. Awesome!&lt;br /&gt;
If your specific dictionary is in there. Which it probably isnt, since there are only 6 dictionaries in the default keyboard. And Dutch isnt in there. Dutch is in several other keyboards, like the HTC one, but sadly there is no shared space where these dictionaries live, in the contrary, they all reside in the .apk that contains the keyboard.&lt;/p&gt;
&lt;p&gt;By opening &lt;em&gt;/system/app/LatinIME.apk&lt;/em&gt; (as found in CyanogenMod), we find out that the dictionaries are in the .apk under the &lt;em&gt;res&lt;/em&gt; directory. While we&amp;#8217;re there, someone mentioned the availability of more dicts might be a size issue, but I dont think so since they&amp;#8217;re all quite moderate in size:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;raw-de: 739K&lt;/li&gt;
&lt;li&gt;raw-en: 822K&lt;/li&gt;
&lt;li&gt;raw-es: 768K&lt;/li&gt;
&lt;li&gt;raw-fr: 775K&lt;/li&gt;
&lt;li&gt;raw-it: 688K&lt;/li&gt;
&lt;li&gt;raw-sv: 911K&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, the custom words are saved in a database at &lt;em&gt;/data/data/com.android.inputmethod.latin/databases/auto_dict.db&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Now, looking to add a dutch dictionary, I went looking in the &lt;a href=&quot;http://source.android.com/&quot;&gt;AOSP&lt;/a&gt;. The LatinIME source is in &lt;em&gt;./packages/inputmethods/LatinIME&lt;/em&gt; and contains a &lt;em&gt;./packages/inputmethods/LatinIME/dictionaries&lt;/em&gt; directory. I expected to find the dictionary files there, but it only contains a &lt;a href=&quot;http://android.git.kernel.org/?p=platform/packages/inputmethods/LatinIME.git;a=blob;f=dictionaries/sample.xml;h=85233b63a8b8a1043fceae592b567b93ee275504;hb=HEAD&quot;&gt;sample.xml&lt;/a&gt; file. So no .xml dictionaries. The aforementioned res directory is at &lt;em&gt;./packages/inputmethods/LatinIME/java/res/&lt;/em&gt; but contains none of the raw-lang directories.&lt;br /&gt;
The dictionaries do not appear to be part of the AOSP. I guess Google is not able to open source these?&lt;/p&gt;
&lt;p&gt;While searching (the interwebs and IRC) I also discovered that a lot of other people (&lt;a href=&quot;http://code.google.com/p/cyanogenmod/issues/detail?id=1827&quot;&gt;Issue 1827: add dictionaries for other locales (or make it easier for users to do so)&lt;/a&gt; &amp;#8211; Im d.gen&amp;#8230; in that thread) were looking to add their language to the code tree and that some people had solved the problem by just rolling a custom LatinIME (&lt;a href=&quot;http://code.google.com/p/softkeyboard/&quot;&gt;Softkeyboard&lt;/a&gt;). I dont like that option, however since I&amp;#8217;d rather strengthen the default tree instead of splitting from it and updating the code after each AOSP update.&lt;/p&gt;
&lt;p&gt;CyanogenMod however does have the dictionaries and so I checked out the CyanogenMod tree. it took me a while to find out where they were as I was expecting them to be in the paths I mentioned before, but no such luck. Apparently (and this makes sense,) the CM specific files are in the &lt;em&gt;./vendor/cyanogen&lt;/em&gt; directory, the binary dictionaries in &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
./vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/java/res/raw-sv/main.dict&lt;br /&gt;
./vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/java/res/raw-de/main.dict&lt;br /&gt;
./vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/java/res/raw-fr/main.dict&lt;br /&gt;
./vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/java/res/raw-en/main.dict&lt;br /&gt;
./vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/java/res/raw-it/main.dict&lt;br /&gt;
./vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/java/res/raw-es/main.dict
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So. &lt;strong&gt;How to add new dictionaries to Android?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Either in AOSP under &lt;em&gt;packages/inputmethods/LatinIME/dictionaries/&lt;/em&gt; as .xml files (preferable),&lt;/li&gt;
&lt;li&gt;under &lt;em&gt;packages/inputmethods/LatinIME/java/res/&lt;/em&gt; as binary files&lt;/li&gt;
&lt;li&gt;or if that turns out to be impossible for some reason, adding them to CM in the respective &lt;em&gt;vendor/cyanogen/overlay/common/packages/inputmethods/LatinIME/&lt;/em&gt; directories (so that at least CM has the extended languages).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ideal situation however would be to split the dictionaries from the keyboards and put them somewhere where any application might use them; making it possible to install new dictionary packs (eg DutchDictionary.apk) from the market, thus solving the whole dictionary problem. Maybe by adding them in &lt;em&gt;/data/data/com.android.inputmethod.latin/databases/&lt;/em&gt; although there is probably a performance reason for them not being there in the first place?&lt;br /&gt;
Anyhow, in the mean while, we do need the dictionaries! So lets not wait for this and add the data to AOSP now &lt;img src=&quot;http://blog.cone.be/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;p&gt;Im wondering though why the Softkeyboard people dont add their dictionaries to AOSP.. I do see the benefit of keeping it available in the market as a separate app, ie making it available to every android user instead of those &amp;#8220;few&amp;#8221; tinkerers running the latest AOSP (or mods based on it.)&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-19T19:02:35+00:00</dc:date>
</item>
<item rdf:about="http://www.arrfab.net/blog/?p=230">
	<title>Fabian Arrotin: Automatic network switcher on Nokia E71</title>
	<link>http://www.arrfab.net/blog/?p=230</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fabian_arrotin&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;I&amp;#8217;ve always loved Nokia products and always have been satisfied by my last two E-series (&lt;a href=&quot;http://www.nokia.co.uk/support/product-support/nokia-e51&quot; target=&quot;_blank&quot;&gt;E51 &lt;/a&gt;and &lt;a href=&quot;http://www.nokia.co.uk/support/product-support/nokia-e71&quot; target=&quot;_blank&quot;&gt;E71&lt;/a&gt;). But there are those little things that can bring you a better life when using it. For example, you can decide which data access point (Wireless or 3G) you want to use when launching an application. That&amp;#8217;s fine and of course I prefer using my WLAN at home than the 3G connection. But what if you schedule something to happen automagically on your phone, like calendar and contacts sync (I sync those with the integrated Mail for Exchange application, even if, obviously, i don&amp;#8217;t have an Exchange server, but rather a &lt;a href=&quot;http://www.zarafa.com/content/community&quot; target=&quot;_blank&quot;&gt;Zarafa OpenSource server&lt;/a&gt; with &lt;a href=&quot;http://z-push.sourceforge.net/soswp/&quot; target=&quot;_blank&quot;&gt;z-push&lt;/a&gt; installed). You have to define a &amp;#8217;sync plan&amp;#8217; and choose which connection it will use in the background. Wait, I&amp;#8217;d like it to select my Wireless AP when at home (or with some pre-defined wlans from friends, etc ..) if available and then switch to 3G if no wlans available. That&amp;#8217;s where &lt;a href=&quot;http://www.birdstep.com/Products/Birdstep/SmartConnect/&quot; target=&quot;_blank&quot;&gt;SmartConnect&lt;/a&gt; helps you a lot : you can define a &amp;#8216;fake&amp;#8217; access point which is in fact a group that contains your connections (wlans/3G) with priorities and it will use the first available one. Use that &amp;#8216;fake&amp;#8217; access point on your mobile, whatever the application (even tested with &lt;a href=&quot;http://s2putty.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;Putty for Symbian&lt;/a&gt;). Great and useful.&lt;/p&gt;
&lt;p&gt;You can download it from the official website, or directly install it from your mobile through the OVI app installer.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-19T11:54:09+00:00</dc:date>
</item>
<item rdf:about="tag:blogger.com,1999:blog-4309414151374220630.post-4499224127093841605">
	<title>Tom Baeyens: Activiti And The BPM Market In A Nutshell</title>
	<link>http://processdevelopments.blogspot.com/2010/08/activiti-and-bpm-market-in-nutshell.html</link>
	<content:encoded>&lt;div&gt;Too much happened to fit into 140 char twitter message so I decided to write the summary here, but first this side note: Elke delivered Joram 2.0 early (probably it will not be often, but hey...) He's called Lars. Congrats to the whole family!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://processdevelopments.blogspot.com/2010/08/activiti-50alpha4-released.html&quot;&gt;Last release of August 1st&lt;/a&gt; already includes a&lt;a href=&quot;http://activiti.org/userguide/index.html#bpmn20&quot;&gt; decent coverage of BPMN activity types&lt;/a&gt;.  Summer time is a great time to get some coding done. Last couple of weeks were really hard core coding with fine tuning of the core engine.  We extracted the Process Virtual Machine as a separate module, added a super efficient event mechanism and optimized the DB persistence to the max.  First of all, the runtime data is kept to a minimal,  with minimal updates during process execution.  On top of that, if a parallel gateway forks again, the joined executions are now actually recycled.  It's good for performance and the environment!  It's amazing that I still find significant optimizations after I've been coding core BPM engines since &lt;a href=&quot;http://web.archive.org/web/20030212074006/http://jbpm.org/&quot;&gt;2003&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tijs Rademakers (from &lt;i&gt;Open Source ESB's in Action&lt;/i&gt;) got started on a book called &lt;i&gt;BPMN 2.0 with Activiti in Action&lt;/i&gt;.  I already look forward to reading it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Josh Long created an Activiti integration with &lt;a href=&quot;http://www.springsource.org/spring-integration&quot;&gt;Spring Integration&lt;/a&gt;.  He's going to show it at &lt;a href=&quot;http://www.youtube.com/watch?v=1JZnj4eNHXE&quot;&gt;JavaZone&lt;/a&gt;.  Don't miss it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Furthermore there is an Activiti BPMN 2.0 eclipse designer and an iPhone app in the pipeline.  Really cool stuff.  More about that later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But what does that mean for the BPM market in general?  Wel...  this morning I was cycling to the office and I actually came across the perfect boat metaphors to illustrate what's happening in the BPM market.   First I saw this:&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_rusOmkqFHUo/TGzhtNT0zDI/AAAAAAAAALk/l8A_CNizwRo/s1600/IMAG0242.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_rusOmkqFHUo/TGzhtNT0zDI/AAAAAAAAALk/l8A_CNizwRo/s400/IMAG0242.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5507024611150449714&quot; /&gt;&lt;/a&gt;&lt;br /&gt;That is a really good metaphore for the typical traditional BPM player: Inert, not in the shape that it once was but it's floating.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then I passed along this one:&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_rusOmkqFHUo/TGzjGQE_O2I/AAAAAAAAAL0/00FPRWXA6rk/s1600/IMAG0248.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_rusOmkqFHUo/TGzjGQE_O2I/AAAAAAAAAL0/00FPRWXA6rk/s400/IMAG0248.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5507026140901882722&quot; /&gt;&lt;/a&gt;&lt;br /&gt;That's Activiti: New, fast, agile and fun to work with!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And then I saw what's going to happen with the traditional BPM players after Activiti the GA release in November:&lt;/div&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_rusOmkqFHUo/TGzkGx1T08I/AAAAAAAAAL8/er8r3c8bkdQ/s1600/IMAG0240.jpg&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_rusOmkqFHUo/TGzkGx1T08I/AAAAAAAAAL8/er8r3c8bkdQ/s400/IMAG0240.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5507027249474556866&quot; /&gt;&lt;/a&gt;&lt;div&gt;Oh no!  &lt;/div&gt;&lt;div&gt;;-)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4309414151374220630-4499224127093841605?l=processdevelopments.blogspot.com&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-19T10:14:40+00:00</dc:date>
</item>
<item rdf:about="http://acko.net/243 at http://acko.net">
	<title>Steven Wittens: Customer Support - A Three Act Story</title>
	<link>http://acko.net/blog/customer-support-a-three-act-story</link>
	<content:encoded>&lt;p&gt;I recently switched cell phone providers.&lt;/p&gt;
dt { text-align: right; float: left; display: inline; margin-left: -60px; width: 60px; }dl{padding-left: 60px; margin-bottom: 4em;}&lt;dl&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;&quot;Hi, I'd like to know when you're launching in Vancouver?&quot;&lt;/dd&gt;
&lt;dt&gt;Them&lt;/dt&gt;
&lt;dd&gt;Silence.&lt;br /&gt;&lt;em&gt;8 days pass.&lt;/em&gt;&lt;/dd&gt;
&lt;dt&gt;Them&lt;/dt&gt;
&lt;dd&gt;&quot;Thanks for the email it is greatly appreciated. We can't say when. Keep refreshing our site!&quot;&lt;/dd&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;... &quot;You and your pre-customer care suck.&quot;&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;&quot;Hi, my SIM card still has my temporary number. How do I fix this?&quot;&lt;/dd&gt;
&lt;dt&gt;Them&lt;/dt&gt;
&lt;dd&gt;&quot;We don't know.  I attempted to browse the internet for an answer but was unable to find one.&quot;&lt;/dd&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;... &lt;em&gt;*googles*&lt;/em&gt; ... &quot;Please do one of these things: ...&quot;&lt;/dd&gt;
&lt;dt&gt;Them&lt;/dt&gt;
&lt;dd&gt;&quot;Thanks for contacting us, it’s appreciated. Try resetting your phone.&quot;&lt;/dd&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;&quot;It's not the phone. I already tried that. Just tell me X.&quot;&lt;/dd&gt;
&lt;dt&gt;Them&lt;/dt&gt;
&lt;dd&gt;&quot;Ok.&quot;&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;&quot;Hi. I can't listen to internet radio or use IRC because you block all non-trivial ports. Look at this netstat report. I want real internet, how do I get it?&quot;&lt;/dd&gt;
&lt;dt&gt;Them&lt;/dt&gt;
&lt;dd&gt;&quot;Thanks for your email to WIND - the power of conversation! Please tell me your phone make and model and which applications you are having problems with. Don't hesitate to join us for a conversation over instant messaging at WIND!&quot;&lt;/dd&gt;
&lt;dt&gt;Me&lt;/dt&gt;
&lt;dd&gt;&lt;em&gt;*facepalm*&lt;/em&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;I'm usually a pretty calm person, but customer support just drives me up the walls. Why do we let these big corporations talk to us in these utterly bizarre newspeak voices in the name of &lt;em&gt;Customer Service&lt;/em&gt;? I'd much rather deal with a computer... then at least I know it can't help being dumb. :/&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-19T06:57:48+00:00</dc:date>
</item>
<item rdf:about="http://www.norio.be/161 at http://www.norio.be">
	<title>Litrik De Roy: Getting Unix time (epoch) in an Ant build file</title>
	<link>http://www.norio.be/blog/2010/08/getting-unix-time-epoch-ant-build-file</link>
	<content:encoded>&lt;p&gt;&lt;a href=&quot;http://ant.apache.org/&quot;&gt;Ant&lt;/a&gt; includes a &lt;a href=&quot;http://ant.apache.org/manual/Tasks/tstamp.html&quot;&gt;Tstamp task&lt;/a&gt; that allows a property to be set to the current date and time in a given format. Unfortunately there is no way to get that value as a Unix time (epoch).&lt;!--break--&gt;&lt;/p&gt;
&lt;p&gt;Here's how you can do this with the help of some Javascript:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;target name=&quot;print-epoch&quot;&gt;
  &amp;lt;script language=&quot;javascript&quot;&gt;
  &amp;lt;![CDATA[
    property = project.setProperty(&quot;now&quot;,Math.floor((new Date()).getTime()/1000));
  ]]&gt;
  &amp;lt;/script&gt;
  &amp;lt;echo message=&quot;${now}&quot; /&gt;
&amp;lt;/target&gt;
&lt;/pre&gt;&lt;p&gt;
Check the documentation of the &lt;a href=&quot;http://ant.apache.org/manual/OptionalTasks/script.html&quot;&gt;script&lt;/a&gt; task for more information about scripts and their dependencies in Ant.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/norio/~4/4ohZo7cZeqM&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</content:encoded>
	<dc:date>2010-08-18T14:34:34+00:00</dc:date>
</item>
<item rdf:about="http://www.toshaan.be/?p=459">
	<title>Toshaan Bharvani: Oracle retires OpenSolaris</title>
	<link>http://www.toshaan.be/?p=459</link>
	<content:encoded>&lt;p&gt;Oracle bought Sun Microsystems, a while ago, both US and EU regulator approved this deal. Oracle was quick to change all logo&amp;#8217;s on websites and programs, however their real strategy isn&amp;#8217;t being implemented that quickly. The MySQL community was in doubt about the future of the DBMS.&lt;br /&gt;
The Solaris community was quite certain it would be killed an so it has, on 15th August 2010 a memo was leaked that stated the end of OpenSolaris.&lt;br /&gt;
We can presume that OpenSolaris is being dropped in favor of Oracle Enterprise Linux aka Oracle Unbreakable Linux, which is an Oracle rebuild of RHEL. My interest in OpenSolaris was to test the ZFS filesystem, but as Oracle will relocate the OpenSolaris people, I suspect that ZFS has also died, then again we have BTRFS in Linux to look out to. There is an effort from former Sun employees to keep Solaris alive, called the Illumos project, we will see how this works out to be. By the way Oracle already killed the Sun build farm for PostgreSQL, the open source database comparable to OracleDB. Now we just need to see if MySQL will follow the same faith. Again, there is an alternative MariaDB, a drop in replacement of MySQL. Some open source projects have already been looking at MariaDB as an extra database to support, none use it as the default, also no major distribution is including MariaDB in it&amp;#8217;s repositories, as far as I currently know. Then again as PostgreSQL is adding more clustering and replication features, it might be good to look at PosgreSQL. For now my projects include both MySQL and PostgreSQL, depending on the requirements and the platform being used.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-17T22:35:14+00:00</dc:date>
</item>
<item rdf:about="http://blog.cone.be/?p=4334">
	<title>Gert Schepens: The Wonderful Telenet detailed usage view.</title>
	<link>http://blog.cone.be/2010/08/17/the-wonderful-telenet-detailed-usage-view/</link>
	<content:encoded>&lt;p&gt;I dont get it. Telenet has this Wonderful detail view. Im not on the unlimited plan and I can see my downloading habits in this great graph, How much (yeah, thats 83G this month), what type of volume, .. Its all there.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.cone.be/wp-content/uploads/2010/08/telemeter_detail.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-4333&quot; title=&quot;telemeter_detail&quot; src=&quot;http://blog.cone.be/wp-content/uploads/2010/08/telemeter_detail.png&quot; alt=&quot;&quot; width=&quot;488&quot; height=&quot;628&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then Why the Fuck do I have friends, paying more than I do, NOT getting that info?&lt;/p&gt;
&lt;p&gt;The answer seems very simple.. because they dont want us to know exactly what the &amp;#8220;Fair Use&amp;#8221; numbers are. Keeping a foot in the door to stop anyone under the flag of data usage reasons (Your arrow points red, You only get 10Gb for the rest of the month,) whenever they like. Or can anyone point me to an official reason?&lt;/p&gt;
&lt;p&gt;And oh yeah, you re paying more to have them treat you like that.&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-17T21:15:53+00:00</dc:date>
</item>
<item rdf:about="http://blog.cone.be/?p=4329">
	<title>Gert Schepens: The internet is a creative and often cruel place!</title>
	<link>http://blog.cone.be/2010/08/17/the-internet-is-a-creative-and-often-cruel-place/</link>
	<content:encoded>&lt;p&gt;And documenting the most popular and often most cruel pieces of creativity is &lt;a href=&quot;http://knowyourmeme.com/&quot;&gt;http://knowyourmeme.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And there are some AMAZING things on here. Do read the dedicated pages however, the base video might be worth watching, but the epic part is what happens with it afterwards. Peoples reactions, follow up videos, remixes or parody..&lt;/p&gt;
&lt;p&gt;From the very funny&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://knowyourmeme.com/memes/lying-down-game&quot;&gt;Lying Down Game&lt;/a&gt; is a mass-participatory meme that involves having one’s photograph taken whilst lying rigidly face down in public space and then sharing the image via internet. Since becoming popular through &lt;a href=&quot;http://www.facebook.com/group.php?gid=5989617014#/group.php?v=photos&amp;gid=5989617014&quot;&gt;Facebook&lt;/a&gt; around June 2009, the viral game has spawned thousands of photos of people lying flat in public landscapes across the world. The official Facebook Group hosts over 19,000 pictures.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;to the Extremely Cruel (but, forgive me, also very funny)&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Jessi &amp;#8220;POP A GLOCK AND MAKE A BRAIN SLUSHY&amp;#8221; Slaughter&lt;br /&gt;
&lt;br /&gt;
What happened next?&lt;br /&gt;
Check knowyourmeme.com: &lt;a href=&quot;http://knowyourmeme.com/memes/jessi-slaughter&quot;&gt;Jessi Slaughter&lt;/a&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Its brutal. Its what happens when a 11yo goes wild and unsupervised on YouTube. You done goofed!&lt;/p&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Antoine Dodson&lt;br /&gt;
&lt;br /&gt;
What happened next?&lt;br /&gt;
Check knowyourmeme.com: &lt;a href=&quot;http://knowyourmeme.com/memes/antoine-dodson-bed-intruder&quot;&gt;Antoine Dodson&lt;/a&gt;
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;All n all the guy is some sort of a hero. He saved his sister and Im very glad he s taking the whole thing very well. Also the rap Rules &lt;img src=&quot;http://blog.cone.be/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt;  Kudos to Kidstatic and the Gregory Brothers! Hide ya kids, hide ya wife and hide ya husband too! Hillarious!!!&lt;/p&gt;
&lt;p&gt;And our own &lt;a href=&quot;http://knowyourmeme.com/memes/kimberley-vlaeminck-56-stars&quot;&gt;Kimberley Vlaeminck&lt;/a&gt; is on there too!&lt;/p&gt;
&lt;p&gt;Gotta love &lt;a href=&quot;http://www.youtube.com/&quot;&gt;Youtube&lt;/a&gt;. Gotta love &lt;a href=&quot;http://www.4chan.org/&quot;&gt;4chan&lt;/a&gt; &lt;img src=&quot;http://blog.cone.be/wp-includes/images/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;wp-smiley&quot; /&gt;  &lt;/p&gt;
&lt;p&gt;In the end, &amp;#8220;know your meme&amp;#8221; is a cautionary tale to people around the world. And I guess, an extra reminder to parents too.. Watch the fuck out with the internets, coz once its on there, its on there! And if its a big cockup; EVERYONE ll know about it, everyone will have an opinion about it. And you can be sure there ll be some crazy ass derivative stuffs made on top of it!&lt;/p&gt;
&lt;p&gt;Its great to see the worlds population create with whatever mad technologies are thrown out there! Its like a million monkeys with a typewriter and one of them accidentally writing Shakespeare. But with the internet bringing it to our homes and the rest of the monkeys flocking towards the awesome, weeding out the crap!&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-17T19:27:37+00:00</dc:date>
</item>
<item rdf:about="http://www.fosdem.org/9 at http://www.fosdem.org/2011">
	<title>FOSDEM organizers: Archives</title>
	<link>http://www.fosdem.org/2011/archives</link>
	<content:encoded>&lt;img src=&quot;http://planet.grep.be/heads/fosdem&quot; alt=&quot;&quot; align=&quot;right&quot; style=&quot;float: right;&quot;&gt;&lt;p&gt;We just archived the FOSDEM 2010 edition website. If you still need to find the pages from previous editions check out our archive site:
&lt;a href=&quot;http://archive.fosdem.org&quot;&gt;http://archive.fosdem.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.fosdem.org/2011/archives&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</content:encoded>
	<dc:date>2010-08-17T11:23:27+00:00</dc:date>
</item>
<item rdf:about="http://buytaert.net/1786 at http://buytaert.net">
	<title>Dries Buytaert: McDonald's using Drupal</title>
	<link>http://buytaert.net/mcdonalds-using-drupal</link>
	<content:encoded>The website of &lt;a href=&quot;http://mcdonalds.com.au&quot;&gt;McDonald's Australia&lt;/a&gt; is using &lt;a href=&quot;http://drupal.org&quot;&gt;Drupal&lt;/a&gt;. &lt;em&gt;I'm lovin' it!&lt;/em&gt;

&lt;div class=&quot;figure&quot;&gt;
&lt;img src=&quot;http://buytaert.net/sites/buytaert.net/files/cache/drupal-mcdonalds-australia-500x500.jpg&quot; alt=&quot;McDonald's Australia&quot; /&gt;

&lt;/div&gt;</content:encoded>
	<dc:date>2010-08-16T20:50:40+00:00</dc:date>
</item>

</rdf:RDF>
