<?xml version="1.0"?>
<rss version="2.0">

<channel>
	<title>Planet Trapexit - Erlang/OTP News</title>
	<link>http://planet.trapexit.org</link>
	<language>en</language>
	<description>Planet Trapexit - Erlang/OTP News - http://planet.trapexit.org</description>

<item>
	<title>Caoyuan's Blog: Scala for NetBeans Screenshot#12: Better Completion with More Types Inferred</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_12</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_12</link>
	<description>Well, the type inference work is not so easy (with performance in mind), but anyway, I've got a bit more progress, at least, the chained member call can now be correctly inferred in a lot of cases. It's some level as &lt;a href=&quot;http://blogs.sun.com/tor/entry/javascript_type_inference&quot;&gt;Tor's JavaScript for NetBeans&lt;/a&gt; now.

&lt;p&gt;
First, let's create a val &quot;node&quot;, which is a &quot;scala.xml.Node&quot;
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080508a.png&quot;&gt;&lt;img alt=&quot;nn&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080508a.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
Then, input '.' to invoke completion, as I know which type is of &quot;node&quot;, the proposal items look good.
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080508b.png&quot;&gt;&lt;img alt=&quot;nn&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080508b.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
I choose &quot;descendant&quot; function (which returns a &quot;List&quot;), and input '.' again, we can see the proposal items look still good.
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080508c.png&quot;&gt;&lt;img alt=&quot;nn&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080508c.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;

These features also work on Java's class.

&lt;p&gt;
&lt;b&gt;Known issues:&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;It seems the indexing/scanning for Scala standard library source will perform twice when you first installed Scala plugins&lt;/li&gt;
&lt;li&gt;The type inference is not consistence yet, so don't be strange for the strange behavior sometimes &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Again, don't forget to download scala standard library's source jars and unzip to $SCALA_HOME/src, per sub-folder per jar
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 09 May 2008 11:52:48 +0000</pubDate>
</item>
<item>
	<title>Caoyuan's Blog: Which Programming Language J. Gosling Would Use Now, Except Java?</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/which_programming_language_j_gosling</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/which_programming_language_j_gosling</link>
	<description>&gt;&gt;&gt; &lt;b&gt;Updated later&lt;/b&gt;&lt;br /&gt;
Maybe we can get completeness of J. Gosling's opinions about Java/Scaka/JVM from &lt;a href=&quot;http://blogtrader.net/page/dcaoyuan/feed/entries/thejavablog.wordpress.com/2008/05/08/javaone-day-three/&quot;&gt;here&lt;/a&gt;
&lt;br /&gt;===
&lt;p&gt;

According to &lt;a href=&quot;http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming&quot;&gt;Adam Bien's blog from JavaOne&lt;/a&gt;

&lt;blockquote&gt;
During a meeting in the Community Corner (java.net booth) with James Gosling, a participant asked an interesting question: &quot;Which Programming Language would you use *now* on top of JVM, except Java?&quot;. The answer was surprisingly fast and very clear: - Scala.
&lt;/blockquote&gt;

&lt;p&gt;
I think Fortress will also be a very good future choice when it gets mature.
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 08 May 2008 14:39:02 +0000</pubDate>
</item>
<item>
	<title>EazyErl!: EasyErl goes Mobile Friendly</title>
	<guid>tag:blogger.com,1999:blog-855944390206940143.post-1410723176222509038</guid>
	<link>http://easyerl.blogspot.com/2008/05/easyerl-goes-mobile-friendly.html</link>
	<description>Hi, I'm experiencing Mobile Tagging. &lt;br /&gt;You can see it at the left side of this page.&lt;br /&gt;Tags are generated dynamically, I'm using of course Erlang, Mochiweb, Ghostscript (rendering backend) and &lt;a href=&quot;http://datenfreihafen.org/projects/iec16022.html&quot;&gt;iec16022&lt;/a&gt; to build the semacode.&lt;br /&gt;&lt;br /&gt;Since I own a Nokia N95, I can efficiently scan my own codes, but I don't know if it's the case for everyone :)&lt;br /&gt;&lt;br /&gt;So leave me a comment if you find those code hard to read...&lt;br /&gt;Thanks</description>
	<pubDate>Thu, 08 May 2008 08:35:17 +0000</pubDate>
	<author>noreply@blogger.com (rolphin)</author>
</item>
<item>
	<title>Hypothetical Labs: Busy x 10^bazillion</title>
	<guid>http://weblog.hypotheticalabs.com/?p=258</guid>
	<link>http://weblog.hypotheticalabs.com/?p=258</link>
	<description>&lt;p&gt;As the saying goes, when it rains it pours. I&amp;#8217;ve been so busy over the past few days I&amp;#8217;ve hardly had time to even think about this blog, let alone write anything.&lt;/p&gt;
&lt;p&gt;I can see the end to this busy period, though. Once that happens I&amp;#8217;ll be blogging about the insanely cool stuff I&amp;#8217;ve got going on. All I can say right now is that it&amp;#8217;s Erlang related and I think its the bee&amp;#8217;s knees.&lt;/p&gt;
&lt;p&gt;Until then, your patience is appreciated.&lt;/p&gt;</description>
	<pubDate>Thu, 08 May 2008 00:55:13 +0000</pubDate>
</item>
<item>
	<title>Torbjorn Tornkvist: The dsl_engine demo</title>
	<guid>http://blog.tornkvist.org/blog.tornkvist.org/blog.yaws?id=1210164473208550</guid>
	<link>http://blog.tornkvist.org/blog.tornkvist.org/blog.yaws?id=1210164473208550</link>
	<description>&lt;p&gt;I have been trying out 
&lt;a href=&quot;http://www.erlware.org/&quot; title=&quot;erlware.org&quot;&gt;Erlware&lt;/a&gt; recently; and
I like it a lot! &lt;/p&gt;

&lt;p&gt;As an example, I created a demo application that show the use of the dsl_engine I wrote about earlier. Now, before I explain in more detail how I did this with the Erlware tools; here is how to try it out:&lt;/p&gt;

&lt;p&gt;wget http://faxien.googlecode.com/files/faxien-launcher-universal-0.3.3.py
  sudo python faxien-launcher-universal-0.3.3.py
  sudo /usr/local/erlware/bin/faxien install-release dsl&lt;em&gt;engine&lt;/em&gt;demo
  /usr/local/erlware/bin/dsl&lt;em&gt;engine&lt;/em&gt;demo&lt;/p&gt;

&lt;p&gt;Point your browser to: http://localhost:9898/&lt;/p&gt;</description>
	<pubDate>Wed, 07 May 2008 12:47:53 +0000</pubDate>
</item>
<item>
	<title>Erlang Training and Consulting &lt;br/&gt;- Jobs: Experienced Server Engineer, Los Angeles, California, permanent position</title>
	<guid>http://www.erlang-consulting.com/jobs.html#23</guid>
	<link>http://www.erlang-consulting.com/jobs.html#23</link>
	<description>Do you know the difference between static and dynamic typing? Are you obsessed with ducks? Do you want to jump ship from large corporations!? If so, then we’re looking for you.
&lt;br /&gt;
&lt;br /&gt;Our high energy startup is committed to revolutionizing the way people think about their mobile phones. It has the potential to capture hundreds of thousand of users in the uncharted space of mobile social networking. Our service promotes, assists &amp;amp; inspires face-to-face connections between friends and family through the use of digital devices while maintaining an uncompromising commitment to privacy &amp;amp; security.
&lt;br /&gt;
&lt;br /&gt;To make this happen we focus on working hard, fostering a creative job setting, working harder, indulging in our successes, and then working even harder still –you could say our ambition teeters on the insane, the good kind though.
&lt;br /&gt;
&lt;br /&gt;We are seeking an experienced server engineer to join our small but rapidly growing team. This individual will thrive in a startup environment and is passionate about creating server software that scales to hundreds of thousands of concurrent users and beyond.
&lt;br /&gt;
&lt;br /&gt;You will be involved in all phases of the software lifecycle, from specification to design, coding, and deployment. We will enjoy finding someone who takes pride in the quality of his/her work.
&lt;br /&gt;
&lt;br /&gt;Requirements:
&lt;br /&gt;
&lt;br /&gt;• Expert level server-side coding experience (Python, Erlang,Jabber/XMPP, C/C++)
&lt;br /&gt;• Object oriented programming background
&lt;br /&gt;• Experienced with functional programming
&lt;br /&gt;• Knowledge of distributed programming
&lt;br /&gt;• Strong knowledge of Postgres or MySQL and development of database-backed applications.
&lt;br /&gt;• Extensive experience with working with data intensive applications including data manipulation, structures and integration.
&lt;br /&gt;• Scalability, security and performance are at the front of your mind.
&lt;br /&gt;
&lt;br /&gt;For this reason, you should have exposure to high-volume, high-availability apps and have a knack in building distributed systems.
&lt;br /&gt;
&lt;br /&gt;To apply for this job, you need to be eligible to work in the US. This employer will not be sponsoring candidates.
&lt;br /&gt;
&lt;br /&gt;If interested, send us your CV.  
&lt;br /&gt;</description>
	<pubDate>Wed, 07 May 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Kevin Scaldeferri's Weblog: Twittering</title>
	<guid>http://kevin.scaldeferri.com/blog/2008/04/28/HelloTwitter.html</guid>
	<link>http://kevin.scaldeferri.com/blog/2008/04/28/HelloTwitter.html</link>
	<description>&lt;p&gt;I’m now on &lt;a href=&quot;http://twitter.com/kscaldef&quot;&gt;Twitter&lt;/a&gt;.  I’d
  been sort of contemplating it for a while, but &lt;a href=&quot;http://www.chesnok.com/daily/&quot;&gt;Selena&lt;/a&gt; finally talked me
  into it while we were out &lt;a href=&quot;http://hashtags.org/tag/drunkgeeking/&quot;&gt;#drunkgeeking&lt;/a&gt;
  last week.  So far only 25% of my tweets are about what I’m
  eating.&lt;/p&gt;

  &lt;p&gt;&lt;a href=&quot;http://kevin.scaldeferri.com/blog/2008/04/28/HelloTwitter.html#comments&quot;&gt;Comments&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Tue, 06 May 2008 08:54:29 +0000</pubDate>
</item>
<item>
	<title>khi's life with an exh: khigia</title>
	<guid>http://khigia.wordpress.com/?p=89</guid>
	<link>http://khigia.wordpress.com/2008/05/06/tiny-progress-on-erlocaml/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Minor updates for &lt;a href=&quot;http://code.google.com/p/erlocaml/&quot;&gt;erlocaml&lt;/a&gt; (more exactly on &lt;a href=&quot;http://code.google.com/p/erlocaml/wiki/OcamerlIntro&quot;&gt;ocamerl&lt;/a&gt;) &amp;#8230; mostly code cleaning and minor refactoring!&lt;/p&gt;
&lt;p&gt;Only one new feature: ability for Erlang processes to send message to unregistered ocaml processes. An example of that is &amp;#8220;ex_node_mult&amp;#8221; which generalize &amp;#8220;ex_node_double&amp;#8221; by dynamically creating ocaml process to perform a multiplication &amp;#8230; yep I know, not very useful&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;

