<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1864958362388463289</id><updated>2011-07-07T13:46:19.771-07:00</updated><title type='text'>ZARKATTACK</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-4709668736413123623</id><published>2010-01-05T04:47:00.000-08:00</published><updated>2010-01-05T04:49:10.374-08:00</updated><title type='text'>Another observation on Groovy's speed</title><content type='html'>&lt;div&gt;Not specifically about CouchDB, but have been experimenting with &lt;/div&gt;&lt;div&gt;REST-based Java/Groovy DAOs using CouchDB as the backend.  Thought folks &lt;/div&gt;&lt;div&gt;here might be interested in the info.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I created some REST DAOs using Groovy's HttpBuilder, and Spring's &lt;/div&gt;&lt;div&gt;RestTemplate.   Both use Google's GSON library for serializing to JSON.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples of create method:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Spring's RestTemplate implementation:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;    public String create(Pojo pojo) {&lt;br /&gt;         Map response = restTemplate.postForObject(url, pojo, Map.class);&lt;br /&gt;         String id = (String)response.get("id");&lt;br /&gt;         String rev = (String)response.get("rev");&lt;br /&gt;         pojo.setKey(id);&lt;br /&gt;         pojo.setRevision(rev);&lt;br /&gt;&lt;br /&gt;         return pojo.getKey();&lt;br /&gt;     }&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Groovy's HttpBuilder implementation:&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;    String create(Pojo pojo) {&lt;br /&gt;         httpBuilder.request(POST, JSON) {&lt;br /&gt;             send JSON, toJson(pojo)&lt;br /&gt;             response.success = {resp, json -&gt;&lt;br /&gt;                 pojo.key = json.id as String&lt;br /&gt;                 pojo.revision = json.rev as String&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;         pojo.key&lt;br /&gt;     }&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Spring implementation is nearly 50 times faster than the Groovy implementation!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, the Groovy implementation was much easier to learn and implement the Couch API with and was great for prototyping.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1864958362388463289-4709668736413123623?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/4709668736413123623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2010/01/another-observation-on-groovys-speed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/4709668736413123623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/4709668736413123623'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2010/01/another-observation-on-groovys-speed.html' title='Another observation on Groovy&apos;s speed'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-1947214102268011461</id><published>2010-01-05T04:28:00.000-08:00</published><updated>2010-01-05T04:41:34.180-08:00</updated><title type='text'>Scala vs Groovy performance</title><content type='html'>Not an official performance comparison, just some observations made in the past week or two.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;Quick port of some old Java graphics code I wrote into both Groovy and Scala scripts.&lt;/div&gt;&lt;div&gt;Execution time for main loop:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Groovy: 20.319 seconds&lt;/div&gt;&lt;div&gt;Scala: 0.335 seconds&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know this is like comparing apples and oranges, but still...   60 times slower?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm pretty turned-off from considering Groovy for anything other than quick prototyping or non-application scripting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Code below (not meant to be high-quality examples of either language):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Scala:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.awt.image.BufferedImage&lt;br /&gt;import java.awt.image.BufferedImage.TYPE_INT_ARGB&lt;br /&gt;import java.io.File&lt;br /&gt;import javax.imageio.ImageIO.{read, write}&lt;br /&gt;&lt;br /&gt;val file = args(0)&lt;br /&gt;val input = read(new File(file))&lt;br /&gt;&lt;br /&gt;val w = (input.getWidth / 2).asInstanceOf[Int] * 2&lt;br /&gt;val h = input getHeight&lt;br /&gt;var output = new BufferedImage(w / 2, h / 2, TYPE_INT_ARGB)&lt;br /&gt;var r: Int = _&lt;br /&gt;var g: Int = _&lt;br /&gt;var b: Int = _&lt;br /&gt;var lines = new Array[Array[Int]](w, 4)&lt;br /&gt;&lt;br /&gt;val time = System.currentTimeMillis&lt;br /&gt;println("Output: " + file.replace(".", "-clear_") + ".png")&lt;br /&gt;&lt;br /&gt;(0 until (h - 1, 2)) foreach { y =&amp;gt;&lt;br /&gt;    (0 until w) foreach { x =&amp;gt;&lt;br /&gt;        val rgb = input getRGB (x, y)&lt;br /&gt;        val rgb2 = input getRGB (x, y + 1)&lt;br /&gt;&lt;br /&gt;        lines(x)(0) = (((rgb &amp; 0xFF0000) &amp;gt;&amp;gt; 16) + ((rgb2 &amp; 0xFF0000) &amp;gt;&amp;gt; 16)) / 2&lt;br /&gt;        lines(x)(1) = (((rgb &amp; 0x00FF00) &amp;gt;&amp;gt; 8) + ((rgb2 &amp; 0x00FF00) &amp;gt;&amp;gt; 8)) / 2&lt;br /&gt;        lines(x)(2) = ((rgb &amp; 0x0000FF) + (rgb2 &amp; 0x0000FF)) / 2&lt;br /&gt;        lines(x)(3) = (((rgb &amp;gt;&amp;gt; 24) &amp; 0xFF) + ((rgb2 &amp;gt;&amp;gt; 24) &amp; 0xFF)) / 2&lt;br /&gt;&lt;br /&gt;        if (x &amp;gt;= 2 &amp;&amp; x % 2 == 0) {&lt;br /&gt;            r = lines(x - 2)(0)&lt;br /&gt;            g = lines(x - 1)(1)&lt;br /&gt;            b = lines(x)(2)&lt;br /&gt;&lt;br /&gt;            val a = (lines(x)(3) + lines(x - 1)(3) + lines(x - 2)(3)) / 3&lt;br /&gt;            val rgb3 = (a &amp;lt;&amp;lt; 24) | (r &amp;lt;&amp;lt; 16) | (g &amp;lt;&amp;lt; 8) | b&lt;br /&gt;            output setRGB ((x / 2), (y / 2), rgb3)&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;println (System.currentTimeMillis - time)&lt;br /&gt;&lt;br /&gt;write(output, "PNG", new File(file.replace(".", "-clear_") + ".png"))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Groovy:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import java.awt.image.BufferedImage&lt;br /&gt;import static java.awt.image.BufferedImage.TYPE_INT_ARGB&lt;br /&gt;import javax.imageio.ImageIO&lt;br /&gt;&lt;br /&gt;def file = args[0]&lt;br /&gt;&lt;br /&gt;println "Input: ${file}"&lt;br /&gt;&lt;br /&gt;def BufferedImage input = ImageIO.read(new File(file))&lt;br /&gt;def int w = (input.width / 2 as int) * 2&lt;br /&gt;def int h = input.height&lt;br /&gt;def BufferedImage output = new BufferedImage(w / 2 as int, h / 2 as int, TYPE_INT_ARGB)&lt;br /&gt;def int r, g, b&lt;br /&gt;def int[][] lines = new int[w][4]&lt;br /&gt;&lt;br /&gt;println "Output: ${file.replace(".", "-clear_")}.png"&lt;br /&gt;&lt;br /&gt;def time = System.currentTimeMillis()&lt;br /&gt;&lt;br /&gt;for (int y = 0; y &amp;lt; h - 1; y += 2) {&lt;br /&gt;    (0..&amp;lt;w).each { int x -&amp;gt;&lt;br /&gt;        def int rgb = input.getRGB(x, y)&lt;br /&gt;        def int rgb2 = input.getRGB(x, y + 1)&lt;br /&gt;&lt;br /&gt;        lines[x][0] = (((rgb &amp; 0xFF0000) &amp;gt;&amp;gt; 16) + ((rgb2 &amp; 0xFF0000) &amp;gt;&amp;gt; 16)) / 2&lt;br /&gt;        lines[x][1] = (((rgb &amp; 0x00FF00) &amp;gt;&amp;gt; 8) + ((rgb2 &amp; 0x00FF00) &amp;gt;&amp;gt; 8)) / 2&lt;br /&gt;        lines[x][2] = ((rgb &amp; 0x0000FF) + (rgb2 &amp; 0x0000FF)) / 2&lt;br /&gt;        lines[x][3] = (((rgb &amp;gt;&amp;gt; 24) &amp; 0xFF) + ((rgb2 &amp;gt;&amp;gt; 24) &amp; 0xFF)) / 2&lt;br /&gt;&lt;br /&gt;        if (x &amp;gt;= 2 &amp;&amp; x % 2 == 0) {&lt;br /&gt;            r = lines[x - 2][0]&lt;br /&gt;            g = lines[x - 1][1]&lt;br /&gt;            b = lines[x][2]&lt;br /&gt;&lt;br /&gt;            int a = (lines[x][3] + lines[x - 1][3] + lines[x - 2][3]) / 3&lt;br /&gt;            int rgb3 = (a &amp;lt;&amp;lt; 24) | (r &amp;lt;&amp;lt; 16) | (g &amp;lt;&amp;lt; 8) | b&lt;br /&gt;            output.setRGB((x / 2) as int, (y / 2) as int, rgb3)&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;println(System.currentTimeMillis() - time)&lt;br /&gt;&lt;br /&gt;ImageIO.write output, "PNG", new File("${file.replace(".", "-clear_")}.png")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&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;&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/1864958362388463289-1947214102268011461?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/1947214102268011461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2010/01/scala-vs-groovy-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/1947214102268011461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/1947214102268011461'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2010/01/scala-vs-groovy-performance.html' title='Scala vs Groovy performance'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-7349552152901290675</id><published>2009-12-05T14:09:00.000-08:00</published><updated>2009-12-05T14:17:27.700-08:00</updated><title type='text'>ScrumMasters pointless?</title><content type='html'>Scrum itself can be quite effective, but I'm starting to believe that a dedicated ScrumMaster role is pointless.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most effective teams are best at learning agile techniques themselves and things like "conflict resolution".  If you &lt;i&gt;really&lt;/i&gt; need someone, rotate the role amongst team members.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The cynic in me thinks the role was promoted to help  Scrum adoption and buy-in by the Project Management corps (who would otherwise feel threatened by Scrum/agile). &lt;/div&gt;&lt;div&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/1864958362388463289-7349552152901290675?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/7349552152901290675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2009/12/scrummasters-pointless.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/7349552152901290675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/7349552152901290675'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2009/12/scrummasters-pointless.html' title='ScrumMasters pointless?'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-3066740671527124749</id><published>2009-11-27T00:05:00.001-08:00</published><updated>2009-11-27T01:51:58.210-08:00</updated><title type='text'>CouchDB attachments, mapping JSON to Java</title><content type='html'>&lt;div&gt;Wasn't obvious to me how to map this in Java JSON libs, but the way that CouchDB stores references to a document's attachments corresponds to a Map:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;    "_attachments":{&lt;/div&gt;&lt;div&gt;        "ALPHA.png":{&lt;/div&gt;&lt;div&gt;            "stub":true,&lt;/div&gt;&lt;div&gt;            "content_type":"CONTENT/TYPE",&lt;/div&gt;&lt;div&gt;            "length":2351959,&lt;/div&gt;&lt;div&gt;            "revpos":1&lt;/div&gt;&lt;div&gt;        },&lt;/div&gt;&lt;div&gt;        "CHARLIE.png":{&lt;/div&gt;&lt;div&gt;            "stub":true,&lt;/div&gt;&lt;div&gt;            "content_type":"CONTENT/TYPE",&lt;/div&gt;&lt;div&gt;            "length":6376790,&lt;/div&gt;&lt;div&gt;            "revpos":1&lt;/div&gt;&lt;div&gt;        },&lt;/div&gt;&lt;div&gt;        "BRAVO.png":{&lt;/div&gt;&lt;div&gt;            "stub":true,&lt;/div&gt;&lt;div&gt;            "content_type":"CONTENT/TYPE",&lt;/div&gt;&lt;div&gt;            "length":2361940,&lt;/div&gt;&lt;div&gt;            "revpos":1&lt;/div&gt;&lt;div&gt;        }&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;E.g.:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Map&lt;string,&gt; attachments;&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/1864958362388463289-3066740671527124749?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/3066740671527124749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2009/11/couchdb-attachments-mapping-json-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/3066740671527124749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/3066740671527124749'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2009/11/couchdb-attachments-mapping-json-to.html' title='CouchDB attachments, mapping JSON to Java'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-5541935145987610246</id><published>2009-11-16T10:32:00.000-08:00</published><updated>2009-11-16T10:40:31.820-08:00</updated><title type='text'>Web Framework Names of the Future</title><content type='html'>&lt;div&gt;Following the trend with Ruby on Rails, Groovy on Grails, here are my predictions for web frameworks of the future (with a little help from a script, favs in &lt;b&gt;bold&lt;/b&gt;):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Boobies on Bails&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Brewski on Brails&lt;/li&gt;&lt;li&gt;Doobie on Dales&lt;/li&gt;&lt;li&gt;Droopy on Drails&lt;/li&gt;&lt;li&gt;Fruity on Frails&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/search?q=goudy"&gt;Goudy on Gails&lt;/a&gt; (great font support)&lt;/li&gt;&lt;li&gt;Hippie on Hails&lt;/li&gt;&lt;li&gt;Judy on Jails (isn't that a show?)&lt;/li&gt;&lt;li&gt;Loopy on Lails&lt;/li&gt;&lt;li&gt;Moody on Males&lt;/li&gt;&lt;li&gt;&lt;b&gt;n00b on Nails&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Poopy on Pails&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Scooby on Scales&lt;/li&gt;&lt;li&gt;Slurpie on Slails&lt;/li&gt;&lt;li&gt;&lt;b&gt;Snoopy on Snails&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/search?q=soupy+sales"&gt;Soupy on Sales&lt;/a&gt; :-)&lt;/li&gt;&lt;li&gt;Spooky on Spails&lt;/li&gt;&lt;li&gt;Troopy on Trails&lt;/li&gt;&lt;li&gt;Voodoo on Veils (how cool is that?)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Wookie on Whales&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Zippy on Zales&lt;/li&gt;&lt;/ul&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1864958362388463289-5541935145987610246?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/5541935145987610246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2009/11/web-framework-names-of-future.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/5541935145987610246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/5541935145987610246'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2009/11/web-framework-names-of-future.html' title='Web Framework Names of the Future'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-7033221970602006177</id><published>2009-11-14T12:32:00.000-08:00</published><updated>2010-01-05T04:28:28.286-08:00</updated><title type='text'>Notes on Scala and Groovy</title><content type='html'>I love Scala's:&lt;div&gt;&lt;ul&gt;&lt;li&gt;concurrency/actor support&lt;/li&gt;&lt;li&gt;combined Class definition with primary constructor&lt;/li&gt;&lt;li&gt;operators == methods&lt;/li&gt;&lt;li&gt;sensible typing&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I dislike:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Collections are not 1:1 compatible with Java Collections&lt;/li&gt;&lt;li&gt;Terse syntax still feels awkward to a 10 year Java veteran&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I love Groovy's:&lt;div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Close but improved Java-like syntax&lt;/li&gt;&lt;li&gt;Closures&lt;/li&gt;&lt;li&gt;Builder libs&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I dislike:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Hard to remember when parenthesis are optional.&lt;/li&gt;&lt;li&gt;Lack of anonymous classes (such a pain for libs like Wicket)&lt;/li&gt;&lt;/ul&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;Maybe call it.... Scooby?   ;-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1864958362388463289-7033221970602006177?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/7033221970602006177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2009/11/please-combine-scala-with-groovy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/7033221970602006177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/7033221970602006177'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2009/11/please-combine-scala-with-groovy.html' title='Notes on Scala and Groovy'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-5427785332874823680</id><published>2009-11-14T10:34:00.000-08:00</published><updated>2009-11-14T10:47:37.576-08:00</updated><title type='text'>Spring RestTemplate, PUT, DELETE</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: 11px; white-space: pre; "&gt;Spring's RestTemplate is nice, but I don't understand why it doesn't easily support extracting response objects for delete and put calls...&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande', serif; font-size: 11px; white-space: pre; "&gt;E.g. CouchDB REST API uses this approach.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Lucida Grande', serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Lucida Grande', serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; white-space: pre;"&gt;Yeah there's the execute method, but then you need to reimplement the RestTemplate.PostPutCallback class, which is private..&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Lucida Grande', serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Lucida Grande', serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-family:'Lucida Grande', serif;font-size:100%;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, 'Bitstream Vera Sans', sans-serif; font-size: 12px; white-space: normal; color: rgb(51, 51, 51); "&gt;&lt;table style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; "&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;DELETE&lt;/td&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;&lt;code&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html#delete(java.lang.String,%20java.lang.String...)" style="color: rgb(44, 123, 20); text-decoration: none; "&gt;delete(java.lang.String, java.lang.String...)&lt;/a&gt;&lt;br /&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;GET&lt;/td&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html#getForObject(java.lang.String,%20java.lang.Class,%20java.lang.String...)" style="color: rgb(44, 123, 20); text-decoration: none; "&gt;&lt;code&gt;getForObject(java.lang.String, java.lang.Class&lt;t&gt;, java.lang.String...)&lt;/t&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;POST&lt;/td&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html#postForObject(java.lang.String,%20java.lang.Object,%20java.lang.Class,%20java.lang.String...)" style="color: rgb(44, 123, 20); text-decoration: none; "&gt;&lt;code&gt;postForObject(java.lang.String, java.lang.Object, java.lang.Class&lt;t&gt;, java.lang.String...)&lt;/t&gt;&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;PUT&lt;/td&gt;&lt;td style="border-top-style: none; border-right-style: none; border-bottom-style: dotted; border-left-style: none; border-width: initial; border-color: initial; border-bottom-width: 1px; border-bottom-color: rgb(221, 221, 221); "&gt;&lt;code&gt;&lt;a href="http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/client/RestTemplate.html#put(java.lang.String,%20java.lang.Object,%20java.lang.String...)" style="color: rgb(44, 123, 20); text-decoration: none; "&gt;put(java.lang.String, java.lang.Object, java.lang.String...)&lt;/a&gt;&lt;br /&gt;&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1864958362388463289-5427785332874823680?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/5427785332874823680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2009/11/spring-resttemplate-put-delete.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/5427785332874823680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/5427785332874823680'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2009/11/spring-resttemplate-put-delete.html' title='Spring RestTemplate, PUT, DELETE'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1864958362388463289.post-183375799712039914</id><published>2009-11-13T23:37:00.000-08:00</published><updated>2009-11-13T23:42:03.992-08:00</updated><title type='text'>Head Going to Explode</title><content type='html'>Scala+Groovy+Java+Spring+CouchDB in same codebase - amazed this actual works.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Scala is great, but makes me feel like a drooling idiot.&lt;/div&gt;&lt;div&gt;Hence, the use of Groovy - which makes me feel oh so clever again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;xoxo,&lt;/div&gt;&lt;div&gt;zark&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1864958362388463289-183375799712039914?l=zarkattack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zarkattack.blogspot.com/feeds/183375799712039914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://zarkattack.blogspot.com/2009/11/head-going-to-explode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/183375799712039914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1864958362388463289/posts/default/183375799712039914'/><link rel='alternate' type='text/html' href='http://zarkattack.blogspot.com/2009/11/head-going-to-explode.html' title='Head Going to Explode'/><author><name>7ZARK7</name><uri>http://www.blogger.com/profile/14755882179394299953</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
