<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.razie.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>Razvan's Tech</title>
      <description>Aggregate technical feed for Razie...</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=7cec8f351bd054b9a6d3ff779f65532d</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=7cec8f351bd054b9a6d3ff779f65532d&amp;_render=rss&amp;page=2" />
      <pubDate>Fri, 27 Jan 2012 22:42:12 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.razie.com/RazvanTech" /><feedburner:info uri="razvantech" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>scripster-dist.0.8.s.jar (2.7 MB)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/ndfX2hPYkdE/detail</link>
         <description>&lt;pre&gt;
0.8 snapshot with scala 2.9.1

Labels: 
 Featured
 Type-Archive
 OpSys-All

&lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/files/scripster-dist.0.8.s.jar"&gt;Download&lt;/a&gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/ndfX2hPYkdE" height="1" width="1"/&gt;</description>
         <author>razvanc99@gmail.com</author>
         <guid isPermaLink="false">http://code.google.com/feeds/p/razpub/downloads/basic/scripster-dist.0.8.s.jar</guid>
      <feedburner:origLink>http://code.google.com/p/razpub/downloads/detail?name=scripster-dist.0.8.s.jar</feedburner:origLink></item>
      <item>
         <title>razmutant-0.16.zip (36.8 MB)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/fqBowgy5STU/detail</link>
         <description>&lt;pre&gt;
v.16 - keyboard and mousepad

Labels: 
 Featured
 Type-Archive
 OpSys-All

&lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/files/razmutant-0.16.zip"&gt;Download&lt;/a&gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/fqBowgy5STU" height="1" width="1"/&gt;</description>
         <author>razvanc99@gmail.com</author>
         <guid isPermaLink="false">http://code.google.com/feeds/p/razpub/downloads/basic/razmutant-0.16.zip</guid>
      <feedburner:origLink>http://code.google.com/p/razpub/downloads/detail?name=razmutant-0.16.zip</feedburner:origLink></item>
      <item>
         <title>razmutant-015a.zip (18.3 MB)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/Lm0f_RahJwE/detail</link>
         <description>&lt;pre&gt;
send binary objects through POST

Labels: 
 Type-Archive
 OpSys-All

&lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/files/razmutant-015a.zip"&gt;Download&lt;/a&gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/Lm0f_RahJwE" height="1" width="1"/&gt;</description>
         <author>razvanc99@gmail.com</author>
         <guid isPermaLink="false">http://code.google.com/feeds/p/razpub/downloads/basic/razmutant-015a.zip</guid>
      <feedburner:origLink>http://code.google.com/p/razpub/downloads/detail?name=razmutant-015a.zip</feedburner:origLink></item>
      <item>
         <title>razmutant-015.zip (18.6 MB)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/QhXjqSvVLYU/detail</link>
         <description>&lt;pre&gt;
razmutant 0.1.5

&lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/files/razmutant-015.zip"&gt;Download&lt;/a&gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/QhXjqSvVLYU" height="1" width="1"/&gt;</description>
         <author>razvanc99@gmail.com</author>
         <guid isPermaLink="false">http://code.google.com/feeds/p/razpub/downloads/basic/razmutant-015.zip</guid>
      <feedburner:origLink>http://code.google.com/p/razpub/downloads/detail?name=razmutant-015.zip</feedburner:origLink></item>
      <item>
         <title>razmutant.zip (15.6 MB)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/uPqU6A3f2kk/detail</link>
         <description>&lt;pre&gt;
Razies mutant - older preview 

&lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/files/razmutant.zip"&gt;Download&lt;/a&gt;
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/uPqU6A3f2kk" height="1" width="1"/&gt;</description>
         <author>razvanc99@gmail.com</author>
         <guid isPermaLink="false">http://code.google.com/feeds/p/razpub/downloads/basic/razmutant.zip</guid>
      <feedburner:origLink>http://code.google.com/p/razpub/downloads/detail?name=razmutant.zip</feedburner:origLink></item>
      <item>
         <title>Why scala - executive overview</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/mWmvpoWjs9I/why-scalaexecutive-overview</link>
         <description>&lt;img src="http://cdn.slidesharecdn.com/why-scala-executive-overview-100428131348-phpapp02-thumbnail-2" alt="" style="border:1px solid #C3E6D8;float:right;"/&gt;&lt;br&gt;A executive overview of why development shops should look into scala.</description>
         <author>razvanc@slideshare.net(razvanc)</author>
         <guid isPermaLink="false">http://www.slideshare.net/razvanc/why-scalaexecutive-overview</guid>
         <pubDate>Wed, 28 Apr 2010 18:13:38 +0000</pubDate>
         <content:encoded><![CDATA[<img src="http://cdn.slidesharecdn.com/why-scala-executive-overview-100428131348-phpapp02-thumbnail-2" alt="" style="border:1px solid #C3E6D8;float:right;"/><br>A executive overview of why development shops should look into scala.<img src="http://feeds.feedburner.com/~r/RazvanTech/~4/mWmvpoWjs9I" height="1" width="1"/>]]></content:encoded>
         <media:content>
            <media:player url="http://www.slideshare.net/razvanc/why-scalaexecutive-overview" />
            <media:description type="plain">A executive overview of why development shops should look into scala.</media:description>
            <media:text type="html">&amp;lt;img src="http://cdn.slidesharecdn.com/why-scala-executive-overview-100428131348-phpapp02-thumbnail-2" alt="" style="border:1px solid #C3E6D8;float:right;"/&amp;gt;&amp;lt;br&amp;gt;A executive overview of why development shops should look into scala.</media:text>
            <media:thumbnail height="90" url="http://cdn.slidesharecdn.com/why-scala-executive-overview-100428131348-phpapp02-thumbnail-2" width="120" />
         </media:content>
      <feedburner:origLink>http://www.slideshare.net/razvanc/why-scalaexecutive-overview</feedburner:origLink></item>
      <item>
         <title>Scala - brief intro</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/R8Spon1kjXo/scalabrief-intro</link>
         <description>&lt;img src="http://cdn.slidesharecdn.com/scala-1234561616732071-2-thumbnail-2" alt="" style="border:1px solid #C3E6D8;float:right;"/&gt;&lt;br&gt;simple intro to scala for java folks</description>
         <author>razvanc@slideshare.net(razvanc)</author>
         <guid isPermaLink="false">http://www.slideshare.net/razvanc/scalabrief-intro</guid>
         <pubDate>Fri, 13 Feb 2009 21:48:15 +0000</pubDate>
         <content:encoded><![CDATA[<img src="http://cdn.slidesharecdn.com/scala-1234561616732071-2-thumbnail-2" alt="" style="border:1px solid #C3E6D8;float:right;"/><br>simple intro to scala for java folks<img src="http://feeds.feedburner.com/~r/RazvanTech/~4/R8Spon1kjXo" height="1" width="1"/>]]></content:encoded>
         <media:content>
            <media:player url="http://www.slideshare.net/razvanc/scalabrief-intro" />
            <media:description type="plain">simple intro to scala for java folks</media:description>
            <media:text type="html">&amp;lt;img src="http://cdn.slidesharecdn.com/scala-1234561616732071-2-thumbnail-2" alt="" style="border:1px solid #C3E6D8;float:right;"/&amp;gt;&amp;lt;br&amp;gt;simple intro to scala for java folks</media:text>
            <media:thumbnail height="90" url="http://cdn.slidesharecdn.com/scala-1234561616732071-2-thumbnail-2" width="120" />
         </media:content>
      <feedburner:origLink>http://www.slideshare.net/razvanc/scalabrief-intro</feedburner:origLink></item>
      <item>
         <title>OMG, scala is a complex language!</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/lyBVwJ6xEaE/omg-scala-is-complex-language.html</link>
         <description>&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;NOTE that I cross-posted this to http://blog.coolscala.com/2011/10/omg-scala-is-complex-language.html&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family:Calibri;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family:Calibri;"&gt;I keep seeing this and, maybe it’s true. Let’s chase this complexity for a bit&amp;nbsp;and go through some of the biggest scala differentiators (from Java or C++, as major OO languages).&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;&lt;span style="color:orange;"&gt;Smart compiler infers types&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;The compiler can infer the types for the most part, so people have to type a lot less repetitive information, which they used to type in both Java and C++. For instance, since “john” is obviously a String, the type of the variable is inferred by the compiler to be String so I don’t have to type it again:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;val someone = “John”&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;I have seen this feature both praised and held against the language as “added complexity”, so I don’t know what to say. I just love typing less and feeling less stupid, every time I declare a value or variable.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;&lt;span style="color:orange;"&gt;Simplified class definitions&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Since OO is all about defining classes, scala made do with a bunch of stuff in one go, so that my domain models are dead-simple:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;class Person (val firstName:String, val lastName:String)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;This, in Java and C++ takes about one page of code: with constructors, getters, setters etc. Scala observed that people don’t need to type one page to inform a stupid compiler that they want a person with a first and last names, so it’s all condensed in this one line, much like a table would look in SQL.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Is this added complexity? Well, I do need to worry about overriding the generated getters/setters ONLY if I need to, so I don’t really know if it’s more complex.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Me? I love this particular feature so much, that honestly, I don’t care what you think &lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;J&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;&lt;span style="color:orange;"&gt;Unifying methods and operators&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;All programming languages I know discriminate between methods with names like “&lt;span style="font-family:Courier, monospace;"&gt;append&lt;/span&gt;” and operators like “&lt;span style="font-family:Courier, monospace;"&gt;+=&lt;/span&gt;”. Some do not even allow re-definition of some hardcoded operators (Java) while some allow infix notation only for operators (C++).&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Scala simply makes do with ALL these restrictions and states that the name of a method can be pretty much anything and all can use the infix notation, so I can have:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;ListBuffer(1,2,3) append 4&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;As well as&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;ListBuffer(1,2,3) += 4&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;The only difference would be the precedence rules, which are customary in all languages. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Some people obviously would see this as “more complex” than both Java and C++ since they can now do whatever they can… but I see it as “simpler” than both. Operators have been held against C++ before so it really is not surprising that they are held against scala as well.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;This is, after all, what makes scala such as perfect DSL framework, allowing natural language such as:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;“Mary” with “a purse” and “red shoes” should look “nice”&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;&lt;span style="color:orange;"&gt;Types – variance&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;In both Java and C++, the generics have certain hard-coded and limited behavior (i.e. non-variance) and allow only a few constructs (like &lt;span style="font-family:Courier, monospace;"&gt;List&amp;lt;T extends Person&amp;gt;&lt;/span&gt;). &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;In scala, there is a default behavior, where List[Person] is non-variant, but everything is customizable. If you want co-variance, just tell the compiler &lt;span style="font-family:Courier, monospace;"&gt;List[+Person]&lt;/span&gt; or &lt;span style="font-family:Courier, monospace;"&gt;List[-Person]&lt;/span&gt; for contra-variance. Just like Java, I can use &lt;span style="font-family:Courier, monospace;"&gt;List[T &amp;lt;: Person]&lt;/span&gt; but I can use the reverse just as well: &lt;span style="font-family:Courier, monospace;"&gt;List [T &amp;gt;: Person]&lt;/span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Since scala supports implicits (with finer control than C++), another construct is available: &lt;/span&gt;&lt;span style="font-family:Courier, monospace;"&gt;List[T &amp;lt;% Person].&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Is this more complicated? Well, just like the operators – it lifts certain limitations of other languages, so it’s both more complicated, since there’s more stuff to learn and simpler, since there’s less rules to live by.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;I personally enjoy the extra control… do I actually use it? Not on a daily basis, the defaults are good enough.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;&lt;span style="color:orange;"&gt;Constructors only?&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Most languages only allow data types (objects) to be constructed. This is normal in Java and C++.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Well, there’s the flipside, where I can de-construct an object and I don’t mean de-allocating its memory. Consider this:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;someone match {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp; case Person(first,last) =&amp;gt; println (“ name is “ + first + ” “ + last)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;You can see what I mean by de-constructing: took an already created object, someone, and de-constructed into its components. I know this looks foreign to most OO personnel, but trust you me, it is insanely cool and useful. Think what you would have to type in either Java or C++ to achieve the same thing, with if (instanceof) and then type cast and assign two variables and whatnot.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Is this more complex? Well, this is totally new functionality so I guess it is. But I love having it! Trust me, you will, too!&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;By the way, the match/case construct is way more powerful than your regular switch/case which can only handle constants… we can de-construct types, match constants, match types… and more! Check this out:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;someone match {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp; case Person(first,last) =&amp;gt; println (“ name is “ + first + ” “ + last)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp; case “John” |”Mary” =&amp;gt; println (“hello, “ + someone)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp; case s:String =&amp;gt; println (“name is “ + s)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;&amp;nbsp; case _ =&amp;gt; println (“don’t know what this is…”)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Courier, monospace;font-size:x-small;"&gt;  &lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Courier, monospace;"&gt;&lt;span style="font-size:x-small;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Is this more complex? I don’t know… in Java or C++ this is between one and two pages of code. This looks simpler and more intuitive to me… granted, I got used to it but so can you!&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;&lt;span style="color:orange;"&gt;Conclusion&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;There’s more areas of the language, but these are some of the major differences I have time for&amp;nbsp;right now. If you have others, post up and I’ll get into those as well.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;I did not get into the functional areas of the language, since that would require comparing with other functional languages and I’m not an FP guy. C++ comes close by allowing passing pointers to methods to other functions while Java 8 I think has some proposed lambda syntax.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;Is it more complex? Well, there’s two ways to look at it:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;Yes,&lt;/strong&gt; &lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;There are more symbols and features that one can use&lt;/span&gt;&lt;/div&gt;&lt;/li&gt; 
&lt;li&gt;&lt;span style="font-family:Calibri;"&gt;There’s more computer science I need to learn (contra-variance, pattern matching, lambdas, closures etc)&lt;/span&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;&lt;strong&gt;No,&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;The real-world problems to solve are the same and&lt;/span&gt;&lt;/div&gt;&lt;/li&gt; 
&lt;li&gt;&lt;span style="font-family:Calibri;"&gt;To do the same in either Java or C++ is either impossible or takes many times more code… and uglier code at that&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;What do I think? I don’t really care. To me it was cool to learn these concepts that I had forgotten since university and my new vocabulary allows me to solve the usual problems in just a few lines of code and head for an early lunch, while my mates are still writing some getter or setter…&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;span style="font-family:Calibri;"&gt;What do you think?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family:Calibri;"&gt;&lt;/span&gt;&lt;/div&gt;P.S. This is a great detaiked discussion of complex vs complicated: &lt;a rel="nofollow" target="_blank" href="http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html"&gt;http://lamp.epfl.ch/~odersky/blogs/isscalacomplex.html&lt;/a&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class="MsoNormal" style="margin:0cm 0cm 10pt;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-6872595395615334034?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/WaS_hSjfCB4" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/lyBVwJ6xEaE" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-6872595395615334034</guid>
         <pubDate>Thu, 13 Oct 2011 21:16:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/WaS_hSjfCB4/omg-scala-is-complex-language.html</feedburner:origLink></item>
      <item>
         <title>Quick scala – step 1: setup</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/rVohdZfxxgk/quick-scala-step-1-setup.html</link>
         <description>This post has a new home. If you want to setup a scala development environment, read: &lt;a rel="nofollow" target="_blank" href="http://blog.coolscala.com/2011/10/quick-scala-step-1-setup.html"&gt;http://blog.coolscala.com/2011/10/quick-scala-step-1-setup.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-6665974598094695257?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/jSsbxCtf5qA" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/rVohdZfxxgk" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-6665974598094695257</guid>
         <pubDate>Thu, 13 Oct 2011 01:13:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/jSsbxCtf5qA/quick-scala-step-1-setup.html</feedburner:origLink></item>
      <item>
         <title>Scala DSL technique - if-else constructs</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/43wyOqPOK6s/scala-dsl-technique-if-else-constructs.html</link>
         <description>Believe it or not, I've had a hard time coming up with this construct, so I figured it's worth publishing it, maybe save others the hassle.
