<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>h3 weblog</title>
    <link>http://www.postronic.org/h3/</link>
    <description>garbage in, garbage out</description>
    <language>en</language>
    <image>
      <title>h3 weblog</title>
      <url>http://www.postronic.org/h3/images/feedlogo.gif</url>
      <link>http://www.postronic.org/h3/</link>
      <width>88</width>
      <height>31</height>
      <description>garbage in, garbage out</description>
    </image>
    <item>
      <guid>http://www.postronic.org/h3/pid48.html</guid>
      <title>IM me from the web</title>
      <link>http://www.postronic.org/h3/pid48.html</link>
      <description>If you want to chat with me just click below :)</description>
      <content:encoded><![CDATA[If you want to chat with me just click below :)<br/><br/><iframe src="http://www.google.com/talk/service/badge/Show?tk=z01q6amlq4oebr9cfk6lbsskvmenq9q8m0n720fhgh59m4eibu0hj0qfhj5li3d5vadrhbkipknrrchou4tcqiemgcuf4gopma3c00a84ve06hoac61tedac0kvicpiq0duavla1ppc44u3n2bog06iv93ln4bq8m1ro6uvfl&amp;w=200&amp;h=60" allowtransparency="true" width="200" frameborder="0" height="60"></iframe>]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2008-08-11T23:09:33+01:00</dc:date>
      <slash:comments>0</slash:comments>
      <comments>http://www.postronic.org/h3/pid48.html#comments</comments>
    </item>
    <item>
      <guid>http://www.postronic.org/h3/pid47.html</guid>
      <title>I.T. Salaries</title>
      <link>http://www.postronic.org/h3/pid47.html</link>
      <description>Sadly, in Italy you must divide this by 2 or 3...</description>
      <content:encoded><![CDATA[Sadly, in Italy you must divide <a href="http://www.indeed.com/salary?q1=Senior+Java+developer&amp;l1=&amp;tm=1">this</a> by 2 or 3...]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2008-06-08T14:40:18+01:00</dc:date>
      <slash:comments>0</slash:comments>
      <comments>http://www.postronic.org/h3/pid47.html#comments</comments>
    </item>
    <item>
      <guid>http://www.postronic.org/h3/pid46.html</guid>
      <title>My new remix</title>
      <link>http://www.postronic.org/h3/pid46.html</link>
      <description>You can listen it here in streaming:    Foals &#150; Electric Bloom (h3-r3 remix)or downlad the MP3If you are a Last.fm user please scrobble it!!</description>
      <content:encoded><![CDATA[You can listen it here in streaming:<br/><br/><object width="13" height="13" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" allowNetworking="internal"> <param name="allowScriptAccess" value="sameDomain" /><param name="FlashVars" value="resourceID=200291755&amp;flp=true" /> <param name="movie" value="http://static.last.fm/webclient/inline/6/inlinePlayer.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed wmode="transparent" src="http://static.last.fm/webclient/inline/6/inlinePlayer.swf" quality="high" FlashVars="resourceID=200291755&amp;flp=true" bgcolor="#ffffff" width="13" height="13" name="inlinePlayer" allowNetworking="internal" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object> <a href="http://www.lastfm.it/music/Foals">Foals</a> &#150; <a href="http://www.lastfm.it/music/Foals/_/Electric+Bloom+%28h3-r3+remix%29">Electric Bloom (h3-r3 remix)</a><br/><br/>or <a href="http://freedownloads.last.fm/download/200291755/Electric%2BBloom%2B%2528h3-r3%2Bremix%2529.mp3">downlad the MP3</a><br/><br/>If you are a <a href="http://last.fm">Last.fm</a> user please scrobble it!!]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2008-05-20T22:46:01+01:00</dc:date>
      <slash:comments>0</slash:comments>
      <comments>http://www.postronic.org/h3/pid46.html#comments</comments>
    </item>
    <item>
      <guid>http://www.postronic.org/h3/pid45.html</guid>
      <title>J2ME rotozoomer</title>
      <link>http://www.postronic.org/h3/pid45.html</link>
      <description>Today I tried to code an oldschool demo effect for my mobile phone (a Nokia 3110 classic)...I created a simple rotozomeer :)here is the code (J2ME MIDP 2.0)package org.postronic.h3.testmidlet;import javax.microedition.lcdui.Display;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class RotozoomerMIDlet extends MIDlet {  public RotozoomerMIDlet() { }  protected void startApp() throws MIDletStateChangeException {    RotozoomerCanvas canvas = new RotozoomerCanvas();    Display display = Display.getDisplay(this);    display.setCurrent(canvas);    canvas.run();  }	  protected void pauseApp() { }	  protected void destroyApp(boolean arg0) throws MIDletStateChangeException { }}package org.postronic.h3.testmidlet;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import javax.microedition.lcdui.game.GameCanvas;public class RotozoomerCanvas extends GameCanvas {  protected RotozoomerCanvas() {    super(true);    setFullScreenMode(true);  }  public void run() {    int imgWidth = getWidth();    int imgHeight = getHeight();    Graphics g = getGraphics();    int[] img = new int[imgWidth &#42; imgHeight];		    Image texture = Image.createImage(32, 16);    Graphics tg = texture.getGraphics();     tg.setColor(200, 200, 255);    tg.drawString("h3-r3", 2, 0, Graphics.TOP &#124; Graphics.LEFT);    tg.setColor(200, 200, 255);    tg.drawString("h3-r3", 4, 0, Graphics.TOP &#124; Graphics.LEFT);    tg.setColor(0, 0, 255);    tg.drawString("h3-r3", 3, 0, Graphics.TOP &#124; Graphics.LEFT);    int[] txImg = new int[32 &#42; 16];     texture.getRGB(txImg, 0, 32, 0, 0, 32, 16);    texture = null; // dispose the texture Image                       float tx, ty;    float dtx, dty;    float otx, oty;		    double cont = 0;    double cos, sin;    double size;    int offs;    for(;;) {      cos = Math.cos(cont);      sin = Math.sin(cont);      tx = (float) cos &#42; 20;       ty = (float) sin &#42; 20;      size = cos;      dtx = (float) (cos &#42; size);       dty = (float) (sin &#42; size);      cont += 0.02;      for (int y = 0; y &lt; imgHeight; y++) {        otx = tx;        oty = ty;        offs = y &#42; imgWidth;        for (int x = 0; x &lt; imgWidth; x++) {          img[x + offs] = txImg[((int)(tx) &amp; 31) + (((int)(ty) &amp; 15) &#42; 32)];          tx += dtx;          ty += dty;        }        tx = otx - dty;        ty = oty + dtx;      }      g.drawRGB(img, 0, imgWidth, 0, 0, imgWidth, imgHeight, false);      flushGraphics();    }  }}</description>
      <content:encoded><![CDATA[Today I tried to code an oldschool demo effect for my mobile phone (a Nokia 3110 classic)...<br/>I created a simple rotozomeer :)<br/><br/>here is the code (J2ME MIDP 2.0)<br/><br/><span style="font-family: courier;">package org.postronic.h3.testmidlet;<br/><br/>import javax.microedition.lcdui.Display;<br/>import javax.microedition.midlet.MIDlet;<br/>import javax.microedition.midlet.MIDletStateChangeException;<br/><br/>public class RotozoomerMIDlet extends MIDlet {<br/><br/>&nbsp; public RotozoomerMIDlet() { }<br/><br/>&nbsp; protected void startApp() throws MIDletStateChangeException {<br/>&nbsp; &nbsp; RotozoomerCanvas canvas = new RotozoomerCanvas();<br/>&nbsp; &nbsp; Display display = Display.getDisplay(this);<br/>&nbsp; &nbsp; display.setCurrent(canvas);<br/>&nbsp; &nbsp; canvas.run();<br/>&nbsp; }<br/>	<br/>&nbsp; protected void pauseApp() { }<br/>	<br/>&nbsp; protected void destroyApp(boolean arg0) throws MIDletStateChangeException { }<br/><br/>}<br/><br/><br/><br/>package org.postronic.h3.testmidlet;<br/><br/>import javax.microedition.lcdui.Graphics;<br/>import javax.microedition.lcdui.Image;<br/>import javax.microedition.lcdui.game.GameCanvas;<br/><br/>public class RotozoomerCanvas extends GameCanvas {<br/><br/>&nbsp; protected RotozoomerCanvas() {<br/>&nbsp; &nbsp; super(true);<br/>&nbsp; &nbsp; setFullScreenMode(true);<br/>&nbsp; }<br/><br/>&nbsp; public void run() {<br/>&nbsp; &nbsp; int imgWidth = getWidth();<br/>&nbsp; &nbsp; int imgHeight = getHeight();<br/>&nbsp; &nbsp; Graphics g = getGraphics();<br/>&nbsp; &nbsp; int[] img = new int[imgWidth &#42; imgHeight];<br/>		<br/>&nbsp; &nbsp; Image texture = Image.createImage(32, 16);<br/>&nbsp; &nbsp; Graphics tg = texture.getGraphics(); <br/>&nbsp; &nbsp; tg.setColor(200, 200, 255);<br/>&nbsp; &nbsp; tg.drawString("h3-r3", 2, 0, Graphics.TOP &#124; Graphics.LEFT);<br/>&nbsp; &nbsp; tg.setColor(200, 200, 255);<br/>&nbsp; &nbsp; tg.drawString("h3-r3", 4, 0, Graphics.TOP &#124; Graphics.LEFT);<br/>&nbsp; &nbsp; tg.setColor(0, 0, 255);<br/>&nbsp; &nbsp; tg.drawString("h3-r3", 3, 0, Graphics.TOP &#124; Graphics.LEFT);<br/>&nbsp; &nbsp; int[] txImg = new int[32 &#42; 16]; <br/>&nbsp; &nbsp; texture.getRGB(txImg, 0, 32, 0, 0, 32, 16);<br/>&nbsp; &nbsp; texture = null; // dispose the texture Image<br/>                   <br/>&nbsp; &nbsp; float tx, ty;<br/>&nbsp; &nbsp; float dtx, dty;<br/>&nbsp; &nbsp; float otx, oty;<br/>		<br/>&nbsp; &nbsp; double cont = 0;<br/>&nbsp; &nbsp; double cos, sin;<br/>&nbsp; &nbsp; double size;<br/>&nbsp; &nbsp; int offs;<br/>&nbsp; &nbsp; for(;;) {<br/>&nbsp; &nbsp; &nbsp; cos = Math.cos(cont);<br/>&nbsp; &nbsp; &nbsp; sin = Math.sin(cont);<br/>&nbsp; &nbsp; &nbsp; tx = (float) cos &#42; 20; <br/>&nbsp; &nbsp; &nbsp; ty = (float) sin &#42; 20;<br/>&nbsp; &nbsp; &nbsp; size = cos;<br/>&nbsp; &nbsp; &nbsp; dtx = (float) (cos &#42; size); <br/>&nbsp; &nbsp; &nbsp; dty = (float) (sin &#42; size);<br/>&nbsp; &nbsp; &nbsp; cont += 0.02;<br/>&nbsp; &nbsp; &nbsp; for (int y = 0; y &lt; imgHeight; y++) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; otx = tx;<br/>&nbsp; &nbsp; &nbsp; &nbsp; oty = ty;<br/>&nbsp; &nbsp; &nbsp; &nbsp; offs = y &#42; imgWidth;<br/>&nbsp; &nbsp; &nbsp; &nbsp; for (int x = 0; x &lt; imgWidth; x++) {<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; img[x + offs] = txImg[((int)(tx) &amp; 31) + (((int)(ty) &amp; 15) &#42; 32)];<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tx += dtx;<br/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ty += dty;<br/>&nbsp; &nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; &nbsp; tx = otx - dty;<br/>&nbsp; &nbsp; &nbsp; &nbsp; ty = oty + dtx;<br/>&nbsp; &nbsp; &nbsp; }<br/>&nbsp; &nbsp; &nbsp; g.drawRGB(img, 0, imgWidth, 0, 0, imgWidth, imgHeight, false);<br/>&nbsp; &nbsp; &nbsp; flushGraphics();<br/>&nbsp; &nbsp; }<br/>&nbsp; }<br/><br/>}</span><br/>]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2007-12-23T21:29:27+01:00</dc:date>
      <slash:comments>1</slash:comments>
      <comments>http://www.postronic.org/h3/pid45.html#comments</comments>
    </item>
    <item>
      <guid>http://www.postronic.org/h3/pid44.html</guid>
      <title>Outrun</title>
      <link>http://www.postronic.org/h3/pid44.html</link>
      <description/>
      <content:encoded><![CDATA[<object width="425" height="373"><param name="movie" value="http://www.youtube.com/v/agJVL0UAQ9s&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0&amp;border=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/agJVL0UAQ9s&amp;rel=0&amp;color1=0xd6d6d6&amp;color2=0xf0f0f0&amp;border=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"></embed></object>]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2007-12-16T20:47:00+01:00</dc:date>
      <slash:comments>0</slash:comments>
      <comments>http://www.postronic.org/h3/pid44.html#comments</comments>
    </item>
    <item>
      <guid>http://www.postronic.org/h3/pid43.html</guid>
      <title>For he's a jolly good microcomputer</title>
      <link>http://www.postronic.org/h3/pid43.html</link>
      <description>25 years and we are still good friends :)Good anniversary Commodore 64</description>
      <content:encoded><![CDATA[25 years and we are still good friends :)<br/><br/>Good anniversary Commodore 64]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2007-12-08T22:27:06+01:00</dc:date>
      <slash:comments>0</slash:comments>
      <comments>http://www.postronic.org/h3/pid43.html#comments</comments>
    </item>
    <item>
      <guid>http://www.postronic.org/h3/pid42.html</guid>
      <title>Google Groups inner workings</title>
      <link>http://www.postronic.org/h3/pid42.html</link>
      <description>Some days ago I was browsing some Google Groups. Then this page came out:&lt;html&gt;  &lt;head&gt;    &lt;title&gt;Error: Exception thrown while generating page&lt;/title&gt;  &lt;/head&gt;  &lt;body&gt;    &lt;h2&gt;Error: Exception thrown while generating page&lt;/h2&gt;    &lt;pre&gt;      java.lang.OutOfMemoryError: MemoryError: Unable to resize ULIST to 20: Out of memory      at org.clearsilver.CS._parseFile(Native Method)      at org.clearsilver.CS.parseFile(CS.java:58)      at com.google.clearsilver.base.PageBase.go(PageBase.java:486)      at com.google.clearsilver.base.PageServlet.handleRequest(PageServlet.java:44)      at com.google.clearsilver.base.PageServlet.doGet(PageServlet.java:33)      at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)      at com.google.gse.HttpConnection.runServlet(HttpConnection.java:534)      at com.google.gse.HttpConnection.run(HttpConnection.java:458)      at com.google.gse.DispatchQueue$WorkerThread.run(DispatchQueue.java:299)    &lt;/pre&gt;  &lt;/body&gt;&lt;/html&gt;This is very interesting for two reasons:Shows that even at Google they are human and make mistakes. Having some exceptions is ok,	but they should be catched, logged internally and not shown directly to the user, or at least the stacktrace should be hidden.Reveals some inner workings of a state of the art Web 2.0 applicationsuch as Google Groups.Here is what you can learn from this stack trace:They are using JavaRegular ServletsClearSilver as template engineThey built a framework based on ClearSilverThey use their own application server, called GSE... what is it for? Google Server Engine? Google Servlet Engine? who knows...</description>
      <content:encoded><![CDATA[Some days ago I was browsing some Google Groups. Then this page came out:<br/><br/><span style="font-family: courier-new, courier, monospace; font-size: 10px; color: black;">&lt;html&gt;<br/>&nbsp; &lt;head&gt;<br/>&nbsp;&nbsp;  &lt;title&gt;Error: Exception thrown while generating page&lt;/title&gt;<br/>&nbsp; &lt;/head&gt;<br/>&nbsp; &lt;body&gt;<br/>&nbsp;&nbsp;  &lt;h2&gt;Error: Exception thrown while generating page&lt;/h2&gt;<br/>&nbsp;&nbsp;  &lt;pre&gt;<br/>&nbsp;&nbsp;&nbsp;   java.lang.OutOfMemoryError: MemoryError: Unable to resize ULIST to 20: Out of memory<br/>&nbsp;&nbsp;&nbsp;   at org.clearsilver.CS._parseFile(Native Method)<br/>&nbsp;&nbsp;&nbsp;   at org.clearsilver.CS.parseFile(CS.java:58)<br/>&nbsp;&nbsp;&nbsp;   at com.google.clearsilver.base.PageBase.go(PageBase.java:486)<br/>&nbsp;&nbsp;&nbsp;   at com.google.clearsilver.base.PageServlet.handleRequest(PageServlet.java:44)<br/>&nbsp;&nbsp;&nbsp;   at com.google.clearsilver.base.PageServlet.doGet(PageServlet.java:33)<br/>&nbsp;&nbsp;&nbsp;   at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)<br/>&nbsp;&nbsp;&nbsp;   at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)<br/>&nbsp;&nbsp;&nbsp;   at com.google.gse.HttpConnection.runServlet(HttpConnection.java:534)<br/>&nbsp;&nbsp;&nbsp;   at com.google.gse.HttpConnection.run(HttpConnection.java:458)<br/>&nbsp;&nbsp;&nbsp;   at com.google.gse.DispatchQueue$WorkerThread.run(DispatchQueue.java:299)<br/>&nbsp;&nbsp;  &lt;/pre&gt;<br/>&nbsp; &lt;/body&gt;<br/>&lt;/html&gt;</span><br/><br/>This is very interesting for two reasons:<br/><ol><li>Shows that even at Google they are human and make mistakes. Having some exceptions is ok,<br/>	but they should be catched, logged internally and not shown directly to the user, or at least the stack<br/>trace should be hidden.</li><li>Reveals some inner workings of a state of the art Web 2.0 application<br/>such as Google Groups.</li></ol><br/>Here is what you can learn from this stack trace:<br/><ul><li>They are using Java</li><li>Regular Servlets</li><li><a href="http://www.clearsilver.net/">ClearSilver</a> as template engine</li><li>They built a framework based on ClearSilver</li><li>They use their own application server, called GSE... what is it for? Google Server Engine? Google Servlet Engine? who knows...</li></ul>]]></content:encoded>
      <dc:creator>h3</dc:creator>
      <dc:date>2007-11-29T11:44:13+01:00</dc:date>
      <slash:comments>0</slash:comments>
      <comments>http://www.postronic.org/h3/pid42.html#comments</comments>
    </item>
  </channel>
</rss>
