<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.nikosd.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkEHR389eCp7ImA9WxBbE0k.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516</id><updated>2010-03-11T23:57:16.160+02:00</updated><title>Nikos D.</title><subtitle type="html">Yet another blog about ruby, apple, javascript, c#, web, programming in general and anything else irrelevant...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.nikosd.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.nikosd.com/" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.nikosd.com/nikosd" /><feedburner:info uri="nikosd" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:emailServiceId>nikosd</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.nikosd.com%2Fnikosd" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.nikosd.com%2Fnikosd" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.nikosd.com%2Fnikosd" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.nikosd.com/nikosd" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.nikosd.com%2Fnikosd" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.nikosd.com%2Fnikosd" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.nikosd.com%2Fnikosd" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><entry gd:etag="W/&quot;DUEER3s4eSp7ImA9WxBTFkk.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-4722242892765689347</id><published>2009-12-12T19:59:00.002+02:00</published><updated>2009-12-12T21:53:26.531+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-12T21:53:26.531+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><title>Urban tales of programming</title><content type="html">I have to say that this is one of the most enjoyable pieces of text I've ever read. I found it on a conversation on another blog post and I thought that more people related to programming can enjoy it too. Feel free to share it with your managers and your software team "leaders" :)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;The Parable of the Two Programmers&lt;br /&gt;
Neil W. Rickert&lt;br /&gt;
&lt;br /&gt;
Once upon a time, unbeknown to each other, the "Automated&lt;br /&gt;
Accounting Applications Association" and the "Consolidated Computerized&lt;br /&gt;
Capital Corporation" decided that they needed the identical program&lt;br /&gt;
to perform a certain service.&lt;br /&gt;
&lt;br /&gt;
Automated hired a programmer-analyst, Alan, to solve their problem.&lt;br /&gt;
&lt;br /&gt;
Meanwhile Consolidated decided to ask a newly hired entry-level programmer, Charles, to tackle the job, to see if he was as good as he pretended.&lt;br /&gt;
&lt;br /&gt;
Alan, having had experience in difficult programming projects,&lt;br /&gt;
decided to use the PQR structured design methodology. With this in mind&lt;br /&gt;
he asked his department manager to assign another three programmers as a programming team.  Then the team went to work, churning our preliminary reports and problem analyses.&lt;br /&gt;
&lt;br /&gt;
Back at Consolidated, Charles spent some time thinking about the&lt;br /&gt;
problem. His fellow employees noticed that Charles often sat with his feet on the desk, drinking coffee. He was occasionally seen at his computer&lt;br /&gt;
terminal, but his office mate could tell from the rhythmic striking of keys that he was actually playing Space Invaders.&lt;br /&gt;
&lt;br /&gt;
By now, the team at Automated was starting to write code. The programmers were spending about half their time writing and compiling&lt;br /&gt;
code, and the rest of their time in conference, discussing the interfaces&lt;br /&gt;
between the various modules.&lt;br /&gt;
&lt;br /&gt;
His office mate noticed that Charles had finally given up on Space&lt;br /&gt;
Invaders. Instead he now divided his time between drinking coffee with&lt;br /&gt;
his feet on the table, and scribbling on little scraps of paper. His&lt;br /&gt;
scribbling didn't seem to be Tic Tac Toe, but it didn't exactly make much&lt;br /&gt;
sense, either.&lt;br /&gt;
&lt;br /&gt;
Two months have gone by. The team at Automated finally releases&lt;br /&gt;
an implementation timetable. In another two months they will have a test&lt;br /&gt;
version of the program. Then a two month period of testing and enhancing should yield a completed version.&lt;br /&gt;
&lt;br /&gt;
The manager of Charles has by now [become] tired of seeing him goof off. He decides to confront him. But as he walks into Charles's office, he is surprised to see Charles busy entering code at his terminal. He decides to postpone the confrontation, so makes some small talk then leaves. However, he begins to keep a closer watch on Charles, so that when the opportunity presents itself he can confront him.  Not looking forward to an unpleasant conversation, he is pleased to notice that Charles seems to be busy most of the time. He has even been seen to delay his lunch, and to stay after work two or three days a week.&lt;br /&gt;
&lt;br /&gt;
At the end of three months, Charles announces he has completed the project. He submits a 500 line program. The program appears to be clearly written, and when tested it does everything required in the specifications.  In fact it even has a few additional convenience features&lt;br /&gt;
which might significantly improve the usability of the program. The program is put into test, and, except for one quickly corrected oversight,&lt;br /&gt;
performs well.&lt;br /&gt;
&lt;br /&gt;
The team at Automated has by now completed two of the four major&lt;br /&gt;
modules required for their program. These modules are now undergoing&lt;br /&gt;
testing while the other modules are completed.&lt;br /&gt;
&lt;br /&gt;
After another three weeks, Alan announces that the preliminary version is ready one week ahead of schedule. He supplies a list of the deficiencies that he expects to correct. The program is placed under test. The users find a number of bugs and deficiencies, other than those listed. As Alan explains, this is no surprise. After all this is a preliminary version in which bugs were expected.&lt;br /&gt;
&lt;br /&gt;
After about two more months, the team has completed its production&lt;br /&gt;
version of the program. It consists of about 2,500 lines of code. When&lt;br /&gt;
tested it seems to satisfy most of the original specifications. It has omitted on or two features, and is very fussy about the format of its input data. However the company decides to install the program. They can always train their data-entry staff to enter data in the strict format required. The program is handed over to some maintenance programmers to eventually incorporate the missing features.&lt;br /&gt;
&lt;br /&gt;
SEQUEL:&lt;br /&gt;
&lt;br /&gt;
At first Charles's supervisor was impressed. But as he read through the source code, he realized that the project was really much simpler than he had originally thought. It now seemed apparent that this was not much of a challenge even for a beginning programmer.&lt;br /&gt;
&lt;br /&gt;
Charles did produce about 5 lines of code per day. This is perhaps a little above average. However, considering the simplicity of the program, it was nothing exceptional. Also his supervisor remembered his two months of goofing off.&lt;br /&gt;
&lt;br /&gt;
At his next salary review Charles was given a raise which was about half the inflation over the period. He was not given a promotion. After about a year he became discouraged and left Consolidated.&lt;br /&gt;
&lt;br /&gt;
At Automated, Alan was complimented for completing his project on schedule. His supervisor looked over the program. With a few minutes of thumbing through he saw that the company standards about structured programming were being observed. He quickly gave up attempting to read the program however; it seemed quite incomprehensible. He realized by now that the project was really much more complex that he had originally&lt;br /&gt;
assumed, and he congratulated Alan again on his achievement.&lt;br /&gt;
&lt;br /&gt;
The team had produced over 3 lines of code per programmer per day. This was about average, but, considering the complexity of the problem,&lt;br /&gt;
could be considered to be exceptional. Alan was given a hefty pay raise, and promoted to Systems Analyst as a reward for his achievement.&lt;br /&gt;
&lt;br /&gt;
....Miles&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
Source: &lt;a href="http://mail.linux.ie/pipermail/social/1999-October/000483.html"&gt;Social events etc. for ILUG members (mailing list): OT: a tale of two programmers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-4722242892765689347?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=EgQXC4-zIoA:oNtNjcMrtMA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=EgQXC4-zIoA:oNtNjcMrtMA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=EgQXC4-zIoA:oNtNjcMrtMA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=EgQXC4-zIoA:oNtNjcMrtMA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/EgQXC4-zIoA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/4722242892765689347/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2009/12/urban-tales-on-programming.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4722242892765689347?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4722242892765689347?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/EgQXC4-zIoA/urban-tales-on-programming.html" title="Urban tales of programming" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2009/12/urban-tales-on-programming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYDSXs5fSp7ImA9WxBTFkk.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-2029100283767510999</id><published>2009-12-12T19:48:00.001+02:00</published><updated>2009-12-12T19:49:38.525+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-12T19:49:38.525+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>How to make C# be more like Ruby</title><content type="html">Ok, here are three links that can help you use C# a little more like Ruby:&lt;br /&gt;
&lt;h3&gt;How to use Extension Methods to extend C# language&lt;/h3&gt;&lt;script src="http://gist.github.com/254978.js?file=IEnumerablesOnSteroids.cs"&gt;&lt;/script&gt;&lt;br /&gt;
Source: &lt;a href="http://chaowchaow.blogspot.com/2007/12/basic-method-extensions.html"&gt;Chaowchaow&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;DynamicObject Class in .Net 4.0&lt;/h3&gt;&lt;script src="http://gist.github.com/254978.js?file=DynamicObejct.cs"&gt;&lt;/script&gt;&lt;br /&gt;
Source: &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject%28VS.100%29.aspx"&gt;MSDN Documentation&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;ExpandoObject Class in .Net 4.0&lt;/h3&gt;&lt;script src="http://gist.github.com/254978.js?file=ExpandoObject.cs"&gt;&lt;/script&gt;&lt;br /&gt;
Source: &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject%28VS.100%29.aspx"&gt;MSDN Documentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-2029100283767510999?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=siMazoNNfv8:moa91o7fKAU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=siMazoNNfv8:moa91o7fKAU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=siMazoNNfv8:moa91o7fKAU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=siMazoNNfv8:moa91o7fKAU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/siMazoNNfv8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/2029100283767510999/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2009/12/how-to-make-c-be-more-like-ruby.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2029100283767510999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2029100283767510999?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/siMazoNNfv8/how-to-make-c-be-more-like-ruby.html" title="How to make C# be more like Ruby" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2009/12/how-to-make-c-be-more-like-ruby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQASHgzeyp7ImA9WxBTEkw.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-2788526001720208809</id><published>2009-12-07T20:59:00.000+02:00</published><updated>2009-12-07T20:59:09.683+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-07T20:59:09.683+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Hacks" /><title>PTY allocation request failed on channel 0: CentOS, OpenVZ and udev problem.</title><content type="html">&lt;div class="zemanta-img zemanta-action-dragged" style="margin: 1em; display: block; float: right; width: 310px;"&gt;&lt;img alt="OpenVZ" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bb/OpenVZ-logo.png/300px-OpenVZ-logo.png" style="border: medium none ; display: block;" width="300" height="76"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;h3&gt;The scenario:&lt;/h3&gt;&lt;a class="zem_slink" href="http://www.centos.org/" rel="homepage" title="CentOS"&gt;CentOS&lt;/a&gt; linux running on &lt;a class="zem_slink" href="http://openvz.org/" rel="homepage" title="OpenVZ"&gt;OpenVZ&lt;/a&gt; (that is a &lt;a class="zem_slink" href="http://en.wikipedia.org/wiki/Virtual_private_server" rel="wikipedia" title="Virtual private server"&gt;VPS&lt;/a&gt; server) and have udev installed. You try to connect to the server with shh.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The problem:&lt;/h3&gt;You get this annoying message: "PTY allocation request failed on channel 0"&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The reason:&lt;/h3&gt;udev has compatibility problems with OpenVZ. So when you have for example a CentOS system and you try to install ImageMagik the yum package manager also installs the udev package. This leads to problematic setup of the pty devices (/dev/pty, /dev/ptmx, etc) on boot.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The temporary fix:&lt;/h3&gt;&lt;script src="http://gist.github.com/251010.js"&gt;&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;The permanent fix:&lt;/h3&gt;Make a script with the previous commands (excluding the ssh part) and call it from the /etc/rc.d/rc.local. &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Thanks to:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.asteriosk.gr/blog/2009/02/20/pty-allocation-request-failed-on-channel-0/"&gt;Asterios' post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cheapvps.co.uk/"&gt;CheapVPS.co.uk&lt;/a&gt; support team&lt;/li&gt;
&lt;li&gt;The guys at &lt;a href="http://forum.openvz.org/index.php?t=msg&amp;amp;goto=30337"&gt;OpenVZ forums&lt;/a&gt; and &lt;a href="http://forums.vpslink.com/centos/1808-blacklist-udev-yum-prevent-pty-errors.html"&gt;VPSLink forums&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Hope this helps - once and for all :) &lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/982a8ae9-04a0-496c-a44f-85683a979476/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=982a8ae9-04a0-496c-a44f-85683a979476" style="border: medium none ; float: right;"&gt;&lt;/a&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-2788526001720208809?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=nhMcRD-ulTg:QplJALSTeSc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=nhMcRD-ulTg:QplJALSTeSc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=nhMcRD-ulTg:QplJALSTeSc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=nhMcRD-ulTg:QplJALSTeSc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/nhMcRD-ulTg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/2788526001720208809/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2009/12/pty-allocation-request-failed-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2788526001720208809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2788526001720208809?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/nhMcRD-ulTg/pty-allocation-request-failed-on.html" title="PTY allocation request failed on channel 0: CentOS, OpenVZ and udev problem." /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2009/12/pty-allocation-request-failed-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEICQ3s4eyp7ImA9WxNWEkQ.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-7466666096778657416</id><published>2009-10-11T23:22:00.001+03:00</published><updated>2009-10-11T23:22:42.533+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-11T23:22:42.533+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Metric_fu" /><category scheme="http://www.blogger.com/atom/ns#" term="Redmine" /><category scheme="http://www.blogger.com/atom/ns#" term="Announcements" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby 1.9" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>{Weekly update} Roodi, metric_fu, jQuery autocomplete &amp; other</title><content type="html">&lt;div class="zemanta-img zemanta-action-dragged" style="display: block; float: right; margin: 1em; width: 152px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Image:Ruby-%28programming-language%29-logo-2008.png"&gt;&lt;img alt="Official Ruby logo" height="163" src="http://upload.wikimedia.org/wikipedia/en/d/de/Ruby-%28programming-language%29-logo-2008.png" style="border: medium none; display: block;" width="142" /&gt;&lt;/a&gt;Image via &lt;a href="http://en.wikipedia.org/wiki/Image:Ruby-%28programming-language%29-logo-2008.png"&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;After putting my finger on many jars this week, here's a short status update on some forked projects (which hopefully will be merged back into the original repos) :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://roodi.rubyforge.org/"&gt;Roodi&lt;/a&gt; is Ruby 1.9 ready now and &lt;a href="http://runcoderun.com/nikosd/roodi/builds/789b1dd5a0b82173b38e39a9f707d4353272c7c0/1/ruby_191"&gt;here's the proof&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://metric-fu.rubyforge.org/"&gt;Metric_fu&lt;/a&gt; got a bunch of new features like &lt;a href="http://dcov.rubyforge.org/"&gt;DCov&lt;/a&gt; support, an (almost) new template and various other stuff merged from other fellow githubers. Still under development and not really yet for merging back on the master repo but we will get there soon i hope :) Until then you can check it out &lt;a href="http://github.com/nikosd/metric_fu"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/ReinH/jquery-autocomplete"&gt;jQuery autocomplete&lt;/a&gt; (from Yehuda Katz and Rein Hanrichs) got some love with a version bump including various fixes and improvements plus a proper example / documentation / test page (thanks Rein for merging these changes back!).&lt;/li&gt;
&lt;li&gt;After upgrading &lt;a class="zem_slink" href="http://www.redmine.org/" rel="homepage" title="Redmine"&gt;Redmine&lt;/a&gt; at work to trunk r29xx which added support for Rails 2.3.4 some plugins where broken (charts, graphs and schedules) so we had to update them too. You can find these patched versions on &lt;a href="http://github.com/nikosd"&gt;my github account&lt;/a&gt; but I guess sooner or later the maintainers of the original repos will merge these changes back.&lt;/li&gt;
&lt;/ul&gt;Cheers to everyone and have a nice week :) &lt;br /&gt;
&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/02cfeffe-aaf2-4288-ab85-91ebb9fe7637/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=02cfeffe-aaf2-4288-ab85-91ebb9fe7637" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-7466666096778657416?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=1v_yJmb8uSE:d5l8SC0jzzc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=1v_yJmb8uSE:d5l8SC0jzzc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=1v_yJmb8uSE:d5l8SC0jzzc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=1v_yJmb8uSE:d5l8SC0jzzc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/1v_yJmb8uSE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/7466666096778657416/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2009/10/weekly-update-roodi-metricfu-jquery.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/7466666096778657416?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/7466666096778657416?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/1v_yJmb8uSE/weekly-update-roodi-metricfu-jquery.html" title="{Weekly update} Roodi, metric_fu, jQuery autocomplete &amp; other" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2009/10/weekly-update-roodi-metricfu-jquery.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4HRXs4eip7ImA9WxNWEkU.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-6052630856674049630</id><published>2009-10-11T18:27:00.002+03:00</published><updated>2009-10-11T22:22:14.532+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-11T22:22:14.532+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="News" /><category scheme="http://www.blogger.com/atom/ns#" term="Events" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Open Source" /><category scheme="http://www.blogger.com/atom/ns#" term="Announcements" /><title>This week, Athens is on fire!</title><content type="html">Even though I know that by the end of the next week (Oct 12 - 19) I'll be almost dead after not resting at all, I'm pretty exited by the prospects of it! Here's the list of the events taking place in the heart of Athens:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Wed 14 - Sun 18: &lt;a href="http://www.athensdigitalweek.org/"&gt;Athens Digital Week 2009&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Thu 15: &lt;a href="http://opencoffee.gr/2009/10/09/oc-ath-xxvi-call/"&gt;Open Coffee Athens XXVI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fri 16: &lt;a href="http://rubyst.es/news/show/3"&gt;Ruby Meetup #2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;more details now:&lt;br /&gt;
&lt;h3&gt;Athens Digital Week 2009&lt;/h3&gt;An annual event organized by the city of Athens in it's second year of existence. This year, alongside some giant names in Open Source (&lt;a href="http://labs.mozilla.com/"&gt;Mozilla labs&lt;/a&gt;, &lt;a href="http://www.android.com/"&gt;Android&lt;/a&gt;, &lt;a href="http://fedoraproject.org/"&gt;Fedora&lt;/a&gt;, &lt;a class="zem_slink" href="http://www.gentoo.org/" rel="homepage" title="Gentoo Linux"&gt;Gentoo&lt;/a&gt;, &lt;a class="zem_slink" href="http://www.debian.org/" rel="homepage" title="Debian"&gt;Debian&lt;/a&gt;, &lt;a href="http://el.wikipedia.org/"&gt;Wikipedia Greece&lt;/a&gt;, &lt;a class="zem_slink" href="http://www.opensolaris.com/" rel="homepage" title="OpenSolaris"&gt;OpenSolaris&lt;/a&gt;, &lt;a class="zem_slink" href="http://openerp.com/" rel="homepage" title="OpenERP"&gt;OpenERP&lt;/a&gt;, et al) our &lt;a href="http://rubyst.es/"&gt;local ruby community&lt;/a&gt; will have a chance to present the language and the frameworks to a wider audience of "techies", programmers or not :)&lt;br /&gt;
&lt;br /&gt;
We will be there on Thursday from 16:00 to 18:00 with this topic list so far:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;From PHP to Ruby On Rails [ &lt;a class="external" href="http://jimeh.me/"&gt;Jim Myhreberg&lt;/a&gt; ]&lt;/li&gt;
&lt;li&gt;A blink into the Rails magic [ &lt;a href="http://blog.nikosd.com/"&gt;me&lt;/a&gt; ]&lt;/li&gt;
&lt;li&gt;Ruby on Rails and Web on Python [ &lt;a class="external" href="http://jon.is.emotionull.com/"&gt;Jon Romero&lt;/a&gt; ]&lt;/li&gt;
&lt;/ul&gt;join us there for a coffee / beer and follow the discussion (in greek) on the &lt;a href="http://groups.google.com/group/ruby-hellug/browse_thread/thread/1bde1afc2450ecdc"&gt;ruby-hellug mailing list&lt;/a&gt;!&lt;br /&gt;
&lt;h3&gt;OpenCoffee Athens (XXVI)&lt;/h3&gt;Right after the presentations at the DigitalWeek we are off to Benaki Museum for the &lt;a href="http://opencoffee.gr/2009/10/09/oc-ath-xxvi-call/"&gt;26th Athenian OpenCoffee meeting&lt;/a&gt; for three talks from &lt;a href="http://socialwhale.com/"&gt;successful&lt;/a&gt; &lt;a href="http://www.viva.gr/"&gt;tech&lt;/a&gt; &lt;a href="http://www.mindworks.gr/"&gt;start-ups&lt;/a&gt; in Greece.&lt;br /&gt;
&lt;h3&gt;Ruby Meetup #2&lt;/h3&gt;Almost a year after the successful "Athens On Rails" gathering (see the videos &lt;a href="http://vimeo.com/user893223/videos/sort:date"&gt;here&lt;/a&gt;), our second meetup (finally!) will take place on the upcoming friday at the Technical University of Piraeus with the following topics:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Deploying Rails applications on the appengine using JRuby [ &lt;a class="external" href="http://6pna/"&gt;PanosJee&lt;/a&gt;) ]&lt;/li&gt;
&lt;li&gt;Alternative ruby web frameworks (Ramaze/Sinatra/...) [ &lt;a class="external" href="http://github.com/vtypal"&gt;vtypal&lt;/a&gt; ]&lt;/li&gt;
&lt;li&gt;Μetaprogramming with Ruby [&lt;a class="external" href="http://jon.is.emotionull.com/"&gt;Jon Romero&lt;/a&gt; ]&lt;/li&gt;
&lt;li&gt;How-to make a Rails plugin [ &lt;a class="external" href="http://jimeh.me/"&gt;Jim Myhreberg&lt;/a&gt; ]&lt;/li&gt;
&lt;li&gt;Open Discussion &amp;amp; QA&lt;/li&gt;
&lt;/ul&gt;see &lt;a href="http://rubyst.es/news/show/3"&gt;the official announcement&lt;/a&gt; and &lt;a href="http://groups.google.com/group/ruby-hellug/t/f995d3ea483b00b"&gt;the discussion on the mailing list&lt;/a&gt; (also both in Greek)&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
see you on any (or all) of these events!&lt;br /&gt;
&lt;br /&gt;
&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/3eaacc45-a8b3-4ef7-adca-77369d927fec/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=3eaacc45-a8b3-4ef7-adca-77369d927fec" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-6052630856674049630?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=kCGvyvcc-nI:1qSjbeUlI3Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=kCGvyvcc-nI:1qSjbeUlI3Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kCGvyvcc-nI:1qSjbeUlI3Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=kCGvyvcc-nI:1qSjbeUlI3Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/kCGvyvcc-nI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/6052630856674049630/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2009/10/this-week-athens-is-on-fire.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/6052630856674049630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/6052630856674049630?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/kCGvyvcc-nI/this-week-athens-is-on-fire.html" title="This week, Athens is on fire!" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2009/10/this-week-athens-is-on-fire.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MASHk9eip7ImA9WxNXFUU.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-2689646727709523884</id><published>2009-10-03T17:19:00.005+03:00</published><updated>2009-10-03T17:50:49.762+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-03T17:50:49.762+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac" /><category scheme="http://www.blogger.com/atom/ns#" term="Gmail" /><title>GMail Notifier replacements</title><content type="html">I never really liked the &lt;a href="http://toolbar.google.com/gmail-helper/notifier_mac.html"&gt;official GMail notifier&lt;/a&gt; for the Mac for the following very simple reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;No &lt;a class="zem_slink" href="http://growl.info/" title="Growl (software)" rel="homepage"&gt;Growl&lt;/a&gt; integration&lt;/li&gt;&lt;li&gt;Support for only one account&lt;/li&gt;&lt;/ol&gt;So, what are the alternatives?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://ashchan.com/projects/gmail-notifr"&gt;Gmail Notifr&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vibealicious.com/apps/notify/"&gt;Notify&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Plus points for both are the negatives of the official app which means support for multiple email accounts and Growl integration but i guess i'm leaning to #1 in the list for two reasons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Google Hosted Apps support (even though the developers of the Notify app said &lt;a href="http://vibealicious.com/blog/development/some-news-for-google-apps-users-aka-notify-1-1-and-beyond/"&gt;v.1.1 will support Google Apps&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/ashchan/gmail-notifr/tree/master"&gt;Open-source&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;If you have any similar tool in mind feel free to write a comment :)&lt;br /&gt;&lt;br /&gt;Cheers&lt;br /&gt; &lt;div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/81f7f7f0-f36c-44bd-ac93-58ef7d3a78f2/" title="Reblog this post [with Zemanta]"&gt;&lt;img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=81f7f7f0-f36c-44bd-ac93-58ef7d3a78f2" alt="Reblog this post [with Zemanta]" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-2689646727709523884?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=jGiHBPlNdaU:HpMrtS0TZRo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=jGiHBPlNdaU:HpMrtS0TZRo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jGiHBPlNdaU:HpMrtS0TZRo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=jGiHBPlNdaU:HpMrtS0TZRo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/jGiHBPlNdaU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/2689646727709523884/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2009/10/gmail-notifier-replacements.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2689646727709523884?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2689646727709523884?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/jGiHBPlNdaU/gmail-notifier-replacements.html" title="GMail Notifier replacements" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2009/10/gmail-notifier-replacements.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8BQX49cSp7ImA9WxRVFkU.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-5446299634963444617</id><published>2008-11-14T19:04:00.004+02:00</published><updated>2008-11-14T19:14:10.069+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-14T19:14:10.069+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Hacks" /><category scheme="http://www.blogger.com/atom/ns#" term="Unicode" /><title>Convert Greek Unicode strings to "greeklish" in ruby</title><content type="html">After digging around Ruby's Unicode handling (almost none, at least in 1.8) I found a way to transform Greek strings into the latin equivalents (also know as "greek-lish"). Here's a snippet which adds two methods on the String class: "greeklish" and the banged version "greeklish!". To use it you'll need RubyGems and ActiveSupport (if you have rails these are already included).&lt;br /&gt;&lt;br /&gt;There it goes (you won't be able to see the code from your feedreader probably - sorry for that :/ ):&lt;br /&gt;&lt;script src="http://gist.github.com/24986.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-5446299634963444617?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=_QtceX1O5LE:JthR_3PqXG8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=_QtceX1O5LE:JthR_3PqXG8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=_QtceX1O5LE:JthR_3PqXG8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=_QtceX1O5LE:JthR_3PqXG8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/_QtceX1O5LE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/5446299634963444617/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/11/convert-greek-unicode-strings-to.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/5446299634963444617?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/5446299634963444617?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/_QtceX1O5LE/convert-greek-unicode-strings-to.html" title="Convert Greek Unicode strings to &quot;greeklish&quot; in ruby" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/11/convert-greek-unicode-strings-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IERH06eSp7ImA9WxRVF0g.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-8044348665172546908</id><published>2008-11-11T13:07:00.004+02:00</published><updated>2008-11-15T16:31:45.311+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-15T16:31:45.311+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="i18n" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Greek localization for Rails with Globalite plugin</title><content type="html">&lt;span style="font-style: italic; font-weight: bold;"&gt;updated&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I just finished translating the &lt;a href="http://github.com/mattetti/globalite/tree/master"&gt;Globalite plugin&lt;/a&gt; in Greek and I'm really happy about it. I've already sent a pull request to &lt;span class="info"&gt;&lt;a href="http://railsontherun.com/"&gt;Matt Aimonetti&lt;/a&gt; &lt;/span&gt;and &lt;del&gt;hopefully it will get merged soon&lt;/del&gt; it is now merged in the &lt;a href="http://github.com/mattetti/globalite/commit/3525504a30645b6234361bc6c92f5b0c77c6d5f7"&gt;master globalite repo&lt;/a&gt; on github. &lt;del&gt;You can check the language file &lt;a href="http://github.com/nikosd/globalite/tree/master/lang/rails/el.yml"&gt;here&lt;/a&gt;&lt;/del&gt;&lt;i&gt;See the master repo&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Now that the base is established, I can continue and localize the &lt;a href="http://www.communityengine.org/"&gt;Community Engine&lt;/a&gt; app :).&lt;br /&gt;&lt;br /&gt;P.S.: Btw, feel free to use this file in other localization situations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-8044348665172546908?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=jO8BPaaQGb0:XZgDd4H7dnA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=jO8BPaaQGb0:XZgDd4H7dnA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=jO8BPaaQGb0:XZgDd4H7dnA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=jO8BPaaQGb0:XZgDd4H7dnA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/jO8BPaaQGb0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/8044348665172546908/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/11/greek-localization-for-rails-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/8044348665172546908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/8044348665172546908?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/jO8BPaaQGb0/greek-localization-for-rails-with.html" title="Greek localization for Rails with Globalite plugin" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/11/greek-localization-for-rails-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIGRHs6eip7ImA9WxRWFk4.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-230873515522213443</id><published>2008-11-02T16:11:00.002+02:00</published><updated>2008-11-02T16:35:25.512+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-02T16:35:25.512+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Design" /><category scheme="http://www.blogger.com/atom/ns#" term="Hacks" /><category scheme="http://www.blogger.com/atom/ns#" term="CSS" /><title>How to fake the :first-letter CSS selector with javascript</title><content type="html">I was playing with &lt;a href="http://wiki.novemberborn.net/sifr3"&gt;sIFR 3&lt;/a&gt; for a client's project and I was trying to use the :first-letter CSS selector inside the sIFR replaced flash text. &lt;a href="http://wiki.novemberborn.net/sifr3/Styling"&gt;If I get it right&lt;/a&gt; this is not supported so I made the following hack:&lt;br /&gt;&lt;br /&gt;Suppose that we have the following markup:&lt;br /&gt;&lt;script src="http://gist.github.com/21697.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Inside the head part of the html page (or in an external js file that is loaded before the sIFR activation) I put this small script:&lt;br /&gt;&lt;script src="http://gist.github.com/21699.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Now, all we have to do when we call sIFR.replace is to add the following CSS rule:&lt;br /&gt;&lt;script src="http://gist.github.com/21700.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Let's wrap it up now, shall we?&lt;br /&gt;&lt;script src="http://gist.github.com/21701.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Obviously, for the above to work you will need the appropriate swf files and a basic knowledge of how to use sIFR. For more info you can &lt;a href="http://wiki.novemberborn.net/sifr3/How+to+use"&gt;take a look at this tutorial&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Disclaimer: I know this is not the cleanest solution possible but it's a quick and dirty way of getting the functionality you want on some specific headings, etc... Please don't copy &amp;amp; paste the previous snippet cause there are high chances that it &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;won't&lt;/span&gt;&lt;span style="font-style: italic;"&gt; work! Customize it for your own needs and requirements and let me know of any recommendations/suggestions :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-230873515522213443?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=j85Z__g2pvk:2-hezLU2nqo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=j85Z__g2pvk:2-hezLU2nqo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j85Z__g2pvk:2-hezLU2nqo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=j85Z__g2pvk:2-hezLU2nqo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/j85Z__g2pvk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/230873515522213443/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/11/how-to-fake-first-letter-css-selector.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/230873515522213443?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/230873515522213443?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/j85Z__g2pvk/how-to-fake-first-letter-css-selector.html" title="How to fake the :first-letter CSS selector with javascript" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/11/how-to-fake-first-letter-css-selector.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEFR3syeyp7ImA9WxRXGEg.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-4286732241363411213</id><published>2008-10-24T16:58:00.003+03:00</published><updated>2008-10-24T17:13:36.593+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-24T17:13:36.593+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="News" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>Rails 2.2 is (almost) here</title><content type="html">Rails 2.2 RC1 has just been released. Have you been waiting for this for some time now, while reading all these posts about new features introduced in this version (like &lt;a href="http://almosteffortless.com/2008/07/21/simple-localization-in-rails-22/"&gt;I18n&lt;/a&gt;, &lt;a href="http://m.onkey.org/2008/10/23/thread-safety-for-your-rails"&gt;thread-safety&lt;/a&gt;, Ruby 1.9 compatibility etc..)? &lt;a href="http://weblog.rubyonrails.com/2008/10/24/rails-2-2-rc1-i18n-thread-safety-docs-etag-last-modified"&gt;Read the official announcement&lt;/a&gt;, &lt;a href="http://guides.rubyonrails.org/2_2_release_notes.html"&gt;see the comprehensive release notes&lt;/a&gt;, grab the code[1] and start hacking with Ruby 1.9!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;And maybe you'd want to put the &lt;a href="http://www.espace.com.eg/neverblock/blog/2008/08/28/neverblock-mysql-support/"&gt;async MySQL driver&lt;/a&gt; into the mix bowl - just for super fun times ;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;br /&gt;[1]: &lt;/span&gt;&lt;span style="font-size:85%;"&gt;by running &lt;code&gt;gem install rails -s http://gems.rubyonrails.org -v 2.2.0&lt;/code&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-4286732241363411213?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=Neh3NxqYP30:gDXOtYIjKS0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=Neh3NxqYP30:gDXOtYIjKS0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=Neh3NxqYP30:gDXOtYIjKS0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=Neh3NxqYP30:gDXOtYIjKS0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/Neh3NxqYP30" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/4286732241363411213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/10/rails-22-is-almost-here.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4286732241363411213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4286732241363411213?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/Neh3NxqYP30/rails-22-is-almost-here.html" title="Rails 2.2 is (almost) here" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/10/rails-22-is-almost-here.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YCR388fip7ImA9WxRXF0U.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-9053245553069666423</id><published>2008-10-23T22:00:00.002+03:00</published><updated>2008-10-23T22:12:46.176+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-23T22:12:46.176+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Rails" /><title>phpMyAdmin Ruby on Rails alternative: rbDB</title><content type="html">MySQL gets some love and the result is finally a phpMyAdmin replacement written in Ruby On Rails. It's name is rbDB and it's one of the apps that got built in 48 hours during this year's &lt;a href="http://sociallibrary.vote.railsrumble.com/"&gt;Rails Rumble&lt;/a&gt;. The project is currently in something like private alpha but hopefully the source code will be released soon. Take a look at &lt;a href="http://dev.massivebraingames.com/past/2008/10/21/a_db_admin_interface_written/"&gt;the official announcement and the screencast of rbDB&lt;/a&gt; and give it a try on the &lt;a href="http://sociallibrary.r08.railsrumble.com/"&gt;Rails Rumble deployment&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Now, show us the source code... ;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-9053245553069666423?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=ftj-Xm9quA8:OkJzxNWs6pI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=ftj-Xm9quA8:OkJzxNWs6pI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ftj-Xm9quA8:OkJzxNWs6pI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=ftj-Xm9quA8:OkJzxNWs6pI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/ftj-Xm9quA8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/9053245553069666423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/10/phpmyadmin-ruby-on-rails-alternative.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/9053245553069666423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/9053245553069666423?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/ftj-Xm9quA8/phpmyadmin-ruby-on-rails-alternative.html" title="phpMyAdmin Ruby on Rails alternative: rbDB" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/10/phpmyadmin-ruby-on-rails-alternative.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYDRXo9fip7ImA9WxRXF0s.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-2218856553823491213</id><published>2008-10-20T16:28:00.010+03:00</published><updated>2008-10-23T16:22:54.466+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-23T16:22:54.466+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Books" /><category scheme="http://www.blogger.com/atom/ns#" term="Design" /><category scheme="http://www.blogger.com/atom/ns#" term="HCI" /><title>Books currently reading (Web design, SEO, Programming)</title><content type="html">Here are some books I'm currently reading:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Visual Design for the Modern Web, New Riders Press, Nov 2007&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0321515382?ie=UTF8&amp;tag=nid06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321515382"&gt;&lt;img border="0" src="http://lh6.ggpht.com/demisone/SQB5HQnAvNI/AAAAAAAAARw/wLY6Hdbm4AI/s144/51CsIkGRNVL._SL160_.jpg"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nid06-20&amp;l=as2&amp;o=1&amp;a=0321515382" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Website Optimization - Speed, Search Engines &amp;amp; Conversion Rate Secrets, O'Reilly,Jul 2008&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596515081?ie=UTF8&amp;tag=nid06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596515081"&gt;&lt;img border="0" src="http://lh4.ggpht.com/demisone/SQB5HV7uUyI/AAAAAAAAASI/SDyngKa8P_A/s144/41BXrnx65cL._SL160_.jpg"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nid06-20&amp;l=as2&amp;o=1&amp;a=0596515081" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Human Computer Interaction: Research In Web Design and Evaluation, IGI Global, Aug 2006&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/1599042460?ie=UTF8&amp;tag=nid06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1599042460"&gt;&lt;img border="0" src="http://lh6.ggpht.com/demisone/SQB5HTl8X3I/AAAAAAAAASA/LigvXq_Wd68/s144/51YEZDE2J9L._SL160_.jpg"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nid06-20&amp;l=as2&amp;o=1&amp;a=1599042460" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Design Patterns in Ruby, Addison Wesley, Dec 2007&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0321490452?ie=UTF8&amp;tag=nid06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321490452"&gt;&lt;img border="0" src="http://lh4.ggpht.com/demisone/SQB5Heuax-I/AAAAAAAAAR4/9OaQ6UqJoXg/s144/51NG5mF-SAL._SL160_.jpg"&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nid06-20&amp;l=as2&amp;o=1&amp;a=0321490452" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://www.assoc-amazon.com/s/link-enhancer?tag=nid06-20&amp;o=1"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;noscript&gt;&lt;br /&gt;    &lt;img src="http://www.assoc-amazon.com/s/noscript?tag=nid06-20" alt="" /&gt;&lt;br /&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;br /&gt;Stay tuned for reviews. So far I like all of them :)&lt;br /&gt;More details soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-2218856553823491213?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=zFKYBdsVVl4:EjWjizJqn1M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=zFKYBdsVVl4:EjWjizJqn1M:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=zFKYBdsVVl4:EjWjizJqn1M:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=zFKYBdsVVl4:EjWjizJqn1M:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/zFKYBdsVVl4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/2218856553823491213/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/10/books-currently-reading-web-design-seo.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2218856553823491213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2218856553823491213?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/zFKYBdsVVl4/books-currently-reading-web-design-seo.html" title="Books currently reading (Web design, SEO, Programming)" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/demisone/SQB5HQnAvNI/AAAAAAAAARw/wLY6Hdbm4AI/s72-c/51CsIkGRNVL._SL160_.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/10/books-currently-reading-web-design-seo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFRXYzeCp7ImA9WxRQFkg.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-4499250478434397962</id><published>2008-10-10T16:58:00.010+03:00</published><updated>2008-10-10T19:35:14.880+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-10T19:35:14.880+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><title>Beautiful Bar Charts With Ruby and Gruff (Easy and Simple)</title><content type="html">I wanted to plot some simple bar charts recently and I fell on &lt;a href="http://nubyonrails.com/pages/gruff"&gt;Gruff&lt;/a&gt; once again. Since the examples there didn't have any info about bar charts it took me some time (ok - five with ten minutes :D) to find out that you can use them just like line charts but here are some examples anyway:&lt;br /&gt;&lt;br /&gt;A very simple bar chart:&lt;br /&gt;&lt;script src="http://gist.github.com/16059.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3ts4VAOHUpY/SO9rKB-sHXI/AAAAAAAAAQo/ud18XOfA8SQ/s1600-h/graph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3ts4VAOHUpY/SO9rKB-sHXI/AAAAAAAAAQo/ud18XOfA8SQ/s320/graph.png" alt="" id="BLOGGER_PHOTO_ID_5255537110238895474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ok, let's see something more advanced now:&lt;br /&gt;&lt;script src="http://gist.github.com/16060.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3ts4VAOHUpY/SO9rRZKaKFI/AAAAAAAAAQw/QK6EdqKOoFA/s1600-h/a_more_advanced_graph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3ts4VAOHUpY/SO9rRZKaKFI/AAAAAAAAAQw/QK6EdqKOoFA/s320/a_more_advanced_graph.png" alt="" id="BLOGGER_PHOTO_ID_5255537236721150034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And now a bar chart with most of the options changed:&lt;br /&gt;&lt;script src="http://gist.github.com/16064.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3ts4VAOHUpY/SO9rbiHtaUI/AAAAAAAAAQ4/xX03-IBkE3g/s1600-h/advanced_graph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3ts4VAOHUpY/SO9rbiHtaUI/AAAAAAAAAQ4/xX03-IBkE3g/s320/advanced_graph.png" alt="" id="BLOGGER_PHOTO_ID_5255537410924439874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For even more options you can check &lt;a href="http://gruff.rubyforge.org/classes/Gruff/Base.html"&gt;Gruff::Base documentation&lt;/a&gt; or &lt;a href="http://gruff.rubyforge.org/"&gt;the whole Gruff API&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Have fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-4499250478434397962?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=CVHbA5EuYpw:KIa8EUTQeJc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=CVHbA5EuYpw:KIa8EUTQeJc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=CVHbA5EuYpw:KIa8EUTQeJc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=CVHbA5EuYpw:KIa8EUTQeJc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/CVHbA5EuYpw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/4499250478434397962/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/10/beautiful-bar-charts-with-ruby-and.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4499250478434397962?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4499250478434397962?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/CVHbA5EuYpw/beautiful-bar-charts-with-ruby-and.html" title="Beautiful Bar Charts With Ruby and Gruff (Easy and Simple)" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3ts4VAOHUpY/SO9rKB-sHXI/AAAAAAAAAQo/ud18XOfA8SQ/s72-c/graph.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/10/beautiful-bar-charts-with-ruby-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQESHY6cSp7ImA9WxRRFUw.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-1905050774202273597</id><published>2008-09-27T12:56:00.010+03:00</published><updated>2008-09-27T13:45:09.819+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-27T13:45:09.819+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title>An interesting online learning community: LearnHub</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://assets2.learnhub.com/images/learnhub_logo_100x48.png?1221847260"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 91px; height: 42px;" src="http://assets2.learnhub.com/images/learnhub_logo_100x48.png?1221847260" alt="" border="0" /&gt;&lt;/a&gt;I just recently discovered &lt;a href="http://learnhub.com/"&gt;LearnHub&lt;/a&gt;, a really nice idea (and implementation) of an online learning (and teaching) community. Taken from &lt;a href="http://learnhub.com/about"&gt;LearnHub's about page&lt;/a&gt;:&lt;quote&gt;&lt;br /&gt;&lt;h4&gt;&lt;br /&gt;&lt;/h4&gt;&lt;h4&gt;LearnHub in 30 Words:&lt;/h4&gt;&lt;p&gt;LearnHub: for people who love learning and sharing knowledge with others. It is a set of tools that make learning online fun and engaging, and teaching online easy and effective.&lt;/p&gt;&lt;br /&gt;&lt;/quote&gt;The site is growing day by day (and I've been a member for only one week) and you can find &lt;a href="http://learnhub.com/communities"&gt;learning communities for every taste&lt;/a&gt; (including of course &lt;a href="http://ruby-programming.learnhub.com/"&gt;Ruby&lt;/a&gt;, &lt;a href="http://rails.learnhub.com/"&gt;Rails&lt;/a&gt;, &lt;a href="http://merb.learnhub.com/"&gt;Merb&lt;/a&gt;, &lt;a href="http://compsci.learnhub.com/"&gt;CS&lt;/a&gt; and company) some with plenty resources and others with less. Also &lt;a href="http://savvica.com/"&gt;the people behind LearnHub&lt;/a&gt; seem to be active members of the Ruby/Rails ecosystem (too bad &lt;a href="http://rails.savvica.com/"&gt;their blog&lt;/a&gt; has been inactive for some time) and the site itself is built with rails which is one more reason to visit it if you are engaged somehow with ruby yourself :)&lt;br /&gt;&lt;br /&gt;Now, two general, non-technical but quite interesting lessons I recently discovered there:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ruby-programming.learnhub.com/lesson/page/1061-worlds-best-rails-hiring-process"&gt;World's Best Rails Hiring Process&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ruby-programming.learnhub.com/lesson/page/5028-ruby-coding-convention"&gt;Ruby Coding Convention&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Go check the site and see yourself if you like it or not. If you like it why don't you write some lessons, tests or add trivia questions? Feel free to add &lt;a href="http://learnhub.com/users/nikosd"&gt;me&lt;/a&gt; as a contact there if you want!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-1905050774202273597?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=621gX9Vxqmc:M9aQHrZGpeY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=621gX9Vxqmc:M9aQHrZGpeY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=621gX9Vxqmc:M9aQHrZGpeY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=621gX9Vxqmc:M9aQHrZGpeY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/621gX9Vxqmc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/1905050774202273597/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/09/interesting-learning-community-and-some.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/1905050774202273597?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/1905050774202273597?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/621gX9Vxqmc/interesting-learning-community-and-some.html" title="An interesting online learning community: LearnHub" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/09/interesting-learning-community-and-some.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04MRn0_eCp7ImA9WxBXE04.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-8749033225034553311</id><published>2008-09-16T16:12:00.011+03:00</published><updated>2010-01-24T15:33:07.340+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-24T15:33:07.340+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><category scheme="http://www.blogger.com/atom/ns#" term="Jobs" /><title>Ruby &amp; Rails Jobs (in Europe, USA, and worldwide)</title><content type="html">I'm somewhat in the search for a job so I was surfing around the net trying to find some Ruby/Rails jobs listings preferably in Europe and these are the sites I found most useful (in not particular order):&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;General job-seeking sites with plenty (or some) Ruby/Rails postings:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.startuply.com/"&gt;Startuply: Startup companies. Startup jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jobs.smashingmagazine.com/"&gt;Smashing Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.freshwebjobs.com/"&gt;Freshwebjobs.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.startupjobs.eu/"&gt;StartupJobs.eu&lt;/a&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.monster.co.uk/geo/siteselection.asp"&gt;Monster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.careerjet.co.uk/search/jobs?s=ruby&amp;amp;l=&amp;amp;ct=&amp;amp;cp=&amp;amp;sort=relevance&amp;amp;xs="&gt;Careerjet.co.uk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cwjobs.co.uk/"&gt;IT Jobs at CWJobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.totaljobs.com/JobSearch/Results.aspx?Keywords=ruby&amp;amp;Industry=1&amp;amp;Radius=5"&gt;Totaljobs.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jumptojobs.co.uk/Jobs.aspx?q=ruby"&gt;JumpToJobs.co.uk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.experteer.com/"&gt;Job offers starting at € 60,000 and Headhunters on Experteer.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;Ruby/Rails specific:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://jobs.37signals.com/categories/2/jobs"&gt;37Signals Job Board: Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gigs.37signals.com/categories/2/gigs"&gt;37Signals Gig Board: Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jobs.rubynow.com/"&gt;jobs.rubynow.com: Ruby and Rails jobs!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://workingwithrails.com/browse/jobs"&gt;Working With Rails - Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.railspays.com/"&gt;RailsPays&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jobsonrails.com/"&gt;JobsOnRails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://agilewebdevelopment.com/rails-jobs"&gt;Ruby on Rails Jobs - Agile Web Development (list with links to other sites)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-style: italic;"&gt;Recruiters:&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://ruby-people.com/"&gt;Ruby on Rails (RoR) jobs and recruitment in UK and Europe - RubyPeople&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.rorpower.com/home"&gt;Ruby on Rails Recruiters at RoR Power - The Ruby on Rails Recruiting Specialist - RoR Recruitment Staffing Firm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ruby50.com/"&gt;Ruby50 - Ruby On Rails Recruitment in the UK&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;+Bonus link:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.itjobswatch.co.uk/jobs/london/ruby%20on%20rails.do"&gt;London Ruby on Rails Jobs, Average Salary for Ruby on Rails (RoR) Skills&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;br /&gt;
Feel free to add more links!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-8749033225034553311?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=R5VYFEeV5YU:vQOFOWpm-u0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=R5VYFEeV5YU:vQOFOWpm-u0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=R5VYFEeV5YU:vQOFOWpm-u0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=R5VYFEeV5YU:vQOFOWpm-u0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/R5VYFEeV5YU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/8749033225034553311/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/09/ruby-rails-jobs-in-europe-usa-and.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/8749033225034553311?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/8749033225034553311?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/R5VYFEeV5YU/ruby-rails-jobs-in-europe-usa-and.html" title="Ruby &amp; Rails Jobs (in Europe, USA, and worldwide)" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/09/ruby-rails-jobs-in-europe-usa-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQGSHs_eyp7ImA9WxRREE8.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-630038516233391105</id><published>2008-09-16T16:02:00.005+03:00</published><updated>2008-09-21T22:12:09.543+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-21T22:12:09.543+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MySQL" /><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><category scheme="http://www.blogger.com/atom/ns#" term="Computers" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Internet" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><title>Interesting weekly news</title><content type="html">Ok, these are from the previous week (at least) but in case you missed them be sure to check them out:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://labs.mozilla.com/2008/08/introducing-ubiquity/"&gt;Ubiquity&lt;/a&gt; from Mozilla Labs&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.google.com/chrome/intl/en/features.html"&gt;Chrome&lt;/a&gt;: Google's brand new browser based on WebKit&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.infoworld.com/article/08/08/26/Google_may_let_users_comment_on_rearrange_search_results_1.html"&gt;Google may add a "social" touch in search results&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.espace.com.eg/neverblock/blog/2008/08/28/neverblock-mysql-support/"&gt;Asynchronous Ruby driver for MySQL&lt;/a&gt; (this is BIG!)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/oscon2008/public/schedule/proceedings"&gt;Presentations from OSCON 2008&lt;/a&gt; (interesting at least)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-630038516233391105?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=bOsd1KLSQVY:cEHuzeeqcJU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=bOsd1KLSQVY:cEHuzeeqcJU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=bOsd1KLSQVY:cEHuzeeqcJU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=bOsd1KLSQVY:cEHuzeeqcJU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/bOsd1KLSQVY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/630038516233391105/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/09/interesting-weekly-news-week-may-be.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/630038516233391105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/630038516233391105?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/bOsd1KLSQVY/interesting-weekly-news-week-may-be.html" title="Interesting weekly news" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/09/interesting-weekly-news-week-may-be.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ANRHw4cCp7ImA9WxZbGUQ.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-3103184291762917726</id><published>2008-04-24T04:01:00.009+03:00</published><updated>2008-04-24T04:16:35.238+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-24T04:16:35.238+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JRuby" /><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="MacRuby" /><category scheme="http://www.blogger.com/atom/ns#" term="Rubinius" /><category scheme="http://www.blogger.com/atom/ns#" term="Benchmarks" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby 1.9" /><title>More speed comparisons of Ruby 1.8, Ruby 1.9, JRuby, Rubinius and MacRuby using Graticule</title><content type="html">&lt;p&gt;Here are some more benchmarks for a speed comparison between Ruby 1.8 (MRI), Ruby 1.9 (YARV), Rubinius and JRuby (&lt;a href="http://docs.codehaus.org/display/JRUBY/2008/04/22/JRuby+1.1.1+Released"&gt;brand new 1.1.1 release&lt;/a&gt;) and this time included in the package is also &lt;a href="http://trac.macosforge.org/projects/ruby/wiki/MacRuby"&gt;MacRuby&lt;/a&gt; 0.1 (r88 from the test branch to be precise) which I recently discovered (more on MacRuby soon in a seperate post ;) ). Also, this time is measured by the &lt;em&gt;Benchmark&lt;/em&gt; &lt;em&gt;lib&lt;/em&gt; and not from the &lt;em&gt;time&lt;/em&gt; utility.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The benchmark is based on the &lt;a href="http://graticule.rubyforge.org/"&gt;Graticule&lt;/a&gt; library which apart from the geocoding it provides (including Google, Yahoo, etc...) it also has the ability to calculate distances with various methods. For this benchmark, I first got the cooordinates of the &lt;a href="http://en.wikipedia.org/wiki/Largest_cities_of_the_European_Union_by_population_within_city_limits"&gt;biggest European cities&lt;/a&gt; and saved them as Locations (Graticule's class) in a YAML file. Then (and this is where the benchmark begins) I loaded them from the YAML file and calculated each pairs' distance (=&amp;gt; all cities with all cities) using the default method that Graticule uses. Here is the code&lt;strong&gt;*&lt;/strong&gt; :&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;require 'benchmark'&lt;br /&gt;require 'yaml'&lt;br /&gt;require File.dirname(__FILE__) + '/../../lib/graticule'&lt;br /&gt;&lt;br /&gt;class DistanceCalculationBenchmarks&lt;br /&gt;def self.european_cities(print_results = false)&lt;br /&gt;  Benchmark.bmbm do |x|&lt;br /&gt;    x.report("Largest european cities tour:") {&lt;br /&gt;     5.times do&lt;br /&gt;     &lt;br /&gt;       locations = YAML.load_file('cities.yml')&lt;br /&gt;     &lt;br /&gt;       costs = {}&lt;br /&gt;       locations.each_index do |loc|&lt;br /&gt;         costs[loc] = {}&lt;br /&gt;       end&lt;br /&gt;     &lt;br /&gt;       locations.each_index do |loc_a|&lt;br /&gt;         locations.each_index do |loc_b|&lt;br /&gt;&lt;br /&gt;           if loc_a != loc_b and costs[loc_a][loc_b] == nil&lt;br /&gt;             d = locations[loc_a].distance_to(locations[loc_b])&lt;br /&gt;             costs[loc_a][loc_b] = costs[loc_b][loc_a] = d&lt;br /&gt;           end&lt;br /&gt;         end&lt;br /&gt;       end&lt;br /&gt;     &lt;br /&gt;     end&lt;br /&gt;    }&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;DistanceCalculationBenchmarks.european_cities&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;and here are the results, first in raw text:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;Running Distance Calcutions using Graticule for Europe's 100 Largest cities with five iterations &amp;amp; rehearsal.&lt;br /&gt;Current time: Thu Apr 24 02:26:39 +0300 2008&lt;br /&gt;&lt;br /&gt;Ruby 1.8...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   1.270000   0.010000   1.280000 (  1.288320)&lt;br /&gt;-------------------------------------------------------- total: 1.280000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   1.270000   0.010000   1.280000 (  1.279469)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Ruby 1.9...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   1.270000   0.020000   1.290000 (  1.289113)&lt;br /&gt;-------------------------------------------------------- total: 1.290000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   1.280000   0.010000   1.290000 (  1.284230)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Rubinius (bbe450f22) (04/15/2008)...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:  46.258145   0.000000  46.258145 ( 46.258139)&lt;br /&gt;------------------------------------------------------- total: 46.258145sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:  46.594087   0.000000  46.594087 ( 46.594102)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;JRuby 1.1.1 with no flags...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   3.717000   0.000000   3.717000 (  3.718000)&lt;br /&gt;-------------------------------------------------------- total: 3.717000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   2.949000   0.000000   2.949000 (  2.950000)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;JRuby 1.1.1 and flags -J-server ...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   4.820000   0.000000   4.820000 (  4.821000)&lt;br /&gt;-------------------------------------------------------- total: 4.820000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   2.191000   0.000000   2.191000 (  2.191000)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;JRuby 1.1.1 and flags -X+C...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   3.701000   0.000000   3.701000 (  3.701000)&lt;br /&gt;-------------------------------------------------------- total: 3.701000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   3.030000   0.000000   3.030000 (  3.030000)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;JRuby 1.1.1 and flags -J-server -X+C...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   5.601000   0.000000   5.601000 (  5.601000)&lt;br /&gt;-------------------------------------------------------- total: 5.601000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   2.647000   0.000000   2.647000 (  2.647000)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;MacRuby 0.1...&lt;br /&gt;Rehearsal -----------------------------------------------------------------&lt;br /&gt;Largest european cities tour:   3.480000   0.340000   3.820000 (  5.454403)&lt;br /&gt;-------------------------------------------------------- total: 3.820000sec&lt;br /&gt;&lt;br /&gt;                                  user     system      total        real&lt;br /&gt;Largest european cities tour:   3.450000   0.330000   3.780000 (  5.241581)&lt;br /&gt;---------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;and in an obviously more elegant way :&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3ts4VAOHUpY/SA_dQkBstZI/AAAAAAAAAFE/OuLeets727E/s1600-h/rvm_comparisons_eu_cities_dist.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3ts4VAOHUpY/SA_dQkBstZI/AAAAAAAAAFE/OuLeets727E/s400/rvm_comparisons_eu_cities_dist.png" alt="" id="BLOGGER_PHOTO_ID_5192612171999917458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Ok, the first thing I noticed is that once again Rubinius is not really usable for this particular piece of code (which was also the case with my &lt;a href="http://nikos-d.blogspot.com/2008/04/speed-comparison-of-ruby-18-ruby-19.html"&gt;precious benchmark&lt;/a&gt;) :( JRuby was also slower by 50% (on average) which means that I am either  a bless or a curse for the Jruby team (it's the second time I give them "bad" results from a benchmark). Finally, the newcomer, aka MacRuby, is somewhere near (on average again) with JRuby. Not bad for a 0.1 release but it's not really that usable yet (&lt;s&gt;my previous benchmark doesn't work yet - &lt;del&gt;I created &lt;a href="http://trac.macosforge.org/projects/ruby/ticket/53"&gt;a nice ticket in their tracker&lt;/a&gt;... :D&lt;/del&gt;&lt;/s&gt; This bug seems to be fixed on  trunk, gonna check it out later).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The specs of the machine and the misc versions &lt;a href="http://nikos-d.blogspot.com/2008/04/speed-comparison-of-ruby-18-ruby-19.html"&gt;are the same with what they were before&lt;/a&gt; except the updated Rubinius.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; After I ploted the chart I noticed that in the code I was using a hash for the costs and not an array. I re-run the benchmark with an array instead of a hash and even though it didn't make any serious difference in Ruby 1.8, 1.9, Rubinius and MacRuby JRuby was half or a second faster than before. In case anyone wants the new results let me know and I will try to update the post (text and graph). Otherwise I leave it as it is with this note :) &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;*&lt;/strong&gt; : This may be the code for the benchmark but I also have a custom patched Graticule lib because Graticule requires the ActiveSupport gem which for the time being (and until 2.1 is released) it's incompatible with MacRuby. I think it was ok with the rest BUT it only uses 3-4 things from ActiveSupport and I prefer to copy them inside the Graticule and get rid of the "require 'active_support'" which makes the execution time increase about 10%. More on this also on a upcoming post. &lt;/p&gt;&lt;p&gt;So, that's it for the time being. Have fun...&lt;/p&gt;&lt;br /&gt;&lt;!-- #BeginTags --&gt;&lt;p class="tags"&gt;&lt;a href="http://www.technorati.com/tag/ruby" rel="tag"&gt;ruby&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/jruby" rel="tag"&gt;jruby&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/rubinius" rel="tag"&gt;rubinius&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/macruby" rel="tag"&gt;macruby&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/benchmarks" rel="tag"&gt;benchmarks&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/programming" rel="tag"&gt;programming&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/mri" rel="tag"&gt;mri&lt;/a&gt;,&lt;a href="http://www.technorati.com/tag/yarv" rel="tag"&gt;yarv&lt;/a&gt;&lt;/p&gt;&lt;!-- #EndTags --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-3103184291762917726?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=j1_eBQp4T7k:Va2Qii5V-sQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=j1_eBQp4T7k:Va2Qii5V-sQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=j1_eBQp4T7k:Va2Qii5V-sQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=j1_eBQp4T7k:Va2Qii5V-sQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/j1_eBQp4T7k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/3103184291762917726/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/04/more-speed-comparisons-of-ruby-18-ruby.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/3103184291762917726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/3103184291762917726?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/j1_eBQp4T7k/more-speed-comparisons-of-ruby-18-ruby.html" title="More speed comparisons of Ruby 1.8, Ruby 1.9, JRuby, Rubinius and MacRuby using Graticule" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3ts4VAOHUpY/SA_dQkBstZI/AAAAAAAAAFE/OuLeets727E/s72-c/rvm_comparisons_eu_cities_dist.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/04/more-speed-comparisons-of-ruby-18-ruby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGSHY-fSp7ImA9WxZbF0Q.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-923148002289444860</id><published>2008-04-21T18:28:00.002+03:00</published><updated>2008-04-21T18:55:29.855+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-21T18:55:29.855+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Links" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby 1.9" /><title>Migrating to Ruby 1.9 (YARV): Posts you have to read!</title><content type="html">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;So, you are reading everywhere that Ruby 1.9 is faster than 1.8 (&lt;a href="http://nikos-d.blogspot.com/2008/04/speed-comparison-of-ruby-18-ruby-19.html"&gt;even I say so!&lt;/a&gt; :D ) and you want to give it a try or even port your existing code to it. Where should you start from? Here's a collection of links to posts, pages, discussions, etc with useful information.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;First of all, here is a video talk from Matz for &lt;a href="http://www.youtube.com/user/googletechtalks"&gt;Google Tech Talks&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=oEkJvvGEtB4"&gt;Ruby 1.9&lt;/a&gt;, by Yukihiro Matz Matsumoto &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Also, some presentations:&lt;/p&gt; &lt;ol&gt;   &lt;li&gt;&lt;a href="http://learnruby.com/ruby-1.9.html"&gt;Matz on Ruby 1.9&lt;/a&gt; from his  Rubyconf 2007 talk.&lt;/li&gt;   &lt;li&gt;&lt;a href="http://codefluency.com/articles/2008/04/13/migrating-to-ruby-1-9/"&gt;Migrating to Ruby 1.9, by Bruce Williams&lt;/a&gt; from his &lt;a href="http://scotlandonrails.com/"&gt;Scotland on Rails&lt;/a&gt; and &lt;a href="http://austinonrails.org/"&gt;Austin on Rails&lt;/a&gt; talks. &lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.slideshare.net/hlame/wierd-wonderful-ideas-an-overview-of-ruby-19"&gt;Wild &amp;amp; Weird Ideas: An overview of Ruby 1.9, by Hlame&lt;/a&gt; from his LRUG presentation. &lt;/li&gt;   &lt;/ol&gt; &lt;p&gt;Blog posts covering multiple differencies between the two versions of Ruby:&lt;/p&gt; &lt;ul&gt;   &lt;li&gt; &lt;a href="http://blog.grayproductions.net/articles/getting_code_ready_for_ruby_19"&gt;Getting Code Ready for Ruby 1.9&lt;/a&gt;, by &lt;a href="http://blog.grayproductions.net/"&gt;James Edward Gray II&lt;/a&gt;. &lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.oreillynet.com/ruby/blog/2007/06/on_the_horizon_ten_things_i_li.html"&gt;On The Horizon : Ten Things I like about Ruby 1.9&lt;/a&gt;, by &lt;a href="http://www.oreillynet.com/pub/au/2593"&gt;Gregory Brown&lt;/a&gt;.&lt;/li&gt;   &lt;/ul&gt; &lt;ul&gt;   &lt;li&gt;&lt;a href="http://boga.wordpress.com/2008/04/15/ruby-19-porting-notes/"&gt;Ruby 1.9 porting notes&lt;/a&gt;, by &lt;a href="http://boga.wordpress.com/"&gt;Boga's Mac Blog&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;Upcoming or recently published books that cover Ruby 1.9:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1934356085?ie=UTF8&amp;tag=nid06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1934356085"&gt;Programming Ruby: The Pragmatic Programmers' Guide&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nid06-20&amp;l=as2&amp;o=1&amp;a=1934356085" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0596516177?ie=UTF8&amp;tag=nid06-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596516177"&gt;The Ruby Programming Language&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nid06-20&amp;l=as2&amp;o=1&amp;a=0596516177" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; &lt;p&gt;And after you've finished reading all the above and want &lt;a href="http://eigenclass.org/hiki/Changes+in+Ruby+1.9"&gt;an almost complete listing of changes (!!!) you can find it on this post from eigenclass&lt;/a&gt;. Have fun :) &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Bonus section:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.ruby-forum.com/topic/136553"&gt;The release announcement of Ruby 1.9 in Ruby's mailing list&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;And now, you also want some info on how to get Ruby 1.9 side-by-side with the good-old 1.8? Ok, here are some links for you too:&lt;/p&gt; &lt;ul&gt;   &lt;li&gt;&lt;a href="http://beans.seartipy.com/2006/07/19/installing-ruby-on-gnulinuxgentoo-kubuntu-fedora-suse-and-ms-windows/"&gt;Installing Ruby on GNU/Linux(Gentoo, (K)Ubuntu, Fedora, SUSE) And MS Windows.&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://lindsaar.net/2008/1/18/installing-ruby-1-9-on-mac-osx"&gt;Installing Ruby 1.9 on Mac OSX&lt;/a&gt;, by Mikel Lindsaar.&lt;/li&gt;   &lt;li&gt;&lt;a href="http://ruby.tie-rack.org/28/installing-19/"&gt;Installing 1.9&lt;/a&gt;, by Chris (NOTE: I used this one to install Ruby 1.9 alongside 1.8 under Mac OS X, since I already have the readline libraries installed from MacPorts I think). &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;  &lt;/p&gt; &lt;p class="tags"&gt;&lt;a rel="tag" href="http://www.technorati.com/tag/Ruby"&gt;Ruby&lt;/a&gt;,&lt;a rel="tag" href="http://www.technorati.com/tag/Ruby%201.9"&gt;Ruby 1.9&lt;/a&gt;,&lt;a rel="tag" href="http://www.technorati.com/tag/YARV"&gt;YARV&lt;/a&gt;,&lt;a rel="tag" href="http://www.technorati.com/tag/Links"&gt;Links&lt;/a&gt;,&lt;a rel="tag" href="http://www.technorati.com/tag/Programming"&gt;Programming&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-923148002289444860?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=lSmr6ZVFMEI:cSD3s1I3bY0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=lSmr6ZVFMEI:cSD3s1I3bY0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=lSmr6ZVFMEI:cSD3s1I3bY0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=lSmr6ZVFMEI:cSD3s1I3bY0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/lSmr6ZVFMEI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/923148002289444860/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/04/migrating-to-ruby-19-yarv-posts-you.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/923148002289444860?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/923148002289444860?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/lSmr6ZVFMEI/migrating-to-ruby-19-yarv-posts-you.html" title="Migrating to Ruby 1.9 (YARV): Posts you have to read!" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/04/migrating-to-ruby-19-yarv-posts-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ANSXo-eyp7ImA9WxZbFk8.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-2629355321558758001</id><published>2008-04-19T18:07:00.005+03:00</published><updated>2008-04-19T20:23:18.453+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-19T20:23:18.453+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Rubinius" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="Tidbits" /><category scheme="http://www.blogger.com/atom/ns#" term="Bugs" /><title>Tiny (but maybe important) Rubinius tidbits</title><content type="html">As you play with a tool you progressively discover various small tidbits about it. I have a few in mind and I thought it would helpful to share them in case you encounter them and get this weird expression on your face of "huh?".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. The multiple assignment operator&lt;/span&gt;&lt;br /&gt;If you are used to use it's return values you'll have to think again cause in Rubinius it doesn't return the array with the new values of the variables. So let's say that you were doing this in Ruby 1.8, Ruby 1.9, JRuby, etc... :&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;p((a,b = 'some value', 'and some other value'))&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;This would result in :&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;["some value", "and some other value"]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In Rubinius it's not the case:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;true&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Hmm... Pretty nasty if you depend on the result...&lt;br /&gt;&lt;br /&gt;Of course, this is not something really common, but in my case I was (unnecessarily) returning an array of values from inside a method that could be later used from the calling one. As the people at #rubinius pointed out I could do it with a much more nice and elegant way. The excellent quote after my "dough! Why didn't I think this in the first place?" was:&lt;br /&gt;"See? Rubinius makes you write better code!" - Nice one :D&lt;br /&gt;&lt;br /&gt;So, keep that in mind for the time being. They are thinking to make this behave as in the rest VMs but it's not sure yet since from what I've heard it does require some additional effort. &lt;a href="http://rubinius.lighthouseapp.com/projects/5089/contribute"&gt;Why don't you try yourself?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In contrast, the JRuby team has an open &lt;a href="http://jira.codehaus.org/browse/JRUBY-2410"&gt;ticket&lt;/a&gt; about a possible optimization where the interpreter will be able to understand whether the value is going to be used or not, thus avoiding the unnecessary Array allocation - cool!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. The nasty Symbol#to_proc and the splat ( * ) operator.&lt;/span&gt;&lt;br /&gt;&lt;a href="http://nikos-d.blogspot.com/2008/04/google-summer-of-code-proposal-gruver.html"&gt;I've given some links about this issue before&lt;/a&gt; but I think here is more appropriate and some more explanation would be nice.&lt;br /&gt;&lt;br /&gt;First of all, for those who don't know what does this method do you can find a short introduction on &lt;a href="http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html"&gt;this post from Dave Thomas &lt;/a&gt;and from plenty other resources (&lt;a href="http://drnicwilliams.com/2006/09/28/new-magical-version-of-symbolto_proc/"&gt;Dr Nic&lt;/a&gt;,  &lt;a href="http://invisibleblocks.wordpress.com/2008/03/28/ruby-facets-symbolto_proc-classto_proc/"&gt;Invisible Blocks&lt;/a&gt; and &lt;a href="http://www.infoq.com/news/2008/02/to_proc-currying-ruby19"&gt;InfoQ&lt;/a&gt;) including &lt;a href="http://railscasts.com/episodes/6"&gt;a railcast episode&lt;/a&gt; for the more video-podcast-savvy people. Keep also in mind &lt;a href="http://m.onkey.org/2007/6/30/let-s-start-with-wtf"&gt;the possible downside of using this method as noted by Pratik Naik&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Shall we go on now? Nice.&lt;br /&gt;&lt;br /&gt;There are various approaches on this implementation like the one from &lt;a href="http://extensions.rubyforge.org/rdoc/classes/Symbol.html#M000003"&gt;Ruby Facets&lt;/a&gt;, &lt;a href="http://api.rubyonrails.com/classes/Symbol.html"&gt;Rails&lt;/a&gt; and &lt;a href="http://github.com/evanphx/rubinius/tree/master/kernel/core/symbol.rb"&gt;Rubinius one&lt;/a&gt;. There's even &lt;a href="http://dev.rubyonrails.org/attachment/ticket/8818/sym_to_proc_performance_improvement.patch"&gt;a different proposal&lt;/a&gt; that got rejected from the Rails core team. As I mentioned in &lt;a href="http://rubinius.lighthouseapp.com/projects/5089/tickets/363-yield-block-problem#ticket-363-6"&gt;the appropriate ticket in Lighthouse&lt;/a&gt;, the current implementation doesn't work as it should. I haven't managed to track the problem down but &lt;a href="http://rubinius.lighthouseapp.com/projects/5089/tickets/495-bug-weird-behaviour-from-splat-operator-when-passed-to-a-method#ticket-495-1"&gt;it seems to me that it has something to do with the splat operator&lt;/a&gt;. Since I'm not sure, further investigation on this weird behavior is needed. For the time being I found &lt;a href="http://rubinius.lighthouseapp.com/projects/5089/tickets/496-patch-partial-fix-for-symbol-to_proc-and-specs#ticket-496-1"&gt;a temporary solution to this&lt;/a&gt; that works fine with my examples. For those of you who are lazy enough to go and see all these links here are some examples:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;(1..100).map(&amp;amp;:to_s) =&gt; ["1", "2", "3", (....)&lt;br /&gt;&lt;/code&gt;&lt;code&gt;(1..100).inject(&amp;amp;:+) =&gt; 5050 &lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;These work just fine.&lt;br /&gt;But:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;[(1..10).to_a, (1..10).to_a].map(&amp;amp;:to_s)&lt;br /&gt;ArgumentError: wrong number of arguments (got 9, required 1)&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;code&gt;(1..100).inject(&amp;amp;:to_s)&lt;br /&gt;ArgumentError: wrong number of arguments (got 1, required 0) &lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;Are obviously not.&lt;br /&gt;&lt;br /&gt;Now, my (not so pretty) fix to this problem is this:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;class Symbol&lt;br /&gt;def to_proc&lt;br /&gt;Proc.new { |*args|&lt;br /&gt; obj = args.shift&lt;br /&gt; args.empty? ? obj.__send__(self) : obj.__send__(self, *args)&lt;br /&gt;}&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;which only breaks on the last example used before:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;(1..100).inject(&amp;amp;:to_s)&lt;br /&gt;ArgumentError: wrong number of arguments (got 1, required 0)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;and that's because the #inject method yields two parameters in the block (and so it makes sense for this to break I believe and that's why I didn't include a test case for something like this in the specs I wrote for the patch.).&lt;br /&gt;&lt;br /&gt;Feel free to share your thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-2629355321558758001?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=kOeZ9328OAk:g-rDqpXODU4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=kOeZ9328OAk:g-rDqpXODU4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=kOeZ9328OAk:g-rDqpXODU4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=kOeZ9328OAk:g-rDqpXODU4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/kOeZ9328OAk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/2629355321558758001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/04/tiny-but-maybe-important-rubinius.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2629355321558758001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/2629355321558758001?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/kOeZ9328OAk/tiny-but-maybe-important-rubinius.html" title="Tiny (but maybe important) Rubinius tidbits" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/04/tiny-but-maybe-important-rubinius.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UHQH4-fyp7ImA9WxZbE0U.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-8911551364075907594</id><published>2008-04-16T20:50:00.010+03:00</published><updated>2008-04-17T01:33:51.057+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-17T01:33:51.057+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JRuby" /><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Rubinius" /><category scheme="http://www.blogger.com/atom/ns#" term="Benchmarks" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="GRuVeR" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby 1.9" /><title>Speed comparison of Ruby 1.8, Ruby 1.9, JRuby and Rubinius using a genetic algorithm</title><content type="html">This week I've been playing with &lt;a href="http://charlie.rubyforge.org/"&gt;charlie (a Genetic Algorithms library)&lt;/a&gt; and I've been rewriting the TSP example that's included with it so I can have a very very simple "prototype" for the &lt;a href="http://nikos-d.blogspot.com/2008/04/google-summer-of-code-proposal-gruver.html"&gt;GRuVeR project&lt;/a&gt;. I must say that I kind of left it incomplete and that's because I wanted to test on which RVMs it's running properly and after fixing it for the ones that it didn't, what's the performance on each of them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Compatibility&lt;/span&gt;:&lt;br /&gt;It turned out that it was running just fine to all of them except Rubinius. I managed to figure out what the problem was and after fixing it I jumped right away to the testing part :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Comparisons&lt;/span&gt;:&lt;br /&gt;Okay, I must say that I was expecting quite the opposite results (ok, &lt;span style="font-style: italic;"&gt;almost&lt;/span&gt; the opposite). And why's that? Let's take a look:&lt;br /&gt;&lt;br /&gt;Let's start with &lt;span style="font-weight: bold;"&gt;Ruby 1.8 (MRI)&lt;/span&gt;:&lt;br /&gt;$ time ruby tsp_solver.rb&lt;br /&gt;real    0m34.940s&lt;br /&gt;user    0m34.398s&lt;br /&gt;sys    0m0.125s&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Ruby 1.9 :&lt;/span&gt;&lt;br /&gt;$ time ruby19 tsp_solver.rb&lt;br /&gt;real    0m21.533s&lt;br /&gt;user    0m20.736s&lt;br /&gt;sys    0m0.119s&lt;br /&gt;&lt;br /&gt;Let's move to the alternatives now.&lt;br /&gt;&lt;br /&gt;First &lt;span style="font-weight: bold;"&gt;JRuby 1.1:&lt;/span&gt;&lt;br /&gt;$ time jruby tsp_solver.rb&lt;br /&gt;real    0m57.815s&lt;br /&gt;user    0m48.651s&lt;br /&gt;sys    0m0.751s&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JRuby 1.1 with -J-server flag:&lt;br /&gt;&lt;/span&gt;$ time jruby -J-server tsp_solver.rb&lt;br /&gt;real    0m34.834s&lt;br /&gt;user    0m37.714s&lt;br /&gt;sys    0m0.667s&lt;br /&gt;&lt;br /&gt;And finally &lt;span style="font-weight: bold;"&gt;Rubinius:&lt;/span&gt;&lt;br /&gt;$ time rbx tsp_solver.rb&lt;br /&gt;real    12m29.830s&lt;br /&gt;user    12m20.105s&lt;br /&gt;sys    0m4.219s&lt;br /&gt;&lt;br /&gt;Graphics are always better:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3ts4VAOHUpY/SAZ8ADnpOjI/AAAAAAAAAEs/sx5dATNQUkQ/s1600-h/graphwrite-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3ts4VAOHUpY/SAZ8ADnpOjI/AAAAAAAAAEs/sx5dATNQUkQ/s400/graphwrite-1.png" alt="" id="BLOGGER_PHOTO_ID_5189971961004505650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Wow! There's quite some difference amongst them! To be honest, I really expected the vanilla Ruby to be the slowest (at least I hoped so) but no-no! It may be slower than 1.9 but it's faster than the rest of them. Obviously, Rubinius is out of the competition for this one. I believe that this specific code I tested is really an edge; the time required for rubinius to finish is practically infinite. After all it's the only VM that hasn't reached a 1.0 milestone yet so a lot of things will eventually get way better.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Update:&lt;/span&gt; &lt;a href="http://headius.blogspot.com/"&gt;Charles&lt;/a&gt; told me that running this example with JRuby and Java 1.6 results in much faster execution, faster or close to Ruby 1.9 to be exact. Quoting his words: "ok...and if it's not as fast as YARV, file a bug for me :) " . Heh, so I guess he is probably right. I will try to test it as soon as I set up Java 6 in my machine (off-topic: it's a shame that Leopard doesn't ship with Java 1.6 included...). And also thanks a lot &lt;a href="http://blog.emptyway.com/"&gt;Vladimir&lt;/a&gt; for letting me know about the -J-server flag (I'm not that familiar with Java).&lt;br /&gt;&lt;br /&gt;Now, for those who want more info on the code and the machine &lt;span style="font-style: italic;"&gt;(updated to include more details)&lt;/span&gt;:&lt;br /&gt;The machine is a MacBook Pro with 2.2GHz Intel Core 2 Duo and 2GB Ram running Mac OS X Leopard 10.5.2. &lt;a href="http://pastie.caboo.se/181868"&gt;The source code for the tsp_solver.rb can be found here&lt;/a&gt; and it requires the &lt;a href="http://charlie.rubyforge.org/"&gt;charlie gem&lt;/a&gt; (of course you can grab the code from the repository and pack it under a lib folder or something and require that instead in the tsp_solver).&lt;br /&gt;&lt;br /&gt;Now, the exact RVMs versions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;$ ruby -v&lt;br /&gt;ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]&lt;/li&gt;&lt;li&gt;rbx -v&lt;br /&gt;rubinius 0.8.0 (ruby 1.8.6 compatible) (bbe450f22) (04/15/2008) [i686-apple-darwin9.2.2]&lt;/li&gt;&lt;li&gt;$ ruby19 -v&lt;br /&gt;ruby 1.9.0 (2007-12-25 revision 14709) [i686-darwin9.2.2]&lt;/li&gt;&lt;li&gt;$ jruby -v&lt;br /&gt;ruby 1.8.6 (2008-03-28 rev 6360) [i386-jruby1.1]&lt;br /&gt;And: $ java -version&lt;br /&gt;java version "1.5.0_13"&lt;br /&gt;Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237)&lt;br /&gt;Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Please, please, please keep in mind that this code, although it has to do with an almost real-life situation, is really specific and targeted! &lt;span style="font-weight: bold;"&gt;Don't&lt;/span&gt; take this comparison as a measure of speed between different Ruby implementations! I did it because I was curious to see the results and I will do it again a) when new versions of these VMs come out and b) with most of the code that I'm going to write for this project.&lt;br /&gt;&lt;br /&gt;Later today (or probably tomorrow) I'm also going to post the results of the profiler for each VM for those of you who are curious but lazy to run it on your machine :) In case someone wants to run it, the integer parameters of this call can be minimized (so you can reduce the time required for the code to finish) :&lt;br /&gt;&lt;pre class="textmate-source"&gt;&lt;pre class="sunburst"&gt;population &lt;span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_ruby"&gt;=&lt;/span&gt; &lt;span class="support support_class support_class_ruby"&gt;Population&lt;/span&gt;&lt;span class="meta meta_function-call meta_function-call_method meta_function-call_method_with-arguments meta_function-call_method_with-arguments_ruby"&gt;.&lt;span class="entity entity_name entity_name_function entity_name_function_ruby"&gt;new&lt;/span&gt;&lt;/span&gt;(&lt;span class="variable variable_other variable_other_readwrite variable_other_readwrite_instance variable_other_readwrite_instance_ruby"&gt;@genotype&lt;/span&gt;,&lt;span class="constant constant_numeric constant_numeric_ruby"&gt;100&lt;/span&gt;)&lt;span class="meta meta_function-call meta_function-call_method meta_function-call_method_with-arguments meta_function-call_method_with-arguments_ruby"&gt;.&lt;span class="entity entity_name entity_name_function entity_name_function_ruby"&gt;evolve_silent&lt;/span&gt;&lt;/span&gt;(&lt;span class="constant constant_numeric constant_numeric_ruby"&gt;1000&lt;/span&gt;)&lt;/pre&gt;&lt;/pre&gt;The first one is about the size of the population of each generation and the second the number of the generations that it is required to be generated. The smaller, the faster but the bigger, the better results (as this algorithm finds an estimation and not the exact solution for the &lt;span style="font-style: italic;"&gt;*randomly created*&lt;/span&gt; Traveling Salesman Problem). Another parameter that could be reduced is the number of cities/stops which is the parameter of TSPSolver::by_example with a default value of 100. Try to reduce them altogether for better balance ;)&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-8911551364075907594?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=ryh-sPdArkY:sc9P8X4PpYc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=ryh-sPdArkY:sc9P8X4PpYc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=ryh-sPdArkY:sc9P8X4PpYc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=ryh-sPdArkY:sc9P8X4PpYc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/ryh-sPdArkY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/8911551364075907594/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/04/speed-comparison-of-ruby-18-ruby-19.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/8911551364075907594?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/8911551364075907594?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/ryh-sPdArkY/speed-comparison-of-ruby-18-ruby-19.html" title="Speed comparison of Ruby 1.8, Ruby 1.9, JRuby and Rubinius using a genetic algorithm" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3ts4VAOHUpY/SAZ8ADnpOjI/AAAAAAAAAEs/sx5dATNQUkQ/s72-c/graphwrite-1.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/04/speed-comparison-of-ruby-18-ruby-19.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMNQXs8cSp7ImA9WxRXEEo.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-4690911327462464235</id><published>2008-04-16T13:21:00.010+03:00</published><updated>2008-10-15T15:08:10.579+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-15T15:08:10.579+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="GRuVeR" /><category scheme="http://www.blogger.com/atom/ns#" term="Summer of Code" /><title>Google Summer of Code Proposal: GRuVeR: A General Ruby library for solving Routing Vehicle Problem</title><content type="html">This year is the last that I'm going to be a student, at least a bachelor one, since i've already completed (almost) my thesis and pretty soon I will be saying bye-bye to &lt;a href="http://www.uop.gr/index.php?option=com_frontpage&amp;amp;Itemid=1&amp;amp;lang=en"&gt;my University&lt;/a&gt;. I haven't really had the chance to participate in Google Summer of Code partially because I had never really heard of it (in time) and also because I didn't believe that I was able to contribute something really good (lack of confidence here :) ). But this year and after messing around with &lt;a href="http://blog.rento.gr/"&gt;others' people code&lt;/a&gt; (heh) and some of my own (including my thesis) and with the help/ideas given by some friends I did finally sent a proposal.&lt;br /&gt;&lt;br /&gt;The main concept is to implement a library for solving &lt;a href="http://neo.lcc.uma.es/radi-aeb/WebVRP/"&gt;Vehicle Routing Problems&lt;/a&gt; in Ruby. How is this going to happen? The ground basis will be the beautiful &lt;a href="http://charlie.rubyforge.org/"&gt;Charlie library&lt;/a&gt;, written by &lt;a href="http://on-ruby.blogspot.com/2008/01/interview-with-sander-land-developer-of.html"&gt;Sander&lt;/a&gt;&lt;a href="http://on-ruby.blogspot.com/2008/01/interview-with-sander-land-developer-of.html"&gt; Land&lt;/a&gt;, which makes it really easy to write programs with &lt;a href="http://en.wikipedia.org/wiki/Genetic_algorithm"&gt;Genetic Algorithms&lt;/a&gt; built in and really fast (in terms of time required to write the code :D). &lt;a href="http://blog.grayproductions.net/"&gt;James&lt;/a&gt; also pointed out &lt;a href="http://gecoder.rubyforge.org/"&gt;Gecode/R&lt;/a&gt; which is frontend to &lt;a href="http://www.gecode.org/"&gt;Gecode&lt;/a&gt; and uses another technique, &lt;a href="http://en.wikipedia.org/wiki/Constraint_programming"&gt;Constraint Programming&lt;/a&gt; and I'm trying to think if and how this can also be used (a discussion can be found on &lt;a href="http://rubyforge.org/pipermail/gecoder-users/2008-April/thread.html"&gt;the Gecode/R mailing list&lt;/a&gt;). I'm not going to get into details here; if anyone is interested a &lt;a href="http://www.ruby-forum.com/topic/147648"&gt;part of the proposal can be found in the Ruby mailing list&lt;/a&gt; and &lt;a href="http://nikosd.com/files/gruver.pdf"&gt;the full version is available as pdf here&lt;/a&gt;.  Feel free to send in any thoughts :).&lt;br /&gt;&lt;br /&gt;I'm really waiting for the &lt;a href="http://code.google.com/opensource/gsoc/2008/faqs.html#0.1_timeline"&gt;ranking results&lt;/a&gt; and I reeeeeally hope that it will get accepted even though it's a really specific and targeted project when compared with others like contributing to the alternative VMs, refactoring RDoc (although version 2 is out) and such. The good thing with implementing this, is that it will produce some really nice benchmarks between the different VMs and also create some feedback with suggestions/patches/fixes (&lt;a href="http://rubinius.lighthouseapp.com/projects/5089/tickets/363-yield-block-problem#ticket-363-6"&gt;here are&lt;/a&gt; &lt;a href="http://rubinius.lighthouseapp.com/projects/5089/tickets/495-bug-weird-behaviour-from-splat-operator-when-passed-to-a-method#ticket-495-1"&gt;some&lt;/a&gt; &lt;a href="http://rubinius.lighthouseapp.com/projects/5089/tickets/496-patch-partial-fix-for-symbol-to_proc-and-specs#ticket-496-1"&gt;examples&lt;/a&gt; from this Monday's experiments I was doing). Regardless though of whether or not it gets accepted, I believe that I will finally write this thing cause after a chat I had with Sander, which by the way is my potential mentor to the project, he also seems interested in this and willing to help.&lt;br /&gt;&lt;br /&gt;So, stay tuned for updates on this - later this day I'm going to post some benchmark results between almost all current Ruby VMs (&lt;a href="http://www.ruby-lang.org/en/downloads/"&gt;Ruby 1.8&lt;/a&gt;, &lt;a href="http://www.ruby-lang.org/en/news/2007/12/25/ruby-1-9-0-released/"&gt;Ruby 1.9&lt;/a&gt;, &lt;a href="http://docs.codehaus.org/display/JRUBY/2008/04/05/JRuby+1.1+Released"&gt;JRuby&lt;/a&gt;&lt;a href="http://docs.codehaus.org/display/JRUBY/2008/04/05/JRuby+1.1+Released"&gt; 1.1&lt;/a&gt; and &lt;a href="http://rubini.us/"&gt;Rubinius&lt;/a&gt;)* after running some example code I wrote for the Traveling Salesman Problem.&lt;br /&gt;&lt;br /&gt;* I'm missing the C# implementation of Ruby here but I thought that it won't be able to run on my Mac so I didn't bother to try it. If I'm wrong please let me know and I will also set it up right away!&lt;br /&gt;&lt;br /&gt;P.S.: Do you have a better name in mind for the project??? I'm not sure I like "GRuVeR". Wouldn't something like "delivery" sound better?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-4690911327462464235?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=BD79vZ6IiTk:cymuR3oLO08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=BD79vZ6IiTk:cymuR3oLO08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=BD79vZ6IiTk:cymuR3oLO08:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=BD79vZ6IiTk:cymuR3oLO08:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/BD79vZ6IiTk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/4690911327462464235/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/04/google-summer-of-code-proposal-gruver.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4690911327462464235?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/4690911327462464235?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/BD79vZ6IiTk/google-summer-of-code-proposal-gruver.html" title="Google Summer of Code Proposal: GRuVeR: A General Ruby library for solving Routing Vehicle Problem" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/04/google-summer-of-code-proposal-gruver.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNQ3g6fCp7ImA9WxZbE0k.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-7144354507743949852</id><published>2008-04-16T13:08:00.003+03:00</published><updated>2008-04-16T13:18:12.614+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-16T13:18:12.614+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><category scheme="http://www.blogger.com/atom/ns#" term="pesonal" /><title>Not moved yet...</title><content type="html">It's been almost half year since my last post which was saying that I was going to move to nikosd.com. I haven't found the time and the money to pay a hosting server so i'm still here and since I have some interesting things to post I will do so here until I (finally) move to my own space.&lt;br /&gt;&lt;br /&gt;Updates are coming soon with my Google Summer of Code proposal, some benchmarks between different Ruby VMs and misc other stuff.&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-7144354507743949852?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=NPuXdXpDXwc:WSbSYjskJUc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=NPuXdXpDXwc:WSbSYjskJUc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=NPuXdXpDXwc:WSbSYjskJUc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=NPuXdXpDXwc:WSbSYjskJUc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/NPuXdXpDXwc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/7144354507743949852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2008/04/not-moved-yet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/7144354507743949852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/7144354507743949852?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/NPuXdXpDXwc/not-moved-yet.html" title="Not moved yet..." /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2008/04/not-moved-yet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MHRn49eSp7ImA9WB9RF08.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-7610678398379991938</id><published>2007-10-18T18:14:00.000+03:00</published><updated>2007-10-18T18:30:37.061+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-18T18:30:37.061+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><title>We are moving...</title><content type="html">I'm sort of reorganizing and reformatting lots of stuff basically because i finally managed to finish with my courses at the University. This means i have more time to do what I want and when i want :)&lt;br /&gt;&lt;br /&gt;So some of the upcoming changes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This blog is moving to blog.nikosd.com (or something like that - not ready yet)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uop.gr/%7Enikosd"&gt;My personal site&lt;/a&gt; is moving to &lt;a href="http://nikosd.com"&gt;nikosd.com&lt;/a&gt; (not yet moved!)&lt;a href="http://nikosd.com"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Translate it (at least) in English&lt;/li&gt;&lt;li&gt;Update it&lt;/li&gt;&lt;li&gt;Start a new site/blog focused on programming and to be more precise, web programming including:&lt;ul&gt;&lt;li&gt;Web Design (CSS, HTML and some Photoshop/Illustrator/Dreamweaver)&lt;/li&gt;&lt;li&gt;Usability&lt;/li&gt;&lt;li&gt;Client-side scripting (a.k.a. Javascript and maybe some ActionScript)&lt;/li&gt;&lt;li&gt;Server-side scripting (mostly Ruby On Rails and PHP)&lt;/li&gt;&lt;/ul&gt; Cool name included and if anyone is interested in joining let me know (I will also post a separate post about this - more to come soon)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-7610678398379991938?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=V7Kh4Jux6lQ:VTTYOVWKC6I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=V7Kh4Jux6lQ:VTTYOVWKC6I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=V7Kh4Jux6lQ:VTTYOVWKC6I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=V7Kh4Jux6lQ:VTTYOVWKC6I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/V7Kh4Jux6lQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/7610678398379991938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2007/10/we-are-moving.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/7610678398379991938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/7610678398379991938?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/V7Kh4Jux6lQ/we-are-moving.html" title="We are moving..." /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://blog.nikosd.com/2007/10/we-are-moving.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQER3Y4fSp7ImA9WBFaGE4.&quot;"><id>tag:blogger.com,1999:blog-1767470000639394516.post-3574096585425545245</id><published>2007-05-21T10:59:00.000+03:00</published><updated>2007-05-22T13:38:26.835+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-05-22T13:38:26.835+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="NetBeans" /><title>Netbeans is simply *SMART*</title><content type="html">Take a look at this screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.netbeans.org/nonav/issues/showattachment.cgi/42577/netbeans_M9_ror_variables_error.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://www.netbeans.org/nonav/issues/showattachment.cgi/42577/netbeans_M9_ror_variables_error.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When i saw it, i reported this as a bug at &lt;a href="http://www.netbeans.org/issues/show_bug.cgi?id=104367"&gt;NetBeans issuezilla&lt;/a&gt; . Well the reply really struck me dumb :&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;"This is supposed to be a cool feature - the IDE is showing you that these variables are unused. This is&lt;br /&gt;similar to the Java support where unused import and variables are also shown in gray."&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;Oh yes, NetBeans was the best choice for writing Java code, now it's turning to be the best programming IDE available &lt;span style="font-weight: bold;"&gt;in general&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;Languages support:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java (including all the goodies from J2EE)&lt;/li&gt;&lt;li&gt;C/C++&lt;/li&gt;&lt;li&gt;UML&lt;/li&gt;&lt;li&gt;XML, CSS, Javascript &amp;amp; rest web technologies&lt;/li&gt;&lt;li&gt;Ruby / Ruby On Rails&lt;/li&gt;&lt;li&gt;plus more i don't know, or supported by plugins&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;plus: Versioning support (CVS, Subversion, etc...)&lt;br /&gt;&lt;br /&gt;Check out yourself all the &lt;a href="http://www.netbeans.org/products/ide/features.html"&gt;v5.5 features&lt;/a&gt; or the &lt;a href="http://www.netbeans.org/community/releases/60/index.html"&gt;upcoming v6 features&lt;/a&gt; . Thank you community!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1767470000639394516-3574096585425545245?l=blog.nikosd.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=DV84BRMqmYk:ftPUzDMUMnQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=DV84BRMqmYk:ftPUzDMUMnQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.nikosd.com/~ff/nikosd?a=DV84BRMqmYk:ftPUzDMUMnQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/nikosd?i=DV84BRMqmYk:ftPUzDMUMnQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/nikosd/~4/DV84BRMqmYk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.nikosd.com/feeds/3574096585425545245/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://blog.nikosd.com/2007/05/netbeans-is-simply-smart.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/3574096585425545245?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1767470000639394516/posts/default/3574096585425545245?v=2" /><link rel="alternate" type="text/html" href="http://feeds.nikosd.com/~r/nikosd/~3/DV84BRMqmYk/netbeans-is-simply-smart.html" title="Netbeans is simply *SMART*" /><author><name>Nikos Dimitrakopoulos</name><uri>http://www.blogger.com/profile/04393123772459226701</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08468844970561081416" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://blog.nikosd.com/2007/05/netbeans-is-simply-smart.html</feedburner:origLink></entry></feed>
