<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Keoko.net</title>
 <link href="http://blog.keoko.net/atom.xml" rel="self"/>
 <link href="http://blog.keoko.net/"/>
 <updated>2010-09-01T11:55:12-07:00</updated>
 <id>http://blog.keoko.net/</id>
 <author>
   <name>Natxo Cabré</name>
   <email>natxo@keoko.net</email>
 </author>

 
 <entry>
   <title>mobile plugin for wordpress</title>
   <link href="http://blog.keoko.net/2010/01/16/mobile-plugin-for-wordpress.html"/>
   <updated>2010-01-16T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2010/01/16/mobile-plugin-for-wordpress</id>
   <content type="html">&lt;p&gt;Today I installed &lt;a href=&quot;http://www.bravenewcode.com/wptouch/&quot;&gt;WPtouch&lt;/a&gt; plugin in my wordpress-based blog. It took no more than 5 minutes and voila! Your site will load perfectly in any mobile device! Awesome!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Experiences with ejabberd and flash (III)</title>
   <link href="http://blog.keoko.net/2009/02/08/experiences-with-ejabberd-and-flash-iii.html"/>
   <updated>2009-02-08T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2009/02/08/experiences-with-ejabberd-and-flash-iii</id>
   <content type="html">&lt;p&gt;Round III, now with BOSH.&lt;/p&gt;


&lt;p&gt;After &lt;a href=&quot;http://www.keoko.net/2009/02/experiences-with-flash-and-ejabberd/&quot;&gt;attempt 1&lt;/a&gt; and &lt;a href=&quot;http://www.keoko.net/2009/02/experiences-with-flash-and-ejabberd-ii/&quot;&gt;attempt 2&lt;/a&gt; trying to connect XIFF to ejabberd without applying any patch to ejabberd I finally tried with BOSH connection and IT WORKED!!!&lt;/p&gt;


&lt;p&gt;Below are the steps I followed to test a chat example.&lt;/p&gt;


&lt;ol&gt;
    &lt;li&gt;install latest SVN XIFF version (Checked out revision 10959)