&lt;br /&gt;
&lt;br /&gt;
You want to come up with a recursive if/else construct, like below (I used a dollar sign to denote the DSL if - I've used wif/welse in the past - use whatever you want):
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  var branch = 1

  val expr =

    $if(branch == 1) {

      v("a") := 11

      v("b") := 12

    } $else $if(branch == 2) {

      v("a") := 21

      v("b") := 22

    } $else $if(branch == 3) {

      v("a") := 31

      v("b") := 32

    } $else {

      v("a") := 41

      v("b") := 42

    }&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Note the recursive if-else-if-else-if-else. The idea is that the if/else token will modify its own else branch depending on the following else - either the final else {} or an else followed by an if:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  case class TIf(cond: () =&amp;gt; Boolean, body: () =&amp;gt; Unit, var elsebranch: Option[TElse] = None) extends Token("IF ") {

    val scope = TScope(body)

    def $else[T](body: =&amp;gt; T) = { this.lastif.elsebranch = Some(TElse(() =&amp;gt; body)); this }

    def $else(i: TIf) = {

      this.lastif.elsebranch = Some(TElseIf(i))

      this

    }

    def lastif = elsebranch.map(_.lastif).getOrElse(this)

    ...&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Also note that the way scala works is that the if-else tree is built from the top, so each else() is actually invoked on the root IF, therefore it needs to recursively find the last unbound IF and bind itself there as the elsebranch.
&lt;br /&gt;
&lt;br /&gt;
Having said that, find the full code and use it as a template, &lt;a rel="nofollow" target="_blank" href="https://github.com/razie/razbase/blob/master/base/src/test/scala/razie/dsl/test/DslCollectorIfElseTestSimple.scala"&gt;here&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
Enjoy!
&lt;br /&gt;
&lt;br /&gt;
P.S. One issue with the simplified version built here is that it doesn't stop you from simple syntax errors like having an if-else-else... how would you fix it so the compiler stops you rather than the runtime exception?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7878870245456542478?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/ZnFooLwJVNk" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/43wyOqPOK6s" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7878870245456542478</guid>
         <pubDate>Wed, 17 Aug 2011 16:29:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/ZnFooLwJVNk/scala-dsl-technique-if-else-constructs.html</feedburner:origLink></item>
      <item>
         <title>A scala DSL technique - collecting</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/ZcYPOJ-1GZ8/scala-dsl-technique-collecting.html</link>
         <description>When coming up with a scala internal DSL, it is often that one will come up with constructs that produce things that need collected, in a list, tree or similar.
&lt;br /&gt;
&lt;br /&gt;For instance, instructions for a robot:
&lt;br /&gt;
&lt;br /&gt;&lt;pre&gt;$if (condition) {
&lt;br /&gt;  move(1) :: move(2) :: move(3) :: Nil
&lt;br /&gt;  move(1) + move(2) + move(3)
&lt;br /&gt;  }&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;Due to syntax restrictions, it is often that people use operators to chain these, like the overloaded + above.
&lt;br /&gt;
&lt;br /&gt;There is a technique you can use to make this look more familiar:
&lt;br /&gt;
&lt;br /&gt;&lt;pre&gt;$if (condition) {
&lt;br /&gt;  move(1)
&lt;br /&gt;  move(2)
&lt;br /&gt;  move(3)
&lt;br /&gt;  }&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;While not the nicest, the idea is to use a static collector and collect the actions in there. You'll need levels, so that collecting nested blocks don't interfere, so there is a stack of collectors. Also, these collectors need to be thread-local so that different collecting threads don't interfere.
&lt;br /&gt;
&lt;br /&gt;A reusable collector is in &lt;a rel="nofollow" target="_blank" href="https://github.com/razie/razbase/tree/master/base/src/main/scala/razie/dsl/DslCollector.scala"&gt;DslCollector.scala&lt;/a&gt; and a sample in &lt;a rel="nofollow" target="_blank" href="https://github.com/razie/razbase/blob/master/base/src/test/scala/razie/dsl/test/DslCollectorTest.scala"&gt;DslCollectorTest.scala&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;For this pattern, you have a Collector, a Collectable and the actual constructs:
&lt;br /&gt;
&lt;br /&gt;&lt;pre&gt;  case class move(i: Int) extends DslCollectable
&lt;br /&gt;
&lt;br /&gt;  def test1 = expect(move(1) :: move(2) :: Nil) {
&lt;br /&gt;    val collected = new collection.mutable.ListBuffer[Any]()
&lt;br /&gt;
&lt;br /&gt;    DslCollector.collect { collected += _ }(1) { // start a collector level
&lt;br /&gt;      move(1) //collects itself
&lt;br /&gt;      move(2) //collects itself
&lt;br /&gt;    } // collector ends
&lt;br /&gt;
&lt;br /&gt;    collected
&lt;br /&gt;  }&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;You can then embedd this in a higher-level construct of your DSL, like the &lt;code&gt;$if&lt;/code&gt; used in the example.
&lt;br /&gt;
&lt;br /&gt;Enjoy!
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7179654482155144997?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/L1YbSBYd-bM" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/ZcYPOJ-1GZ8" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7179654482155144997</guid>
         <pubDate>Tue, 16 Aug 2011 16:43:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/L1YbSBYd-bM/scala-dsl-technique-collecting.html</feedburner:origLink></item>
      <item>
         <title>My worst internet shopping experience - gogglesgiant.com</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/_8JXLvXt-QQ/my-worst-internet-shopping-experience.html</link>
         <description>My worst internet shopping experience, by far, has been with GogglesGiant.com , trying to get replacement goggles for my son's ski goggles, in the middle of the season.Order two pairs, in early February, from their online store at gogglesgiant.com, promises of fast shipping etc.&lt;br /&gt;&lt;br /&gt;After two weeks I ask them that I haven't' seen a shipping notice and what's the delay and they reply that there's a high order volume and will ship when they can! Seriously, I will forward anyone their email!&lt;br /&gt;&lt;br /&gt;I know I should've asked for the order to be cancelled right there, but I can't take a hint, eh?&lt;br /&gt;&lt;br /&gt;After another week I receive a shipment notice with no tracking number. After another 3 weeks I receive the package, for a grand total of 6 weeks.&lt;br /&gt;&lt;br /&gt;By now is late March and the season is basically over!&lt;br /&gt;&lt;br /&gt;Done? Nope.They screw up and send me the wrong size for one of the lens. I write them back with a photo of the SKU and get ignored! After 1 week, I write again and receive this reply: mail us back the wrong lens and we will refund the cost of the lens. They refuse to send me the right lens, will just refund the cost, without shipping charges.&lt;br /&gt;&lt;br /&gt;Reason: "we can't modify the original order". Seriously? I know it sounds too hard to believe, but these guys are for real! Again, I will forward anyone their original emails!&lt;br /&gt;&lt;br /&gt;I get stuff shipped for free from Hong Kong in 3 weeks and these guys take 5-6 weeks! They refuse to make good on the order! It's insane, really! I would seriously suggest you look elsewhere for goggles. Ebay hasn't failed me yet. Actually this was the first time I strayed from Amazon and Ebay and I get screwed.&lt;br /&gt;&lt;br /&gt;Also, they are a Yahoo Store and theirs is the worse complaining and merchant rating system ever. I hope they go banckrupt. I will and you should avoid any so called Yahoo Store.&lt;br /&gt;&lt;br /&gt;I won't send them the wrong size only to get screwed again. I'll loose 40$ but I won't throw more good moneys after the bad.&lt;br /&gt;&lt;br /&gt;Again - Goggles Giant cost me 40$, send me the wrong size, didn't send the order until after the season was over and have the worse customer service online... who lies through their nose!&lt;br /&gt;&lt;br /&gt;Unfortunately I don't have a lot of recourse here. I can't even open a ticket with my credit card company because it has been like 9 weeks already now... smart buggers! Yahoo stores accept complaints only 6 weeks and after 30 minutes of browsing their website I can't even figure out how to rate this store or open a complaint!&lt;br /&gt;&lt;br /&gt;Argh!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-3179273075877696107?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/c41RN-ypWxc" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/_8JXLvXt-QQ" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-3179273075877696107</guid>
         <pubDate>Tue, 05 Apr 2011 18:17:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/c41RN-ypWxc/my-worst-internet-shopping-experience.html</feedburner:origLink></item>
      <item>
         <title>Scala DSL - realistic looking options</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/k0n1NcYFhvY/scala-dsl-realistic-looking-options.html</link>
         <description>Trying to simulate the way options are passed to unix commands via '-'.&lt;br /&gt;&lt;br /&gt;The idea is to define a set of applicable flags and an - operator. The end result is being able to write this beauty:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;rm -r -f apply "gigi.file"&lt;/pre&gt;Without further ado, here's the sample code:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We're limiting the flags and making this type-safe with the Flag case class. If you had more types of commands, you could limit the actual flags for each of them with custom Flag classes.&lt;br /&gt;&lt;br /&gt;The main idea is counting on scala's &lt;a rel="nofollow" target="_blank" href="http://www.scala-lang.org/node/118"&gt;infix notation&lt;/a&gt;. The different flags accumulate in sequence and in the end, the resulting command (now with flags) is applied.&lt;br /&gt;&lt;br /&gt;The magic of the infix notation is revealed by this equivalent form:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;rm.-(r).-(f).apply("gigi.file")&lt;/pre&gt;Further things to consider:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;combining options&lt;/li&gt;&lt;li&gt;simplifying away the "apply" from the syntax&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This sample is available &lt;a rel="nofollow" target="_blank" href="https://github.com/razie/learnscala/blob/master/src/main/scala/razie/learn/dsl/fs1/CmdOptions.scala"&gt;here&lt;/a&gt; and I wrote it while playing with a unix-looking scala shell for file management: &lt;a rel="nofollow" target="_blank" href="https://github.com/razie/scalafs"&gt;https://github.com/razie/scalafs&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Have fun! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-3537169067248362530?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/TwD1-FoapgI" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/k0n1NcYFhvY" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-3537169067248362530</guid>
         <pubDate>Fri, 21 Jan 2011 22:39:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/TwD1-FoapgI/scala-dsl-realistic-looking-options.html</feedburner:origLink></item>
      <item>
         <title>Embracing change</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/in26o6K0_KE/embracing-change.html</link>
         <description>&lt;p class="MsoNormal"&gt;    &lt;/p&gt;&lt;p class="MsoNormal"&gt;A little story of changes and why having options is awesome.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;My favorite browser was Chrome, obviously. Until I got a tablet PC and Chrome sucked at multitouch and gestures. Then my favourite browser became IE… of all things. Then I wanted to disable flash to get more juice out of the battery and less crap on the screen… now my default browser is Firefox.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;My favorite Twitter client was Tweetdeck until I got really bored with its inability to browse wide when I turned the iPhone around. Now my favourite tweet client is Twitter’s.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;A few things to note from this:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;The “bar” keeps rising as useful features become standard.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;Change is accelerating and the world is a better place because of this.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;Competition and voting with feet is insanely healthy (or healthy for the insane?).&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;I think that most people put up with missing features only for a while and what really kills software is slowness to evolve as well as lack of frequent releases. &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;One must always have some cheap features on a short term roadmap, to ensure that clients will get something continuously&lt;/li&gt;&lt;/ul&gt;          &lt;p class="MsoNormal"&gt;It also begs a few questions:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;span style="font:7pt;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Do you think that people become accustomed to seeing through the software they use and focus on the actual problem, switching said software often?&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;span style="font:7pt;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;How does this translate into a change-hating enterprise environment?&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;Why do we still have politicians?&lt;/li&gt;&lt;/ul&gt;      &lt;p class="MsoNormal"&gt;P.S. I wrote this using vi inside a Word document, on my tablet, while commuting to work; published it by tethering my internet connection through the iPhone while listening to an internet radio station stream…how cool is that? Can that be considered “giving back to the internet”? Are we Borg?&lt;/p&gt;&lt;p class="MsoNormal"&gt;P.S. 2 - right after, iPhone crashed 3 times trying to sever the tether...not sure what that means...&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-2599043546108804333?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/lZe9HoDC-TQ" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/in26o6K0_KE" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razvan)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-2599043546108804333</guid>
         <pubDate>Thu, 02 Dec 2010 16:29:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/lZe9HoDC-TQ/embracing-change.html</feedburner:origLink></item>
      <item>
         <title>A scala Workflow: Engine and DSL</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/dGGnnkhgsyA/scala-workflow-engine-and-dsl.html</link>
         <description>I've been meaning to write a workflow engine/language for sometime and recently, some scala DSL discussions gave me the motive. I know there's tons of workflow products but none complete and to my liking.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I started in May, worked on it a few hours here and there, for a few weeks and then didn't find the time to complete, so this is still work-in-progress, a snail-pace kind of progress. Since the basic ideas are in place, I figured it's worth advertising, maybe attract some converts and start a religion!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The project is over at &lt;a rel="nofollow" target="_blank" href="http://github.com/razie/gremlins"&gt;http://github.com/razie/gremlins&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Manifesto&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is not really meant to be a full-blown BPEL or BPMN environment, but a tiny, extensible but sweet and easily embedable workflow framework, that one can use to automate things inside the house, study the behavior of certain grains of sand or write more readable and interactive complex algorithms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There's more details in the vision page &lt;a rel="nofollow" target="_blank" href="http://github.com/razie/gremlins/blob/master/Gremlins.markdown"&gt;http://github.com/razie/gremlins/blob/master/Gremlins.markdown&lt;/a&gt;), but these are the basic principles behind this project:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;A workflow is just a graph of activities through which an engine carves one or more concurrent paths&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;The workflow has many views: text DSL, scala DSL, graphical etc&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;There's only a small set of base/core activities.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Complex activities are built as patterns from lower-level activities&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;There's a gremlin distribution API, uniformly implemented by all engines and components in a cloud&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Branches (sections of the graph) of a bigger workflow could run on multiple devices/agents&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Distributed branches, wherever they run, can be related back and managed as a unit&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Since these are all plain graphs, certain graph transformations should be able to turn a state machine into a workflow or a PI into a BPEL or whatever you want into something you'd like...&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So far, 1-4 are prototyped and 5-8 are "in progress": a basic concurrent engine and DSL are in place... I dind't get to the distributed part yet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Examples&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The magic of a scala DSL makes this simple CSP style workflow possible:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Doesn't look like scala code? Well... it is and it's proof of why scala is scalable! Of course, this comes with one of those "don't do this at home" annotations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;More complex examples include a scala version:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;or a text version:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you'd like to stay up-to-date, follow me on &lt;a rel="nofollow" target="_blank" href="http://twitter.com/razie"&gt;http://twitter.com/razie&lt;/a&gt; - among boring tweets of mine or interesting re-tweets of others, you may find some updates on my projects.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4115141669581646049?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/kwOp4aUVBuk" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/dGGnnkhgsyA" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4115141669581646049</guid>
         <pubDate>Wed, 15 Sep 2010 15:04:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/kwOp4aUVBuk/scala-workflow-engine-and-dsl.html</feedburner:origLink></item>
      <item>
         <title>The Book Of JOSH</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/ENsws4ydXxU/book-of-josh.html</link>
         <description>&lt;span class="Apple-style-span" style="color:rgb(102, 102, 102);font-family:Verdana, Arial, Helvetica, sans-serif;font-size:11px;"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;[Razie's note] I recently realized that I'm also shifting my mental models trending back to simplicity, so I wanted to re-read this blog...but could only find a copy of it - the original had disappeared. I enjoyed it a lot and figured the more copies the better, so I shamelessly copied the copy below. Enjoy!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;hr /&gt;&lt;div class="entry-main"&gt;&lt;div class="entry-date"&gt;&lt;/div&gt;&lt;div class="entry-date"&gt;&lt;/div&gt;&lt;div class="entry-date"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;For reasons unknown, this article has been removed from the author’s blog, but Google Reader remembered it for me! I have not been able to find the author’s contact information.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;All credits to &lt;/span&gt;&lt;a rel="nofollow" target="_blank" href="http://thegreylensmansview.blogspot.com/" style="text-decoration:none;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-color:initial;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The Grey Lens Man&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;!&lt;/span&gt;&lt;/p&gt;&lt;hr /&gt;&lt;div class="entry-main"&gt;&lt;div class="entry-date"&gt;&lt;/div&gt;&lt;div class="entry-date"&gt;&lt;/div&gt;&lt;div class="entry-date"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Mar 23, 2009 1:47 PM&lt;/span&gt;&lt;/div&gt;&lt;h2 class="entry-title" style="font-size:16px;font-weight:700;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;"&gt;&lt;a rel="nofollow" class="entry-title-link" target="_blank" href="http://thegreylensmansview.blogspot.com/2009/02/book-of-josh.html" style="text-decoration:none;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-color:initial;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The Book Of JOSH&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="entry-author"&gt;&lt;span class="entry-source-title-parent"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;from &lt;/span&gt;&lt;a rel="nofollow" class="entry-source-title" target="_blank" href="http://thegreylensmansview.blogspot.com/" style="text-decoration:none;border-top-style:none;border-right-style:none;border-bottom-style:none;border-left-style:none;border-color:initial;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The Grey Lens Man’s View&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; &lt;/span&gt;&lt;span class="entry-author-parent"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;by &lt;/span&gt;&lt;span class="entry-author-name"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The Grey Lens Man&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="entry-body"&gt;&lt;div&gt;&lt;div class="item-body"&gt;&lt;div&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Scala In The Enterprise&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Recently, we’ve decided to use Scala as part of an enterprise software solution stack. And I’d like to mention a few things on &lt;/span&gt;&lt;span style="font-style:italic;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;how the hell that was allowed to happen.&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;But first lets take a stroll and talk about a thing called enterprise IT.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;The Problem&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;You see, I have a small problem – 3 million lines of RPG and COBOL, 5,500 logical and physical files on a few AS400s that are not exactly cheap. Even better through the years, the system has been cloned and forked so several incompatible versions of exist through out the world.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;A few years ago I spent 3 months focused on the “original” implementation in a architectural reverse engineering exercise. The result, I know roughly the raison d’etre for 10% or ~ 300K SLOC of code and a few hundred files. 90% of that self-contained universe of code and tables is my personal dark matter question, I know its out there, just no clue as to its nature.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I won’t go into excruciating detail, but let me leave it like this; within that 2.5 T of data there resides a special flag in the customer file, which determines the fundamental nature of how a customer interacts with the system, and it can be found in Filler3, third byte from the left. In one file, the Account ID column sometimes actually does contain the Account number but not alway, sometimes its something else and its torched us. And you’ll never guess what that ZipLoc3 column_really_ contains (hint: nothing like a zipcode).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Yet this system is responsible for several billion in revenue. If the mainframe goes off line a few pagers chirp, but if that system goes off line, it’s klaxons and battle stations.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Universal agreement, its got to go. It has been end-of-life scheduled more often then a serial killer on death row. IT leadership comes and goes, yet, a full decade later it sits there in the data center laughing at me like an evil essence hosting Steven King basement furnace.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Within the last year of so, it’s reached such a state of chaotic entropy, its decay is not only apparent to IT, but now the business, and worse the customer as well.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;What Can Be Done?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;No one wants to keep it on life support, so doubling down the head count to reverse entropy, or putting some sort of SOA lipstick on this pig is something we’d like to avoid. The problems are fundamental and systemic.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Being customer facing, it’s where all of the businesses most “brilliant” ideas tend to accumulate through the years. Lets just say they’ve been very creative. Nuff said.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;We threw a check at it and a consulting team tried for 18 months to move onto an ERP solution and barely made a dent, though I do believe the team purchased their own private Caribbean Island from the billing fees. It just won’t map to a COTS or ERP package without a struggle and anything less the monetary cost of a government TARP program.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;On and off over the years, my boss, out of left field, using the &lt;/span&gt;&lt;em&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;pluralis maiestatis&lt;/span&gt;&lt;/em&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; would say “we should rewrite it all from scratch.” Having been broken like John McCain on a few Death Marches I’d look at him repeating “the horror… the horror.”&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Then during one of my annual hypomanic phases I’d wake up and just know that if put back together ol’ jelled team from that project back in ‘01, well we could rewrite that sucker in no time. That COCOMO II model, most assuredly &lt;/span&gt;&lt;span style="font-style:italic;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;did not&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; apply to us. My boss, with a look of concern, would nod sagely and suggest I think about it a bit more. I’d recover my senses in a day or two.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;And so it sits in the data center, spewing heat and laughing. And it is evil.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;All This Sturm und Drang&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;As a company we know how to do it by the book as we are several years into an ERP implementation. We have standards documents on how we develop standards, requirements/design/functional templates, change control, copious meetings, PMs, PMO office, analysts, and even a few software developers to actually implement things.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;We make RUP look like monkeys with a football, Dilbert but a pale shadow irony of our realism, and Forrestor articles look like descriptions of primitive tribal organization. We have PROCESS.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;In addition, we have been a full blown java company for in-house application for years. We got it in spades, Struts, Spring, Hibernate, J2EE, ADF, TOPLINK, Ant, Maven, Eclipse, Rational, …&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;We drink Kool-Aid by the 55 gallon drum round here.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Java&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;A number of years ago with the support of a key IT executive, I led a jelled, vertical team which brought Java into the company hard and fast. It was seismic.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;There was no end of debate, questions, consternation and gnashing of teeth throughout IT and beyond, which we totally ignored. We didn’t know we were supposed to form a technology introduction committee to shepherd this through the IT Leadership Committee approval process. We damn sure didn’t seek forgiveness after the fact, much less permission before the act.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;A wild ride, in a more wild time, this was pre-PROCESS. Small team, modest budget, mega-hours, fun times and a result that the business loved. It gave us the #1 ranking in our industry and we held it for a number of years.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I’m reasonably proficient in and knowledgeable of the Java Universe.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Lets, just say it, Java, by design, is a pretty simplistic language, I would argue even a crippled language for uses other then its original design point, which was certainly not server side enterprise IT. As a result, the cottage industries around Java are practically their own Industrial Sectors.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Java is the Brier Rabbit of IT. Once touched you can’t let go. Its simplistic enough to be inadequate in almost every situation. The commercial world just loves this aspect of Java as they exploit revenue streams from filling these gaps via endless Frameworks, Patterns, APIs, Annotations, IDEs and Toolsets.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The dirty secret of course is 25 – 50% of all of it is pure overhead, without direct value, but necessary to overcome the inherent limitations of Java.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;On the other hand, the upside of Java for enterprise IT is pretty obvious. Any problem you might have can be solved with money and armies of plug and play bodies and you get mountains of buzz material for those presentations.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;But honestly, is this anyway to deliver the IT solutions your company needs?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;font-size:14px;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Full Circle&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Where were we …. Yes, you see, I have a small problem.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;So whats the issue, you say? I write a whole blog about nothing, you say? We all know the right answer, you’re pointing out? Yea, I know, its intuitively obvious to the casual observer.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;We’ll rewrite it from scratch.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Course we’ll need a cluster of WebSphere Application Servers, and an Oracle RAC cluster for all that data. Don’t forget the middleware needed to transition over from the legacy systems, so toss in an ESB cluster, and what heck a couple of BPEL servers too.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Need a SOA Center of Excellence of course too. Can’t integrate without some common XML Business Object Schemas. Also need to roll the Rational RUP suite and some beefy IDE environments and for that shiny look, sprinkle the works with lots of WS-* sparkly dust. Bake 3-5 years or until done, whenever.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;My presentation slides for all this will be killer. I can sell this stuff. I’m good at it. I’ll look like a bloody genius. I’ll have Vendors fawning all over me. And the best part is the bubble on this mess won’t pop for YEARS, when I’ll have plenty of plausible deniability. “Hey the plan was perfect, the business, IT managers and their people were incapable of executing it.”&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I feel like the enterprise IT equivalent of an AIG trader pocketing ill gotten gains from writing Credit Default Swaps that we can’t pay off.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Losing My Religion&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;&lt;br /&gt;I’ve lost my faith in it all. I need a new religion.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I don’t want monolithic 10 ton solutions I need to wrestle into place with a small armies. I don’t want clusters of application servers fronting a behemoth RAC data cluster. I don’t want web management consoles which rival the Space Shuttle’s dash board.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I want a simple yet effective structural system where I can select and compose reusable modular solutions into simple, targeted solutions. The solution size should be isomorphic to the problem size. It leverages what it needs to solve the problem and no more.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I don’t want 100K source lines of code, with 33K lines of fluff and stuff. Where one of every in three lines of code has nothing to do with the business logic. Where you can’t even find the business logic in the mounds of patterns, abstractions, frameworks, annotation, cut points and verbosity.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I want the problem domain reflected in the code and the code to capture the essence of the problem domain.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I don’t want massive XML documents constrained by committee designed XSD Schema BODs shuttling around clusters of ESB and BPEL middleware.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I want dirt simple intra system communication in the data center.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The Book Of JOSH&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Through a marvelous, even devious, set of circumstances, I’m presented with the opportunity to address my little problem without proscribed constraints, a true green field opportunity.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;son &lt;/span&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;O&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;SGi &lt;/span&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;S&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;cala &lt;/span&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;H&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;TTP&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Json&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; delivers on what XML promised. Simple to understand, effective data markup accessible and usable by human and computer alike. Serialization/Deserialization is on par with or faster then XML, Thrift and Protocol Buffers. Sure I’m losing XSD Schema type checking, SOAP and WS-* standardization. I’m taking that trade.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;OSGi&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; a standardized dynamic, modular framework for versioned components and services. Pick a logger component, a HTTP server component, a ??? component, add your own internal components and you have a dedicated application solution. Micro deployment with true replacement. What am I giving up? The monolithic J2EE application servlet loaded with 25 frameworks, SCA and XML configuration hell. Taking the trade.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;HTTP&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; is simple, effective, fast enough, and widely supported. I’m tired of needlessly complex and endless proprietary protocols to move simple data from A to B with all the accompanying firewall port insanity. Yes, HTTP is not perfect. But I’m taking this trade where I can as well.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;All interfaces will be simple REST inspired APIs based on HTTP+JSON. This is an immediate consequence of the JOSH stack.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Scala&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt; is by far the toughest, yet the easiest selection in the JOSH stack. I wrestled far more with the JSON or XML or Thrift or Protocol Buffers decision.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Without hesitation I know Scala is the right choice from a pure solutioning aspect. But lets face it, what a tough, tough sell from the propeller headed guys to the pointy headed guys.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;First, I’m a bit of a computer language aficionado. I’ve written multiple, actual programs in SML, Scheme, Haskell which I’ve used within the enterprise. Why? Because when faced with certain “one time” problems I can knock out a simple utility far faster XXX then in Java. But in almost all cases these were throw away utilities for one time situations.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I’ve toyed with Dylan, Ruby, Python, Groovy, Lisp, Ocaml, Modula 2, Oberon, …&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;To date I’ve only advocated and pushed Python for utility scripting at both the Application and System Administration levels. Never, at any time did it ever even cross my mind to advocate anything other then Java and a bit of Python for enterprise application development until now.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Java has been stretched way beyond its modest design point. Its literally falling apart from bloat.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Joshua Boch has numerous presentations of the current state of affairs with Java and the proposed functional extensions and closures are headed. He quotes the following from the Java community.&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;“I am completely and totally humbled. Laid low. I realize now that I am simply not smart at all. I made the mistake of thinking that I could understand generics. I simply cannot. I just can’t. This is really depressing. It is the first time that I’ve ever not been able to understand something related to computers, in any domain, anywhere, period.”&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;“I’m the lead architect here, have a PhD in physics, and have been working daily in Java for 10 years and know it pretty well. The other guy is a very senior enterprise developer (wrote an email system that sends 600 million emails/year with almost no maintenance). If we can’t get [generics], it’s highly unlikely that the ‘average’ developer will ever in our lifetimes be able to figure this stuff out.”&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;That’s just generics. And if you seen the proposed syntax for closures, well its readily apparent, Java’s elastic modulus has been exceeded. A crippled language has been fast marched evolved into a broken language.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Plenty of blame for all here. In the last 50 years academia and commercial entities have given us boutique languages, COBOL, C++ and Java.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;A Proper Programming Language For Business Development&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;It’s the age of the Jetson’s, and a decent programming language for enterprise business applications doesn’t exist.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;So lets design one.&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Simple, clean and full featured.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Ready of concurrency, distributed applications on mult-core commodity boxes.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Allow for the explicit control of state and state mutation.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Support for modularity, and scaling in the large.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Multiparadigm to support mapping the commonality and variability of the domain problem to the code.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Capable of supporting Application Oriented Language / Domain Specific Language development (AOL/DSL).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Cross platform, with a large supporting tool suite universe.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Open and not subject to Vendor locking.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Fast&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;OO&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Functional&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Conceptual Integrity.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Allow control of, if not out right banishment of the null pointer.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Rich libraries.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Strongly Typed&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Practical and Pragmatic&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Accessible to the average developer, empowering to your A players.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Runs on a portable VM.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Leverage existing extensive Java libraries.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;This is Scala.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;So How Is It Going&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;Fast forward… Currently a very small team and myself are near completion of the first major functional component on the JOSH stack.&lt;br /&gt;&lt;br /&gt;All of the development talent on the team are experienced Java developers. And they have been effective from Day 1.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;No real discussions of covariance and contravariance was required. We did discuss HOF, anonymous lamba, closures, cut syntax, maps, folds, reduces. And strangely their heads did not explode. We did discuss the evil of mutable state, and referentially transparent functions.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;They were enthralled.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;No detailed lectures on the deep underlying structure of Catamorphism, Anamorphism, Apomorphism, Hylomorphism and Paramorphism was required to get solid code at a cleaner and higher level, with less bloat then equivalent Java.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;A core aspect of system is combinator based threading state through a composed computation. No problems in understanding were observed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;In fact in terms of difficulty, they struggled somewhat more with Git then they did with Scala, Linux then they did with Scala, IDEs issues then they did with Scala, and Maven then they did with Scala.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;At a minimum they wrote better Java idomatic code in Scala then they did in Java and proactively adopted more idiomatic Scala as time went by.&lt;br /&gt;&lt;br /&gt;Visual Basic now has lambda and no one expects a VB developer to throw himself off a building. Yet somehow, these days too many think Java developers can’t handle more advanced functionality.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;I’ve seen too much of “I just did this fold thingy and my co-workers could _never_ understand that” is a bit overblown. OK, if they have never seen it before, they might not get it in 10 mins. But working with the team on the basics for 10 hours or 10 days will certainly do it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;But bottom line, enterprise Java developers can transition to Scala. I know this, because I’ve directly observed it.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:14px;"&gt;&lt;span style="font-weight:bold;"&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;JOSH has no Data&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;The JOSH stack is lacking a letter, because a solution for persisted data is missing in the stack.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;A great deal of what needs to be done does not require a ACID RDB cluster. Some of it does and I’m kicking that can down the road.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" style="color:#CCCCCC;"&gt;For the rest, either the data is ReadOnly and loaded a 1-3 times a day or is best persisted by a distributed Key-Value storage system. A number of these are now available as open source solutions and at the right moment I’ll need to pick one and add that letter to the JOSH stack.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-5811364783260677803?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/PFEm-vCtcEg" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/ENsws4ydXxU" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-5811364783260677803</guid>
         <pubDate>Wed, 18 Aug 2010 16:14:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/PFEm-vCtcEg/book-of-josh.html</feedburner:origLink></item>
      <item>
         <title>Google wave is dead</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/rrfM42nfcQk/google-wave-is-dead.html</link>
         <description>...yeah, the "king of the interactive communication is dead, long live the king".&lt;br /&gt;&lt;br /&gt;While enthusiastic in the beginning, I must say that we didn't used it as much as we thought we'd be. The technology behind it however is awesome, but I must agree, the implementation wasn’t the greatest. It should be embedded in google docs and integrated with email and IM. I think I already saw some of that in google docs recently…&lt;br /&gt;&lt;br /&gt;For instance click on an email thread and "turn to wave". Or the same in IM, think of it as "persisting the thread".&lt;br /&gt;&lt;br /&gt;In google docs, the use of this is obvious: it's turning any doc into a version controled repository, real time wiki with embedded forum etc...yeah, makes sense. Every software MUST now have this: every wiki, every forum, every Word application...they simply &lt;span style="FONT-WEIGHT:bold;"&gt;must&lt;/span&gt;! Getting this question in a flashing status bar of your favorite Word app "Do you accept interactive edit of this document, from John@somegeeks.com?". Hell, yeah...&lt;br /&gt;&lt;br /&gt;The "playback" feature was underutilized.&lt;br /&gt;&lt;br /&gt;May be surprising, but I used it mostly as an internet pad to copy/paste quotes, ideas, links and later develop them. Also to copy/paste things between laptops/computers, save them for later etc.&lt;br /&gt;&lt;br /&gt;An "internet research pad", where you could invite others etc...that I still think it's worthy of its own site.&lt;br /&gt;&lt;br /&gt;I will, spare time existing, look at integrating this with my script pad: &lt;a rel="nofollow" target="_blank" href="http://scripster.razie.com/play/session"&gt;http://scripster.razie.com/play/session&lt;/a&gt; - That would be bespinningly interesting.&lt;br /&gt;&lt;br /&gt;As always, don't hold your breath.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4036770707375775730?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/KZsC5VE2WMY" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/rrfM42nfcQk" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4036770707375775730</guid>
         <pubDate>Mon, 09 Aug 2010 15:30:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/KZsC5VE2WMY/google-wave-is-dead.html</feedburner:origLink></item>
      <item>
         <title>Bitching about American Express</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/p1jQ41PHgMc/bitching-about-american-express.html</link>
         <description>So, my Amex card is a little ripped and I call them to send a replacement. They said they'll change the last 4 digits of the card so now I have to update all my online and pre-authorized stuff, banking etc. &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I explain that my card is not lost and that's a lot of work. They explain that I may cancel my account instead if I wish. I almost did that...but realized I was pissed and just backed down - I guess keeping a long-standing account is a positive for my credit history.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Anyways. I am updating all my pre-authorized and online stuff to use my MasterCard and I will simply park the new card, when it arrives, somewhere in the library.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Just like that, Amex lost a few hundred/thousand dollars in revenue and all of a sudden I feel good about it. I promise I won't use it anymore...I'll now carry a MasterCard and a Visa instead.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The morons should realize that I don't care about what they want...but, if they want my moneys, they should really care about what I want!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Anyways, bitching accomplished. Feel better.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Cheers&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;P.S. Their website does not have either an email option or an online form for complaints...nothing online. All they have is phone numbers (but I just hanged up) and snail mail addresses. Oh well - serves them well...they got a blog instead and "lost" a customer.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;P.S. Already switched a few monthly recurring payments and online processors to my MC. This is almost fun now.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-2459727419160825684?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/uzp01k5ARKk" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/p1jQ41PHgMc" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-2459727419160825684</guid>
         <pubDate>Tue, 15 Jun 2010 15:42:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/uzp01k5ARKk/bitching-about-american-express.html</feedburner:origLink></item>
      <item>
         <title>Blogger is stupid</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/SCHK4Puc-IA/blogger-is-stupid.html</link>
         <description>Trying to edit a blog (&lt;a rel="nofollow" target="_blank" href="http://blog.homecloud.ca/2010/03/option-monad-pattern-thing.html"&gt;this one&lt;/a&gt;) I've had it: this editor right here is one of the worst I've used in a long time. It's still close to impossible to quote nice code snippets and the html it generates is riddled with DIV tags worse than a word document. &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I guess this is the fate of things. The bad ones become good enough and the good get worse.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Shame. I shall investigate options to blogger, since the best voting is done with the feet...or, in this case, with the...fingertips...?&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I shall create my own nice code quoting system, based on the &lt;a rel="nofollow" target="_blank" href="http://scripster.razie.com/"&gt;scripster&lt;/a&gt; I just put together. I should probably thank them for the idea...&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;[EDIT] The code quoting is up and running - just need to work on embedding the quotes now. Try it at &lt;a rel="nofollow" target="_blank" href="http://www.codewitter.com/"&gt;www.codewitter.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7276734972175648212?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/25j9VCckRb4" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/SCHK4Puc-IA" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7276734972175648212</guid>
         <pubDate>Sun, 14 Mar 2010 03:04:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/25j9VCckRb4/blogger-is-stupid.html</feedburner:origLink></item>
      <item>
         <title>Implementing a state machine in scala DSL</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/G-J8bcLs-ec/implementing-state-machine-in-scala-dsl.html</link>
         <description>I had a bit of fun in the past few days writing a telnet server implementation in #scala. Part of that was implementing a state machine, which I then cleaned up so the definitions are simple.&lt;br /&gt;&lt;br /&gt;Here's a sample state machine:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The code is at &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/razie/source/browse/trunk/razie/src/razie/SM.scala"&gt;http://code.google.com/p/razie/source/browse/trunk/razie/src/razie/SM.scala&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The basic structure is:&lt;br /&gt;&lt;pre&gt; (state, event-matcher) -&amp;gt; newstate + callback ++ unitcalback... + callback :: Nil&lt;/pre&gt;The event-matcher can be:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;an event&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a sequence of events&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a function taking an event and returning...Boolean, of course&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The callback is a function with either of these signatures:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;def push (sm:StateMachine, t:Transition, e:Event) - use + for these&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;def reset : Unit - use ++ for these (hey, I'm still getting my head around advanced scala stuff)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Enjoy, and if you likee, contribute, eh?&lt;br /&gt;&lt;br /&gt;Here's the definition (in-work) of the high-level telnet state machine, a little more complicated but not much.&lt;br /&gt;&lt;br /&gt;The picture (thanks to &lt;a rel="nofollow" target="_blank" href="http://tomi.vanek.sk/index.php?page=telnet"&gt;http://tomi.vanek.sk/index.php?page=telnet&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;a rel="nofollow" target="_blank" href="http://tomi.vanek.sk/static/telnet/Telnet%20Parser.png"&gt;&lt;img style="MARGIN:0pt 0pt 10px 10px;WIDTH:479px;HEIGHT:504px;CURSOR:pointer;" border="0" alt="" src="http://tomi.vanek.sk/static/telnet/Telnet%20Parser.png"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The state machine (when it's ready I'll post the link to the entire code):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// based on diagram at http://tomi.vanek.sk/index.php?page=telnet&lt;br /&gt;&lt;br /&gt;implicit val sm = this&lt;br /&gt;&lt;br /&gt;val sstates @ (data, cmd, app, param, neg, subneg) = ("data", "cmd", "app", "param", "neg", "subneg")&lt;br /&gt;override def start = state("data")&lt;br /&gt;&lt;br /&gt;override val transitions : Seq[Transition] =&lt;br /&gt;     (data, IAC)             -&amp;gt; cmd ::&lt;br /&gt;     (data, 0)               -&amp;gt; data :: // NOP - don't know why i get these after CR&lt;br /&gt;     (data, 10)              -&amp;gt; data :: // NOP - LF ignored?&lt;br /&gt;     (data, 13)              -&amp;gt; data + eatLine + echo ("") :: // CR&lt;br /&gt;     (data, {_:Event=&amp;gt;true}) -&amp;gt; data + eatChar + echo ("") :: // remaining chars&lt;br /&gt;     (cmd, IAC)              -&amp;gt; data ::&lt;br /&gt;     (cmd, Seq(WILL, WONT, DO, DONT)) -&amp;gt; neg + push ::&lt;br /&gt;     // TODO 3-2 should negociate stuff, i.e. reply with will/won't&lt;br /&gt;     (neg, {_:Event=&amp;gt;last==SM(DO)})   -&amp;gt; data + mode(true) + pop ::&lt;br /&gt;     (neg, {_:Event=&amp;gt;last==SM(DONT)}) -&amp;gt; data + mode(false) + pop ::&lt;br /&gt;     (neg, AnyEvent) -&amp;gt; data + echo("interesting sequence...") + pop ::  // What is this?&lt;br /&gt;     (cmd, SB) -&amp;gt; subneg ::&lt;br /&gt;     (""".*""".r, CR) -&amp;gt; data :: // it's important to reset the thing on ENTRE&lt;br /&gt;      Nil&lt;br /&gt;&lt;br /&gt;def eatChar (sm:StateMachine, t:Transition, e:Event)&lt;br /&gt;def eatLine (sm:StateMachine, t:Transition, e:Event)&lt;br /&gt;&lt;/pre&gt;Enjoy and, more importantly, have fun! &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;If you'd like to read more of my rants about scala, see &lt;a rel="nofollow" target="_blank" href="http://wiki.homecloud.ca/thinking-in-scala"&gt;http://wiki.homecloud.ca/thinking-in-scala&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-1307161256424076347?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/toUE2aBmVNQ" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/G-J8bcLs-ec" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-1307161256424076347</guid>
         <pubDate>Fri, 26 Feb 2010 16:17:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/toUE2aBmVNQ/implementing-state-machine-in-scala-dsl.html</feedburner:origLink></item>
      <item>
         <title>Start dowloading torrents remotely</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/-HrjUPftW3s/start-dowloading-torrents-remotely.html</link>
         <description>Say you're at work and you stumble onto a torrent you'd like to watch tonite (some documentary or the latest episode from &lt;a rel="nofollow" target="_blank" href="http://www.cbc.ca/nextprimeminister/blog/2008/03/download_canadas_next_great_pr.html"&gt;http://www.cbc.ca/nextprimeminister/blog/2008/03/download_canadas_next_great_pr.html&lt;/a&gt;). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well, here's one way to do it...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Run uTorrent at home, 24/7, even if it's not downloading anything. Configure it to automatically load torrents from a folder say "torrentstodo". This is in Preferences/Directories at the bottom.&lt;/div&gt;&lt;div&gt;2. Install LiveMesh both at home and at work&lt;/div&gt;&lt;div&gt;3. map this folder as shared on both computers: right click and say "share with LiveMesh" at home and at work just right click the "LiveMesh Folders" in explorer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then, when you like a torrent, save it to the local "torrentstodo" folder at work. LiveMesh will transfer it at home automatically. Then uTorrent will pick it up and start downloading it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please don't steal copyrighted material when it's easily available (online) at a reasonable price :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-8550380359595565107?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/mb8aSMRWN9E" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/-HrjUPftW3s" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-8550380359595565107</guid>
         <pubDate>Wed, 20 Jan 2010 17:48:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/mb8aSMRWN9E/start-dowloading-torrents-remotely.html</feedburner:origLink></item>
      <item>
         <title>I'm a Code Manager</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/DKQDjPZ3H3U/im-code-manager.html</link>
         <description>Product Manager, Project Manager, HR - i.e. People Manager, Technical Account Manager, Development Manager, Build Manager....and developers. Some develop and the rest manage stuff.&lt;br /&gt;&lt;br /&gt;WRONG!&lt;br /&gt;&lt;br /&gt;You know what? I want to be called by my new title: Code Manager. Everyone manages something and I manage code.&lt;br /&gt;&lt;br /&gt;THERE!&lt;br /&gt;&lt;br /&gt;I guess I missed the many architects, we can call them Code Benders - hey, I actually like that!&lt;br /&gt;&lt;br /&gt;Happy coding!&lt;br /&gt;&lt;br /&gt;P.S. I think I left out the Resource Manager - as in some companies, people are known as "resources". So in a project, the Project Mananger can choose 3 resources: a cofee machine, a printer and a developer. WRONG. I'm a Code Manager, not a resource, so please...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4030714006765749396?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/IHhQA9PDJpo" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/DKQDjPZ3H3U" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4030714006765749396</guid>
         <pubDate>Fri, 11 Dec 2009 22:01:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/IHhQA9PDJpo/im-code-manager.html</feedburner:origLink></item>
      <item>
         <title>My Nokia 770</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/dtb9hYBEN1Y/my-nokia-770.html</link>
         <description>I love my Nokia 770 and it's much more useful than the iPod - I must say...Since I was bashing all device manufacturers other than Apple, I must exclude Nokia from the list...&lt;br /&gt;&lt;br /&gt;Having the courage to come up with a Linux-based Internet tablet, when they did, puts them squarely in front of Apple...&lt;br /&gt;&lt;br /&gt;The thing is that I use them both (iPod Touch and the 770) as remotes to &lt;a rel="nofollow" target="_blank" href="http://wiki.homecloud.ca/WatchMovie"&gt;control movie playing at home&lt;/a&gt; and the Nokia is better equiped to be the remote. It is a little bulkier and sluggish to reconnect the WiFi, but the web browsing experience is much better, for the simple pages my application requires (larger screen helps, but the ergonomics of full-page and persistent zoom are what make it the better one).&lt;br /&gt;&lt;br /&gt;Fully customisable home screen and a host of applications out-of-the-box actually make it the winner...just to think that I've had it for a few years now and it cost half what the iPod did...why is this new iPod touch so backwards? Target market? Well, I guess simplicity does have its benefits...it is a &lt;span style="font-style:italic;"&gt;portable&lt;/span&gt; music player first of all!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-1087119816086677689?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/fNObEyatngs" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/dtb9hYBEN1Y" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-1087119816086677689</guid>
         <pubDate>Thu, 24 Sep 2009 15:35:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/fNObEyatngs/my-nokia-770.html</feedburner:origLink></item>
      <item>
         <title>iPods suck nicely</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/50LpSwlTj9A/ipods-suck-nicely.html</link>
         <description>Just gave in and got the new iPod Touch (32G) this weekend. Let's see...&lt;br /&gt;&lt;br /&gt;Couldn't even take it out of the box - I was afraid to break it - I went back and asked a "Mac Helper" for help and he explained how to take it out - apparently Apple just won the abnormal packaging contest!&lt;br /&gt;&lt;br /&gt;Walked again out of the store only to come back: when turned on, the thing only displays an image suggesting plugging its USB into iTunes. I had to go back and explained that I just paid 400$ for a toy that doesn't work...they finally convinced me to just refrain from returning it and wait until I got home to plug it in and see what's what.&lt;br /&gt;&lt;br /&gt;Well - finally got home and started playing with it. It does grow on you and you start to wonder how come every OTHER device manufacturer out there seems to be sooo stupid. They do deserve the market share they're left with!&lt;br /&gt;&lt;br /&gt;But then you start to notice the noticeables:&lt;br /&gt;- the only dark screen is the home screen...most others are the same stupid black on white as your microsoft outlook...and there's no obvious way to change the "skin".&lt;br /&gt;- the browser, while smart, is also stupid. I.e. the "zoom", while nicely done with the pinching manouver, is not remembered when you click on the next page&lt;br /&gt;- the home screen doesn't go wide when you turn the thing...non-sensical since when you can go back and forth between "wide" apps, you pass through the home screen and have to turn the thing again...&lt;br /&gt;&lt;br /&gt;Overall, they can get away with all these, just because the thing is so nice in many other ways...but it goes to prove the limits of every day life - nobody's perfect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-8661873191875399330?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/WTqYQSzA9XA" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/50LpSwlTj9A" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-8661873191875399330</guid>
         <pubDate>Mon, 21 Sep 2009 16:08:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/WTqYQSzA9XA/ipods-suck-nicely.html</feedburner:origLink></item>
      <item>
         <title>converting Java collections to scala collections</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/DVeDfE3oz24/converting-java-collections-to-scala.html</link>
         <description>This took me many hours to figure out. I didn't find a word about it in the (quite a bit of) stuff I read, including the "Programming in Scala" book, blogs, posts etc.&lt;br /&gt;&lt;br /&gt;How to best convert java collections into scala collections and back. This is crucial, as lots of would-be scalaistas would still carry around some kind of Java library, be it JNDI or JTA or some in-house non-rewritables!&lt;br /&gt;&lt;br /&gt;As of scala 2.7, scala.collection.jcl.Convertions is your friend. As of scala 2.8, scala.collection.JavaConversions is your best friend. Enough said.&lt;br /&gt;&lt;br /&gt;Interestingly, I use List pretty much everywhere in my code. However, as you'll see, since List is the only one that doesn't freely convert from one to the other, it follows that you should use Seq[A] in all your scala code...hmmmm&lt;br /&gt;&lt;br /&gt;[later edit] Also, your arguably best friend in scala is the scala.collections.mutable.ListBuffer - check it out, it's all you thought List would be! Although, after a while, you will find yourself relying on mutable collections less and less...&lt;br /&gt;&lt;br /&gt;To get the full power of the implicit java to scala conversions, make sure you import the contents of the class, note the underscore below:&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color:#ff0000;"&gt;import scala.collection.JavaConversions._&lt;/span&gt;&lt;/pre&gt;[Later edit] I removed my examples here as being too clumsy :) use the import above instead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-5645985736880659758?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/Rm5Q996M2Fs" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/DVeDfE3oz24" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-5645985736880659758</guid>
         <pubDate>Thu, 17 Sep 2009 03:50:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/Rm5Q996M2Fs/converting-java-collections-to-scala.html</feedburner:origLink></item>
      <item>
         <title>Increase battery capacity to 123% :)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/VAl_2EAjIUE/increase-battery-capacity-to-123.html</link>
         <description>&lt;a rel="nofollow" target="_blank" href="http://2.bp.blogspot.com/_AgcP7L_T8ZQ/SoHUJ6AfTQI/AAAAAAAAAE0/1kZHmvOp83w/s1600-h/battery.PNG"&gt;&lt;img style="MARGIN:0px 0px 10px 10px;WIDTH:303px;FLOAT:right;HEIGHT:103px;CURSOR:hand;" id="BLOGGER_PHOTO_ID_5368805497457560834" border="0" alt="" src="http://2.bp.blogspot.com/_AgcP7L_T8ZQ/SoHUJ6AfTQI/AAAAAAAAAE0/1kZHmvOp83w/s320/battery.PNG"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Just got this "warning" from my own laptop...no comments!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4964447402674024615?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/GN7f_NNLlkE" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/VAl_2EAjIUE" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4964447402674024615</guid>
         <pubDate>Tue, 11 Aug 2009 20:25:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://2.bp.blogspot.com/_AgcP7L_T8ZQ/SoHUJ6AfTQI/AAAAAAAAAE0/1kZHmvOp83w/s72-c/battery.PNG" width="72" />
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/GN7f_NNLlkE/increase-battery-capacity-to-123.html</feedburner:origLink></item>
      <item>
         <title>Process Explorer - me likee</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/jE8MGAfByGw/process-explorer-me-likee.html</link>
         <description>Installed this &lt;a rel="nofollow" target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer &lt;/a&gt;a while back and it replaces the windows classic Task management stuff which is hopeless!&lt;br /&gt;&lt;br /&gt;I love it. The best features are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;it shows a lot of information about what's running&lt;/li&gt;&lt;br /&gt;&lt;li&gt;you can search for a process just by typing the name&lt;/li&gt;&lt;br /&gt;&lt;li&gt;when you say "kill" it actually kills them asap rather than think and wait and ask for confirmation about 10 times...&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;Whoa! Goodie! Me likee.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-7812248735757975469?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/qmpZG_Sypj4" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/jE8MGAfByGw" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-7812248735757975469</guid>
         <pubDate>Fri, 05 Jun 2009 14:51:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/qmpZG_Sypj4/process-explorer-me-likee.html</feedburner:origLink></item>
      <item>
         <title>Your own newspaper</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/_NbykixqYJg/your-own-newspaper.html</link>
         <description>Here's the culmination of the freedom from the mainstream: you can create your own newspaper, from the feeds you want: &lt;a rel="nofollow" target="_blank" href="http://feedjournal.com/index.html"&gt;http://feedjournal.com/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not only are we using feed readers, we can now print our own newspapers - that's so cool...interestingly enough, this is just another of the &lt;a rel="nofollow" target="_blank" href="http://www.amazon.ca/Sovereign-Individual-Mastering-Transition-Information/dp/0684832720"&gt;Sovereign Individual &lt;/a&gt;predictions...&lt;br /&gt;&lt;br /&gt;And...to complete the picture, for the retarded sites that don't support content feeds, here's a free service that does it: &lt;a rel="nofollow" target="_blank" href="http://changedetection.com/"&gt;ChangeDetection&lt;/a&gt;. It is simple to use and no catches that I could find...&lt;br /&gt;&lt;br /&gt;If you're looking, there's actually more of these page2rss services, including &lt;a rel="nofollow" target="_blank" href="http://page2rss.com/"&gt;http://page2rss.com&lt;/a&gt; - really simple! The &lt;a rel="nofollow" target="_blank" href="http://www.watchthatpage.com/"&gt;http://www.watchthatpage.com/&lt;/a&gt; seems more complicated, while &lt;a rel="nofollow" target="_blank" href="http://www.followthatpage.com/"&gt;http://www.followthatpage.com/&lt;/a&gt; can do only email...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy newsprinting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-3479036256209147430?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/1uxL8A2QqJU" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/_NbykixqYJg" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-3479036256209147430</guid>
         <pubDate>Thu, 14 May 2009 16:59:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/1uxL8A2QqJU/your-own-newspaper.html</feedburner:origLink></item>
      <item>
         <title>Optional arguments in Scala</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/LOzgcvuwWic/optional-arguments-in-scala.html</link>
         <description>I couldn't find much on the web with this search and it took me maybe 15 min to figure it out, so here's the low down on using optional arguments in Scala. There's a description in section 8.8 in the Programming in Scala book - they call them "repeated parameters".&lt;br /&gt;&lt;br /&gt;Using this notation you can overload Java methods with optional parms as well as pass them over to a "super." method (which was what I needed to do):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def takesOptionalArgs (x:String*) = {&lt;br /&gt;   println ("Scala println: ", x.mkString(" "))&lt;br /&gt;   java.lang.System.out.printf ("Java printf: %s %s %s", x:_*)&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This special syntax instructs the compiler to pass the x array elements individually, not as an array!&lt;br /&gt;&lt;br /&gt;Cheers.&lt;br /&gt;&lt;br /&gt;[later edit] P.S. Note that there's an outstanding defect for overloading java vararg methods - it currently doesn't work: &lt;a rel="nofollow" target="_blank" href="https://lampsvn.epfl.ch/trac/scala/ticket/1459"&gt;https://lampsvn.epfl.ch/trac/scala/ticket/1459&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4657128882461953782?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/j2ng50Vukt0" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/LOzgcvuwWic" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4657128882461953782</guid>
         <pubDate>Tue, 21 Apr 2009 16:50:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/j2ng50Vukt0/optional-arguments-in-scala.html</feedburner:origLink></item>
      <item>
         <title>Agile Architecture talk from Coplien</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/Vrd_XunMTiQ/agile-architecture-talk-from-coplien.html</link>
         <description>&lt;p&gt;For a nice glimpse at the future of programming as it evolves, I strongly recommend this talk from my favorite architecture guy: Coplien. Prerequisites: get a beer, slippers and a robe, the conclusion is not light reading!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://blog.jaoo.dk/2009/03/04/handling-architecture-in-the-agile-world/"&gt;http://blog.jaoo.dk/2009/03/04/handling-architecture-in-the-agile-world/&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Some of the things that deserve emphasis:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The need that the application’s own model matches the model the users have in their head, i.e. the “view of the world” is obvious, but, unfortunately, it is not obvious to many…&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Architecture is the essence of structure (the form), not the structure itself. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;A good agile/lean architecture:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;supports change&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Supports user interaction&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lowers discovery costs, rework&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;Other memorables:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Habitable code – code where the designer could choose to live. Do you like your code? Would you live with it?&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Refactoring is bad! We want to avoid re-work…you need a system view, not code–as-you-think!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The long forgotten purpose of OO is to capture the model from the user’s mind, not create toys for developers!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(Razie says hmm): Do object diagrams instead of class diagrams – users think in terms of instances, not abstract classes.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The GUI is not something between the GUI and the model, is a tool allowing the user to mess with the model! Kent Beck said “you can’t hide a bad architecture behind a good GUI”.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(Razie says hmm): Requirements are the LAST thing you look at when doing architecture!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Need architecture upfront, code just-in-time!&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Java is a TOY language.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Scala’s got traits, baby!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;This is the brief follow up: &lt;a rel="nofollow" target="_blank" href="http://blog.jaoo.dk/2008/12/20/jaoo-video-2008-james-o-coplien/"&gt;http://blog.jaoo.dk/2008/12/20/jaoo-video-2008-james-o-coplien/&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Peter Coad’s now a pilot, but his role-based color modeling should’ve taken off! &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-809872695050601243?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/iw_UI2UXC2U" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/Vrd_XunMTiQ" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-809872695050601243</guid>
         <pubDate>Tue, 14 Apr 2009 18:13:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/iw_UI2UXC2U/agile-architecture-talk-from-coplien.html</feedburner:origLink></item>
      <item>
         <title>Components vs Frameworks</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/D_j5IkEH9R4/components-vs-frameworks.html</link>
         <description>ABSTRACT: One of Razie's infamous uber-principles: I see frameworks as being the opposite of components. When architecting parts of a system, use this to decide on one or the other - this point of view could enrich the designer's arsenal of decision principles.&lt;br /&gt;TAGS: architecture, design, principle&lt;br /&gt;&lt;br /&gt;When you're talking about "writing code", the best option is generally reusing an existing piece of code and customizing it. Reusable pieces of code are normally in the category of either components or frameworks.&lt;br /&gt;&lt;br /&gt;Components are more or less black boxes with well defined inputs/outputs and customization settings.&lt;br /&gt;&lt;br /&gt;Frameworks, while they may also have defined inputs/outputs, they generally cannot be used as is. You write "plugins" (i.e. proxies or strategies) that customize a piece of the puzzle and then combine them to achieve the functionality the framework is intended for.&lt;br /&gt;&lt;br /&gt;I see frameworks as being the opposite of components, given how they're used: while components are pre-determined pieces of functionality, which you combine to achieve a flexible structure, frameworks define first an immutable structure and then allow you to customize some aspects of it.&lt;br /&gt;&lt;br /&gt;Patterns fall sqarely in the framework category, since they prescribe a structure with roles to fill out.&lt;br /&gt;&lt;br /&gt;In terms of initialization and configuration, components get everything up-front, while frameworks usually will use a callback to retrieve configuration, when needed. At least it's easier to always follow this pattern: use of factories indicates frameworks, for instance.&lt;br /&gt;&lt;br /&gt;Depending on the level you're at and your point of view, it is relative whether a given library falls in either category. For instance, a component could take a "strategy" as an input.&lt;br /&gt;&lt;br /&gt;When you look at a system, you will see components made of frameworks, made of components, made of frameworks etc. A system is made of sub-systems, which can only be of either kind :) since they're the two opposite forms of sub-system architecture.&lt;br /&gt;&lt;br /&gt;CONCLUSION&lt;br /&gt;&lt;br /&gt;Making the distinction and decision between component vs. framework, when designing, is important, since the denomination of "component" carries lots of semantics: independence, self-sufficiency, black-box, upfront initialization etc.&lt;br /&gt;&lt;br /&gt;Frameworks allow flexibility in the detail but are inflexible structure-wise. A framework that is too flexible is called a mess.&lt;br /&gt;&lt;br /&gt;A framework with all variabilities fixed is a component.&lt;br /&gt;&lt;br /&gt;Keep thinking and have fun, eh? I certainly am!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-2111007781862265238?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/DBlHZ4bH0-k" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/D_j5IkEH9R4" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-2111007781862265238</guid>
         <pubDate>Thu, 12 Mar 2009 14:44:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/DBlHZ4bH0-k/components-vs-frameworks.html</feedburner:origLink></item>
      <item>
         <title>Google Chrome and your passwords in clear-text</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/POXgpvqgiWU/google-chrome-and-your-passwords-in.html</link>
         <description>It was fun using the "remember passwords" feature until i figured out that Chrome will show your remembered passwords in clear-text...&lt;br /&gt;&lt;br /&gt;...it's probably the worse feature I've seen implemented so far, this year...but it's just february...and you didn't see what I have to say about CIRA-the Canandian internet registrar- yet, eh?&lt;br /&gt;&lt;br /&gt;[later edit]...this is especially evil since now evildoers could change the passwords to all your accounts and lock you out - otherwise, even if they find your laptop logged into all those accounts, they couldn't change your password before you did...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20018300-4294438285939674855?l=blog.razie.com' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Razblog/~4/2tFMLuDNgvQ" height="1" width="1"/&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/POXgpvqgiWU" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-20018300.post-4294438285939674855</guid>
         <pubDate>Tue, 17 Feb 2009 17:18:00 +0000</pubDate>
      <feedburner:origLink>http://feeds.razie.com/~r/Razblog/~3/2tFMLuDNgvQ/google-chrome-and-your-passwords-in.html</feedburner:origLink></item>
      <item>
         <title>Design Patterns Quick Reference</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/RXZukb4LH-w/design-patterns-quick-reference</link>
         <author>jordi</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/dad28493a1e6e726</guid>
         <pubDate>Thu, 16 Sep 2010 12:16:07 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/RXZukb4LH-w" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/ModelingLanguages-blog/~3/tjVvtXxxnjk/design-patterns-quick-reference</feedburner:origLink></item>
      <item>
         <title>10/GUI</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/yUtVLOickBE/</link>
         <author>Mike Girouard</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/8529c20875158471</guid>
         <pubDate>Wed, 11 Aug 2010 16:00:01 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/yUtVLOickBE" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.lovemikeg.com/?p=193</feedburner:origLink></item>
      <item>
         <title>Java and Practicality</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/LGqscZv13u0/</link>
         <description>&lt;blockquote&gt;Shared by  Razie 
&lt;br&gt;
Java's been this mind-numbing trap that's hard to get out of. All is classes and...well, more classes!&lt;/blockquote&gt;
&lt;p&gt;I have found that those who advocate for the practicality of Java as a programming language for solving software problems invariably have an incredibly poor understanding of programming language theory and poor general problem solving skills. However, almost always, an even poorer understanding of the Java programming language itself is most prominent.&lt;/p&gt;
&lt;p&gt;Consequently, one cannot have a reasonable discussion about the merits of problem solving, using the Java programming language, or programming languages in general. However, one hopes that this sample set is biased and so one continues the search for a counter-example.&lt;/p&gt;
&lt;p&gt;This is lamentable.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/LGqscZv13u0" height="1" width="1"/&gt;</description>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/d80428502a61ca2b</guid>
         <pubDate>Sun, 08 Aug 2010 04:07:22 +0000</pubDate>
      <feedburner:origLink>http://blog.tmorris.net/java-and-practicality/</feedburner:origLink></item>
      <item>
         <title>The Best Way To Charge Your Phone</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/OY0FxaUh2nE/</link>
         <description>&lt;p&gt;&lt;img src="http://thereifixedit.files.wordpress.com/2010/07/da8e4b32-1843-4a64-95cd-9a88c1a1facc.jpg" title="white trash repair - The Best Way To Charge Your Phone" alt="white trash repair - The Best Way To Charge Your Phone"&gt;&lt;/p&gt;

&lt;p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;Submitted by: Unknown&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Favorite Comment:&lt;/strong&gt; treborx says,&lt;em&gt; “message(s) in a bottle. WIN!”&lt;/em&gt;&lt;/p&gt;
&lt;br&gt;  &lt;a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gocomments/thereifixedit.wordpress.com/13093/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thereifixedit.wordpress.com/13093/"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godelicious/thereifixedit.wordpress.com/13093/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thereifixedit.wordpress.com/13093/"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/gostumble/thereifixedit.wordpress.com/13093/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thereifixedit.wordpress.com/13093/"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/godigg/thereifixedit.wordpress.com/13093/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thereifixedit.wordpress.com/13093/"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.wordpress.com/1.0/goreddit/thereifixedit.wordpress.com/13093/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thereifixedit.wordpress.com/13093/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thereifixedit.com&amp;amp;blog=9050238&amp;amp;post=13093&amp;amp;subd=thereifixedit&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;div&gt;
&lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/ThereIFixedIt?a=zKX9PFhPyi0:2Q-60wold08:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThereIFixedIt?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/ThereIFixedIt?a=zKX9PFhPyi0:2Q-60wold08:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThereIFixedIt?d=I9og5sOYxJI" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/ThereIFixedIt?a=zKX9PFhPyi0:2Q-60wold08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThereIFixedIt?i=zKX9PFhPyi0:2Q-60wold08:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/ThereIFixedIt?a=zKX9PFhPyi0:2Q-60wold08:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThereIFixedIt?i=zKX9PFhPyi0:2Q-60wold08:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/ThereIFixedIt?a=zKX9PFhPyi0:2Q-60wold08:ZC7T4KBF6Nw"&gt;&lt;img src="http://feeds.feedburner.com/~ff/ThereIFixedIt?d=ZC7T4KBF6Nw" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ThereIFixedIt/~4/zKX9PFhPyi0" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/OY0FxaUh2nE" height="1" width="1"/&gt;</description>
         <author>Cheezburger Network</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/75d0c0618b4c054f</guid>
         <pubDate>Thu, 05 Aug 2010 17:00:28 +0000</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/ThereIFixedIt/~3/zKX9PFhPyi0/</feedburner:origLink></item>
      <item>
         <title>Bionic Dick Cheney Technically Has No Pulse</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/mm0yJZjpKNY/dick-cheney-gains-new-lease-life-loses-pulse</link>
         <author>Clay Dillow</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/814f1d63452088be</guid>
         <pubDate>Mon, 19 Jul 2010 21:29:16 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/mm0yJZjpKNY" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.popsci.com/science/article/2010-07/dick-cheney-gains-new-lease-life-loses-pulse</feedburner:origLink></item>
      <item>
         <title>Are We Living Inside a Black Hole?</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/Ovap47l5M2E/we-might-be-living-black-hole-scientist-says</link>
         <author>Rebecca Boyle</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/d80cc1bb437e77f1</guid>
         <pubDate>Fri, 23 Jul 2010 15:53:37 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/Ovap47l5M2E" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.popsci.com/science/article/2010-07/we-might-be-living-black-hole-scientist-says</feedburner:origLink></item>
      <item>
         <title>What's Ahead In The Clouds?</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/6Du90UjUeJ8/</link>
         <author>Jack Loechner</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/298e8b713ed21fcc</guid>
         <pubDate>Wed, 14 Jul 2010 20:30:28 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/6Du90UjUeJ8" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.mediapost.com/publications/?fa=Articles.showArticle&amp;art_aid=131747</feedburner:origLink></item>
      <item>
         <title>Less.js Will Obsolete CSS</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/2j0swMRxb0A/</link>
         <description>&lt;p&gt;If you design websites you may have heard of interesting tools called CSS pre-processors. A couple of great ones are &lt;a rel="nofollow" target="_blank" href="http://lesscss.org"&gt;LESS&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://sass-lang.com"&gt;SASS&lt;/a&gt;. I helped &lt;a rel="nofollow" target="_blank" href="http://cloudhead.io"&gt;Alexis&lt;/a&gt;, the creator of LESS with the design of the language and built the public site.&lt;/p&gt;

&lt;p&gt;It’s a tool I wanted to use myself, and even though SASS already existed I didn’t feel like using a different syntax to CSS—I wanted something to augment CSS and make it more powerful, while still retaining the same look and feel. That’s exactly what LESS does. It extends CSS with things like variables, nested rules, mixins and operations to name a few.&lt;/p&gt;

&lt;p&gt;Here’s an example of LESS code to give you an idea of what it does:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@brand-color: #3879BD;

.rounded(@radius: 3px) {
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    border-radius: @radius;
}

#header {
    .rounded(5px);
    a {
        color: @brand-color;
        &amp;amp;:hover {
            color: #000;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Three features in use there. First of all I’m specifying a variable at the top called &lt;code&gt;@brand-color&lt;/code&gt;. I then re-use this color for a link. I make a class called &lt;code&gt;.rounded&lt;/code&gt; which I then use for the &lt;code&gt;#header&lt;/code&gt; div (the header will take on all the properties of the rounded class and use 5 pixels instead of 3). You can also see nested rules in use, which really help make the code more organized. Learn more about LESS over at the &lt;a rel="nofollow" target="_blank" href="http://lesscss.org"&gt;official site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;LESS was originally coded as a Ruby gem. No specific reason to use Ruby other than it’s a great language and the gem format is easy to use on *nix machines (Linux, OS X)—tools of choice for many web developers. You didn’t actually have to use Ruby or know any Ruby to use LESS to process your code, you just had to have it installed, but even so, this puts many people off who are not familiar with what Ruby gems are or how to use them. There’s now LESS implementations in other languages, including &lt;a rel="nofollow" target="_blank" href="http://leafo.net/lessphp/"&gt;PHP&lt;/a&gt; and &lt;a rel="nofollow" target="_blank" href="http://www.dotlesscss.com/"&gt;.NET&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Less.js&lt;/h3&gt;

&lt;p&gt;Very soon we’ll see the next evolution of LESS. The new change will be bigger than any previous implementation or update because LESS has now been re-implemented in JavaScript. What this means is you no longer need Ruby, ASP or PHP to use LESS, you just need a browser.&lt;/p&gt;

&lt;p&gt;Less.js is a JavaScript implementation of LESS that’s run by your web browser. As any JavaScript, you include a link to the script in your HTML, and…that’s that. LESS is now going to process LESS code so instead of including a link to a CSS file, you’ll include a link directly to your LESS code. That’s right, no CSS pre-processing, LESS will handle it live.&lt;/p&gt;

&lt;p&gt;Wouldn’t live processing lag? Not really. Two reasons for this. One: Less.js has been written from the ground up for great performance, so even browsers with poor JavaScript implementation should still run it very well (Less.js is about 40 times faster than the Ruby implementation—so suffice to say it’s &lt;em&gt;a lot&lt;/em&gt; faster.). Two: On modern browsers that support HTML5, Less.js will cache the generated CSS on local storage, making subsequent page loads as fast as pure CSS.&lt;/p&gt;

&lt;p&gt;There are other cool features built into Less.js. For example, there’s a “watch” feature available in development mode. This feature will refresh the CSS on your page whenever your &lt;code&gt;.less&lt;/code&gt; file is saved with new changes. The best thing is, it won’t refresh the whole page, just the right bits of CSS, live.&lt;/p&gt;

&lt;p&gt;I’ve been using Less.js on my latest redesign of &lt;a rel="nofollow" target="_blank" href="http://itsworkable.com"&gt;Workable&lt;/a&gt; that I’ll deploy for production soon, and it’s been a fantastic experience because all of the above really does work.&lt;/p&gt;

&lt;h3&gt;Sneak preview&lt;/h3&gt;

&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://cloudhead.io"&gt;Alexis&lt;/a&gt; hasn’t officially released Less.js yet, but…the repository has been up on Github for a while and you’re free to grab the latest release and try it for yourself (and he’s given me permission to blog about it). I think you should, because Less.js really is a big deal. &lt;a rel="nofollow" target="_blank" href="http://github.com/cloudhead/less.js"&gt;Here’s the repository.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that Less.js is actually a &lt;a rel="nofollow" target="_blank" href="http://nodejs.org/"&gt;Node.js&lt;/a&gt; implementation as well as the client-side browser based one, so most of the files in the repository are irrelevant if you just want to use the browser one. What you need is either &lt;a rel="nofollow" target="_blank" href="http://github.com/cloudhead/less.js/tree/master/dist/"&gt;one of these&lt;/a&gt; (the min file is minified for smaller file size)&lt;/p&gt;

&lt;h3&gt;Try it now&lt;/h3&gt;

&lt;p&gt;That’s the Github repository, but there’s also a &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/lesscss/downloads/list"&gt;Google Code repository&lt;/a&gt; where you can get just the browser script. You can do something really simple and link to the file on Google’s server directly, so if you want to try out Less.js now include this in the head of your HTML code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&amp;quot;http://lesscss.googlecode.com/files/less-1.0.18.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now, to use LESS code, include the &lt;code&gt;.less&lt;/code&gt; file as you would your &lt;code&gt;.css&lt;/code&gt; but provide a &lt;code&gt;rel="stylesheet/less"&lt;/code&gt; property to tell the LESS compiler that it’s a LESS file. Include this &lt;em&gt;above&lt;/em&gt; the JavaScript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&amp;quot;stylesheet/less&amp;quot; href=&amp;quot;/stylesheets/main.less&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Just make sure the &lt;code&gt;href="/stylesheets/main.less"&lt;/code&gt; points to the location of you &lt;code&gt;.less&lt;/code&gt; file, and you’re good to go. Code your LESS and and it should magically render in your browser as if it were CSS.&lt;/p&gt;

&lt;p&gt;NOTE: Make sure to put the LESS include before the JavaScript. So putting it together should look like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;link rel=&amp;quot;stylesheet/less&amp;quot; href=&amp;quot;/stylesheets/main.less&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
&amp;lt;script src=&amp;quot;http://lesscss.googlecode.com/files/less-1.0.21.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It need not be said that Less.js development is ongoing and this is a very early release, which means you might just run into a bug or two. Having said this, my experience so far has been very, very positive, with no parsing errors at all. Also, if the compiler runs into any problems you’ll get an informative error message in your browser telling you where the problem in your code lies.&lt;/p&gt;

&lt;p&gt;This is very exciting stuff, so if you’re looking for a way to get your large stylesheets under control and make the CSS design process more effective you should definitely give LESS a shot.&lt;/p&gt;

&lt;p&gt;P.S. To use the live “watch” feature (which will auto-refresh the CSS whenever you save your LESS code), just drop this code into your template:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;
    less.env = &amp;quot;development&amp;quot;;
    less.watch();
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You may not even need the “development” line because the script should detect when you’re running on a local machine, but it didn’t do it in my particular case so I’m setting it manually. Another method to invoke watch is to append “#!watch” to the end of your URL.&lt;/p&gt;

&lt;p&gt;P.S.S. Less.js browser script currently won’t work if you’re using Chrome and the path to your page starts with “file:///” due to a known Chrome issue.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/2j0swMRxb0A" height="1" width="1"/&gt;</description>
         <author>Dmitry Fadeyev</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/107101bf655e5194</guid>
         <pubDate>Sat, 19 Jun 2010 00:00:00 +0000</pubDate>
      <feedburner:origLink>http://fadeyev.net/2010/06/19/lessjs-will-obsolete-css/</feedburner:origLink></item>
      <item>
         <title>NASA/JPL Launch DSLs in Scala</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/nviMuGb-eyc/6605</link>
         <author>bagwell</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/d8f274dcb60a50eb</guid>
         <pubDate>Sun, 20 Jun 2010 01:42:20 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/nviMuGb-eyc" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.scala-lang.org/node/6605</feedburner:origLink></item>
      <item>
         <title>Guardians "Open Platform" Uses Scala</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/GWYJlTvHyyQ/6508</link>
         <author>bagwell</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/cd8be281474a98d0</guid>
         <pubDate>Thu, 17 Jun 2010 02:00:39 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/GWYJlTvHyyQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.scala-lang.org/node/6508</feedburner:origLink></item>
      <item>
         <title>Every Sitcom Uses The Same Newspaper</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/4nTy_4kZc54/</link>
         <description>&lt;br&gt;&lt;p&gt;Wtf.&lt;/p&gt;
&lt;p&gt;&lt;img title="reusednewspaper" src="http://www.forkparty.com/wp-content/uploads/2010/06/reusednewspaper.jpg" alt="" width="500" height="1121"&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/4nTy_4kZc54" height="1" width="1"/&gt;</description>
         <author>GOB BLUTH</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/50e0f1db17536ba0</guid>
         <pubDate>Sat, 05 Jun 2010 17:28:46 +0000</pubDate>
      <feedburner:origLink>http://www.forkparty.com/every-sitcom-uses-the-same-newspaper/</feedburner:origLink></item>
      <item>
         <title>DIY Sun Tracking Solar Panels</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/-5jVpdaDwRs/</link>
         <description>&lt;p&gt;&lt;img title="Solar-PV-tracker" src="http://hacknmod.com/wp-content/uploads/2010/05/Solar-PV-tracker.jpg" alt="" width="500" height="375"&gt;&lt;/p&gt;
&lt;p&gt;For a photovoltaic solar panel, following the sun’s path across the sky raises efficiency by 30-50%.  This &lt;a rel="nofollow" target="_blank" href="http://www.instructables.com/id/Solar-PV-tracker/"&gt;DIY sun tracker&lt;/a&gt; is the latest addition to our &lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/topics/diy-free-energy/"&gt;DIY Free Energy projects&lt;/a&gt; and uses a combination of a sensor and linear actuator to track the movement of the sun.&lt;/p&gt;
&lt;p&gt;The solar panel sits on a wooden frame which is mounted on two bicycle wheels.  A sensor tracks the path of the sun and sends the signal to the liner actuator that starts moving the photovoltaic frame with the help of the wheels.&lt;/p&gt;
&lt;p&gt;&lt;img title="Finishing-it-up" src="http://hacknmod.com/wp-content/uploads/2010/05/Finishing-it-up.jpg" alt="" width="420" height="560"&gt;&lt;/p&gt;
&lt;p&gt;After sourcing the solar panels, the solar PV tracker is not difficult to build.  12 Volt linear actuators are available on &lt;a rel="nofollow" target="_blank" href="http://rover.ebay.com/rover/1/711-53200-19255-0/1?ff3=4&amp;amp;pub=5574634718&amp;amp;toolid=10001&amp;amp;campid=5336655552&amp;amp;customid=&amp;amp;mpre=http%3A%2F%2Fshop.ebay.com%2F%3F_from%3DR40%26_trksid%3Dm570%26_nkw%3Dlinear%2Bactuator%2B%26_sacat%3DSee-All-Categories"&gt;eBay&lt;/a&gt;. Then, just salvage a pair of strong wheels and all that’s left is the wooden frame.&lt;/p&gt;
&lt;h3&gt;Popular Solar Energy Projects:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/hack/how-to-diy-solar-and-wind-energy-tutorial/"&gt;How to: DIY Solar and Wind Energy Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/hack/solar-energy-setup-tutorial-free-electricity/"&gt;Solar Energy Setup Tutorial = Free Electricity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/hack/diy-solar-powered-beam-robot-miniball/"&gt;DIY Solar Powered Beam Robot Miniball&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://hacknmod.com/?ak_action=api_record_view&amp;amp;id=9779&amp;amp;type=feed" alt=""&gt;&lt;div&gt;
&lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=roSLXBUwnDw:HY-820A3pz8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?i=roSLXBUwnDw:HY-820A3pz8:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=roSLXBUwnDw:HY-820A3pz8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?d=dnMXMwOfBR0" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=roSLXBUwnDw:HY-820A3pz8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?d=7Q72WNTAKBA" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=roSLXBUwnDw:HY-820A3pz8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=roSLXBUwnDw:HY-820A3pz8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?i=roSLXBUwnDw:HY-820A3pz8:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/hacknmod/qjUG/~4/roSLXBUwnDw" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/-5jVpdaDwRs" height="1" width="1"/&gt;</description>
         <author>Saikat</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/517788d6b11489d4</guid>
         <pubDate>Mon, 24 May 2010 09:32:02 +0000</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/hacknmod/qjUG/~3/roSLXBUwnDw/</feedburner:origLink></item>
      <item>
         <title>A periodic table of visualization methods</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/jCCnrhPN4Pw/periodic-table-visualization-methods</link>
         <author>jordi</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/b64be1d5fd12c4b1</guid>
         <pubDate>Wed, 02 Jun 2010 09:20:13 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/jCCnrhPN4Pw" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/ModelingLanguages-blog/~3/qPQ6yVEmzeA/periodic-table-visualization-methods</feedburner:origLink></item>
      <item>
         <title>ConceptDraw MindWave mind map tool brings important visual element to Google Wave</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/mGWodkfpBms/</link>
         <description>&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://mindmappingsoftwareblog.com/mmsb/wp-content/uploads/2010/03/MindWave-300px.jpg"&gt;&lt;img style="margin-left:8px;margin-right:8px;" title="MindWave-300px" src="http://mindmappingsoftwareblog.com/mmsb/wp-content/uploads/2010/03/MindWave-300px.jpg" alt="ConceptDraw MindWave, Google Wave" width="300" height="186"&gt;&lt;/a&gt;CS Odessa, the developer of ConceptDraw MINDMAP, recently announced the availability of a free extension for Google Wave, &lt;a rel="nofollow" target="_blank" href="http://www.conceptdraw.com/en/mindwave/conceptdraw_mindwave.php"&gt;ConceptDraw MindWave&lt;/a&gt;, that enables users to create visual maps within Google’s exciting new collaborative environment. This neat tool brings an important visual element to collaboration within Google Wave, which is almost 100% text based.&lt;/p&gt;
&lt;p&gt;Using MindWave, you can easily insert a new map into your wave, invite others to collaborate with you and then co-edit it in real time.That means you can use it as a tool for planning simple projects and for small group brainstorming.&lt;/p&gt;
&lt;p&gt;MindWave supports Wave’s playback function, which enables you to see how a mind map was constructed, and who added what content to it. This is ideal for new users, who may not be familiar with mind mapping.&lt;/p&gt;
&lt;p&gt;Mind maps built within MindWave can be downloaded and developed further using CS Odessa’s ConceptDraw MINDMAP software for Windows and Mac OS X.&lt;/p&gt;
&lt;p&gt;Thankfully, MindWave supports a number of keyboard shortcuts, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shift+Enter to add a new topic.&lt;/li&gt;
&lt;li&gt;Double-click on a topic adds a sub-topic.&lt;/li&gt;
&lt;li&gt;Paste a word or phrase to add a new topic.&lt;/li&gt;
&lt;li&gt;Paste a column of words to add many topics at once.&lt;/li&gt;
&lt;li&gt;Drag and drop organizes your mind map.&lt;/li&gt;
&lt;li&gt;Press Delete or Backspace to remove a selected topic.&lt;/li&gt;
&lt;li&gt;Arrow keys navigate you through the map.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I added MindWave to a wave in my Google Wave account, and found that it installed easily. Creating a new map and adding topics to it was also a breeze; it behaved exactly as I would expect it to. The shortcut keys are non-standard, but then again you’ve got to remember that you’re working on an extension that has to play well within another, larger application. So CS Odessa had to select hot keys that don’t interfere with Wave’s functionality.&lt;/p&gt;
&lt;p&gt;The only limitation I foresee with MindWave is that the maps you create within it must, of necessity, be fairly simple. You’re constrained in terms of space to only one-third of the browser – because the other two panels are used by Wave for managing waves, folders and users.&lt;/p&gt;
&lt;p&gt;Still, MindWave is a great little applet that is stable and intuitive to use. Kudos to CS Odessa for taking the lead and producing this neat little application to support one of the web’s most compelling new collaboration tools.&lt;/p&gt;
&lt;img src="http://mindmappingsoftwareblog.com/mmsb/?ak_action=api_record_view&amp;amp;id=3053&amp;amp;type=feed" alt=""&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/mGWodkfpBms" height="1" width="1"/&gt;</description>
         <author>Chuck Frey</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/ae336a373c29499e</guid>
         <pubDate>Thu, 04 Mar 2010 19:09:22 +0000</pubDate>
      <feedburner:origLink>http://mindmappingsoftwareblog.com/conceptdraw-mindwave/</feedburner:origLink></item>
      <item>
         <title>TEDTalks : Gary Lauder's new traffic sign: Take Turns - Gary Lauder (2010)</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/l1ezmNjiyOw/789</link>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/4e9a5c4e6efdf9d2</guid>
         <pubDate>Tue, 09 Mar 2010 14:39:00 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/l1ezmNjiyOw" height="1" width="1"/&gt;</description><feedburner:origLink>http://feedproxy.google.com/~r/TEDTalks_video/~3/-wmLCf3y4Mw/789</feedburner:origLink></item>
      <item>
         <title>Absolutely Ingenious Wooden Rube Goldberg Machine</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/Tom9KnqyUd4/</link>
         <description>&lt;p&gt;&lt;center&gt;&lt;/center&gt;&lt;/p&gt;
&lt;p&gt;The Marble Lifting Machine would probably impress even Leonardo da Vinci. Mere words cannot describe the play of physics and craft that goes into this machine which has a single task â€“ take a steel marble and transport it to the top of the wooden structure, then to the bottom, and repeat for 24 hours &lt;span style="text-decoration:underline;"&gt;without any electronic parts&lt;/span&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Don’t Miss:&lt;/strong&gt; &lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/hack/top-7-incredible-rube-goldberg-machines/"&gt;Top 7 Incredible Rube Goldberg Machines&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That’s right, the only power is provided by gravity. The initial impulse is provided by a system of weights and counterweights. A complex network of wooden channels, lifting devices, pulleys, and trapdoors keep the marble in almost perpetual motion. The smooth flow of the marble towards the top is kept up by a series of governors and escapements.&lt;/p&gt;
&lt;p&gt;&lt;img title="Machine01" src="http://hacknmod.com/wp-content/uploads/2010/03/Machine01.jpg" alt="" width="579" height="443"&gt;&lt;/p&gt;
&lt;p&gt;Itâ€™s quite a journey for the marble up and down the 6 feet tall wooden device (a complete circuit takes about 24 hours). The marble makes 1300 trips from the bottom to the summit and back again and travels an equivalent distance of 12 miles. Â Â The video is not only about the motion but also how the sub-assemblies of the Marble Lifting Machine are put together. It’s science wrapped up in art.&lt;/p&gt;
&lt;h3&gt;Top Rube Goldberg Projects:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/hack/10-minute-pyromanic-rube-goldberg-machine/"&gt;PyroManic Rube Goldberg Machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://hacknmod.com/hack/top-7-incredible-rube-goldberg-machines/"&gt;Top 7 Incredible Rube Goldberg Machines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/hacknmod/qjUG"&gt;Subscribe for more superb projects!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://hacknmod.com/?ak_action=api_record_view&amp;amp;id=8213&amp;amp;type=feed" alt=""&gt;&lt;div&gt;
&lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=KYkZQDGb1wo:dKMYW489FE8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?i=KYkZQDGb1wo:dKMYW489FE8:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=KYkZQDGb1wo:dKMYW489FE8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?d=dnMXMwOfBR0" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=KYkZQDGb1wo:dKMYW489FE8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?d=7Q72WNTAKBA" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=KYkZQDGb1wo:dKMYW489FE8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/hacknmod/qjUG?a=KYkZQDGb1wo:dKMYW489FE8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/hacknmod/qjUG?i=KYkZQDGb1wo:dKMYW489FE8:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/hacknmod/qjUG/~4/KYkZQDGb1wo" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/Tom9KnqyUd4" height="1" width="1"/&gt;</description>
         <author>Saikat</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/9ddbb6b7ff1a5931</guid>
         <pubDate>Sun, 14 Mar 2010 00:00:53 +0000</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/hacknmod/qjUG/~3/KYkZQDGb1wo/</feedburner:origLink></item>
      <item>
         <title>The Enso zenPad MID banks on being the cheap Android tablet</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/sXmIUgIMJoI/</link>
         <description>&lt;blockquote&gt;Shared by  Razie 
&lt;br&gt;
Cool - apparently we can actually by this now!&lt;/blockquote&gt;
Here’s another firm contender in the small tablet market. The Enso zenPad comes in with a 5-inch 800 x 480 resolution touchscreen powered by a Samsung 6410 667MHz processor. It also starts at an affordable $155 and is currently shipping.
This isn’t the first we’ve heard of the Enso zenPad, but it has had a name [...]&lt;div&gt;
&lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?d=dnMXMwOfBR0" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?i=MUXj8qM7ha8:pMbqVH6iHro:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?d=7Q72WNTAKBA" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?i=MUXj8qM7ha8:pMbqVH6iHro:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/BestTabletReview?a=MUXj8qM7ha8:pMbqVH6iHro:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/BestTabletReview?i=MUXj8qM7ha8:pMbqVH6iHro:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/sXmIUgIMJoI" height="1" width="1"/&gt;</description>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/5a21e7f714ac42ae</guid>
         <pubDate>Tue, 23 Mar 2010 01:25:16 +0000</pubDate>
      <feedburner:origLink>http://feedproxy.google.com/~r/BestTabletReview/~3/MUXj8qM7ha8/</feedburner:origLink></item>
      <item>
         <title>Robert Fischer Finally Admits that Scala is Functional</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/wSdVfDboqf4/robert-fischer-finally-admits-that.html</link>
         <author>James Iry</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/fab63fbaa0ae1e89</guid>
         <pubDate>Mon, 08 Mar 2010 15:40:00 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/wSdVfDboqf4" height="1" width="1"/&gt;</description><feedburner:origLink>http://james-iry.blogspot.com/2010/03/robert-fischer-finally-admits-that.html</feedburner:origLink></item>
      <item>
         <title>Kojo - Scala for Kids</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/2e3oKVNNw80/5624</link>
         <description>&lt;blockquote&gt;Shared by  Razie 
&lt;br&gt;
booya - kudos, been looking for this kind of stuff for  while, having it in scall is awsome&lt;/blockquote&gt;
&lt;div&gt;&lt;p&gt;Kids love computers and many would love to learn how to program them too. Lalit Pant, volunteer Math teacher at &lt;a rel="nofollow" target="_blank" href="http://www.himjyotischool.org/"&gt;Himjyoti School for under-privileged girls&lt;/a&gt; in Dehradun, developed Kojo in his 'free' time. &lt;a rel="nofollow" target="_blank" href="http://www.kogics.net/sf:kojo"&gt;Kojo&lt;/a&gt; is a very polished, easy to install, cool IDE in which children, (or even grown ups) can learn to program using Scala. Lots of examples, a turtle to drive, good documentation and interactive geometry for those budding mathematicians. If you have kids then Kojo could be a fun experience to share with them. On the other hand if you have some 'free' time Lalit would welcome help to develop Kojo, an Open Source project, further.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/2e3oKVNNw80" height="1" width="1"/&gt;</description>
         <author>(author unknown)</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/1992d06b9e65ffb5</guid>
         <pubDate>Sun, 21 Mar 2010 15:08:43 +0000</pubDate>
      <feedburner:origLink>http://www.scala-lang.org/node/5624</feedburner:origLink></item>
      <item>
         <title>Distributed Version Control is here to stay, baby</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/43nlwpJ9S2k/17.html</link>
         <author>Joel Spolsky</author>
         <guid isPermaLink="false">tag:google.com,2005:reader/item/6e19ca414824dac4</guid>
         <pubDate>Thu, 18 Mar 2010 00:25:54 +0000</pubDate>
      <description>&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/43nlwpJ9S2k" height="1" width="1"/&gt;</description><feedburner:origLink>http://www.joelonsoftware.com/items/2010/03/17.html</feedburner:origLink></item>
      <item>
         <title>Killing an annoying warning</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/bQP_4NED3dI/killing-annoying-warning.html</link>
         <description>The most annoying warning ever has been haunting me for a while.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    [javac] /home/razvanc/workspace7u6/razxml/src/razie/base/data/RiXmlUtils.java:160: warning: com.sun.org.apache.xpath.internal.objects.XObject is Sun proprietary API and may be removed in a future release&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I refuse to include and move around large unnecessary libraries to deal with XML and XPATH just because Sun considers themselves the center of the universe and their internal libraries somehow more important then mine. In short, they figured there should be no way to remove this warning, although, in this case, they copied code from apache into their own libraries.&lt;br /&gt;&lt;br /&gt;Well, the solution is rather simple. Most likely everyone has specific XML wrappers. Just put them in their own project, disable the java/scala builders.  Then, build it manually, create a jar file and check it in.&lt;br /&gt;&lt;br /&gt;Then, in all the other projects, use this jar directly. Since the jar is already compiled, the annoying warning is no more.&lt;br /&gt;&lt;br /&gt;See for instance my xml utilities, at &lt;a rel="nofollow" target="_blank" href="http://github.com/razie/razxml"&gt;http://github.com/razie/razxml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What's more, I don't actually use the XML stuff directly. I wrapped it all in pretty much one single class, using XPATH for access. It's simple, fast enough and makes for very simple code: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Reg.doc(MediaConfig.MEDIA_CONFIG).xpa(&lt;br /&gt;  "/config/storage/host[@name='" + Agents.me().name + "']/media/@localdir"&lt;br /&gt;)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;For all xml data access, you should limit yourself to the xpe/xpl/xpa methods described in an earlier post (&lt;a rel="nofollow" target="_blank" href="http://blog.homecloud.ca/2010/02/one-xpath-to-rule-them-all.html"&gt;http://blog.homecloud.ca/2010/02/one-xpath-to-rule-them-all.html&lt;/a&gt;). So, use something like this instead: &lt;a rel="nofollow" target="_blank" href="http://github.com/razie/razxml/blob/master/src/razie/base/data/XmlDoc.java"&gt;http://github.com/razie/razxml/blob/master/src/razie/base/data/XmlDoc.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers.&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-3997905166229052297?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/bQP_4NED3dI" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-3997905166229052297</guid>
         <pubDate>Mon, 29 Mar 2010 00:23:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2010/03/killing-annoying-warning.html</feedburner:origLink></item>
      <item>
         <title>The Option monad pattern thing</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/BoUiJ4S2b6w/option-monad-pattern-thing.html</link>
         <description>Having options is cool...even scala's Option[A]... :)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One way to use Option is plain:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;code&gt;&lt;div&gt;addressMap.get("John") match {&lt;/div&gt;&lt;div&gt;   case Some(addr) =&amp;gt; popupMap (addr)&lt;/div&gt;&lt;div&gt;   case None =&amp;gt; logError(...)&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;or "java style" (synonym with "plain ugly"):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;div&gt;x = addressMap.get("John").getOrElse (null)&lt;/div&gt;&lt;div&gt;if (x != null) {&lt;/div&gt;&lt;div&gt;   popupMap (x)&lt;/div&gt;&lt;div&gt;} else {&lt;/div&gt;&lt;div&gt;   logError(...)&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;As you use scala more, you understand why &lt;a rel="nofollow" target="_blank" href="http://james-iry.blogspot.com/2007/09/monads-are-elephants-part-1.html"&gt;monads are elephants&lt;/a&gt; and start doing it nice:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;div&gt;addressMap.foreach (popupMap(_))&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;div&gt;addressMap.map (_.city)&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;And then you start to understand it as a pattern, basically you understand there's a range of problems were options apply. Say you create a small scripting framework (the same applies to say a command pattern framework). A script's execution may return successfully and with a value, or give a syntax error or a bunch of other &lt;i&gt;options&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;div&gt;// the result of running a smart script&lt;/div&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;div&gt;  class RSResult { &lt;/div&gt;&lt;div&gt;  def foreach (f:Any=&amp;gt;Unit) {}&lt;/div&gt;&lt;div&gt;  def map (f:Any=&amp;gt;RSResult) : RSResult = RSUnsupported &lt;/div&gt;&lt;div&gt;  def getOrElse (f: =&amp;gt; Any) :Any = f&lt;/div&gt;&lt;div&gt;  def jgetOrElse (f:Any) :Any = getOrElse(f)&lt;/div&gt;&lt;div&gt;     }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  case class RSSucc (res:Any) extends RSResult { &lt;/div&gt;&lt;div&gt;  override def foreach (f:Any=&amp;gt;Unit) { f(res) }&lt;/div&gt;&lt;div&gt;  override def map (f:Any=&amp;gt;RSResult): RSResult = f(res)&lt;/div&gt;&lt;div&gt;  override def getOrElse (f: =&amp;gt; Any) : Any = res&lt;/div&gt;&lt;div&gt;     }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  case class RSError (err:String) extends RSResult&lt;/div&gt;&lt;div&gt;  object RSIncomplete  extends RSResult   // expression is incomplete...&lt;/div&gt;&lt;div&gt;  object RSUnsupported extends RSResult // interactive mode unsupported&lt;/div&gt;&lt;div&gt;  object RSSuccNoValue extends RSResult // successful, but no value returned&lt;/div&gt;&lt;/code&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;And then, of course, the methods returning these:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;code&gt;&lt;/code&gt;&lt;/div&gt;&lt;code&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/code&gt;&lt;div&gt;I used Any instead of [A] for simplicity, but there you have it.  The Option monad pattern thing. Pretty cool!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-5184369829578346258?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/BoUiJ4S2b6w" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-5184369829578346258</guid>
         <pubDate>Sun, 14 Mar 2010 01:00:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2010/03/option-monad-pattern-thing.html</feedburner:origLink></item>
      <item>
         <title>Scripster - interactive scala REPL using telnet, http etc</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/IhRaBKpYT-c/scripster-interactive-scala-repl-using.html</link>
         <description>As mentioned before, I think that all apps must alllow scripted/programatic access to their objects.&lt;br /&gt;&lt;br /&gt;I created a simple interactive gate to acces the scala REPL in any scala process. It only uses one port and supports telnet, http and swing:&lt;br /&gt;&lt;br /&gt;&lt;a rel="nofollow" target="_blank" href="http://1.bp.blogspot.com/_AgcP7L_T8ZQ/S4xx55u3NyI/AAAAAAAAAFc/4zZX4Kq19S8/s1600-h/scalap.png"&gt;&lt;img style="display:block;margin:0px auto 10px;text-align:center;cursor:pointer;cursor:hand;width:400px;height:263px;" src="http://1.bp.blogspot.com/_AgcP7L_T8ZQ/S4xx55u3NyI/AAAAAAAAAFc/4zZX4Kq19S8/s400/scalap.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5443851289147946786"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The graphics are based on my &lt;a rel="nofollow" target="_blank" href="http://wiki.github.com/razie/20widgets/widgets"&gt;20widgets&lt;/a&gt; project, with the addition of a ScriptPad widget.&lt;br /&gt;&lt;br /&gt;Content assist is only available in the telnet version (sic!). I will work to find some nice syntax-colored controls for the web version. Switch to character mode ("mode character" on ubuntu or default on windows) and use TAB to see a list of options. Right now it's a demo only, I need to find the parser's APIs to get the real content assist options ;)&lt;br /&gt;&lt;br /&gt;You can download the single scripster-dist.jar file from my razpub project download, at &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/razpub/"&gt;http://code.google.com/p/razpub/&lt;/a&gt; and run the example with this command line (replace /host/bin/scala with your $SCALA_HOME) :&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;java -classpath ./scripster-dist.jar:/host/bin/scala/lib/scala-library.jar:/host/bin/scala/lib/scala-compiler.jar:/host/bin/scala/lib/scala-swing.jar razie.scripster.JScalapSwing&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;To use it in your process, put these jars in your classpath and use this:&lt;br /&gt;&lt;blockquote&gt;razie.scripster.Scripster.create(4445)&lt;/blockquote&gt; where 4445 is the port you want to use, see the razie.scripster.MainScripster for an example. To enable the swing version, use the swing jars as well and see the razie.scripster.MainSwingScripster class for an example.&lt;br /&gt;&lt;br /&gt;For further tweaking, look at the code yourself, at &lt;a rel="nofollow" target="_blank" href="http://github.com/razie/scripster/tree/master/src/razie/scripster/"&gt;http://github.com/razie/scripster/tree/master/src/razie/scripster/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to keep in touch with the evolution of scripster or my other related endeavours, subscribe to the &lt;a rel="nofollow" target="_blank" href="http://feeds.razie.com/RazvanTech"&gt;RSS feed&lt;/a&gt; or &lt;a rel="nofollow" target="_blank" href="http://twitter.com/razie"&gt;twitter/razie&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Scripster's main page, kept up-to-date, is at &lt;a rel="nofollow" target="_blank" href="http://wiki.homecloud.ca/scripster"&gt;http://wiki.homecloud.ca/scripster&lt;/a&gt;. There's also an online live demo at &lt;a rel="nofollow" target="_blank" href="http://scripster.codewitter.com"&gt;http://scripster.codewitter.com&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Enjoy!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-3974074058967684811?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/IhRaBKpYT-c" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-3974074058967684811</guid>
         <pubDate>Tue, 02 Mar 2010 01:59:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://1.bp.blogspot.com/_AgcP7L_T8ZQ/S4xx55u3NyI/AAAAAAAAAFc/4zZX4Kq19S8/s72-c/scalap.png" width="72" />
      <feedburner:origLink>http://blog.homecloud.ca/2010/03/scripster-interactive-scala-repl-using.html</feedburner:origLink></item>
      <item>
         <title>One XPath to rule them all!</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/bUt0DNiEQwk/one-xpath-to-rule-them-all.html</link>
         <description>&lt;div&gt;ABSTRACT: there's a million ways to access (data, objects, tables etc) these days and probably new ones are created every milisecond. What if we can figure out one that can be used anywhere?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Think about it!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;/Universe/Planets/Planet[@name=='earth']/@position&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;XPath was created as a natural way to address elements in an XML document. One specifies the path - starting from the root node - to the element you are addressing. Conditions help you select the right nodes from many (lists) and you can address nodes or their attributes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Extending it to addressing trees is strait-forward, so we can apply the same paradigm to any tree-structure, like Java beans...see for instance this Apache library: &lt;a rel="nofollow" target="_blank" href="http://commons.apache.org/jxpath/"&gt;http://commons.apache.org/jxpath/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Come to think about it, all direct acyclical graphs fit in the same category...of course, with small differences: selecting an edge from among many possible types and lack of a root...so, some extensions are in order:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;/Person[@name='John']/{hasFriends}Person&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What hapens here is that the node of type Person that meets the criteria was selected as the start node and then the graph walk begins. From the many relationships tying humans together, the ones of type "hasFriends" are followed and not "hasChildren". &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Yeah, you got it - even cycles are handled this way simply because as the path is walked, it reaches an end...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And... yeah, you got it again: UML domain model of classes with associations...it can describe any model you may use internally or present to clients...so we can handle pretty much any domain model described in an UML class diagram.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I found myself needing four basic operations: &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;xpe  : T            - /** find one element */&lt;/li&gt;&lt;li&gt;xpl  : List[T]      - /** find a list of elements */&lt;/li&gt;&lt;li&gt;xpa  : String       - /** find one attribute */&lt;/li&gt;&lt;li&gt;xpla : List[String] - /** find a list of attributes */&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For the sake of being concise, I will represent this new "data access interface"as either of the versions below (with explicit type and start node or implicit):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;val me = XP[Person] xpe ("/Person[@areGroovy=='yeah, baby!']") from john&lt;/div&gt;&lt;div&gt;val minime = xpe ("/Person[@areGroovy=='yeah, baby!']")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, why would this be useful?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Frankly, I'm growing old(er) and tired of all the non-sensical APIs that pop-up all the time everywhere: My application is unique! My domain model is complex! Everything could be an Object, but so what? I'm smarter! I know better!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My answer is: nope, your application's domain model is a class diagram and your actual objects thus form a graph. I don't need you to inven new ways to interact with your objects, over a million protocols and a million forms, when we can unify it all.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's a very simple pattern. All it requires is that users understand basic modelling and the application's domain. The same expressions would be used by everyone...if not, at least the same pattern. No more gazillion interfaces and gazillion models.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Think about communication. Can be done in 2 ways:&lt;/div&gt;&lt;div&gt; 1) blah blah blah can blah blah when blah blah and then some more blah blah&lt;/div&gt;&lt;div&gt; 2) UML&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You give me your domain model and, since you implement this simple no non-sense path-based model access, that's all I need to know. What you should focus on is documenting what the actual objects in your model: what they mean and what I can do with them once I have them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This also enables generic graphical software creation. All I need is to have your domain model and then I can use a generic path composition tool (pick a node from a tree if you want).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It interactively explores the domain model, picking elements on the way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my integration work, I would love it if I didn't have to waste time writing stupidifying code over a miriad protocols just to get to what I needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're wondering how exactly the data should be accessed, we'll cover that in one of the next posts on this subject, in the mean time, take JOSH to heart: JSON, OSGI, Scala, Http...thank you, Gray Lens Man!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enough for now - will continue soon...if you're interested and impatient, you can play with my prototype at &lt;a rel="nofollow" target="_blank" href="http://github.com/razie/razbase/blob/master/src/razie/XP.scala"&gt;http://github.com/razie/razbase/blob/master/src/razie/XP.scala&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-4385896714738405748?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/bUt0DNiEQwk" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-4385896714738405748</guid>
         <pubDate>Sat, 06 Feb 2010 17:32:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2010/02/one-xpath-to-rule-them-all.html</feedburner:origLink></item>
      <item>
         <title>Counting the lines of code in a project</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/mT9oAYj2rAQ/counting-lines-of-code-in-project.html</link>
         <description>cd ~/src&lt;br /&gt;find . -name "*.java" -exec wc -l {} &amp;#92;; | awk '{ SUM += $1} END { print SUM }'&lt;br /&gt;&lt;br /&gt;this is cool...&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-1668700720393618477?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/mT9oAYj2rAQ" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-1668700720393618477</guid>
         <pubDate>Tue, 15 Dec 2009 21:56:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2009/12/counting-lines-of-code-in-project.html</feedburner:origLink></item>
      <item>
         <title>One Person</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/TX_tLV6_fuk/one-person.html</link>
         <description>Abstract: You are one person, using multiple devices - why shouldn't your stuff follow YOU rather than the device? Since we don't like depending on a 3rd party, the "home" cloud is the answer?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--------- Issue&lt;br /&gt;&lt;br /&gt;Most programs today are isolated islands of functionality. The Web 2.0 transforms that, allowing you to mesh together pieces of functionality and information. The same is not true on personal computing platforms i.e. your laptop.&lt;br /&gt;&lt;br /&gt;The bookmarks you store on your laptop can't be accessed when you're on the desktop at home and vice-versa. Same for your notes and pretty much anything, unless you manually copy them etc.&lt;br /&gt;&lt;br /&gt;Option 1: store information on the web (centralised location). The one benefit of this is the ability to use that information from anywhere and any device. The drawbacks include big-brother and relying on a 3rd party for availability (including backup etc). Of course, the need to be online...although smart solutions can use local caches.&lt;br /&gt;&lt;br /&gt;The big brother issue is getting worse. As much as you trust ALL levels of government of ALL countries that may have a claim on you or your property AND all their agencies, there are more and more corporations that mine all kinds of data about your person, for different reasons. Some as benign as offering you a new credit card and some as bad as credit recovery, setting insurance premiums etc. Let's not forget identity theft.&lt;br /&gt;&lt;br /&gt;Option 2: use a home server. Basically, almost everyone has by now a server at home, which is constantly connected to the big Cloud, whether you're downloading movies or host your own blog. Why not use that instead of a 3rd party, to serve other stuff.&lt;br /&gt;&lt;br /&gt;There are many a solutions to host your own stuff and access/share from/with the world. There's lots of software to serve security camera feeds, TV programs from your home, the Windows Home Server etc...the trend is already in place.&lt;br /&gt;&lt;br /&gt;Having resolved (somewhat) the big brother and 3rd party dependency problem, there's still the issue of needing to be online.&lt;br /&gt;&lt;br /&gt;Option 3: fully distributed and synchronised personal cloud. Store information locally, on the device that creates it (like on the work desktop where you save a favourite) and synchronise all devices (peer-to-peer or properly distributed solution). The only drawback is lack of on-demand availability of the information from other devices, until the sync occurs. This can be solved however by connecting your own PC to the net...or combining with option 1 or rather 2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------- Vision&lt;br /&gt;&lt;br /&gt;The vision is that of you and your information following you. In fact it's not following you...it's just "there" for you to use. Whatever computer in your "home" cloud you use, your information is there.&lt;br /&gt;I mean, will you upload ALL your favourites on facebook, just so you have them available in the living room, when you get home? I don't think so!&lt;br /&gt;&lt;br /&gt;The solution is the logical conclusion of the same debate of distributed vs. centralised that's been raging for the past few decades. All those "in the know" know that it's a wave function. Now we may be heading towards the climax of centralised internet based clouds, but, as more PERSONAL processing power becomes more online, split between more types of personal devices and connected, the trend in the other way is just a matter of time...wave, right?&lt;br /&gt;&lt;br /&gt;So, I dream of many agents, running on many personal devices, connected in your "personal" or "home" cloud, sharing all kinds of information and cooperating.&lt;br /&gt;&lt;br /&gt;So, when you mark a "favourite" on your work desktop, it automatically gets replicated on your laptop, your home desktop (the cloud's gateway) and all the computers in the house, including the one in the living-room. There's nothing left to do but, when you get home, sit down and enjoy it on the big screen!&lt;br /&gt;&lt;br /&gt;No 3rd party knows you enjoy that hardcore woodworking show or that you're trying to fix the toilet seat, no insurance company can mine that you once watched 3 illegal races on youtube etc...all usually available on your facebook or whathaveyou.&lt;br /&gt;&lt;br /&gt;-------------- The social aspect&lt;br /&gt;&lt;br /&gt;Today, no application is complete without considering the social aspect. You could obviously push some of your favourites to facebook, or share with friends in "friend" clouds.&lt;br /&gt;&lt;br /&gt;-------------- Flexibility, customisation&lt;br /&gt;&lt;br /&gt;Probably the biggest gain from a "central" cloud, like gmail etc is flexibility and customisability. Gmail is gmail is gmail. That's exactly what it does and, while you may change it's fonts and even access it remotely via an IMAP or http API (thank you, Google) that's still exactly what it does.&lt;br /&gt;&lt;br /&gt;A personal cloud, though, can be customised. You decide what it does and how it does it.&lt;br /&gt;&lt;br /&gt;-------------- try it&lt;br /&gt;&lt;br /&gt;If you want to play with such an agent, try a preview of mine, at &lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/downloads"&gt;http://razpub.googlecode.com/downloads&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Read more about it at &lt;a rel="nofollow" target="_blank" href="http://wiki.homecloud.ca"&gt;http://wiki.homecloud.ca&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can even try the remote favourites sharing prototype...follow this link after you downloaded, installed it and started it on several computers: http://localhost:4444/mutant/capture.html - After capturing, go to another computer in your home cloud and see the links at: http://localhost:4444/mutant/asset/Link&lt;br /&gt;&lt;br /&gt;This is written as of version 0.x so the links may change - the use case however will be maintained up-to-date in the wiki, at &lt;a rel="nofollow" target="_blank" href="http://wiki.homecloud.ca/savedlink"&gt;http://wiki.homecloud.ca/savedlink&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-7834532526134423886?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/TX_tLV6_fuk" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-7834532526134423886</guid>
         <pubDate>Tue, 03 Nov 2009 17:54:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2009/11/one-person.html</feedburner:origLink></item>
      <item>
         <title>Modern Applications</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/tWEUbc1K6OY/modern-applications.html</link>
         <description>ABSTRACT: today it is unacceptable to have any application built as an independent islands of functionality. It is necessary to expose functionality via simple protocols (http).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Really, it is unacceptable today to have any application built as an independent piece of functionality. No application is or should be complex enough to do EVERYTHING. Thus, since we do not view our users as the mandatory human servers of the omnipotent computer -- with the noble lifetime goal of clicking through the menus, dialogs, wizards and buttons that the all-mighty programmer has imposed on them -- all application components NEED TO OFFER API-based access to a basic set of services/functions/objects/whathaveyou.&lt;br /&gt;&lt;br /&gt;These span a large number of functional areas, from controlling the application remotely, scripting its behavior, input/output/logging etc, so we'll take them one-by-one in future posts.&lt;br /&gt;&lt;br /&gt;Point being that applications become interoperable and subject to automation. There's no other way really to automatically turn down the volume of the DVD player because you answered a call on skype! OR have a tweet on your cellphone when the torrent has finished donwloading the latest CBC show.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--- Interoperability == standardisation?&lt;br /&gt;&lt;br /&gt;This thinking is normal to any Unix hacker, since they allways did "find|grep|cut|wc|sort" but it seems too complicated for anybody else to comprehend, especially window-heads.&lt;br /&gt;&lt;br /&gt;With physical devices, standardisation is, granted, not easy. Standards arise from a need which is already fulfilled by existing devices, cables and plugs. Then the plugs get standardised and devices become interoperable.&lt;br /&gt;&lt;br /&gt;The same was true in the software world (find|grep), but it's been false for a long time, especially since the advent of the stupidifying mouse and the un-parseable pixel.&lt;br /&gt;&lt;br /&gt;Command lines have always been around and http has also been around for a long time. There really is no reason not to combine both, when all you want is users to use the functionality your code has to offer.&lt;br /&gt;&lt;br /&gt;Ideally, all applications would be certified as "open" and "interoperable" and we will get there, in time. DLNA/UPNP is an example of such an interoperable framework, including certification. So is OSS/J (a set of telecom APIs) and others.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--- using http at rest to describe and interact with the object-oriented world&lt;br /&gt;&lt;br /&gt;So, what should ideally happen? We'd have unified protocols for access and interoperability. HTTP, telnet, command lines come to mind. Formats are also an obvious need: HTML/XML/JSON/text. Let REST dictate how things work, but only a modicum of human intervention can be mandated.&lt;br /&gt;&lt;br /&gt;Beyond the needs, there's the wants. We'd like that each would expose their internal models (objects, services, methods, actions, functionality) in a standard way, parseable and understandable by others.&lt;br /&gt;&lt;br /&gt;If you extend that to the interoperable web, you get the semantic web. Well, almost, since that's been designed by DBAs - they'd like to call it the "data web" and hide logic in a view that offers more data :). Sorry, couldn't help it!&lt;br /&gt;&lt;br /&gt;I live in a world surrounded by objects I'm interacting with. Data/information has a very important role to play, but it's not the end-all. My newspaper can not only filter for me the latest developments on that accident, but can also manage my account and micro-payments. Having knowledge of an intermediary PayPal only serves to confuse me and keep my mind busy with concepts I don't care about, since i already told my "gate keeper" that I trust my newspaper somewhat...&lt;br /&gt;&lt;br /&gt;The semantic web guys have it right, though. Exposing standardized schemas of the applications's objects and functionalities is the way to go. Scoping these (my "train" is different than your "train") makes obvious sense (think namespaces).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;---- So, vat do you vant?&lt;br /&gt;&lt;br /&gt;In the B2B universe (now turned SOA) there's lots of WS-based standards, including security, identity exchange etc. These don't bode well on the web, though. Why write things twice? It has to be simple-over-http. PERIOD, dumby.&lt;br /&gt;&lt;br /&gt;So, each modern application has:&lt;br /&gt;- embedded http server&lt;br /&gt;- exposing functionality/internal models etc&lt;br /&gt;- designed to be interoperable&lt;br /&gt;&lt;br /&gt;I would like everyone to stop buying and using any application that doesn't meet these criteria. Harsh, but then i'm in a bad mood today...&lt;br /&gt;&lt;br /&gt;------ So, what's a developer to do?&lt;br /&gt;&lt;br /&gt;Embed an http server. In case you need a small, lightweight embedded web server, checkout my public project at http://razpub.googlecode.com . There's lots of others out there - actually I recommend you get one that supports the servlet standard and you do servlets.&lt;br /&gt;&lt;br /&gt;Think about and define your business model, spell out your domain entities. Use less services and more objects when defining your API and bode nicely with REST.&lt;br /&gt;&lt;br /&gt;Define your model in whatever format you want - just make sure it's an xml file :). We'll deal with these in a future post, but for now it must be objcet-oriented: each 'class' has 'attributes' and 'methods'. The methods have a name and a list of arguments. Keep all types to String for now...assume all interaction is via URLs, which can't marshal bytecode - that's something we'll have to deal with.&lt;br /&gt;&lt;br /&gt;Offer access to the entire business model via http, including content (values) and control (invoked methods).&lt;br /&gt;&lt;br /&gt;Document all this very nicely in an embedded set of html pages. No smarts neccessary. Simple solutions always work better than complex ones.&lt;br /&gt;&lt;br /&gt;If you're looking for an asset/modelling/http object interface framework, checkout the &lt;a rel="nofollow" target="_blank" href="http://code.google.com/p/razpub/source/browse/trunk/razpub/src/com/razie/pub/assets/package-info.java"&gt;com.razie.pub.assets&lt;/a&gt; package of my razpub project.&lt;br /&gt;&lt;br /&gt;Stick to the REST principles for now, until my "REST is bad" post is posted.&lt;br /&gt;&lt;br /&gt;Modularity - allow extensions of functionality. Since the future is OSGi, may I suggest an OSGi compliant server - mine will be but it's not.&lt;br /&gt;&lt;br /&gt;And generally, don't forget to have fun!&lt;br /&gt;&lt;br /&gt;P.S. Just to give a concrete example, the VLC player is a great one. It has several interfaces, including telnet and http and you start whichever you want...&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-6779949381507811765?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/tWEUbc1K6OY" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-6779949381507811765</guid>
         <pubDate>Fri, 02 Oct 2009 12:53:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2009/10/modern-applications.html</feedburner:origLink></item>
      <item>
         <title>What's up with the home cloud?</title>
         <link>http://feeds.razie.com/~r/RazvanTech/~3/54smtaK5szI/whats-up-with-home-cloud.html</link>
         <description>&lt;p&gt;ABSTRACT: An abstract description of what I'm up to here.&lt;br /&gt;&lt;br /&gt;I am generally frustrated with the state of software - and have been, for a long time. People love to reinvent the wheel all the time, make life miserable for the users that don't stick to base use cases etc.&lt;br /&gt;&lt;br /&gt;I have some suggestions on how applications should be written and how the (software) world should look like. This is of course just one of the directions in which we could evolve but it's the one that seems to me to make the most sense.&lt;br /&gt;&lt;br /&gt;There are quite a few components to this picture so you'll have to bear with me over the course of several separate blogs on related topics and, at the end, we'll put everything together.&lt;br /&gt;&lt;br /&gt;There will be three different levels of this new "architecture", bottoms up:&lt;br /&gt;&lt;br /&gt;1. The basic idea is that there are certain things that are necessary to include in ANY software component of any kind, for instance exposing an API to access and manage the internal objects, data and functionality.&lt;br /&gt;&lt;br /&gt;2. A generic distributed application support framework will then use these to generate the "home cloud" - a cloud of interacting devices and objects under your personal, direct and total control.&lt;br /&gt;&lt;br /&gt;3. From here, moving to the web, you can have clusters of clouds of different functionalities, completely removing the necessity for centralized software.&lt;br /&gt;&lt;br /&gt;4. On top of these, there are different functionalities and specific use cases, such as "using identities", synchronizing files etc. I am not happy with the way these are handled by existing software, so you'll get a chance to hear my opinion.&lt;br /&gt;&lt;br /&gt;It will take me a while to put each into words and sample code. I'm not just blogging here, I'm also putting together a framework to test all these concepts, hopefully good enough that it will be used by others. You can get a glimpse and keep tabs on that here &lt;a rel="nofollow" target="_blank" href="http://razpub.googlecode.com/"&gt;http://razpub.googlecode.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will try to blog at least once a month, so a somewhat complete picture will form this year, but don't hold either your breath or me to it.&lt;br /&gt;&lt;br /&gt;Intended audience: mixed. The blogs are individually searchable, so a personal review of the "Windows Live Sync" for instance will benefit anyone searching for that kind of stuff. I will try to categorize each blog, to benefit the followers.&lt;br /&gt;&lt;br /&gt;I tend to be terse, so be ready to fire up your brain and read between the words. Non software-development professionals may have a hard time with my terseness and techie wor(d) games...they'll figure it out fast and stop reading.&lt;br /&gt;&lt;br /&gt;I think that's all for now - I'll end this here and start working on the next month's blog.&lt;br /&gt;&lt;br /&gt;Have fun! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;You can read the &lt;a rel="nofollow"&gt;wiki&lt;/a&gt;. Cheers!&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5540692173523218501-1295961565210807797?l=blog.homecloud.ca' alt=''/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/RazvanTech/~4/54smtaK5szI" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Razie)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-5540692173523218501.post-1295961565210807797</guid>
         <pubDate>Thu, 04 Jun 2009 15:58:00 +0000</pubDate>
      <feedburner:origLink>http://blog.homecloud.ca/2009/06/whats-up-with-home-cloud.html</feedburner:origLink></item>
   </channel>
</rss><!-- fe4.yql.bf1.yahoo.com compressed/chunked Fri Jan 27 22:42:11 UTC 2012 -->

