<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Substance of Code &#187; Java</title>
	<atom:link href="http://www.substanceofcode.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.substanceofcode.com</link>
	<description>Software Artisan Tommi Laukkanen</description>
	<lastBuildDate>Mon, 06 Sep 2010 20:47:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Babel Fish for Twitter &#8211; New Twim Release</title>
		<link>http://www.substanceofcode.com/2009/11/02/babel-fish-for-twitter/</link>
		<comments>http://www.substanceofcode.com/2009/11/02/babel-fish-for-twitter/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 20:56:00 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[javame]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[twim]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=661</guid>
		<description><![CDATA[Google Translator is a great translator tool which has a very simple AJAX API that can be easily used from mobile apps. Compared to other translator tools it has one feature which other services don&#8217;t have, the auto detection of &#8230; <a href="http://www.substanceofcode.com/2009/11/02/babel-fish-for-twitter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Google Translator is a great translator tool which has a very simple <a href="http://code.google.com/apis/ajaxlanguage/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/apis/ajaxlanguage/?referer=');">AJAX API</a> that can be easily used from mobile apps. Compared to other translator tools it has one feature which other services don&#8217;t have, the auto detection of language.</p>
<p>The API is really easy to use. All you need to do is to pass three parameters to the API call:</p>
<ol>
<li>Version, <em>v=1.0</em></li>
<li>Translated text, <em>q=Hei maailma!</em></li>
<li>Language pair (if source is empty then language is automatically identified), <em>langpair=|en</em></li>
</ol>
<p>In the end you end up with the following URL:</p>
<p><a href="http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&amp;langpair=|en&amp;q=Hei+maailma!" onclick="pageTracker._trackPageview('/outgoing/ajax.googleapis.com/ajax/services/language/translate?v=1.0_amp_langpair=_en_amp_q=Hei+maailma&amp;referer=');">http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&amp;langpair=|en&amp;q=Hei+maailma!</a></p>
<p>And if you click the link you&#8217;ll see that it returns the translated text in JSON format which is pretty easy to parse.</p>
<pre style="word-wrap: break-word; white-space: pre-wrap;">{ "responseData": {
"translatedText":"Hello world!",
"detectedSourceLanguage":"fi" },
"responseDetails": null,
"responseStatus": 200}</pre>
<p>This made it pretty easy to integrate the API call to Twim. So now in Twim 1.6 you can select a tweet from status list and select &#8220;Translate to English&#8221; from status menu and Twim will display the translation to you in seconds. Pretty handy if you are following people from other countries in Twitter. Go ahead and download the latest Twim to your mobile phone from <a href="http://www.substanceofcode.com/software/mobile-twitter-client-twim/">here</a>.</p>
<p>&#8230;and by the way, new feature also has the &#8220;paging&#8221; feature for home screen and search results as a bonus! Happy Twittering!</p>
<p><a href="http://moby.to/d0rnbk" target="_blank" onclick="pageTracker._trackPageview('/outgoing/moby.to/d0rnbk?referer=');"><img src="http://img.mobypicture.com/ca218d5668030657cfaa6a8cba7af572_view.jpg" alt="Posted using Mobypicture.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2009/11/02/babel-fish-for-twitter/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Twim 1.15 with Auto-Refresh and TwitrPix Support</title>
		<link>http://www.substanceofcode.com/2009/08/22/twim-1-15-with-auto-refresh-and-twitrpix-support/</link>
		<comments>http://www.substanceofcode.com/2009/08/22/twim-1-15-with-auto-refresh-and-twitrpix-support/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 10:49:52 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=602</guid>
		<description><![CDATA[Just finished testing the latest version of Twim, v1.15. Now you can also send your photos to new TwitrPix service. I also added few options that you can configure via settings view. You can set Twim to automatically load the &#8230; <a href="http://www.substanceofcode.com/2009/08/22/twim-1-15-with-auto-refresh-and-twitrpix-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Just finished testing the latest version of <a href="http://www.substanceofcode.com/software/mobile-twitter-client-twim">Twim</a>, v1.15. Now you can also send your photos to new <a href="http://twitrpix.com/" onclick="pageTracker._trackPageview('/outgoing/twitrpix.com/?referer=');">TwitrPix</a> service.</p>
<p><img class="alignnone size-full wp-image-617" title="twitrpix_logo_v2" src="http://www.substanceofcode.com/wp-content/uploads/2009/08/twitrpix_logo_v2.png" alt="twitrpix_logo_v2" width="241" height="90" /></p>
<p>I also added few options that you can configure via settings view. You can set Twim to automatically load the home screen tweets when application is started and you can also turn on the auto-refresh option that will automatically load new tweets in every 5 minutes. If new tweets are found then phone vibrates and plays a small beep sound. With this feature you won&#8217;t miss a single tweet again :)</p>
<div id="attachment_607" class="wp-caption alignnone" style="width: 186px"><img class="size-full wp-image-607" title="twim_settings" src="http://www.substanceofcode.com/wp-content/uploads/2009/08/twim_settings.png" alt="New settings view" width="176" height="220" /><p class="wp-caption-text">New settings view</p></div>
<p>Full release notes:</p>
<ul>
<li><a href="http://twitrpix.com" onclick="pageTracker._trackPageview('/outgoing/twitrpix.com?referer=');">TwitrPix</a> support</li>
<li>Cancel option to media menu</li>
<li>Initial auto-refresh option with alarming of new tweets</li>
<li>Option to automatically load tweets on startup</li>
<li>Tab names changed: &#8220;Recent&#8221;&gt;&#8221;Home&#8221;, &#8220;Friends&#8221;&gt;&#8221;Following&#8221;</li>
<li>Fix for non-latin characters when posting photos (thanks Lexa!)</li>
</ul>
<p>Have fun with the new Twim and download it from <a href="http://www.substanceofcode.com/software/mobile-twitter-client-twim">here</a>. If you like the source code you can see that in <a href="http://code.google.com/p/twim/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/twim/?referer=');">here</a>. Twim is still free as a free beer.</p>
<p>In case you didn&#8217;t know: Twim is a mobile <a href="http://twitter.com/" onclick="pageTracker._trackPageview('/outgoing/twitter.com/?referer=');">Twitter</a> client. I&#8217;m twittering with username <a href="http://twitter.com/tlaukkanen" onclick="pageTracker._trackPageview('/outgoing/twitter.com/tlaukkanen?referer=');">@tlaukkanen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2009/08/22/twim-1-15-with-auto-refresh-and-twitrpix-support/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Coding Touchscreen Scrolling in Java ME</title>
		<link>http://www.substanceofcode.com/2009/07/29/coding-touchscreen-scrolling-in-java-me/</link>
		<comments>http://www.substanceofcode.com/2009/07/29/coding-touchscreen-scrolling-in-java-me/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:27:38 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[scrolling]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[touch]]></category>
		<category><![CDATA[touchscreen]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=590</guid>
		<description><![CDATA[Here&#8217;s the trick how you can add touchscreen scrolling to your J2ME applications. The key to touchscreen support is the Canvas class and its&#8217; methods pointerPressed, pointerDragged and pointerReleased. These events are called when user puts finger on the screen &#8230; <a href="http://www.substanceofcode.com/2009/07/29/coding-touchscreen-scrolling-in-java-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the trick how you can add touchscreen scrolling to your J2ME applications. The key to touchscreen support is the Canvas class and its&#8217; methods <em>pointerPressed, pointerDragged </em>and <em>pointerReleased</em>. These events are called when user puts finger on the screen (pressed) and drags the finger (dragged) and finally when removes the finger (released). Each method has the x and y coordinates for the pointer action.</p>
<p>The scrolling is implemented with the pointerDragged event. We store the current location of the canvas to variables <em>verticalLoc</em> and <em>horizontalLoc</em>. When finger (pointer) is dragged then location is changed according to the dragged amount. Variables are used on <em>paint</em> method to draw the area so that it is scrolled that correctly. You can also see from the sample code how you can draw background with repeatable pattern image.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">class</span> ScrollingCanvas <span class="kw2">extends</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ACanvas+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3ACanvas+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span class="kw3">Canvas</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">// Current location</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw4">int</span> verticalLoc, horizontalLoc;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="co1">// Last pointer (finger) location</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw4">int</span> lastX, lastY;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">// Background image size</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw4">int</span> IMAGE_WIDTH = <span class="nu0">183</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw4">int</span> IMAGE_HEIGHT = <span class="nu0">183</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> ScrollingCanvas<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;verticalLoc = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;horizontalLoc = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;setFullScreenMode<span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">protected</span> <span class="kw4">void</span> paint<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3AGraphics+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span class="kw3">Graphics</span></a> g<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Draw background with pattern image</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="kw4">int</span> x = horizontalLoc % IMAGE_WIDTH;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>x&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;x -= IMAGE_WIDTH;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw4">int</span> origX = x;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw4">int</span> y = verticalLoc % IMAGE_HEIGHT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>y&gt;<span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;y -= IMAGE_HEIGHT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw4">boolean</span> verticalDone = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span>!verticalDone<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw4">boolean</span> horizontalDone = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">while</span><span class="br0">&#40;</span>!horizontalDone<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;g.<span class="me1">drawImage</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ImageRepository.<span class="me1">getBackground</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x, y, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AGraphics+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3AGraphics+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span class="kw3">Graphics</span></a>.<span class="me1">LEFT</span>|Graphics.<span class="me1">TOP</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;x += IMAGE_WIDTH;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>x&gt;getWidth<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;horizontalDone = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;x = origX;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;y += IMAGE_HEIGHT;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span>y&gt;getHeight<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;verticalDone = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Finger is pressed on screen</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @param x coordinate</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @param y coordinate</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">protected</span> <span class="kw4">void</span> pointerPressed<span class="br0">&#40;</span><span class="kw4">int</span> x, <span class="kw4">int</span> y<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;lastX = x;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;lastY = y;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Finger is dragged on screen</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @param x coordinate</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @param y coordinate</span></div>
</li>
<li class="li2">
<div class="de2"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">protected</span> <span class="kw4">void</span> pointerDragged<span class="br0">&#40;</span><span class="kw4">int</span> x, <span class="kw4">int</span> y<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Calculate how much we moved horizontally</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw4">int</span> deltaHorizontal = lastX &#8211; x;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;horizontalLoc -= deltaHorizontal;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;lastX = x;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Calculate how much we moved vertically</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw4">int</span> deltaVertical = lastY &#8211; y;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;verticalLoc -= deltaVertical;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;lastY = y;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Repaint the screen since we have scrolled</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;repaint<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Here is a video of running this demonstration app in Nokia N97 SDK emulator:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/tJ0X-uPJsmk&amp;hl=en&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/tJ0X-uPJsmk&amp;hl=en&amp;fs=1&amp;rel=0" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2009/07/29/coding-touchscreen-scrolling-in-java-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning the git, Mobidentica now Open Source</title>
		<link>http://www.substanceofcode.com/2009/03/24/learning-the-git-mobidentica-now-open-source/</link>
		<comments>http://www.substanceofcode.com/2009/03/24/learning-the-git-mobidentica-now-open-source/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 19:53:38 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[laconice]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[mobidentica]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=452</guid>
		<description><![CDATA[I&#8217;m learning to use the git, distributed version control system. It seems to be much faster then Subversion that I have used with my Google Code projects. I just created a repository on GitHub for Mobidentica project. Source code is &#8230; <a href="http://www.substanceofcode.com/2009/03/24/learning-the-git-mobidentica-now-open-source/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m learning to use the <a href="http://en.wikipedia.org/wiki/Git_(software)" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Git_software?referer=');">git</a>, distributed version control system. It seems to be much faster then Subversion that I have used with my Google Code projects. I just created a <a href="http://github.com/tlaukkanen/mobidentica" onclick="pageTracker._trackPageview('/outgoing/github.com/tlaukkanen/mobidentica?referer=');">repository</a> on <a href="http://github.com/" onclick="pageTracker._trackPageview('/outgoing/github.com/?referer=');">GitHub</a> for <a href="http://www.substanceofcode.com/software/mobidentica/">Mobidentica</a> project. Source code is available under the Apache License 2.0. If you like to clone the repository, use this:</p>
<pre>git clone git://github.com/tlaukkanen/mobidentica.git</pre>
<p>I&#8217;ll have to see if I&#8217;ll start using git with those projects that are on Google Code as it seems to be possible too: Benjamin Lynn from Google Developer Programs wrote a blog post on <a href="http://google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html" onclick="pageTracker._trackPageview('/outgoing/google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html?referer=');">how to use git on Google Code projects</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2009/03/24/learning-the-git-mobidentica-now-open-source/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Optimizing Trail Recording</title>
		<link>http://www.substanceofcode.com/2009/03/22/optimizing-trail-recording/</link>
		<comments>http://www.substanceofcode.com/2009/03/22/optimizing-trail-recording/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 19:09:51 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[mobile-trail-explorer]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[trail]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=439</guid>
		<description><![CDATA[I coded a prototype how we could record fewer GPS positions in Mobile Trail Explorer and therefore save some memory but still have the same level of detail of the trail. Video might explain it best. Unoptimized recording is on &#8230; <a href="http://www.substanceofcode.com/2009/03/22/optimizing-trail-recording/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I coded a prototype how we could record fewer GPS positions in <a href="http://www.substanceofcode.com/software/mobile-trail-explorer/">Mobile Trail Explorer</a> and therefore save some memory but still have the same level of detail of the trail. Video might explain it best. Unoptimized recording is on the left and optimized trail is on the right.</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/WANKRxOpb98&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/WANKRxOpb98&amp;hl=en&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /></object></p>
<p>The algorithm simply checks if the current direction have changed since last recorded position. If direction isn&#8217;t changed over the tolerance value then we can replace the last position with current position. Otherwise we only append the new position to the trail.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw4">boolean</span> canRemovePreviousPosition<span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Vector&lt;GpsPosition&gt; positions,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; GpsPosition pos1<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>positions.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>&lt;<span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; GpsPosition pos2 = positions.<span class="me1">elementAt</span><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; positions.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="nu0">-2</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; GpsPosition pos3 = positions.<span class="me1">elementAt</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; positions.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="nu0">-1</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Calculate last angle of trail</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">double</span> latDelta = pos2.<span class="me1">lat</span> &#8211; pos3.<span class="me1">lat</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> lonDelta = pos2.<span class="me1">lon</span> &#8211; pos3.<span class="me1">lon</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> lastAngle = <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3AMath+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span class="kw3">Math</span></a>.<span class="me1">atan</span><span class="br0">&#40;</span>latDelta/lonDelta<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Calculate current angle</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">double</span> latDelta2 = pos3.<span class="me1">lat</span> &#8211; pos1.<span class="me1">lat</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> lonDelta2 = pos3.<span class="me1">lon</span> &#8211; pos1.<span class="me1">lon</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> currentAngle =</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3AMath+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span class="kw3">Math</span></a>.<span class="me1">atan</span><span class="br0">&#40;</span>latDelta2/lonDelta2<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="co1">// Get absolute value of direction change</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">double</span> angleDelta =</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AMath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="pageTracker._trackPageview('/outgoing/www.google.com/search?hl=en_amp_q=allinurl_3AMath+java.sun.com_amp_btnI=I_27m_20Feeling_20Lucky&amp;referer=');"><span class="kw3">Math</span></a>.<span class="me1">abs</span><span class="br0">&#40;</span>lastAngle &#8211; currentAngle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Check the tolerance (0.105 radians = 6 degrees)</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>angleDelta&gt;<span class="nu0">0.105</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2009/03/22/optimizing-trail-recording/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Nokia E71 and new Twitter client</title>
		<link>http://www.substanceofcode.com/2008/09/13/nokia-e71-and-new-twitter-client/</link>
		<comments>http://www.substanceofcode.com/2008/09/13/nokia-e71-and-new-twitter-client/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 12:54:12 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Applet]]></category>
		<category><![CDATA[Devices]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[e71]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[twim]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=282</guid>
		<description><![CDATA[I finally upgraded my phone from N80 to E71. The new Nokia E71 is a really nice. Even the Symbian S60 feels much better now that the phone has enough memory to run it. Operating system still has not changed &#8230; <a href="http://www.substanceofcode.com/2008/09/13/nokia-e71-and-new-twitter-client/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I finally upgraded my phone from N80 to E71. The new Nokia E71 is a really nice. Even the Symbian S60 feels much better now that the phone has enough memory to run it. Operating system still has not changed that much compared to my first smart phone, Nokia 7650 which I had in 2002. This phone is still the best one I have ever had. Even Joel Spolsky is <a href="http://www.joelonsoftware.com/items/2008/08/22.html" onclick="pageTracker._trackPageview('/outgoing/www.joelonsoftware.com/items/2008/08/22.html?referer=');">using it</a>.</p>
<div class="wp-caption alignnone" style="width: 410px"><a title="Twim on Nokia E71 by tlaukkanen, on Flickr" href="http://www.flickr.com/photos/tlaukkanen/3358595405/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/photos/tlaukkanen/3358595405/?referer=');"><img title="Twitter Client Twim running on Nokia E71" src="http://farm4.static.flickr.com/3638/3358595405_fe8cf91701.jpg" alt="Twim on Nokia E71" width="400" height="300" /></a><p class="wp-caption-text">Twitter Client Twim running on Nokia E71</p></div>
<p>The new phone got me inspired to improve my <a href="http://www.twitter.com" onclick="pageTracker._trackPageview('/outgoing/www.twitter.com?referer=');">Twitter</a> client, <a href="http://www.substanceofcode.com/software/mobile-twitter-client-twim/">Twim</a>. I fixed a few bugs like showing the replies feed. I also added a new feature for displaying public feed in own tab. You can download the JAR and JAD files from the <a href="http://www.substanceofcode.com/software/mobile-twitter-client-twim/">Twim</a> page or directly from these links:</p>
<p>Twim v1.2: <a href="http://www.substanceofcode.com/downloads/midlets/Twim.jar">Twim.jar</a> and <a href="http://www.substanceofcode.com/downloads/midlets/Twim.jad">Twim.jad</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2008/09/13/nokia-e71-and-new-twitter-client/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Mobile Trail Explorer v1.12 Released</title>
		<link>http://www.substanceofcode.com/2008/08/14/mobile-trail-explorer-v112-released/</link>
		<comments>http://www.substanceofcode.com/2008/08/14/mobile-trail-explorer-v112-released/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 21:06:08 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobile-trail-explorer]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=270</guid>
		<description><![CDATA[It&#8217;s only handful of days since last release, but I decided to release the v1.12 so soon as the v1.11 contained few bugs that were blocking few critical features, like adding a new waypoint and changing display settings. You can &#8230; <a href="http://www.substanceofcode.com/2008/08/14/mobile-trail-explorer-v112-released/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s only handful of days since last release, but I decided to release the v1.12 so soon as the v1.11 contained few bugs that were blocking few critical features, like adding a new waypoint and changing display settings.</p>
<p>You can download the new release from <a href="http://www.substanceofcode.com/software/mobile-trail-explorer/">here</a> or <a href="http://code.google.com/p/mobile-trail-explorer/downloads/list" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/mobile-trail-explorer/downloads/list?referer=');">here</a>. New version also contains a new languages, French and Dutch. You can now also change the language if you want to use other then phone default language. Thanks for the contributions and test reports reported on Google Groups <a href="http://groups.google.com/group/mobile-trail-explorer" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/mobile-trail-explorer?referer=');">discussions</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2008/08/14/mobile-trail-explorer-v112-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mobile Trail Explorer v1.11</title>
		<link>http://www.substanceofcode.com/2008/08/05/mobile-trail-explorer-v111/</link>
		<comments>http://www.substanceofcode.com/2008/08/05/mobile-trail-explorer-v111/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 20:16:24 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[mobile-trail-explorer]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=260</guid>
		<description><![CDATA[Here it is, a new release of Mobile Trail Explorer. Here are the release notes for this release: Renamed &#8220;Waypoints&#8221; to &#8220;Places&#8221; (Issue 92) Filename uses datestamp with seconds User can add audio-markers Configurable action keys (# and * keys) &#8230; <a href="http://www.substanceofcode.com/2008/08/05/mobile-trail-explorer-v111/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here it is, a new release of Mobile Trail Explorer. Here are the release notes for this release:</p>
<ul>
<li>Renamed &#8220;Waypoints&#8221; to &#8220;Places&#8221; (Issue 92)</li>
<li>Filename uses datestamp with seconds</li>
<li>User can add audio-markers</li>
<li>Configurable action keys (# and * keys)</li>
<li>New speedometer screen (Issue 112)</li>
<li>Support different grid formats (Contributed by Kaspar Mösinger)</li>
<li>Encoding problems with KML import (Issue 120, Contribution from Bastian)</li>
<li>Translations to German, (partial) Finnish and default English (Thanks to Patrick)</li>
<li>&#8230;Plus tens of bug fixes and smaller features</li>
</ul>
<p><img class="size-full wp-image-261 alignright instant" title="Trail Explorer v1.11" src="http://www.substanceofcode.com/wp-content/uploads/2008/08/trailexplorer_v111.jpg" alt="Trail Explorer v1.11" width="170" height="200" /></p>
<p>Big thanks goes to all contributors and the &#8220;core&#8221; dev team as well.</p>
<p>You can download the latest binaries either from Google Code <a href="http://code.google.com/p/mobile-trail-explorer/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/mobile-trail-explorer/?referer=');">project page</a> or from the Trail Explorer page, <a href="http://www.substanceofcode.com/software/mobile-trail-explorer/">here</a>. Report any bugs or ideas on the <a href="http://groups.google.com/group/mobile-trail-explorer" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/mobile-trail-explorer?referer=');">Google Group</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2008/08/05/mobile-trail-explorer-v111/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Drawing scalable numbers with J2ME</title>
		<link>http://www.substanceofcode.com/2008/07/31/drawing-scalable-numbers-with-j2me/</link>
		<comments>http://www.substanceofcode.com/2008/07/31/drawing-scalable-numbers-with-j2me/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 18:15:39 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MIDlet]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[graphics]]></category>
		<category><![CDATA[j2me]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[speedometer]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=247</guid>
		<description><![CDATA[One of the users suggested that Mobile Trail Explorer (MTE) should have a speedometer screen which shows current speed with large numbers so that it could be used as a normal speedometer while driving a bike. One of the challenges &#8230; <a href="http://www.substanceofcode.com/2008/07/31/drawing-scalable-numbers-with-j2me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the users suggested that <a href="http://www.substanceofcode.com/software/mobile-trail-explorer/">Mobile Trail Explorer</a> (MTE) should have a speedometer screen which shows current speed with large numbers so that it could be used as a normal speedometer while driving a bike. One of the challenges is that MTE runs on different devices and therefore on different screen resolutions. For example my Nokia N80 has a very large resolution of 352 x 416 while latest N series devices are usually running with 240 x 320 and older devices are using smaller 176 x 208 resolution.</p>
<p>Using the bitmap fonts would have been a solution but that would require us to store bitmaps for every resolution and that would eat up a lot of valuable memory. I have used bitmaps fonts on <a href="http://www.substanceofcode.com/software/subothello-midlet/">SubOthello</a> game. I think that it suits really well for mobile games which are targeted and built separately for different devices.</p>
<dl id="attachment_252" class="wp-caption alignright" style="width: 170px;">
<dt class="wp-caption-dt"><a href="http://www.substanceofcode.com/wp-content/uploads/2008/07/speedometer.jpg" rel="lightbox[247]"><img class="size-medium wp-image-252 alignright instant" title="speedometer" src="http://www.substanceofcode.com/wp-content/uploads/2008/07/speedometer.jpg" alt="Trail Explorer Speedometer" width="160" height="189" /></a></dt>
</dl>
<p>To solve this more generic way, I created a <a href="http://code.google.com/p/mobile-trail-explorer/source/browse/trunk/src/com/substanceofcode/tracker/view/NumberArea.java" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/mobile-trail-explorer/source/browse/trunk/src/com/substanceofcode/tracker/view/NumberArea.java?referer=');"><em>NumberArea</em></a> class for, which This is used to draw an area into Canvas where numbers such as speed and distance are rendered with basic Graphic methods such as <em>fillRect</em>(&#8230;) and <em>fillRoundRect</em>(&#8230;). If you are interested you can take a <a href="http://code.google.com/p/mobile-trail-explorer/source/browse/trunk/src/com/substanceofcode/tracker/view/NumberArea.java" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/mobile-trail-explorer/source/browse/trunk/src/com/substanceofcode/tracker/view/NumberArea.java?referer=');">look</a> into a source code.</p>
<p>On a side note: We are now on feature freeze with MTE so that we can release the v1.11 within a week or so.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2008/07/31/drawing-scalable-numbers-with-j2me/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thanks Atlassian</title>
		<link>http://www.substanceofcode.com/2008/07/19/thanks-atlassian/</link>
		<comments>http://www.substanceofcode.com/2008/07/19/thanks-atlassian/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 21:22:29 +0000</pubDate>
		<dc:creator>Tommi Laukkanen</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[codegeist]]></category>
		<category><![CDATA[jira]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://www.substanceofcode.com/?p=241</guid>
		<description><![CDATA[It was a nice suprise to find Atlassian&#8217;s Codegeist T-shirt from my mailbox the other day. This year I was only able to code a small plugin for JIRA called NetBeans JIRA Plugin. I got the idea for this plugin &#8230; <a href="http://www.substanceofcode.com/2008/07/19/thanks-atlassian/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It was a nice suprise to find Atlassian&#8217;s <a href="http://www.atlassian.com/codegeist/" onclick="pageTracker._trackPageview('/outgoing/www.atlassian.com/codegeist/?referer=');">Codegeist</a> T-shirt from my mailbox the other day. This year I was only able to code a small plugin for JIRA called <a href="http://confluence.atlassian.com/display/JIRAEXT/NetBeans+JIRA+Plugin" onclick="pageTracker._trackPageview('/outgoing/confluence.atlassian.com/display/JIRAEXT/NetBeans+JIRA+Plugin?referer=');"><em>NetBeans JIRA Plugin</em></a>. I got the idea for this plugin as I was reading a book, <a href="http://www.netbeans.org/books/rcp.html" onclick="pageTracker._trackPageview('/outgoing/www.netbeans.org/books/rcp.html?referer=');">Rich Client Programming</a>, which has a great value when you are programming rich desktop apps or plugins for NetBeans platform.</p>
<div id="attachment_244" class="wp-caption alignnone" style="width: 460px"><img class="size-full wp-image-244" title="atlassian-codegeist-t-shirt" src="http://www.substanceofcode.com/wp-content/uploads/2008/07/atlassian-codegeist.jpg" alt="" width="450" height="338" /><p class="wp-caption-text">Atlassian Codegeist T-Shirt</p></div>
<p>The plugin uses JIRA&#8217;s Web Service API to search, view and edit issues straight from the IDE. This is especially handy when you are writing a code to a specific issue and want to check some details or log work done for the issue.</p>
<p>The Atlassian Codegeist is a competition where everyone can write plugins for Atlassian products, such as <a href="http://www.atlassian.com/software/jira/" onclick="pageTracker._trackPageview('/outgoing/www.atlassian.com/software/jira/?referer=');">JIRA</a>, <a href="http://www.atlassian.com/software/bamboo/" onclick="pageTracker._trackPageview('/outgoing/www.atlassian.com/software/bamboo/?referer=');">Bamboo</a>, <a href="http://www.atlassian.com/software/confluence/" onclick="pageTracker._trackPageview('/outgoing/www.atlassian.com/software/confluence/?referer=');">Confluence</a>, <a href="http://www.atlassian.com/software/fisheye/" onclick="pageTracker._trackPageview('/outgoing/www.atlassian.com/software/fisheye/?referer=');">FishEye</a>, <a href="http://www.atlassian.com/software/crucible/" onclick="pageTracker._trackPageview('/outgoing/www.atlassian.com/software/crucible/?referer=');">Crucible</a> etc. I use those tools daily at work and I can truly say that they really improve the daily development process signifigantly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.substanceofcode.com/2008/07/19/thanks-atlassian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