&lt;pre&gt;export TEST_DIR=/tmp/xiffstep1
mkdir -p $TEST_DIR/xiff
cd  $TEST_DIR/xiff
svn co http://svn.igniterealtime.org/svn/repos/xiff/trunk/src/org org&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;install latest SVN ejabberd version (revision 1867)
&lt;pre&gt;cd  $TEST_DIR
svn co http://svn.process-one.net/ejabberd/trunk/ ejabberd_src
cd $TEST_DIR/ejabberd_src/src
./configure --prefix=$TEST_DIR/ejabberd
make
sudo su
make install&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;install mod_http_bind in ejabberd and load module in &lt;a href='http://www.keoko.net/wp-content/uploads/2009/02/ejabberd.cfg'&gt;ejabberd.cfg&lt;/a&gt; (see this &lt;a href=&quot;http://www.ejabberd.im/ejabberd-modules&quot;&gt;article&lt;/a&gt;). 
&lt;pre&gt;cd $TEST_DIR/
svn co http://svn.process-one.net/ejabberd-modules ejabberd_modules_src
cd $TEST_DIR/ejabberd_modules_src/http_bind/trunk
./build.sh
sudo su
cp ebin/*.beam $TEST_DIR/ejabberd/lib/ejabberd/ebin/
# load mod_http_bind in ejabberd.cfg: {mod_http_bind,[]},
# add request_handler in ejabberd.cfg: {request_handlers, [{[&quot;http-bind&quot;], mod_http_bind}]}
cd $TEST_DIR/ejabberd/etc/ejabberd
wget http://www.keoko.net/wp-content/uploads/2009/02/ejabberd.cfg
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;setup ejabberd and create two users (sender, receiver).
&lt;pre&gt;cd $TEST_DIR/ejabberd/sbin
./ejabberdctl start
./ejabberdctl register user1 localhost user1
./ejabberdctl register user2 localhost user2&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;install nginx and configure it as reverse proxy to ejabberd
&lt;pre&gt;
sudo apt-get install nginx
sudo vim /usr/local/nginx/conf/nginx.conf
# add the following lines after location / block
        location /xmpp-httpbind {
            proxy_pass   http://localhost:5280/http-bind;
            break;
        }
sudo killall nginx
sudo /usr/local/nginx/sbin/nginx
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;get chat example files: &lt;a href='http://www.keoko.net/wp-content/uploads/2009/02/xiffstep1bosh.mxml'&gt;XIFFstep1BOSH.mxml&lt;/a&gt; and &lt;a href='http://www.keoko.net/wp-content/uploads/2009/02/testchatbosh.as'&gt;TestChatBosh.as&lt;/a&gt; (this example is based on this &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash/xiff-chat-part-1&quot;&gt;article&lt;/a&gt;).
&lt;pre&gt;cd $TEST_DIR/xiff
wget http://www.keoko.net/wp-content/uploads/2009/02/xiffstep1bosh.mxml
wget http://www.keoko.net/wp-content/uploads/2009/02/testchatbosh.as&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt; create AS3 project &quot;XIFFstep1BOSH&quot; with eclipse + Flex Builder, import library XIFF and example file into the project and run the application.
&lt;pre&gt;# run eclipse
File &amp;gt; New &amp;gt; Flex Project -&amp;gt; Project Name: XIFFstep1Bosh
Delete &amp;gt; XIFFstep1BOSH.mxml
File &amp;gt; Import &amp;gt; General &amp;gt; File System &amp;gt; Next &amp;gt; From directory: $TEST_DIR/xiff
Run &amp;gt; Run&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;open another XMPP client (e.g. Psi) with user2.&lt;/li&gt;
&lt;li&gt;send message through the flash application in the browser window that has been opened.&lt;/li&gt;
&lt;li&gt;check the message has been received in the other XMPP client (user2).&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Mickaël Rémond was right: &lt;a href=&quot;http://www.keoko.net/2009/02/experiences-with-flash-and-ejabberd/#comment-30&quot;&gt;XMPP works with flash out of the box&lt;/a&gt; ...  &lt;b&gt;with BOSH connections, not with XML socket connections&lt;/b&gt;.&lt;/p&gt;

</content>
 </entry>
 
 <entry>
   <title>Experiences with flash and ejabberd (II)</title>
   <link href="http://blog.keoko.net/2009/02/07/experiences-with-flash-and-ejabberd-ii.html"/>
   <updated>2009-02-07T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2009/02/07/experiences-with-flash-and-ejabberd-ii</id>
   <content type="html">&lt;p&gt;When I was writing &lt;a href=&quot;http://www.keoko.net/2009/02/experiences-with-flash-and-ejabberd/&quot;&gt;Flash and ejabberd experiences&lt;/a&gt; article, I thought to include all the detailed steps but I was afraid of repeating once more all the steps. However, after having some doubts whether it was really necessary to apply a patch to ejabberd I think it's worth to review some of them.&lt;/p&gt;

&lt;p&gt;Below are the steps I followed to test a chat example.&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;install latest SVN XIFF version (Checked out revision 10959)
&lt;pre&gt;export TEST_DIR=/tmp/xiffstep1
mkdir -p $TEST_DIR/xiff
cd  $TEST_DIR/xiff
svn co http://svn.igniterealtime.org/svn/repos/xiff/trunk/src/org org&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;install latest SVN ejabberd version (2.0.2)
&lt;pre&gt;cd  $TEST_DIR
svn co http://svn.process-one.net/ejabberd/tags/ejabberd-2.0.2/ ejabberd_src
cd $TEST_DIR/ejabberd_src/src
./configure --prefix=$TEST_DIR/ejabberd
make
sudo su
make install&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;setup ejabberd and create two users (sender, receiver)
&lt;pre&gt;cd $TEST_DIR/ejabberd/sbin
./ejabberdctl start
./ejabberdctl register user1 localhost user1
./ejabberdctl register user2 localhost user2&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;get chat example files: &lt;a href=&quot;http://www.keoko.net/wp-content/uploads/2009/02/xiffstep1.mxml&quot;&gt;xiffstep1.mxml&lt;/a&gt; and &lt;a href=&quot;http://www.keoko.net/wp-content/uploads/2009/02/testchat.as&quot;&gt;TestChat.as&lt;/a&gt;. Note this example is based on this &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash/xiff-chat-part-1&quot;&gt;article&lt;/a&gt;.
&lt;pre&gt;cd $TEST_DIR/xiff
wget http://www.keoko.net/wp-content/uploads/2009/02/xiffstep1.mxml
wget http://www.keoko.net/wp-content/uploads/2009/02/testchat.as&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt; create AS3 project &quot;Test1&quot; with eclipse + Flex Builder, import library XIFF and example file into the project and run the application.
&lt;pre&gt;
# run eclipse
File &amp;gt; New &amp;gt; Flex Project -&amp;gt; Project Name: XIFFstep1
Delete &amp;gt; XIFFstep1.mxml
File &amp;gt; Import &amp;gt; General &amp;gt; File System &amp;gt; Next &amp;gt; From directory: $TEST_DIR/xiff
Run &amp;gt; Run&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;send message through the flash application in the browser window that has been opened.&lt;/li&gt;
    &lt;li&gt;check XML/jabber communication.
&lt;ul&gt;
    &lt;li&gt;Request:
&lt;pre&gt;&amp;lt;policy-file-request/&amp;gt;&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;Response:
&lt;pre&gt;&amp;lt;?xml version='1.0'?&amp;gt;
&amp;lt;stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='3095424478' from='localhost' xml:lang='en'&amp;gt;
&amp;lt;stream:error&amp;gt;
&amp;lt;invalid-namespace xmlns='urn:ietf:params:xml:ns:xmpp-streams'/&amp;gt;
&amp;lt;/stream:error&amp;gt;
&amp;lt;/stream:stream&amp;gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;As pointed out by Mickaël Rémond &lt;ins datetime=&quot;2009-02-08T23:52:39+00:00&quot;&gt;in this &lt;a href=&quot;http://www.keoko.net/2009/02/experiences-with-flash-and-ejabberd/#comment-30&quot;&gt;comment&lt;/a&gt;&lt;/ins&gt;, XIFF is not XMPP compliant. It's clear on the XML request. However, I still don't see how to connect XIFF with ejabberd without applying the patch mentioned on the first part. BOSH seems the only alternative.&lt;/p&gt;

&lt;p&gt;Any suggestion?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Experiences with flash and ejabberd</title>
   <link href="http://blog.keoko.net/2009/02/02/experiences-with-flash-and-ejabberd.html"/>
   <updated>2009-02-02T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2009/02/02/experiences-with-flash-and-ejabberd</id>
   <content type="html">&lt;p&gt;After finding out  a &lt;a href=&quot;http://ralphm.net/&quot;&gt;site&lt;/a&gt; with a fishtank where each fish notified the presence of some jabber user (now it's a christmas tree) I thought it would be interesting to do the same with flash and add some more dynamism (e.g. using events, mood, ...) to the fishes.&lt;/p&gt;

&lt;p&gt;The rest of the story is here:&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;So the first thing was to find a &lt;strong&gt;Flash library&lt;/strong&gt; to do all the XMPP communication with ejabberd through BOSH. Rapidly I googled and all links  pointed to &lt;a title=&quot;XIFF&quot; href=&quot;http://www.igniterealtime.org/projects/xiff/&quot;&gt;XIFF&lt;/a&gt;. So far, so good.
&lt;/li&gt;
    &lt;li&gt;Some &lt;strong&gt;IDE to work with Flash in linux&lt;/strong&gt;. Eclipse with  &lt;a href=&quot;http://www.adobe.com/products/flex/features/flex_builder/&quot;&gt;Flex Builer&lt;/a&gt; to the rescue following this &lt;a href=&quot;http://www.insideria.com/2008/04/step-by-step-setting-up-flex-b.html&quot;&gt;notes&lt;/a&gt;. Some java issues, but not more than 1 hour to have Flex &quot;Hello world&quot; application up and running.&lt;/li&gt;
    &lt;li&gt;Let's look at some &lt;strong&gt;XIFF examples&lt;/strong&gt; ... and what? there is no example nor even documentation ... except for some 4 examples on this &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash&quot;&gt;site&lt;/a&gt;: &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash/xiff-chat-part-1&quot;&gt;chat&lt;/a&gt;, &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash/xiff-chat-part-2-roster&quot;&gt;roster&lt;/a&gt;, &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash/xiff-chat-part-3-chat-room&quot;&gt;multiuser chat room&lt;/a&gt; and &lt;a href=&quot;http://paazio.nanbudo.fi/tutorials/flash/xiff-chat-part-4-invitations&quot;&gt;invitations&lt;/a&gt;.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Test the examples with ejabberd&lt;/strong&gt; and ... failed!!! This was getting harder than expected. Let's check the Flex traces what was wrong. No way. I was about to cry when I got to a &lt;a href=&quot;http://www.sephiroth.it/weblog/archives/2008/04/flash_switcher_for_windows_osx_and_li.php&quot;&gt; site&lt;/a&gt; that recommended me to remove the distribution flashplugin package and install the Adobe's one and ... well it worked.
&lt;pre name=&quot;code&quot; class=&quot;c&quot;&gt;
sudo apt-get remove flashplugin-nonfree
&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;With Flex trace now working I didn't get too many answers, so I dug into the jabber packets with &lt;a href=&quot;http://www.wireshark.org/&quot;&gt;Wireshark&lt;/a&gt; and discovered the XMPP stream communication was closed unexpectedly.  Time to google and see I needed to apply a patch to ejabberd to work with flash.&lt;/li&gt;
    &lt;li&gt;At this point I was actually crying.  What was supposed to be a couple of hours of fun, it was being a trip to hell!!! So, with tears in my eyes I &lt;strong&gt;installed Erlang&lt;/strong&gt; R12B-5 following these &lt;a href=&quot;http://http://ciarang.com/posts/compiling-erlang-on-ubuntu&quot;&gt;steps&lt;/a&gt;. Downloaded ejabberd 2.0.2, applied the patch, unpacked it, run configure script, compiled and installed it. WHAT???&lt;/li&gt;
    &lt;li&gt;I said ejabberd 2.0.2 and the patch I found was for &lt;a href=&quot;http://erlangdevelopers.splinder.com/post/16639798&quot;&gt;2.0.0&lt;/a&gt;. Full of tears I adapted the patch for ejabberd 2.0.2 and then applied the patch, unpacked it, run configure script, compiled and installed it.&lt;/li&gt;
    &lt;li&gt;Voilá! &lt;strong&gt;Chat&lt;/strong&gt; (first example) working with AS3.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Roster&lt;/strong&gt; (second example) failed with below AS3 exception.
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
Error: No class registered for interface 'mx.resources::IResourceManager'
&lt;/pre&gt;
&lt;/li&gt;
    &lt;li&gt;At this point I was looking how to express my level of depression with my jabber mood. Googling and googling finally I got to this &lt;a href=&quot;http://www.igniterealtime.org/community/thread/34519&quot;&gt;post&lt;/a&gt; that recommended me to &lt;strong&gt;load the affected class at the very beginning of the application&lt;/strong&gt; and so I did it including the following lines in my class constructor. It worked.

&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
// http://www.igniterealtime.org/community/thread/34519
// Do what FlexModuleFactory does, only by hand.
var resourceManagerImpl:Object = flash.system.ApplicationDomain.currentDomain.getDefinition(&quot;mx.resources::ResourceManagerImpl&quot;);
//mx.core.Singleton.registerClass(&quot;mx.resources::IResourceManager&quot;, Class(resourceManagerImpl));
Singleton.registerClass(&quot;mx.resources::IResourceManager&quot;, Class(resourceManagerImpl));
&lt;/pre&gt;

&lt;/li&gt;
    &lt;li&gt;Time to test &lt;strong&gt;multiuser chat room&lt;/strong&gt; (third example). Press debug button and then what??? What the **ll is doing??? I knew I'd just entered to the world of pain. I was feeling the pain until I stumbled upon &lt;a href=&quot;http://www.iminlikewithyou.com&quot;&gt;iaminlikewithyou&lt;/a&gt; and played balloono until 3 AM. This site was really cool and seemed that they were using XMPP for the game communication but not really sure.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Multiuser chat room (round II)&lt;/strong&gt;. I read the example code and realized that I had to create a multiuser chat room and invite the user from an XMPP client (e.g. Pidgin) to work. That was not so difficult but the morale was already killed in the 5th step.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Invitations&lt;/strong&gt; (fourth example) was really easy probably at this stage I was trained to stand any suffering.&lt;/li&gt;
    &lt;li&gt;No mood to create any fishtank nor christmas tree!!!&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;To sum up:&lt;/p&gt;


&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;XIFF&lt;/strong&gt;
&lt;ul&gt;
    &lt;li&gt;no documentation&lt;/li&gt;
    &lt;li&gt;no examples&lt;/li&gt;
    &lt;li&gt;not work with AS3 out of the box&lt;/li&gt;
    &lt;li&gt;support for chat, roster, MUC, invitations and BOSH although the latter I've not tested.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ejabberd&lt;/strong&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;del datetime=&quot;2009-02-08T23:45:03+00:00&quot;&gt;not work with Flash out of the box.&lt;/del&gt; &lt;ins datetime=&quot;2009-02-08T23:45:03+00:00&quot;&gt;work with flash out of the box ... with BOSH connection, not with XML socket connection (see &lt;a href=&quot;http://www.keoko.net/2009/02/experiences-with-ejabberd-and-flash-iii/&quot;&gt;Experiences with ejabberd and flash (III)&lt;/a&gt;&lt;/ins&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Permalinks in wordpress 2.8</title>
   <link href="http://blog.keoko.net/2009/01/05/permalinks-in-wordpress-28.html"/>
   <updated>2009-01-05T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2009/01/05/permalinks-in-wordpress-28</id>
   <content type="html">&lt;p&gt;Looking at my awstats graphs I found out that I had some not exepcted 404 pages (e.g. &quot;/2008/12/programming-erlang/&quot;). I checked it and it was obvious it was caused to the activation of &lt;a href=&quot;http://codex.wordpress.org/Permalinks_Options_SubPanel&quot;&gt;Wordpress permalinks&lt;/a&gt;. After some investigation I realized the issues where caused by:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;missing .htaccess. Probably due to file permissions.&lt;/li&gt;
    &lt;li&gt;Apache's mod_rewrite module disabled.&lt;/li&gt;
    &lt;li&gt;Apache's &lt;a href=&quot;http://codex.wordpress.org/Using_Permalinks#Fixing_Other_Issues&quot;&gt;Allow Override&lt;/a&gt; not enabled.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;I guess I made all possible mistakes :(&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Moved blog to Slicehost</title>
   <link href="http://blog.keoko.net/2009/01/04/moved-blog-to-slicehost.html"/>
   <updated>2009-01-04T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2009/01/04/moved-blog-to-slicehost</id>
   <content type="html">&lt;p&gt;Bored with my ISP connection issues, finally I've moved my blog to &lt;a href=&quot;http://www.slicehost.com/&quot;&gt;Slicehost&lt;/a&gt; and got really surprised with the fast installation. Just one minute after the registration process I was accessing to my new baked Ubuntu virtual machine. One hour after, I had my blog migrated to Slicehost. Impressive!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Programming Erlang</title>
   <link href="http://blog.keoko.net/2008/12/24/programming-erlang.html"/>
   <updated>2008-12-24T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2008/12/24/programming-erlang</id>
   <content type="html">&lt;p&gt;My current interests in XMPP leaded me to &lt;a href=&quot;http://www.ejabberd.im/&quot;&gt;ejabberd&lt;/a&gt; (XMPP server) and this to some XEPs &lt;a href=&quot;http://xmpp.org/extensions/xep-0060.html&quot;&gt;PubSub&lt;/a&gt; and POSH, and this to wondering about using XMPP as a queue system. Then I discovered some discussions comparing AMQP vs XMPP and realized that both &lt;a href=&quot;http://www.rabbitmq.com/&quot;&gt;RabbitMQ&lt;/a&gt; (an implementation of AMQP) and ejabberd were programmed in Erlang. I was astonished that three of the currently most interesting projects were implemented in the same language (if we include &lt;a href=&quot;http://couchdb.apache.org/&quot;&gt;couchDB&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;This is why I decided to read &lt;a href=&quot;http://www.pragprog.com/titles/jaerlang/programming-erlang&quot;&gt;&quot;Programming Erlang&quot;&lt;/a&gt;.  I've nearly read half of the book and my expectations has been really exceeded:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;smooth pace of the book goes from basic knowledge to the hardest part (sequential programming -&amp;gt; advanced sequential programming -&amp;gt; concurrent programming -&amp;gt; distributed programming -&amp;gt; programming multicore CPUs).&lt;li&gt;
&lt;li&gt;clear and easy to understand examples.&lt;/li&gt;
&lt;li&gt;some complete examples such as an IRC Lite implementation gives you the concepts in action.
&lt;li&gt;interesting concepts: functional programming, concurrency, distributed programming, fault-tolerant programs.
&lt;/ul&gt;


&lt;p&gt;As missing parts (not sure if they are cover at the end of the book), I found out the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a bit of history of Erlang. Why erlang?&lt;/li&gt;
&lt;li&gt;Comparison between Erlang and other concurrency oriented languages such as Scala, Clojure, Stackless Python, ...
&lt;/ul&gt;


&lt;p&gt;To sum up, really a &lt;b&gt;MUST READ&lt;/b&gt; if you are curious about other programming languages apart from Java, Python or Ruby.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My interests with Wordle</title>
   <link href="http://blog.keoko.net/2008/12/24/my-interests-with-wordle.html"/>
   <updated>2008-12-24T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2008/12/24/my-interests-with-wordle</id>
   <content type="html">&lt;p&gt;Below you can get an idea of my interests. The image is generated through my delicious tags with the &lt;a href=&quot;http://www.wordle.net&quot;&gt;wordle&lt;/a&gt; service.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.wordle.net/gallery/wrdl/406973/keoko&quot; title=&quot;keoko&quot;&gt;&lt;img src=&quot;http://www.wordle.net/thumb/wrdl/406973/keoko&quot; style=&quot;border:1px solid #ddd;padding:4px;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>XMPP PubSub with ejabberd and XMPP4R</title>
   <link href="http://blog.keoko.net/2008/12/17/xmpp-pubsub-with-ejabberd-and-xmpp4r.html"/>
   <updated>2008-12-17T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2008/12/17/xmpp-pubsub-with-ejabberd-and-xmpp4r</id>
   <content type="html">&lt;p&gt;After reading &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/detail/4359&quot;&gt;&amp;#8220;Beyond REST? Building Data Services with XMPP PubSub&amp;#8221;&lt;/a&gt; and other articles about PubSub with XMPP, I decided it would be worth to test it. However, I didn&amp;#8217;t find any complete step by step guide in how to test it with ejabberd as XMPP server and XMPP4R as XMPP client.&lt;/p&gt;


&lt;p&gt;Below are the steps I followed to test a subscriber (user &amp;#8220;sub&amp;#8221;) waiting for items published to the node (&amp;#8221;home/localhost/pub/updates&amp;#8221;) for the publisher (user &amp;#8220;pub&amp;#8221;). Note you can add as many subscribers/publishers as you want.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;install ejabberd (XMPP server). I followed instructions of this &lt;a href=&quot;http://ecedeno.com.ve/blog/index.php/2008/08/07/servidor-jabber-con-ejabberd-en-ubuntu-hardy-804/&quot;&gt;article&lt;/a&gt; (spanish) or &lt;a href=&quot;http://sysmonblog.co.uk/?p=11&quot;&gt;article&lt;/a&gt; (english) without any surprise.&lt;/li&gt;
&lt;li&gt;create two ejabberd users: &amp;#8220;pub&amp;#8221; (the publisher) and &amp;#8220;sub&amp;#8221; (the subscriber).&lt;br /&gt;

&lt;pre name=&quot;code&quot; class=&quot;c&quot;&gt;sudo ejabberdctl register pub localhost pub
sudo ejabberdctl register sub localhost sub &lt;/pre&gt;&lt;/li&gt;

&lt;li&gt;install XMPP4R Ruby gem.&lt;br /&gt;
&lt;code&gt;sudo gem install xmpp4r&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;create file nodecreator.rb. See code below.
&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;
#! /usr/bin/ruby
require &amp;quot;rubygems&amp;quot;
require &amp;quot;xmpp4r&amp;quot;

require &amp;quot;xmpp4r/pubsub&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/servicehelper.rb&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/nodebrowser.rb&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/nodehelper.rb&amp;quot;

include Jabber
Jabber::debug = true

service = &amp;#39;pubsub.localhost&amp;#39;
jid = &amp;#39;pub@localhost/laptop&amp;#39;

password = &amp;#39;pub&amp;#39;
client = Client.new(JID.new(jid))
client.connect
client.auth(password)

client.send(Jabber::Presence.new.set_type(:available))
pubsub = PubSub::ServiceHelper.new(client, service)
pubsub.create_node(&amp;#39;home/localhost/pub/&amp;#39;)
pubsub.create_node(&amp;#39;home/localhost/pub/updates&amp;#39;)
&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;create file publisher.rb. See code below.&lt;/li&gt;
&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;
#! /usr/bin/ruby
require &amp;quot;rubygems&amp;quot;

require &amp;quot;xmpp4r&amp;quot;
require &amp;quot;xmpp4r/pubsub&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/servicehelper.rb&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/nodebrowser.rb&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/nodehelper.rb&amp;quot;
include Jabber
Jabber::debug = true
jid = &amp;#39;pub@localhost/laptop&amp;#39;

password = &amp;#39;pub&amp;#39;
service = &amp;#39;pubsub.localhost&amp;#39;
node = &amp;#39;home/localhost/pub/updates&amp;#39;
# connect XMPP client
client = Client.new(JID.new(jid))
# remove &amp;quot;127.0.0.1&amp;quot; if you are not using a local ejabberd
client.connect(&amp;quot;127.0.0.1&amp;quot;)
client.auth(password)
client.send(Jabber::Presence.new.set_type(:available))
# create item
pubsub = PubSub::ServiceHelper.new(client, service)
item = Jabber::PubSub::Item.new
xml = REXML::Element.new(&amp;quot;greeting&amp;quot;)
xml.text = &amp;#39;hello world!&amp;#39;

item.add(xml);
# publish item
pubsub.publish_item_to(node, item)
&lt;/pre&gt;
&lt;li&gt;create file subscriber.rb. See code below.
&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;

#! /usr/bin/ruby
require &amp;quot;rubygems&amp;quot;
require &amp;quot;xmpp4r&amp;quot;
require &amp;quot;xmpp4r/pubsub&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/servicehelper.rb&amp;quot;

require &amp;quot;xmpp4r/pubsub/helper/nodebrowser.rb&amp;quot;
require &amp;quot;xmpp4r/pubsub/helper/nodehelper.rb&amp;quot;include Jabber
#Jabber::debug = true
jid = &amp;#39;sub@localhost/laptop&amp;#39;
password = &amp;#39;sub&amp;#39;
node = &amp;#39;home/localhost/pub/updates&amp;#39;
service = &amp;#39;pubsub.localhost&amp;#39;

# connect XMPP client
client = Client.new(JID.new(jid))
# remove &amp;quot;127.0.0.1&amp;quot; if you are not using a local ejabberd
client.connect(&amp;quot;127.0.0.1&amp;quot;)
client.auth(password)
client.send(Jabber::Presence.new.set_type(:available))
sleep(1)
# subscribe to the node
pubsub = PubSub::ServiceHelper.new(client, service)
pubsub.subscribe_to(node)
subscriptions = pubsub.get_subscriptions_from_all_nodes()
puts &amp;quot;subscriptions: #{subscriptions}\n\n&amp;quot;
puts &amp;quot;events:\n&amp;quot;

# set callback for new events


pubsub.add_event_callback do |event|
begin
event.payload.each do |e|
puts e,&amp;quot;----\n&amp;quot;
end
rescue
puts &amp;quot;Error : #{$!} \n #{event}&amp;quot;

end
# infinite loop
loop do
sleep 1
end
&lt;/pre&gt;
&lt;/li&gt;

&lt;li&gt;run nodecreator.rb. It creates the XMPP node &amp;#8220;home/localhost/pub/updates&amp;#8221;. It creates first the node &amp;#8220;home/localhost/pub&amp;#8221; and then the &amp;#8220;home/localhost/pub/updates&amp;#8221;. Seems quite obvious but I spent some hours after I got it.&lt;/li&gt;

&lt;li&gt;check the nodes have been created. I used the discovery service functionality of Psi client.
&lt;p&gt;&lt;img src=&quot;http://keoko.files.wordpress.com/2008/12/psi_service_discovery.png?w=300&quot; alt=&quot;psi_service_discovery&quot; title=&quot;psi_service_discovery&quot; width=&quot;300&quot; height=&quot;288&quot; class=&quot;alignnone size-medium wp-image-67&quot; /&gt;&lt;/li&gt;

&lt;li&gt;run subscriber.rb file. The &amp;#8220;sub&amp;#8221; user subscribes to the node &amp;#8216;updates&amp;#8217; and waits for items in the &amp;#8220;updates&amp;#8221; node. Be aware you should close any XMPP connection with users &amp;#8220;pub&amp;#8221; and &amp;#8220;sub&amp;#8221; in case you are using any XMPP client such as Pidgin, Psi,&amp;#8230; otherwise it won&amp;#8217;t work.

&lt;li&gt;run publisher.rb file. It will send a message &amp;#8220;&amp;lt;greetings&amp;gt;hello world!&amp;#8221;&amp;lt;/greetings&amp;gt; to the subscriber. Run it as many times as you want.&lt;/li&gt;

&lt;li&gt;If everything goes well yo will see in the subscriber screen a message like this.
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;

subscriptions: &amp;lt;subscription node=&amp;#39;home/localhost/pub/updates&amp;#39; jid=&amp;#39;sub@localhost&amp;#39; subscription=&amp;#39;subscribed&amp;#39; xmlns=&amp;#39;http://jabber.org/protocol/pubsub&amp;#39;/&amp;gt;

events:
&amp;lt;items node=&amp;#39;home/localhost/pub/updates&amp;#39;&amp;gt;&amp;lt;item id=&amp;#39;3376&amp;#39;&amp;gt;&amp;lt;greeting&amp;gt;hello world!&amp;lt;/greeting&amp;gt;&amp;lt;/item&amp;gt;&amp;lt;/items&amp;gt;
----
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Good Luck!&lt;/p&gt;




&lt;p&gt;For this test, I used the following versions:&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;Operating System: Ubuntu 8.04&lt;/li&gt;
&lt;li&gt;Ruby:  1.8.6&lt;/li&gt;
&lt;li&gt;XMPP4R: 0.4&lt;/li&gt;
&lt;li&gt;ejabberd: 1.1.4&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Ubuntu 8.04 in HP Compaq 8510p laptop</title>
   <link href="http://blog.keoko.net/2008/11/10/ubuntu-804-in-hp-compaq-8510p-laptop.html"/>
   <updated>2008-11-10T00:00:00-08:00</updated>
   <id>http://blog.keoko.net/2008/11/10/ubuntu-804-in-hp-compaq-8510p-laptop</id>
   <content type="html">&lt;p&gt;I installed successfully Ubuntu 8.04 in a HP Compaq 8510p laptop. My applications at the moment are:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;text editor: vim 7.1&lt;/li&gt;
    &lt;li&gt;web browser: Firefox 3.0.3 (webdeveloper, firebug, firecookie, YSlow, vimperator, del.icio.us)&lt;/li&gt;
    &lt;li&gt;IM client: pidgin 2.4.1&lt;/li&gt;
    &lt;li&gt;java editor: eclipse 3.3.2&lt;/li&gt;
    &lt;li&gt;web server: apache2 2.2.8 (php5, &quot;mod_ruby&quot;)&lt;/li&gt;
    &lt;li&gt;gnome-do (quicksilver for gnome)&lt;/li&gt;
    &lt;li&gt;glipper (similar to klipper)&lt;/li&gt;
    &lt;li&gt;network protocol analyzer: wireshark&lt;/li&gt;
    &lt;li&gt;virtual machine: VirtualBox 1.5.6_OSE with Windows XP.&lt;/li&gt;
    &lt;li&gt;oracle client: SQLDeveloper&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;There is still a list of issues pending to fix:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;battery life. I followed the tips (powertop, cpufrequtils,  ...) of this &lt;a href=&quot;http://www.phoronix.com/scan.php?page=article&amp;amp;item=ubuntu_battery_life&amp;amp;num=1&quot;&gt;article&lt;/a&gt; although not sure anot the improvement.&lt;/li&gt;
    &lt;li&gt;screen resolution. 1200x800 maximum resolution. I installed fglrx driver through envy but does not improve the resolution (1680*1050 seems the maximum, see this &lt;a href=&quot;https://wiki.ubuntu.com/LaptopTestingTeam/HPCompaq8510p&quot;&gt;article&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;CD/DVD writer. brasero nor cdrecord command tool worked.&lt;/li&gt;
    &lt;li&gt;video codecs. AVI files are reproduced very slowly.&lt;/li&gt;
    &lt;li&gt;email client with Exchange support. Evolution does not manage properly meeting requests.&lt;/li&gt;
    &lt;li&gt;glipper. It crashes in every start up.&lt;/li&gt;
    &lt;li&gt;rubygems. Rubygems from repository does not work properly. You have to install it manually.&lt;/li&gt;
&lt;/ul&gt;

</content>
 </entry>
 
 <entry>
   <title>Phusion Passenger installed</title>
   <link href="http://blog.keoko.net/2008/10/11/phusion-passenger-installed.html"/>
   <updated>2008-10-11T00:00:00-07:00</updated>
   <id>http://blog.keoko.net/2008/10/11/phusion-passenger-installed</id>
   <content type="html">&lt;p&gt;I eventually decided to install &lt;a href=&quot;http://www.modrails.com/&quot;&gt;phusion passenger&lt;/a&gt; for his simplicity on rails deployment. My first intention was to install Apache + Mongrel, but after reading Sam Ruby's &lt;a href=&quot;http://intertwingly.net/blog/2008/04/28/modrails-easy-if-you-are-root&quot;&gt;article&lt;/a&gt; and the following lines in this &lt;a href=&quot;http://www.rubyinside.com/28_mod_rails_and_passenger_resources-899.html&quot;&gt;article&lt;/a&gt; I changed my mind:&lt;/p&gt;

&lt;blockquote&gt;&quot;The de-facto Ruby (and Rails) deployment system seems to change rapidly (remember Apache+FastCGI, then lighttpd+FastCGI, then Apache+Mongrel, then Nginx+Mongrel...?) and while Passenger may or may not be a de-facto standard in a few years' time, it's certainly becoming the standard for now, so jump on board!&quot;&lt;/blockquote&gt;


&lt;p&gt;Really quick the install and set up in Ubuntu.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Apache 2.2 + Wordpress 2.3.3 installed</title>
   <link href="http://blog.keoko.net/2008/08/30/apache-22-wordpress-233-installed.html"/>
   <updated>2008-08-30T00:00:00-07:00</updated>
   <id>http://blog.keoko.net/2008/08/30/apache-22-wordpress-233-installed</id>
   <content type="html">&lt;p&gt;I've just installed Apache 2.2 and Wordpress 2.3.3 after looking into some alternatives, mainly ruby-based solutions:&lt;/p&gt;

&lt;p&gt;Alternative web servers:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;lighttpd + fastcgi (old recommended solution)&lt;/li&gt;
    &lt;li&gt;apache + mod_ruby (&lt;a href=&quot;http://www.rubyinside.com/no-true-mod_ruby-is-damaging-rubys-viability-on-the-web-693.html&quot;&gt;&quot;class sharing issue&quot;&lt;/a&gt;)&lt;/li&gt;
    &lt;li&gt;nginx + mongrel (seems the de facto RoR solution)&lt;/li&gt;
    &lt;li&gt;SCGI?&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Ruby-based weblogging systems:&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;typo (complex?)&lt;/li&gt;
    &lt;li&gt;mephysto (seems the most appropiate)&lt;/li&gt;
    &lt;li&gt;radiant (more a CMS than a blogging system)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The decision was made because I'm really new in Ruby and RoR and I would like to start taking notes about my progress in this area&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>wordpress widgets</title>
   <link href="http://blog.keoko.net/2007/05/30/wordpress-widgets.html"/>
   <updated>2007-05-30T00:00:00-07:00</updated>
   <id>http://blog.keoko.net/2007/05/30/wordpress-widgets</id>
   <content type="html">&lt;p&gt;Today I have been playing with wordpress widgets. My surprise was that I was unable to add third-party widgets such as &lt;a href=&quot;http://robm.me.uk/projects/plugins/wordpress/now-reading&quot; title=&quot;now reading wordpress widget&quot;&gt;now reading&lt;/a&gt; widget (I am using the wordpress blog service). Maybe I am not looking at the right place. So, for the moment, I will have to conform with default widgets like search, tag cloud, flickr, ...&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>gizmo installed</title>
   <link href="http://blog.keoko.net/2007/05/26/gizmo-installed.html"/>
   <updated>2007-05-26T00:00:00-07:00</updated>
   <id>http://blog.keoko.net/2007/05/26/gizmo-installed</id>
   <content type="html">&lt;p&gt;I have just installed &lt;a href=&quot;http://www.gizmoproject.com&quot; title=&quot;gizmo&quot;&gt;gizmo&lt;/a&gt;, another voIP service similar to Skype but using SIP instead,  on my Ubuntu Feisty with some minor issues:&lt;/p&gt;

&lt;ol&gt;
    &lt;li&gt;download gizmo deb package from &lt;a href=&quot;http://www.gizmoproject.com/download-linux.html&quot; title=&quot;linux gizmo file&quot;&gt;here&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;mv ~/.asoundrc.asoundconf ~/.asoundrc.asoundconf.bak&lt;/li&gt;
    &lt;li&gt;sudo mv /etc/asound.conf /etc/asound.conf.bak&lt;/li&gt;
    &lt;li&gt;mv .asoundrc .asoundrc.bak&lt;/li&gt;
    &lt;li&gt;sudo /etc/init.d/alsa-utils restart&lt;/li&gt;
    &lt;li&gt;sudo dpkg -i ~/Desktop/gizmo-project_3.0.1.68_i386.deb&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;Now it's up and running but no friend with gizmo to call!&lt;/p&gt;
</content>
 </entry>
 
 
</feed>