% erlang code using the ocaml node
{byn, OcamlNode} ! {self(), 2},
By2 = receive M -&amp;gt; M after 1 -&amp;gt; error,
{byn, OcamlNode} ! {self(), 3},
By3 = receive M -&amp;gt; M after 1 -&amp;gt; error,
P1 = make_ref(),
P2 = make_ref(),
By2 ! {self(), P1, 21},
By3 ! {self(), P1, 21},
ok = receive {P1, 42} -&amp;gt; ok after 1 -&amp;gt; error end,
ok = receive {P2, 63} -&amp;gt; ok after 1 -&amp;gt; error end
&lt;/pre&gt;
&lt;p&gt;With this feature, ocamerl begin to be usable &amp;#8230; and that&amp;#8217;s exactly what I will be doing next: experiment with more useful (at least less silly) examples! Some ideas are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tiny mapreduce example with ocaml workers (erlang doing the network part);&lt;/li&gt;
&lt;li&gt;using the ocaml image processing lib from erlang (not best example as lot of data need to be exchange &amp;#8230; this is task to be solved for future erlocaml development);&lt;/li&gt;
&lt;li&gt;others???&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/khigia.wordpress.com/89/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/khigia.wordpress.com/89/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/khigia.wordpress.com/89/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/khigia.wordpress.com/89/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/khigia.wordpress.com/89/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/khigia.wordpress.com/89/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/khigia.wordpress.com/89/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/khigia.wordpress.com/89/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/khigia.wordpress.com/89/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/khigia.wordpress.com/89/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/khigia.wordpress.com/89/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/khigia.wordpress.com/89/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=khigia.wordpress.com&amp;blog=490125&amp;post=89&amp;subd=khigia&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Tue, 06 May 2008 07:19:16 +0000</pubDate>
</item>
<item>
	<title>Caoyuan's Blog: Scala for NetBeans Screenshot#11: Go to Remote Declaration and Doc Tooltip</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_11</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_11</link>
	<description>Two crazy days of my spare time, I was coding between sleeping and eating, with a lot of cups of coffee. Now Scala plugins support Go-To remote declarations (CTRL + Click on var/function name), and when you put cursor on the identifier name with CTRL pressed, or under auto-completion, the doc will also be shown as tooltip.
&lt;p&gt;
These features work for Java classes too &lt;strike&gt;with a bit poor performance, I'll fix it later&lt;/strike&gt; (fixed).
&lt;p&gt;
Not all identifiers have been type inferred, so these features are not applicable for all identifiers.
&lt;p&gt;
Please update to Scala Editing module as version &lt;b&gt;1.0.26.xxx&lt;/b&gt; when it's available, which is the only stable one these days. Remember to unzip Scala lib's source under $SCALA_HOME/src
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080502b.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;700&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080502b.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080502a.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;700&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080502a.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 03 May 2008 07:04:41 +0000</pubDate>
</item>
<item>
	<title>Programming in the 21st Century: Purely Functional Retrogames, Part 3</title>
	<guid>http://prog21.dadgum.com/25.html</guid>
	<link>http://prog21.dadgum.com/25.html</link>
	<description>(Read &lt;a href=&quot;http://prog21.dadgum.com/23.html&quot;&gt;Part 1&lt;/a&gt; if you missed it.)
&lt;br /&gt;&lt;br /&gt;Every entity in a game needs some data to define where it is and what it's doing.  At first thought, a ghost in Pac-Man might be defined by:
&lt;pre&gt;{X, Y, Color}
&lt;/pre&gt;which looks easy enough, but it's naive.  There needs to be a lot more data than that: direction of movement, behavior state, some base clock values for animation, etc.  And this is just simplistic Pac-Man.  In an imperative or OO language this topic barely deserves thought.  Just create a structure or object for each entity type and add fields as the situation arises.  If the structure eventually contains 50 fields, who cares?  But...
&lt;br /&gt;&lt;br /&gt;&lt;i&gt;In a functional language, the worst thing you can do is create a large &quot;struct&quot; containing all the data you think you might need for an entity.&lt;/i&gt;
&lt;br /&gt;&lt;br /&gt;First, this doesn't scale well.  Each time you want to &quot;change&quot; a field value, a whole new structure is created.  For Pac-Man it's irrelevant--there are only a handful of entities.  But the key is that if you add a single field, then &lt;i&gt;you're adding overhead across the board to all of the entity processing in your entire program&lt;/i&gt;.  The second reason this is a bad idea is that it hides the flow of data.  You no longer know what values are important to a function.  You're just passing in everything, and that makes it harder to experiment with writing simple, obviously correct primitives.  Which is less opaque:
&lt;pre&gt;step_toward({X,Y} TargetX, TargetY, Speed) -&amp;gt;
   ...

step_toward(EntityData, TargetX, TargetY, Speed) -&amp;gt;
   ...
&lt;/pre&gt;The advantage of the first one is that you don't need to know what an entity looks like.  You might not have thought that far ahead, which is fine.  You've got a simple function for operating on coordinate pairs which can be used in a variety of places, not just for entity movement. 
&lt;br /&gt;&lt;br /&gt;If we can't use a big struct, what does an entity look like?  There are undoubtedly many ways to approach this, but I came up with the following scheme.  Fundamentally, an entity is defined by an ID of some sort (&quot;I am one of those fast moving spinning things in Robotron&quot;), movement data (a position and maybe velocity), and the current behavioral state.  At the highest level:
&lt;pre&gt;{Id, Position, State}
&lt;/pre&gt;Each of these has more data behind it, and that data varies based on the entity type, the current behavior, and so on.  Position might be one of the following:
&lt;pre&gt;{X, Y}
{X, Y, XVelocity, YVelocity}
&lt;/pre&gt;State might look like:
&lt;pre&gt;{Name, StartTime, EndTime}
{Name, StartTime, EndTime, SomeStateSpecificData}
&lt;/pre&gt;&lt;tt&gt;StartTime&lt;/tt&gt; is so there's a base clock to use for animation or to know how long the current state has been running.  &lt;tt&gt;EndTime&lt;/tt&gt; is the time in the future when the state should end; it isn't needed for all states.
&lt;br /&gt;&lt;br /&gt;In my experiments, this scheme got me pretty far.  Everything is very clean at a high level--a three element tuple--and below that there's still the absolute minimum amount of data not only per entity type, but for the exact state that the entity is in.  Compare that to the normal &quot;put everything in a struct&quot; approach, where fields needed only for the &quot;return to center of maze&quot; ghost logic are always sitting there, unused in most states.
&lt;br /&gt;&lt;br /&gt;But wait, what about additional state information, such as indicating that a Pac-Man ghost is invulnerable (which is true when a ghost has been reduced to a pair of eyes returning to the center of the maze)?  If you remember &lt;a href=&quot;http://prog21.dadgum.com/24.html&quot;&gt;Part 2&lt;/a&gt;, then the parenthetical note in the previous sentence should give it away.  If the ghost is invulnerable when in a specific state, then there's no need for a separate flag.  Just check the state.</description>
	<pubDate>Sat, 03 May 2008 06:00:00 +0000</pubDate>
</item>
<item>
	<title>Trapexit's Erlang Blog Filter: A Comment on &amp;#8220;Multilanguage Programming&amp;#8221;</title>
	<guid>http://steve.vinoski.net/blog/?p=67</guid>
	<link>http://steve.vinoski.net/blog/2008/05/03/a-comment-on-multilanguage-programming/</link>
	<description>&lt;p&gt;A commenter named Nick left a thoughtful response to my &lt;a rel=&quot;nofollow&quot;&gt;post&lt;/a&gt; about my &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://computer.org/portal/pages/dsonline/2008/06/w3tow.xml&quot;&gt;&amp;#8220;Multilanguage Programming&amp;#8221; column&lt;/a&gt;. Rather than respond to it with another comment, I thought I&amp;#8217;d turn my response into a full posting, as I think Nick&amp;#8217;s feedback is representative of how many people feel about the topic.&lt;/p&gt;
&lt;p&gt;Nick said:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;I would say that instead of spending a lot of time on a conceptually different language it could be more beneficial to study, say, distributed algorithms or software/system architecture principles or your business domain. There is so much knowledge in this world that learning how to code the same thing in, roughly speaking, one more syntax seems like a waste of time. Even paying real attention to what is going on in the cloud computing can easily consume most of one’s spare time.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think there are assumptions here that are not necessarily true. Specifically, you&amp;#8217;re not necessarily learning how to code the same thing in multiple languages; rather, the idea is that by choosing the best language for the task, coding is &amp;#8220;just right&amp;#8221; for the problem at hand. For example, I know from significant first-hand experience that if you want to write a set of distributed services that support replication, failover, and fault tolerance, the code you&amp;#8217;d write to do that in C++ will be extremely different from the code you&amp;#8217;d write in Erlang to achieve the same thing (well, actually, you&amp;#8217;d be able to achieve far more in Erlang, in far fewer lines of code).&lt;/p&gt;
&lt;p&gt;This is about much more than syntax. It&amp;#8217;s about facilities, semantics, and trade-offs. If it were just syntax, then that would imply that all languages are equal in terms of expressiveness and capability, which we already know and accept to be untrue.&lt;/p&gt;
&lt;p&gt;The cloud computing topic actually provides a good example of why knowing multiple languages can be useful. To use the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code.google.com/appengine/&quot;&gt;Google App Engine&lt;/a&gt;, for example, you need to develop your applications in Python. What if you don&amp;#8217;t know Python? Too bad for you.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;From a real life perspective, it takes years or working on nontrivial software to master a language. For example, some people still manage to have only a vague idea of util.concurent &amp;mdash; and this is just a small enough (and well explained in the literature) part of Java. How realistic is it to expect that the majority of developers will be able to master multiple languages concurrently?&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I disagree that it takes years to master a language. One of the best OO developers I ever worked with was a mechanical engineer who taught himself programming. One of my current coworkers &amp;mdash; a relatively young guy &amp;mdash; started programming in Erlang only a few months ago, and he&amp;#8217;s already writing some fairly sophisticated production-quality code. In 1988, I started using C++; by 1989, I was starting to help guys like &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.pearsonhighered.com/educator/academic/product/0,3110,0201721481,00.html&quot;&gt;Stan Lippman&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/James_O._Coplien&quot;&gt;Jim Coplien&lt;/a&gt;, and others correct coding mistakes in their excellent books. I have a BSEE, no formal computer science training whatsoever, and am completely self-taught as far as programming languages go. (The only class I ever had in any computer language was a BASIC class I had to take in 1981.) Two other coworkers started with Python just a few months ago and they do quite well with it at this point. I can cite numerous such examples from throughout my career. I don&amp;#8217;t think any of us are super-programmers or anything like that, so if we can do it, I don&amp;#8217;t see why it would be a problem for anyone else.&lt;/p&gt;
&lt;p&gt;Perhaps you&amp;#8217;re falling trap to the &amp;#8220;huge language&amp;#8221; problem I mentioned in my column. It certainly can take some people many years to master enormous languages like Java and C++, but most languages are simply nowhere near that big.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;And who wants to maintain a code base written in widely different languages? Which most likely means multiple IDEs, unit testing frameworks, build systems (hey, not everyone is using even Maven yet), innumerable frameworks etc. And most of the interpreted languages among those are not even likely to run in the same VM. Not to mention the number of jobs asking for non-C++/Java skills.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I use a number of languages daily and I really have no trouble maintaining the code regardless of which language any particular piece happens to be written in, or whether I wrote the code or one of my teammates did. Once you know a language, you know it; switching to it is no more difficult than using your one and only language if you&amp;#8217;re a monolingual developer.&lt;/p&gt;
&lt;p&gt;You also mention the &amp;#8220;multiple IDE&amp;#8221; problem. The first draft of my column contained some fairly direct language describing my dislike of IDEs, or more accurately, my dislike of the IDE culture, but &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://g.oswego.edu/&quot;&gt;Doug Lea&lt;/a&gt; suggested I take it out, so I did. The problem is that some folks let the tool drive their solutions, rather than using the tool as a means to developing solutions. I&amp;#8217;ve had numerous people tell me they won&amp;#8217;t consider using a language unless their IDE fully supports it with Java- or Smalltalk-like refactoring. To me, that&amp;#8217;s completely backwards. I&amp;#8217;d rather use an &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.gnu.org/software/emacs/&quot;&gt;extensible editor&lt;/a&gt; that can handle pretty much any language, thus letting me develop optimal solutions using the right languages, rather than having a mere editing tool severely limit my choice of possible solutions.&lt;/p&gt;
&lt;p&gt;But &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://osteele.com/archives/2004/11/ides&quot;&gt;there are language mavens and there are tool mavens&lt;/a&gt;, and they typically disagree. Follow that link and read, as the posting there is incredibly insightful. I am definitely a language maven; languages are my tools. I suspect, though, that Nick and others who raise similar questions to the ones quoted here lean more toward being tool mavens. I&amp;#8217;m not passing judgment on either; I&amp;#8217;m only pointing out the different camps to help pinpoint sources of disagreement.&lt;/p&gt;
&lt;p&gt;As far as unit test frameworks, build systems, and frameworks go, I haven&amp;#8217;t ever found any big issues in those areas when using multiple languages. The reason, not surprisingly, is that knowing multiple languages gives you multiple weapons for testing and integration. Ultimately, when you&amp;#8217;re used to using multiple languages, you&amp;#8217;re used to these kinds of issues and thus they don&amp;#8217;t really present any formidable barriers.&lt;/p&gt;
&lt;p&gt;And as far as jobs go, the best developers I&amp;#8217;ve known throughout my career have been fluent in a number of programming languages, and each of them could work virtually wherever they wanted to. I don&amp;#8217;t believe this correlation is mere coincidence.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Curiously enough, this argumentation is hardly ever mentioned. Authors tend to assume that developers are lazy or have nothing else to learn.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I don&amp;#8217;t assume developers are lazy. Rather, I think our industry generally has a bad habit of continually seeking homogeneity in platforms, in languages, in tools, in frameworks, etc., and we really, really ought to know better by now. Once you learn to accept the fact that heterogeneity in computing is inevitable &amp;mdash; since nothing can do it all, right? &amp;mdash; you find yourself able to use that heterogeneity to your advantage, rather than continually battling against it and losing.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Personally, I am planning to look at Scala and probably Erlang but even judging from the number of books on those it’s clear to me that they represent merely a niche market.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Today&amp;#8217;s niche market is tomorrow&amp;#8217;s mainstream market. Regardless of whether either of those languages continues to grow, learning one or both will make you a better developer than you are today.&lt;/p&gt;
&lt;p&gt;Consider the final question I ask in my column:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;After all, do any of us really believe we’ve already learned the last programming language we’ll ever need?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I suspect the vast majority of developers would answer &amp;#8220;no&amp;#8221; to this question. Assuming that&amp;#8217;s the case, then if you don&amp;#8217;t regularly practice learning new languages, how do you know when you really need to start learning a new one, and how capable will you be of learning that next language when the need arises? The longer you stay with one language, the more isolated you become, typically without even realizing it. Shifting gears gets harder and harder. Then one day you look up and all the interesting work is elsewhere, out of your reach. Is that a position you want to put yourself in?&lt;/p&gt;</description>
	<pubDate>Sat, 03 May 2008 04:44:27 +0000</pubDate>
</item>
<item>
	<title>Trapexit's Erlang Blog Filter: Erlang: It&amp;#8217;s About Reliability</title>
	<guid>http://steve.vinoski.net/blog/?p=66</guid>
	<link>http://steve.vinoski.net/blog/2008/05/01/erlang-its-about-reliability/</link>
	<description>&lt;p&gt;In a &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.tedneward.com/2008/04/29/Groovy+Or+JRuby.aspx&quot;&gt;recent post, Ted Neward&lt;/a&gt; gives a brief description of a variety of programming languages. It&amp;#8217;s a useful post; I&amp;#8217;ve known Ted for awhile now, and he&amp;#8217;s quite knowledgeable about such things. Still, I have to comment on what he says about Erlang:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Erlang&lt;/strong&gt;. Joe Armstrong&amp;#8217;s baby was built to solve a specific set of problems at Ericsson, and from it we can learn a phenomenal amount about building massively parallel concurrent programs. The fact that it runs on its own interpreter, bad.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I might have said it like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Erlang&lt;/strong&gt;. Joe Armstrong&amp;#8217;s baby was built to solve a specific set of problems at Ericsson, and from it we can learn a phenomenal amount about building highly reliable systems that can also support massive concurrency. The fact that it runs on its own interpreter, good; otherwise, the reliability wouldn&amp;#8217;t be there and it would be just another curious but useless concurrency-oriented language experiment.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Far too many blog posts and articles that touch on Erlang completely miss the point that reliability is an extremely important aspect of the language.&lt;/p&gt;
&lt;p&gt;To achieve reliability, you have to accept the fact that failure &lt;em&gt;will&lt;/em&gt; occur, Once you accept that, then other things fall into place: you need to be able to restart things quickly, and to do that, processes need to be cheap. If something fails, you don&amp;#8217;t want it taking everything else with it, so you need to at least minimize, if not eliminate, sharing, which leads you to message passing. You also need monitoring capabilities that can detect failed processes and restart them (BTW in the same posting Ted seems to claim that Erlang has no monitoring capabilities, which baffles me).&lt;/p&gt;
&lt;p&gt;Massive concurrency capabilities become far easier with an architecture that provides lightweight processes that share nothing, but that doesn&amp;#8217;t mean that once you design it, the rest is just a simple matter of programming. Rather, actually &lt;em&gt;implementing&lt;/em&gt; all this in a way that delivers what&amp;#8217;s needed and performs more than adequately for production-quality systems is an incredibly enormous challenge, one that the Erlang development team has quite admirably met, and that&amp;#8217;s an understatement if there ever was one.&lt;/p&gt;
&lt;p&gt;They come for the concurrency but they stay for the reliability. Do any other &amp;#8220;Erlang-like&amp;#8221; languages have real, live, production systems in the field that have been running non-stop for years? (That&amp;#8217;s not a rhetorical question; if you know of any such languages, please let me know.) Next time you see yet another posting about Erlang and concurrency, especially those of the form &amp;#8220;Erlang-like concurrency in language X!&amp;#8221; just ask the author: where&amp;#8217;s the reliability?&lt;/p&gt;</description>
	<pubDate>Thu, 01 May 2008 13:19:10 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Adobe &quot;opening&quot; a few more bits of Flash</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-2407483676543432986</guid>
	<link>http://www.rsaccon.com/2008/05/adobe-opening-few-more-bits-of-flash.html</link>
	<description>Their new initiative is called Open Screen Project and is dedicated to drive consistent rich Internet experiences across devices. It is not about open sourcing the flash player, just about opening some specifications, such as  FlashCast protocol and the AMF protocol. But AMF for example has been reverse engineered long time ago, in 2003 when I contributed to JavaAMF, this  protocol has already</description>
	<pubDate>Thu, 01 May 2008 02:04:08 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Trapexit's Erlang Blog Filter: Multilingual Programming</title>
	<guid>http://steve.vinoski.net/blog/?p=65</guid>
	<link>http://steve.vinoski.net/blog/2008/04/30/multilingual-programming/</link>
	<description>&lt;p&gt;Multilingual programming is one of my all-time favorite topics, and I feel very strongly that software developers should be adept at multiple programming languages. Developers need to be able to apply whatever language in their arsenal best suits the problem at hand, and perhaps even quickly learn a new language if what they already know doesn&amp;#8217;t fit.&lt;/p&gt;
&lt;p&gt;Too many developers seem to think that familiarity with one general-purpose language is good enough, but it isn&amp;#8217;t. Knowing one language forces you to try to bend or change problems to fit whatever that language happens to be. That&amp;#8217;s like trying to solve a problem by choosing a data structure or algorithm to use without ever considering the nature or details of the problem.&lt;/p&gt;
&lt;p&gt;One of my favorite quotes on this topic is from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html&quot;&gt;Steve Yegge&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&amp;#8230;an &amp;#8220;X programmer&amp;#8221;, for any value of X, is a weak player. You have to cross-train to be a decent athlete these days. Programmers need to be fluent in multiple languages with fundamentally different &amp;#8220;character&amp;#8221; before they can make truly informed design decisions.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Yes indeed.&lt;/p&gt;
&lt;p&gt;Too many developers also come up with weak excuses for not learning new programming languages, most of them being just different ways of saying, &amp;#8220;But it&amp;#8217;s different from the language I already know!&amp;#8221; Don&amp;#8217;t whine about the differences &amp;mdash; instead, learn to appreciate them and take advantage of them.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve hinted at the fact that I like this topic in previous issues of my &lt;a rel=&quot;nofollow&quot;&gt;Internet Computing column&lt;/a&gt; when I covered the usefulness and applicability of languages such as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dsonline.computer.org/portal/pages/dsonline/2006/06/w3tow.html&quot;&gt;JavaScript and E4X&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dsonline.computer.org/portal/pages/dsonline/2006/08/w4tow.html&quot;&gt;Ruby&lt;/a&gt; (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dsonline.computer.org/portal/pages/dsonline/2006/10/w5tow.html&quot;&gt;twice&lt;/a&gt;), and &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dsonline.computer.org/portal/pages/dsonline/2007/10/w5tow.html&quot;&gt;Erlang&lt;/a&gt; (also &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://dsonline.computer.org/portal/pages/dsonline/2007/12/w6tow.html&quot;&gt;twice&lt;/a&gt;) for middleware and integration projects. My latest column, entitled &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://steve.vinoski.net/pdf/IEEE-Multilingual_Programming.pdf&quot;&gt;&amp;#8220;Multilingual Programming&amp;#8221;&lt;/a&gt; (PDF), attempts to provide a few reasons why knowing and being able to apply multiple languages can be highly beneficial. As always, I welcome comments and feedback.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[Update: if you prefer not to read PDF, this column is now also &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://computer.org/portal/pages/dsonline/2008/06/w3tow.xml&quot;&gt;available online&lt;/a&gt; in HTML.]&lt;/em&gt;&lt;/p&gt;</description>
	<pubDate>Thu, 01 May 2008 00:40:05 +0000</pubDate>
</item>
<item>
	<title>Muharem Hrnjadovic: muharem</title>
	<guid>http://muharem.wordpress.com/?p=42</guid>
	<link>http://muharem.wordpress.com/2008/04/30/text-filtering-with-erlang/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;After a long break I picked up the &lt;a href=&quot;http://www.pragprog.com/titles/jaerlang/programming-erlang&quot;&gt;Erlang book&lt;/a&gt; again and my appetite for writing some erlang code was soon kindled.&lt;/p&gt;
&lt;p&gt;A small Python &lt;a href=&quot;http://hrnjad.net/src/p/filter_url.py.html&quot;&gt;component&lt;/a&gt; I produced &lt;a href=&quot;https://launchpad.net/~al-maisan&quot;&gt;at work&lt;/a&gt; seemed like a good candidate for my (sequential) erlang exercises. It is a fairly simple component that removes user/password data embedded in URLs.&lt;/p&gt;
&lt;p&gt;Just so you know where I am coming from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;my main/favourite programming language is Python&lt;/li&gt;
&lt;li&gt;my exercises are mainly about &lt;em&gt;sequential&lt;/em&gt;, &lt;em&gt;non-distributed&lt;/em&gt; and &lt;em&gt;non-telecoms-related&lt;/em&gt; problems whereas erlang&amp;#8217;s main strength and appeal lies in the area of parallel/distributed telecoms/networking systems&lt;/li&gt;
&lt;li&gt;I have played with erlang a little bit before (&lt;a href=&quot;http://muharem.wordpress.com/2007/07/31/erlang-vs-stackless-python-a-first-benchmark/&quot;&gt;ring benchmark&lt;/a&gt;, &lt;a href=&quot;http://muharem.wordpress.com/2007/08/21/processing-xml-in-erlang/&quot;&gt;XML parsing&lt;/a&gt;) and liked it in general although IMHO it lacks severely when it comes to the availability and quality of standard library components.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now that my particular set of preconceptions is clear and in the open, let&amp;#8217;s look at the stuff below &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;
&lt;h3&gt;File processing with erlang&amp;#8217;s regexp module&lt;/h3&gt;
&lt;p&gt;The &lt;a href=&quot;http://hrnjad.net/src/p/regex.erl.html&quot;&gt;initial implementation&lt;/a&gt; of the URL filter in erlang used its &lt;a href=&quot;http://www.erlang.org/doc/man/regexp.html&quot;&gt;regexp library&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt; &lt;span&gt; 1 &lt;/span&gt;&lt;span&gt;-module&lt;/span&gt;(regex)&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt; 2 &lt;/span&gt;&lt;span&gt;-export&lt;/span&gt;([main&lt;span&gt;/&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;])&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt; 3 &lt;/span&gt;
 &lt;span&gt; 4 &lt;/span&gt;isalphanum(C) &lt;span&gt;when&lt;/span&gt; C &lt;span&gt;&amp;gt;&lt;/span&gt; 47, C &lt;span&gt;&amp;lt;&lt;/span&gt; 58; C &lt;span&gt;&amp;gt;&lt;/span&gt; 64, C &lt;span&gt;&amp;lt;&lt;/span&gt; 91; C &lt;span&gt;&amp;gt;&lt;/span&gt; 96, C &lt;span&gt;&amp;lt;&lt;/span&gt; 123 &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;true&lt;/span&gt;;
 &lt;span&gt; 5 &lt;/span&gt;isalphanum(&lt;span&gt;_&lt;/span&gt;) &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;false&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt; 6 &lt;/span&gt;
 &lt;span&gt; 7 &lt;/span&gt;&lt;span&gt;%% Generate a temporary file name of length N&lt;/span&gt;
 &lt;span&gt; 8 &lt;/span&gt;genname(&lt;span&gt;0&lt;/span&gt;, L) &lt;span&gt;-&amp;gt;&lt;/span&gt; L;
 &lt;span&gt; 9 &lt;/span&gt;genname(N, L) &lt;span&gt;-&amp;gt;&lt;/span&gt;
 &lt;span&gt;10 &lt;/span&gt;    R &lt;span&gt;=&lt;/span&gt; &lt;span&gt;random&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;uniform&lt;/span&gt;(123),
 &lt;span&gt;11 &lt;/span&gt;    &lt;span&gt;case&lt;/span&gt; isalphanum(R) &lt;span&gt;of&lt;/span&gt;
 &lt;span&gt;12 &lt;/span&gt;        &lt;span&gt;true&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt; genname(N-1, [R|L]);
 &lt;span&gt;13 &lt;/span&gt;        &lt;span&gt;false&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt; genname(N, L)
 &lt;span&gt;14 &lt;/span&gt;    &lt;span&gt;end&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt;15 &lt;/span&gt;
 &lt;span&gt;16 &lt;/span&gt;&lt;span&gt;%% Returns a randomly generated temporary file path where the basename is&lt;/span&gt;
 &lt;span&gt;17 &lt;/span&gt;&lt;span&gt;%% of length N&lt;/span&gt;
 &lt;span&gt;18 &lt;/span&gt;mktemppath(Prefix, N) &lt;span&gt;-&amp;gt;&lt;/span&gt; Prefix &lt;span&gt;++&lt;/span&gt; &lt;span&gt;&amp;#8220;/&amp;#8221;&lt;/span&gt; &lt;span&gt;++&lt;/span&gt; genname(N, [])&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt;19 &lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;Please note how I had to implement functionality absent from the standard library above.&lt;/p&gt;
&lt;pre&gt; &lt;span&gt;20 &lt;/span&gt;&lt;span&gt;%% Removes passwords embedded in URLs from a log file.&lt;/span&gt;
 &lt;span&gt;21 &lt;/span&gt;scrub_file(Tmpdir, F) &lt;span&gt;-&amp;gt;&lt;/span&gt;
 &lt;span&gt;22 &lt;/span&gt;    &lt;span&gt;%% make a temporary directory if it does not exist yet.&lt;/span&gt;
 &lt;span&gt;23 &lt;/span&gt;    &lt;span&gt;case&lt;/span&gt; &lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;make&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;(Tmpdir) &lt;span&gt;of&lt;/span&gt;
 &lt;span&gt;24 &lt;/span&gt;        ok &lt;span&gt;-&amp;gt;&lt;/span&gt; ok;
 &lt;span&gt;25 &lt;/span&gt;        {error,eexist} &lt;span&gt;-&amp;gt;&lt;/span&gt; ok;
 &lt;span&gt;26 &lt;/span&gt;        &lt;span&gt;_&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;exit&lt;/span&gt;({error, failed_to_make_tmpdir})
 &lt;span&gt;27 &lt;/span&gt;    &lt;span&gt;end&lt;/span&gt;,
 &lt;span&gt;28 &lt;/span&gt;
 &lt;span&gt;29 &lt;/span&gt;    &lt;span&gt;%% Move the original file out of the way.&lt;/span&gt;
 &lt;span&gt;30 &lt;/span&gt;    T &lt;span&gt;=&lt;/span&gt; mktemppath(Tmpdir, 16),
 &lt;span&gt;31 &lt;/span&gt;    &lt;span&gt;case&lt;/span&gt; &lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;rename&lt;/span&gt;(F, T) &lt;span&gt;of&lt;/span&gt;
 &lt;span&gt;32 &lt;/span&gt;        ok &lt;span&gt;-&amp;gt;&lt;/span&gt; ok;
 &lt;span&gt;33 &lt;/span&gt;        &lt;span&gt;_&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;exit&lt;/span&gt;({error, failed_to_move_file})
 &lt;span&gt;34 &lt;/span&gt;    &lt;span&gt;end&lt;/span&gt;,
 &lt;span&gt;35 &lt;/span&gt;
 &lt;span&gt;36 &lt;/span&gt;    &lt;span&gt;%% Now open it for reading.&lt;/span&gt;
 &lt;span&gt;37 &lt;/span&gt;    {&lt;span&gt;_&lt;/span&gt;, In} &lt;span&gt;=&lt;/span&gt; &lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;open&lt;/span&gt;([T], read),
 &lt;span&gt;38 &lt;/span&gt;    &lt;span&gt;%% Open the original path for writing.&lt;/span&gt;
 &lt;span&gt;39 &lt;/span&gt;    {&lt;span&gt;_&lt;/span&gt;, Out} &lt;span&gt;=&lt;/span&gt; &lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;open&lt;/span&gt;([F], write),
 &lt;span&gt;40 &lt;/span&gt;
 &lt;span&gt;41 &lt;/span&gt;    &lt;span&gt;%% Call the function that will scrub the lines.&lt;/span&gt;
 &lt;span&gt;42 &lt;/span&gt;    scrub_lines(In, Out),
 &lt;span&gt;43 &lt;/span&gt;
 &lt;span&gt;44 &lt;/span&gt;    &lt;span&gt;%% Close the file handles and return the path to the original file.&lt;/span&gt;
 &lt;span&gt;45 &lt;/span&gt;    &lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;close&lt;/span&gt;(Out),
 &lt;span&gt;46 &lt;/span&gt;    &lt;span&gt;file&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;close&lt;/span&gt;(In),
 &lt;span&gt;47 &lt;/span&gt;    T&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt;48 &lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The code that scrubs the URLs is below, the &lt;code&gt;scrub_lines()&lt;/code&gt; function is tail recursive.&lt;/p&gt;
&lt;pre&gt; &lt;span&gt;49 &lt;/span&gt;&lt;span&gt;%% This is where the log file is actually read linewise and where&lt;/span&gt;
 &lt;span&gt;50 &lt;/span&gt;&lt;span&gt;%% the scrubbing function is invoked for lines that contain URLs.&lt;/span&gt;
 &lt;span&gt;51 &lt;/span&gt;scrub_lines(In, Out) &lt;span&gt;-&amp;gt;&lt;/span&gt;
 &lt;span&gt;52 &lt;/span&gt;    L &lt;span&gt;=&lt;/span&gt; &lt;span&gt;io&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;_&lt;/span&gt;&lt;span&gt;line&lt;/span&gt;(In, &lt;span&gt;&amp;#8221;&lt;/span&gt;),
 &lt;span&gt;53 &lt;/span&gt;    &lt;span&gt;case&lt;/span&gt; L &lt;span&gt;of&lt;/span&gt;
 &lt;span&gt;54 &lt;/span&gt;        eof &lt;span&gt;-&amp;gt;&lt;/span&gt; ok;
 &lt;span&gt;55 &lt;/span&gt;        &lt;span&gt;_&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt;
 &lt;span&gt;56 &lt;/span&gt;            &lt;span&gt;%% Does the line contain URLs?&lt;/span&gt;
 &lt;span&gt;57 &lt;/span&gt;            &lt;span&gt;case&lt;/span&gt; &lt;span&gt;string&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;str&lt;/span&gt;(L, &lt;span&gt;&amp;#8220;://&amp;#8221;&lt;/span&gt;) &lt;span&gt;of&lt;/span&gt;
 &lt;span&gt;58 &lt;/span&gt;                &lt;span&gt;0&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;io&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;(Out, &lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;~s&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;, [L]);
 &lt;span&gt;59 &lt;/span&gt;                &lt;span&gt;_&lt;/span&gt; &lt;span&gt;-&amp;gt;&lt;/span&gt;
 &lt;span&gt;60 &lt;/span&gt;                    &lt;span&gt;case&lt;/span&gt; &lt;span&gt;regexp&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;gsub&lt;/span&gt;(L, &lt;span&gt;&amp;#8220;://[^:]+:[^@]+@&amp;#8221;&lt;/span&gt;, &lt;span&gt;&amp;#8220;://&amp;#8221;&lt;/span&gt;) &lt;span&gt;of&lt;/span&gt;
 &lt;span&gt;61 &lt;/span&gt;                        {ok, S, &lt;span&gt;_&lt;/span&gt;} &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;io&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;(Out, &lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;~s&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;, [S]);
 &lt;span&gt;62 &lt;/span&gt;                        {R, S, &lt;span&gt;_&lt;/span&gt;} &lt;span&gt;-&amp;gt;&lt;/span&gt; &lt;span&gt;io&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;(&lt;span&gt;&amp;#8220;Failed: {&lt;/span&gt;&lt;span&gt;~p&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;~p&lt;/span&gt;&lt;span&gt;}&amp;#8221;&lt;/span&gt;, [R,S])
 &lt;span&gt;63 &lt;/span&gt;                    &lt;span&gt;end&lt;/span&gt;
 &lt;span&gt;64 &lt;/span&gt;            &lt;span&gt;end&lt;/span&gt;,
 &lt;span&gt;65 &lt;/span&gt;            &lt;span&gt;%% Continue with next line.&lt;/span&gt;
 &lt;span&gt;66 &lt;/span&gt;            scrub_lines(In, Out)
 &lt;span&gt;67 &lt;/span&gt;    &lt;span&gt;end&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;
 &lt;span&gt;68 &lt;/span&gt;
 &lt;span&gt;69 &lt;/span&gt;&lt;span&gt;%% Main function.&lt;/span&gt;
 &lt;span&gt;70 &lt;/span&gt;main([A]) &lt;span&gt;-&amp;gt;&lt;/span&gt;
 &lt;span&gt;71 &lt;/span&gt;    {A1,A2,A3} &lt;span&gt;=&lt;/span&gt; &lt;span&gt;now&lt;/span&gt;(),
 &lt;span&gt;72 &lt;/span&gt;    &lt;span&gt;random&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;seed&lt;/span&gt;(A1, A2, A3),
 &lt;span&gt;73 &lt;/span&gt;
 &lt;span&gt;74 &lt;/span&gt;    &lt;span&gt;%% A single argument (the name of the file to be scrubbed) is expected.&lt;/span&gt;
 &lt;span&gt;75 &lt;/span&gt;    F &lt;span&gt;=&lt;/span&gt; &lt;span&gt;atom_to_list&lt;/span&gt;(A),
 &lt;span&gt;76 &lt;/span&gt;    T &lt;span&gt;=&lt;/span&gt; scrub_file(&lt;span&gt;&amp;#8220;tmp&amp;#8221;&lt;/span&gt;, F),
 &lt;span&gt;77 &lt;/span&gt;
 &lt;span&gt;78 &lt;/span&gt;    &lt;span&gt;%% The scrubbed file content will be written to a new file that&amp;#8217;s&lt;/span&gt;
 &lt;span&gt;79 &lt;/span&gt;    &lt;span&gt;%% in the place of the original file. Where was the latter moved to?&lt;/span&gt;
 &lt;span&gt;80 &lt;/span&gt;    &lt;span&gt;io&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;(&lt;span&gt;&amp;#8220;&lt;/span&gt;&lt;span&gt;~s~n&lt;/span&gt;&lt;span&gt;&amp;#8220;&lt;/span&gt;, [T]),
 &lt;span&gt;81 &lt;/span&gt;
 &lt;span&gt;82 &lt;/span&gt;    &lt;span&gt;init&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;stop&lt;/span&gt;()&lt;span&gt;.&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;The cursory benchmarks performed (on log files of varying size) using the &lt;a href=&quot;http://hrnjad.net/src/p/filter_url.py.html&quot;&gt;python&lt;/a&gt; and the &lt;a href=&quot;http://hrnjad.net/src/p/regex.erl.html&quot;&gt;erlang&lt;/a&gt; code confirmed &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2007/09/21/Erlang&quot;&gt;other people&amp;#8217;s experiences with erlang&amp;#8217;s regex performance&lt;/a&gt; (but see also this &lt;a href=&quot;http://www.findinglisp.com/blog/2007/10/stupid-programming-language-tricks.html&quot;&gt;interesting &amp;#8220;rebuttal&amp;#8221;&lt;/a&gt;).&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Log file size&lt;/th&gt;
&lt;th&gt;Python times&lt;/th&gt;
&lt;th&gt;Erlang times&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1 MB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m0.230s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m1.896s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10 MB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m1.510s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m8.766s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;100 MB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m14.793s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1m17.662s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1 GB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2m55.012s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;13m54.588s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;The do-it-yourself construction&lt;/h3&gt;
&lt;p&gt;Curious to learn whether the performance can be improved by abstaining from regular expressions I came up with an &lt;a href=&quot;http://hrnjad.net/src/p/noregex.erl.html&quot;&gt;alternative implementation&lt;/a&gt; that does not use &lt;code&gt;regexp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;As you can see below the do-it-yourself construction is indeed performing slightly better at the expense of being very specialized and requiring 60% more code.&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;Log file size&lt;/th&gt;
&lt;th&gt;Python times&lt;/th&gt;
&lt;th&gt;Erlang regexp&lt;/th&gt;
&lt;th&gt;Erlang do-it-yourself&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1 MB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m0.230s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m1.896s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m1.969s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10 MB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m1.510s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m8.766s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m8.459s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;100 MB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;0m14.793s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1m17.662s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;1m12.448s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1 GB&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;2m55.012s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;13m54.588s&lt;/td&gt;
&lt;td align=&quot;right&quot;&gt;13m3.360s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;In conclusion&lt;/h3&gt;
&lt;p&gt;Every couple of months or so I develop a euphoria towards erlang which is consistently dampened by using the language to tackle problems for which the language admittedly was not designed in first place.&lt;/p&gt;
&lt;p&gt;I guess most people start using a language for simple programming exercises first as opposed to building something like a &lt;a href=&quot;http://www.ejabberd.im/&quot;&gt;Jabber/XMPP instant messaging server&lt;/a&gt; straightaway.&lt;/p&gt;
&lt;p&gt;I hate to repeat myself but improving the standard library (by adding common functionality and making sure it performs decently) would do a lot to attract fresh talent to the erlang community and I hear that a certain rate of influx of &amp;#8220;fresh blood&amp;#8221; is a necessary prerequisite for success.&lt;/p&gt;
&lt;p&gt;Ah, and no, you were not supposed to grok the sentence above unless you read it three times &lt;img src=&quot;http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/muharem.wordpress.com/42/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/muharem.wordpress.com/42/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/muharem.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/muharem.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/muharem.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/muharem.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/muharem.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/muharem.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/muharem.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/muharem.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/muharem.wordpress.com/42/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/muharem.wordpress.com/42/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=muharem.wordpress.com&amp;blog=484506&amp;post=42&amp;subd=muharem&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Wed, 30 Apr 2008 16:34:40 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Firefox extensions for JS disabling and Python integration</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-8565451954740492558</guid>
	<link>http://www.rsaccon.com/2008/04/firefox-extensions-for-js-disabling-and.html</link>
	<description>My collection of Firefox extensions is mostly just the usual stuff you need for web development, such as Firebug, MeasureIt, ColorZilla, S3Fox, FlashSwitcher and a few more. After Firebug,  for long time I didn't spot anything comparable spectacular. But recently I discovered some interesting extensions:
QuickJava: Finally an extension which makes it dead simple to disable/re-enable Javascript (I</description>
	<pubDate>Wed, 30 Apr 2008 09:07:57 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Caoyuan's Blog: Scala for NetBeans Screenshot#10: Working on Auto-Completion for Java</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_91</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_91</link>
	<description>I've done some hacking work to get Java classes to be completion enabled, but it's not full functional. Any way, it's a good start point for auto-completion for Scala plugins, I hope to get more type inference work to be finished, and finally support both Scala/Java classes smart-completion.
&lt;p&gt;
Click on the picture to enlarge it
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080428a.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;700&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080428a.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080428b.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;700&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080428b.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Wed, 30 Apr 2008 03:09:38 +0000</pubDate>
</item>
<item>
	<title>Erlang Eclipse IDE: Erlide 0.3.49.200804271817</title>
	<guid>http://sourceforge.net/forum/forum.php?forum_id=816735</guid>
	<link>http://sourceforge.net/forum/forum.php?forum_id=816735</link>
	<description>* A long-time standing bug has been fixed, where the text went out of synch with the internal model and caused weird behaviour for the outline and other features.&lt;br /&gt;* The indentation code is much better, I'd say it's almost done.&lt;br /&gt;* Some stability issues have been fixed.&lt;br /&gt;&lt;br /&gt;Enjoy! (&lt;a href=&quot;http://sourceforge.net/forum/forum.php?forum_id=816735&quot;&gt;0 comments&lt;/a&gt;)</description>
	<pubDate>Sun, 27 Apr 2008 17:54:16 +0000</pubDate>
	<author>vladdu@users.sourceforge.net (Vlad Dumitrescu)</author>
</item>
<item>
	<title>Caoyuan's Blog: Scala for NetBeans Screenshot#9: Working on Auto-Completion</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_9</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_9</link>
	<description>With the indexed cache of project's Class/Trait/Object, and Scala standard library's source files, the auto-completion is a bit smarter now. If the val/var is defined with type, the auto-completion can know which methods will be suggested. (Not work for java classes yet)
&lt;p&gt;
To get this working, you should follow these steps:
&lt;ul&gt;
&lt;li&gt;Update to newest Scala plugins (Editing version 1.0.21.1)&lt;/li&gt;
&lt;li&gt;Delete the old-cache files which are located at your NetBeans's configuration directory (for example, .netbeans/dev/var/cache).&lt;/li&gt;
&lt;li&gt;Download Scala standard library's source file, unzip them to $SCALA_HOME/src, per sub-folder per source jar file&lt;/li&gt; 
&lt;/ul&gt;

 &lt;p&gt;
Click on the picture to enlarge it
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080425.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;700&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080425.png&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Sat, 26 Apr 2008 02:40:55 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: The missing feature of the Web: a DNS REST API</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-7994656310753990125</guid>
	<link>http://www.rsaccon.com/2008/04/missing-feature-of-web-dns-rest-api.html</link>
	<description>I have been waiting for years, that a quality DNS provider will a offer a REST API for setting DNS Records, but there is still no such a thing on the market. There is a SOAP based offering from Nettica (unfortunately I have an SOAP allergy). And there are the REST APIs some service providers are exposing for updating dynamic IPs.
DNS Made Easy, one of my preferred DNS providers, told me about a</description>
	<pubDate>Sat, 26 Apr 2008 00:32:03 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: Amazon announced persistent storage for EC2</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-7612783270205077057</guid>
	<link>http://www.rsaccon.com/2008/04/amazon-announced-persistent-storage-for.html</link>
	<description>If Google App Engine does not provide enough flexibility for you, then there is some good news from Amazon: one of the missing pieces, persistent storage for EC2, has just been announced.</description>
	<pubDate>Thu, 24 Apr 2008 21:06:33 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: Google App Engine - Niall Kennedy's summary</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-802861057143460615</guid>
	<link>http://www.rsaccon.com/2008/04/google-app-engine-niall-kennedys.html</link>
	<description>Great summary about  the Google App engine, by  Niall Kennedy. He even provides some insights about the people behind it, and according to his first hand knowledge, this is just the beginning of what Google is rolling out:
I met with the App Engine's team leads on Monday morning for an in-depth overview of the product, its features, and its limitations. Google has been working on the Google App</description>
	<pubDate>Thu, 24 Apr 2008 21:05:21 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: Scaling down - the least talked about feature of GAE</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-7592176490490881932</guid>
	<link>http://www.rsaccon.com/2008/04/scaling-down-least-talked-about-feature.html</link>
	<description>It launched less than a week ago and now all over the blogosphere people are discussing the Google App Engine (GAE).  Most talk is  about scaling up, about potential lock-ins,  even if the SDK is based on open source software. Only one thing where developers seem generally to agree: with Python, Google has made a good choice (maybe those not knowing Python yet but desperately looking forward to</description>
	<pubDate>Thu, 24 Apr 2008 21:05:03 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: Google App Engine Team fixing issues quickly</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-4072596650818277034</guid>
	<link>http://www.rsaccon.com/2008/04/google-app-engine-team-fixing-issues.html</link>
	<description>Toying around a bit today on Google App Engine, I found a minor issue (not security related, very easy to work around and only affecting Mac users) in an add-on for the actual SDK. Only 32 minutes after I reported the issue they had fixed it  !</description>
	<pubDate>Thu, 24 Apr 2008 21:04:03 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: It's getting cloudy - Yahoo Application Platform</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-659051239021263089</guid>
	<link>http://www.rsaccon.com/2008/04/its-getting-cloudy-yahoo-application.html</link>
	<description>Just read this on TechCrunch:
... Yahoo Application Platform (YAP) - which will be a direct competitor to Google App Engine. Users can host their independent applications on Yahoo’s bandwidth, storage, database and CPU resources. At first they’ll support SecurePHP applications only, but they’ll expand to additional languages over time. The model will be very similar to Google’s - free usage up to</description>
	<pubDate>Thu, 24 Apr 2008 21:03:23 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Erlang Developers Home: Lists arithmetic</title>
	<guid>http://erlangdevelopers.splinder.com/post/16848645/Lists+arithmetic</guid>
	<link>http://erlangdevelopers.splinder.com/post/16848645/Lists+arithmetic</link>
	<description>&lt;p&gt;In Erlang we can use many method to access to lists and tuples, and some of them are very quick and easy.
With ++ and -- operators you can add and subtract lists, like in the following example:

Thelist=[1,2,3,4,5,6,7,8,9,10],
Even = lists:filter(fun(E) -&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  E rem 2 == 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; end,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thelist),
Odd=Thelist -- Even,
Newlist = Odd ++ [ one, five ].

So Odd list will contains [1,3,5,7,9], Even list will contains [2,4,6,8,10] and Newlist will contain [1,3,5,7,9,one,five].&lt;/p&gt;Pubblicato da &lt;a href=&quot;http://www.splinder.com/profile/stefko&quot;&gt;stefko&lt;/a&gt; | &lt;a href=&quot;http://erlangdevelopers.splinder.com/post/16848645/Lists+arithmetic#comment&quot;&gt;Commenti&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/list&quot; rel=&quot;nofollow&quot;&gt;list&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/erlang&quot; rel=&quot;nofollow&quot;&gt;erlang&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/arithmetic&quot; rel=&quot;nofollow&quot;&gt;arithmetic&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&quot; title=&quot;Cita il post nel tuo blog&quot; rel=&quot;nofollow&quot; class=&quot;image&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/blogthis.png&quot; alt=&quot;Cita il post nel tuo blog&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.splinder.com/community/contacts/invite?nid=16848645&quot; title=&quot;Segnala il post&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/emailthis.png&quot; alt=&quot;Segnala il post&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&amp;title=Lists+arithmetic&quot; title=&quot;Aggiungi su del.icio.us&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/delicious.png&quot; alt=&quot;Aggiungi su del.icio.us&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&amp;title=Lists+arithmetic&quot; title=&quot;Aggiungi su digg.com&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/digg.png&quot; alt=&quot;Aggiungi su digg.com&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&amp;title=Lists+arithmetic&quot; title=&quot;Aggiungi su Google&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/google.png&quot; alt=&quot;Aggiungi su Google&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&amp;t=Lists+arithmetic&quot; title=&quot;Aggiungi su Yahoo&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/yahoo.png&quot; alt=&quot;Aggiungi su Yahoo&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&quot; title=&quot;Aggiungi su Technorati&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/technorati.png&quot; alt=&quot;Aggiungi su Technorati&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.badzu.net/submit?action=it&amp;link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16848645%2FLists%2Barithmetic&amp;title=Lists+arithmetic&quot; title=&quot;Aggiungi su Badzu&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/badzu.png&quot; alt=&quot;Aggiungi su Badzu&quot; /&gt;&lt;/a&gt;

&lt;br /&gt;&lt;br /&gt;</description>
	<pubDate>Wed, 23 Apr 2008 08:20:03 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Cryptography API for Google Gears</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-6656114805716323871</guid>
	<link>http://www.rsaccon.com/2008/04/cryptography-api-for-google-gears.html</link>
	<description>Gears will provide native cryptography to web applications, at least this is what Google Summer of Code student Mike Ter Louw is planning to implement in the coming months. While it is possible to implement browser side cryptography in Javascript (e.g.: dojox.encoding), only few Ajax applications use this functionality, because it is slow and for communication purposes it only adds a very thin</description>
	<pubDate>Tue, 22 Apr 2008 22:38:12 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Yariv's Blog: Startup School</title>
	<guid>http://yarivsblog.com/articles/2008/04/21/startup-school/</guid>
	<link>http://feeds.feedburner.com/~r/YarivsBlog/~3/274520961/</link>
	<description>&lt;p&gt;I attended &lt;a href=&quot;http://startupschool.org/&quot;&gt;startup school&lt;/a&gt; on Saturday. It was a great experience and a rare opportunity to hear to a such impressive &lt;a href=&quot;http://startupschool.org/speakers.html&quot;&gt;speakers&lt;/a&gt; share their wisdom about technology and entrepreneurship. Some of my favorite talks were by David Heinemeier Hansson, Greg McAdoo, Marc Andreesen, Paul Buchheit and Michael Arrington. I met a bunch of programmers and entrepreneurs and I also chatted briefly with DHH about 37signals and Peter Norvig about new search startups and their chances of competing with Google. Many thanks to YCombinator for organizing such a great event!&lt;/p&gt;
&lt;p&gt;If you haven&amp;#8217;t attended, you can see all the videos &lt;a href=&quot;http://omnisio.com/startupschool08&quot;&gt;here&lt;/a&gt;. Highly recommended.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/YarivsBlog/~4/274520961&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 21 Apr 2008 07:25:41 +0000</pubDate>
</item>
<item>
	<title>Erlang Training and Consulting &lt;br/&gt;- News: Practical Erlang Programming Tutorial at OSCON 2008!</title>
	<guid>http://www.erlang-consulting.com/aboutus/news.html#98</guid>
	<link>http://www.erlang-consulting.com/aboutus/news.html#98</link>
	<description>Erlang Training and Consulting has been selected to give a tutorial on Practical Erlang Programming at O’Reilly’s Open Source Convention in Portland, Oregon. The tutorial, which will cover sequential and concurrent Erlang programming, has been scheduled for the 22 Jul 2008. We look forward to seeing you there! For more information on OSCON and the contents of the tutorial, visit the &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/detail/3373&quot; class=&quot;mylink&quot; target=&quot;_blank&quot;&gt;OSCON conference site&lt;/a&gt;...</description>
	<pubDate>Mon, 21 Apr 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Flash done right and on Google App Engine</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-3226845216899518178</guid>
	<link>http://www.rsaccon.com/2008/04/flash-done-right-and-on-google-app.html</link>
	<description>Often I criticize the usage of Flash for content centric pages, because often Flash is implemented in a way it causes a disastrous user experience (from arbitrarily resizing browser to sound which you can't turn off and fonts which you can't resize, just to mention the worst mistakes). Now I came across a new project, which advocates to do Flash the right way:  gaeswf by Aral Balkan, a client and</description>
	<pubDate>Sat, 19 Apr 2008 11:45:07 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Programming in the 21st Century: Purely Functional Retrogames, Part 2</title>
	<guid>http://prog21.dadgum.com/24.html</guid>
	<link>http://prog21.dadgum.com/24.html</link>
	<description>(Read &lt;a href=&quot;http://prog21.dadgum.com/23.html&quot;&gt;Part 1&lt;/a&gt; if you missed it.)
&lt;br /&gt;&lt;br /&gt;The difficult, or at least different, part of writing a game in a purely functional style is living without global, destructive updates.  But before getting into how to deal with that, anything that can be done to reduce the need for destructive updates is going to make things easier later on.
&lt;br /&gt;&lt;br /&gt;Back when I actually wrote 8-bit games, much of my code involved updating timers and counters used for animation and special effects and so on.  At the time it made a lot of sense, given the limited math capabilities of a 6502.  In the modern world you can achieve the same by using a single clock counter that gets incremented each frame.
&lt;br /&gt;&lt;br /&gt;Ever notice how the power pills in Pac-Man blink on and off?  Let's say the game clock is incremented every 1/60th of a second, and the pills flop from visible to invisible--or the other way around--twice per second (or every 30 ticks of the clock).  The state of the pills can be computed directly from the clock value:
&lt;pre&gt;pills_are_visible(Clock) -&amp;gt;
   is_even(Clock div 30).
&lt;/pre&gt;No special counters, no destructive updates of any kind.  Similarly, the current frame of the animation of a Pac-Man ghost can be computed given the same clock:
&lt;pre&gt;current_ghost_frame(Clock) -&amp;gt;
   Offset = Clock rem TOTAL_GHOST_ANIMATION_LENGTH,
   Offset div TIME_PER_ANIMATION_FRAME.
&lt;/pre&gt;Again, no special counters and no per frame updates.  The clock can also be used for general event timers.  Let's say the bonus fruit appears 30 seconds after a level starts.  All we need is one value: the value of the clock when the level started plus 30*60.  Each frame we check to see if the clock matches that value.
&lt;br /&gt;&lt;br /&gt;None of this is specific to functional programming.  It's common in C and other languages.  (The reason it was ugly on the 6502 was because of the lack of division and remainder instructions, and managing a single global clock involved verbose 24-bit math.)
&lt;br /&gt;&lt;br /&gt;There are limits to how much a single clock value can be exploited.  You can't make every enemy in Robotron operate entirely as a function of time, because they react to other stimuli in the world, such as the position of the player.  If you think about this trick a bit, what's actually going on is that some data is entirely dependent on other data.  One value can be used to compute others.  This makes a dynamic world be a whole lot more static than it may first seem.
&lt;br /&gt;&lt;br /&gt;Getting away from clocks and timing, there are other hidden dependencies in the typical retro-style game.  In a procedural implementation of Pac-Man, when Pac-Man collides with a blue ghost, a global score is incremented.  This is exactly the kind of hidden update that gets ugly with a purely functional approach.  Sure, you could return some special data indicating that the score should change, but there's no need.
&lt;br /&gt;&lt;br /&gt;Let's say that each ghost has a state that looks like this: {State_name, Starting_time}.  When a ghost has been eaten and is attempting to return to the box in the center of the maze, the state might be {return_to_box, 56700}.  (56700 was the value of the master clock when the ghost was eaten.) Or it might be more fine-grained than that, but you get the idea.  The important part is that there's enough information here to realize that a ghost was eaten during the current frame: if the state name is &quot;return_to_box&quot; and the starting time is the same as the current game clock.  A separate function can scan through the ghost states and look for events that would cause a score increase.
&lt;br /&gt;&lt;br /&gt;The same technique also applies to when sounds are played.  It's not something that has to be a side effect of the ghost behavior handling code.  There's enough implicit information, given the state of the rest of the world, to make decisions about when sounds should be played. Using the example from the preceding paragraph, the same criteria for indicating a score increase can also be used to trigger the &quot;ghost eaten&quot; sound.
&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://prog21.dadgum.com/25.html&quot;&gt;Part 3&lt;/a&gt;</description>
	<pubDate>Sat, 19 Apr 2008 06:00:00 +0000</pubDate>
</item>
<item>
	<title>Caoyuan's Blog: New Scala Plugins for NetBeans are Available for Public Test, and Fortress, Erlang</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/new_scala_plugins_for_netbeans</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/new_scala_plugins_for_netbeans</link>
	<description>&gt;&gt;&gt; &lt;b&gt;Updated Apr 22&lt;/b&gt;&lt;br /&gt;
Due to the incompatibly changes of NetBeans underlaying modules, Scala plugins can not be installed/updated on NetBeans 6.1 any more, you should get the latest nightly build to play with Scala plugins.
&lt;br /&gt;===
&lt;p&gt;
&gt;&gt;&gt; &lt;b&gt;Updated Apr 19&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;Fixed some broken syntax&lt;/li&gt;
&lt;li&gt;Fixed NPE caused by brace completion&lt;/li&gt;
&lt;li&gt;Fixed indentation of case class/object&lt;/li&gt;
&lt;li&gt;Added formatting options (&quot;Preference&quot; -&gt; &quot;Scala&quot; -&gt; &quot;Formatting&quot;)&lt;/li&gt;
&lt;/ul&gt;
Please update your Scala Editing plugin to version 1.0.19 which will be available after NetBeans hudson building.
&lt;br /&gt;===
&lt;p&gt;

The new written Scala plugins for NetBeans are available for public test now, which can be installed on NetBeans 6.1 RC, and latest NetBeans nightly build. To get start, please visit &lt;a href=&quot;http://wiki.netbeans.org/Scala&quot;&gt;http://wiki.netbeans.org/Scala&lt;/a&gt;
&lt;p&gt;
The following features are ready for test:
&lt;ul&gt;
&lt;li&gt;Syntax highlighting&lt;/li&gt;
&lt;li&gt;Auto-indentation&lt;/li&gt;
&lt;li&gt;Brace completion&lt;/li&gt;
&lt;li&gt;Formatter&lt;/li&gt;
&lt;li&gt;Outline navigator&lt;/li&gt;
&lt;li&gt;Occurrences  mark for local variables and functions&lt;/li&gt;
&lt;li&gt;Instance rename for local variables and functions&lt;/li&gt;
&lt;li&gt;Go-to-declaration for local variables and functions&lt;/li&gt;
&lt;li&gt;Scala project&lt;/li&gt;
&lt;li&gt;Basic debugger&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
And with known issues:
&lt;ul&gt;
&lt;li&gt;Auto-completion it not fully supported yet and not smart&lt;/li&gt;
&lt;li&gt;There is no parsing errors recovering  yet&lt;/li&gt;
&lt;li&gt;Semantic errors are not checked on editing, but will be noticed when you build project&lt;/li&gt;
&lt;li&gt;Due to the un-consistent of Scala's grammar reference document, there may be some syntax broken issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
BTW, Fortress editing plugin is also available on &quot;Last Development Build&quot; update center, see the installation part of &lt;a href=&quot;http://wiki.netbeans.org/Scala&quot;&gt;http://wiki.netbeans.org/Scala&lt;/a&gt; to get it installed. It's a very alpha stage plugin.
&lt;p&gt;
And, Erlang plugins are also available from &quot;Last Development Build&quot; update center too, that is, you can install and use Erlang plugins with Ruby, Scala, JavaScript on the same NetBeans IDE (6.1 RC or nightly build). Thanks to Tor's work, the indexing performance has been improved a lot.
&lt;p&gt;
Erlang plugin will be rewritten in the near future too.
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Fri, 18 Apr 2008 16:21:34 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Exploring some lesser known Ajax GUI toolkits</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-6883267684322407074</guid>
	<link>http://www.rsaccon.com/2008/04/exploring-some-lesser-known-ajax-gui.html</link>
	<description>I have only been exposed so far to Dojo and ExtJS, and I believe both are bleeding edge technology, provide a great user experience and are widely accepted. But there are about 50  more  Ajax GUI toolkits out there.  And some of them occasionally appear on my Google Ads, so out of curiosity I took a quick look at some  randomly chosen ones:
SmartClient Ajax GUI System: Lots of widgets, but they</description>
	<pubDate>Tue, 15 Apr 2008 10:04:40 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Yariv's Blog: Concurrency and expressiveness</title>
	<guid>http://yarivsblog.com/articles/2008/04/15/concurrency-and-expressiveness/</guid>
	<link>http://feeds.feedburner.com/~r/YarivsBlog/~3/270506087/</link>
	<description>&lt;p&gt;Damien Katz&amp;#8217;s article &lt;a href=&quot;http://damienkatz.net/&quot;&gt;Lisp as Blub&lt;/a&gt; has sparked a lively &lt;a href=&quot;http://news.ycombinator.com/item?id=163193&quot;&gt;debate&lt;/a&gt; on Hacker News on the relative merits of Erlang and other languages for building robust applications. Good points were made on all sides (except for the tired complaints about Erlang syntax &amp;#8212; I have a suspicion that most people who complain about it haven&amp;#8217;t done much coding in Erlang). Unfortunately, I think that a key point was lost in all the noise: all else being equal, a language with great support for concurrency and fault tolerance has a higher expressive power than a language that doesn&amp;#8217;t. It just lets you build concurrent applications much more easily (less code, fewer bugs, better scalability, yadda yadda).&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/YarivsBlog/~4/270506087&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Tue, 15 Apr 2008 06:36:36 +0000</pubDate>
</item>
<item>
	<title>Caoyuan's Blog: Scala for NetBeans Screenshot#8: Working on Indexer</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_8</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/scala_for_netbeans_screenshot_8</link>
	<description>&lt;p&gt;
I've done some basic indexer code, that is, all source files under a project will be parsed, analyzed, then indexed (class/object/trait, functions, fields etc). But it's just a start, before I finished type inference, if you press CTRL+SPACE to invoke completion, there are a lot of indexed Class/Object/Trait/Function will be roughly shown on you :-), it's not smart, it's more like a puzzle, you should decide which one is applicable by yourself. But you can get a view of the coming completion feature.
&lt;p&gt;
Click on the picture to enlarge it
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080414.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;700&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080414.png&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Mon, 14 Apr 2008 22:08:33 +0000</pubDate>
</item>
<item>
	<title>Simon Willison's Weblog: A quote from Damien Katz</title>
	<guid>http://simonwillison.net/2008/Apr/14/damien/</guid>
	<link>http://simonwillison.net/2008/Apr/14/damien/</link>
	<description>&lt;div class=&quot;quote segment&quot;&gt;&lt;blockquote cite=&quot;http://damienkatz.net/2008/04/lisp_as_blub.html&quot;&gt;&lt;p&gt;Once you reach a certain level of activity in the system where the garbage collector can no longer keep up (and it will happen), then every line of code in your system is now a potential failure point that can leave the whole program in a bad state. Lisp has this problem. Java has this problem. Erlang does not.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class=&quot;cite&quot;&gt; - &lt;a href=&quot;http://damienkatz.net/2008/04/lisp_as_blub.html&quot;&gt;Damien Katz&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</description>
	<pubDate>Mon, 14 Apr 2008 15:17:39 +0000</pubDate>
</item>
<item>
	<title>Yariv's Blog: EC2 gets persistent block level storage</title>
	<guid>http://yarivsblog.com/articles/2008/04/14/ec2-gets-persistent-block-level-storage/</guid>
	<link>http://feeds.feedburner.com/~r/YarivsBlog/~3/269811033/</link>
	<description>&lt;p&gt;I just caught Amazon&amp;#8217;s &lt;a href=&quot;http://aws.typepad.com/aws/2008/04/block-to-the-fu.html&quot;&gt;announcement&lt;/a&gt; of the new persistent storage engine for EC2. This is great stuff. It lets you create persistent block level storage devices ranging from 1GB to 1TB in size and attach them to EC2 instances in predetermined availability zones. This service complements Amazon&amp;#8217;s other storage services &amp;#8212; EC2 and SimpleDB &amp;#8212; in providing raw block-level storage devices that are persistent, fast and local (so you don&amp;#8217;t have to worry about SimpleDB&amp;#8217;s eventual consistency issues). You can use these volumes for anything &amp;#8212; running a traditional DBMS (MySQL, Postgres) is the first thing that comes to mind.&lt;/p&gt;
&lt;p&gt;This announcement is a departure from Amazon&amp;#8217;s tradition of announcing services only once they become available. It looks like Amazon is feeling the heat of competition from Google App Engine and is becoming more open to win over the hearts and minds of developers who are drawn to GAE for its auto-magical scalability. The ability to attach multiple terabyte-sized volumes on demand alleviates some of those concerns when deploying on Amazon&amp;#8217;s infrastructure. I&amp;#8217;m sure it won&amp;#8217;t be long before someone creates an open source BigTable-like solution for applications that need massive scalability and redundancy on top of multiple persistent storage volumes (I think this would be a great application to write in Erlang, but I don&amp;#8217;t know how well Erlang performs in applications that require heavy disc IO).&lt;/p&gt;
&lt;p&gt;I like what Amazon is doing. By providing the basic building blocks for scalable applications, its enables startups to create their own GAE competitors (&lt;a href=&quot;http://heroku.com&quot;&gt;Heroku&lt;/a&gt; is the first one that comes to mind) on top of Amazon&amp;#8217;s infrastructure. Smart move.&lt;/p&gt;
&lt;p&gt;Google has the advantage of being able to provide APIs for tight integration with other Google services such as authentication and search (the latter is hypothetical as of now). We&amp;#8217;ll see how strongly this plays in Google&amp;#8217;s favor in the coming months.&lt;/p&gt;
&lt;p&gt;Of course, price is still a question mark. Neither Amazon&amp;#8217;s persistent storage service nor GAE have had their prices announced.&lt;/p&gt;
&lt;p&gt;Another missing detail is the Amazon store service&amp;#8217;s reliability. If a disc fails, do you lose your data? What&amp;#8217;s the failure probability? Etc.&lt;/p&gt;
&lt;p&gt;All this is great for developers. Competition between Amazon and Google means developers will enjoy more services and for lower prices in the coming years.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/YarivsBlog/~4/269811033&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 14 Apr 2008 06:01:47 +0000</pubDate>
</item>
<item>
	<title>Yariv's Blog: Tag cloud in ErlyWeb howto</title>
	<guid>http://yarivsblog.com/articles/2008/04/13/tag-cloud-in-erlyweb-howto/</guid>
	<link>http://feeds.feedburner.com/~r/YarivsBlog/~3/269779354/</link>
	<description>&lt;p&gt;Nick Gerakines wrote a good tutorial on how to make tag clouds in ErlyWeb. Check it out at &lt;a href=&quot;http://blog.socklabs.com/2008/04/tag_clouds_in_erlang_with_erly/&quot;&gt;http://blog.socklabs.com/2008/04/tag_clouds_in_erlang_with_erly/&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/YarivsBlog/~4/269779354&quot; height=&quot;1&quot; width=&quot;1&quot; /&gt;</description>
	<pubDate>Mon, 14 Apr 2008 04:22:53 +0000</pubDate>
</item>
<item>
	<title>Ruslan's Blog: alienoid</title>
	<guid>http://ruslanspivak.wordpress.com/?p=28</guid>
	<link>http://ruslanspivak.com/2008/04/13/array-module-in-erlang/</link>
	<description>&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Recent Erlang releases (since R12B) have &lt;a href=&quot;http://www.erlang.org/doc/man/array.html&quot;&gt;array module&lt;/a&gt; included.&lt;/p&gt;
&lt;p&gt;Now &lt;a href=&quot;http://ruslanspivak.com/2007/08/15/my-erlang-binary-search/&quot;&gt;binary search&lt;/a&gt; algorithm can be implemented quite  &lt;a href=&quot;http://ruslanspivak.com/2007/08/17/more-about-binary-search-in-erlang/&quot;&gt;efficiently&lt;/a&gt; with functional arrays:&lt;/p&gt;
&lt;pre&gt;
&lt;span&gt;-module&lt;/span&gt;(bsa).
&lt;span&gt;-export&lt;/span&gt;([binsearch/2]).

&lt;span&gt;binsearch&lt;/span&gt;(&lt;span&gt;Arr&lt;/span&gt;, &lt;span&gt;Key&lt;/span&gt;) -&amp;gt;
    binsearch(&lt;span&gt;Arr&lt;/span&gt;, &lt;span&gt;Key&lt;/span&gt;, 0, array:&lt;span&gt;size&lt;/span&gt;(&lt;span&gt;Arr&lt;/span&gt;)).

&lt;span&gt;binsearch&lt;/span&gt;(&lt;span&gt;Arr&lt;/span&gt;, &lt;span&gt;Key&lt;/span&gt;, &lt;span&gt;LowerBound&lt;/span&gt;, &lt;span&gt;UpperBound&lt;/span&gt;) -&amp;gt;
    &lt;span&gt;Mid&lt;/span&gt; = (&lt;span&gt;LowerBound&lt;/span&gt; + &lt;span&gt;UpperBound&lt;/span&gt;) div 2,
    &lt;span&gt;Item&lt;/span&gt; = array:&lt;span&gt;get&lt;/span&gt;(&lt;span&gt;Mid&lt;/span&gt;, &lt;span&gt;Arr&lt;/span&gt;),
    &lt;span&gt;if&lt;/span&gt;
        &lt;span&gt;UpperBound&lt;/span&gt; &amp;lt; &lt;span&gt;LowerBound&lt;/span&gt; -&amp;gt;&lt;span&gt; &lt;/span&gt;-1;
        &lt;span&gt;Key&lt;/span&gt; &amp;lt; &lt;span&gt;Item&lt;/span&gt; -&amp;gt;
            binsearch(&lt;span&gt;Arr&lt;/span&gt;, &lt;span&gt;Key&lt;/span&gt;, &lt;span&gt;LowerBound&lt;/span&gt;, &lt;span&gt;Mid&lt;/span&gt;-1);
        &lt;span&gt;Key&lt;/span&gt; &amp;gt; &lt;span&gt;Item&lt;/span&gt; -&amp;gt;
            binsearch(&lt;span&gt;Arr&lt;/span&gt;, &lt;span&gt;Key&lt;/span&gt;, &lt;span&gt;Mid&lt;/span&gt;+1, &lt;span&gt;UpperBound&lt;/span&gt;);
        true -&amp;gt;
            &lt;span&gt;Mid&lt;/span&gt;
    &lt;span&gt;end&lt;/span&gt;.
&lt;/pre&gt;
&lt;p&gt;Running time for &lt;em&gt;lists based&lt;/em&gt; binary search (just for comparison):&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;56&amp;gt; &lt;/span&gt;&lt;span&gt;{Time, Val} = timer:tc(search, binsearch,&lt;/span&gt;
&lt;span&gt;56&amp;gt; &lt;/span&gt;&lt;span&gt;                       [lists:seq(1, 1000000), 1000000]).&lt;/span&gt;
{506513,  1000000}&lt;/pre&gt;
&lt;p&gt;Running time for &lt;em&gt;array based&lt;/em&gt; binary search:&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;57&amp;gt; &lt;/span&gt;&lt;span&gt;f().&lt;/span&gt;
ok
&lt;span&gt;58&amp;gt; &lt;/span&gt;&lt;span&gt;{Time, Val} = timer:tc(bsa, binsearch,&lt;/span&gt;
&lt;span&gt;58&amp;gt; &lt;/span&gt;&lt;span&gt;              [array:from_list(lists:seq(1, 1000000)), 1000000]).&lt;/span&gt;
{17,  999999}&lt;/pre&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/categories/ruslanspivak.wordpress.com/28/&quot; /&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/tags/ruslanspivak.wordpress.com/28/&quot; /&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/ruslanspivak.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/ruslanspivak.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/ruslanspivak.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/ruslanspivak.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/ruslanspivak.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/ruslanspivak.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/ruslanspivak.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/ruslanspivak.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/ruslanspivak.wordpress.com/28/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/ruslanspivak.wordpress.com/28/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=ruslanspivak.com&amp;blog=1522719&amp;post=28&amp;subd=ruslanspivak&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</description>
	<pubDate>Mon, 14 Apr 2008 03:47:14 +0000</pubDate>
</item>
<item>
	<title>Caoyuan's Blog: Progress of Scala for NetBeans - with a New Written Lexer and Parser</title>
	<guid>http://blogtrader.net/page/dcaoyuan/entry/writing_ide_is_writing_parser</guid>
	<link>http://blogtrader.net/page/dcaoyuan/entry/writing_ide_is_writing_parser</link>
	<description>&lt;p&gt;
According to this &lt;a href=&quot;http://www.nabble.com/IntelliJ-Support-for-Scala--td16540407.html&quot;&gt;post&lt;/a&gt;:
&lt;blockquote&gt;
I talked to Jetbrains about this, and they told me that they stopped working on the Scala plugin for the time being, because 
- demand for Groovy/Ruby was higher 
- the language was moving too fast 
- Scala is a terribly difficult language for compiler/tool writers, and the only good way to analyze Scala programs might be through the official compiler, which didn't yet support this 
&lt;/blockquote&gt;
&lt;p&gt;
It's true that &lt;b&gt;&quot;Scala is a terribly difficult language for compiler/tool writers&quot;&lt;/b&gt;, but I'm trying to bypass &lt;b&gt;&quot;the only good way to analyze Scala programs might be through the official compiler&quot;&lt;/b&gt;
&lt;p&gt;
Before rewriting Scala for NetBeans, I considered some parser choices, one was Scala's native compiler, which is good for compiling/building Scala project, but not suitable for Editor. And JavaCC, ANTLR, which may be good enough, but it's not natural to express Scala's grammar.
&lt;p&gt;
Then I found &lt;a href=&quot;http://cs.nyu.edu/~rgrimm/xtc/rats.html&quot;&gt;Rats!&lt;/a&gt; which is used by Fortress, a very very clean, powerful parser generator. After couple of days working, I got an incremental lexer for Scala, and a parser for Scala that with Scala's grammar being naturally expressed (the grammar definition is &lt;a href=&quot;http://hg.netbeans.org/main/contrib/file/tip/scala.editing/src/org/netbeans/modules/scala/editing/rats/ParserScala.rats&quot;&gt;ParserScala.rats&lt;/a&gt;). The benefit of a complete controllable parser is that I can now do some type inference and wholly semantic analysis freely and immediately. 
&lt;p&gt;
Another progress is that I've decoupled the Scala project's dependency on Java.source's classpath in NetBeans, instead, GSF's classpath is used in Scala project module now. That means, I can begin the indexer for Scala's standard library and project source files.
&lt;p&gt;
The next steps will be type inference; smart completion with type inferred information; indexer for later refectory and usages searching; parsing error recover etc.
&lt;p&gt;
&lt;a href=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080412.png&quot;&gt;&lt;img alt=&quot;nn&quot; width=&quot;720&quot; src=&quot;http://blogtrader.net/resources/dcaoyuan/ScalaEditor_080412.png&quot; /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;</description>
	<pubDate>Sun, 13 Apr 2008 14:20:52 +0000</pubDate>
</item>
<item>
	<title>Programming in the 21st Century: Purely Functional Retrogames, Part 1</title>
	<guid>http://prog21.dadgum.com/23.html</guid>
	<link>http://prog21.dadgum.com/23.html</link>
	<description>When I started looking into functional languages in 1998, I had just come off a series of projects writing video games for underpowered hardware: Super Nintendo, SEGA Saturn, early PowerPC-based Macintoshes without any graphics acceleration.  My benchmark for usefulness was &quot;Can a programming language be used to write complex, performance intensive video games?&quot;   
&lt;br /&gt;&lt;br /&gt;After working through basic tutorials, and coming to grips with the lack of destructive updates, I started thinking about how to write trivial games, like Pac-Man or Defender, in a purely functional manner.  Then I realized that it wasn't performance that was the issue, it was much more fundamental.
&lt;br /&gt;&lt;br /&gt;&lt;i&gt;I had no idea how to structure the most trivial of games without using destructive updates.&lt;/i&gt;
&lt;br /&gt;&lt;br /&gt;Pac-Man is dead simple in any language that fits the same general model as C.  There are a bunch of globals representing the position of Pac-Man, the score, the level, and so on.  Ghost information is stored in a short array of structures.  Then there's an array representing the maze, where each element is either a piece of the maze or a dot.  If Pac-Man eats a dot, the maze array is updated.  If Pac-Man hits a blue ghost, that ghost's structure is update to reflect a new state.  There were dozens and dozens of Pac-Man clones in the early 1980s, including tiny versions that you could type in from a magazine.
&lt;br /&gt;&lt;br /&gt;In a purely functional language, none of this works.  If Pac-Man eats a dot, the maze can't be directly updated.  If Pac-Man hits a blue ghost, there's no way to directly change the state of the ghost.  How could this possibly work?
&lt;br /&gt;&lt;br /&gt;That was a long time ago, and I've spent enough time with functional languages to have figured out how to implement non-trivial, interactive applications like video games.  My plan is to cover this information in a short series of entries.  I'm sticking with 8-bit retrogames because they're simple and everyone knows what Pac-Man looks like.  I don't want to use abstract examples involving hypothetical game designs.  I'm also sticking with purely functional programming language features, because that's the challenge.  I know that ML has references and that processes in Erlang can be used to mimic objects, but if you go down that road you might as well be using C.
&lt;br /&gt;&lt;br /&gt;The one exception to &quot;purely functional&quot; is that I don't care about trying to make I/O fit a functional model.  In a game, there are three I/O needs: input from the user, a way to render graphics on the screen, and a real-time clock.  Fortunately, these only matter at the very highest level outer loop, one that looks like:
&lt;pre&gt;repeat forever {
   get user input
   process one frame
   draw everything on the screen
   wait until a frame's worth of time has elapsed
}
&lt;/pre&gt;&quot;Process one frame&quot; is the interesting part.  It takes the current game state and user input as parameters and returns a new game state.  Then that game state can be used for the &quot;draw everything&quot; step.  &quot;Draw everything&quot; can also be purely functional, returning an abstract list of sprites and coordinates, a list that can be passed directly to a lower level, and inherently impure, function that talks to the graphics hardware.
&lt;br /&gt;&lt;br /&gt;An open question is &quot;Is being purely functional, even excepting I/O, worthwhile?&quot;  Or is it, as was suggested to me via email earlier this year, the equivalent of writing a novel without using the letter 'e'?
&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://prog21.dadgum.com/24.html&quot;&gt;Part 2&lt;/a&gt;</description>
	<pubDate>Sat, 12 Apr 2008 06:00:00 +0000</pubDate>
</item>
<item>
	<title>Erlang Training and Consulting &lt;br/&gt;- News: Announcing the Stockholm Erlang User Group!</title>
	<guid>http://www.erlang-consulting.com/aboutus/news.html#97</guid>
	<link>http://www.erlang-consulting.com/aboutus/news.html#97</link>
	<description>Following the success of the London Erlang User Group, Erlang Training and Consulting jump starts the Stockholm Erlang User Group. We will organise regular meetings allowing users to network and brainstorm, newbies to get their questions answered and enthusiasts to vent their ideas and frustrations. Presentations on Erlang related subjects will be a regular occurrence, followed by the mandatory erllounge. The events will be held at various Erlang companies and research institiutions in the Stockholm area and be sponsored by ETC and the host company. To get the latest news and regular updates on the events and happenings, join the dedicated mailing list either through the form on the &lt;a href=&quot;http://www.erlang-consulting.com/erlang/usergroup/erlangstockholm.html&quot; class=&quot;mylink&quot;&gt;Erlang Stockolm User Group&lt;/a&gt; page or by sending a blank email to &lt;a href=&quot;mailto:erlangstockholm-subscribe@yahoogroups.com?subject=Subscribe to the Stockholm Erlang User Group Mailing List&quot;&gt;erlangstockholm-subscribe@yahoogroups.com&lt;/a&gt;. 
We kick off the first Stockholm Erlang User Group meetig on the 22nd of April with a talk by Prof. Kostis Sagonas about the ongoing research of the HIPE team from Uppsala University. The presentation will start at 18.30 in Kreditor's offices in Stockholm. For the talk abstract, location and registration form, visit the &lt;a href=&quot;http://www.erlang-consulting.com/erlang/usergroup/erlangstockholm.html&quot; class=&quot;mylink&quot;&gt;Erlang Stockolm User Group&lt;/a&gt; Page.</description>
	<pubDate>Fri, 11 Apr 2008 00:00:00 +0000</pubDate>
</item>
<item>
	<title>Erlang Announce List: Erlang announce mailing list :: Erlang/OTP R12B-2 has been released</title>
	<guid>http://www.trapexit.org/forum/viewtopic.php?p=42858#42858</guid>
	<link>http://www.trapexit.org/forum/viewtopic.php?p=42858#42858</link>
	<description>Author: Anonymous&lt;br /&gt;
Subject: Erlang/OTP R12B-2 has been released&lt;br /&gt;
Posted: Wed Apr 09, 2008 10:35 am (GMT 0)&lt;br /&gt;
Topic Replies: 0&lt;br /&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;Bug fix release : otp_src_R12B-2
&lt;br /&gt;
Build date      : 2008-04-09
&lt;br /&gt;

&lt;br /&gt;
This is bug fix release 2 for the R12B release.
&lt;br /&gt;

&lt;br /&gt;
You can find the README file for the release at
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_src_R12B-2.readme&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_src_R12B-2.readme&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
The source distribution and binary distribution for Windows can be
&lt;br /&gt;
downloaded from
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_src_R12B-2.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_src_R12B-2.tar.gz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_win32_R12B-2.exe&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_win32_R12B-2.exe&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Beginning with this release, the distribution can also be downloaded
&lt;br /&gt;
using the BitTorrent protocol. Use the following torrent files to
&lt;br /&gt;
download the source distribution and binary distribution for Windows:
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_src_R12B-2.tar.gz.torrent&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_src_R12B-2.tar.gz.torrent&lt;/a&gt;
&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_win32_R12B-2.exe.torrent&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_win32_R12B-2.exe.torrent&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
Note: To unpack the TAR archive you need a GNU TAR compatible program.
&lt;br /&gt;

&lt;br /&gt;
For installation instructions please read the README file that is part
&lt;br /&gt;
of the distribution.
&lt;br /&gt;

&lt;br /&gt;
The on-line documentation can be found at: &lt;a href=&quot;http://www.erlang.org/doc/&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/doc/&lt;/a&gt;
&lt;br /&gt;
You can also download the complete HTML documentation or the Unix manual files
&lt;br /&gt;

&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_doc_html_R12B-2.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_doc_html_R12B-2.tar.gz&lt;/a&gt;
&lt;br /&gt;
  &lt;a href=&quot;http://www.erlang.org/download/otp_doc_man_R12B-2.tar.gz&quot; target=&quot;_blank&quot;&gt;http://www.erlang.org/download/otp_doc_man_R12B-2.tar.gz&lt;/a&gt;
&lt;br /&gt;

&lt;br /&gt;
We also want to thank those that sent us patches, suggestions and bug
&lt;br /&gt;
reports,
&lt;br /&gt;

&lt;br /&gt;
The OTP Team
&lt;br /&gt;
-- 
&lt;br /&gt;
Bj
&lt;/span&gt;&lt;br /&gt;</description>
	<pubDate>Wed, 09 Apr 2008 10:46:15 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Google App Engine - Quotes and thougts</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-120455243037897034</guid>
	<link>http://www.rsaccon.com/2008/04/google-app-engine-quotes-and-thougts.html</link>
	<description>From the many blog posts about the Google App Engine, my favorite quote comes from Dave Winer:
Now, what Google announced is really exciting! I'm not kidding. It's even better than I hoped. Yes, it's only Python, but IBM's PC-DOS was only BASIC and Pascal when it first came out, and it didn't matter. Yeah, I preferred C, but I coded in Pascal because that's what you had to do to get an app</description>
	<pubDate>Wed, 09 Apr 2008 10:24:27 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: Erlang R12B-2 released - with native PNG drawing</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-3295993534302246100</guid>
	<link>http://www.rsaccon.com/2008/04/erlang-r12b-2-released-with-native-png.html</link>
	<description>It's a bugfix release and I had no big expectations when scanning through the release notes, but then I spotted this:--- percept-0.7 ------------------------------------------------------------

OTP-7162  Percept no longer depends on external c-libraries. The
    graphical rendering is now done via erlang code.Thats huge, if you are interested in generating PNG images and don't wanna have</description>
	<pubDate>Wed, 09 Apr 2008 10:22:31 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Web 2.0 and beyond: Trying out Google App Engine</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-3580028463936123875</guid>
	<link>http://www.rsaccon.com/2008/04/trying-out-googles-app-engine.html</link>
	<description>Yesterday night Google launched App Engine, a highly scalable web application platform, which  has the potential to become a game changer.  I was lucky to grab a developer account, which is currently tied to several limitations:
only 10000 developer accounts availableapplications have to be coded in Pythononly three applications per developerbandwidth, storage and CPU usage limitationsno road map</description>
	<pubDate>Tue, 08 Apr 2008 10:00:33 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Erlang Developers Home: XML socket in Flash with Ejebberd 2.0.0</title>
	<guid>http://erlangdevelopers.splinder.com/post/16639798/XML+socket+in+Flash+with+Ejebb</guid>
	<link>http://erlangdevelopers.splinder.com/post/16639798/XML+socket+in+Flash+with+Ejebb</link>
	<description>&lt;p&gt;I've recently been involved in the problem of Flash (7.0 and following) XML socket. 
Flash uses a &amp;quot;strange&amp;quot; kind of packet transfer in XML socket so Ejabberd 2.0.0 is not compatible with some Flash version.
I've seen a patch for Ejabberd 1.1.X versions and I've adapted it to fit with ejabberd 2.0.0.
Please note that this patch changes configure.ac file, but you must DO NOT run aclocal command.
At the moment aclocal.m4 file contains some macro that aclocal command will overwrite!
So please follow these steps to apply this patch to Ejabberd 2.0.0:

patch -p0 &amp;lt;flash-xml-ejabberd-2.0.0.diff
rm configure
autoconf
./configure --enable-flash-hack
make

And you'll be able to use XMPP like this:
&amp;lt;?xml version='1.0'?&amp;gt;  &amp;lt;flash:stream to='example.net' xmlns='jabber:client'     xmlns:flash='http://www.jabber.com/streams/flash' version='1.0'&amp;gt;&amp;lt;/flash:stream&amp;gt;
&lt;a href=&quot;http://www.webalice.it/loretoparisi/ejabberd/flash-xml-ejabberd-2.0.0.patch&quot; target=&quot;_blank&quot;&gt;The patch is available here.&lt;/a&gt;&lt;/p&gt;Pubblicato da &lt;a href=&quot;http://www.splinder.com/profile/stefko&quot;&gt;stefko&lt;/a&gt; | &lt;a href=&quot;http://erlangdevelopers.splinder.com/post/16639798/XML+socket+in+Flash+with+Ejebb#comment&quot;&gt;Commenti&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/flash&quot; rel=&quot;nofollow&quot;&gt;flash&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/patch&quot; rel=&quot;nofollow&quot;&gt;patch&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/ejabberd&quot; rel=&quot;nofollow&quot;&gt;ejabberd&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/xml_socket&quot; rel=&quot;nofollow&quot;&gt;xml socket&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&quot; title=&quot;Cita il post nel tuo blog&quot; rel=&quot;nofollow&quot; class=&quot;image&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/blogthis.png&quot; alt=&quot;Cita il post nel tuo blog&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.splinder.com/community/contacts/invite?nid=16639798&quot; title=&quot;Segnala il post&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/emailthis.png&quot; alt=&quot;Segnala il post&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&amp;title=XML+socket+in+Flash+with+Ejebberd+2.0.0&quot; title=&quot;Aggiungi su del.icio.us&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/delicious.png&quot; alt=&quot;Aggiungi su del.icio.us&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&amp;title=XML+socket+in+Flash+with+Ejebberd+2.0.0&quot; title=&quot;Aggiungi su digg.com&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/digg.png&quot; alt=&quot;Aggiungi su digg.com&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&amp;title=XML+socket+in+Flash+with+Ejebberd+2.0.0&quot; title=&quot;Aggiungi su Google&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/google.png&quot; alt=&quot;Aggiungi su Google&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&amp;t=XML+socket+in+Flash+with+Ejebberd+2.0.0&quot; title=&quot;Aggiungi su Yahoo&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/yahoo.png&quot; alt=&quot;Aggiungi su Yahoo&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&quot; title=&quot;Aggiungi su Technorati&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/technorati.png&quot; alt=&quot;Aggiungi su Technorati&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.badzu.net/submit?action=it&amp;link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16639798%2FXML%2Bsocket%2Bin%2BFlash%2Bwith%2BEjebb&amp;title=XML+socket+in+Flash+with+Ejebberd+2.0.0&quot; title=&quot;Aggiungi su Badzu&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/badzu.png&quot; alt=&quot;Aggiungi su Badzu&quot; /&gt;&lt;/a&gt;

&lt;br /&gt;&lt;br /&gt;</description>
	<pubDate>Mon, 07 Apr 2008 11:03:02 +0000</pubDate>
</item>
<item>
	<title>Erlang Developers Home: Ejabberd 2.0 Cookie Patch</title>
	<guid>http://erlangdevelopers.splinder.com/post/16638983/Ejabberd+2.0+Cookie+Patch</guid>
	<link>http://erlangdevelopers.splinder.com/post/16638983/Ejabberd+2.0+Cookie+Patch</link>
	<description>&lt;p&gt;As promised I'm releasing the cookie patch for ejabberd 2.0. The patch is quite simple and takes few minutes to check it out.
To apply the patch cumulatively, simply do the following


ejabberd/src/web/ $ patch &amp;lt; $HOME/ejabberd-2.0-cookie.patch

Otherwise you could apply the patch to single files:


ejabberd/src/web/ $ patch ejabberd_http.hrl $HOME/ejabberd_http_hrl.patch
ejabberd/src/web/ $ patch ejabberd_http.erl $HOME/ejabberd_http_erl.patch 


Let me know if you got errors applying this patch.

Links:
&lt;a target=&quot;_blank&quot; href=&quot;http://www.webalice.it/loretoparisi/ejabberd/ejabberd-2.0-cookie.patch&quot;&gt;ejabberd 2.0 Cumulative Cookie Patch&lt;/a&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.webalice.it/loretoparisi/ejabberd/ejabberd_http_erl.patch&quot;&gt;ejabberd_http Source Cookie Patch&lt;/a&gt;
&lt;a target=&quot;_blank&quot; href=&quot;http://www.webalice.it/loretoparisi/ejabberd/ejabberd_http_hrl.patch&quot;&gt;ejabberd_http Header Cookie Patch&lt;/a&gt;
&lt;/p&gt;Pubblicato da &lt;a href=&quot;http://www.splinder.com/profile/loretoparisi&quot;&gt;loretoparisi&lt;/a&gt; | &lt;a href=&quot;http://erlangdevelopers.splinder.com/post/16638983/Ejabberd+2.0+Cookie+Patch#comment&quot;&gt;Commenti&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/cookie&quot; rel=&quot;nofollow&quot;&gt;cookie&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/patch&quot; rel=&quot;nofollow&quot;&gt;patch&lt;/a&gt;, &lt;a href=&quot;http://erlangdevelopers.splinder.com/tag/ejabberd&quot; rel=&quot;nofollow&quot;&gt;ejabberd&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.splinder.com/blogthis?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&quot; title=&quot;Cita il post nel tuo blog&quot; rel=&quot;nofollow&quot; class=&quot;image&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/blogthis.png&quot; alt=&quot;Cita il post nel tuo blog&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.splinder.com/community/contacts/invite?nid=16638983&quot; title=&quot;Segnala il post&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/emailthis.png&quot; alt=&quot;Segnala il post&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://del.icio.us/post?url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&amp;title=Ejabberd+2.0+Cookie+Patch&quot; title=&quot;Aggiungi su del.icio.us&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/delicious.png&quot; alt=&quot;Aggiungi su del.icio.us&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&amp;title=Ejabberd+2.0+Cookie+Patch&quot; title=&quot;Aggiungi su digg.com&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/digg.png&quot; alt=&quot;Aggiungi su digg.com&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&amp;title=Ejabberd+2.0+Cookie+Patch&quot; title=&quot;Aggiungi su Google&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/google.png&quot; alt=&quot;Aggiungi su Google&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&amp;t=Ejabberd+2.0+Cookie+Patch&quot; title=&quot;Aggiungi su Yahoo&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/yahoo.png&quot; alt=&quot;Aggiungi su Yahoo&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://technorati.com/faves?add=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&quot; title=&quot;Aggiungi su Technorati&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/technorati.png&quot; alt=&quot;Aggiungi su Technorati&quot; /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.badzu.net/submit?action=it&amp;link=http%3A%2F%2Ferlangdevelopers.splinder.com%2Fpost%2F16638983%2FEjabberd%2B2.0%2BCookie%2BPatch&amp;title=Ejabberd+2.0+Cookie+Patch&quot; title=&quot;Aggiungi su Badzu&quot; rel=&quot;nofollow&quot; class=&quot;image&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://www.splinder.com/modules/service_links/badzu.png&quot; alt=&quot;Aggiungi su Badzu&quot; /&gt;&lt;/a&gt;

&lt;br /&gt;&lt;br /&gt;</description>
	<pubDate>Mon, 07 Apr 2008 09:37:55 +0000</pubDate>
</item>
<item>
	<title>Dukes of Erl: Cooter to talk “Beautiful Concurrency with Erlang&quot; at OSCON</title>
	<guid>tag:blogger.com,1999:blog-6265608756663924839.post-6153154157988372718</guid>
	<link>http://dukesoferl.blogspot.com/2008/04/cooter-to-talk-beautiful-concurrency.html</link>
	<description>Our buddy &lt;a href=&quot;http://kevin.scaldeferri.com/blog/&quot;&gt;Cooter&lt;/a&gt; is going to be giving a talk at &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/content/home&quot;&gt;OSCON&lt;/a&gt; entitled&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://kevin.scaldeferri.com/blog/2008/03/27/Oscon2008Acceptance.html&quot;&gt;“Beautiful Concurrency with Erlang&quot;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Congrats cooter.</description>
	<pubDate>Mon, 07 Apr 2008 10:10:59 +0000</pubDate>
</item>
<item>
	<title>Web 2.0 and beyond: Skype and PostgreSQL database</title>
	<guid>tag:blogger.com,1999:blog-3729811.post-6162580906038987827</guid>
	<link>http://www.rsaccon.com/2008/04/skype-and-postgresql-database.html</link>
	<description>PostgreSQL is my favorite open source relational database. Some time ago I wrote some experimental code (currently unmaintained) for integrating it with erlyweb. The guys at Skype seem to like PostgreSQL as well. In regard to the current Google Skype takeover rumors (or was it just a 1st of April joke which went out of control ?) and to this article: Skype Plans for PostgreSQL to Scale to 1</description>
	<pubDate>Sun, 06 Apr 2008 10:21:13 +0000</pubDate>
	<author>noreply@blogger.com (Roberto Saccon)</author>
</item>
<item>
	<title>Hypothetical Labs: OTP and Mochiweb</title>
	<guid>http://weblog.hypotheticalabs.com/?p=226</guid>
	<link>http://weblog.hypotheticalabs.com/?p=226</link>
	<description>&lt;p&gt;I&amp;#8217;ve been brushing up on OTP trying to get a very basic application up and running to illustrate the power of Mochiweb, OTP and Erlang to a few friends. I&amp;#8217;d forgotten (or suppressed) the overly complex manual process horror that is building OTP releases. After this, I&amp;#8217;m doubly committed to spending some time with &lt;a href=&quot;http://www.erlware.org&quot;&gt;Erlware&lt;/a&gt;&amp;#8217;s &lt;a href=&quot;http://www.erlware.org/tools/sinan/index.html&quot;&gt;Sinan&lt;/a&gt; project. Coding this stuff by hand is way too ugly, IMHO.&lt;/p&gt;
&lt;p&gt;Anyways, I&amp;#8217;ve cooked up a small webserver which serves static files using mochiweb and OTP. The system, or release in OTP-speak, consists of three subsystems, er OTP applications. There is &lt;code&gt;mime-typer&lt;/code&gt; who&amp;#8217;s only purpose is to examine file extensions and guess at the files mime types. Then there&amp;#8217;s &lt;code&gt;content-server&lt;/code&gt; who uses &lt;code&gt;mime_typer&lt;/code&gt; to read files off disk and figure out their mime types. At the top of the food chain we have &lt;code&gt;web_server&lt;/code&gt; who uses &lt;code&gt;content_server&lt;/code&gt; to read files off disk and serve them over HTTP. &lt;code&gt;web_server&lt;/code&gt; is built on top of &lt;a href=&quot;http://www.mochimedia.com/&quot;&gt;Mochi Media&lt;/a&gt;&amp;#8217;s excellent &lt;a href=&quot;http://code.google.com/p/mochiweb/&quot;&gt;mochiweb&lt;/a&gt;. I&amp;#8217;ve packaged up the code and makefile &lt;a href=&quot;http://hypotheticalabs.com/downloads/otp-example.tar.gz&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Building and running the code is pretty easy (I hope):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install mochiweb. You &lt;strong&gt;must&lt;/strong&gt; have this installed before preceding.&lt;/li&gt;
&lt;li&gt;Download and expand &lt;a href=&quot;http://hypotheticalabs.com/downloads/otp-example.tar.gz&quot;&gt;otp-example.tar.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Edit web_server.app and change the port and docroot entries to fit your environment&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;make&lt;/code&gt;. If you&amp;#8217;re running R12B-0 or R12B-1 there should be no errors or warnings&lt;/li&gt;
&lt;li&gt;Symlink each of the subdirectories in the dist directory to Erlang&amp;#8217;s lib directory. &lt;em&gt;(Yes, this is ugly but I know of only one other way to do it which requires hacking hard-coded paths into ~/.erlang. That seemed worse than a few symlinks, so I opted for this solution)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;From the otp-example directory run &lt;code&gt;erl -boot file_server-1&lt;/code&gt;. An Erlang node will launch and automatically start all three applications.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After this, point your browser at &lt;em&gt;http://localhost:YourPort/YourFileName&lt;/em&gt; and verify the server is serving content. Voila! A simple OTP system is born! In the next installment I&amp;#8217;ll show how to deploy this example on multiple Erlang nodes.&lt;/p&gt;</description>
	<pubDate>Sun, 06 Apr 2008 02:17:01 +0000</pubDate>
</item>
<item>
	<title>Orbitz: Amanda Bynes is awesome</title>
	<guid>tag:blogger.com,1999:blog-15461779.post-8824946550078629658</guid>
	<link>http://orbitz-erlang.blogspot.com/2008/04/amanda-bynes-is-awesome.html</link>
	<description>Not particularly Erlang related but, &lt;a href=&quot;http://en.wikipedia.org/wiki/Amanda_Bynes&quot;&gt;Amanda Bynes&lt;/a&gt; is simply amazing.  I just watched &lt;a href=&quot;http://www.imdb.com/title/tt0815244/&quot;&gt;Sydney White&lt;/a&gt;, while it wasn't as awesome as &lt;a href=&quot;http://www.imdb.com/title/tt0454945/&quot;&gt;She's The Man&lt;/a&gt;, it did rule.&lt;br /&gt;&lt;br /&gt;Amanda Bynes presents a Hollywood image that all girls can look up to as a &lt;a href=&quot;http://en.wikipedia.org/wiki/Role_model&quot;&gt;role model&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All in all, she rocks.</description>
	<pubDate>Sat, 05 Apr 2008 02:23:09 +0000</pubDate>
</item>
<item>
	<title>Erlang Developers Home: Add cookie support in ejabberd</title>
	<guid>http://erlangdevelopers.splinder.com/post/16609181/Add+cookie+support+in+ejabberd</guid>
	<link>http://erlangdevelopers.splinder.com/post/16609181/Add+cookie+support+in+ejabberd</link>
	<description>&lt;p&gt;To add cookies to HTTP POST/GET requests in ejabberd (1.1.x and 2.x) we have to add some fields in the request headers, setting up the request and state records in ejabberd_http.erl module and its header file ejabberd_http.hrl.

First of all, we will add the field cookie to the record request in ejabberd_http.hrl header file as follows:

-record(request, {method,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q = [],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; us,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; auth,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lang = &amp;quot;&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = &amp;quot;&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cookie = &amp;quot;&amp;quot;, %% lp: cookie request field
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&a