<?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-5162137887150660076</id><updated>2012-03-16T19:22:51.238+02:00</updated><category term='Programming principles'/><category term='Integrated Development Environment (IDE)'/><category term='Code examples'/><category term='Python'/><category term='Google+'/><category term='Usability'/><category term='Training Services'/><category term='Running Gear'/><category term='Running'/><category term='My Toolkit'/><category term='Encoding'/><category term='Version Control'/><category term='Roguelike'/><category term='Lautapelit'/><category term='Appraisals'/><category term='Bystanders'/><category term='My Roguelike'/><category term='About this blog'/><category term='XML'/><category term='Problem solving'/><category term='Listings'/><category term='Java'/><category term='Algorithms'/><category term='Game Development'/><category term='Programming'/><category term='toys'/><category term='Cognitive Science and HCI'/><category term='Swan - Scientific Writing Assistant'/><category term='Life'/><category term='Researches'/><category term='Graphics'/><category term='Editors'/><category term='Louhigames'/><category term='Eclipse'/><category term='Updater'/><category term='Suomeksi'/><category term='Graphical User Interfaces'/><category term='The Design of Everyday Things'/><category term='Software Development Stories'/><category term='Discussion and Thoughts'/><category term='Android'/><category term='Galaxy S Plus'/><category term='Training'/><category term='Firesoft'/><category term='Studying'/><category term='Books'/><title type='text'>Arttu Viljakainen Programming, CV, blog</title><subtitle type='html'>Programming, Indie Game Development, Usability</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>89</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-6193195470661866994</id><published>2012-02-26T21:12:00.002+02:00</published><updated>2012-02-28T11:09:58.241+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Lovefication for Android</title><content type='html'>I made my first Android application to Android Market, go check it out:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://market.android.com/details?id=program.to.growing.loveheart&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsInByb2dyYW0udG8uZ3Jvd2luZy5sb3ZlaGVhcnQiXQ.."&gt;  &lt;img alt="Available in Android Market" src="http://www.android.com/images/brand/60_avail_market_logo2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What is does is simply to add a heart with a message to the Android notification area, as seen in the picture:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-R6gqpKvF9MQ/T0qCsmcIv8I/AAAAAAAABWs/MbJLdmxp8T0/s1600/Lovefication+notification.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-R6gqpKvF9MQ/T0qCsmcIv8I/AAAAAAAABWs/MbJLdmxp8T0/s320/Lovefication+notification.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Lovefication&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;The message is optional. This is how the whole app looks like:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-TdOhdxJp--k/T0qC1FvPGUI/AAAAAAAABW0/wNxFtpDSazw/s1600/Lovefication+main.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-TdOhdxJp--k/T0qC1FvPGUI/AAAAAAAABW0/wNxFtpDSazw/s320/Lovefication+main.png" width="192" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Lovefication&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;There are options to put the heart on/off, and to choose whether you want the application to start on boot. Basically it just means, that if the heart is on, and you allow the start on boot, the notification (lovefication) will be added to the notification area when you start your phone.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The app is small and lightweight so it doesn't consume the resources of your phone. This is my first Android application ever and creating it was a joy. I already learnt a lot and saw a bit what Android is as a platform for software developers. There's more to come, I really like developing for Android.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6193195470661866994?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6193195470661866994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2012/02/lovefication-for-android.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6193195470661866994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6193195470661866994'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2012/02/lovefication-for-android.html' title='Lovefication for Android'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-R6gqpKvF9MQ/T0qCsmcIv8I/AAAAAAAABWs/MbJLdmxp8T0/s72-c/Lovefication+notification.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4313854331663373939</id><published>2012-01-29T19:49:00.000+02:00</published><updated>2012-01-29T19:59:28.628+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lautapelit'/><category scheme='http://www.blogger.com/atom/ns#' term='Suomeksi'/><title type='text'>Lautapeli: Pohjanmaan Valtias</title><content type='html'>This post is about a Finnish board game "Pohjanmaan Valtias". I believe it's not available in English.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Pohjanmaan Valtias on uusi suomalainen lautapeli, joka nimensä mukaisesti kuvaa taistelua Pohjanmaan valtiudesta. Fyysisesti peli on hieno. Pelilauta kuvaa Pohjanmaata isoimpine pitäjineen ja kaupunkeineen ja sinne tänne on lisätty paikkakuntiin liittyvää kuvitusta. Pitäjät ja kaupungit on yhdistetty teillä.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HG8DHpeyDhY/TyWGMUGTNCI/AAAAAAAABWI/hNO7fByK9_Y/s1600/IMG_4459_m.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-HG8DHpeyDhY/TyWGMUGTNCI/AAAAAAAABWI/hNO7fByK9_Y/s320/IMG_4459_m.jpg" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Pohjanmaan Valtias - pelilauta&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;Tavoitteena on vallata alueita oman merkkinsä alle ja suorittaa tehtäviä. Pitäjiä ja kaupunkeja ostetaan rahalla, jolloin niistä saa valtakortteja. Valtakorttien pisteillä suoritetaan normaaleja tai "Isoon rahan" tehtäviä. Normaaleista tehtävistä saa vain rahaa, mutta isoon rahan tehtävistä myös voittopisteitä ja välillä myös muita bonuksia. Isoon rahan tehtävien suorittamisesta riippuu myös pelin päättyminen.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Yksinkertaistettuna vuoro menee niin, että ensin nostetaan tehtäväkortti. Tehtäväkortissa on paikkakunnan nimi, ja tehtävä joka siellä tulee suorittaa. Tämän jälkeen nostetaan liikkumiskortti, joka määrittää montako askelta pelaaja voi liikkua, tai jonkin erikoistilanteen (menee vankilaan tai sairaalaan, menettää vuoronsa, jne.). Kohteeseen liikkuessaan voi matkan varrelta ostaa tai vallata pitäjiä ja kaupunkeja, joiden läpi liikkuu. Valtaaminen tapahtuu puukkohipalla tai erityisillä valtakorteilla. Toisen pelaajan omistamilla alueilla voi myös suorittaa tehtäviä, mutta silloin joutuu maksamaan veroa kyseiselle pelaajalle. Tehtäväkorteista voi valita joku rehdin tai häjyn. Rehdillä kortilla tuotto on yleensä varmempi, mutta häjy mahdollistaa isommat kertapotit. Liikkumiskorteissa on myös välillä eri vaihtoehtoja rehdeille ja häjyille pelaajille.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Tässä on vain pelin perusidea, jota varioidaan paljon erilaisilla liikkumiskorteilla ja sillä pelaako rehtiä vai häjyä tavoitetta. Toisten pelaajien rattaisiin voi, ja pitää, laittaa kapuloita. Tämä onnistuu valtaamalla paikkakuntia joille muut ovat menossa suorittamaan tehtäviään, valtaamalla muiden kaupunkeja, ja erilaisilla erikoiskorteilla, joilla voi viedä muiden rahoja tai valtapisteitä.&lt;br /&gt;&lt;br /&gt;Peli loppuu kun tietty määrä isoon rahan tehtäviä on suoritettu. Lopussa pisteytetään pitäjät (1 piste), kaupungit (2 pistettä) ja isoon rahan tehtävät (1 piste per suoritettu tehtävä). Seinäjoki on pelissä erityisasemassa; se on kalliimpi, ja siitä saa 3 voittopistettä.&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-BgUWgwM9lKo/TyWGO6d5HsI/AAAAAAAABWQ/lI0OKu404tc/s1600/IMG_4467_m.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="272" src="http://2.bp.blogspot.com/-BgUWgwM9lKo/TyWGO6d5HsI/AAAAAAAABWQ/lI0OKu404tc/s320/IMG_4467_m.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Pohjanmaan Valtias&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;Ensitestin perusteella peli on ihan hauskaa ajanvietettä, mutta myös melko pitkä. Pituus todennäköisesti lyhenee pelaajien taitojen parannuttua. Pelissä on jonkin verran satunnaisuutta, mutta myös taidolla tuntuu olevan kohtuullisen suuri vaikutus.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pakkohan tätä on varsinkin pohjalaisille suositella. Peli hyödyntää Pohjanmaateemaa erinomaisesti, ja korteissa on hienosti käytetty pohjalaista murretta ja myyttejä tai sanontoja. Varmaan toimiva myös pohjanmaan ulkopuolelta tulevien vieraiden viihdyttämiseen.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4313854331663373939?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4313854331663373939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/lautapeli-pohjanmaan-valtias.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4313854331663373939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4313854331663373939'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/lautapeli-pohjanmaan-valtias.html' title='Lautapeli: Pohjanmaan Valtias'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-HG8DHpeyDhY/TyWGMUGTNCI/AAAAAAAABWI/hNO7fByK9_Y/s72-c/IMG_4459_m.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4217249943201565133</id><published>2012-01-25T13:23:00.000+02:00</published><updated>2012-01-25T13:23:14.544+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Galaxy S Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='toys'/><title type='text'>Case Mate's Barely There for Galaxy S Plus (GT-I9001)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;I bought Barely There cover by Case Mate for my Galaxy S Plus for some extra protection:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Zjysu2eKcFE/Tx_et9nrN9I/AAAAAAAABVU/FDHSladvbig/s1600/Barely+There+inside.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="297" src="http://2.bp.blogspot.com/-Zjysu2eKcFE/Tx_et9nrN9I/AAAAAAAABVU/FDHSladvbig/s320/Barely+There+inside.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Barely There back&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-858-PMxyVEQ/Tx_ewgjyIlI/AAAAAAAABVs/MFIm0-IS85E/s1600/Barely+There+outside.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="284" src="http://4.bp.blogspot.com/-858-PMxyVEQ/Tx_ewgjyIlI/AAAAAAAABVs/MFIm0-IS85E/s320/Barely+There+outside.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Barely There front&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;It really is barely there, it is slim and quite unnoticeable. The surface is not as slippery as the phone, but the difference is not that big than I thought it would. Barely There provides some cover for the camera and screen:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-3fdEHFpYbLI/Tx_eulXFSkI/AAAAAAAABVc/-ICZg1JcU3U/s1600/Barely+There+mounted+back.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="230" src="http://4.bp.blogspot.com/-3fdEHFpYbLI/Tx_eulXFSkI/AAAAAAAABVc/-ICZg1JcU3U/s320/Barely+There+mounted+back.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Back of I9001 with Barely There&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-BNJ1wHgOK2Q/Tx_ex_x_WEI/AAAAAAAABV0/xCtOd5chQiQ/s1600/Barely+There+usb+and+head+phone.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="178" src="http://1.bp.blogspot.com/-BNJ1wHgOK2Q/Tx_ex_x_WEI/AAAAAAAABV0/xCtOd5chQiQ/s320/Barely+There+usb+and+head+phone.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Top of I9001 with Barely There&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HSdzHaRI_v0/Tx_evxbmLKI/AAAAAAAABVk/F7tShC84py4/s1600/Barely+There+mounted+front.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-HSdzHaRI_v0/Tx_evxbmLKI/AAAAAAAABVk/F7tShC84py4/s320/Barely+There+mounted+front.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Front of I9001 with Barely There&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;With the Barely There on you still have a good access to all of the buttons and it really doesn't hinder the usage of the phone. The cover fits perfectly and stays in place very well - it's hard to take it off.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'm not sure how effective this is at protecting my phone. It's good to have this if I drop the phone and it does give some protection for the screen and especially the camera lens if I put the phone on the table. The main advantage for me is that the phone fits better to my hand with the Barely There on.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Barely There is very thin, but it still adds a bit to the size of the phone. I bought&amp;nbsp;iGloo Premium: White Leather Pouch Case with Pull Tab For Samsung Galaxy S Plus i9001 Mobile Phone as well and the phone doesn't fit in with the cover on. I'll try to stretch it a little, but this aspect is good to keep in mind.&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/5162137887150660076-4217249943201565133?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4217249943201565133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/case-mates-barely-there-for-galaxy-s.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4217249943201565133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4217249943201565133'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/case-mates-barely-there-for-galaxy-s.html' title='Case Mate&apos;s Barely There for Galaxy S Plus (GT-I9001)'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Zjysu2eKcFE/Tx_et9nrN9I/AAAAAAAABVU/FDHSladvbig/s72-c/Barely+There+inside.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-888794460690842464</id><published>2012-01-23T18:46:00.000+02:00</published><updated>2012-01-23T18:46:00.786+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='About this blog'/><title type='text'>Allow full RSS</title><content type='html'>&lt;div style="text-align: justify;"&gt;I understand that people need to get visitors to their site, but it makes reading their posts more complicated. It would be much easier to read the whole post using RSS reader on my Android and open the website only if I want to comment. Way too often I can read only few sentences using RSS reader and am then forced to open the website - which I don't always do, because it may be slow on mobile and later on I don't remember or bother anymore.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;So please, allow the full RSS&lt;/b&gt; feed if your income isn't depending on that.&lt;br /&gt;&lt;br /&gt;Apparently full RSS exposes you to content thefts and may reduce the amount of visitors on your site, but there are also different opinions. One of the best points is that (usually) you're not blogging to get more visitors but to get people to read what you write (if you are just trying to get visitors, I'm not interested about that). By allowing the full RSS you make it easier, so the amount of readers should increase. For example &lt;a href="http://www.blogkori.com/should-i-offer-a-full-rss-feed-to-my-blog-readers-why/"&gt;Tamal&lt;/a&gt;&amp;nbsp;and some others seem to be supporting this point of view.&lt;br /&gt;&lt;br /&gt;Enabling full feed is caring. It means you care about your readers more than you want to profit from they visiting your site.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-888794460690842464?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/888794460690842464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/allow-full-rss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/888794460690842464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/888794460690842464'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/allow-full-rss.html' title='Allow full RSS'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2120119373948049607</id><published>2012-01-22T18:56:00.000+02:00</published><updated>2012-01-22T20:34:00.840+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='About this blog'/><title type='text'>The language of the site</title><content type='html'>&lt;div style="text-align: justify;"&gt;From now on I'll be using both Finnish and English here, even though it's stupid to mix multiple languages inside one website. However most of the people come here using Google so they'll probably not find sites written in Finnish anyway.&amp;nbsp;The reason I want to use also Finnish is that I'm not native English speaker and sometimes it doesn't make sense to write everything in English. I've some school works written in Finnish that I could share, but they are not important enough to be translated.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;It's not hard to guess that English is the most widespread language in internet; &lt;a href="http://w3techs.com/technologies/overview/content_language/all"&gt;56,5 % of websites were using English as their content language in December 2011&lt;/a&gt;, and &lt;a href="http://www.internetworldstats.com/stats7.htm"&gt;26,8 % of all internet users were speaking English in 31.05.2011&lt;/a&gt;. Sometimes it feels a bit useless to write anything in Finnish as there are less than 5,5 million Finns in the world and our field is so English oriented. I even did a lot of my studies in English because we had so many foreign students.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2120119373948049607?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2120119373948049607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/language-of-site.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2120119373948049607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2120119373948049607'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/language-of-site.html' title='The language of the site'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8964310446529902965</id><published>2012-01-18T10:09:00.004+02:00</published><updated>2012-01-19T15:24:08.149+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Galaxy S Plus'/><category scheme='http://www.blogger.com/atom/ns#' term='toys'/><title type='text'>My Samsung Galaxy S Plus</title><content type='html'>&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;(In Finnish about the prize: Galaxy S Plussaa saa DNAlta hintaan 9 € / kk x 24. Ainakin aiemmin sai myös puolimegaisen netin 24 kk sopparilla 2 € / kk, mutta en tiedä onko tuo enää voimassa.)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I finally bought a new phone and here is a short review and introduction about it. First some pictures:&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-X6TJR5jmZNU/TxZ4w_-ZfHI/AAAAAAAABRo/vSW28euk3qU/s1600/IMG_4070.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-X6TJR5jmZNU/TxZ4w_-ZfHI/AAAAAAAABRo/vSW28euk3qU/s320/IMG_4070.JPG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Samsung Galaxy S Plus front&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NBgwsTDDnAA/TxZ4xsMcbzI/AAAAAAAABRw/AJIknWp57gw/s1600/IMG_4071.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-NBgwsTDDnAA/TxZ4xsMcbzI/AAAAAAAABRw/AJIknWp57gw/s320/IMG_4071.JPG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Samsung Galaxy S back&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Technical&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;You can read more comprehensive review at&amp;nbsp;&lt;a href="http://www.gsmarena.com/samsung_galaxy_s_plus-review-623.php"&gt;GSM Arena&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Galaxy S has Qualcomm MSM8255T Snapdragon chipset with clock speed of 1,4 GHz and Adreno 205 graphics. Battery is 1650 mAh. The screen is 4" SuperAMOLED with WVGA (480x800) resolution and 16M colors.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Phones physical size is 122.4 x 64.2 x 9.9 mm and weight 119 g. It fits easily to my hand but the plastic coating is very slippery and I'm planning buying Case Mates Barely There for this. The phone is not the prettiest one, but it doesn't look bad either. I don't like the physical home button.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Galaxy S Plus has 512 MB of ram and 8 GB of internal storage. It supports MicroSD up to 32 GB. The internal storage is easily enough for my usage and I can get a bigger MicroSD card if I need, but 512 MB ram does feel a bit small.&amp;nbsp;Android leaves about 352 of it for the applications and at the moment I'm using 313 of it. The camera is not that good, 5 MP without flash. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Android version is 2.3.5 (Gingerbread).&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Practical&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First some screen captures. Business Calendar and Android news and weather widget as well as links to some important apps:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-o_Q6NBWb9yA/TxZ5qiRnF5I/AAAAAAAABSE/t1ZWzWx_FbI/s1600/SC20120116-015713.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-o_Q6NBWb9yA/TxZ5qiRnF5I/AAAAAAAABSE/t1ZWzWx_FbI/s320/SC20120116-015713.png" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Tweetdeck widget and links to social media apps:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-bhztRr-RmJE/TxZ5r8lb85I/AAAAAAAABSM/h5qIERdfHuo/s1600/SC20120116-015728.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-bhztRr-RmJE/TxZ5r8lb85I/AAAAAAAABSM/h5qIERdfHuo/s320/SC20120116-015728.png" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Rest of the apps I use regularly, Tapatalk, Orange Diary, Kindle, Google Reader and some other Google apps and others hidden in the two folders.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1MCJstcnGac/TxZ6qpp6tOI/AAAAAAAABSk/vWjQUlMNVwE/s1600/SC20120116-015734.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-1MCJstcnGac/TxZ6qpp6tOI/AAAAAAAABSk/vWjQUlMNVwE/s320/SC20120116-015734.png" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I use my Galaxy S Plus a lot. I use it as a calendar and mail, for keeping diary or writing (short) notes, for following social media, for instant messaging, for reading discussion forums, for tracking my training... I'm very pleased on how it replaces laptop on many tasks and I don't always need to start my computer to do something. I even started using this for reading books. With my usage the battery lasts about a day. It might survive two days, but it's an annoying feeling not to be sure about it, so practically I charge it each night.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Of course I would have bought Galaxy Nexus or S II if I had the money, but Galaxy S Plus was much better prized for me and at the same time I got cheap mobile broadband so I'm pleased. Now I also know very well what I want from a smart phone when I'm buying one the next time.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Here are some apps I like:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=mikado.bizcalpro&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsIm1pa2Fkby5iaXpjYWxwcm8iXQ.."&gt;Business Calendar&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I wasn't pleased with the original calendar as it didn't show texts of the appointments in the week view. I also needed different kinds of widgets. Business Calendar has been working well and you have a lot of widgets to choose from. It is a bit expensive but on the other hand, you only buy it for once, calendar is one of the main features in smart phones for me, and Business Calendar is good.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It's annoying that Google doesn't offer an app for tasks nor public API to use their task list, but to mobile browser version of it is OK. I've made a link to it to my home screen.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.acj0.orangediaryproa&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5hY2owLm9yYW5nZWRpYXJ5cHJvYSJd"&gt;Orange Diary&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I use this for keeping diary and writing notes. There are a lot of free options too (I tested Memoires and Diaro) but I didn't like them that much. Usability and appearance are important for me and I think Orange Diary matches well my expectations. It also has good import and export functions. Evernote was too expensive for me.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.ceruleanstudios.trillian.android&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5jZXJ1bGVhbnN0dWRpb3MudHJpbGxpYW4uYW5kcm9pZCJd"&gt;Trillian&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I'm using Trillian for all instant messaging. It has been working well so far, but you need to live with advertises. They could be removed by paying 1 € per month.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.thedeck.android.app&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS50aGVkZWNrLmFuZHJvaWQuYXBwIl0."&gt;Tweetdeck (Twitter and Facebook)&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Tweetdeck is a handy app if you use both Twitter and Facebook. You can get messages from both services to one widget on the home screen and also send messages to both of them. It's a pity that you can't add also Google Plus.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.google.android.apps.plus&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLnBsdXMiXQ.."&gt;Google Plus&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For me Google Plus beats Twitter and Facebook what it comes to features. The only problem is that people don't use it. Android app for Google Plus is ok, but I wonder why they don't offer any widgets. I'd like to see the most important messages on my home screen.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.google.android.stardroid&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5nb29nbGUuYW5kcm9pZC5zdGFyZHJvaWQiXQ.."&gt;Google Sky Map&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I don't use Google Sky Map very often, but it really is an interesting one. It's not perfect but works for identifying planets and the main asterisms.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.google.android.apps.reader&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5nb29nbGUuYW5kcm9pZC5hcHBzLnJlYWRlciJd"&gt;Google Reader&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I use RSS mainly to following blogs. Google Reader is not ideal solution but again, it works and I can use it both with my PC and Android. gReader might be a good alternative for this. I have a problem with Google Reader as I have followed a lot of blogs using Blogger, which means they are added to Google Reader, but I can't manage the blog list from there. Hopefully they are going to do something with this.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Google Maps&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Lack of navigation (in Finland) is a bit shortage but otherwise Google Maps is good. Often it's enough to see yourself and the destination on the map.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.endomondo.android&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5lbmRvbW9uZG8uYW5kcm9pZCJd"&gt;Endomondo&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I don't run that much anymore, but Endomondo is an easy way tracking your walks. I was surprised how well the GPS tracking works even when I keep the phone in my pocket.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.quoord.tapatalkpro.activity&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5xdW9vcmQudGFwYXRhbGtwcm8uYWN0aXZpdHkiXQ.."&gt;Tapatalk&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I like reading forums using my Android and Tapatalk makes this much easier. Lack of support on some discussion forums is annoying.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.amazon.kindle&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5hbWF6b24ua2luZGxlIl0."&gt;Kindle&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was surprised that it's possible to read even books on my 4" screen. I need to test reading longer times in a row, but so far it has been surprisingly pleasing.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="https://market.android.com/details?id=com.yle.webtv&amp;amp;feature=search_result#?t=W251bGwsMSwyLDEsImNvbS55bGUud2VidHYiXQ.."&gt;YLE Areena&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This is an app for national Finnish TV channel. I use this mainly to check news.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://market.android.com/details?id=org.wikipedia&amp;amp;feature=search_result#?t=W251bGwsMSwxLDEsIm9yZy53aWtpcGVkaWEiXQ.."&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Official app for Wikipedia.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Btw, I hadn't realized our camera had became such a monster:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xiwIK1rZO7A/TxZ4vFUMUrI/AAAAAAAABRc/Y33rJVLCZzU/s1600/2012-01-18+09.38.36.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-xiwIK1rZO7A/TxZ4vFUMUrI/AAAAAAAABRc/Y33rJVLCZzU/s320/2012-01-18+09.38.36.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Canon EOS 550D&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Using this requires more skillz than I have.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br class="Apple-interchange-newline" /&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/5162137887150660076-8964310446529902965?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8964310446529902965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/my-samsung-galaxy-s-plus.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8964310446529902965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8964310446529902965'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2012/01/my-samsung-galaxy-s-plus.html' title='My Samsung Galaxy S Plus'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-X6TJR5jmZNU/TxZ4w_-ZfHI/AAAAAAAABRo/vSW28euk3qU/s72-c/IMG_4070.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-1236352373280096263</id><published>2011-12-23T13:47:00.001+02:00</published><updated>2011-12-23T13:51:05.194+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Python test file creation</title><content type='html'>filenames = open('TestingFilenames.txt', 'r')&lt;br /&gt;for line in filenames:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; newFile = open(line.strip(), 'w')&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; newFile.write(line)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; newFile.close()&lt;br /&gt;filenames.close()&lt;br /&gt;&lt;br /&gt;Extremely simple script to create testing files - something I need to do quite often. File names in the file must be on separate lines.&lt;br /&gt;&lt;br /&gt;TestingFilenames.txt&lt;br /&gt;FileNameOne.txt&lt;br /&gt;FileNameTwo.txt&lt;br /&gt;&lt;br /&gt;Would produce two files, FileNameOne.txt and FileNameTwo.txt, both containing one line telling their file name.&lt;br /&gt;&lt;br /&gt;Btw, I love Python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-1236352373280096263?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1236352373280096263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/12/python-test-file-creation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1236352373280096263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1236352373280096263'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/12/python-test-file-creation.html' title='Python test file creation'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-7689165192882369432</id><published>2011-11-17T13:23:00.001+02:00</published><updated>2011-11-19T20:13:29.643+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>An article about Java Webstart</title><content type='html'>&lt;div style="text-align: justify;"&gt;We have needed to work with Java Webstart with Louhigames' first game, Bystanders. One helpful person linked me a good article about the technology and I wanted to post it here so I can find it later:&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.techrepublic.com/article/work-with-java-web-start-beyond-the-sandbox/5035300"&gt;TechRepublic: Work with Java Web Start beyond the sandbox&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-7689165192882369432?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7689165192882369432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/11/article-about-java-webstart.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7689165192882369432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7689165192882369432'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/11/article-about-java-webstart.html' title='An article about Java Webstart'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-376299313850304646</id><published>2011-11-15T22:57:00.001+02:00</published><updated>2011-11-15T23:25:58.690+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Bystanders'/><category scheme='http://www.blogger.com/atom/ns#' term='Louhigames'/><title type='text'>Bystanders gameplay demo updated</title><content type='html'>&lt;div style="text-align: justify;"&gt;We (&lt;a href="http://www.louhigames.fi/"&gt;Louhigames&lt;/a&gt;) released the Bystandes gameplay demo on Monday and luckily we have already received some useful feedback we can base the future development on. We made some changes already.&lt;br /&gt;&lt;br /&gt;We improved the way players control the character, so if you tried it on Monday and didn't like it, I recommend you to try again now.&amp;nbsp;We have also modified the game scenario and it should be easier now. Boxes and the shelter also repair as the time goes by, so they last longer. Moving the boxes is also easier. You don't need to point the box you want to grab with the mouse. Instead you just do a right click and the character grabs the box that is in front of him. Right click again to release the box.&lt;/div&gt;&lt;br /&gt;Releasing a demo has been fun and educational. Once again we realized that developers are blind what it comes to their own creations.&lt;br /&gt;&lt;br /&gt;The latest version:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://www.java.com/js/deployJava.js"&gt;&lt;/script&gt;    &lt;script&gt;        // using JavaScript to get location of JNLP file relative to HTML page        var dir = location.href.substring(0, location.href.lastIndexOf('/')+1);        var url = "http://games.louhigames.fi/~louhi216/Bystanders/bystanders.jnlp";        deployJava.createWebStartLaunchButton(url, '1.6.0');    &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-376299313850304646?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/376299313850304646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/11/bystanders-gameplay-demo-updated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/376299313850304646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/376299313850304646'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/11/bystanders-gameplay-demo-updated.html' title='Bystanders gameplay demo updated'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5028016307312312292</id><published>2011-11-14T12:25:00.001+02:00</published><updated>2011-11-19T20:15:15.710+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Bystanders'/><category scheme='http://www.blogger.com/atom/ns#' term='Louhigames'/><title type='text'>Working with the Bystanders gameplay demo</title><content type='html'>&lt;div style="text-align: justify;"&gt;Louhigames has finally released &lt;b&gt;the first gameplay demo of Bystanders&lt;/b&gt;. We announced over a month ago that we would release something playable, and luckily we were able to keep that promise. The demo doesn't contain much but hopefully you can see what we are trying to create. Click the button below to check it out!&lt;/div&gt;&lt;br /&gt;&lt;script src="http://www.java.com/js/deployJava.js"&gt;&lt;/script&gt;    &lt;script&gt;        // using JavaScript to get location of JNLP file relative to HTML page        var dir = location.href.substring(0, location.href.lastIndexOf('/')+1);        var url = "http://games.louhigames.fi/~louhi216/Bystanders/bystanders.jnlp";        deployJava.createWebStartLaunchButton(url, '1.6.0');    &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The game requires Java to be installed and it's using Java Webstart technology. Read more about the game from the &lt;a href="http://www.louhigames.fi/2011/11/2011-46-bystanders-early-gameplay-demo.html"&gt;Louhigames website&lt;/a&gt;. Videos can be found from &lt;a href="http://www.youtube.com/user/louhigames"&gt;Louhigames' Youtube channel&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;All feedback you can give is very valuable to us.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Edit: Fixed an annoying typo from the header.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5028016307312312292?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5028016307312312292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/11/wirking-with-bystanders-gameplay-demo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5028016307312312292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5028016307312312292'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/11/wirking-with-bystanders-gameplay-demo.html' title='Working with the Bystanders gameplay demo'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5249709320592244230</id><published>2011-10-22T10:34:00.001+03:00</published><updated>2011-10-22T10:34:35.451+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Usability'/><title type='text'>Weblog usability by Nielsen</title><content type='html'>Jakob Nielsen has written a text about top ten design issues in blogs:&amp;nbsp;&lt;a href="http://www.useit.com/alertbox/weblogs.html"&gt;http://www.useit.com/alertbox/weblogs.html&lt;/a&gt;&amp;nbsp;I'll go through them to see how I could improve mine. Nielsen has some good arguments even though some of them are more directed to "professional" bloggers.&lt;br /&gt;&lt;br /&gt;Usability evaluation according to Nielsen's top ten design issues in blogs:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. No Author Biographies&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I think this is quite well covered. Nielsen says that &lt;a href="http://www.useit.com/alertbox/about-us-pages.html"&gt;for companies the about us section is one of the most important things&lt;/a&gt;&amp;nbsp;to have on a web site. For individuals it translates to "about me". I have more info about me here than you care, but it could be better organized.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;2. No Author Photo&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I do have a picture of myself here, but not a good one. I agree that it's important to see the picture of the writer since it always tells something about them and helps to remember. I never remember names, but recognizing a familiar face might help me remember what the blog or writer is about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;3. Nondescript Posting Titles&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I'll improve this, sometimes I have horrible titles. Usually it happens when I violate this:&lt;br /&gt;&lt;blockquote&gt;Certainly, you shouldn't post when you have nothing to say. &lt;a href="http://www.useit.com/alertbox/20030811.html"&gt;Polluting cyberspace&lt;/a&gt; with excess information is a sin.&lt;/blockquote&gt;Point taken.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Links Don't Say Where They Go&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Guilty again. I haven't followed the rule of "Tell people where they're going and what they'll find at the other end of the link.". It has been too easy to add links like &lt;a href="http://www.growingtoprogram.blogspot.com/"&gt;this&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.growingtoprogram.blogspot.com/"&gt;this&lt;/a&gt;&amp;nbsp;and somehow you sometimes think that you are being smart by doing that. Wrong.&lt;/div&gt;&lt;br /&gt;&lt;b&gt;5. Classic Hits are Buried&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This means that I should offer links to some popular or valuable texts so that people find them more easily. I've had an automatically updated top three list on the bottom of the blog, but maybe it isn't enough. The problem is, that I don't think I have such texts that "have lasting value outside your fanbase". Often my texts are simple how-to's to help me remember how to use some Eclipse extension or so. I need to think about this.&lt;/div&gt;&lt;br /&gt;&lt;b&gt;6. The Calendar is the Only Navigation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I do use categorization in the form of labels here in Blogger. I just don't think it is working very well. I've also had a search box somewhere, but at one point it didn't work either. It should be on the top of the page but I've never had the time to embed it there. Navigation is often the biggest problem in blogs (for me) so I should make sure that categorization and customized search works. Actually I have a feeling that I might have written about this topic earlier, but my custom search gives no hits for "nielsen", which can't be right.&lt;/div&gt;&lt;br /&gt;&lt;b&gt;7. Irregular Publishing Frequency&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This advice doesn't suite this blog well, because I don't do this for money nor to get a lot of followers. I just don't have enough to say for that. Nielsen says that you should have a posting schedule and stick to it, but you shouldn't post when you have nothing to say. Solution is to hold back some ideas for the times when you can't find anything else to write about. Probably a good idea, but too much work for me.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;It's definitely sure that you lose readers if you post very rarely, but aren't the most of the people using some service to follow blogs, like Google Reader? I've a lot of blogs added to there and it doesn't matter how rarely they blog, I'll not miss it nor will I remove they from my list. It's more likely that I remove them if they post content I don't find useful.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;8. Mixing Topics&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;This is a problematic aspect to consider. I've used this blog as a personal blog to post about things I find interesting. Some time ago I used to post about running, but I don't run that much anymore. The problem is that I don't write enough to maintain multiple blogs but I still want to write about various topics. I've had a studying blog too, but at some point I've forgotten to update it. It was also in Finnish since I didn't think it would be interesting for English audience.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;9. Forgetting That You Write for Your Future Boss&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I've been thinking about this a lot before, and decided that it isn't a problem. I don't usually write about topics that my future (or current) boss could find negative. More likely this is about maintaining and updating my professional skills and should be a positive thing.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;10. Having a Domain Name Owned by a Weblog Service&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;This isn't such a problem for my kind of amateur blogger, but I've been planning to buy my own domain. It gives a nice touch to the blog (or website). I would like to combine my CV, blog and homepage under one domain.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5249709320592244230?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5249709320592244230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/10/weblog-usability-by-nielsen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5249709320592244230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5249709320592244230'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/10/weblog-usability-by-nielsen.html' title='Weblog usability by Nielsen'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-6600446525802235583</id><published>2011-10-14T18:19:00.002+03:00</published><updated>2011-10-14T18:19:37.633+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Studying'/><category scheme='http://www.blogger.com/atom/ns#' term='Louhigames'/><title type='text'>Still busy</title><content type='html'>&lt;div style="text-align: justify;"&gt;Lately I've been coding the first game of Louhigames and I also started doing my master's thesis about usability. We decided to release a &lt;b&gt;playable demo of the LLD on 14th November 2011&lt;/b&gt;! We don't know exactly what it is going to contain, but hopefully it's already enjoyable gaming experience then. Check more about the game on &lt;a href="http://www.louhigames.fi/2011/10/2011-40-good-news.html"&gt;louhigames.fi&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;My master's thesis will be about usability, more precisely about the usability of health care systems. I hope it's finished on the spring 2012, but a lot of work needs to be done in order to achieve that. Now I'm just gathering references for the writing and reading &lt;a href="http://www.id-book.com/"&gt;Interaction Design&lt;/a&gt;. Luckily the topic is interesting and I have a will to finish it. I might be able to finish my studies on the spring, which would be more than great.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This was mainly just an advertise about Louhigames, I'll post updates about the game development in the future too.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Btw, I'm still reading the &lt;b&gt;Pragmatic Programmer&lt;/b&gt;, and it definitely is a good book. I don't agree on all the topics, but they all are well justified.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6600446525802235583?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6600446525802235583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/10/still-busy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6600446525802235583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6600446525802235583'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/10/still-busy.html' title='Still busy'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-3934778095712578215</id><published>2011-09-24T12:23:00.000+03:00</published><updated>2011-09-24T12:23:22.451+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Louhigames'/><title type='text'>Louhigames</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've been busy with a new project, &lt;a href="http://www.louhigames.fi/"&gt;Louhigames&lt;/a&gt;. This is my (and my friend's) latest effort to really start creating games. We use Java to build small games that are graphically simple, but have some new ideas and cool features. This is a learning process and we must start easy, or we will fail. It's better to release a small game, than fail a big one. I also like more about indie than AAA games nowadays. Probably because I've used to play that kind of games when I was younger, but also because they can surprise you, and they don't usually demand that much time.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.louhigames.fi/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="88" src="http://1.bp.blogspot.com/-SluroNBpmiA/Tn2edmKzp4I/AAAAAAAAA_U/utb0yBTgGFA/s400/LouhigamesRedLogoTransparent.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Go ahead and take look on our website at &lt;a href="http://www.louhigames.fi/"&gt;www.louhigames.fi&lt;/a&gt;. Feel free to give &lt;a href="http://www.louhigames.fi/p/feedback.html"&gt;feedback&lt;/a&gt;&amp;nbsp;about anything. You can also contact us using &lt;a href="mailto:contact@louhigames.fi"&gt;contact@louhigames.fi&lt;/a&gt;. If you are interested in what we do or like following indie developers, follow us at:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.louhigames.fi/"&gt;Website / blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://twitter.com/#!/louhigames"&gt;Twitter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.facebook.com/pages/Louhigames/238450622871634"&gt;Facebook&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Things are in the beginning and we don't have any games to download, but look at the early game play video of the first Louhigames' game:&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/Va13HGX3PWI/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Va13HGX3PWI&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/Va13HGX3PWI&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I will be using a lot of time to Louhigames in the future, and I hope you'll enjoy our games once we get them out!&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3934778095712578215?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3934778095712578215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/09/louhigames.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3934778095712578215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3934778095712578215'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/09/louhigames.html' title='Louhigames'/><author><name>Arttu Viljakainen</name><uri>https://profiles.google.com/100885785914405382724</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-gamod1zDKFY/AAAAAAAAAAI/AAAAAAAAA4g/27OafqFm6Lk/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-SluroNBpmiA/Tn2edmKzp4I/AAAAAAAAA_U/utb0yBTgGFA/s72-c/LouhigamesRedLogoTransparent.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-3211322934243153785</id><published>2011-08-19T14:58:00.001+03:00</published><updated>2011-08-19T14:58:36.300+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>VisualVM - Profiling Java applications</title><content type='html'>Did some Googling this morning to find a proper Java profiler to be used with Eclipse and found &lt;a href="http://visualvm.java.net/docindex.html#getting_started"&gt;VisualVM&lt;/a&gt;. I didn't know I had it already, since nowadays it comes with your JDK. &lt;br /&gt;&lt;a href="http://visualvm.java.net/docindex.html#getting_started"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;If you have relatively new JDK, you can find VisualVM from your JDK\bin folder. You can launch it from Eclipse with &lt;a href="http://visualvm.java.net/eclipse-launcher.html#installation"&gt;VisualVM Launcher&lt;/a&gt;. You cand find good instructions there but I added some pictures since some things did look a bit different in my IDE. I had some strange problems when I copied the files to my Eclipse installation folder and the right option in Preferences didn't show up. Make sure all the files go to right places.&lt;br /&gt; &lt;br /&gt; Set up the VisualVM in Preferences. Remember to link to JDK, not JRE:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--pmg6hKAVO8/Tk5NiTrtIKI/AAAAAAAAAhw/dXjQlkKHHqY/s1600/VisualVM+Launching.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/--pmg6hKAVO8/Tk5NiTrtIKI/AAAAAAAAAhw/dXjQlkKHHqY/s320/VisualVM+Launching.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Add new Run Configuration:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9yT1-n8lvLA/Tk5NjVl6h9I/AAAAAAAAAh4/HcRrBXS7tfY/s1600/VisualVM+Run+Congigurations.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://2.bp.blogspot.com/-9yT1-n8lvLA/Tk5NjVl6h9I/AAAAAAAAAh4/HcRrBXS7tfY/s320/VisualVM+Run+Congigurations.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt; You can choose the VisualVM as a launcher from the place I've circled:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-GAjZ_Spv8_w/Tk5Ni0NSCzI/AAAAAAAAAh0/UVhaCbl__OI/s1600/VisualVM+Run+Configuration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://2.bp.blogspot.com/-GAjZ_Spv8_w/Tk5Ni0NSCzI/AAAAAAAAAh0/UVhaCbl__OI/s320/VisualVM+Run+Configuration.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt; And finally, this kind of results you may expect:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-HJFJlLJ_SY4/Tk5POXBDoeI/AAAAAAAAAiA/0VHz6m97eE4/s1600/VisualVM+Statistics.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="199" src="http://1.bp.blogspot.com/-HJFJlLJ_SY4/Tk5POXBDoeI/AAAAAAAAAiA/0VHz6m97eE4/s320/VisualVM+Statistics.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3211322934243153785?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3211322934243153785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/visualvm-profiling-java-applications.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3211322934243153785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3211322934243153785'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/visualvm-profiling-java-applications.html' title='VisualVM - Profiling Java applications'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/--pmg6hKAVO8/Tk5NiTrtIKI/AAAAAAAAAhw/dXjQlkKHHqY/s72-c/VisualVM+Launching.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-9195669809074559316</id><published>2011-08-12T21:10:00.000+03:00</published><updated>2011-08-12T21:10:31.377+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><title type='text'>Firesoft on other sites</title><content type='html'>I made a page for Firesoft that you can access through the menu or by clicking &lt;a href="http://growingtoprogram.blogspot.com/p/firesoft.html"&gt;here&lt;/a&gt;. Firesoft is now available also at &lt;a href="http://www.softpedia.com/get/System/Launchers-Shutdown-Tools/Firesoft.shtml"&gt;Softpedia&lt;/a&gt; and &lt;a href="http://www.softoxi.com/firesoft.html"&gt;Softoxi&lt;/a&gt;.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-9195669809074559316?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/9195669809074559316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/firesoft-on-other-sites.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9195669809074559316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9195669809074559316'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/firesoft-on-other-sites.html' title='Firesoft on other sites'/><author><name>Arttu</name><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-5162137887150660076.post-5259104078169407620</id><published>2011-08-07T18:27:00.001+03:00</published><updated>2011-08-07T18:27:43.541+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><title type='text'>Firesoft 1.5.1</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Firesoft version 1.5.1: &lt;a href="http://code.google.com/p/firesoft/downloads/list"&gt;Download for free for Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What's new:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You can add web addresses as items (in addition to programs, files and folders)&lt;/li&gt;&lt;li&gt;Fixed "Remove obsolet&lt;/li&gt;&lt;/ul&gt;Check &lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;source code&lt;/a&gt; and &lt;a href="http://growingtoprogram.blogspot.com/search/label/Firesoft"&gt;older updates&lt;/a&gt;. Any feedback is &lt;a href="https://spreadsheets.google.com/spreadsheet/viewform?hl=en_US&amp;amp;formkey=dFMzcGFMejNhcUVmaE9wRjIzb1NQS3c6MQ#gid=0"&gt;appreciated&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There was no reason why it wasn't possible to add web addresses to Firesoft so I made it possible. You can add them from the settings view.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GJ3gWFtEHXc/Tj6rzQAQGXI/AAAAAAAAAhc/D7g5CclTJQg/s1600/Firesoft+settings+1.5.1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="252" src="http://4.bp.blogspot.com/-GJ3gWFtEHXc/Tj6rzQAQGXI/AAAAAAAAAhc/D7g5CclTJQg/s320/Firesoft+settings+1.5.1.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Add item.&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Just type name and address...&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-XsEBKSabNZs/Tj6rx8YmmXI/AAAAAAAAAhU/xjlHkU3CAYY/s1600/Firesoft+1.5.1+add+item.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="250" src="http://1.bp.blogspot.com/-XsEBKSabNZs/Tj6rx8YmmXI/AAAAAAAAAhU/xjlHkU3CAYY/s320/Firesoft+1.5.1+add+item.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Adding item.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;...and you are ready to go:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0ghXALb7Fec/Tj6rykKIllI/AAAAAAAAAhY/PNoyQGlO134/s1600/Firesoft+1.5.1+open+uri.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="251" src="http://4.bp.blogspot.com/-0ghXALb7Fec/Tj6rykKIllI/AAAAAAAAAhY/PNoyQGlO134/s320/Firesoft+1.5.1+open+uri.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Launch website.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I already published 1.5 version but had to pull it back because removing obsolet items didn't work with web addresses - it would have removed all of them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5259104078169407620?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5259104078169407620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/firesoft-151.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5259104078169407620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5259104078169407620'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/firesoft-151.html' title='Firesoft 1.5.1'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-GJ3gWFtEHXc/Tj6rzQAQGXI/AAAAAAAAAhc/D7g5CclTJQg/s72-c/Firesoft+settings+1.5.1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8954118807469431573</id><published>2011-08-06T10:47:00.001+03:00</published><updated>2011-08-06T10:48:40.806+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphical User Interfaces'/><title type='text'>Firesoft 1.4</title><content type='html'>&lt;br /&gt;&lt;b&gt;Firesoft 1.4 &lt;/b&gt;released, &lt;a href="http://code.google.com/p/firesoft/downloads/list"&gt;get it for free from Google Code&lt;/a&gt;. You can also check the &lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;source code&lt;/a&gt; (not recommended). Windows only due to hotkey support. Firesoft is a program launcher that you can use to open programs and files, just like the Windows 7 start menu.&lt;br /&gt;&lt;br /&gt;If you try the program, please fill the &lt;a href="https://spreadsheets.google.com/spreadsheet/viewform?hl=en_US&amp;amp;formkey=dFMzcGFMejNhcUVmaE9wRjIzb1NQS3c6MQ#gid=0"&gt;feedback form&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What's new?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Improved GUI&lt;/li&gt;&lt;li&gt;Fixed character encoding problem when reading items from the file with Sax&lt;/li&gt;&lt;li&gt;Improved search box&lt;/li&gt;&lt;li&gt;Mildly toned searching&lt;/li&gt;&lt;li&gt;Ability to choose whether we show window decorations or not, and if the window should stay on top&lt;/li&gt;&lt;li&gt;Added a feedback form that opens by pressing a button in the GUI&lt;/li&gt;&lt;li&gt;Program home page can also be opened from the GUI&lt;/li&gt;&lt;li&gt;Improved renaming for the items&lt;/li&gt;&lt;/ul&gt;---&lt;br /&gt;&lt;br /&gt;I started my summer holiday on wednesday so... I've been mostly coding. Not really, we got a puppy (scroll down for picture) and it has kept me away from sleeping so I've used my time to update my old project, &lt;a href="http://growingtoprogram.blogspot.com/search/label/Firesoft"&gt;Firesoft&lt;/a&gt;. This is how the new 1.4 version looks:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4vK4arFnB6M/TjzjglfgusI/AAAAAAAAAhM/dWjt-EcaFaw/s1600/Main+view.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="59" src="http://3.bp.blogspot.com/-4vK4arFnB6M/TjzjglfgusI/AAAAAAAAAhM/dWjt-EcaFaw/s400/Main+view.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Firesoft 1.4&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;With settings view open:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-TA7SNWKProQ/TjzjTljvFiI/AAAAAAAAAhI/H7gxvInMCNg/s1600/Settings+view.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="234" src="http://4.bp.blogspot.com/-TA7SNWKProQ/TjzjTljvFiI/AAAAAAAAAhI/H7gxvInMCNg/s320/Settings+view.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Settings view.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I'm pleased with the result, but go ahead and compare it with &lt;a href="http://growingtoprogram.blogspot.com/2010/09/firesoft-13_29.html"&gt;1.3 version&lt;/a&gt; and tell me what you think.&lt;br /&gt;&lt;br /&gt;You can edit the "search" name and path of your items.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-BOBAHWdvZLU/TjzjQWBjdSI/AAAAAAAAAg4/B6IrfW0cEp4/s1600/Rename.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="234" src="http://1.bp.blogspot.com/-BOBAHWdvZLU/TjzjQWBjdSI/AAAAAAAAAg4/B6IrfW0cEp4/s320/Rename.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Renaming.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Notice how buttons on the right change as you start editing any of the items.&lt;br /&gt;&lt;br /&gt;There's also completely new settings part below the item list. Now you can choose whether the program window is "decorated" or not so you can move it. You can also select it to stay on top all the time.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-4XW0DXUe9Uc/TjzjS-46cyI/AAAAAAAAAhE/9iE2kU5Qdq8/s1600/Settings+details.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="58" src="http://3.bp.blogspot.com/-4XW0DXUe9Uc/TjzjS-46cyI/AAAAAAAAAhE/9iE2kU5Qdq8/s320/Settings+details.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Settings.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I've made a &lt;a href="https://spreadsheets.google.com/spreadsheet/viewform?hl=en_US&amp;amp;formkey=dFMzcGFMejNhcUVmaE9wRjIzb1NQS3c6MQ#gid=0"&gt;feedback form&lt;/a&gt; in Google Docs and there's a link to it in the software. Just click the "Give feedback" and the form should be opened to the browser. All feedback is appreciated.&lt;br /&gt;&lt;br /&gt;Earlier searching was done quite badly. You could only add one char at the time and if you deleted something, it showed in the search results one char late. I found example of implementing auto complete in JComboBox from &lt;a href="http://www.orbital-computer.de/JComboBox/"&gt;this website&lt;/a&gt; and it helped me to use document listener to detect any changes the user does.&lt;br /&gt;&lt;br /&gt;I also had an unicode problem with my SAX parser. I think it was similar to &lt;a href="http://stackoverflow.com/questions/5626978/java-xmlreader-not-clearing-multi-byte-utf-8-encoded-attributes"&gt;this in Stack Overflow&lt;/a&gt;. However, &lt;a href="http://www.mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/"&gt;this link&lt;/a&gt; helped me to correctly parse unicode characters with Sax. Send feedback you have problems with character encodings, it worked nicely with me.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resources in the text:&lt;br /&gt;&lt;a href="http://www.orbital-computer.de/JComboBox/"&gt;http://www.orbital-computer.de/JComboBox/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/"&gt;http://www.mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;This is the beast that has been keeping me up:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Xm2IxPUjhCk/Tjzv4tO5bFI/AAAAAAAAAhQ/pSHj1xPrO1w/s1600/IMG_0492_m.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="168" src="http://2.bp.blogspot.com/-Xm2IxPUjhCk/Tjzv4tO5bFI/AAAAAAAAAhQ/pSHj1xPrO1w/s320/IMG_0492_m.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Pusu&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8954118807469431573?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8954118807469431573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/firesoft-14.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8954118807469431573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8954118807469431573'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/08/firesoft-14.html' title='Firesoft 1.4'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-4vK4arFnB6M/TjzjglfgusI/AAAAAAAAAhM/dWjt-EcaFaw/s72-c/Main+view.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-468763137728223645</id><published>2011-07-21T14:46:00.001+03:00</published><updated>2011-07-21T14:46:22.124+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='My Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>Eclipse Shortcuts</title><content type='html'>&lt;br /&gt;&lt;a href="http://myfirstlovejava.blogspot.com/p/about-contact.html"&gt;Olivia Cassandrae&lt;/a&gt; has a good tutorials of Eclipse shortcuts: &lt;a href="http://myfirstlovejava.blogspot.com/2011/07/effective-eclipse-part-1.html%20"&gt; Effective Eclipse, Part 1&lt;/a&gt; and&lt;a href="http://myfirstlovejava.blogspot.com/2011/07/effective-eclipse-part-2.html"&gt; Effective Eclipse, Part 2&lt;/a&gt;. Go and read them, there are lots of things you'll find here. Here I'm just listing the commands that make sense to me, without any additional explaining (because she has done it already). &lt;br /&gt;&lt;br /&gt;Here is a link to an Google Docs file: &lt;a href="https://docs.google.com/document/d/15lT2nA0O1Lzq9WeoEZKBLL5jwe0Msiwwrxqp2HHAShU/edit?hl=en_US"&gt;Eclipse Shortcuts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Of course you can find all of these shortcuts from the Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + Shift + l &lt;/b&gt;Show shortcuts.&lt;br /&gt;&lt;br /&gt;Pressing it again opens you the view to edit them.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Moving in the text &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + j &lt;/b&gt;Incremental search. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + left or right &lt;/b&gt;Jump over word.&lt;br /&gt;&lt;b&gt;Ctrl + up or down &lt;/b&gt;Scroll up or down.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Alt + left or right &lt;/b&gt;Move to last edited.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + o &lt;/b&gt;Go to a member of a class.&lt;br /&gt;&lt;b&gt;Ctrl + l &lt;/b&gt;Go to line number you type.&lt;br /&gt;&lt;b&gt;Ctrl + q &lt;/b&gt;Go to last edited place.&lt;br /&gt;&lt;b&gt;Ctrl + t &lt;/b&gt;Go to sub-or supertype.&lt;br /&gt;&lt;b&gt;Ctrl + e &lt;/b&gt;Go to an open editor.&lt;br /&gt;&lt;b&gt;Ctrl + . or Ctrl + , &lt;/b&gt;Go to previous or next error or warning.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Editing text&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + d&lt;/b&gt; Delete line.&lt;br /&gt;&lt;b&gt;Alt + up or down &lt;/b&gt;Move selection up or down.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick fixes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + i &lt;/b&gt;Correct indentation.&lt;br /&gt;&lt;b&gt;Ctrl + Shift + f &lt;/b&gt;Format code.&lt;br /&gt;&lt;b&gt;Ctrl + Shift + o &lt;/b&gt;Fix imports.&lt;br /&gt;&lt;b&gt;Ctrl + 1 &lt;/b&gt;Open quickfix menu.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Moving between files or types&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + Shift + r &lt;/b&gt;Find and open a file.&lt;br /&gt;&lt;b&gt;Ctrl + Shift + t &lt;/b&gt;Open a type.&lt;br /&gt;&lt;b&gt;Ctrl + arrows &lt;/b&gt;Move between files you have edited.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;General&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ctrl + F11 &lt;/b&gt;Run application.&lt;br /&gt;&lt;b&gt;Ctrl + n &lt;/b&gt;New wizard.&lt;br /&gt;&lt;b&gt;Ctrl + m &lt;/b&gt;Maximize or minimize tab.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;These are just the most common ones. Go really read Olivia's articles, there are good advices for adding your own shortcuts too (like for generate getters/setters).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-468763137728223645?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/468763137728223645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/07/eclipse-shortcuts.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/468763137728223645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/468763137728223645'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/07/eclipse-shortcuts.html' title='Eclipse Shortcuts'/><author><name>Arttu</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5287349667043401056</id><published>2011-07-13T16:39:00.002+03:00</published><updated>2011-07-13T16:39:52.367+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Appraisals'/><category scheme='http://www.blogger.com/atom/ns#' term='Google+'/><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><category scheme='http://www.blogger.com/atom/ns#' term='My Toolkit'/><title type='text'>Google+</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've been using &lt;a href="https://plus.google.com/up/start/?sw=1&amp;amp;type=st"&gt;&lt;b&gt;Google+&lt;/b&gt;&lt;/a&gt; for some days now and it has all the potential to replace &lt;b&gt;Facebook &lt;/b&gt;and &lt;b&gt;Twitter &lt;/b&gt;and combine even more Google's services under one roof. It's much easier to see what information you're sharing and to change these settings. &lt;b&gt;Circles &lt;/b&gt;are a good invention to support for example "following" kind of activity. Currently I don't have many friends using Google+ so I mainly follow some Google employee's conversations about the service.&lt;br /&gt;&lt;br /&gt;Facebook started to feel obsolete for me for some time ago. I don't use it to have conversations, except private messages and occasional chatting. GMail is much better for sending private messages, and Google Talk is superior instant messaging protocol compared to Facebook chat (including voice &amp;amp; video). Sometimes I do want to share something, but Facebook just doesn't feel right for it because most of my "friends" there would definitely not be interested. Google+ feels more natural (you can add "so-called friends" circle as &lt;a href="https://plus.google.com/110398919759279012596/posts"&gt;+Jens Bergensten&lt;/a&gt; noted). Somehow it just feels more like Tweeting or blogging. There are also some promising features I haven't explored yet, like &lt;a href="http://www.youtube.com/watch?v=QN38vHZjWXw"&gt;Hangouts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;By the time Google announced Wave thrilled. However, I soon realized that it isn't going to work as long as it's not fully integrated to Gmail and Google Talk and it never was. So it soon perished regardless of all the potential (luckily they integrated real time editing to docs). This time they seem to be doing it right. Google+ is integrated to your Google account and uses for example Google Talk and Picasa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;There are also problems of course. Currently it's sometimes very hard to stay in track of comments of popular shares because everybody wants to leave his "exactly what I thought" or "spam lol" message. But I've already followed some awesome conversations between people I don't know at all, so this HAS potential! I has been some promising speculations of how Google is going to integrate gaming to Google+ (Android games ppl?).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;For me Google "did it again", I hope others will follow. Once again it's veeery interesting to follow how the competition will continue.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5287349667043401056?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5287349667043401056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/07/google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5287349667043401056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5287349667043401056'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/07/google.html' title='Google+'/><author><name>Arttu</name><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-5162137887150660076.post-2914217520717384669</id><published>2011-07-09T19:48:00.001+03:00</published><updated>2011-07-10T19:36:10.113+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Roguelike'/><title type='text'>Make Games - Finishing a Game</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://randomtower.blogspot.com/"&gt;Random Tower of Games&lt;/a&gt; pointed out this grreat article of finishing a game:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://makegames.tumblr.com/post/1136623767/finishing-a-game"&gt;Make Games - Finishing a Game&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;There are a lot of very good points there so read it. I'll only concentrate on the ones that are most appropriate for me.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 16px; line-height: 24px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="text-align: justify;"&gt;&lt;strong&gt;2. ACTUALLY START THE DAMN GAME&lt;/strong&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;I'm the kind of guy who has The Ultimate Game Plan in my mind. It makes me over plan the game causing some kind of &lt;a href="http://en.wikipedia.org/wiki/Feature_creep"&gt;feature creep&lt;/a&gt;. This actually begins before I even start implementing the damn game. When I finally do, I just keep on thinking that I should implement this and that and try to create the perfect design in the first place. It's not gonna happen. All these problems are mainly due to one problem: I haven't created many games, I don't have experience. At some point you just need to open your Eclipse and start doing something.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote style="text-align: justify;"&gt;&lt;b&gt;9. PUSH FORWARD&lt;/b&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;I have started to create a game and then... I get stuck. Usually things just keep on getting more complicated and it feels too overwhelming to continue working. Derek tells to push forward and I certainly should. One thing that helps to avoid this is to refactor the code when needed. Avoid over complicating the code. Starting implementing a new feature helps the motivation, but your game should be built so that it's easy to add new things. I'm trying achieve that in my current project.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;One technique that helps both starting the damn game and pushing forward is &lt;a href="http://www.artima.com/intv/tracer.html"&gt;tracer bullets&lt;/a&gt;. Seeing something really happening versus spending a lot of time building the whole feature at once is much more rewarding and motivating. It's like you get one feature and can continue on improving it seeing the results all the time.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote style="text-align: justify;"&gt;&lt;b&gt;11. STOP MAKING EXCUSES FOR STARTING OVER&lt;/b&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;At some point it always really feels like it would be easier just to start over avoiding the mistakes I've made in this game. But don't. You need to get something finished. It's never perfect anyway. In the other hand if you've been building a prototype, remember that they are meant to be thrown away.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote style="text-align: justify;"&gt;&lt;b&gt;13. CUT. IT. OUT.&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;The good old &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS&lt;/a&gt; principle. Derek has a good point that if you have a core concept that works, everything additional is just fluff you don't actually need and that might even ruin your core concepts. Additional features can always be added later or you can even build a new game resulting in having done two of them instead of none.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote style="color: #333333; font-family: Georgia, serif; font-size: 16px; line-height: 24px; text-align: justify;"&gt;&lt;strong&gt;3. DON’T ROLL YOUR OWN TECH IF YOU DON’T HAVE TO&lt;/strong&gt;&lt;/blockquote&gt;I'm lazy finding and learning new libraries that would usually help the development process remarkably. Somehow it's tempting to build everything yourself, but it is very rarely rational. All the time you spend on building the engine could have been used building the unique game itself, which is probably what you want to do. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As I said, there's a lot of other good points in &lt;a href="http://makegames.tumblr.com/post/1136623767/finishing-a-game"&gt;Derek's article&lt;/a&gt; so read it.&lt;br /&gt;&lt;br /&gt;I'm currently stuck with my &lt;a href="http://growingtoprogram.blogspot.com/search/label/Roguelike"&gt;roguelike&lt;/a&gt; because I try to do everything at once and can't get anything visible on the screen. I've made a plan of building a very simple game first to test all the partitions of my current plan and then start to flesh it out more. Hopefully I can release something visible game-like soon. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2914217520717384669?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://makegames.tumblr.com/post/1136623767/finishing-a-game' title='Make Games - Finishing a Game'/><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2914217520717384669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/07/make-games-finishing-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2914217520717384669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2914217520717384669'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/07/make-games-finishing-game.html' title='Make Games - Finishing a Game'/><author><name>Arttu</name><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-5162137887150660076.post-6268461741015656529</id><published>2011-06-16T15:26:00.000+03:00</published><updated>2011-06-16T15:26:50.739+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Appraisals'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Notch And Todd Howard: The One-On-One Interview - Features - www.GameInformer.com</title><content type='html'>&lt;a href="http://www.gameinformer.com/b/features/archive/2011/06/14/notch-and-todd-howard-the-one-on-one-interview.aspx"&gt;Notch And Todd Howard: The One-On-One Interview - Features - www.GameInformer.com&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This one-on-one interview is one of my favorites. Two excellent game developers talking about what they love, inspiring.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm also jealous for these guys, they're living a dream. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS. I was also testing Chrome's &lt;a href="https://chrome.google.com/webstore/detail/pengoopmcjnbflcjbmoeodbmoflcgjlk"&gt;Blog this!&lt;/a&gt;&amp;nbsp;plugin for Blogger, works like a charm.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6268461741015656529?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6268461741015656529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/notch-and-todd-howard-one-on-one.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6268461741015656529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6268461741015656529'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/notch-and-todd-howard-one-on-one.html' title='Notch And Todd Howard: The One-On-One Interview - Features - www.GameInformer.com'/><author><name>Arttu</name><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-5162137887150660076.post-4878134875665176819</id><published>2011-06-14T15:54:00.068+03:00</published><updated>2011-06-15T10:46:03.594+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='My Roguelike'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Roguelike'/><title type='text'>Launching a new project</title><content type='html'>&lt;div style="text-align: justify;"&gt;I've been wanting to launch a new project for a long time. Now I've decided that no matter how little I have time, I will find some to work with something I like. I'm not going to work 100% effectively with studies if I don't have anything else interesting going on anyway.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;My new project is reincarnation of an old one. I've tried to create a &lt;b&gt;roguelike&lt;/b&gt; &lt;a href="http://growingtoprogram.blogspot.com/p/how-did-i-became-programmer.html"&gt;before&lt;/a&gt;, first with Basic and then with Turbo Pascal. I'm not a perfect programmer now but then I was terrible! It's time to see what I could achieve with Java and mildly better skills. Python might be a better solution but for once I want to work with something that I am familiar with. I might do scripting support for Python if it's reasonable, I don't know. If you do know something about the topic, throw me a link or something!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TP52HMaym_I/AAAAAAAAASc/ClRhLVAO4bU/s1600/pelikuva.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g6jnLh81N64/TP52HMaym_I/AAAAAAAAASc/ClRhLVAO4bU/s320/pelikuva.jpg" width="279" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Roguelike from around 2003.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;I've been planning this for years... but only in my head. I've a good idea of what I want to do and what is an ideal roguelike from my understanding. I want to create &lt;b&gt;a modern roguelike&lt;/b&gt; that is hopefully easier to approach for new players and doesn't look as ascetic as old ones. I will probably use ASCII style graphics but with a modern twist. Again, I have a very cool image of the game in my head, but since I'm not good with graphics I don't know if I ever reach that point.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;My first attempt with graphics will be with &lt;a href="http://www.opengl.org/"&gt;OpenGL&lt;/a&gt; or to be specific, &lt;a href="http://lwjgl.org/"&gt;Lightweight Java Game Library, LWJGL&lt;/a&gt;. &amp;nbsp;I've played around with OpenGl once before, but in practice I'll need to start from the beginning which means you will not see fast progress in the beginning. &lt;a href="http://slick.cokeandcode.com/"&gt;Slick&lt;/a&gt; could be one option to utilize too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;I was going to use Git for this time, &lt;a href="http://growingtoprogram.blogspot.com/2011/06/resources-for-trying-out-git-with.html"&gt;but after trying it&lt;/a&gt;, I don't see any benefits for a lonely developer. SVN is familiar from older projects and I believe I use it better. I will probably take a private repository from &lt;a href="http://www.assembla.com/catalog/tag/free"&gt;Assembla&lt;/a&gt;. I don't want to put this open source in the beginning, maybe later. I will probably share parts of the code anyway.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;IDE will be Eclipse as always, why would I change it if it works.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Edit: Almost forget, I've started using &lt;a href="http://workflowy.com/"&gt;WorkFlowy&lt;/a&gt; for organizing my thoughts. I don't know yet if will I start using Mylyn with this one.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Currently I'm learning OpenGL and trying to get something visible on the screen so I could continue developing graph implementation for the map. I will write more about my game idea later. Making the idea work requires lots of hard thing like AI, but I try to start small and improve from there. Or maybe I should&amp;nbsp;&lt;a href="http://www.adom.de/blog/2011/06/11/jade-start-tiny-instead-of-small/"&gt;start tiny&lt;/a&gt;...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Development configuration in short&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Java with Eclipse&lt;/li&gt;&lt;li&gt;SVN in Assembla&lt;/li&gt;&lt;li&gt;OpenGL using LWJGL and maybe Slick&lt;/li&gt;&lt;li&gt;WorkFlowy, maybe Mylyn tasks&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4878134875665176819?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4878134875665176819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/launching-new-project.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4878134875665176819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4878134875665176819'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/launching-new-project.html' title='Launching a new project'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TP52HMaym_I/AAAAAAAAASc/ClRhLVAO4bU/s72-c/pelikuva.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2678179017473807427</id><published>2011-06-09T21:20:00.024+03:00</published><updated>2011-06-09T21:36:22.086+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Book shipping arrived</title><content type='html'>My &lt;a href="http://growingtoprogram.blogspot.com/2011/05/book-orders-for-summer-2011.html"&gt;book order&lt;/a&gt; has finally arrived! It was a bit delayed because of national holidays, but better late than never. The Pragmatic Programmer looks good!&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-EFAZWHQmugI/TfEQVW-48jI/AAAAAAAAAgw/HOwaD1htm1k/s1600/Pragmatic+Programmer+%25281%2529_m.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-EFAZWHQmugI/TfEQVW-48jI/AAAAAAAAAgw/HOwaD1htm1k/s320/Pragmatic+Programmer+%25281%2529_m.jpg" width="239" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Pragmatic Programmer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I hate the fact that most of the technical books's covers are ugly! You don't want to keep them visible in your living room. Hell, I don't even want to read them because they look so amateur! The Pragmatic Programmer and Clean Code have been excellent also in this aspect.&lt;br /&gt;&lt;br /&gt;I don't know what I was expecting, but I was surprised when I realized that the Agile in a Flash really is a deck of cards describing the values of agile:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-QqTzuzle8hk/TfEQUCokJnI/AAAAAAAAAgo/qTC2o7dGGQM/s1600/Agile+In+Flash+%25281%2529_m.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-QqTzuzle8hk/TfEQUCokJnI/AAAAAAAAAgo/qTC2o7dGGQM/s320/Agile+In+Flash+%25281%2529_m.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Agile in a Flash&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;This should be interesting! Each card has a set of values on the other side and longer explanations on the back. Cards are small sized so they are easy to carry along or to put on a wall. They look good, but not so good that I would get a permission to put them on a wall in our living room... Or anywhere in our apartment anyway. Well, that's what workplaces are for!&lt;br /&gt;&lt;br /&gt;Now begins the desperate seek for reading time.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-pVASbYIk-ik/TfEQUhAxeXI/AAAAAAAAAgs/bo_XItllk8M/s1600/Agile+In+Flash+%25283%2529_m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-pVASbYIk-ik/TfEQUhAxeXI/AAAAAAAAAgs/bo_XItllk8M/s320/Agile+In+Flash+%25283%2529_m.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2678179017473807427?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2678179017473807427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/book-shipping-arrived.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2678179017473807427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2678179017473807427'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/book-shipping-arrived.html' title='Book shipping arrived'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-EFAZWHQmugI/TfEQVW-48jI/AAAAAAAAAgw/HOwaD1htm1k/s72-c/Pragmatic+Programmer+%25281%2529_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8826570671847938254</id><published>2011-06-07T21:04:00.083+03:00</published><updated>2011-06-07T21:50:48.377+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Code examples'/><category scheme='http://www.blogger.com/atom/ns#' term='Algorithms'/><title type='text'>Tool for Path Finding Algorithm Testing</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Pathfinding"&gt;Path finding&lt;/a&gt; algorithms&lt;/b&gt; are interesting and also very useful in many cases, for example in game development. There are also different kinds of algorithms for different kind of use scenarios. Basically you can choose if you want fast results or optimal path. Usually you can't get both.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Dijkstra's_algorithm"&gt;Dijkstra's algorithm&lt;/a&gt;&lt;/b&gt; is a common example of path finding. Algorithm starts with a start node and all the adjacent nodes are candidates. Each step you check the node with the lowest distance from the start and mark it visited. All the adjacent nodes is added to the candidate list if they aren't there yet and then we continue with checking the next node nearest to the start. When we hit the end node, we know we have the shortest path.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Below you can see an example of a path found with Dijkstra. Dark blue cells represent the path and light blue cells are visited cells.&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-DnAX4rV5jX8/Te5qAooCvaI/AAAAAAAAAgY/FEvjdpB2rXw/s1600/Dijkstra.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="269" src="http://1.bp.blogspot.com/-DnAX4rV5jX8/Te5qAooCvaI/AAAAAAAAAgY/FEvjdpB2rXw/s320/Dijkstra.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Dijkstra's algorithm.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;It's easy to see that finding path with this style can be very time consuming.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://en.wikipedia.org/wiki/A*_search_algorithm"&gt;&lt;b&gt;A* (A star)&lt;/b&gt;&lt;/a&gt; is a variation of Dijkstra's algorithm. It uses similar technique but instead of choosing nodes based on the distance from the start &lt;b&gt;it uses estimation from start to end&lt;/b&gt;.&amp;nbsp;Estimation is the &lt;b&gt;distance from the start added with the estimation of the distance from the node to the end&lt;/b&gt;. If there's no estimation, the A* algorithm works exactly the way Dijkstra does.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;With appropriate heuristic A* is significantly faster than Dijkstra. Only bad thing is that with using estimates, the found path may not be the optimal one. With good heuristic it's probably very close to it, but you can't be sure.&amp;nbsp;Usually this isn't a problem. Notably in games it's essential to find very fast a path that is &lt;b&gt;good enough&lt;/b&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Below you can see paths found with A* algorithm using first Diagonal distance heuristic, then Euclidean distance and finally Manhattan distance. White cell is &lt;b&gt;visited but not selected&lt;/b&gt;, light blue &lt;b&gt;visited and selected&lt;/b&gt; and dark blue is a &lt;b&gt;path cell&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WMPFuJ-YLBw/Te5p-m9KH5I/AAAAAAAAAgM/dx5BDvhqeJc/s1600/A+Diagonal.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="271" src="http://3.bp.blogspot.com/-WMPFuJ-YLBw/Te5p-m9KH5I/AAAAAAAAAgM/dx5BDvhqeJc/s320/A+Diagonal.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A* with Diagonal distance.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uL1yoGyZzjw/Te5p_eldnjI/AAAAAAAAAgQ/voBe4-v8Nss/s1600/A+Euclidean.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="272" src="http://3.bp.blogspot.com/-uL1yoGyZzjw/Te5p_eldnjI/AAAAAAAAAgQ/voBe4-v8Nss/s320/A+Euclidean.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A* with Euclidean distance.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FdKtOw3_oH4/Te5p_zpjcBI/AAAAAAAAAgU/_7DcVTlJSKA/s1600/A+Manhattan.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="270" src="http://3.bp.blogspot.com/-FdKtOw3_oH4/Te5p_zpjcBI/AAAAAAAAAgU/_7DcVTlJSKA/s320/A+Manhattan.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A* with Manhattan distance.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;There is significant difference in the number of visited cells and even with a graph of 35*35 you can see a small difference in the speed. A* with Manhattan distance is superior in speed an visited cells, but it also produces a path that is unnecessarily long - but only one step longer than in optimal path.&lt;br /&gt;&lt;br /&gt;The tool I used for this demonstration is &lt;a href="http://topfat.blogspot.com/"&gt;TopFat, Tool for Path Finding Algorithm Testing&lt;/a&gt;. It's an applet we made with my friend as a practical work for Object Oriented Programming class. You can test the applet &lt;a href="http://topfat.blogspot.com/"&gt;here&lt;/a&gt;&amp;nbsp;and also &lt;a href="http://code.google.com/p/topfat/"&gt;the source code is available&lt;/a&gt;. It's released under the &lt;a href="http://www.gnu.org/licenses/gpl.html"&gt;GNU General Public License&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you wish to continue the project, you can send me email.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8826570671847938254?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8826570671847938254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/tool-for-path-finding-algorithm-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8826570671847938254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8826570671847938254'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/tool-for-path-finding-algorithm-testing.html' title='Tool for Path Finding Algorithm Testing'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-DnAX4rV5jX8/Te5qAooCvaI/AAAAAAAAAgY/FEvjdpB2rXw/s72-c/Dijkstra.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8711653320516464262</id><published>2011-06-06T21:23:00.000+03:00</published><updated>2011-06-06T21:23:08.364+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Version Control'/><category scheme='http://www.blogger.com/atom/ns#' term='My Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>Resources for trying out Git with Eclipse</title><content type='html'>I've described one of my development setups earlier &lt;a href="http://growingtoprogram.blogspot.com/2010/08/eclipse-svn-google-code-mylyn_07.html"&gt;here&lt;/a&gt; and talked about programming as it should be &lt;a href="http://growingtoprogram.blogspot.com/2010/11/notch-presents-programming-as-it-should_20.html"&gt;here&lt;/a&gt;. I'm open for new ideas and have been planning on trying out Git for a long time. Git support for Eclipse has been insufficient which has&amp;nbsp;been a problem, but things are changing.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Git_(software)"&gt;Git&lt;/a&gt;&amp;nbsp;is a &lt;a href="http://en.wikipedia.org/wiki/Distributed_revision_control_system"&gt;distributed revision control system&lt;/a&gt; started by Linus Torvalds. Distributed really means distributed - &lt;b&gt;there is no central code base&lt;/b&gt; that each developer would commit into. Understanding the concept can be a bit tricky if you've only been using more traditional centralized version control systems like &lt;a href="http://en.wikipedia.org/wiki/Concurrent_Versions_System"&gt;CVS&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Apache_Subversion"&gt;SVN&lt;/a&gt;. Those have a central repository that you use to commit or update the code. With Git you have a complete local repository with all history information about the past. You &lt;b&gt;commit &lt;/b&gt;any changes you do to your own repository, and then you can &lt;b&gt;Push &lt;/b&gt;to or &lt;b&gt;Pull &lt;/b&gt;from other repositories. This additional pushing or pulling seems to be the biggest usage difference when comparing to SVN. And the fact that you have a complete repository for yourself.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Git_(software)#Name"&gt;About the name Git&lt;/a&gt;, "I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.".&amp;nbsp;There's a&amp;nbsp;&lt;a href="http://www.youtube.com/watch?v=4XpnKHJAok8"&gt;Tech Talk about Git&lt;/a&gt;&amp;nbsp;by Linus&amp;nbsp;on YouTube. It's pretty entertaining.&lt;br /&gt;&lt;br /&gt;You can get &lt;b&gt;a free Git repository&lt;/b&gt; from &lt;a href="https://github.com/"&gt;GitHub&lt;/a&gt; (open source) or &lt;a href="http://www.assembla.com/catalog/tag/free"&gt;Assembla&lt;/a&gt; (private). If you are willing to develop public open source software, GitHub gives you unlimited repository for free. For private use Assembla offers 2 gb storage with unlimited users and projects. Also SVN is supported. You only get the repository for free, tickets, milestones, messages, wiki and files are chargeable.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eclipse.org/egit/download/"&gt;EGit&lt;/a&gt;&amp;nbsp;is an Eclipse plugin to use Git from the Eclipse. Though it &lt;a href="http://wiki.eclipse.org/EGit/User_Guide#Pulling_New_Changes_from_Upstream_Branch"&gt;seems that Pulling is not yet implemented&lt;/a&gt;&amp;nbsp;which is good to keep in mind.&amp;nbsp;Probably the best way to learn EGit is to read its &lt;a href="http://wiki.eclipse.org/EGit/User_Guide"&gt;User Guide&lt;/a&gt;. Easiest and fastest way is to go through the &lt;a href="http://wiki.eclipse.org/EGit/User_Guide#Basic_Tutorial:_Adding_a_project_to_version_control"&gt;Basic Tutorial&lt;/a&gt;. If you're having a hard time understanding Git, &lt;a href="http://wiki.eclipse.org/EGit/Git_For_Eclipse_Users"&gt;Git for Eclipse users&lt;/a&gt; might be worth reading. There is a descriptions of centralized and decentralized revision control systems which helps to understand the difference.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;I really &amp;nbsp;like the idea and design behind the Git, but I might still stick to SVN for a while. After all, I'm developing my own projects mainly alone and Git it not especially designed for that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8711653320516464262?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8711653320516464262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/resources-for-trying-out-git-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8711653320516464262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8711653320516464262'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/resources-for-trying-out-git-with.html' title='Resources for trying out Git with Eclipse'/><author><name>Arttu</name><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-5162137887150660076.post-2249758487611635982</id><published>2011-06-03T21:30:00.000+03:00</published><updated>2011-06-03T21:30:02.976+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Swan - Scientific Writing Assistant'/><title type='text'>Swan 1.02 out</title><content type='html'>Our still remaining hard-working developers have released Swan 1.02 with some bug fixes. Go ahead and get a copy from the &lt;a href="http://cs.joensuu.fi/swan/download.html"&gt;Swan home page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-EB5JdPqSeak/Tc62flY3dAI/AAAAAAAAAeE/xq1PWUP79u0/s1600/SimpleBanner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://2.bp.blogspot.com/-EB5JdPqSeak/Tc62flY3dAI/AAAAAAAAAeE/xq1PWUP79u0/s400/SimpleBanner.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Swan is a tool you can use to analyze and therefore also improve your scientific papers. If you got interested, &lt;a href="http://growingtoprogram.blogspot.com/2011/05/swan-scientific-writing-assistant.html"&gt;read more from here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2249758487611635982?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2249758487611635982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/swan-102-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2249758487611635982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2249758487611635982'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/swan-102-out.html' title='Swan 1.02 out'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-EB5JdPqSeak/Tc62flY3dAI/AAAAAAAAAeE/xq1PWUP79u0/s72-c/SimpleBanner.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4188650406179592691</id><published>2011-06-02T21:02:00.000+03:00</published><updated>2011-06-02T21:02:01.207+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><title type='text'>Trainings in May 2011</title><content type='html'>I've had a bad running month as you can see from the statistics. I was slightly sick for a while and running hasn't felt good. I'm starting to admit it might be because I'm in such a bad running condition...&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.trainit.fi/upload/reports/920866d370406ce1c228bb90f418405ab6c972bf.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="256" src="http://www.trainit.fi/upload/reports/920866d370406ce1c228bb90f418405ab6c972bf.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Training hours.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.trainit.fi/upload/reports/dfb7ba5c889d11e3cfc386779a8ea202fc07e7a7.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="256" src="http://www.trainit.fi/upload/reports/dfb7ba5c889d11e3cfc386779a8ea202fc07e7a7.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Training kilometers.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;My shoes are HOT for warmer temperatures but I don't want to spend more money on sports equipment. Barefoot running?&lt;br /&gt;&lt;br /&gt;I bought a 16 kg &lt;a href="http://en.wikipedia.org/wiki/Kettlebell"&gt;kettlebell&lt;/a&gt; and so far I really like training with it. Quite simple and effective addition to my training and finally I can easily strengthen my back! Probably worth the 60€ it cost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4188650406179592691?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4188650406179592691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/trainings-in-may-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4188650406179592691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4188650406179592691'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/06/trainings-in-may-2011.html' title='Trainings in May 2011'/><author><name>Arttu</name><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-5162137887150660076.post-6724808837934528964</id><published>2011-05-26T11:21:00.001+03:00</published><updated>2011-05-27T13:19:56.332+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Book orders for the summer 2011</title><content type='html'>The summer (and holidays) are coming and it's time to find something relaxing to read. Therefore I ordered &lt;a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X?ie=UTF8&amp;amp;tag=growingt-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Pragmatic Programmer: From Journeyman to Master&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=growingt-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=020161622X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; and &lt;a href="http://www.amazon.com/Agile-Flash-Speed-Learning-Development-Programmers/dp/1934356719?ie=UTF8&amp;amp;tag=growingt-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Agile in a Flash: Speed-Learning Agile Software Development (Pragmatic Programmers)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=growingt-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1934356719" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt; today (both in discount in Amazon.co.uk). Talking about holidays, this summer I will have my first summer holiday from work, three weeks (18 days). On June I've also been working as a programmer for a year.&amp;nbsp;Although I try to spend time away from computers on holiday, I also have one game idea forming in my head that I'd like to start implementing.&lt;br /&gt;&lt;br /&gt;I also noticed this when I was searching books in Amazon:&amp;nbsp;&lt;a href="http://www.amazon.com/Clean-Coder-Conduct-Professional-Programmers/dp/0137081073?ie=UTF8&amp;amp;tag=growingt-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;The Clean Coder: A Code of Conduct for Professional Programmers (Robert C. Martin Series)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=growingt-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0137081073" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;. Clean Code is one of my favorites so this might be worth reading too.&lt;br /&gt;&lt;br /&gt;After that I wandered to Uncle Bob's blog and found&amp;nbsp;&lt;a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445?ie=UTF8&amp;amp;tag=growingt-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Agile Software Development, Principles, Patterns, and Practices&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=growingt-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0135974445" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;. It seems just like the book I've been looking for, damn. I only wish books weren't this expensive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6724808837934528964?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6724808837934528964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/book-orders-for-summer-2011.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6724808837934528964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6724808837934528964'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/book-orders-for-summer-2011.html' title='Book orders for the summer 2011'/><author><name>Arttu</name><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-5162137887150660076.post-6703132843742115461</id><published>2011-05-20T10:58:00.000+03:00</published><updated>2011-05-20T10:58:28.512+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Cognitive Science and HCI'/><category scheme='http://www.blogger.com/atom/ns#' term='The Design of Everyday Things'/><title type='text'>The best programs are the ones in which the computer itself "disappears"</title><content type='html'>This is what Donald A. Norman wrote in his book The Design of Everyday Things. The traditional situation is that user is using the computer to solve a task. She doesn't want to be using a computer, she wants to work with the problem. The computer should be doing everything to help the user on her way. Norman used the first spreadsheet program &lt;a href="http://en.wikipedia.org/wiki/VisiCalc"&gt;VisiCalc&lt;/a&gt; as an example.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/7/7a/Visicalc.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="219" src="http://upload.wikimedia.org/wikipedia/commons/7/7a/Visicalc.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;VisiCalc, image from &lt;a href="http://en.wikipedia.org/wiki/File:Visicalc.png"&gt;Wikipedia&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;VisiCalc made it possible to work with numbers in a way you would with pen and paper - only making it easier by automating the calculation and making changes easy. Good conceptual model with natural mappings, the computer fades away to background.&lt;br /&gt;&lt;br /&gt;That's the objective, make your program so good that it makes the computer disappear leaving only user and the task. You should &lt;b&gt;help user&lt;/b&gt; with &lt;b&gt;automation &lt;/b&gt;and by &lt;b&gt;simplifying the task&lt;/b&gt; to the most &lt;b&gt;without taking the control&lt;/b&gt; from the user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6703132843742115461?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6703132843742115461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/best-programs-are-ones-in-which.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6703132843742115461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6703132843742115461'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/best-programs-are-ones-in-which.html' title='The best programs are the ones in which the computer itself &quot;disappears&quot;'/><author><name>Arttu</name><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-5162137887150660076.post-9154306228478789714</id><published>2011-05-16T14:27:00.000+03:00</published><updated>2011-05-16T14:27:15.637+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Appraisals'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='Swan - Scientific Writing Assistant'/><title type='text'>Swan - Scientific Writing Assistant</title><content type='html'>Almost two years of development and finally it's officially OUT:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-EB5JdPqSeak/Tc62flY3dAI/AAAAAAAAAeE/xq1PWUP79u0/s1600/SimpleBanner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" src="http://2.bp.blogspot.com/-EB5JdPqSeak/Tc62flY3dAI/AAAAAAAAAeE/xq1PWUP79u0/s320/SimpleBanner.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://cs.joensuu.fi/swan/download.html"&gt;Download for free.&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;As you can predict from the name, Swan is meant to help you to improve the quality of your scientific texts. You can imagine it as a writing mentor: It helps you to express yourself clearer and to avoid some common mistakes we all tend to make.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-5nLjZWz8skE/TdEJVWV76uI/AAAAAAAAAeM/fA8otjyCNBc/s1600/Swan+book+cover.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/-5nLjZWz8skE/TdEJVWV76uI/AAAAAAAAAeM/fA8otjyCNBc/s200/Swan+book+cover.JPG" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Book that the Swan is based on.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://cs.joensuu.fi/swan/index.html"&gt;Swan&lt;/a&gt; is a collaboration project between &lt;a href="http://www.scientific-writing.com/"&gt;Jean-Luc LeBrun&lt;/a&gt; and the &lt;a href="http://www.uef.fi/uef/home"&gt;University of Eastern Finland&lt;/a&gt;. We've had four developers (on and off) doing the implementation and several specialists to consult the team. Jean-Luc is behind the metrics used in the software and I encourage you to take a look on his book&amp;nbsp;&lt;a href="http://www.amazon.com/Scientific-Writing-Readers-Writers-Diagnosis/dp/9814350605?ie=UTF8&amp;amp;tag=growingt-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Scientific Writing: the Reader's and Writer's Guide 2.0: With Writing Diagnosis Tool for MAC and PC&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=growingt-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=9814350605" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;. With the book and tool you can certainly improve the quality of your scientific papers which is essential if you want to get people to actually read them. By quality I don't mean the actual content but how it's presented. At the University of Eastern Finland the manager of the team was &lt;a href="http://cs.joensuu.fi/pages/tkinnu/webpage/"&gt;Tomi Kinnunen&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How do I get it?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The tool is free and you can download it from the &lt;a href="http://cs.joensuu.fi/swan/download.html"&gt;website&lt;/a&gt;. However you should consider buying the book because the tool doesn't cover everything. Natural language is a difficult thing to be processed with computers so our abilities to analyze papers automatically is limited. This is also the reason for why the tool can't do all the work itself but it asks you to mark certain parts of your text. We hope this can be improved over the time but until then this takes some effort from the users. We've done it so that more effort -&amp;gt; more results, it doesn't force you to do everything at once.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What does it actually do?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You can get a glimpse of the features from &lt;a href="http://cs.joensuu.fi/swan/help.html"&gt;help-page&lt;/a&gt;. Basically the tool analyzes the main title, abstract, introduction and conclusion of your paper, but also the overall structure and fluidity.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-xsGLrlzxBG4/Tc66VtObzZI/AAAAAAAAAeI/Uj12SY7QyH8/s1600/MyPaper_quick.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="268" src="http://2.bp.blogspot.com/-xsGLrlzxBG4/Tc66VtObzZI/AAAAAAAAAeI/Uj12SY7QyH8/s320/MyPaper_quick.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Swan - My Paper&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;First step is to copy and paste or import your paper to the software. I advise you to take the "Quick" way first so you'll easily get results. After this you just click "Evaluate" starting the evaluation phase when the tool runs all the metrics. After the evaluation the results tab is opened and you can see the feedback for your paper. Remember that some of the results might not be rational, your own consideration is needed too.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;We hope you'll answer the questionnaires&lt;/b&gt; found from the tool and website and report any bugs you'll find. This tool is still a work in progress and your contribution will help developers to make it better.&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;For me this means that I can finally move on with my studies and concentrate on different tasks. I'll probably also have more time to code at my spare time and I've already started to think of a new project. It'll most likely be a game, a roguelike one. But a modern roguelike with updated game play. And the focuswill be something different than in other roguelikes... &amp;nbsp;More about this later.&lt;br /&gt;&lt;br /&gt;Go ahead and try the tool.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-9154306228478789714?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/9154306228478789714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/swan-scientific-writing-assistant.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9154306228478789714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9154306228478789714'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/swan-scientific-writing-assistant.html' title='Swan - Scientific Writing Assistant'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-EB5JdPqSeak/Tc62flY3dAI/AAAAAAAAAeE/xq1PWUP79u0/s72-c/SimpleBanner.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-6119744320070344773</id><published>2011-05-03T21:49:00.001+03:00</published><updated>2011-05-04T09:23:46.166+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>Runs in April 2011</title><content type='html'>Finally almost all the snow melted away and I got to run on soft surface - and my feet feel the difference. Now the only problem is that I can't get enough oxygen! I need to improve my aerobic condition.&lt;br /&gt;&lt;br /&gt;Here are some charts. Training hours:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.trainit.fi/upload/reports/0171cdd8f8cfb8caa64c627e059c9475edc7a841.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://www.trainit.fi/upload/reports/0171cdd8f8cfb8caa64c627e059c9475edc7a841.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Kilometers:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.trainit.fi/upload/reports/b3fa000727fd968a5a7b891d6bc5767c7b954bdc.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://www.trainit.fi/upload/reports/b3fa000727fd968a5a7b891d6bc5767c7b954bdc.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NPlWFGNkP4c/TcBJN5uGFSI/AAAAAAAAAdE/8QCuY-gBGio/s1600/IMG_7781_m.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-NPlWFGNkP4c/TcBJN5uGFSI/AAAAAAAAAdE/8QCuY-gBGio/s320/IMG_7781_m.jpg" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;New shirt.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Link to &lt;a href="http://www.trainit.fi/workout?id=53775&amp;amp;u=1721"&gt;a bit faster run&lt;/a&gt;. I did 3.58 km in 16 min 39 sec. Before that I did 25 pull-ups (uncleanly). I would say I did 23 clean pull-ups. I wanted to try how fast I could run and this is the result. The beginning went well, but then I hit to the wall and speed dropped. I need to do more long runs because it felt that my lungs just can't keep up with the pace. This is not even close to 3200m in 12 min pace that I'm aiming this summer/autumn. Kind of depressing to see in how bad condition you really are. I should do a proper Cooper test to see how it goes, it's different to run in varying terrain than in stable track.&lt;br /&gt;&lt;br /&gt;I bought a new shirt that I intended to use when the weather is too warm for jacket but too cold for a t-shirt. This is only a bit too short to be used alone, so probably this will be used only on winter. Pity. It seems to be hard to find this kind of shirts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6119744320070344773?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6119744320070344773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/runs-in-april-2011.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6119744320070344773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6119744320070344773'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/05/runs-in-april-2011.html' title='Runs in April 2011'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NPlWFGNkP4c/TcBJN5uGFSI/AAAAAAAAAdE/8QCuY-gBGio/s72-c/IMG_7781_m.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-845525265065900195</id><published>2011-04-27T15:01:00.000+03:00</published><updated>2011-12-22T07:55:28.403+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphical User Interfaces'/><title type='text'>Transparent JScrollPane in Java</title><content type='html'>&lt;div style="text-align: justify;"&gt;Situation: You have a background &lt;b&gt;JPanel &lt;/b&gt;that should be defining the color of the window. On top of that you've added a &lt;b&gt;JTextPane &lt;/b&gt;inside a &lt;b&gt;JScrollPane&lt;/b&gt;. Both JTextPane and JScrollPane are set transparent with &lt;b&gt;setOpaque(false)&lt;/b&gt;, but still you get a result like this:&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-urtAQdw5-a0/TvLFydxED3I/AAAAAAAABP0/1UgVwt-mGKk/s1600/NotTransparentExplained.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-urtAQdw5-a0/TvLFydxED3I/AAAAAAAABP0/1UgVwt-mGKk/s1600/NotTransparentExplained.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Not transparent JScrollPane.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The background of the text is gray (on some displays it's hard to see the difference). Even worse, it changes as the area has focus or not. This is because JScrollPane has also a component that represents the visible area inside the panel called &lt;a href="http://download.oracle.com/javase/7/docs/api/javax/swing/JViewport.html"&gt;JViewport&lt;/a&gt;. JViewport is opaque by default. When you set it opaque with &lt;b&gt;JScrollPane.getViewport.setOpaque(false)&lt;/b&gt; you get the result you wanted to:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--AwYE68JtOE/TbgDqCNTFkI/AAAAAAAAAc0/amn_zG2-mVU/s1600/TransparentScrollpane.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--AwYE68JtOE/TbgDqCNTFkI/AAAAAAAAAc0/amn_zG2-mVU/s1600/TransparentScrollpane.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Transparent JScrollPane.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Read also the &lt;a href="http://download.oracle.com/javase/tutorial/uiswing/components/scrollpane.html"&gt;How to use scroll panes&lt;/a&gt; tutorial.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Btw, that nice white border is added to the JScrollPane with this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;scrollArea.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10), BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)));&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://growingtoprogram.blogspot.com/2011/02/practical-swing-tips-for-beginners.html#comments"&gt;Here&lt;/a&gt;&amp;nbsp;is my earlier post about colors in Swing.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-845525265065900195?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/845525265065900195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/transparent-jscrollpane-in-java.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/845525265065900195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/845525265065900195'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/transparent-jscrollpane-in-java.html' title='Transparent JScrollPane in Java'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-urtAQdw5-a0/TvLFydxED3I/AAAAAAAABP0/1UgVwt-mGKk/s72-c/NotTransparentExplained.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2858906575880135987</id><published>2011-04-14T20:28:00.002+03:00</published><updated>2011-04-19T10:18:42.150+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Code examples'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphical User Interfaces'/><title type='text'>Multiplatform File Drag and Drop in Java</title><content type='html'>Code in this post is derived from &lt;a href="http://stackoverflow.com/questions/1697936/java-drag-and-drop-on-mac-os-x"&gt;this post in Stack Overflow&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Creating drag and drop support for files in Java is not that easy as it seems at the first sight - not if you're supporting Windows, Linux and Mac. Here is how to handle drop events and detect files when they are dropped to the window of your Java program:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Lg6fcthGYpc/TacqFZxxwaI/AAAAAAAAAck/xtN-DYL_Exg/s1600/Method+drop.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="218" src="http://2.bp.blogspot.com/-Lg6fcthGYpc/TacqFZxxwaI/AAAAAAAAAck/xtN-DYL_Exg/s400/Method+drop.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&amp;nbsp;public void drop(DropTargetDropEvent dropEvent)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uY7dbpco9wM/TacqSLeidnI/AAAAAAAAAco/1kRPlNeza5s/s1600/Method+handleDrop.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="192" src="http://3.bp.blogspot.com/-uY7dbpco9wM/TacqSLeidnI/AAAAAAAAAco/1kRPlNeza5s/s400/Method+handleDrop.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Method handleDrop.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-R1UIaxbcAnk/TacqpYmMuYI/AAAAAAAAAcs/uGmAEvTCS8g/s1600/Methods+for+accepting.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="282" src="http://3.bp.blogspot.com/-R1UIaxbcAnk/TacqpYmMuYI/AAAAAAAAAcs/uGmAEvTCS8g/s400/Methods+for+accepting.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Methods for accepting drop.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Check the full source in &lt;a href="http://pastebin.com/2hnMj9p8"&gt;pastebin&lt;/a&gt;. Otherwise you can do the drag &amp;amp; drop functionality as shown &lt;a href="http://download.oracle.com/javase/tutorial/uiswing/examples/dnd/index.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.java-tips.org/java-se-tips/javax.swing/how-to-implement-drag-drop-functionality-in-your-applic.html"&gt;here&lt;/a&gt;. This has been tested in Windows XP &amp;amp; 7, Ubuntu and Mac.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let me know if it doesn't work.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2858906575880135987?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2858906575880135987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/multiplatform-file-drag-and-drop-in.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2858906575880135987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2858906575880135987'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/multiplatform-file-drag-and-drop-in.html' title='Multiplatform File Drag and Drop in Java'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Lg6fcthGYpc/TacqFZxxwaI/AAAAAAAAAck/xtN-DYL_Exg/s72-c/Method+drop.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4342549860151566924</id><published>2011-04-13T16:41:00.000+03:00</published><updated>2011-04-13T16:41:41.240+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>New shoes: Asics Gel-Cumulus 12</title><content type='html'>How stupid can one be? Very. I've had problems with my feet during the last year - ever since I bought new shoes. Why I didn't buy new shoes earlier? Well, reason one: They cost a lot. My old shoes did cost around 70€ and they were in discount. They should have been good. I just remember they saying that the shoes have mild pronation support. "Does it matter?". "No", they said. Yeah... Reason two: I had had a break at my running and it's natural that you have some pain when you start running again. Especially if you tend to run too fast - as I do. So I couldn't know whether it was about my shoes or running technique or what.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jwSaTRtwi6U/TaVlZEF4rMI/AAAAAAAAAcc/uSQrLWpTEys/s1600/Gel-Cumulus.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="265" src="http://3.bp.blogspot.com/-jwSaTRtwi6U/TaVlZEF4rMI/AAAAAAAAAcc/uSQrLWpTEys/s320/Gel-Cumulus.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Image from&amp;nbsp;&lt;a href="http://www.stadium.fi/urheilu/treeni/juoksukengat/111892/asics-gel-cumulus-12-m"&gt;Stadium&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now I'm quite a bit poorer but I have new shoes: Asics Gel-Cumulus 12.&amp;nbsp;I hope they will help with the leg problems, but based on one slow run I can already say that they make a difference. My running feels more natural - the way I remember it used to feel.&lt;br /&gt;&lt;br /&gt;I didn't remember I have size 44,5 feet...&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-NMLazQrKU7A/TaVqA1y-bSI/AAAAAAAAAcg/N2eKB3cDh4o/s1600/Gel-Cumulus+mounted.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-NMLazQrKU7A/TaVqA1y-bSI/AAAAAAAAAcg/N2eKB3cDh4o/s320/Gel-Cumulus+mounted.JPG" width="234" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Taken with N81 as you can see.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;Looking forward to running once again.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4342549860151566924?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4342549860151566924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/new-shoes-asics-gel-cumulus-12.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4342549860151566924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4342549860151566924'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/new-shoes-asics-gel-cumulus-12.html' title='New shoes: Asics Gel-Cumulus 12'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-jwSaTRtwi6U/TaVlZEF4rMI/AAAAAAAAAcc/uSQrLWpTEys/s72-c/Gel-Cumulus.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-1905161849257630920</id><published>2011-04-09T17:04:00.002+03:00</published><updated>2011-04-12T10:15:26.528+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>Runs in March 2011</title><content type='html'>There they are from &lt;a href="http://www.trainit.fi/en/"&gt;Train It&lt;/a&gt; service:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.trainit.fi/upload/reports/f8db9d08bb68731b38140120128fbf8b27d6b645.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="205" src="http://www.trainit.fi/upload/reports/f8db9d08bb68731b38140120128fbf8b27d6b645.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Kilometers.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.trainit.fi/upload/reports/543bde6c8cc4ae7d945f155f69d1817cd3f03bd0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="205" src="http://www.trainit.fi/upload/reports/543bde6c8cc4ae7d945f155f69d1817cd3f03bd0.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Hours.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Not as much as I'd like, but it's a good start anyway. Enough to get my feet hurt, maybe I should have started slower. I have started stretching after years of break hoping it would help. I don't want to take a break from running, at least not before I get a new bike.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Fu9csNStxLw/TaBlPmVM_rI/AAAAAAAAAcM/XGgUV5WsQag/s1600/Asics+Elite+small.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-Fu9csNStxLw/TaBlPmVM_rI/AAAAAAAAAcM/XGgUV5WsQag/s320/Asics+Elite+small.png" width="186" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Asics running pants&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Got new Asics running pants some weeks ago, "Elite" or something. The material is perfect, I like these more than Nike's pants. I wonder when it's starting to be too warm weather for my current running clothes. The jacket is already starting to be too hot. I would like to buy new shoes, but we have a lot of things on our to-buy -list, so I will need to run with old ones.&lt;br /&gt;&lt;br /&gt;Forerunner 210 is still working ok. Only had a small problem with &lt;a href="http://growingtoprogram.blogspot.com/2011/04/garmin-forerunner-not-detecting-hr.html"&gt;HR monitor&lt;/a&gt;. The biggest problem is that I don't always bother to wear on the monitor. Watch is a lot harder to forget and I use it as a watch anyway.&lt;br /&gt;&lt;br /&gt;As you can see from the graphs, I'm still using the &lt;a href="http://www.trainit.fi/en/"&gt;Train It&lt;/a&gt; service. It's doing its job and I haven't had any big problems. It isn't completely finished service and could have a lot more users, but works for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-1905161849257630920?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1905161849257630920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/runs-in-march-2011.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1905161849257630920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1905161849257630920'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/runs-in-march-2011.html' title='Runs in March 2011'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Fu9csNStxLw/TaBlPmVM_rI/AAAAAAAAAcM/XGgUV5WsQag/s72-c/Asics+Elite+small.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-102010481912491408</id><published>2011-04-07T16:02:00.000+03:00</published><updated>2011-04-07T16:02:31.197+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>Garmin Forerunner not detecting HR monitor?</title><content type='html'>I had this problem, but booting the watch helped. Just press "light" until it asks if you want to turn the device off. Choose yes and after the watch turns off, put it on using the same button.&lt;br /&gt;&lt;br /&gt;Another tip. When connecting the device to your computer, make sure you attach the other cable end properly to the watch. Check that all the pins are in correct places and press the clip a bit so it will get a good connection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-102010481912491408?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/102010481912491408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/garmin-forerunner-not-detecting-hr.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/102010481912491408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/102010481912491408'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/04/garmin-forerunner-not-detecting-hr.html' title='Garmin Forerunner not detecting HR monitor?'/><author><name>Arttu</name><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-5162137887150660076.post-6001277861408987110</id><published>2011-03-31T16:09:00.000+03:00</published><updated>2011-03-31T16:09:16.393+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming principles'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Overengineering code</title><content type='html'>Just&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;K&lt;/span&gt;eep &lt;span class="Apple-style-span" style="color: #cc0000;"&gt;I&lt;/span&gt;t &lt;span class="Apple-style-span" style="color: #cc0000;"&gt;S&lt;/span&gt;imple, &lt;span class="Apple-style-span" style="color: #cc0000;"&gt;S&lt;/span&gt;tupid&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't know how many times I need to say this so I would remember and learn! I have a tend to &lt;a href="http://en.wikipedia.org/wiki/Overengineering"&gt;over-engineer&lt;/a&gt; my code. Not in a good way.&lt;br /&gt;&lt;br /&gt;On the other hand I use &lt;b&gt;too many classes&lt;/b&gt; and then again...&lt;br /&gt;..I create a way &lt;b&gt;too big one&lt;/b&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; Design classes to have only &lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;one responsibility&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;I don't &lt;b&gt;separate GUI code&lt;/b&gt; well enough from program logic, which results in very bad code.&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; Use &lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)"&gt;design patterns&lt;/a&gt;&lt;/b&gt; to separate GUI code. Use interfaces.&lt;br /&gt;&lt;br /&gt;I don't &lt;b&gt;simplify the usage&lt;/b&gt; of my code.&lt;br /&gt;&amp;nbsp;&amp;nbsp; -&amp;gt; &lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Code_refactoring"&gt;Refactoring&lt;/a&gt;&lt;/b&gt;. When the code "works", it's nowhere near being finished. This requires work.&lt;br /&gt;&lt;br /&gt;All these bad habits combined produces hard to use -kind of code. I think it's time to read Clean Code again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS. Maybe I should just confess that I'm a lazy coder? No, no yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6001277861408987110?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6001277861408987110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/03/overengineering-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6001277861408987110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6001277861408987110'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/03/overengineering-code.html' title='Overengineering code'/><author><name>Arttu</name><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-5162137887150660076.post-9090523060801807427</id><published>2011-03-30T15:22:00.000+03:00</published><updated>2011-03-30T15:22:55.232+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='Editors'/><title type='text'>Encoding and EOL characters</title><content type='html'>At least &lt;a href="http://notepad-plus-plus.org/"&gt;Notepad++&lt;/a&gt; is handy if you need to change encoding or EOL characters of a file.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Encoding&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;Menu item Encoding.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EOL Characters&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;Menu item Edit -&amp;gt; EOL Conversion&lt;br /&gt;&lt;br /&gt;Each time you work with files, you need to make sure which encoding and EOL character is being used. Otherwise, problems will follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-9090523060801807427?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/9090523060801807427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/03/encoding-and-eol-characters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9090523060801807427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9090523060801807427'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/03/encoding-and-eol-characters.html' title='Encoding and EOL characters'/><author><name>Arttu</name><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-5162137887150660076.post-7182148660016163676</id><published>2011-03-25T11:53:00.005+02:00</published><updated>2011-04-09T17:11:24.721+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><title type='text'>About training log services</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-hdeztQeTp90/TYnIATZCChI/AAAAAAAAAb8/vUL3DRQBXqY/s1600/Endomondo.PNG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-hdeztQeTp90/TYnIATZCChI/AAAAAAAAAb8/vUL3DRQBXqY/s320/Endomondo.PNG" width="261" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Endomondo widget.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;It's surprisingly hard to find the perfect service for keeping track of my trainings. What I appreciate is &lt;b&gt;ease of use&lt;/b&gt;, &lt;b&gt;good statistics&lt;/b&gt;, &lt;b&gt;reliability &lt;/b&gt;and &lt;b&gt;good community&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ease of use&lt;/b&gt; means that the user interface is simple, and procedure of taking training data from &lt;a href="http://growingtoprogram.blogspot.com/2011/01/garmin-forerunner-210.html"&gt;my device&lt;/a&gt; to the service is as short as possible. My device can't send the data directly via internet connection, so this situation is not going to be optimal. Currently I export data from my Garming using Training Center, and then export .tcx files to my computer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Good statistics&lt;/b&gt;&amp;nbsp;include that I have good access to all the data I have imported to service and it can show me nice graphs and well, statistics. I even like "best 5 km time" kind of trivia information, even though they can't be accurate.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reliability&lt;/b&gt;&amp;nbsp;means both accessibility and overall data integrity and back ups. I don't want to lose my data nor that it gets messed up. I want to be able to access the service any time.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Community&lt;/b&gt;&amp;nbsp;is the users and how the service supports interaction between users. I also should be able to share my training information any way I like. Like that Endomondo badge I have in the picture. It would be nice to have people I can follow and accompany and compete against, and also share training tips.&lt;br /&gt;&lt;br /&gt;I have tested &lt;a href="http://www.endomondo.com/home"&gt;Endomondo&lt;/a&gt;, &lt;a href="http://connect.garmin.com/"&gt;Garmin Connect&lt;/a&gt; and &lt;a href="http://www.heiaheia.com/"&gt;HeiaHeia&lt;/a&gt;. Garmin Connect drops out for the single reason that it's only for Garmin users. Endomondo is quite good, but I don't like the way it shows trainings.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-HL2FrjKDPQE/TTrzUw6EJlI/AAAAAAAAAac/k1EyZKGE8Ns/s1600/Charts.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="51" src="https://lh6.googleusercontent.com/-HL2FrjKDPQE/TTrzUw6EJlI/AAAAAAAAAac/k1EyZKGE8Ns/s400/Charts.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Endomondo charts.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;Endomondo &lt;/b&gt;has lots of users, but I'm not impressed. I don't get the community feeling from it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HeiaHeia &lt;/b&gt;is popular in Finland and has many users. It also tries to emphasize interaction but somehow it's still quite clumsy. I don't like statistics side of HeiaHeia, so I think it's out of my use too.&lt;br /&gt;&lt;br /&gt;As a conclusion I haven't found a service that fulfills all my needs. &lt;b&gt;Or have I&lt;/b&gt;?&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.trainit.fi/en/"&gt;TrainIt&lt;/a&gt;&amp;nbsp;is the latest service I have found and it looks once again very promising.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-UalRM9u_aXQ/TYnhGjJGWqI/AAAAAAAAAcA/utczKNK-_ok/s1600/trainit.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="158" src="https://lh6.googleusercontent.com/-UalRM9u_aXQ/TYnhGjJGWqI/AAAAAAAAAcA/utczKNK-_ok/s400/trainit.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;TrainIt&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;It's quite impressive when you think how it's made. One guy started to code it when he stopped working and stayed at home with the kids. However it has all the features that any other service, and even more. It's inspiring how well it's made and doesn't look amateur at all. This is the last service I'll try out now and if it doesn't work, I'll settle on using Endomondo.&lt;br /&gt;&lt;br /&gt;By the way, it's starting to be spring and the temperature is not -25 anymore. One day I even got to run at +4 temperature. I also bought new running pants from -50% off sale. I have been feeling that my feet are starting to exhaust. I hope I don't get distemper before the best running weather comes. I have also been dreaming of buying a new bike, so I could cycle to balance the training.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-7182148660016163676?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7182148660016163676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/03/about-training-log-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7182148660016163676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7182148660016163676'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/03/about-training-log-services.html' title='About training log services'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-hdeztQeTp90/TYnIATZCChI/AAAAAAAAAb8/vUL3DRQBXqY/s72-c/Endomondo.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-6051771141946784066</id><published>2011-02-27T13:33:00.000+02:00</published><updated>2011-02-27T13:33:16.779+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Development Stories'/><title type='text'>Sharing Software Development Stories</title><content type='html'>No, I don't have any stories of my own to share, not interesting ones though. Click &lt;a href="http://c2.com/cgi/wiki?SoftwareDevelopmentStories"&gt;here&lt;/a&gt; to find some. I enjoy reading them and encourage everyone to share their stories. The same thing as with &lt;a href="http://growingtoprogram.blogspot.com/p/how-did-i-became-programmer.html"&gt;how did you become a programmer&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6051771141946784066?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6051771141946784066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/sharing-software-development-stories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6051771141946784066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6051771141946784066'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/sharing-software-development-stories.html' title='Sharing Software Development Stories'/><author><name>Arttu</name><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-5162137887150660076.post-3071602718190737596</id><published>2011-02-09T16:50:00.000+02:00</published><updated>2011-02-09T16:50:08.330+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Code examples'/><title type='text'>Java SwingWorker demonstration</title><content type='html'>I had some problems with &lt;b&gt;SwingWorker &lt;/b&gt;and wanted to create a simple demonstration to learn more. Here it is!&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TVKeWXvzoNI/AAAAAAAAAbI/JbUvrZTM69Y/s1600/SimpleWorker.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="147" src="http://4.bp.blogspot.com/_g6jnLh81N64/TVKeWXvzoNI/AAAAAAAAAbI/JbUvrZTM69Y/s400/SimpleWorker.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Simple SwingWorker test&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a href="https://docs.google.com/leaf?id=0B7njMS-m-8bqN2VmYzQ1MGItNWMxYS00M2Y3LWE0MWItYzdlNTZkYTBiYTcz&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50"&gt;&lt;/a&gt;&lt;div&gt;&lt;a href="https://docs.google.com/leaf?id=0B7njMS-m-8bqN2VmYzQ1MGItNWMxYS00M2Y3LWE0MWItYzdlNTZkYTBiYTcz&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50"&gt;Download runnable JAR.&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="https://docs.google.com/leaf?id=0B7njMS-m-8bqM2RlZGExZGItODg2ZC00OTZlLTg4NTctNTI2N2U3NDA0NzI0&amp;amp;hl=en"&gt;Download sources.&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;It gives you control over one SwingWorker thread and you can start, pause and cancel it. I was going to add support for multiple SwingWorkers, but run into &lt;a href="http://stackoverflow.com/questions/1342294/jdk-7-swingworker-deadlocks"&gt;this kind of problem&lt;/a&gt;. Apparently you shouldn't use SwingWorker, if you have multiple tasks to be executed at the same time. Program also prints everything the thread publishes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SwingWorker &lt;/b&gt;is a simple background thread for doing time consuming tasks, like loading images for your programs GUI. SwingWorker is an abstract class, so you use it by extending.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Class SwingWorker&amp;lt;T,V&amp;gt;&lt;ul&gt;&lt;li&gt;T - the result type returned by this SwingWorker's doInBackground and get methods&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;V - the type used for carrying out intermediate results by this SwingWorker's publish and process methods&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;b&gt;doInBackground()&lt;/b&gt;&amp;nbsp;method is the only you must implement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;protected Void doInBackground() throws Exception&amp;nbsp;&lt;/blockquote&gt;&lt;br /&gt;Usually it looks like something like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;protected Void doInBackground() throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp; while(notDoneWorking) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;work();&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;Once the doInBackground finishes, the thread is dead and cannot be run again.&lt;br /&gt;&lt;br /&gt;Another useful method to be implemented is done().&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; protected void done()&lt;/blockquote&gt;&lt;br /&gt;&lt;div&gt;Done is run when the thread has finished, so you can use it to publish results, like add images to the GUI.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Third method you could use is &lt;b&gt;process(List&amp;lt;V&amp;gt;)&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;protected void process(List&amp;lt;V&amp;gt; chunks)&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When your SwingWorker is executing, you can publish half-way results with &lt;b&gt;publish(V)&lt;/b&gt; method. Process will be called every once in a while, and it will get a list of objects you have published with publish method, so it's easy to handle objects you want to share from your background thread in this method.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Examples of doInBackground and process from my program:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TVKk6-SKuDI/AAAAAAAAAbM/kHOn11L-9Fk/s1600/doInBackground.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="306" src="http://2.bp.blogspot.com/_g6jnLh81N64/TVKk6-SKuDI/AAAAAAAAAbM/kHOn11L-9Fk/s320/doInBackground.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;doInBackground()&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TVKk8cuUvNI/AAAAAAAAAbQ/ATn1n21MGvU/s1600/process.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="131" src="http://1.bp.blogspot.com/_g6jnLh81N64/TVKk8cuUvNI/AAAAAAAAAbQ/ATn1n21MGvU/s320/process.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;process()&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;If you need to pause your thread, you can use Thread.sleep() method as presented in the example.&amp;nbsp;&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/5162137887150660076-3071602718190737596?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3071602718190737596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/java-swingworker-demonstration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3071602718190737596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3071602718190737596'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/java-swingworker-demonstration.html' title='Java SwingWorker demonstration'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TVKeWXvzoNI/AAAAAAAAAbI/JbUvrZTM69Y/s72-c/SimpleWorker.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-6545947392397735026</id><published>2011-02-06T14:46:00.000+02:00</published><updated>2011-02-06T14:46:47.070+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphical User Interfaces'/><title type='text'>Practical Swing tips (for beginners)</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;I have been struggling with Java Swing &lt;a href="http://growingtoprogram.blogspot.com/2010/11/logic-nimbuscolors-has-none_18.html"&gt;earlier&lt;/a&gt;&amp;nbsp;and you can notice from the pictures that I'm not good at it.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;You can judge yourself. This is where we started:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TOWDvnzGI0I/AAAAAAAAAR4/4b0yX_JSGsY/s1600/SnapShot_101118_212051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://1.bp.blogspot.com/_g6jnLh81N64/TOWDvnzGI0I/AAAAAAAAAR4/4b0yX_JSGsY/s320/SnapShot_101118_212051.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;This is the final version, or at least very close to it (lower right corner is an experimental feature):&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TUxV-eRXLnI/AAAAAAAAAbE/I65JN-bcie4/s1600/Final.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://3.bp.blogspot.com/_g6jnLh81N64/TUxV-eRXLnI/AAAAAAAAAbE/I65JN-bcie4/s320/Final.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I'm quite happy with the result. It's much lighter, brighter and basically clear. It doesn't look that much like a program that is made in university. You know, something that nobody wants to use. How did this happen?&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Swing seems to be having its own mind and things don't show up on screen the way you think they should. Here are some tips or conventions that have helped me to handle it. I highly recommend you to read &lt;a href="http://download.oracle.com/javase/tutorial/uiswing/"&gt;swing tutorials&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;First, &lt;b&gt;add space between the components.&lt;/b&gt; Use borders setBorder(BorderFactory.createEmptyBorder). Remember that you can also make compound borders with BorderFactory.createCompoundBorder. Flowlayout has .setHGap() and .setVGap() and you can also use Insets object in some situations. You can also add invisible components (like JPanels) at the places where you want to get free space. Just don't put buttons right next to each other.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;Use nested panels.&lt;/b&gt; Every time you add buttons or any other components, put them inside JPanel. You can't have too many JPanels to organize your components. You might feel that it's better to use layout to arrange a group of components, but it just doesn't work. Might be just me.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html"&gt;Look and Feels&lt;/a&gt; change the way how colors show up in components. Check the API, you might be able to avoid it, but probably not completely. Design so that you have a "master" container (JPanel) on the bottom of your interface and choose color for it. Then you can set all the components that comes on to it &lt;b&gt;transparent with setOpaque(false)&lt;/b&gt;. The whole area has the same color and you can change it easily. Of course the optimal situation would be making the Look and Feel to handle all the colors. &lt;a href="http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/synth.html"&gt;Check the more advanced options.&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;BorderLayout is a simple solution to divide an area to north, south, east, west and center areas. Component in the center area will have all available space there is. With BoxLayout you can arrange components to horizontal or vertical line. GridBagLayout gives you a lot of power over component alignment but produces ugly code and takes much time. It may sound like a good solution, but most of the time it isn't.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I should buy some Swing and GUI design books.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6545947392397735026?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6545947392397735026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/practical-swing-tips-for-beginners.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6545947392397735026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6545947392397735026'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/practical-swing-tips-for-beginners.html' title='Practical Swing tips (for beginners)'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TOWDvnzGI0I/AAAAAAAAAR4/4b0yX_JSGsY/s72-c/SnapShot_101118_212051.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-188959308326434481</id><published>2011-02-02T12:41:00.000+02:00</published><updated>2011-02-02T12:41:17.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>Forerunner 210 follow-up 1</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TTrsJybglzI/AAAAAAAAAaM/dWoH-q6kW4U/s1600/Forerunner+connected.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g6jnLh81N64/TTrsJybglzI/AAAAAAAAAaM/dWoH-q6kW4U/s320/Forerunner+connected.JPG" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Forerunner 210.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Some notes of the&amp;nbsp;&lt;a href="http://growingtoprogram.blogspot.com/2011/01/garmin-forerunner-210.html"&gt;Garmin Forerunner 210&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Forerunner 210 uses new kind of file type that Endomondo doesn't support yet.&lt;/b&gt; You'll get&lt;br /&gt;&lt;blockquote&gt;UnsupportedDataTypeException: Your device does not support reading of the type: FitnessHistoryDirectory&amp;nbsp;&lt;/blockquote&gt;error. Use Garmin Connect or Garmin's desktop software to import data from the device and then export .tcx file of your training. This file can be imported to Endomondo. I use also Heiaheia, so I need to export a .gpx file too because Heiaheai doesn't support even .tcx files.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Device works even in -20° C and doesn't seem to slow down too much. &lt;/b&gt;No problems using this in reasonable winter conditions. Operating temperatures are from -20° C to 60° C.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;User interface is clear and easy to learn. &lt;/b&gt;You don't really need to open the manual even though it's the fastest way to see what you can do with the device.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Heart rate monitor is comfortable and stays on well.&lt;/b&gt; I don't like using heart rate monitors in general because I always forget to put on the collar when I am dressing, but it's just compulsory difficulty I think. Sometimes I don't bother wearing the heart rate monitor and use only GPS tracking.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Data cable is pain in the ass.&lt;/b&gt; I have had problems connecting the device because the four-pin clip connector doesn't get solid contact to the watch. Once I also had to reboot the device until my computer noticed it (after it had lost connection earlier).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GPS and heart rate tracking works well. &lt;/b&gt;I haven't had any problems with these.&lt;br /&gt;&lt;br /&gt;As a conclusion, Forerunner 210 itself works very well. only problems comes from connectivity and Garmin's decision to change file format every once in a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-188959308326434481?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/188959308326434481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/forerunner-210-follow-up-1.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/188959308326434481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/188959308326434481'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/02/forerunner-210-follow-up-1.html' title='Forerunner 210 follow-up 1'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TTrsJybglzI/AAAAAAAAAaM/dWoH-q6kW4U/s72-c/Forerunner+connected.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-7357756775031124815</id><published>2011-01-27T22:08:00.000+02:00</published><updated>2011-01-27T22:08:51.619+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Help for game programming and an Eclipse tip</title><content type='html'>Wish I had &lt;a href="http://www-cs-students.stanford.edu/~amitp/gameprog.html"&gt;this kind of help&lt;/a&gt; when I started programming years ago... If you are &lt;b&gt;interested in making your own games but don't know how&lt;/b&gt;, this will help you a lot. I remember how I had no glue of how to program or how to start building a game and I lost hours and hours figuring it out myself; we didn't have internet. Even now there seems to be some new information for me too.&lt;br /&gt;&lt;br /&gt;Then one thing I learned today: &lt;b&gt;Ctrl + h in Eclipse&lt;/b&gt; = search text from the whole project. Can be helpful sometimes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-7357756775031124815?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7357756775031124815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/help-for-game-programming-and-eclipse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7357756775031124815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7357756775031124815'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/help-for-game-programming-and-eclipse.html' title='Help for game programming and an Eclipse tip'/><author><name>Arttu</name><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-5162137887150660076.post-2001307623116015309</id><published>2011-01-22T17:24:00.000+02:00</published><updated>2012-03-12T18:10:14.287+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>Garmin Forerunner 210</title><content type='html'>Continuing to &lt;a href="http://growingtoprogram.blogspot.com/"&gt;previous&lt;/a&gt;, I've got a new toy:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TTrsJybglzI/AAAAAAAAAaM/dWoH-q6kW4U/s1600/Forerunner+connected.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g6jnLh81N64/TTrsJybglzI/AAAAAAAAAaM/dWoH-q6kW4U/s320/Forerunner+connected.JPG" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Being introduced to my older friend, Asus UL30-VT.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I couldn't help buying &lt;b&gt;Garmin Forerunner 210&lt;/b&gt;. I was going to buy 110, but they didn't have it, so I brought this baby home. Tracks heart rate and gps, that's all I need. I was even thinking of buying 305, but It's too ugly to be honest. This isn't too small either, but can even be used as a watch if needed.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TTrsNCjhCiI/AAAAAAAAAaU/ye7IeeZdkQw/s1600/In+the+hand.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/_g6jnLh81N64/TTrsNCjhCiI/AAAAAAAAAaU/ye7IeeZdkQw/s320/In+the+hand.JPG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Forerunner 210 in the hand.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;What was in the box:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TTrsMY6MseI/AAAAAAAAAaQ/Ih-fXgxGb6c/s1600/Forerunner+utilities.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://4.bp.blogspot.com/_g6jnLh81N64/TTrsMY6MseI/AAAAAAAAAaQ/Ih-fXgxGb6c/s320/Forerunner+utilities.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Heart rate monitor, watch itself (gps inside), AC charger and a usb cable to connect watch to AC charger or computer. There were also a CD and quick manuals.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First impressions are, that this is great. Only problem has been with connecting to PC, data clip isn't the most robust and you get disconnected easily if you move the watch. If you can't get your computer to notice the watch, put the watch off and on again.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The watch is &lt;b&gt;rechargeable &lt;/b&gt;and &lt;b&gt;you can replace battery of the heart rate monitor&lt;/b&gt;. Watch battery should last &lt;b&gt;8 hours in training mode and 3 weeks in power save mode&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will probably be using &lt;a href="http://www.endomondo.com/"&gt;Endomondo &lt;/a&gt;to track my trainings but &lt;strike style="font-weight: bold;"&gt;it doesn't support the watch directly&lt;/strike&gt;&amp;nbsp;(&lt;b&gt;Update&lt;/b&gt;: Apparently Endomondo now supports Forerunner 210! I can't test this because I sold my device two months ago.). &lt;strike&gt;When you try to import training history from Forerunner 210, Endomondo says:&lt;/strike&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;strike&gt;UnsupportedDataTypeException: Your device does not support reading of the type: FitnessHistoryDirectory&amp;nbsp;&lt;/strike&gt;&lt;/blockquote&gt;&lt;strike&gt;Forerunner 210 uses new kind of file format to store data, and Endomondo doesn't yet support it. You need to import your trainings first to Garmin Training Center, and then export to .tcx file. Then you can import that file to Endomondo.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;You can get the details of the Forerunner 210 from &lt;a href="https://buy.garmin.com/shop/shop.do?pID=83280"&gt;here&lt;/a&gt;. Images from the Endomondo are probably the fastest way to show what this gadget can do:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TTrzUw6EJlI/AAAAAAAAAac/Uy9gN_1DJcU/s1600/Charts.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="41" src="http://2.bp.blogspot.com/_g6jnLh81N64/TTrzUw6EJlI/AAAAAAAAAac/Uy9gN_1DJcU/s320/Charts.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Charts from the run.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TTrzXh1pAkI/AAAAAAAAAag/X_C2XfPKUqc/s1600/map.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_g6jnLh81N64/TTrzXh1pAkI/AAAAAAAAAag/X_C2XfPKUqc/s320/map.png" width="183" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Map of the route.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TTrzYKAAKiI/AAAAAAAAAak/QU78KCfpZj8/s1600/Summary.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_g6jnLh81N64/TTrzYKAAKiI/AAAAAAAAAak/QU78KCfpZj8/s320/Summary.png" width="220" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Summary and notes.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I think this is all that I need. You can even "play" the run, at least in Garmin's own service. Watch supports intervals and laps, can alert if your heart rate goes of the limits, supports multiple languages... &amp;nbsp;I will probably use this so that I press "start" when I walk out the door and "stop" when going back in. I don't need any fancier stuff. When I'm running, I don't want to be forced to play with some electric device - the main reason I didn't want to use an Android phone to this.&lt;br /&gt;&lt;br /&gt;I think &lt;b&gt;this is perfect for my kind of amateur runner&lt;/b&gt;, who wants to collect more data from training and&amp;nbsp;share it.&lt;br /&gt;&lt;br /&gt;If you have any experiences with Forerunner 210, Garmin or any other heart rate monitors, feel free to share. I would also be interested to check out other services than Endomondo too, so give a hint if you know any. And if you want to compare runs, send me email. :D&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2001307623116015309?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2001307623116015309/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/garmin-forerunner-210.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2001307623116015309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2001307623116015309'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/garmin-forerunner-210.html' title='Garmin Forerunner 210'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TTrsJybglzI/AAAAAAAAAaM/dWoH-q6kW4U/s72-c/Forerunner+connected.JPG' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2300579994656251924</id><published>2011-01-21T09:20:00.001+02:00</published><updated>2011-01-28T14:29:27.459+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><category scheme='http://www.blogger.com/atom/ns#' term='Running Gear'/><title type='text'>Proper running gear makes running more fun</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;As &lt;a href="http://growingtoprogram.blogspot.com/2011/01/running-is-serious-business.html"&gt;said before&lt;/a&gt;, it was about a time to get prober running gear. Here is a short overview.&lt;br /&gt;&lt;br /&gt;I'm not using a heart rate monitor now, but I'm planning buying one with gps on it. Would be a lot easier to track runs and share data too.&lt;br /&gt;&lt;br /&gt;Spring 2010 I bought new shoes from discount,&amp;nbsp;&lt;b&gt;Asics GT-2130&lt;/b&gt;. Surprisingly they still look like new. I'm not complete happy for them. Somehow they don't fit perfectly, which occasionally causes some pain to my left leg. Otherwise they are good, they breath well and suppress impacts enough.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TTdUNz34faI/AAAAAAAAAZg/PmI_n6cR-Jg/s1600/Shoes.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="71" src="http://1.bp.blogspot.com/_g6jnLh81N64/TTdUNz34faI/AAAAAAAAAZg/PmI_n6cR-Jg/s320/Shoes.png" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Asics GT-2130 details&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TTdUUFuWulI/AAAAAAAAAZk/JVwsX6sukQg/s1600/IMG_4663.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/_g6jnLh81N64/TTdUUFuWulI/AAAAAAAAAZk/JVwsX6sukQg/s320/IMG_4663.JPG" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;They still look like new.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;On December 2010 I started to look for something better to replace my shell suit as a running wear. After visiting some sport stores and trying many clothes, I found Nike Element Shield. It felt so comfortable and unnoticeable to wear that I had to go back next day and buy it.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TTiRNxHpbTI/AAAAAAAAAZo/jYvUQeHllGE/s1600/NikeElementShield.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_g6jnLh81N64/TTiRNxHpbTI/AAAAAAAAAZo/jYvUQeHllGE/s320/NikeElementShield.png" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;Nike Element Shield.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;With this you don't need to care about sweating or anything at all, you are free to run. Nike Element Shield is windproof from the front and breathes from back. It keeps you warm enough during winter without suffocating. It weights next to nothing.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TTiU3Y_d1RI/AAAAAAAAAZ0/miUCE1G-zr4/s1600/IMG_4669.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_g6jnLh81N64/TTiU3Y_d1RI/AAAAAAAAAZ0/miUCE1G-zr4/s320/IMG_4669.JPG" style="cursor: move;" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;The jacket is a bit thicker from the front. Feels almost too hot sometimes.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TTiU3xV9BQI/AAAAAAAAAZ4/fMN8p9TlmMI/s1600/IMG_4692.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/_g6jnLh81N64/TTiU3xV9BQI/AAAAAAAAAZ4/fMN8p9TlmMI/s320/IMG_4692.JPG" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;The jacket has a small pocket to carry keys.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;I have also a thin cap and running gloves.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TTiSOwelfII/AAAAAAAAAZs/LQmd9e1Scyw/s1600/IMG_4688.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="212" src="http://3.bp.blogspot.com/_g6jnLh81N64/TTiSOwelfII/AAAAAAAAAZs/LQmd9e1Scyw/s320/IMG_4688.JPG" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;A thin running cap from Haglöfs.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TTiTAXb8kHI/AAAAAAAAAZw/6l2lJ8z5KrU/s1600/Running+gloves.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_g6jnLh81N64/TTiTAXb8kHI/AAAAAAAAAZw/6l2lJ8z5KrU/s320/Running+gloves.JPG" style="cursor: move;" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;Pro Touch running gloves.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;As you can see, the jacket covers also your wrists very nicely and sleeves won't roll back to reveal them. The cap is very thin, but enough as long as you keep running, or if doesn't wind too much. I haven't had any problems.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Underneath I wear technical underwear to transfer sweat away from the skin and to keep me warm.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TTiWGXLIMJI/AAAAAAAAAaA/ri77zgGiKVU/s1600/IMG_4660.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/_g6jnLh81N64/TTiWGXLIMJI/AAAAAAAAAaA/ri77zgGiKVU/s320/IMG_4660.JPG" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;Notice labels L and R, wearing socks has never been this easy! :D&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TTiWwyXSM6I/AAAAAAAAAaI/Qxt9B5VoJc0/s1600/IMG_4670_m.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g6jnLh81N64/TTiWwyXSM6I/AAAAAAAAAaI/Qxt9B5VoJc0/s320/IMG_4670_m.jpg" style="cursor: move;" width="213" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="font-size: 13px; padding-top: 4px; text-align: center;"&gt;Technical t-shirt.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;You could use any t-shirt or socks, and sometimes I do. However there's a reason to use clothes meant for sports - they don't chafe nor absorb humidity. Much nicer to end a run feeling fresh instead of sweaty.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;And that's my running gear for the winter, only long underpants are missing. You'll manage down to &lt;b&gt;-20 degrees Celsius&lt;/b&gt; with these, and it would be unhealthy to run in any colder anyway.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2300579994656251924?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2300579994656251924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/proper-running-gear-makes-running-more.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2300579994656251924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2300579994656251924'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/proper-running-gear-makes-running-more.html' title='Proper running gear makes running more fun'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TTdUNz34faI/AAAAAAAAAZg/PmI_n6cR-Jg/s72-c/Shoes.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-1296267941549356548</id><published>2011-01-20T23:29:00.002+02:00</published><updated>2011-01-21T09:22:02.617+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Running'/><title type='text'>Running is serious business</title><content type='html'>Time to get a bit more &lt;b&gt;serious&lt;/b&gt; about my running hobby! It started when I was 16 or 17. I was spending too much time in front of the monitor and too few outside, and also school forced me, well, to think too much. Since I had been moving quite lot at my childhood, I wanted to stay in shape.&amp;nbsp;I had an objective to run 3200 meters in 12 minutes running test. I started with 2600-2700 in the beginning of high school, and got 3180 on the third grade.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A miserable failure. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I like having my rounds &lt;b&gt;short and speedy&lt;/b&gt;. 10 km is maximum, over that I should be carrying along something to drink. Average run has been 3,6km. My favorite round during the high school was 7,4 km grit track with many uphills. After running it you felt you had done something. It was nice to see the progress too, at first I couldn't run the whole way and I had to walk.&lt;br /&gt;&lt;br /&gt;I always used whatever clothes I had in my closet, and even ran with bad shoes for a while. Now I have finally decided to get good running gear to make running more comfortable and keep the motivation up. Regular shell suite is not the optimal choice because it's uncomfortable in many ways. It doesn't breath and it chafes during long run, and it's purely on the way when running fast. I will write a short review and overview about my gear later (&lt;a href="http://growingtoprogram.blogspot.com/2011/01/proper-running-gear-makes-running-more.html"&gt;here it is&lt;/a&gt;). This is about objectives.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Objectives &lt;/b&gt;makes you try harder and gets your training more organized, I think. My objective has been to get in better shape, but it's not easy enough to measure - what is good enough? Few weeks ago I decided that I should run that 3200 m in 12 minutes next summer. Addition to that I should do 20 pull-ups. For running part the objective is quite realistic. I had almost a year break from regular running and I'm a bit out of shape. But the pull-up part was too easy. &lt;b&gt;I already got 21 of them&lt;/b&gt;, so maybe the objective should be 25... 30 sounds just so very much.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;25 it's. 3200 m and 25&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;One thing I like about running - you feel the progress, as a burn in your lungs. You feel it when you run so fast, that your lungs feel they're about to let you down, and you just speed up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-1296267941549356548?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1296267941549356548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/running-is-serious-business.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1296267941549356548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1296267941549356548'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/running-is-serious-business.html' title='Running is serious business'/><author><name>Arttu</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2805871641031619585</id><published>2011-01-17T23:53:00.002+02:00</published><updated>2011-01-18T22:34:51.971+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Researches'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Insomnia - Programmer's occupational disease</title><content type='html'>Software engineers seem to suffer from insomniac more than the rest of the population in average, at least if we believe in a new&amp;nbsp;&lt;a href="http://www.springer.com/about+springer/media/springer+select?SGWID=0-11001-6-1037221-0"&gt;research of Sara Sarrafi Zadeh and Khyrunnisa Begum from the University of Mysore&lt;/a&gt;, India. They questioned 91 software engineers working in a software company, and found that &lt;b&gt;56 percent of them were suffering either from mild (35%) or from severe (21%) insomnia&lt;/b&gt;. That is 33% more than among the general population. According to research, insomniac significantly &lt;b&gt;lowers the quality of life&lt;/b&gt; and &lt;b&gt;risks mental and physical health&lt;/b&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I haven't checked what kind of research have been done in different parts of the world about the subject, but I find these results easy to believe in. Software development can be stressful and sometimes you seem to have little control over your work. Your working day may be filled with many kinds of distractions and you need to be jumping between different projects. You work an hour with one project, answer some emails about second project, solve a mysterious problem with third project and go back to project one to get distracted by something else. Not to mention that you never have time to do things well.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm not sure if the problem is entirely related to working in software development, or &lt;b&gt;does it tell something about the workers themselves as well&lt;/b&gt;. Stereotype of programmer is a young male with low social skills spending way too much time with computers. If the life is not in balance, you'll face problems regardless of what you do for living. Well, I haven't researched this scientifically nor even studied it enough, but I think this may be part of the problem. I have a mild memory that using a lot of computer affects your sleeping, but I cant refer to any studies right now.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Anyway, software engineering definitely has its downsides, and software engineers pay with lowered life quality.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fortunately&lt;/b&gt;&amp;nbsp;the field has awoken to see this kind of problems during recent years and the things are going to better direction. After all, software company &lt;a href="http://www.reaktor.fi/web/en/frontpage"&gt;Reaktor&lt;/a&gt; has been elected as the best workplace in Finland &lt;b&gt;three times in a row&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is my way to relief stress:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TTS4CUDk3eI/AAAAAAAAAZc/VxvYIlRDna0/s1600/IMG_4663.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/_g6jnLh81N64/TTS4CUDk3eI/AAAAAAAAAZc/VxvYIlRDna0/s320/IMG_4663.JPG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Asics GT-2130&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2805871641031619585?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2805871641031619585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/insomnia-silent-killer-of-programmers.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2805871641031619585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2805871641031619585'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/insomnia-silent-killer-of-programmers.html' title='Insomnia - Programmer&apos;s occupational disease'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TTS4CUDk3eI/AAAAAAAAAZc/VxvYIlRDna0/s72-c/IMG_4663.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-1475563089377790563</id><published>2011-01-16T23:13:00.000+02:00</published><updated>2011-01-16T23:13:39.129+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About this blog'/><title type='text'>Official opening!</title><content type='html'>I published this blog some days ago, but I haven't really "opened" it. Well here it comes! Actually this is a rebirth. I used to write a blog called &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/"&gt;Trailing The Software Craftsmanship&lt;/a&gt;, but I wanted to renew it and decided to create a totally new one. Starting from a scratch is refreshing.&lt;br /&gt;&lt;br /&gt;Deducing from the name, the topic of this blog is &lt;b&gt;programming&lt;/b&gt;. There is also "growing" there, so maybe this &lt;b&gt;could contain also something&lt;/b&gt; else, like &lt;b&gt;life&lt;/b&gt;. I have a study blog in Finnish that I use to track the time spent in studying. I'm also starting one to keep track of my running and exercise. I would like to combine all of these blogs, but I don't know how. This is meant to be used as a place where I write down things I have learn about programming. If I fill this up with everything else, is this going to be just a big mess. I need to think about it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Check out&lt;/b&gt; the &lt;a href="http://growingtoprogram.blogspot.com/p/about.html"&gt;About&lt;/a&gt; section of this blog, I wrote there why I started blogging and what I want to achieve. In short, if you want to become good at programming, it's going to take a while, and it definitely takes some effort too. You might also want to &lt;b&gt;check &lt;/b&gt;the &lt;a href="http://growingtoprogram.blogspot.com/p/affiliations.html"&gt;Affiliations&lt;/a&gt;, if you are sensible about &lt;b&gt;advertising&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Welcome!&lt;/b&gt; I don't really write this to get readers, but it's always nice if someone comments, so feel free to do so. I'm trying to find blogs to follow as well, so if you want one reader more, you can start by commenting. Blogging is a good way to connect with other people. You can also ask me something if you think I might be able to help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-1475563089377790563?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1475563089377790563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/official-opening.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1475563089377790563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1475563089377790563'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/official-opening.html' title='Official opening!'/><author><name>Arttu</name><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-5162137887150660076.post-7487393974463214854</id><published>2011-01-14T15:23:00.001+02:00</published><updated>2011-01-14T15:23:19.853+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Listings'/><title type='text'>Listing to Bloglovin</title><content type='html'>&lt;a href="http://www.bloglovin.com/blog/2257734/growing-to-program?claim=pjgrfrq3v68"&gt;Follow at Bloglovinin&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-7487393974463214854?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7487393974463214854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/listing-to-bloglovin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7487393974463214854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7487393974463214854'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2011/01/listing-to-bloglovin.html' title='Listing to Bloglovin'/><author><name>Arttu</name><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-5162137887150660076.post-1423134164382729073</id><published>2010-12-08T14:16:00.001+02:00</published><updated>2011-01-13T21:00:53.209+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>In the heart of motivation</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TP93AcJ9ntI/AAAAAAAAASo/0hB9WiSlsf0/s1600/Money_Bag_Icon.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_g6jnLh81N64/TP93AcJ9ntI/AAAAAAAAASo/0hB9WiSlsf0/s1600/Money_Bag_Icon.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.clker.com/clipart-26294.html"&gt;Source&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;An old video, but I wanted to share it anyway if someone has missed it:&amp;nbsp;&lt;a href="http://www.youtube.com/watch?v=u6XAPnuFjJc"&gt;RSA Animate - Drive: The surprising truth about what motivates us&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It may be surprising, but I find it true, and I have also experienced it in my own life (better than I ever wanted during the last year); money isn't everything. I don't say money isn't important, but as long as you get reasonable amount of it, everything else starts dominating your motivation. I'm not earning much right now, but I could even work cheaper if the work itself would be more rewarding (current is not) and I could feel we are really doing something, that my working does matter.&lt;br /&gt;&lt;br /&gt;People (and I) want to feel they matter, that the world is better at the end of the day than it was on the morning, tanks to their effort. We need honest feedback. We want to feel we master something and keep improving. We want to feel we are important part of the team. We should have autonomy and be self directed if it's possible.&lt;br /&gt;&lt;br /&gt;That's the way you get engagement, motivated and hard working employees.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I still want that raise anyway.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-1423134164382729073?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1423134164382729073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/12/in-heart-of-motivation_08.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1423134164382729073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1423134164382729073'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/12/in-heart-of-motivation_08.html' title='In the heart of motivation'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_g6jnLh81N64/TP93AcJ9ntI/AAAAAAAAASo/0hB9WiSlsf0/s72-c/Money_Bag_Icon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-1086304788630112000</id><published>2010-12-07T20:13:00.001+02:00</published><updated>2011-01-13T21:00:53.211+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>How did I become a programmer?</title><content type='html'>Now when I'm going to blog about programming, I should also tell the story of how everything stated. How do a normal guy happen to start programming? Couple of days ago I also got encouraged when I noticed that &lt;a href="http://www.blogger.com/profile/06863615802688642075"&gt;Corey Haines&lt;/a&gt; have had an &lt;a href="http://geekstorycorp.blogspot.com/"&gt;interesting project interviewing programmers&lt;/a&gt; about how they got started in programming. I like reading stories about it, so why not sharing my own.&lt;br /&gt;&lt;br /&gt;It wasn't obvious that I ever started programming. It took long before we bought a computer and I kind of needed to learn myself how to use it. Earlier we had an &lt;a href="http://en.wikipedia.org/wiki/Amiga_500"&gt;Amiga 500&lt;/a&gt;&amp;nbsp;that I used to play games and the reason I wanted a PC was that I could play better ones.&lt;br /&gt;&lt;br /&gt;It was probably 8th grade when we had computer lessons and one time our old (very old) teacher taught us &lt;a href="http://en.wikipedia.org/wiki/BASIC"&gt;BASIC&lt;/a&gt;&amp;nbsp;and let us do some simple programs. If I remember correctly they were just linear text adventure -like games. Enough to give a spark.&lt;br /&gt;&lt;br /&gt;BASIC is a very simple programming language, so it was probably a good way to start. It's even intended to be used to teach programming. The problem was, the next time I had programming lessons was in university level, and all the time between I just kind of programmed alone. We didn't have internet connection and you can imagine what it's like to program alone when you have no idea what you are doing.&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TP52yDhKMaI/AAAAAAAAASk/4Br29L-f4Rs/s1600/Tp40_1987_01.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="166" src="http://3.bp.blogspot.com/_g6jnLh81N64/TP52yDhKMaI/AAAAAAAAASk/4Br29L-f4Rs/s320/Tp40_1987_01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Turbo Pascal. &lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal"&gt;Source&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I kept using BASIC some years and did simple worm&amp;nbsp;game clones and so on. At some point I switched to &lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal"&gt;Turbo Pascal&lt;/a&gt;, I can't remember why. I had very bad programming conventions, since I didn't even know how to divide program code into multiple files. You can imagine how hard it's to stay in track of thousands of lines of code in a single file. On BASIC years I also used &lt;a href="http://en.wikipedia.org/wiki/Goto"&gt;GOTO&lt;/a&gt; a lot and didn't know about functions.&lt;br /&gt;&lt;br /&gt;Hmm, is this a story about how I suck?&lt;br /&gt;&lt;br /&gt;Anyway, I kept using Turbo Pascal. One year I got a C++ book as a gift and tried to learn it, but it was a bit too much since I still didn't have internet connection at home. I regret that I didn't learn C/C++ back then, but I still remember how hard it was without any support. We had one short class of Java at high school and I wish I had started to use it then, but I didn't. The class wasn't enough to give me an understanding how Java works, and I couldn't make anything graphical with it. With BASIC and Turbo Pascal it was always easy to print ASCII.&lt;br /&gt;&lt;br /&gt;With Turbo Pascal I did some roguelike games, tetris clone, Pac-Man clone and even a strategy game and a turn based tactical team fight game. All but the Tetris clone using ASCII graphics. They were all fun to develop. You could add small increments and see the changes immediately in the game. Artificial intelligence has always interested me and it was really fun to code AI players to Pac-Man clone and strategy game. In Pac-Man clone you could compete against AI or use it to help you. Enemies would follow you when they saw you and you had to mislead them. It was hard to get the AI player to collect all the points when I didn't even know about &lt;a href="http://en.wikipedia.org/wiki/Pathfinding"&gt;pathfinding algorithms&lt;/a&gt;. But it was quite ok. Would have been a lot better with real graphics but it was too much for me. With Tetris clone I used simple line graphics, and I think I made a very playable version.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TP51XIjAdeI/AAAAAAAAASY/K6jc1XIixCU/s1600/pelikuva2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g6jnLh81N64/TP51XIjAdeI/AAAAAAAAASY/K6jc1XIixCU/s320/pelikuva2.jpg" width="278" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The strategy game.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Also the strategy game had AI players and it was entertaining to test them by putting them play against each other at full speed. It was possible to make alliances with other countries and sometimes you saw that one of the four players became too strong and the rest three players allied against it. When they became stronger, the coalition broke down and they were fighting each other again. It was possible to build infantry and tanks and each player had their own playing area that the enemies had to conquer. Moving to hostile area took health from the unit but it also caused the area to become yours. You got money from the land and could build cities that you needed to build units. Player was destroyed when all the cities were conquered.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TP52HMaym_I/AAAAAAAAASc/ClRhLVAO4bU/s1600/pelikuva.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_g6jnLh81N64/TP52HMaym_I/AAAAAAAAASc/ClRhLVAO4bU/s320/pelikuva.jpg" width="279" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The roguelike.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Three years at high school were the most productive for me. I didn't create anything world changing, but it was fun and I was learning a lot. I was also able to concentrate to coding much better than these days since I had time and less distractions. I wonder what could have happened if I had a friend or two with common interests, but living in a small village has its bad sides.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TP52Vl7hD6I/AAAAAAAAASg/OQ2E5yfRJak/s1600/pelikuva3.GIF" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="308" src="http://2.bp.blogspot.com/_g6jnLh81N64/TP52Vl7hD6I/AAAAAAAAASg/OQ2E5yfRJak/s320/pelikuva3.GIF" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Team based gunfight game.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;It's possible that those three years were also the most enjoyable years of programming. The development environment and languages were easy, and I had time to do what I wanted. Today I have would have better skills to create even better games, but have I done so? No. Have I enjoyed programming as much as then? Probably not, I know too well what it takes to finish a good game and everything seems to be done already. Maybe I should stop thinking what others have done and do anything that feels good? After all, the most important thing is to keep programming if you want to improve.&lt;br /&gt;&lt;br /&gt;I have been thinking that Android would be suitable programming platform for me. Luckily it's still possible to program simple games even alone. At least &lt;a href="http://www.minecraft.net/"&gt;Minecraft&lt;/a&gt; and many mobile and indie games have proven it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-1086304788630112000?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1086304788630112000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/12/how-did-i-become-programmer_07.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1086304788630112000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1086304788630112000'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/12/how-did-i-become-programmer_07.html' title='How did I become a programmer?'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_g6jnLh81N64/TP52yDhKMaI/AAAAAAAAASk/4Br29L-f4Rs/s72-c/Tp40_1987_01.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8511619141303840140</id><published>2010-12-01T16:24:00.001+02:00</published><updated>2011-01-13T21:00:53.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>String.split from "." (dot)</title><content type='html'>Regular expressions have some &lt;a href="http://www.regular-expressions.info/characters.html"&gt;reserved characters&lt;/a&gt; that you need to escape when using for example with String.split("") method. &lt;a href="http://regular-expressions.info/"&gt;Regular-Expressions.info&lt;/a&gt; is a great website to learn about regular expressions.&lt;br /&gt;&lt;br /&gt;If you want to split a string from "." (dot), you need to do this:&lt;br /&gt;&lt;blockquote&gt;"Filename.csv".split("\\.");&lt;/blockquote&gt;Regular expressions can be very helpful in some cases so I advice to go through at least the&amp;nbsp;&lt;a href="http://www.regular-expressions.info/quickstart.html"&gt;Quick Start&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Discussed also &lt;a href="http://junxian-huang.blogspot.com/2009/01/java-tip-how-to-split-string-with-dot.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8511619141303840140?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8511619141303840140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/12/stringsplit-from-dot_01.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8511619141303840140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8511619141303840140'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/12/stringsplit-from-dot_01.html' title='String.split from &amp;quot;.&amp;quot; (dot)'/><author><name>Arttu</name><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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5575671252463864602</id><published>2010-11-30T16:11:00.001+02:00</published><updated>2011-01-13T21:00:53.217+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Cognitive Science and HCI'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Right click in multi-platform user interfaces</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TPT_kJXmaMI/AAAAAAAAASI/xWR0i1H66to/s1600/mouse1.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="101" src="http://2.bp.blogspot.com/_g6jnLh81N64/TPT_kJXmaMI/AAAAAAAAASI/xWR0i1H66to/s320/mouse1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.macinstruct.com/node/66"&gt;Image&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Mac users have had only &lt;b&gt;one button in their mouses&lt;/b&gt;, did you know? I knew but what I didn't realize, is that&amp;nbsp;&lt;b&gt;the right-click popup menu is not a standard way to implement functionality on Mac OS X&lt;/b&gt;. &lt;a href="http://www.macinstruct.com/node/66"&gt;Ctrl + mouse click equals the right-click&lt;/a&gt; functionality. We are coding a software where you need to import a paper from a pdf and then &lt;b&gt;select and mark certain parts of the paper&lt;/b&gt; to represent different sections (like Introduction etc.). Immediately we had an image in our heads of how you mark the text, like this:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TPT_FK8PdEI/AAAAAAAAASE/HQ2wgCVypEo/s1600/SelectTextRight-Click.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="209" src="http://4.bp.blogspot.com/_g6jnLh81N64/TPT_FK8PdEI/AAAAAAAAASE/HQ2wgCVypEo/s320/SelectTextRight-Click.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Selecting text.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Since then, no-one of us really thought about the design anymore. We used it in many places where the user needed to select text, and never had problems.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Not until we ran into &lt;b&gt;Mac users&lt;/b&gt; anyway.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Suddenly the &lt;b&gt;right-click thing is unintuitive&lt;/b&gt; way of dealing the user selection because of &lt;a href="http://en.wikipedia.org/wiki/Steve_Jobs"&gt;Steve&lt;/a&gt;. &lt;b&gt;Steve knows better&lt;/b&gt;, so we need to change the design. I admit that the current implementation is a bit too complicated and requires some extra work from the user. What would be better? Quick fix might be to show the popup immediately after the text has been selected with the mouse. This may be even better than the original, we just need to test it. And who knows, maybe there is even better way to do this hiding somewhere.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Originally the problem came from the &lt;b&gt;lack of testing&lt;/b&gt; on different platforms. If you are going to support Windows, Mac and Linux, you need to do testing on each of them. &lt;b&gt;Even when using Java&lt;/b&gt;. This is a student project so we haven't got a Mac to test the software, otherwise we might have realized the problem earlier. There have been also other Java related problems on Mac too, so getting a testing Mac is starting to be crucial. First we should start having a formal release-cycle with proper testing phases.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lessons learnt:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Using Java doesn't mean your software is going to be usable or even runnable on any platform. &lt;/b&gt;I've finally completely awoken to see this now.&amp;nbsp;&lt;/li&gt;&lt;li&gt;You need to test your software, on each platform you support.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5575671252463864602?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5575671252463864602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/right-click-in-multi-platform-user_30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5575671252463864602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5575671252463864602'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/right-click-in-multi-platform-user_30.html' title='Right click in multi-platform user interfaces'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g6jnLh81N64/TPT_kJXmaMI/AAAAAAAAASI/xWR0i1H66to/s72-c/mouse1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5763573787421042267</id><published>2010-11-25T12:50:00.001+02:00</published><updated>2011-01-13T21:00:53.219+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Walking skeleton first</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TO48Xn1ZtnI/AAAAAAAAASA/MQHdSg2fQmI/s1600/Walking+skeleton.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_g6jnLh81N64/TO48Xn1ZtnI/AAAAAAAAASA/MQHdSg2fQmI/s1600/Walking+skeleton.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.iheartvector.com/2008/03/26/walking-skeleton-vector/"&gt;Image&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://alistair.cockburn.us/Walking+skeleton"&gt;Walking skeleton&lt;/a&gt; is kind of the thinnest possible implementation of a system to perform an end-to-end function. It's intended to be the first piece of your system's implementation, so the architecture may not be the same as in final product, but it should link together the main architecture components.&lt;br /&gt;&lt;br /&gt;I have found this very important. It's tempting to start implementing some small part of a new system just to see how it works and think you can easily do the rest of the work later. If I do this, I somehow find myself from a situation that I can't easily deploy the software or running it would require too much work so I get frustrated and the development speed decreases. Or stops.&lt;br /&gt;&lt;br /&gt;Automation is a wonderful thing. It would be so nice to have always a setup where the tests would be automatically run after a commit and a deployable packet would be generated if the tests pass. This brings some demands for the development environment and definitely takes some work but it pays off too. I don't have much experience with this but I know where I am going. I'm that kind of programmer who wants to see results right away. If I can't test or run the code I write, I start to lose interest and focus. And the opposite, if I can see the results, it motivates me to do more. It gives a feeling that you are doing something with your hands and making a progress. If you are working with something really cool, it might be that you are even doing something that no-one else has ever done, and seeing it first too.&lt;br /&gt;&lt;br /&gt;If I someday manage to setup myself a good environment that enables all this, I'll post it here (&lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/11/notch-presents-programming-as-it-should.html"&gt;my current environment&lt;/a&gt;). Buying a cheap server laptop is something I should do, but I don't one to lie around our apartment. But putting it in a closet could be possible if I get a wlan-router. We'll see...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.growing-object-oriented-software.com/"&gt;Growing Object Oriented Software: Guided by Tests&lt;/a&gt; also tells something about a walking skeleton. There are a lot of other books too, some of them using a different name for the same thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5763573787421042267?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5763573787421042267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/walking-skeleton-first_25.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5763573787421042267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5763573787421042267'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/walking-skeleton-first_25.html' title='Walking skeleton first'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g6jnLh81N64/TO48Xn1ZtnI/AAAAAAAAASA/MQHdSg2fQmI/s72-c/Walking+skeleton.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5846402129691195291</id><published>2010-11-20T22:10:00.001+02:00</published><updated>2011-01-13T21:00:53.222+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>Notch presents: Programming as it should be</title><content type='html'>The man behind Minecraft has made a &lt;a href="http://notch.tumblr.com/post/1599383480/wait-its-wednesday"&gt;blog post&lt;/a&gt; presenting his development environment. Here's the part I like:&lt;br /&gt;&lt;blockquote&gt;"After that, we installed all the software we need (for me, that’s&amp;nbsp;&lt;a href="http://www.mozilla.com/en-US/firefox/personal.html" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Firefox&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.7-zip.org/" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;7-Zip&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a href="http://java.com/" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Java&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;span class="Apple-style-span" style="color: black; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://eclipse.org/" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Eclipse&lt;/a&gt;&amp;nbsp;&lt;/span&gt;and&amp;nbsp;&lt;a href="http://www.getpaint.net/" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;Paint.NET&lt;/span&gt;&lt;/a&gt;. Oh, and a bunch of&amp;nbsp;&lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;PuTTY&lt;/span&gt;&lt;/a&gt;&amp;nbsp;tools)"&lt;/blockquote&gt;&lt;div&gt;Programming as it should be. Not hours of setting up the environment and softwares, just the editor and repository tools and other special programs. PuTTY is questionable, but ok.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I like to have my programming in a simple way. Just a sufficient IDE that fully supports the features of language you are using. Repository solution should be easy and invisible so it doesn't disrupt the coding itself. Finally it's often appropriate to use some kind of task list to help manage the process.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What's my default configuration at the time?&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Language: Java&lt;/li&gt;&lt;li&gt;IDE: Eclipse&lt;/li&gt;&lt;li&gt;Repository: Google Code via SVN&lt;/li&gt;&lt;li&gt;Task list: Google Code issue tracker via Mylyn for Eclipse&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;That's a pretty good setup I can tell, for open source development. If you want to try, start from &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/08/eclipse-svn-google-code-mylyn.html"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5846402129691195291?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5846402129691195291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/notch-presents-programming-as-it-should_20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5846402129691195291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5846402129691195291'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/notch-presents-programming-as-it-should_20.html' title='Notch presents: Programming as it should be'/><author><name>Arttu</name><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-5162137887150660076.post-2206111510589404370</id><published>2010-11-18T21:56:00.001+02:00</published><updated>2011-01-13T21:00:53.224+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Appraisals'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Logic - Nimbus(colors) has none</title><content type='html'>I've tried to change colors of Swing Nimbus GUI couple of times in my life. And succeed never. This time I did the following:&lt;br /&gt;&lt;br /&gt;From this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TOWDvnzGI0I/AAAAAAAAAR4/4b0yX_JSGsY/s1600/SnapShot_101118_212051.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="248" src="http://1.bp.blogspot.com/_g6jnLh81N64/TOWDvnzGI0I/AAAAAAAAAR4/4b0yX_JSGsY/s320/SnapShot_101118_212051.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;To this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TOWDzmcC1BI/AAAAAAAAAR8/8YCA9GAfegg/s1600/Oranssi2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://2.bp.blogspot.com/_g6jnLh81N64/TOWDzmcC1BI/AAAAAAAAAR8/8YCA9GAfegg/s320/Oranssi2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Not quite a success story. So if anyone knows how to change the colors in Java Swing programs properly, feel free to give a link or anything. I've tried to use &lt;a href="http://www.mrlonee.com/?p=38"&gt;this &lt;/a&gt;and &lt;a href="http://colorschemedesigner.com/"&gt;this &lt;/a&gt;to help, but nope.&lt;br /&gt;&lt;br /&gt;Edit:&lt;br /&gt;&lt;br /&gt;I just wanted to add the piece of code that you can use to change the colors:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("control", new Color(235, 242, 245));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("info", new Color(242, 242, 189));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusAlertYellow", new Color(255, 220, 35));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusBase", new Color(93, 188, 241, 230));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusDisabledText", new Color(142, 143, 145));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusFocus", new Color(111, 181, 245, 220));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusGreen", new Color(130, 133, 37));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusInfoBlue", new Color(79, 118, 199));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusLightBackground", new Color(255, 255, 255));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusOrange", new Color(191, 98, 4));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusRed", new Color(169, 46, 34));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusSelectedText", new Color(255, 255, 255));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("nimbusSelectionBackground", new Color(57, 105, 138));&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;UIManager.put("text", new Color(0, 0, 0));&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"control" and "nimbusBase" are important, but don't think it would be as easy as changing colors to these. May be that this isn't the best way - just to show you what I tried.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2206111510589404370?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2206111510589404370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/logic-nimbuscolors-has-none_18.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2206111510589404370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2206111510589404370'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/logic-nimbuscolors-has-none_18.html' title='Logic - Nimbus(colors) has none'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TOWDvnzGI0I/AAAAAAAAAR4/4b0yX_JSGsY/s72-c/SnapShot_101118_212051.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-255925731560456063</id><published>2010-11-18T10:34:00.001+02:00</published><updated>2011-01-13T21:00:53.226+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cognitive Science and HCI'/><title type='text'>Who's fault is it anyway?</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TOTkzW0qjdI/AAAAAAAAARU/VoowIFZ5quE/s1600/9780262640374-f30.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_g6jnLh81N64/TOTkzW0qjdI/AAAAAAAAARU/VoowIFZ5quE/s320/9780262640374-f30.jpg" width="214" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=5393"&gt;Image&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I'm still reading the book...&lt;br /&gt;&lt;br /&gt;People tend to use faulty mental models when thinking what caused some action to fail or succeed.&lt;br /&gt;&lt;br /&gt;People blame environment for their own misfortunes. If things go wrong, it wasn't my fault but the environment caused it. &lt;b&gt;I got no chance&lt;/b&gt;. And the opposite happens when things go well. It all worked out since &lt;b&gt;I was in flames&lt;/b&gt; today.&lt;br /&gt;&lt;br /&gt;Outside observes do the opposite conclusions. If someone else succeeds, they say she was lucky. If she doesn't, they say she just wasn't good enough to make it.&lt;br /&gt;&lt;br /&gt;So why, why on Earth do &lt;b&gt;people blame themselves&lt;/b&gt; if they can't use some software or any device in general? Somehow people assume that they should be able to use them. If they don't succeed, people give up and decide they can't manage, that they are just too bad with devices and computers. This is &lt;a href="http://en.wikipedia.org/wiki/Learned_helplessness"&gt;learned helplessness&lt;/a&gt;. It's easy to admit after couple of fails that it is just impossible for &lt;b&gt;them &lt;/b&gt;to do the task and ask someone else to do it.&lt;br /&gt;&lt;br /&gt;Why don't they stop to think that why I, a fairly intelligent human, can't manage to handle this situation? &lt;a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=5393"&gt;Donald A. Norman&lt;/a&gt; can tell you why: Because the &lt;b&gt;software or device you are trying to use is designed badly&lt;/b&gt;. There aren't that many tasks in the world that should require reading a tight manual or taking a course. This is not an excuse for the learned helplessness, though. When you next time you have problems doing a task, think about it. &lt;b&gt;Is it because of you or is it the bad design?&lt;/b&gt; How would you improve it? But don't just give up.&lt;br /&gt;&lt;br /&gt;And if you are the designer, you don't have excuses.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-255925731560456063?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/255925731560456063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/who-fault-is-it-anyway_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/255925731560456063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/255925731560456063'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/who-fault-is-it-anyway_18.html' title='Who&amp;#39;s fault is it anyway?'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TOTkzW0qjdI/AAAAAAAAARU/VoowIFZ5quE/s72-c/9780262640374-f30.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-7769687903470483158</id><published>2010-11-14T22:00:00.001+02:00</published><updated>2011-01-13T21:00:53.228+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cognitive Science and HCI'/><title type='text'>How do people act?</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TODaplV6EHI/AAAAAAAAARQ/b1xV1i6OyXo/s1600/question-mark.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="176" src="http://1.bp.blogspot.com/_g6jnLh81N64/TODaplV6EHI/AAAAAAAAARQ/b1xV1i6OyXo/s200/question-mark.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.javatuning.com/tag/question/"&gt;Image&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Creating usable software is not easy. You are blind for the usability problems of your user interface because you&amp;nbsp;&lt;b&gt;know&amp;nbsp;&lt;/b&gt;how things work. You don't need feedback in a way that other users of your system need. You don't need the system to tell you what actions are available in each situation. If an action takes some time, you know what is happening(right?), but it must be told for the others!&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;When designing an user interface, it helps if you know something about how people act, that is, how they plan their actions and how they see and structure the world. It's good to realize in the first place, that people's behavior could better be described as situational than planned. They don't always have a plan to follow; probably they don't even know what is possible in the first place. You may also have a nice mental model of your softwares function in your head, but you should remember that other users probably never has the same model. They construct their own based on the things they see and actions they do and the feedback they receive.&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TOAv3tSAn6I/AAAAAAAAARI/bIlZCL6Semc/s1600/The+Action+Cycle.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_g6jnLh81N64/TOAv3tSAn6I/AAAAAAAAARI/bIlZCL6Semc/s1600/The+Action+Cycle.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The Action Cycle&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Donald_Norman"&gt;Donald A. Norman&lt;/a&gt; has one way to describe people's behavior. He calls it &lt;b&gt;The Seven Stages of Action&lt;/b&gt; (&lt;a href="http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&amp;amp;tid=5393"&gt;The Design of Everyday Things&lt;/a&gt;). The basic idea is simple and consists of four things. Everything starts from &lt;b&gt;goals&lt;/b&gt;, the objective to the action. Second thing is the &lt;b&gt;world &lt;/b&gt;which is the target of all actions. Goals picture states in which the user would like to see the world. Two things are between the goals and the world: &lt;b&gt;execution &lt;/b&gt;and &lt;b&gt;evaluation&lt;/b&gt;. In execution the user makes actions for the world and then she evaluates the state of the world after the actions and compares it to the goals. This is called &lt;b&gt;the action cycle&lt;/b&gt;.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;As you can see, there is only three action related sections here and the model was called seven stages of action. Execution and evaluation can bot be divided to three subtasks. Here is the full picture:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TOA2rLBC_6I/AAAAAAAAARM/eic3iJTBv-Q/s1600/The+seven+stages+of+action.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_g6jnLh81N64/TOA2rLBC_6I/AAAAAAAAARM/eic3iJTBv-Q/s320/The+seven+stages+of+action.png" width="315" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The seven stages of action.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Goals needs to be translated into &lt;b&gt;intentions &lt;/b&gt;which are more specific executable and achievable statements of what is to be done. These intentions are then turned to &lt;b&gt;sequence of actions&lt;/b&gt; that really result in achieving the intention. Finally, this sequence of actions is executed which changes&amp;nbsp;&lt;b&gt;the world&lt;/b&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After and while executing the actions, we &lt;b&gt;perceive the world&lt;/b&gt; and get the sense of its state. By perceiving the world we get data which we need to translate into information. In other words, we try to &lt;b&gt;interpret the perception&lt;/b&gt;, make sense of it. Finally we judge if the change in the world is what we wanted in the first place by &lt;b&gt;evaluating the interpretations&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These stages form the model to explain how people do things. Problems in any of the stages makes the user feel uneasy and judge the software she is using. Or actually, makes her blame herself for she can't use the program, another topic of the book. This model can be used to help you design and evaluate your user interface. It should be clear for the user what the software can do (&lt;b&gt;goals&lt;/b&gt;) and how it does it (&lt;b&gt;intentions&lt;/b&gt;). Possible actions should be available and understandable so the user may see what it takes to fulfill the intentions (sequence of actions). Interaction with the software should be intuitive and obvious, natural (execution).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The user has no idea what the system does in the background so all feedback is welcome (&lt;b&gt;perceiving the state of the world&lt;/b&gt;). All informative feedback is welcome. Everything you give to the user should say something to her and be meaningful. Use internal logs for everything else to avoid confusion. If an action takes time, tell it to the user. If there is a problem, tell what's wrong. If possible, tell the user what the program needs before it can finish. Based on the feedback, the user judges if the things she did was correct or not and it her goals was met (&lt;b&gt;interpreting the perception and evaluating the interpretations&lt;/b&gt;). It's not only what you show but how you do it also counts.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Remember that this is not a full theory of human behavior but rather a directional model to explain it. All the stages are not required for all action. The sequence of actions may be completely different in some situations. If you want to know more (and if you ever work with user interfaces, you should), start by reading the Design of Everyday Things.&amp;nbsp;&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/5162137887150660076-7769687903470483158?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7769687903470483158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/how-do-people-act_14.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7769687903470483158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7769687903470483158'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/how-do-people-act_14.html' title='How do people act?'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TODaplV6EHI/AAAAAAAAARQ/b1xV1i6OyXo/s72-c/question-mark.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5105483941325112779</id><published>2010-11-11T19:41:00.001+02:00</published><updated>2011-01-13T21:00:53.231+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Game Development'/><title type='text'>Games with Python</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TNwqdsnJVpI/AAAAAAAAARA/8iSruxTj09A/s1600/pygame_logo.gif" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="94" src="http://3.bp.blogspot.com/_g6jnLh81N64/TNwqdsnJVpI/AAAAAAAAARA/8iSruxTj09A/s320/pygame_logo.gif" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.pygame.org/docs/logos.html"&gt;Image&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Link tip: &lt;a href="http://inventwithpython.com/blog/category/code-comments/"&gt;Invent with Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If someone would ask me how to get started with programming if you are interested in game making, I might recommend to go with Python. I might. Python is a language that you can generate a lot of functionality in a short time. There are things I don't like about it, like class code syntax and API naming conventions, but otherwise it's simple and you don't have to do everything yourself.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://inventwithpython.com/blog/category/code-comments/"&gt;Invent with python&lt;/a&gt; blog contains some source code examples of how to make small games. It's always good to take a look on how things could be done so you don't need to invent the wheel again.&lt;br /&gt;&lt;br /&gt;Other resources that I have stumbled upon on my way:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gamedev.net/reference/articles/article2259.asp"&gt;How To Build a Game In A Week From Scratch With No Budget&lt;/a&gt;:&lt;br /&gt;Article about doing a game in a week with Python.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pygame.org/news.html"&gt;Pygame&lt;/a&gt;:&lt;br /&gt;Library for game development.&lt;br /&gt;&lt;br /&gt;Sadly I've never had time to really concentrate to Python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5105483941325112779?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5105483941325112779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/games-with-python_11.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5105483941325112779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5105483941325112779'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/games-with-python_11.html' title='Games with Python'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_g6jnLh81N64/TNwqdsnJVpI/AAAAAAAAARA/8iSruxTj09A/s72-c/pygame_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2736628049272206292</id><published>2010-11-02T14:38:00.001+02:00</published><updated>2011-01-13T21:00:53.233+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Problem solving'/><title type='text'>Java generics and overloading and "the same erasure"</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Sometimes programming isn't that relaxing...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I was going to code one project with another computer than my own laptop, but I instantly run into problems. The code doesn't compile. I just can't see how the environment is different. This code works with my laptop, but not on another computer.&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TM_5-szFcpI/AAAAAAAAAQc/OnzxK8fC2Eg/s1600/SomeError.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="166" src="http://2.bp.blogspot.com/_g6jnLh81N64/TM_5-szFcpI/AAAAAAAAAQc/OnzxK8fC2Eg/s320/SomeError.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Errors?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Here is the same situation with different sample code:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TM_6UVxPlhI/AAAAAAAAAQg/iWlnd2ROzow/s1600/SomeError2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="192" src="http://2.bp.blogspot.com/_g6jnLh81N64/TM_6UVxPlhI/AAAAAAAAAQg/iWlnd2ROzow/s320/SomeError2.PNG" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://pastebin.com/t2hqigCZ"&gt;Code in Pastebin.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;a href="http://stackoverflow.com/questions/1998544/method-has-the-same-erasure-as-another-method-in-type"&gt;This&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt; StackOverflow thread discusses the same problem which seems to be: Java Generics uses Type Erasure. This means, that contents of the &amp;lt; &amp;gt; will be erased at compile time, and the method signatures are actually the same.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&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: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;But why does it compile on some platforms? I'm not sure, but I am ready to believe it has something to do with &lt;a href="http://stackoverflow.com/questions/1435779/differing-behaviour-between-java-5-6-when-overloading-generic-methods"&gt;this&lt;/a&gt;, in other words, bugs.&amp;nbsp;At some circumstances the code will compile fine even if it should not. I haven't checked yet if the code fails to compile if I update the environment of my laptop, but I kind of hope it will. I can't get the code to compile even if I change compiler to 1.5 from 1.6, but it might be that the bugs has been fixed on this jre6.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&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: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;I am more than happy, if someone clarifies this for me. Until that, I assume this happened because of the bugs, and the original code should not have ever compiled.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&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: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Case closed, well spent n hours.&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/5162137887150660076-2736628049272206292?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2736628049272206292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/java-generics-and-overloading-and-same_02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2736628049272206292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2736628049272206292'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/11/java-generics-and-overloading-and-same_02.html' title='Java generics and overloading and &amp;quot;the same erasure&amp;quot;'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g6jnLh81N64/TM_5-szFcpI/AAAAAAAAAQc/OnzxK8fC2Eg/s72-c/SomeError.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-9212775111430843159</id><published>2010-10-29T09:59:00.001+03:00</published><updated>2011-01-13T21:00:53.236+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Deploy faster, be happier?</title><content type='html'>Kent Beck posted a blog text about reasons &lt;a href="http://www.threeriversinstitute.org/blog/?p=566"&gt;why to accelerate deployment&lt;/a&gt;. Obviously there are lots of reasons, scaling, competition, keeping the project at hand... Lots of, read the blog.&lt;br /&gt;&lt;br /&gt;Why do I think deploying faster is good? When I am programming my own projects, the main reason is the last that Beck mentions. &lt;b&gt;Fun&lt;/b&gt;. I wan't to see progress. I want to see my application to grow and how beautifully implemented features work. If I deploy often, the whole package stays in good shape, since I can't just hack something together. I hate if my project is unrunnable for a long time. It isn't fun to code, if you don't see the results.&lt;br /&gt;&lt;br /&gt;One big reason why I like programming, is that I can see my hands work in action. If I deploy faster, I see it faster. For me, programming is supposed to be fun after all. I would not be doing this if it isn't.&lt;br /&gt;&lt;br /&gt;By the way, there are many problems that sucks the fun out of programming. Maybe more about them later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-9212775111430843159?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/9212775111430843159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/deploy-faster-be-happier_29.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9212775111430843159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9212775111430843159'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/deploy-faster-be-happier_29.html' title='Deploy faster, be happier?'/><author><name>Arttu</name><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-5162137887150660076.post-6996978311203863647</id><published>2010-10-29T08:18:00.001+03:00</published><updated>2011-01-13T21:00:53.240+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Updater'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Plans for the Updater</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TMpY2hSNkVI/AAAAAAAAAP4/fgYIrvLTyaQ/s1600/UpdateIcon.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_g6jnLh81N64/TMpY2hSNkVI/AAAAAAAAAP4/fgYIrvLTyaQ/s200/UpdateIcon.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://icons.mysitemyway.com/"&gt;Image.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I've kind of decided to raise the bar a little. I was going to make the updater as simple as possible, but it feels that I should make it more common. It should be possible to download multiple files instead of one, and also define where they are going to. Program will also verify their correctness by hashing. I'll probably download the files simultaneously by using threads, so I can add nice progress bars to show the situation. Canceling must also be made work. I'll first download all to temp folder, then copy the previous version to another and then activate the new version.&lt;br /&gt;&lt;br /&gt;The updater can be located inside the jar of application. It just needs to be moved away from there when the update starts. The application must also make a settings file to tell the update site and current version. Then the updater will download another settings file stating files to be downloaded and so on.&lt;br /&gt;&lt;br /&gt;Not too complicated, but it demands pedantic and hardworking coding to make everything work. With this anyone should be able to add updating to their application relatively easy, including me. I also need this for one university project, so it's a win-win project! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-6996978311203863647?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/6996978311203863647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/plans-for-updater_29.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6996978311203863647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/6996978311203863647'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/plans-for-updater_29.html' title='Plans for the Updater'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g6jnLh81N64/TMpY2hSNkVI/AAAAAAAAAP4/fgYIrvLTyaQ/s72-c/UpdateIcon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4761636095389649120</id><published>2010-10-09T20:14:00.001+03:00</published><updated>2011-01-13T21:00:53.244+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Updater'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Updater for Java programs</title><content type='html'>Auto-update is a &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/09/auto-update-java-program.html"&gt;required feature&lt;/a&gt; in desktop programs. Luckily a Java program can be a single Jar file that doesn't need to be installed, so it's easy to update it. Here is my simple plan:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TLCfcNLXhSI/AAAAAAAAAO0/x9oSDhllF0c/s1600/Updatersequencediagram.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_g6jnLh81N64/TLCfcNLXhSI/AAAAAAAAAO0/x9oSDhllF0c/s320/Updatersequencediagram.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Updater sequence diagram&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I simply create a Java program that can be started from another. Starter must give the name of the file to be replaced and the website from where the update will be downloaded. Then the starter will shut down (you can't change the Jar while it is still running). Updater will download the new file and replace old one with it, and then start the updated program and close itself.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This should be pretty multipurpose program and could be used by any program that is made of from one Jar file. It should be easy to make it download multiple files as well. A lot of shoulds... This is not the ideal updater, this is not an auto-update. Close enough. In any case all the users don't want their programs to download anything when they are not told to, so this is a safe option. I don't think it is too much to the user to click "Update" and "Finish" to update the program.&lt;br /&gt;&lt;br /&gt;The updater is almost finished, but I don't add images yet. &lt;a href="http://code.google.com/p/updaterforjavaprograms/"&gt;Here &lt;/a&gt;you can check the source code.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4761636095389649120?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4761636095389649120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/updater-for-java-programs_09.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4761636095389649120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4761636095389649120'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/updater-for-java-programs_09.html' title='Updater for Java programs'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TLCfcNLXhSI/AAAAAAAAAO0/x9oSDhllF0c/s72-c/Updatersequencediagram.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4173843804369621272</id><published>2010-10-07T11:48:00.001+03:00</published><updated>2011-01-13T21:00:53.247+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Conditional operator in Java</title><content type='html'>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TK17b-I5K7I/AAAAAAAAAOk/QSFsUeJgMP8/s1600/ConditionalOperator.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TK17b-I5K7I/AAAAAAAAAOk/QSFsUeJgMP8/s1600/ConditionalOperator.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Conditional operator&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Above code is something I don't want run into when reading through some code. My opinion is that this is unnecessarily unclear would be better presented as:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TK17imdTWCI/AAAAAAAAAOo/9yhn9QDK0kU/s1600/ifelse.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TK17imdTWCI/AAAAAAAAAOo/9yhn9QDK0kU/s1600/ifelse.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;If-else -structure&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Or would it? I must admit, that especially in this example it looks very nice and somehow even simpler than using if-else -structure. I just have some doubts for the syntax, it isn't obvious how it should be understood when you read it for the first time. If-else doesn't have the same problem, I think even non-programmers understands what the later code does. At some level.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;How does the Conditional Operator work?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The goal of conditional operator is to decide which of two values to assign to a variable (Sierra &amp;amp; Bates 2006). Structure is:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;variable = (boolean expression) &lt;b&gt;?&lt;/b&gt; value to assign if true &lt;b&gt;:&lt;/b&gt; value to assign if false&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Conditional operators can be nested into one statement like this:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TK1-4n7gukI/AAAAAAAAAOs/PclSnETYy-0/s1600/ComplexConditionalOperator.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="145" src="http://3.bp.blogspot.com/_g6jnLh81N64/TK1-4n7gukI/AAAAAAAAAOs/PclSnETYy-0/s400/ComplexConditionalOperator.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Complex conditional statement&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;This example prints "Within limits" when numberOfHits is less than limit, "Off the limits" when more than limit but less than max, and "Over the max" when over max.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I might give conditional operator a try after all.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reference:&lt;/div&gt;&lt;div&gt;Kathy Sierra, Bert Bates (2006) Sun Certified Programmer for Java 5 Study Guide. McGraw-Hill/Osborne, California U.S.A.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4173843804369621272?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4173843804369621272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/conditional-operator-in-java_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4173843804369621272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4173843804369621272'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/10/conditional-operator-in-java_07.html' title='Conditional operator in Java'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TK17b-I5K7I/AAAAAAAAAOk/QSFsUeJgMP8/s72-c/ConditionalOperator.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-681198363867783363</id><published>2010-09-29T11:50:00.001+03:00</published><updated>2011-01-13T21:00:53.249+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><title type='text'>Firesoft 1.3</title><content type='html'>&lt;a href="http://firesoft.googlecode.com/files/Firesoft%201.3.zip"&gt;Download&lt;/a&gt;&amp;nbsp;and check the &lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TKL8ysPMRWI/AAAAAAAAAOU/RHfT3_DJF3M/s1600/Firesoft_1.3.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="32" src="http://3.bp.blogspot.com/_g6jnLh81N64/TKL8ysPMRWI/AAAAAAAAAOU/RHfT3_DJF3M/s400/Firesoft_1.3.PNG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;"Improved" GUI&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TKL9Dk8zryI/AAAAAAAAAOc/gJydP_itNlw/s1600/Firesoft_1.3_Settings.PNG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="125" src="http://4.bp.blogspot.com/_g6jnLh81N64/TKL9Dk8zryI/AAAAAAAAAOc/gJydP_itNlw/s200/Firesoft_1.3_Settings.PNG" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Settings&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;What's new:&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Simple &lt;b&gt;threading &lt;/b&gt;so that the software doesn't freeze even if starting the program takes a bit longer&lt;/li&gt;&lt;li&gt;Improvements(?) to the &lt;b&gt;GUI&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Possibility to &lt;b&gt;remove old items&lt;/b&gt; from the list&lt;/li&gt;&lt;li&gt;&lt;b&gt;Items are now sorted&lt;/b&gt; to help manage the list&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Next thing could be &lt;b&gt;auto-update&lt;/b&gt; I was talking about &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/09/auto-update-java-program.html"&gt;earlier&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-681198363867783363?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/681198363867783363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/firesoft-13_29.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/681198363867783363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/681198363867783363'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/firesoft-13_29.html' title='Firesoft 1.3'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_g6jnLh81N64/TKL8ysPMRWI/AAAAAAAAAOU/RHfT3_DJF3M/s72-c/Firesoft_1.3.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-3641276199391623196</id><published>2010-09-28T19:18:00.001+03:00</published><updated>2011-11-20T18:57:34.230+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Updater'/><title type='text'>Auto-update a Java-program</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TKHsoilO0hI/AAAAAAAAANw/cx6q9dTmylU/s1600/005031-blue-white-pearl-icon-arrows-arrows-rotated.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/_g6jnLh81N64/TKHsoilO0hI/AAAAAAAAANw/cx6q9dTmylU/s320/005031-blue-white-pearl-icon-arrows-arrows-rotated.png" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://icons.mysitemyway.com/free-clipart-icons/1/refresh-three-arrows-icon-id/5031/style-id/65/blue-white-pearls-icons/arrows/"&gt;Image.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;(Edit: This text is about theory and such, you'll not find an actual implementation here. One solution would be just to use WebStart.)&lt;br /&gt;&lt;br /&gt;Nowadays you just can't expect your users to download and install new versions of the software every now and then - it must happen automatically so that users don't need to get involved with it at all. I have been playing with &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/search/label/Firesoft"&gt;Firesoft&lt;/a&gt;&amp;nbsp;lately, so it would be handy to add auto-update feature to it as an exercise.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1389047/autoupdate-feature-in-a-java-swing-desktop-app"&gt;Stack Overflow&lt;/a&gt; has a thread concerning this. Java Web Start seems to be the recommended way to deal with auto-update, but I really hate deploying them and I'd also need to sign the jar to get access to the file system. This might not be as big problem as I think it is, but I would like to implement this in a different way.&lt;br /&gt;&lt;br /&gt;Apparently JVM locks the files it is using, so I would need to create a different JAR to handle the update. It could first run and check the newest version from the server (if the user has a network connection) and then ask permission to update and just then start the main program. I should have some kind of configuration file to show which files have changed. What about skipping one or more updates? Multiple configuration files? Or should I just update the whole software every time since it's not that large?&lt;span id="goog_1128079144"&gt;&lt;/span&gt;&lt;span id="goog_1128079145"&gt;&lt;/span&gt;&lt;a href="http://draft.blogger.com/"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I need to study this a bit more and then think about what would be an appropriate way to handle updates.&lt;br /&gt;&lt;br /&gt;... not so fast! Found &lt;a href="http://stackoverflow.com/questions/453005/best-practice-for-autoupdates"&gt;another thread from Stack Overflow&lt;/a&gt;. UserPrime has many good points that I agree. The updating should be done silently in the background. I don't like the idea of doing the update every time the user starts the program, the startup might feel slow. Firesoft is also kind of a program that should be ran in windows startup when there is also a whole lot of other programs starting. Instead I would like software to be updated in the background and then starting the new version next time the user is starting the software. I'm not sure if this is easily implemented, but it would be worth trying. Another way is to download the new version in the background and then add some kind of (small) notification icon that could be clicked to restart (and update) the program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3641276199391623196?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3641276199391623196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/auto-update-java-program_28.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3641276199391623196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3641276199391623196'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/auto-update-java-program_28.html' title='Auto-update a Java-program'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TKHsoilO0hI/AAAAAAAAANw/cx6q9dTmylU/s72-c/005031-blue-white-pearl-icon-arrows-arrows-rotated.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8083147883124893568</id><published>2010-09-19T18:38:00.001+03:00</published><updated>2011-01-13T21:00:53.254+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Don't be evil - information and responsibility</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TJYt5iZbUdI/AAAAAAAAANk/lmszVH9wtc8/s1600/google_dont_be_evil(1).jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_g6jnLh81N64/TJYt5iZbUdI/AAAAAAAAANk/lmszVH9wtc8/s320/google_dont_be_evil(1).jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Former Google motto. &lt;a href="http://arielsilverstone.com/privacy/face-it/"&gt;Image&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;One Google engineer &lt;a href="http://gawker.com/5637234/"&gt;has reported&lt;/a&gt; to be spying on some teens by reading their mails, chats, call logs etc. and then blackmailing them. Google has admitted the problem and has &lt;a href="http://techcrunch.com/2010/09/14/google-engineer-spying-fired/"&gt;fired the engineer in question&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The bad thing is: Why Google didn't notice this abuse&lt;b&gt; by&lt;/b&gt;&amp;nbsp;&lt;b&gt;itself and earlier&lt;/b&gt;? &amp;nbsp;It's good that they made the right actions when the parents contacted them, but without being so arrogant, the engineer might have never been caught. Apparently they are improving how to control employers access to the user data and how to notice unnecessary use of this data. I understand that it can be pain in the developers ass it they don't have access to user's data when they are fixing some problem related to that, but it really should be possible to reveal this kind of abuse.&lt;br /&gt;&lt;br /&gt;There always will be some engineers that have to have access to all private data and it's ok, but something has just went too wrong in this case. I'm not concerned about my privacy now even though I use Gmail a lot, but it's never nice to realize that you privacy might be endangered by some nerd wanting to show off with his position.&lt;br /&gt;&lt;br /&gt;I've always been excited about Google and its products and hope they will learn from this.&lt;br /&gt;&lt;br /&gt;Edit: Information seems to be a theme of the week. &lt;a href="http://nighthacks.com/roller/jag/resource/bio.html"&gt;James Gosling&lt;/a&gt; is &lt;a href="http://nighthacks.com/roller/"&gt;talking about&lt;/a&gt;&amp;nbsp;the universe that is built around us by Google, Facebook and so on. Read the original &lt;a href="http://www.nytimes.com/2010/09/01/opinion/01gibson.html?_r=1"&gt;New York Times article&lt;/a&gt;&amp;nbsp;he is referring to. The situation where big corporations control enormous amount of all kinds of data and affects to our lives by deciding which data should be relevant in each situation(search) is of course alarming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8083147883124893568?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8083147883124893568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/don-be-evil-information-and_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8083147883124893568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8083147883124893568'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/don-be-evil-information-and_19.html' title='Don&amp;#39;t be evil - information and responsibility'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_g6jnLh81N64/TJYt5iZbUdI/AAAAAAAAANk/lmszVH9wtc8/s72-c/google_dont_be_evil(1).jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5129380968478719117</id><published>2010-09-17T13:28:00.001+03:00</published><updated>2011-01-13T21:00:53.256+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Autoboxing and "==" in Java</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Just a small note:&lt;/span&gt;&lt;/span&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TJNApaXFZhI/AAAAAAAAANc/RYbe4H1whog/s1600/auto2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_g6jnLh81N64/TJNApaXFZhI/AAAAAAAAANc/RYbe4H1whog/s320/auto2.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obviously different objects but meaningfully equal.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TJNAl2CvKuI/AAAAAAAAANU/fIVZbsUrwu8/s1600/auto1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_g6jnLh81N64/TJNAl2CvKuI/AAAAAAAAANU/fIVZbsUrwu8/s320/auto1.PNG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Obviously still meaningfully equal and dif... wait!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;From &lt;b&gt;Sun Certified Programmer for Java: Study Guide&lt;/b&gt;:&lt;br /&gt;&lt;blockquote&gt;"In order to save memory, two instances of the following wrapper objects, created through autoboxing, will always be == when their primitive values are the same:&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;- Boolean&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;- Byte&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;- Character from \u0000 to \u007f&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;- Short and Integer from -128 to 127"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5129380968478719117?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5129380968478719117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/autoboxing-and-in-java_17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5129380968478719117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5129380968478719117'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/autoboxing-and-in-java_17.html' title='Autoboxing and &amp;quot;==&amp;quot; in Java'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TJNApaXFZhI/AAAAAAAAANc/RYbe4H1whog/s72-c/auto2.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-9141177824553288665</id><published>2010-09-11T19:15:00.001+03:00</published><updated>2011-01-13T21:00:53.258+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Location based games?</title><content type='html'>I have recently got excited about location based games. It's one option for the topic of my master's thesis so I must get some kind of opinion of them. I got surprised of how many of them there seems to be. I have never heard anyone talk about playing them but according to &lt;a href="http://en.wikipedia.org/wiki/Location-based_game"&gt;Wikipedia&lt;/a&gt;&amp;nbsp;some of the games have tens of thousands of players.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TIuqCPOPgfI/AAAAAAAAAMs/e4fAoGtLzB0/s1600/splash_3.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TIuqCPOPgfI/AAAAAAAAAMs/e4fAoGtLzB0/s320/splash_3.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://www.pacmanhattan.com/"&gt;Pacmanhattan&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Many of the games seems to require the player to live on urban area which is understandable but I would like to create a game that &lt;b&gt;generates the content so that it doesn't matter where the player lives&lt;/b&gt;. Or even better, the &lt;b&gt;content is based on the living area&lt;/b&gt;, and the player must move to get different kind of contents. One option would be a role playing game, where you set the "home" location and the world would change when you move further away from home. Another thing is that you could also play a limited version without the location data when the gps is not working. The threshold to play should be as small as possible, but playing in different areas would be rewarded.&lt;br /&gt;&lt;br /&gt;I also want to use new technology and games to get kids move more and be healthier since this is one thing that games are accused for. And of course, kids should move more outside. I've been planning some kind of exercise game for schools where the teacher could set locations where students should visit. It should not be just orienteering with new twist and possibility for teachers to supervise students preventing them from fleeing away, but &lt;b&gt;fun&lt;/b&gt;. &lt;i&gt;The main objective must be that moving outdoors is fun.&lt;/i&gt; One game could give players some kinds of rewards or scouting-style badges from accomplished objectives like moving particular amount in a week.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TIuqaxbqdTI/AAAAAAAAAM0/DL5bbK0zw60/s1600/3+game+views+-+iphone.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_g6jnLh81N64/TIuqaxbqdTI/AAAAAAAAAM0/DL5bbK0zw60/s320/3+game+views+-+iphone.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://parallelkingdom.com/"&gt;Parallel Kingdom&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Another opportunity in location based games is to get people make new friends and get knowing to other people on the area. And even get new friends in whenever they are going to. This also means &lt;b&gt;new kinds of threats&lt;/b&gt; if players get location information of other players.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kids aren't stupid and they know a whole lot of games.&lt;/b&gt; This makes demanding requirements for a game. It should look good, be fun to play, be addictive, work smoothly, use the high-end technology etc... Gamers and children are a demanding target audience and one must really work hard if the aim is to get them keep on playing or even really test the game.&lt;br /&gt;&lt;br /&gt;I'm looking forward on doing my master's theses. Even though the topic is not set yet. I should get a high-end Android phone to test these games. And iPhone. Just for professional purposes, &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/07/never-again-nokia.html"&gt;that's the only reason&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-9141177824553288665?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/9141177824553288665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/location-based-games_11.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9141177824553288665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/9141177824553288665'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/location-based-games_11.html' title='Location based games?'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TIuqCPOPgfI/AAAAAAAAAMs/e4fAoGtLzB0/s72-c/splash_3.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-3694122570522026684</id><published>2010-09-08T21:17:00.001+03:00</published><updated>2011-01-13T21:01:10.869+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>"Nothing is more dangerous than a programmer who doesn't know what he doesn't know."</title><content type='html'>I just wanted to share thoughts of a guy who has been &lt;a href="http://teddziuba.com/2010/09/programming-things-i-wish-i-knew.html"&gt;programming in a startup for three years&lt;/a&gt;, and learnt in a hard way what &lt;b&gt;not &lt;/b&gt;to do. There are some good points and notes over there.&lt;br /&gt;&lt;blockquote&gt;"How To Avoid Over Complicating": "Like most software people, I have a natural tendency to over-engineer things."&lt;/blockquote&gt;This is something you face over and over again. It's tempting to keep on adding all kinds of nice features to the software - after all you have the perfect world-changing software designed in your head! Just remember, KISS, &lt;a href="http://en.wikipedia.org/wiki/You_ain't_gonna_need_it"&gt;You ain't gonna need it&lt;/a&gt;, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3694122570522026684?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3694122570522026684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/is-more-dangerous-than-programmer-who_08.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3694122570522026684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3694122570522026684'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/is-more-dangerous-than-programmer-who_08.html' title='&amp;quot;Nothing is more dangerous than a programmer who doesn&amp;#39;t know what he doesn&amp;#39;t know.&amp;quot;'/><author><name>Arttu</name><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-5162137887150660076.post-1574190848032111330</id><published>2010-09-07T10:59:00.001+03:00</published><updated>2011-01-13T21:01:10.903+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>File word counter with Python</title><content type='html'>I was thinking small programming tasks today and got excited about Python once again. For me Python is a nice little programming language to play with. It's always nice to become surprised of how easy it's to do some common tasks with Python. Counting words from a file is one good exercise when learning a new language. &lt;a href="https://docs.google.com/leaf?id=0B7njMS-m-8bqZDMyN2Y3NTItYzQ2Yi00MDJlLTg3OWUtYTliZDJjNzg2MDMz&amp;amp;hl=en&amp;amp;authkey=CIOfjvsG"&gt;Here is the result&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TIU-T0DFi-I/AAAAAAAAAME/DC-ayXFvMzQ/s1600/FileWordCounter.py.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="341" src="http://4.bp.blogspot.com/_g6jnLh81N64/TIU-T0DFi-I/AAAAAAAAAME/DC-ayXFvMzQ/s400/FileWordCounter.py.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7njMS-m-8bqZDMyN2Y3NTItYzQ2Yi00MDJlLTg3OWUtYTliZDJjNzg2MDMz&amp;amp;hl=en&amp;amp;authkey=CIOfjvsG"&gt;Source code&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Execution &lt;b&gt;starts from the line 25&lt;/b&gt; where we go through the command line arguments. First argument will be the name of this source file, so the program will always output the number of words in this file also. With each argument we call the method &lt;b&gt;countWords &lt;/b&gt;that checks if the file exists and then calls &lt;b&gt;readFileLineByLineAndCountWords &lt;/b&gt;method that counts the words. There is no exception handling now, but I may add it later. It's quite straightforward anyway, just add&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;try:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;openFile()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;readContents()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;except:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;someKindOfIOError()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;finally:&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;closeFileIfNeeded()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;to appropriate places.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I use Eclipse as Python IDE with &lt;a href="http://pydev.org/"&gt;Pydev&lt;/a&gt;&amp;nbsp;plugin. Maybe more about it later. I haven't found the perfect IDE for Python, but probably I just have used to too good since I usually program Java.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TIU-T0DFi-I/AAAAAAAAAME/DC-ayXFvMzQ/s1600/FileWordCounter.py.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt; &lt;span class="Apple-style-span" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&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/5162137887150660076-1574190848032111330?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1574190848032111330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/file-word-counter-with-python_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1574190848032111330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1574190848032111330'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/file-word-counter-with-python_07.html' title='File word counter with Python'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TIU-T0DFi-I/AAAAAAAAAME/DC-ayXFvMzQ/s72-c/FileWordCounter.py.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2937706125228760019</id><published>2010-09-05T20:54:00.001+03:00</published><updated>2011-01-13T21:01:10.908+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>Starting with JUnit in Eclipse</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;JUnit is a testing framework for Java that you can use to... test your objects. Here is a very short introduction to it. I will use Eclipse to for the examples.&lt;br /&gt;&lt;br /&gt;Creating a test case is similar to creating a class:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TIOxoyKwPcI/AAAAAAAAAKk/unLQH5Xaosw/s1600/NewTestCase.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TIOxoyKwPcI/AAAAAAAAAKk/unLQH5Xaosw/s320/NewTestCase.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Creating a new test case.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TIOyBxUE3fI/AAAAAAAAAK0/m_Qt3QZfhFo/s1600/TestCaseOptions.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TIOyBxUE3fI/AAAAAAAAAK0/m_Qt3QZfhFo/s320/TestCaseOptions.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Options for the new test case.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;All you need is to give a name to your test case. If you like, you can also autogenerate some set up methods. If you have already implemented a class and wan't to test a particular method, you can select the class under test in this dialog. I will just select all the set up and tear down methods to demonstrate the run flow of the test.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TIOy9W3n6SI/AAAAAAAAAK8/sDfRMVxsCAc/s1600/JUnitToClassPath.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_g6jnLh81N64/TIOy9W3n6SI/AAAAAAAAAK8/sDfRMVxsCAc/s320/JUnitToClassPath.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;JUnit to the build path.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;Eclipse will automatically ask to add JUnit to the build path, enjoy the benefits of modern IDEs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TIOzRkvL3yI/AAAAAAAAALE/rDfm1bX2MiY/s1600/CreatedTestCase.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="178" src="http://3.bp.blogspot.com/_g6jnLh81N64/TIOzRkvL3yI/AAAAAAAAALE/rDfm1bX2MiY/s200/CreatedTestCase.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Just (automatically) created test case.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I will add a few actual test methods so we have a proper example of the execution flow:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TIO3Cc9-YpI/AAAAAAAAALM/FO6KU8j3vaQ/s1600/FinalExampleTestCase.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TIO3Cc9-YpI/AAAAAAAAALM/FO6KU8j3vaQ/s320/FinalExampleTestCase.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Two test methods added.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Running the test case is also similar to running a class:&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TIO3bnWJzWI/AAAAAAAAALU/37-79ZNLw0Y/s1600/RunningATestCase.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TIO3bnWJzWI/AAAAAAAAALU/37-79ZNLw0Y/s320/RunningATestCase.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Running a test case.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;And we got the results:&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TIO3gYl4soI/AAAAAAAAALc/J7onRrLydxc/s1600/RunningResults.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_g6jnLh81N64/TIO3gYl4soI/AAAAAAAAALc/J7onRrLydxc/s320/RunningResults.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Test results.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Let's wrap up all of this. As you can see from the test case, JUnit4 uses annotations for method roles. In the test we have roles:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;@BeforeClass&lt;/li&gt;&lt;li&gt;@AfterClass&lt;/li&gt;&lt;li&gt;@Before&lt;/li&gt;&lt;li&gt;@After&lt;/li&gt;&lt;li&gt;@Test&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;div&gt;First of all, tests with same annotation will be run in top-down order. Methods annotated as @BeforeClass and @AfterClass, will be run before and after everything else, and only once per test case. @Before and @After annotated methods are run before and after each test method, which are annotated as @Test. You can see this clearly from the console output:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;setUpBeforeClass&lt;/div&gt;&lt;div&gt;setUp&lt;/div&gt;&lt;div&gt;testOne&lt;/div&gt;&lt;div&gt;tearDown&lt;/div&gt;&lt;div&gt;setUp&lt;/div&gt;&lt;div&gt;testTwo&lt;/div&gt;&lt;div&gt;tearDown&lt;/div&gt;&lt;div&gt;tearDownAfterClass&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can use these helper methods to reserve resources and set up the test situation before the actual test(s) and release the resources after them. A new instance of a test case is made for each test method meaning that possible instance variables are reset between the tests.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we make these modifications to the test case:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TIPUdWTrMOI/AAAAAAAAAL0/rbPaE7OJhqQ/s1600/IncreasingCounter.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="68" src="http://2.bp.blogspot.com/_g6jnLh81N64/TIPUdWTrMOI/AAAAAAAAAL0/rbPaE7OJhqQ/s200/IncreasingCounter.png" width="200" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TIPUXyIB66I/AAAAAAAAALs/jaTO40QwWoo/s1600/CounterInstanceVariable.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="103" src="http://2.bp.blogspot.com/_g6jnLh81N64/TIPUXyIB66I/AAAAAAAAALs/jaTO40QwWoo/s200/CounterInstanceVariable.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(Sorry about the changed method names.) As a result the counter will have the same value of 1 in both test methods. I had some problems with this when I first started to use JUnit since I thought it would work the same way as other Java classes.&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TIPVC82mVPI/AAAAAAAAAL8/AKvucrH2G7s/s1600/InstanceVariablesResults.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_g6jnLh81N64/TIPVC82mVPI/AAAAAAAAAL8/AKvucrH2G7s/s320/InstanceVariablesResults.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Method names have changed, sry.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;That's it for now, I'll post something about the assertions later.&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2937706125228760019?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2937706125228760019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/starting-with-junit-in-eclipse_05.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2937706125228760019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2937706125228760019'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/starting-with-junit-in-eclipse_05.html' title='Starting with JUnit in Eclipse'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TIOxoyKwPcI/AAAAAAAAAKk/unLQH5Xaosw/s72-c/NewTestCase.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-4114521314866647011</id><published>2010-09-01T20:34:00.001+03:00</published><updated>2011-01-13T21:01:10.912+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Appraisals'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><title type='text'>Firesoft 1.2 with new (free) graphics</title><content type='html'>Download:&lt;br /&gt;&lt;a href="http://code.google.com/p/firesoft/downloads/list"&gt;http://code.google.com/p/firesoft/downloads/list&lt;/a&gt;&lt;br /&gt;Source:&lt;br /&gt;&lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;http://code.google.com/p/firesoft/source/checkout&lt;/a&gt;&lt;br /&gt;Issues:&lt;br /&gt;&lt;a href="http://code.google.com/p/firesoft/issues/list"&gt;http://code.google.com/p/firesoft/issues/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Firesoft has gone to version 1.2! What's new? I added &lt;b&gt;new buttons&lt;/b&gt; to GUI and it should look a bit better now:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TH6NaXkDVZI/AAAAAAAAAKM/pEBRvMCU3EM/s1600/MainWindow_1.2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TH6NaXkDVZI/AAAAAAAAAKM/pEBRvMCU3EM/s320/MainWindow_1.2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;New main window.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/TH6N4wO3qOI/AAAAAAAAAKc/Yh318NW1Xfk/s1600/Settings_1.2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_g6jnLh81N64/TH6N4wO3qOI/AAAAAAAAAKc/Yh318NW1Xfk/s320/Settings_1.2.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;New settings window.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Compare to &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/08/firesoft-11.html"&gt;these&lt;/a&gt;, and feel free to tell your opinion.&lt;br /&gt;&lt;br /&gt;Also the &lt;b&gt;code has been cleaned&lt;/b&gt; and some small tweaks made, like now the command line will have the focus each time the program window is opened.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is to be done&lt;/b&gt;? The &lt;b&gt;exit button&lt;/b&gt; should be smaller or in different place to avoid accidental clicks. It would also be handy to have a button that would &lt;b&gt;check each file and if they are still existed&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Suck at drawing? Can't make graphics for your own software? Not a problem, web is full of royalty free stuff, for example check &lt;a href="http://icons.mysitemyway.com/"&gt;this&lt;/a&gt;&amp;nbsp;out. There is a whole lot of stuff there.&lt;br /&gt;&lt;br /&gt;I used "Matte White Square" icons:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TH6M7gSOW-I/AAAAAAAAAKE/v5T0Zc5_yaA/s1600/matte-white-square-icons-media.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="111" src="http://1.bp.blogspot.com/_g6jnLh81N64/TH6M7gSOW-I/AAAAAAAAAKE/v5T0Zc5_yaA/s400/matte-white-square-icons-media.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;a href="http://icons.mysitemyway.com/"&gt;Image from Icons etc.&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-4114521314866647011?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/4114521314866647011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/firesoft-12-with-new-free-graphics_01.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4114521314866647011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/4114521314866647011'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/09/firesoft-12-with-new-free-graphics_01.html' title='Firesoft 1.2 with new (free) graphics'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TH6NaXkDVZI/AAAAAAAAAKM/pEBRvMCU3EM/s72-c/MainWindow_1.2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-1586600372436485565</id><published>2010-08-30T21:17:00.001+03:00</published><updated>2011-01-13T21:01:10.916+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><title type='text'>Firesoft 1.1</title><content type='html'>Download:&lt;br /&gt;&lt;a href="http://code.google.com/p/firesoft/downloads/list"&gt;http://code.google.com/p/firesoft/downloads/list&lt;/a&gt;&lt;br /&gt;Source code:&lt;br /&gt;&lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;http://code.google.com/p/firesoft/source/checkout&lt;/a&gt;&lt;br /&gt;Issues:&lt;br /&gt;&lt;a href="http://code.google.com/p/firesoft/issues/list"&gt;http://code.google.com/p/firesoft/issues/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just finished refactoring &lt;a href="http://code.google.com/p/firesoft/"&gt;Firesofts &lt;/a&gt;GUI code and released it as a version 1.1. There's not much new functionality, but the file names can now be changed.&lt;br /&gt;&lt;br /&gt;Here's the new look:&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THvzxCvTKlI/AAAAAAAAAJo/cxpoekFfMC0/s1600/MainWindow.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="76" src="http://1.bp.blogspot.com/_g6jnLh81N64/THvzxCvTKlI/AAAAAAAAAJo/cxpoekFfMC0/s400/MainWindow.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The main window&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Still ugly? Hell yeah! But under the surface it's a bit clearer. Anyway I need to do something for the looks also.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Here is the new settings window with a new "Save" button to save new file names typed by the user. Saving should be done automatically...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/THv0P916ilI/AAAAAAAAAJw/JxwPz4fiOew/s1600/Settings.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="276" src="http://3.bp.blogspot.com/_g6jnLh81N64/THv0P916ilI/AAAAAAAAAJw/JxwPz4fiOew/s400/Settings.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Settings&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;This is still a work in progress, but it's working.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I need a graphic designer...&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Compare to the &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/08/new-project-firesoft-released.html"&gt;older version&lt;/a&gt;. The main window might be even uglier than before...&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;And the&amp;nbsp;&lt;a href="http://code.google.com/p/firesoft/issues/detail?id=16"&gt;first bug &lt;/a&gt;is found: Forgot to create functionality for "Go" button. The whole button is a bit obsolete since it's much easier to use Enter.&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/5162137887150660076-1586600372436485565?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/1586600372436485565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/firesoft-11_30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1586600372436485565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/1586600372436485565'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/firesoft-11_30.html' title='Firesoft 1.1'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/THvzxCvTKlI/AAAAAAAAAJo/cxpoekFfMC0/s72-c/MainWindow.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-5224968557140148878</id><published>2010-08-28T17:32:00.001+03:00</published><updated>2011-01-13T21:01:10.919+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>Sketching a To-Do list</title><content type='html'>Yesterday I noticed once again that it would be handy to have a good to-do list. To-do list would be simple enough to implement by myself, but maybe it would be more rational just to use existing one. Anyway, here are some sketches of what the GUI would look like:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THkZziqy2JI/AAAAAAAAAJY/-52txHeD_9A/s1600/To-Dolist.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_g6jnLh81N64/THkZziqy2JI/AAAAAAAAAJY/-52txHeD_9A/s320/To-Dolist.png" /&gt;&lt;/a&gt;&lt;/div&gt;First idea was that the tasks could be a sequence of rectangles drawn on the desktop. One task could consist of many phases and the software would show where you are going. Subtasks would be connected with arrows. After finishing the task, it would go to finished tasks and you could see what has been done.&lt;br /&gt;&lt;br /&gt;That might be a bit hard to implement with Java.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THkaeuBz8nI/AAAAAAAAAJg/Csltvbdoa1Y/s1600/To-Do2.0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/THkaeuBz8nI/AAAAAAAAAJg/Csltvbdoa1Y/s320/To-Do2.0.png" /&gt;&lt;/a&gt;&lt;/div&gt;Another idea was to simplify the GUI a bit, but I think this is still too complicated. &amp;nbsp;I don't like implementing the GUI because I suck at it. User should be able to reorder subtasks by drag&amp;amp;drop and easily add new ones.&lt;br /&gt;&lt;br /&gt;After all, I think creating this might be too time consuming. If I make my own to-do list, it should have some features or some idea you can't find from anywhere else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-5224968557140148878?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5224968557140148878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/sketching-to-do-list_28.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5224968557140148878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5224968557140148878'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/sketching-to-do-list_28.html' title='Sketching a To-Do list'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/THkZziqy2JI/AAAAAAAAAJY/-52txHeD_9A/s72-c/To-Dolist.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-275577807532663847</id><published>2010-08-26T13:04:00.001+03:00</published><updated>2011-01-13T21:01:10.925+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><title type='text'>Note to self: Check the output data</title><content type='html'>&lt;a href="http://www.blogger.com/"&gt;&lt;span id="goog_682550497"&gt;&lt;/span&gt;Some days ago&lt;span id="goog_682550498"&gt;&lt;/span&gt;&lt;/a&gt; I wrote about always checking the source materials. Now it's time to talk about checking the output data that your software results. This time the (beginners) problem was using the '\n' line separator when the windows's '\r\n' was expected, or more commonly I should have been (obviously) used:&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoPlainText"&gt;System.getProperty("line.separator")&lt;/div&gt;&lt;div class="MsoPlainText"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoPlainText"&gt;I would have noticed the problem if I had opened the output files in a Notepad (which I thought I had done). Eclipse's text editor shows '\n' in a correct way.&lt;br /&gt;&lt;br /&gt;You should always pay attention to character sets when you are dealing with conversion problems. Define or find out the charset that's going to be used. Otherwise you might run into problems where for example å, ä and ö takes two chars instead of one, and this can cause problems in fixed length files. I had a problems that lines containing special chars were too short since the conversion program counted them as two characters but they were a single character in the output file.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THY4atmtCfI/AAAAAAAAAH4/sZxSKiQ0gqo/s1600/CharsetProblem.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="112" src="http://4.bp.blogspot.com/_g6jnLh81N64/THY4atmtCfI/AAAAAAAAAH4/sZxSKiQ0gqo/s400/CharsetProblem.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;Here is one test file opened in Eclipse text editor and in Notepad. You can spot the difference. On the left the editor shows special characters in a wrong way which makes it seem that all the lines are of same length. But when you open it in the Notepad that correctly shows the characters, you note that each special character makes the line one character shorter. In fixed length file this is not acceptable.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/THY7qLCq6gI/AAAAAAAAAIA/PKFUNTgqOus/s1600/WrongLineEnd.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="62" src="http://3.bp.blogspot.com/_g6jnLh81N64/THY7qLCq6gI/AAAAAAAAAIA/PKFUNTgqOus/s400/WrongLineEnd.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here is also the situation with the '\n' line break character. No problems with eclipse, but the Notepad with Windows character set doesn't know how to handle the character.&lt;br /&gt;&lt;br /&gt;Stupid mistakes that would have been prevented by sufficient planning.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-275577807532663847?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/275577807532663847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/note-to-self-check-output-data_26.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/275577807532663847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/275577807532663847'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/note-to-self-check-output-data_26.html' title='Note to self: Check the output data'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/THY4atmtCfI/AAAAAAAAAH4/sZxSKiQ0gqo/s72-c/CharsetProblem.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-95186022655175713</id><published>2010-08-24T20:36:00.001+03:00</published><updated>2011-01-13T21:01:10.942+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>"When the compiler's not happy, ain't nobody happy."</title><content type='html'>This seems to be the main point of Sun Certified Programmer for Java -test. I am reading the Study Guide for the certification and most of the things I've learned this far has been ones that the compiler should take care of. I can't understand why I need to memorize them, this is the 21st century for gods sake! We have IDEs to do the work for us so we can concentrate on higher level things!&lt;br /&gt;&lt;br /&gt;Lets take a look:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static void main(String[] args) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int year;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int month;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int day;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int hour;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if(args.length &amp;lt; 4) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;year = 2010;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;month = 2;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;day = 5;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;} else {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;year = 2010;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;month = 2;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;day = 17;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hour = 15;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(year + " " + month + " " + day + " " + hour);&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ok, there is a &lt;b&gt;nasty bug&lt;/b&gt;. If there is less than four parameters for the main method, local variable "hour" will not be initialized when it's printed to System.out. When you try to build this, the compiler would complain something like:&lt;br /&gt;&lt;br /&gt;"The local variable hour may not have been initialized."&lt;/div&gt;&lt;br /&gt;And then you would need to find the error from the source and correct it and rebuild and... wait, you don't. Naturally you are writing the code with Eclipse or NetBeans or what ever and at the time you write the "System.out.println..." line, the IDE would show this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THOeN2I7FwI/AAAAAAAAAEA/JBiTIIVHzwU/s1600/Eclipse.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://4.bp.blogspot.com/_g6jnLh81N64/THOeN2I7FwI/AAAAAAAAAEA/JBiTIIVHzwU/s400/Eclipse.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;... And you would immediately fix it. &lt;b&gt;I don't mean that knowing these things is useless&lt;/b&gt;, but it feels a bit vain to spend my time reading these things from the book. :) I understand why the certification is done this way and all, this is just my whining - I am bad in remembering minor details I don't need very often.&lt;br /&gt;&lt;br /&gt;This is just an easy example of Java certification requirements. I will not start talking about the cases in which they have made their best effort to hide a small syntax error by doing the code unreadable and idiotically formatted. Not yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-95186022655175713?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/95186022655175713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/compiler-not-happy-ain-nobody-happy_24.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/95186022655175713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/95186022655175713'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/compiler-not-happy-ain-nobody-happy_24.html' title='&amp;quot;When the compiler&amp;#39;s not happy, ain&amp;#39;t nobody happy.&amp;quot;'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/THOeN2I7FwI/AAAAAAAAAEA/JBiTIIVHzwU/s72-c/Eclipse.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-8155643433930524621</id><published>2010-08-23T15:00:00.001+03:00</published><updated>2011-01-13T21:01:10.946+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Builder Pattern</title><content type='html'>I don't think that anyone &lt;b&gt;likes &lt;/b&gt;this:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public Character(String name, String gender, int height, int&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;weight, int age) {&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.name = name;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.gender = gender;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.height = height;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.weight = weight;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.age = age;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since using it will be like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Character character =&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;new Character("Name", "Female", 158, 45, 21);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This argument list is still short, you know there can be a whole lot more of them and how could you remember what each of them means... Then you need to go and check what kind of argument list the constructor has.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Luckily we have the &lt;b&gt;Builder&amp;nbsp;Pattern&lt;/b&gt; which translates the above to this:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public Character(Builder builder) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.name = builder.name;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.gender = builder.gender;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.height = builder.height;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.weight = builder.weight;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.age = builder.age;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And initializing:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Character character =&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;new Character.Builder("Name","Female").&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;height(158).weight(45).age(21).build();&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now there are only two parameters to remember and you can see right away which values you are giving to the new object. All variables can be declared as final if needed and it's very easy to add new fields.&lt;br /&gt;&lt;br /&gt;By using &lt;a href="http://en.wikipedia.org/wiki/Builder_pattern"&gt;Builder Pattern&lt;/a&gt; you'll be creating one extra object every time you initialize an object, but it should not be a problem. This is also usable only if your object has enough parameters, but if you think you may need to increase the amount of parameters in the future, the Builder Pattern is a safe and clean way to implement it in the first place.&lt;br /&gt;&lt;br /&gt;I have found this pattern easy to use and useful when facing multiple constructor parameters. The most important thing is that this pattern results in more readable code by connecting the names of parameters and their values together.&lt;br /&gt;&lt;br /&gt;Read more from the &lt;a href="http://en.wikipedia.org/wiki/Builder_pattern"&gt;Wikipedia&lt;/a&gt; or from &lt;a href="http://java.sun.com/docs/books/effective/"&gt;Joshua Bloch's Effective Java&lt;/a&gt; (&lt;b&gt;which is a great book&lt;/b&gt; for all Java developers).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Here is the full source code for the example:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;public class Character {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private final String name;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private final String gender;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private int height;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private int weight;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private int age;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static class Builder {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private String name;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private String gender;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int height;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int weight;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;private int age;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Builder(String name, String gender) {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.name = name;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.gender = gender;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Builder height(int height) {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.height = height; return this;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Builder weight(int weight) {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.weight = weight; return this;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Builder age(int age) {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.age = age; return this;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public Character build() {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new Character(this);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public Character(Builder builder) {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.name = builder.name;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.gender = builder.gender;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.height = builder.height;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.weight = builder.weight;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;this.age = builder.age;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static void main(String args) {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Character character = new Character.Builder("Name", "Female").height(158).weight(45).age(21).build();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8155643433930524621?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8155643433930524621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/builder-pattern_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8155643433930524621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8155643433930524621'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/builder-pattern_23.html' title='Builder Pattern'/><author><name>Arttu</name><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-5162137887150660076.post-213529482010920689</id><published>2010-08-19T13:41:00.001+03:00</published><updated>2011-01-13T21:01:10.953+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>Note to self: Check the source material</title><content type='html'>Whenever you are doing some kind of conversion or anything that depends on the source material, check it. Don't trust blindly the specs or assume that the file is what it should be. You should assume it can contain anything until you have personally checked it. Specs change and people are not good with details and remembering the current state after few changes.&lt;br /&gt;&lt;br /&gt;Anyway, it may be hard to spot those errors in files.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TG0GraI7FxI/AAAAAAAAACw/JC7StXftEMw/s1600/ExampleErrorCSV.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_g6jnLh81N64/TG0GraI7FxI/AAAAAAAAACw/JC7StXftEMw/s320/ExampleErrorCSV.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Specs might say that column 4 is a signed number (sign on right), but the positive sign is not used. In the line three there is a positive number with blank sign. The same in fixed:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TG0HVO5uMhI/AAAAAAAAAC4/lsEtulkoWvE/s1600/ExampleErrorFixed.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_g6jnLh81N64/TG0HVO5uMhI/AAAAAAAAAC4/lsEtulkoWvE/s320/ExampleErrorFixed.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Sometimes programming is frustrating because of these kind of problems. This one space character in the middle of input file might cause cryptic exceptions in your program even if you have done everything right according to specs - only not prepared for problems. But, &lt;b&gt;that's what programming is about&lt;/b&gt;, handling the minor details when one character in a wrong place can crash the whole system. Luckily my JUnit test case was made to tell file name, file number and column number and the contents of that column when something strange happens and the error was easy to spot. I've really started to like Unit test. &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;Test Driven Development&lt;/a&gt; would be nice to apply, but first I need to learn how to make better unit tests and learn the procedure.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;That's why I'm reading &lt;a href="http://www.growing-object-oriented-software.com/"&gt;Growing Object Oriented Software, Guided by Tests&lt;/a&gt;. I've read &lt;a href="http://en.wikipedia.org/wiki/Test-Driven_Development_by_Example"&gt;Test-Driven Development: By Example&lt;/a&gt;&amp;nbsp;by &lt;a href="http://en.wikipedia.org/wiki/Kent_Beck"&gt;Kent Beck&lt;/a&gt;, but it was not enough for me to really get the idea. Although it was easy and encouraging book to read.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-213529482010920689?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/213529482010920689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/note-to-self-check-source-material_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/213529482010920689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/213529482010920689'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/note-to-self-check-source-material_19.html' title='Note to self: Check the source material'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_g6jnLh81N64/TG0GraI7FxI/AAAAAAAAACw/JC7StXftEMw/s72-c/ExampleErrorCSV.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-3864553964320547162</id><published>2010-08-16T19:35:00.001+03:00</published><updated>2011-01-13T21:01:10.957+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Discussion and Thoughts'/><title type='text'>How To Get Things Done</title><content type='html'>All students (especially in the University) have faced a situation that they have a lot of things to do but they fail to get started. Usually you would even have all the time you need, &lt;b&gt;if you just would start working&lt;/b&gt; efficiently and organized, but instead you delay tasks to a later time (&lt;a href="http://en.wikipedia.org/wiki/Procrastination"&gt;Procrastination&lt;/a&gt;).&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course the internet is full of advices on how to get things done that are just common sense. Robert Benchley wrote &lt;a href="http://hackvan.com/etext/how-to-get-things-done-despite-procrastination.txt"&gt;a text&lt;/a&gt; about the same topic and if I remember right, his way of handling the problem was to prioritize the tasks you have and then doing the least important things first. Then you know all the time that it's important to be efficient at the task you are working because that &lt;b&gt;More Important Task&lt;/b&gt; is waiting you and the time to finish it is decreasing all the time. At least the idea sounds practical though sometimes you just need to do the most important tasks first.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;First step&lt;/b&gt; is to have some kind of &lt;b&gt;task list&lt;/b&gt; for yourself so you can see what needs to be done. It helps you to remember everything and to schedule. Otherwise you are just constantly thinking that "I should be doing this and that" and at the worst moment you'll remember that you forgot something important and must &lt;a href="http://www.wikihow.com/Pull-an-All-Nighter"&gt;pull an all-nighter&lt;/a&gt;&amp;nbsp;(and at that time you have lost already). When programming, I've found an &lt;a href="http://www.eclipse.org/mylyn/"&gt;Eclipse plugin Mylyn&lt;/a&gt; very helpful. It's somehow satisfying to finally mark task finished and commit changes to repository.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Scheduling is the hard part&lt;/b&gt; since it's never easy to know how much time some particular task will take unless it is something trivial or familiar like "Cut the grass". &lt;a href="http://developer.valvesoftware.com/wiki/Valve_Time"&gt;Valve Time&lt;/a&gt;&amp;nbsp;is a widespread joke about the time taken to some development task and the table is easy to use to translate developers words to reality, e.g. "tomorrow" = "next week", "today" = "Tonight at 11:49 PM, Pacific time" and so on. Everything that contains creativity or unknown factors &lt;b&gt;will take longer than you would first expect&lt;/b&gt;.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sometimes it's also important to decide that I &lt;b&gt;will not do&lt;/b&gt; this particular task during this week and &lt;b&gt;concentrate on other things&lt;/b&gt;. Doing so will help you not to think about that unfinished work because you have taken care of it already, you have the plan (and having a plan is half-done, right?). It's all about the having a plan, but &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;don't just stick to it - remember to react to the changes&lt;/a&gt;. And yes it was a compulsory agile advertisement and more software development related thing than just a common advice but I couldn't help it. Anyway it is good to remember to reconsider situations once in a while and not stubbornly refuse to stop.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;One must also remember to &lt;b&gt;eliminate all distractions&lt;/b&gt; disturbing the tasks at hand. It's hard to concentrate and truly proceed in a task if something else is demanding your attention. But this doesn't mean 8 hours of intensive work without breaks but a nice combination of working and other activities depending on your personal preference. &lt;b&gt;If you get stuck&lt;/b&gt; to a problem you feel you can't solve and have tried many times already, go outside and &lt;b&gt;have a break&lt;/b&gt;. It's too easy to waste all your time hitting your head to a wall when you are too tired discover the solution or just need to see the problem a bit farer or from the different angle. Don't think "Just this problem and then I rest", &lt;b&gt;&lt;i&gt;take a break&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;This is just my thinking and probably nothing new and just common sense, but feel free to share good advices on how to get things done.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3864553964320547162?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3864553964320547162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/how-to-get-things-done_16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3864553964320547162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3864553964320547162'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/how-to-get-things-done_16.html' title='How To Get Things Done'/><author><name>Arttu</name><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-5162137887150660076.post-8198843086208655523</id><published>2010-08-15T19:27:00.001+03:00</published><updated>2011-01-13T21:01:10.962+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Firesoft'/><title type='text'>New project, "Firesoft" released</title><content type='html'>&lt;b&gt;Short version:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Download:&amp;nbsp;&lt;a href="http://code.google.com/p/firesoft/downloads/list"&gt;http://code.google.com/p/firesoft/downloads/list&lt;/a&gt;&lt;br /&gt;Bugreports:&amp;nbsp;&lt;a href="http://code.google.com/p/firesoft/issues/list"&gt;http://code.google.com/p/firesoft/issues/list&lt;/a&gt;&amp;nbsp;(or just comment/email)&lt;br /&gt;Source code:&amp;nbsp;&lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;http://code.google.com/p/firesoft/source/checkout&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Long version:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I finally got &lt;a href="http://code.google.com/p/firesoft/"&gt;my current project&lt;/a&gt; in to a state I can make the first release. I had planned it for the week before, but you know how it's like. I had &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/08/packaging-jar-is.html"&gt;problems with packaging the jar&lt;/a&gt; and got new ideas to implement. But now it's "ready" in the mean I can give a glimpse of it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Firesoft &lt;/b&gt;is a program to start other programs in the same way as Windows 7 start menu works. Of course it's not as good as the actual start menu, but I have to use Windows XP at work and I just wanted to create this to make my life a bit easier. I know the internet is full of similar programs, but this was also an opportunity to code something useful and to learn more Java. Firesoft &lt;b&gt;supports system tray functionality&lt;/b&gt; and &lt;b&gt;windows hotkeys&lt;/b&gt; (&lt;i&gt;the hotkey is win + s&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;Here is a picture of the Firesoft main window:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TGgSN8tLbVI/AAAAAAAAAAw/3IwV8bNLUFc/s1600/MainWindow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TGgSN8tLbVI/AAAAAAAAAAw/3IwV8bNLUFc/s320/MainWindow.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This is what you see when you run the program. You can type to the text field and then you'll see best matches from the index in the drop-down list. If you press Enter of "Go", first item in the list will be run.&lt;br /&gt;&lt;br /&gt;But of course you'll need to add files to the index first. It's simply done by drag&amp;amp;dropping the files to the main window.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/TGgSsUQtw4I/AAAAAAAAAA4/tzEeQFfXAL0/s1600/FilesBefore.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/TGgSsUQtw4I/AAAAAAAAAA4/tzEeQFfXAL0/s320/FilesBefore.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;By pressing "Show files" you'll see the files in the index. In this picture the index is empty and there's nothing to show.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/TGgS916ue1I/AAAAAAAAABI/WRdghwAkZ70/s1600/FilesAfter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_g6jnLh81N64/TGgS916ue1I/AAAAAAAAABI/WRdghwAkZ70/s320/FilesAfter.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here is the situation after I've drag&amp;amp;dropped a shortcut to Paint.exe to the Firesoft. "Remove" removes the file from the index.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/TGgTODtvvFI/AAAAAAAAABQ/ZrOnTOaFxBQ/s1600/RunningFiles.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_g6jnLh81N64/TGgTODtvvFI/AAAAAAAAABQ/ZrOnTOaFxBQ/s320/RunningFiles.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This is what it looks when you type to the text field. The program shows the best hits in the drop-down list and by pressing Enter it will fire up the Paint.exe.&lt;br /&gt;&lt;br /&gt;Firesoft is implemented with Java and it uses &lt;a href="http://melloware.com/products/jintellitype/index.html"&gt;JIntelliType&lt;/a&gt;&amp;nbsp;for registering the hotkey. Win + s will hide/show the program and it will show an icon in the system tray.&lt;br /&gt;&lt;br /&gt;Download the software from &lt;a href="http://code.google.com/p/firesoft/downloads/list"&gt;here&lt;/a&gt;. Report issues &lt;a href="http://code.google.com/p/firesoft/issues/list"&gt;here&lt;/a&gt;&amp;nbsp;or send me an email or comment this post. All feedback is welcome. Running the software is done by double-clicking the Firesoft.jar, no installation needed. Requires Java 1.6 and Windows.&lt;br /&gt;&lt;br /&gt;The source code is also released&amp;nbsp;&lt;a href="http://code.google.com/p/firesoft/source/checkout"&gt;here&lt;/a&gt;&amp;nbsp;under the GPL. Feel free to check/modify, but let me know if you find something useful. I'll do a lot of refactoring since the code is a bit messy right now and I would like to learn to improve my code quality. I just wanted to finally make a release. &lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/08/eclipse-svn-google-code-mylyn.html"&gt;I made a post earlier where I explained my development environment and how to set it up.&lt;/a&gt; Again, all feedback is welcome.&lt;br /&gt;&lt;br /&gt;Many thanks for my friend Teemu(here is the "fame" I promised :D) who helped to pack the jar and gave useful ideas to improve the program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-8198843086208655523?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/8198843086208655523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/new-project-released_15.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8198843086208655523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/8198843086208655523'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/new-project-released_15.html' title='New project, &amp;quot;Firesoft&amp;quot; released'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/TGgSN8tLbVI/AAAAAAAAAAw/3IwV8bNLUFc/s72-c/MainWindow.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-2765045977773560649</id><published>2010-08-11T21:50:00.001+03:00</published><updated>2011-01-13T21:01:10.966+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Problem solving'/><title type='text'>Packaging jar is...</title><content type='html'>Lately I made a small program that can be used to fire other programs to be used at work since we are using Windows XP and it doesn't have that really nice start menu that Windows 7 has. I thought that getting hot-key or system tray functionality working in Java program would be difficult, but surprisingly it wasn't (with right libraries...). Packaging the program to a jar file is the hard part. I've been trying it about a week now, and I'm really starting to get tired. I'm using Eclipse and I thought that Export-&amp;gt;Runnable Jar or Export-&amp;gt;Jar file would do the job but I was wrong. Then I tried Ant and Fat Jar... and no luck. Maybe the closest was that the jar was working from command line with command java -jar ***.jar.&lt;br /&gt;&lt;br /&gt;Yes, I know. The problem is probably me, but I just can't understand why this has to be so damn difficult.&lt;br /&gt;&lt;br /&gt;I'll be back when I get the jar working and write a post about the program (and maybe some instructions to package jar files...).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update: Seems like the problem is somehow in my Java installation. Stay tuned!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Update 2: No fucking way, it was &lt;b&gt;Nokia Ovi Suite&lt;/b&gt; that was causing all the problems with running jar files. Earlier&amp;nbsp;&lt;a href="http://trailingthesoftwarecraftsmanship.blogspot.com/2010/07/never-again-nokia.html"&gt;I've told you&amp;nbsp;&lt;/a&gt;&amp;nbsp;how much I love Nokia products nowadays. Back then I thought I hated Nokia. Now I know.&lt;br /&gt;&lt;br /&gt;How did I find this out? Well, Windows showed that the Sun Java Platform SE Binary was the default program to run .jar files, but... when I opened regedit.exe and checked the .jar value from HKEY_CLASSES_ROOT, it said something about Nokia Ovi Suite. Solution: Uninstall (and never again install) Nokia Ovi Suite, reset the default program for .jar -files and enjoy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Error message I got was&lt;/b&gt; "Could not find the main class" when I tried to run jar -files. I know there are a lot of reasons that can cause this, but my &lt;b&gt;reason &lt;/b&gt;(nemesis) was &lt;b&gt;Nokia Ovi Suite&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-2765045977773560649?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/2765045977773560649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/packaging-jar-is_11.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2765045977773560649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/2765045977773560649'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/packaging-jar-is_11.html' title='Packaging jar is...'/><author><name>Arttu</name><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-5162137887150660076.post-3711992284527721638</id><published>2010-08-07T17:14:00.001+03:00</published><updated>2011-01-13T21:01:10.969+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Integrated Development Environment (IDE)'/><title type='text'>Eclipse + SVN + Google Code + Mylyn</title><content type='html'>&lt;a href="http://code.google.com/"&gt;Google Code&lt;/a&gt; contains a handy &lt;a href="http://code.google.com/hosting/"&gt;project hosting service&lt;/a&gt; for open source developers. It's quite easy to create SVN repository to Google Code and use it with Eclipse (and subclipse). Subclipse is a plugin for Eclipse to use SVN version control for Eclipse projects. Recently I noticed that also Google Codes issue tracking can be used from Eclipse by using another nice plugin, Mylyn. Mylyn is a task management system for Eclipse. Here I try to give at least some instructions for creating a SVN repository to Google Code and using it with Eclipse.&lt;br /&gt;&lt;br /&gt;Download and install Eclipse from here:&amp;nbsp;&lt;a href="http://www.eclipse.org/downloads/"&gt;http://www.eclipse.org/downloads/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Open Eclipse and go Help -&amp;gt; Install New Software.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQNPhZEI0I/AAAAAAAAAEw/YpmB-ZK8OMM/s1600/InstallNewSoftware.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="150" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQNPhZEI0I/AAAAAAAAAEw/YpmB-ZK8OMM/s320/InstallNewSoftware.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Paste&amp;nbsp;http://subclipse.tigris.org/update_1.6.x to "Work with:" -field and click add.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQNVma04dI/AAAAAAAAAE4/ufCHagPeVZE/s1600/NewRepo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="106" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQNVma04dI/AAAAAAAAAE4/ufCHagPeVZE/s320/NewRepo.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Wait for Eclipse to list all available components and then check subclipse and continue to finish installation.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQNeOz-mLI/AAAAAAAAAFA/rktXYzxD_Bc/s1600/CheckSubclipse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQNeOz-mLI/AAAAAAAAAFA/rktXYzxD_Bc/s320/CheckSubclipse.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Sometimes this may take a while. Then you are ready to work with SVN repositories from Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Note&lt;/b&gt;: Check the newest subclipse installation link from&amp;nbsp;&lt;a href="http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=A215C47CEAD6ECF30DA33AD4EC2AE902?pageID=p4wYuA"&gt;http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=A215C47CEAD6ECF30DA33AD4EC2AE902?pageID=p4wYuA&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Since I use 64 bit version of Eclipse and Java (I run 64 bit Win 7), I also had to install &lt;a href="http://subclipse.tigris.org/wiki/JavaHL"&gt;64 bit version of Java HL&lt;/a&gt; to get subclipse working.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You probably have Mylyn preinstalled in your Eclipse, but if not, follow the same procedure as above but use url&amp;nbsp;http://download.eclipse.org/tools/mylyn/update/e3.4. Check "Mylyn features" and continue the installation to the end. Also install Web templates in the same way from site&amp;nbsp;&lt;a href="http://download.eclipse.org/tools/mylyn/update/incubator/"&gt;http://download.eclipse.org/tools/mylyn/update/incubator/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQNpTkdxHI/AAAAAAAAAFI/QVy9BZvjwIE/s1600/MylynTemplates.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQNpTkdxHI/AAAAAAAAAFI/QVy9BZvjwIE/s320/MylynTemplates.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You'll need these to connect Mylyn to Google Code.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note&lt;/b&gt;: Again, check the newest link from&amp;nbsp;&lt;a href="http://wiki.eclipse.org/index.php/Mylyn/FAQ#Installation"&gt;http://wiki.eclipse.org/index.php/Mylyn/FAQ#Installation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now you should have everything you need to work with Google Code. Next we create a Google Code repository and use Eclipse to start new project and make tasks with Mylyn.&lt;br /&gt;&lt;br /&gt;First, create a Google account if you don't have one:&amp;nbsp;&lt;a href="https://www.google.com/accounts/NewAccount?continue=https://www.google.com/accounts/ManageAccount&amp;amp;followup=https://www.google.com/accounts/ManageAccount"&gt;https://www.google.com/accounts/NewAccount?continue=https://www.google.com/accounts/ManageAccount&amp;amp;followup=https://www.google.com/accounts/ManageAccount&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Create new project here&amp;nbsp;&lt;a href="http://code.google.com/hosting/createProject"&gt;http://code.google.com/hosting/createProject&lt;/a&gt;. Set "Version control system" as "Subversion". You can also select license for you code. I've used GNU General Public License, but choose your own based on your needs.&amp;nbsp;Click "Create project" to finish.&lt;br /&gt;&lt;br /&gt;Next we connect Eclipse to our repository and create a new Java project.&lt;br /&gt;&lt;br /&gt;From Eclipse select File -&amp;gt; New -&amp;gt; Project... and under SVN select "Checkout projects from SVN". Select "Create new repository location" and click next. Then you need to find your repository URL. Go to your repository (address is&amp;nbsp;&lt;a href="http://code.google.com/p/firesoft/"&gt;http://code.google.com/p/&lt;/a&gt;"project name") and to tab "Source". Copy-paste svn-checkout URL to Eclipse "url:" field and click next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THQN1WVsjAI/AAAAAAAAAFQ/V3pW75l9LtA/s1600/RepoURL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://4.bp.blogspot.com/_g6jnLh81N64/THQN1WVsjAI/AAAAAAAAAFQ/V3pW75l9LtA/s320/RepoURL.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;My project is firesoft so the address is https://firesoft.googlecode.com/svn/trunk/. Select the folder from the list and click next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQOBfmxS7I/AAAAAAAAAFY/x6vylcri1ME/s1600/SelectRepoFolder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="234" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQOBfmxS7I/AAAAAAAAAFY/x6vylcri1ME/s320/SelectRepoFolder.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Finally select "Check out as a project using the New Project Wizard" and create the Java Project. Use your Gmail account username when asked, and check the password from &lt;a href="https://code.google.com/hosting/settings"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Finally we set up the Mylyn to talk with Google Codes issue tracking. Make sure you have necessary views opened in Eclipse: Window -&amp;gt; Show view -&amp;gt; Other...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/THQOSQpn4TI/AAAAAAAAAFg/qkOH-r6m0gQ/s1600/OpeningViews.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://3.bp.blogspot.com/_g6jnLh81N64/THQOSQpn4TI/AAAAAAAAAFg/qkOH-r6m0gQ/s320/OpeningViews.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Under the "Tasks" open both Task list and Task repositories.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/THQOXUJ-wyI/AAAAAAAAAFo/_Rc0wg2RrEo/s1600/OpenTaskList.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_g6jnLh81N64/THQOXUJ-wyI/AAAAAAAAAFo/_Rc0wg2RrEo/s320/OpenTaskList.png" width="230" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You should now have both the Task List and Task Repositories views in your Eclipse:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/THQOqz9tmPI/AAAAAAAAAF4/zNyOquNiQVE/s1600/TaskListView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://3.bp.blogspot.com/_g6jnLh81N64/THQOqz9tmPI/AAAAAAAAAF4/zNyOquNiQVE/s320/TaskListView.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Then right click at the "Task repositories" view and select "Add task repository...".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQOu93LYHI/AAAAAAAAAGA/ByN_cxo2jJ4/s1600/NewTaskRepository.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQOu93LYHI/AAAAAAAAAGA/ByN_cxo2jJ4/s320/NewTaskRepository.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Select Web template and click next.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_g6jnLh81N64/THQO5RqODsI/AAAAAAAAAGI/hE4cK_WXlLA/s1600/SelectWebTemplate.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_g6jnLh81N64/THQO5RqODsI/AAAAAAAAAGI/hE4cK_WXlLA/s320/SelectWebTemplate.png" width="256" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Select "Eclipse outliner (Google Code) from the drop-down menu to the Server field and type your own &lt;b&gt;project name&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THQPG2s6c7I/AAAAAAAAAGQ/Hyow8U5gPbY/s1600/SelectEclipseOutliner.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="http://4.bp.blogspot.com/_g6jnLh81N64/THQPG2s6c7I/AAAAAAAAAGQ/Hyow8U5gPbY/s200/SelectEclipseOutliner.png" width="200" /&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THQPyhzvzAI/AAAAAAAAAGY/qwmvTgXlWa0/s1600/TypeYourProjectName.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="45" src="http://4.bp.blogspot.com/_g6jnLh81N64/THQPyhzvzAI/AAAAAAAAAGY/qwmvTgXlWa0/s200/TypeYourProjectName.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Type your &lt;b&gt;username&lt;/b&gt; and &lt;b&gt;password &lt;/b&gt;to their fields and continue. Note that I typed my own project name to the Server field.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_g6jnLh81N64/THQQhN9FsjI/AAAAAAAAAGg/Cb0tmYxNAdo/s1600/TypeUserName.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_g6jnLh81N64/THQQhN9FsjI/AAAAAAAAAGg/Cb0tmYxNAdo/s320/TypeUserName.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Eclipse will ask you to create &lt;b&gt;query &lt;/b&gt;for the repository, or if not, right-click the repository and select "New Query" and Finish. Now the tasks from your Google Code issue tracking should appear to your Eclipse.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_g6jnLh81N64/THQRCXaxWDI/AAAAAAAAAGo/Ka8i4PQ1T9w/s1600/MylynReady.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_g6jnLh81N64/THQRCXaxWDI/AAAAAAAAAGo/Ka8i4PQ1T9w/s320/MylynReady.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lets try to make a new task. Right-click your "Google Outliner" from the Task List view and select New -&amp;gt;&amp;nbsp;Task. Select again your "Eclipse Outliner", click Next and Finish. Eclipse will open website where you can add new Task. Give name to your issue and click "Submit issue". Go to Task List view and right-click your repository and select Synchronize. Issue you just created should appear in the list.&lt;br /&gt;&lt;br /&gt;You need to edit your task via the built-in web browser in Eclipse. The view will look like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_g6jnLh81N64/THQRSb47GjI/AAAAAAAAAGw/OYiv2_NqDZA/s1600/EditTas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_g6jnLh81N64/THQRSb47GjI/AAAAAAAAAGw/OYiv2_NqDZA/s320/EditTas.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Check instructions on how to use Mylyn from here: http://www.tasktop.com/mylyn/mylyn-2.0-part1.php. More instructions to Eclipse and Mylyn collaboration can be found from here:&amp;nbsp;&lt;a href="http://www.vogella.de/articles/Mylyn/article.html#N100AC"&gt;http://www.vogella.de/articles/Mylyn/article.html#N100AC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Now you should be ready&lt;/b&gt;. If you encounter any problems during the procedure, Google for it or leave a comment (or email).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;&lt;br /&gt;Google Code:&lt;br /&gt;&lt;a href="http://code.google.com/intl/fi-FI/"&gt;http://code.google.com/intl/fi-FI/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/hosting/"&gt;http://code.google.com/hosting/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Subclipse:&lt;br /&gt;&lt;a href="http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=A215C47CEAD6ECF30DA33AD4EC2AE902?pageID=p4wYuA"&gt;http://subclipse.tigris.org/servlets/ProjectProcess;jsessionid=A215C47CEAD6ECF30DA33AD4EC2AE902?pageID=p4wYuA&lt;/a&gt;&lt;br /&gt;http://subclipse.tigris.org/wiki/JavaHL&lt;br /&gt;&lt;br /&gt;Mylyn:&lt;br /&gt;&lt;a href="http://wiki.eclipse.org/index.php/Mylyn/FAQ#Installation"&gt;http://wiki.eclipse.org/index.php/Mylyn/FAQ#Installation&lt;/a&gt;&lt;br /&gt;http://www.tasktop.com/mylyn/mylyn-2.0-part1.php&lt;br /&gt;&lt;a href="http://www.vogella.de/articles/Mylyn/article.html#N100AC"&gt;http://www.vogella.de/articles/Mylyn/article.html#N100AC&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3711992284527721638?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3711992284527721638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/eclipse-svn-google-code-mylyn_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3711992284527721638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3711992284527721638'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/08/eclipse-svn-google-code-mylyn_07.html' title='Eclipse + SVN + Google Code + Mylyn'/><author><name>Arttu</name><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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_g6jnLh81N64/THQNPhZEI0I/AAAAAAAAAEw/YpmB-ZK8OMM/s72-c/InstallNewSoftware.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5162137887150660076.post-3327489198091747655</id><published>2010-07-28T15:06:00.001+03:00</published><updated>2011-01-13T21:01:10.975+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>A Glimpse of Heap and Stack in Java</title><content type='html'>When talking about programming and running programs, you can think that memory is divided in three segments; &lt;b&gt;text(code)&lt;/b&gt;, &lt;b&gt;stack&amp;nbsp;&lt;/b&gt;and &lt;b&gt;heap&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code segment&lt;/b&gt; is the place where the compiled program code is stored and other two segments are for variables and objects. &lt;b&gt;Stack&amp;nbsp;&lt;/b&gt;is the place for local variables and methods that are declared and initialized before runtime. It uses LIFO (Last In First Out) structure meaning that changes happens only on the top of the stack. Instance variables and objects (initialized at runtime) are stored to the &lt;b&gt;heap&lt;/b&gt;. Memory in heap can be allocated and deallocated in any order. Heap is more flexible but the stack is faster.&lt;br /&gt;&lt;br /&gt;In practice, whenever you use "new" operator in Java, it allocates memory for the object on the heap. Stack memory is for "built-in" datatypes. String is an object in Java so it will be in heap. Anyhow object references are in the stack.&lt;br /&gt;&lt;br /&gt;-&lt;br /&gt;&lt;br /&gt;Variables are bit holders with a specific type. For primitives the bits represent a numeric value but object references are just references to objects in the memory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-3327489198091747655?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/3327489198091747655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/glimpse-of-heap-and-stack-in-java_28.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3327489198091747655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/3327489198091747655'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/glimpse-of-heap-and-stack-in-java_28.html' title='A Glimpse of Heap and Stack in Java'/><author><name>Arttu</name><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-5162137887150660076.post-7065059742888487512</id><published>2010-07-27T13:51:00.001+03:00</published><updated>2011-01-13T21:01:10.978+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Binary Numbers and Numeral Java Data Types</title><content type='html'>Somehow I've had a lot of problems remembering how the binary goes. So here's a short introduction also to help me to remember.&lt;br /&gt;&lt;br /&gt;With integers we use different columns for units, tens, hundreds and so on. So in the number 123, we have one unit of hundreds, two of tens and three of units.&lt;br /&gt;&lt;br /&gt;With binary we work with base 2 and only have 0 and 1 to represent numbers. We have units column, twos column, fours column etc. All of them are powers of two. For example 101in binary is&lt;br /&gt;&amp;nbsp;2^2 + 0^1 + 2^1 = 4 + 0 + 1 = 5.&lt;br /&gt;&lt;br /&gt;One way to represent negative numbers is to let the most left digit to define the sign, 0 for + and 1 for -. This way is also used in Java. Thus -5 would be something like 1101.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java Numeral Data Types&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Integer types in sequence: byte, short, int, long. All the number types are multiples of 8-bit bytes and signed. The leftmost bit is used to represent the sign. 1 = negative, 0 = positive. Rest of the bits represent the value using two's complement notation.&lt;br /&gt;&lt;br /&gt;Example of byte: 0 0010011 has 2^7 = 128 different values: 0 to 127 or -128 to -1.&lt;br /&gt;&lt;br /&gt;Example of short: 0 111110100000011 = 2^15 = 32768 values: 0 to 32767 or -32768 to -1.&lt;br /&gt;&lt;br /&gt;Positive range is one less since the zero is counted as positive.&lt;br /&gt;&lt;br /&gt;Counting the value ranges:&lt;br /&gt;-2^(bits-1) = negative range.&lt;br /&gt;2^(bits-1)-1 = positive range.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td&gt;Type&lt;/td&gt;   &lt;td&gt;Bits&lt;/td&gt;   &lt;td&gt;Bytes&lt;/td&gt;   &lt;td&gt;Min range&lt;/td&gt;   &lt;td&gt;Max range&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;byte&lt;/td&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;-2^7&lt;/td&gt;   &lt;td&gt;2^7-1&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Short&lt;/td&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;-2^15&lt;/td&gt;   &lt;td&gt;2^15-1&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;int&lt;/td&gt;   &lt;td&gt;32&lt;/td&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;-2^31&lt;/td&gt;   &lt;td&gt;2^31-1&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;long&lt;/td&gt;   &lt;td&gt;64&lt;/td&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;-2^63&lt;/td&gt;   &lt;td&gt;2^63-1&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;float&lt;/td&gt;   &lt;td&gt;32&lt;/td&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;n/a&lt;/td&gt;   &lt;td&gt;n/a&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td&gt;Double&lt;/td&gt;   &lt;td&gt;64&lt;/td&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;n/a&lt;/td&gt;   &lt;td&gt;n/a&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Char data type contains a single 16-bit Unicode character. Char is unsigned hence its range is 2^16 (0-65535).&lt;br /&gt;&lt;br /&gt;Boolean can have only true and false values but the bit depth is virtual-machine dependent.&lt;br /&gt;&lt;br /&gt;You'll need this info when you are casting data type to another. Java always handles integers as ints and floating-point literals are doubles. This concerns also the results of expressions. When you are assigning larger data type in to a smaller, you need to explicitly cast it. However, the compiler does casting implicitly when you assign a integer to a byte or short.&lt;br /&gt;&lt;br /&gt;byte b = 5; // Ok&lt;br /&gt;short s = 10; // Ok&lt;br /&gt;short sb = b+s; // "Cannot convert from int to short). In this case you'll need to explicitly cast:&lt;br /&gt;short sb = (short)(b+s); Ok&lt;br /&gt;&lt;br /&gt;float f = 13.3; // "Cannot convert from double to float).&lt;br /&gt;float ff = 13.3f; // Ok&lt;br /&gt;float fff = (float)13.3; // Ok&lt;br /&gt;&lt;br /&gt;Of course you need to consider bit-depths and ranges of variables when casting. If the assigned value is larger than the variable, all the bits that can't fit will be left out from the left side.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;/div&gt;&lt;div&gt;Sun Sertified Programmer for Java 5 - Study Guide&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5162137887150660076-7065059742888487512?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7065059742888487512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/binary-numbers-and-numeral-java-data_27.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7065059742888487512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7065059742888487512'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/binary-numbers-and-numeral-java-data_27.html' title='Binary Numbers and Numeral Java Data Types'/><author><name>Arttu</name><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-5162137887150660076.post-5159050496211706071</id><published>2010-07-08T09:14:00.001+03:00</published><updated>2011-01-13T21:01:10.983+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>XML Schema Data Types</title><content type='html'>XML Schema data types are used to make more specific definitions about the elements used in XML. It helps users to prepare since they know what kinds of values they should expect to read or write. I'll go through some of these data types.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;String&lt;/b&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;xs:string&amp;nbsp;is a data type that can contain text including characters, line feeds, carriage returns and tab characters.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;There are many data types derived from the string. Some of them:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;xs:normalizedString is a string from which the XML processor will remove line feeds, carriage returns and tab characters.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;xs:token is a string from which the XML processor will remove line feeds, carriage returns, tabs, leanding or trailing spaces, or multiple spaces.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;See the full list&amp;nbsp;&lt;a href="http://www.w3schools.com/schema/schema_dtypes_string.asp"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;You can use many kinds of restrictions with String Data Types. These includes:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;enumeration&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;length&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;maxLength&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;minLength&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;pattern&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;whiteSpace&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;Date&lt;/b&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="day" type="xs:date"/&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;As its name says, date presents a date. The correct form is "yyyy-mm-dd" (year-month-day). All of the components are required. You can enter a date in UTC time by using Z behind the date or you can specify an offset from the UTC time by adding a value behind the date.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Date in XML document:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;day&amp;gt;2010-02-05&amp;lt;/day&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;UTC:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;day&amp;gt;2010-02-05Z&amp;lt;/day&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Offset from UTC time:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;day&amp;gt;2010-02-05+02:00&amp;lt;/day&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;Time&lt;/b&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Time presents a specific time in the form "hh:mm:ss" (hour-minute-second). All of the components are required. UTC time or offset from the UTC time can be specified int the same way as in date.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="lunchtime" type="xs:time"/&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;lunctime&amp;gt;11:30:00&amp;lt;/lunchtime&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;lunctime&amp;gt;11:30:00Z&amp;lt;/lunchtime&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;lunctime&amp;gt;11:30:00+02:00&amp;lt;/lunchtime&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;DateTime&lt;/b&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;DateTime combines date and time datatypes.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="startingTime" type="xs.dateTime"/&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;startingTime&amp;gt;2010-07-13T15:24:32+02:00&amp;lt;/startingTime&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;T is used to separate date and time and the timezone definitions comes after the time.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Following restrictions can be used with date data types:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;enumeration&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;maxExclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;minExclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;maxInclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;minInclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;pattern&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;whiteSpace&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Read more about date data types from&amp;nbsp;&lt;a href="http://www.w3schools.com/schema/schema_dtypes_date.asp"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;There are also &lt;b&gt;numeric data types&lt;/b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;Decimal&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Decimal is used to specify a decimal value. It can in a form of 1.19, -10.50, 3 or 0. Decimal can contain maximum of 18 decimal digits.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="length" type="xs:decimal"/&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;length&amp;gt;158.3&amp;lt;/length&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;Integer&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Integer is like decimal but without the decimal digits.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="count" type="xs:integer"/&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;count&amp;gt;15&amp;lt;/count&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;You can use following restrictions with numeric data types:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;enumeration&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;fractionDigits&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;maxEclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;minExclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;maxInclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;minInclusive&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;pattern&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;totalDigits&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;whiteSpace&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;More info about the numeric data types&amp;nbsp;&lt;a href="http://www.w3schools.com/schema/schema_dtypes_numeric.asp"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Some other useful data types are &lt;b&gt;anyURI&amp;nbsp;&lt;/b&gt;and &lt;b&gt;boolean&lt;/b&gt;. AnyURI can contain a URI and boolean contains a boolean value.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="google" type="xs:anyURI"/&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;google&amp;gt;http://www.google.com&amp;lt;/google&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;xs:element name="response" type="xs:boolean"/&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;response&amp;gt;true&amp;lt;/response&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Boolean can have values true, false, 0 or 1.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;References:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;http://www.w3.org/TR/xmlschema-2/&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div class="post-footer" style="color: white; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 1.6; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 1.5em;"&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/5162137887150660076-5159050496211706071?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/5159050496211706071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/xml-schema-data-types_08.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5159050496211706071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/5159050496211706071'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/xml-schema-data-types_08.html' title='XML Schema Data Types'/><author><name>Arttu</name><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-5162137887150660076.post-7109703467045377072</id><published>2010-07-07T16:11:00.001+03:00</published><updated>2011-01-13T21:01:10.988+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>XML Schema</title><content type='html'>&lt;b&gt;XML Schema&lt;/b&gt; is XML based markup language to describe the structure of a XML document. It defines the elements and attributes that can appear in a document and the order and number of child elements. Schema also defines data types for elements and attributes and whether an element can be empty or include text. It’s also possible to give default or fixed values for elements and attributes. By using XML Schemas you can for example make sure that two systems that are communicating together will have the same idea of the structure of the XML message.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Element containing other elements are called complex types and the others are simple types.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Let’s take an example&lt;/b&gt; (I’m bad with these):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;xs:element name="item"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;xs:complexType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;xs:sequence&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;xs:element name="itemId"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;xs:restriction base="xs:int"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:pattern value="[0-9]{5}"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/xs:restriction&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;xs:element name="itemName"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;xs:restriction base="xs:string"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:minLength value="1"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:maxLength value="16"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:whiteSpace value="replace"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/xs:restriction&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;xs:element name="type"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;xs:restriction base="xs:string"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:enumeration value="food"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:enumeration value="weapon"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:enumeration value="potion"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/xs:restriction&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;&amp;lt;/xs:sequence&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&amp;lt;/xs:complexType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/xs:schema&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;This defines "item", that must have an itemId, itemName and type. &amp;lt;xs:sequence&amp;gt; means that elements must be in the order described in the schema. Each of the elements has restrictions:&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;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;xs:element name="itemId"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;xs:restriction base="xs:int"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:pattern value="[0-9]{5}"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/xs:restriction&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, itemId is a simpleType because it doesn't contain any other elements. The type of the element itemId is "xs:int" (a signed 32-bit integer). I'm using a pattern to restrict the integer number. In this case it should contain five ({5}) digits from the range [0-9].&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;xs:element name="itemName"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;xs:restriction base="xs:string"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:minLength value="1"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:maxLength value="16"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:whiteSpace value="replace"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/xs:restriction&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Item name should be of a type "xs:string". I have restricted the length to be [1..16]. All the white spaces will be replaced with " ".&lt;/div&gt;&lt;div&gt;http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;xs:element name="type"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;xs:restriction base="xs:string"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:enumeration value="food"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:enumeration value="weapon"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;       &lt;/span&gt;&amp;lt;xs:enumeration value="potion"/&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;      &lt;/span&gt;&amp;lt;/xs:restriction&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;     &lt;/span&gt;&amp;lt;/xs:simpleType&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;    &lt;/span&gt;&amp;lt;/xs:element&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;This defines that "type" can be one of the three strings, "food", "weapon" or "potion".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Example XML&lt;/b&gt;:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="path to the schema file.xsd"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;itemId&amp;gt;94215&amp;lt;/itemId&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;itemName&amp;gt;Large ration&amp;lt;/itemName&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;&amp;lt;type&amp;gt;food&amp;lt;/type&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/item&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This defines the XML Schema Instance namespace:&lt;/div&gt;&lt;div&gt;&amp;lt;item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And this namespace to use and location of the XML Schema file:&lt;/div&gt;&lt;div&gt;xsi:schemaLocation="path to the schema file.xsd"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.w3schools.com/schema/schema_schema.asp"&gt;Read more about referencing XML Schema from XML.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;I'll talk about the data types in the next post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Notes&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Use &lt;a href="http://centricle.com/tools/html-entities/"&gt;this &lt;/a&gt;to encode XML if you want to put it in your blogger post. Don't use spaces instead of tabs as I did in the first place.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;References:&lt;/div&gt;&lt;div&gt;http://www.w3schools.com/schema/default.asp&lt;/div&gt;&lt;div&gt;http://www.w3.org/TR/xmlschema-2/&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/5162137887150660076-7109703467045377072?l=growingtoprogram.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://growingtoprogram.blogspot.com/feeds/7109703467045377072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/xml-schema_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7109703467045377072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5162137887150660076/posts/default/7109703467045377072'/><link rel='alternate' type='text/html' href='http://growingtoprogram.blogspot.com/2010/07/xml-schema_07.html' title='XML Schema'/><author><name>Arttu</name><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-5162137887150660076.post-22059767405951998</id><published>2010-07-07T13:55:00.001+03:00</published><updated>2011-01-13T21:01:10.992+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>XML Basics</title><content type='html'>&lt;b&gt;XML&lt;/b&gt;, or &lt;b&gt;eXtensible Markup Language&lt;/b&gt;, is a structured language to &lt;i&gt;store&amp;nbsp;&lt;/i&gt;and usually &lt;i&gt;transport data&lt;/i&gt;&amp;nbsp;in a consistent way. It’s easy to use with almost any programming language and it’s important to know how you can use XML to make you programs (or anything else) import and export data. For example by using XML it’s easier to define the structure of the message your software sends. XML is not a programming language in a way it could do something - it’s just meant to store data in a structured way.&lt;br /&gt;&lt;br /&gt;Example of a XML document:&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;&lt;br /&gt;&amp;lt;item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;itemId&amp;gt;00001&amp;lt;/itemId&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;itemName&amp;gt;Short Sword&amp;lt;/itemName&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;itemPower&amp;gt;1D6&amp;lt;/itemPower&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;When using XML you will define your own tags to describe data (like &amp;lt;item&amp;gt;)&lt;itemid&gt;. By using describing names you can make your XML files self-descriptive. XML data (for example text between &amp;lt;itemId&amp;gt; and &amp;lt;/itemId&amp;gt;)&lt;itemid&gt;&amp;nbsp;&lt;/itemid&gt;is &lt;b&gt;always text&lt;/b&gt;&amp;nbsp;making it easy to switch &amp;nbsp;between the different kinds of systems. &lt;b&gt;Tag names are case sensitive&lt;/b&gt;. Naming rules for tags: tags can contain letters, numbers and other characcters, but they cannot start with a number of punctuation character nor with the letters xml. &lt;b&gt;Names cannot contain spaces&lt;/b&gt;.&lt;/itemid&gt;&lt;br /&gt;&lt;br /&gt;XML elements can have &lt;b&gt;attributes&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&amp;lt;item id = "00001"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;itemName&amp;gt;Short Sword&amp;lt;/itemName&amp;gt;&lt;br /&gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Attribute values must be quoted&lt;/b&gt;. Attributes are basically name/value pairs. You should &lt;i&gt;use elements to store data&lt;/i&gt;&amp;nbsp;instead of attributes and leave attributes for metadata.&lt;br /&gt;&lt;br /&gt;Tag &lt;item&gt; in the example file is called the &lt;b&gt;root element&lt;/b&gt;&amp;nbsp;of the document. Basically this can tell what the document is about. Other tags are called child elements of the root. Each tag has a starting tag (&amp;lt;item&amp;gt;&lt;item&gt;) and ending tag (&amp;lt;/item&amp;gt;&lt;/item&gt;).&lt;/item&gt;&lt;br /&gt;&lt;br /&gt;Since the XML document must have a root element the &lt;b&gt;document forms a tree&lt;/b&gt;. Child elements of the root are branches of the tree. All elements in the document can have sub elements.&lt;br /&gt;&lt;br /&gt;XML has some &lt;b&gt;preserved characters&lt;/b&gt;&amp;nbsp;that have a special meaning. They are listed in the following:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;less than&lt;/td&gt;&lt;td&gt;&amp;lt;&lt;/td&gt;&lt;td&gt;&amp;amp;lt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;greater than&lt;/td&gt;&lt;td&gt;&amp;gt;&lt;/td&gt;&lt;td&gt;&amp;amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ampersand&lt;/td&gt;&lt;td&gt;&amp;amp;&lt;/td&gt;&lt;td&gt;&amp;amp;amp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;apostrophe&lt;/td&gt;&lt;td&gt;‘&lt;/td&gt;&lt;td&gt;&amp;amp;apos;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;quotation mark&lt;/td&gt;&lt;td&gt;“&lt;/td&gt;&lt;td&gt;&amp;amp;quot;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;If you 
