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

<channel>
	<title>samuli.hakoniemi.net &#187; tips</title>
	<atom:link href="http://samuli.hakoniemi.net/tag/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://samuli.hakoniemi.net</link>
	<description></description>
	<lastBuildDate>Thu, 20 Oct 2011 10:03:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
	<atom:link rel='hub' href='http://samuli.hakoniemi.net/?pushpress=hub'/>
		<item>
		<title>Quests and Missions in Gunshine.net</title>
		<link>http://samuli.hakoniemi.net/quests-and-missions-in-gunshine-net/</link>
		<comments>http://samuli.hakoniemi.net/quests-and-missions-in-gunshine-net/#comments</comments>
		<pubDate>Mon, 02 May 2011 20:40:37 +0000</pubDate>
		<dc:creator>Samuli Hakoniemi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[gunshine]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[missions]]></category>
		<category><![CDATA[quests]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://samuli.hakoniemi.net/?p=629</guid>
		<description><![CDATA[<a href="http://samuli.hakoniemi.net/quests-and-missions-in-gunshine-net/"><img src="/wp-content/images/gunshine/gunshine-550x225.png" alt="Gunshine.net" /></a>
<p>Gunshine is an online game created in Finland with roleplaying and social features. Although the game is currently running in beta, it already contains lots of features, tons of missions and plenty of enjoyment.</p>
<p>I'm going to gather all the quests I personally encounter and share it with other players, both newcomers and more advanced players. The intention is to collect all available quests into a simple table, which should help during gameplay. All extra help is appreciated, and you can provide listing of quests either by e-mail or commenting into this article.</p>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fquests-and-missions-in-gunshine-net%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fquests-and-missions-in-gunshine-net%2F&amp;source=zvona&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img src="/wp-content/images/gunshine/gunshine-550x225.png" alt="Gunshine.net" /></p>
<div class="ingress">
<p>Gunshine is an online game created in Finland with roleplaying and social features. Although the game is currently running in beta, it already contains lots of features, tons of missions and plenty of enjoyment.</p>
<p>I&#8217;m going to gather all the quests I personally encounter and share it with other players, both newcomers and more advanced players. The intention is to collect all available quests into a simple table, which should help during gameplay. All extra help is appreciated, and you can provide listing of quests either by e-mail or commenting into this article.</p>
</div>
<h2>Disclaimer</h2>
<p>The purpose of this article is to <strong>provide help</strong> for players who can&#8217;t find new missions to complete (which seems to be quite common case). This article is inofficial and doesn&#8217;t contain any strategic advices.</p>
<p>Notice that game is changing all the time since it&#8217;s in beta. There are new missions appearing while some of the older missions may disappear. Therefore this list can be outdated on some parts.</p>
<p>This article will constantly update when I receive new information of there is an update made on Gunshine itself.</p>
<p>Last update is made on <b>26th of May, 2011</b>.</p>
<p>A big thanks for following contributors:</p>
<ul>
<li>Nina (a3)</li>
</ul>
<h2>How to Read?</h2>
<ul>
<li><b>Name</b> &#8211; the mission name,</li>
<li><b>Level</b> &#8211; the level of enemies, or the area where mission is located,</li>
<li><b>Where to Get</b> &#8211; the area where mission can be get,</li>
<li><b>XP</b> &#8211; the experience gained after completing the mission,</li>
<li><b>Money</b> &#8211; the money gained after completing the mission.</li>
</ul>
<h2>Table of Quests / Missions on Dawnbreak City</h2>
<table class="tblGunshine">
<tr>
<th>Name</th>
<th>Level</th>
<th>Where to Get</th>
<th>XP</th>
<th>Money</th>
</tr>
<tr>
<td class="tdName">Welcome to the World of Tomorrow</td>
<td class="tdLvl">1</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">12</td>
<td class="tdMoney">8</td>
</tr>
<tr>
<td class="tdName">Through the Looking Glass</td>
<td class="tdLvl">1</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">12</td>
<td class="tdMoney">8</td>
</tr>
<tr>
<td class="tdName">Follow the Yellow Brick Road</td>
<td class="tdLvl">1</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">11</td>
<td class="tdMoney">6</td>
</tr>
<tr>
<td class="tdName">Jailbreak Time</td>
<td class="tdLvl">1</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">12</td>
<td class="tdMoney">8</td>
</tr>
<tr>
<td class="tdName">Mercenaries Are Your Best Friend</td>
<td class="tdLvl">1</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">The Great Escape</td>
<td class="tdLvl">1</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">Keep On Running!</td>
<td class="tdLvl">2</td>
<td class="tdGet">Immigration Center</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">You&#8217;re Gonna Be Okay</td>
<td class="tdLvl">2</td>
<td>Wetlands</td>
<td class="tdXP">65</td>
<td class="tdMoney">36</td>
</tr>
<tr>
<td class="tdName">Meet Lemmy</td>
<td class="tdLvl">3</td>
<td class="tdGet">Wetlands</td>
<td class="tdXP">12</td>
<td class="tdMoney">8</td>
</tr>
<tr>
<td class="tdName">Brutal Security</td>
<td class="tdLvl">3</td>
<td class="tdGet">Pipe square</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">Police Truck</td>
<td class="tdLvl">3</td>
<td class="tdGet">Pipe square</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">Zero Tolerance</td>
<td class="tdLvl">3</td>
<td class="tdGet">Pipe square</td>
<td class="tdXP">25</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Grim Gonzales (Group)</td>
<td class="tdLvl">3</td>
<td>Drug Farm</td>
<td class="tdXP">130</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Drug Bust</td>
<td class="tdLvl">4</td>
<td class="tdGet">Pipe square</td>
<td class="tdXP">12</td>
<td class="tdMoney">8</td>
</tr>
<tr>
<td class="tdName">Gasoline Order</td>
<td class="tdLvl">4</td>
<td class="tdGet">Drug Farm</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">Drugs, Up in Smoke</td>
<td class="tdLvl">4</td>
<td class="tdGet">Drug Farm</td>
<td class="tdXP">60</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">Rebel, Rebel</td>
<td class="tdLvl">4</td>
<td class="tdGet">Drug Farm</td>
<td class="tdXP">12</td>
<td class="tdMoney">8</td>
</tr>
<tr>
<td class="tdName">Help Cyril</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">14</td>
<td class="tdMoney">14</td>
</tr>
<tr>
<td class="tdName">Credibility is Everything</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">13</td>
<td class="tdMoney">12</td>
</tr>
<tr>
<td class="tdName">Supplies Are Your Friend</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">13</td>
<td class="tdMoney">50</td>
</tr>
<tr>
<td class="tdName">Don&#8217;t Keep Him Waiting</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">13</td>
<td class="tdMoney">75</td>
</tr>
<tr>
<td class="tdName">Get To Da Choppa!</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">70</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class="tdName">Repel the Raiders</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">70</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class="tdName">A Friend in Need</td>
<td class="tdLvl">4</td>
<td class="tdGet">Rebel Camp</td>
<td class="tdXP">14</td>
<td class="tdMoney">14</td>
</tr>
<tr>
<td class="tdName">On the Waterfront, pt. 1</td>
<td class="tdLvl">4</td>
<td class="tdGet">Malloy Waterfront</td>
<td class="tdXP">65</td>
<td class="tdMoney">36</td>
</tr>
<tr>
<td class="tdName">On the Waterfront, pt. 2</td>
<td class="tdLvl">4</td>
<td class="tdGet">Malloy Waterfront</td>
<td class="tdXP">65</td>
<td class="tdMoney">36</td>
</tr>
<tr>
<td class="tdName">Fire, Water, Burn</td>
<td class="tdLvl">4</td>
<td class="tdGet">Malloy Waterfront</td>
<td class="tdXP">65</td>
<td class="tdMoney">36</td>
</tr>
<tr>
<td class="tdName">Big Yellow Taxi</td>
<td class="tdLvl">5</td>
<td class="tdGet">Malloy Waterfront</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">Go Boy, Fetch!</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">A Life for Life</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">75</td>
<td class="tdMoney">54</td>
</tr>
<tr>
<td class="tdName">C&#8217;Mon, Hurry Up Already!</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">Bang Up Job</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">Playing it Safe</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">Am I Bugging You?</td>
<td class="tdLvl">5</td>
<td class="tdGet">Southern Warehouse</td>
<td class="tdXP">65</td>
<td class="tdMoney">36</td>
</tr>
<tr>
<td class="tdName">Hone Your Skills</td>
<td class="tdLvl">5</td>
<td class="tdGet">Southern Warehouse</td>
<td class="tdXP">13</td>
<td class="tdMoney">12</td>
</tr>
<tr>
<td class="tdName">Just a Small Favor</td>
<td class="tdLvl">5</td>
<td class="tdGet">Southern Warehouse</td>
<td class="tdXP">70</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class="tdName">Meet Kaylee</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">Meet the Boss</td>
<td class="tdLvl">5</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">15</td>
<td class="tdMoney">18</td>
</tr>
<tr>
<td class="tdName">Bullet-Tooth (Group)</td>
<td class="tdLvl">5</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">140</td>
<td class="tdMoney">70</td>
</tr>
<tr>
<td class="tdName">Meet Mick</td>
<td class="tdLvl">5</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">13</td>
<td class="tdMoney">12</td>
</tr>
<tr>
<td class="tdName">Report to Holden</td>
<td class="tdLvl">5</td>
<td class="tdGet">Constr. Site West</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
</table>
<table class="tblGunshine">
<tr>
<th>Name</th>
<th>Level</th>
<th>Where to Get</th>
<th>XP</th>
<th>Money</th>
</tr>
<tr>
<td class="tdName">Meet Lloyd</td>
<td class="tdLvl">6</td>
<td class="tdGet">Drug Farm</td>
<td class="tdXP">15</td>
<td class="tdMoney">16</td>
</tr>
<tr>
<td class="tdName">My Go-to Girl</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">16</td>
<td class="tdMoney">20</td>
</tr>
<tr>
<td class="tdName">Escort Mech</td>
<td class="tdLvl">6</td>
<td class="tdGet">Novelle Forest</td>
<td class="tdXP">75</td>
<td class="tdMoney">48</td>
</tr>
<tr>
<td class="tdName">Winners Don&#8217;t Do W.U.Z.Z</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">70</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class="tdName">A Damsel in Distress</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">70</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class="tdName">Burning Down the House</td>
<td class="tdLvl">6</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">75</td>
<td class="tdMoney">54</td>
</tr>
<tr>
<td class="tdName">A Moment&#8217;s Respite</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">75</td>
<td class="tdMoney">54</td>
</tr>
<tr>
<td class="tdName">Manna From Heaven</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">75</td>
<td class="tdMoney">54</td>
</tr>
<tr>
<td class="tdName">Get Rid of the Rivals</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Saving Saffron</td>
<td class="tdLvl">6</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Where&#8217;s Wally?</td>
<td class="tdLvl">6</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">16</td>
<td class="tdMoney">20</td>
</tr>
<tr>
<td class="tdName">White Lies, Red Blood</td>
<td class="tdLvl">6</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">85</td>
<td class="tdMoney">72</td>
</tr>
<tr>
<td class="tdName">Confiscate This!</td>
<td class="tdLvl">6</td>
<td class="tdGet">Container Storage</td>
<td class="tdXP">85</td>
<td class="tdMoney">72</td>
</tr>
<tr>
<td class="tdName">Talk to Rupert</td>
<td class="tdLvl">7</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Hostile Takeover</td>
<td class="tdLvl">7</td>
<td class="tdGet">Constr. Site West</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">An Insidious Plan</td>
<td class="tdLvl">7</td>
<td class="tdGet">Constr. Site West</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Man the Machines</td>
<td class="tdLvl">7</td>
<td class="tdGet">Constr. Site West</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">A Dog as a Courier? &#8230;</td>
<td class="tdLvl">7</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">80</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Raiding the Drug Lab (Group)</td>
<td class="tdLvl">7</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">190</td>
<td class="tdMoney">150</td>
</tr>
<tr>
<td class="tdName">Meet Mal</td>
<td class="tdLvl">7</td>
<td class="tdGet">Container Storage</td>
<td class="tdXP">16</td>
<td class="tdMoney">20</td>
</tr>
<tr>
<td class="tdName">Drugs, Dogs and Depots</td>
<td class="tdLvl">7</td>
<td class="tdGet">Import Area</td>
<td class="tdXP">85</td>
<td class="tdMoney">72</td>
</tr>
<tr>
<td class="tdName">Blood and Fire</td>
<td class="tdLvl">7</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">85</td>
<td class="tdMoney">72</td>
</tr>
<tr>
<td class="tdName">The Tankinator (Group)</td>
<td class="tdLvl">8</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">170</td>
<td class="tdMoney">120</td>
</tr>
<tr>
<td class="tdName">I&#8217;m Afraid I Was Very &#8230; (Group)</td>
<td class="tdLvl">8</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">190</td>
<td class="tdMoney">150</td>
</tr>
<tr>
<td class="tdName">If You Have a Plan &#8230;</td>
<td class="tdLvl">8</td>
<td class="tdGet">Import Area</td>
<td class="tdXP">60</td>
<td class="tdMoney">50</td>
</tr>
<tr>
<td class="tdName">Be Prepared</td>
<td class="tdLvl">9</td>
<td class="tdGet">Pirate Bay</td>
<td class="tdXP">90</td>
<td class="tdMoney">78</td>
</tr>
<tr>
<td class="tdName">Whack-a-Mole</td>
<td class="tdLvl">10</td>
<td class="tdGet">Abyssos Eastern Entrance</td>
<td class="tdXP">95</td>
<td class="tdMoney">90</td>
</tr>
<tr>
<td class="tdName">Documents for Davey</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">19</td>
<td class="tdMoney">30</td>
</tr>
<tr>
<td class="tdName">Report to Davey</td>
<td class="tdLvl">10</td>
<td class="tdGet">Abyssos Eastern Entrance</td>
<td class="tdXP">19</td>
<td class="tdMoney">30</td>
</tr>
<tr>
<td class="tdName">Someone&#8217;s Treasure &#8230;</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">19</td>
<td class="tdMoney">30</td>
</tr>
<tr>
<td class="tdName">Pest Control</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">95</td>
<td class="tdMoney">90</td>
</tr>
<tr>
<td class="tdName">A Trojan Tractor</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">A Trojan Backfire</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">Security Does Not Equal Safety</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">125</td>
<td class="tdMoney">144</td>
</tr>
<tr>
<td class="tdName">Gas Panic</td>
<td class="tdLvl">10</td>
<td class="tdGet">Abyssos Truck H.</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">The Soulless (Group)</td>
<td class="tdLvl">10</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">200</td>
<td class="tdMoney">160</td>
</tr>
<tr>
<td class="tdName">I&#8217;ll Never Tell</td>
<td class="tdLvl">10</td>
<td class="tdGet">Abyssos Field Office</td>
<td class="tdXP">85</td>
<td class="tdMoney">60</td>
</tr>
</table>
<table class="tblGunshine">
<tr>
<th>Name</th>
<th>Level</th>
<th>Where to Get</th>
<th>XP</th>
<th>Money</th>
</tr>
<tr>
<td class="tdName">Gun Trouble</td>
<td class="tdLvl">11</td>
<td class="tdGet">Abyssos Gas Refinery</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">Gutting the Guards</td>
<td class="tdLvl">11</td>
<td class="tdGet">Abyssos Gas Refinery</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">Blackout</td>
<td class="tdLvl">11</td>
<td class="tdGet">Abyssos Gas Refinery</td>
<td class="tdXP">105</td>
<td class="tdMoney">78</td>
</tr>
<tr>
<td class="tdName">Kick &#8216;Em When They&#8217;re Down</td>
<td class="tdLvl">11</td>
<td class="tdGet">Plainview Oil Ref.</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">Insult to Injury</td>
<td class="tdLvl">11</td>
<td  class="tdGet">Plainview Oil Ref.</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">It IS Another Drill, Literally</td>
<td class="tdLvl">11</td>
<td  class="tdGet">Plainview Oil Ref.</td>
<td class="tdXP">90</td>
<td class="tdMoney">60</td>
</tr>
<tr>
<td class="tdName">Now That&#8217;s Just Mean!</td>
<td class="tdLvl">11</td>
<td  class="tdGet">Plainview Oil Ref.</td>
<td class="tdXP">100</td>
<td class="tdMoney">72</td>
</tr>
<tr>
<td class="tdName">You Are What You Eat</td>
<td class="tdLvl">11</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">120</td>
<td class="tdMoney">132</td>
</tr>
<tr>
<td class="tdName">Reporting for Duty</td>
<td class="tdLvl">12</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">20</td>
<td class="tdMoney">32</td>
</tr>
<tr>
<td class="tdName">The Drill Stops Here</td>
<td class="tdLvl">13</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">Powerful Mischief</td>
<td class="tdLvl">13</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">Fat Dog (Group)</td>
<td class="tdLvl">13</td>
<td>Abyssos Truck H.</td>
<td class="tdXP">220</td>
<td class="tdMoney">190</td>
</tr>
<tr>
<td class="tdName">Getting Our Boys Out</td>
<td class="tdLvl">13</td>
<td>Abyssos Truck H.</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">Who in the What Now?</td>
<td class="tdLvl">13</td>
<td>Abyssos Truck H.</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">Making a Stand</td>
<td class="tdLvl">13</td>
<td>Eastern Drilling Zone</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">Leave No Man Behind</td>
<td class="tdLvl">14</td>
<td>Power Plant Entrance</td>
<td></td>
<td></td>
</tr>
<tr>
<td class="tdName">Two Lil&#8217; Hobos</td>
<td class="tdLvl">14</td>
<td>Abyssos Truck H.</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">They Came From The Sewers</td>
<td class="tdLvl">14</td>
<td>Abyssos Truck H.</td>
<td class="tdXP">105</td>
<td class="tdMoney">108</td>
</tr>
<tr>
<td class="tdName">Playing a Prank</td>
<td class="tdLvl">14</td>
<td>Abyssos Marketplace</td>
<td class="tdXP">120</td>
<td class="tdMoney">132</td>
</tr>
<tr>
<td class="tdName">Labycollector</td>
<td class="tdLvl">14</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td class="tdName">Three Down, 100 to Go</td>
<td class="tdLvl">14</td>
<td class="tdGet">Panacea Health Station</td>
<td class="tdXP">100</td>
<td class="tdMoney">96</td>
</tr>
<tr>
<td class="tdName">Raid the Nuthouse</td>
<td class="tdLvl">14</td>
<td>Abyssos Truck H.</td>
<td class="tdXP">23</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class='tdName'>Paving the Way</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Ratched Lane</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Bulldozers Are Fragile Beings</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Ratched Lane</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Kill the Chief</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Ratched Lane</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Get Certified</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Ratched Lane</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Onward!</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Ratched Lane</td>
<td class='tdXP'>23</td>
<td class='tdMoney'>42</td>
</tr>
<tr>
<td class='tdName'>Clear Out All Hostiles</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Bromden Park</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Extra Guns, Extra Fun</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Bromden Park</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Kill the Alarms</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Bromden Park</td>
<td class='tdXP'>115</td>
<td class='tdMoney'>126</td>
</tr>
<tr>
<td class='tdName'>Asylum Awaits</td>
<td class='tdLvl'>14</td>
<td class='tdGet'>Bromden Park</td>
<td class='tdXP'>23</td>
<td class='tdMoney'>42</td>
</tr>
<tr>
<td class='tdName'>Clean Sweep</td>
<td class='tdLvl'>15</td>
<td class='tdGet'>McMurphy Asylum</td>
<td class='tdXP'>120</td>
<td class='tdMoney'>132</td>
</tr>
<tr>
<td class='tdName'>Inmate 6733</td>
<td class='tdLvl'>15</td>
<td class='tdGet'>McMurphy Asylum</td>
<td class='tdXP'>120</td>
<td class='tdMoney'>132</td>
</tr>
<tr>
<td class='tdName'>Papillon</td>
<td class='tdLvl'>15</td>
<td class='tdGet'>McMurphy Asylum</td>
<td class='tdXP'>120</td>
<td class='tdMoney'>132</td>
</tr>
<tr>
<td class='tdName'>Drugs Don&#8217;t Work (Group)</td>
<td class='tdLvl'>15</td>
<td class='tdGet'>McMurphy Asylum</td>
<td class='tdXP'>240</td>
<td class='tdMoney'>220</td>
</tr>
<tr>
<td class="tdName">Abyssos Did Indeed Gaze Back</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Offices</td>
<td class="tdXP">120</td>
<td class="tdMoney">132</td>
</tr>
<tr>
<td class="tdName">Duke of All Kinds of Hazards</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Truck H.</td>
<td class="tdXP">24</td>
<td class="tdMoney">44</td>
</tr>
<tr>
<td class="tdName">For a Few Dollars More (Group)</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">240</td>
<td class="tdMoney">220</td>
</tr>
<tr>
<td class="tdName">Gaze Long Into Abyssos</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Offices</td>
<td class="tdXP">120</td>
<td class="tdMoney">132</td>
</tr>
<tr>
<td class="tdName">I Am in Disguise</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">24</td>
<td class="tdMoney">44</td>
</tr>
<tr>
<td class="tdName">Peek Into Abyssos</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Offices</td>
<td class="tdXP">120</td>
<td class="tdMoney">132</td>
</tr>
<tr>
<td class="tdName">Stop the Press</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">240</td>
<td class="tdMoney">220</td>
</tr>
<tr>
<td class="tdName">The Way of the Exploding Pig (Group)</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">240</td>
<td class="tdMoney">220</td>
</tr>
<tr>
<td class="tdName">There is Only Flesh</td>
<td class="tdLvl">15</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">120</td>
<td class="tdMoney">132</td>
</tr>
</table>
<table class="tblGunshine">
<tr>
<th>Name</th>
<th>Level</th>
<th>Where to Get</th>
<th>XP</th>
<th>Money</th>
</tr>
<tr>
<td class="tdName">Deal Breaker</td>
<td class="tdLvl">17</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">130</td>
<td class="tdMoney">150</td>
</tr>
<tr>
<td class="tdName">Oh, You Rascals!</td>
<td class="tdLvl">17</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">135</td>
<td class="tdMoney">162</td>
</tr>
<tr>
<td class="tdName">Bring it!</td>
<td class="tdLvl">18</td>
<td class="tdGet">Abyssos Marketplace</td>
<td class="tdXP">130</td>
<td class="tdMoney">150</td>
</tr>
</table>
<h2>Table of Quest / Missions on Islands</h2>
<table class="tblGunshine">
<tr>
<th>Name</th>
<th>Level</th>
<th>Where to Get</th>
<th>XP</th>
<th>Money</th>
</tr>
<tr>
<td class="tdName">Travel to Idas</td>
<td class="tdLvl">8</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">17</td>
<td class="tdMoney">24</td>
</tr>
<tr>
<td class="tdName">Travel to Argus</td>
<td class="tdLvl">10</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">19</td>
<td class="tdMoney">30</td>
</tr>
<tr>
<td class="tdName">Travel to Actor</td>
<td class="tdLvl">12</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">21</td>
<td class="tdMoney">36</td>
</tr>
<tr>
<td class="tdName">Travel to Castor</td>
<td class="tdLvl">14</td>
<td class="tdGet">Northern Warehouse</td>
<td class="tdXP">23</td>
<td class="tdMoney">42</td>
</tr>
<tr>
<td class="tdName">Island Idas Missions</td>
<td class="tdLvl">8</td>
<td class="tdGet">Idas Harbor</td>
<td class="tdXP">85</td>
<td class="tdMoney">72</td>
</tr>
<tr>
<td class="tdName">Island Argus Missions</td>
<td class="tdLvl">10</td>
<td class="tdGet">Argus Harbor Square</td>
<td class="tdXP">95</td>
<td class="tdMoney">90</td>
</tr>
<tr>
<td class="tdName">Island Castor Missions</td>
<td class="tdLvl">14</td>
<td class="tdGet">Castor Harbor Square</td>
<td class="tdXP">115</td>
<td class="tdMoney">126</td>
</tr>
<tr>
<td class="tdName">Island Medea Missions</td>
<td class="tdLvl">16</td>
<td class="tdGet">Medea Harbor Square</td>
<td class="tdXP">125</td>
<td class="tdMoney">144</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://samuli.hakoniemi.net/quests-and-missions-in-gunshine-net/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to Target CSS Only for Opera</title>
		<link>http://samuli.hakoniemi.net/how-to-target-css-only-for-opera/</link>
		<comments>http://samuli.hakoniemi.net/how-to-target-css-only-for-opera/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 14:17:14 +0000</pubDate>
		<dc:creator>Samuli Hakoniemi</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://samuli.hakoniemi.net/?p=613</guid>
		<description><![CDATA[<a href="how-to-target-css-only-for-opera/"><img src="/wp-content/images/opera/operaForBlog.png" alt="" /></a>
Sometimes there is need to write browser-specific CSS declarations. Although every developer should put their best effort on creating structure and layout that doesn't require any proprietary hacks, one may encounter situations where it's impossible to proceed by the book.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fhow-to-target-css-only-for-opera%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fhow-to-target-css-only-for-opera%2F&amp;source=zvona&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img src="/wp-content/images/opera/operaForBlog.png" alt="Opera" /></p>
<div class="ingress">Sometimes there is need to write browser-specific CSS declarations. Although every developer should put their best effort on creating structure and layout that doesn&#8217;t require any proprietary hacks, one may encounter situations where it&#8217;s impossible to proceed by the book.</div>
<p>My case was about font-size and letter-spacing on Opera (11.10). Opera was displaying selected font way too big to fit in allowed space and I needed a hack to fix this issue.</p>
<h2>Opera 9 and below</h2>
<p>This is pretty straight forward and well known hack:</p>
<pre name="code" class="css:nocontrols">html:first-child p
{
    font-size:12px;
}</pre>
<p>The real issue, in my case, was how to target newer and modern Opera versions 10 and 11.</p>
<h2>Opera 10 and above</h2>
<p>The answer is in media queries. Earlier this was obvious hack while no other browsers supported media-queries properly. However, nowadays more and more browsers support it and therefore we need to tweak the conditions a little:</p>
<pre name="code" class="css:nocontrols">@media not all and (-webkit-min-device-pixel-ratio:0) {
    p {
        font-size:12px;
    }
}</pre>
<p>I&#8217;ve validated this with Opera 10.5 and Opera 11. I also checked on Chrome 11, Chrome 12, Firefox 3.6, Firefox 4.0, Safari 5 and IE 8 that it doesn&#8217;t affect on them.</p>
<p><b>Edit:</b> I haven&#8217;t tested this on Opera 9 or earlier, but according to other resources, this hack should work on those browsers too.</p>
<h2>Conclusion</h2>
<p>It&#8217;s still possible to write browser-specific hacks but it&#8217;s getting more and more complex all the time. In this case we&#8217;re using a hack that is actually targeted to WebKit browsers to get them excluded from the media query hack. However, there is no confidence that this hack would work on Opera 12 or next versions of Safari or Chrome would behave as expected.</p>
<p>And big thanks goes to an article <a rel="external" href="http://grandic.com/html-css/css-hack-or-new-css-file-for-problematic-browsers/" title="CSS Hack or New CSS File for Problematic Browsers?">CSS Hack or New CSS File for Problematic Browsers?</a> and <a rel="external" href="http://css-tricks.com/is-there-any-dedicated-css-hacks-for-safari-or-opera/" title="Is There Any Dedicated CSS Hacks For Safari or Opera?">Is There Any Dedicated CSS Hacks For Safari or Opera?</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://samuli.hakoniemi.net/how-to-target-css-only-for-opera/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to Get Started with Shadow Cities</title>
		<link>http://samuli.hakoniemi.net/how-to-get-started-with-shadow-cities/</link>
		<comments>http://samuli.hakoniemi.net/how-to-get-started-with-shadow-cities/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 22:47:47 +0000</pubDate>
		<dc:creator>Samuli Hakoniemi</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cities]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[shadow]]></category>
		<category><![CDATA[shadowcities]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://samuli.hakoniemi.net/?p=476</guid>
		<description><![CDATA[<img src="/wp-content/images/shadowcities/shadowcities.jpg" alt="Shadow Cities" />
<p>Shadow Cities is a location based MMORPG which was just released for iPhone and is currently in beta stage (available only in Finland).</p>

<p>In order to get you started, I decided to write this post. I've myself played only for two days, nearly as long as the game has been publicly available. So these advices are from newbie to newbie :). And it's very possible some of these advices gets outdated in near future. However I truly hope you get some perspective in the game after you've read the post.</p>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fhow-to-get-started-with-shadow-cities%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fhow-to-get-started-with-shadow-cities%2F&amp;source=zvona&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img src="/wp-content/images/shadowcities/shadowcities.jpg" alt="Shadow Cities" /></p>
<p><b>Please notice this article is  outdated, after the client and game mechanics were renewed on May 2011!</b></p>
<p><b>I strongly suggest reading <a href="http://www.shadowcities.com/forum/topic/1191/" rel="external">STARTERS GUIDE</a> at Shadow Cities forum instead of this article.</b></p>
<div class="ingress">
<p><a rel="external" href="http://www.shadowcities.com">Shadow Cities</a> is a location based MMORPG which was just released for iPhone and is currently in beta stage (available only in Finland).</p>
<p>In order to get you started, I decided to write this post. I&#8217;ve myself played only for two days, nearly as long as the game has been publicly available. So these advices are from newbie to newbie :). And it&#8217;s very possible some of these advices gets outdated in near future.</p>
</div>
<p>[tweetmeme]</p>
<p>These advices are unofficial and made from personal perspective. By the way, I&#8217;m playing with character called &#8220;Macaco&#8221; for the Architects.</p>
<p><b>Last updated on 13th of Nov, 2010</b></p>
<h2>Table of Contents</h2>
<ul>
<li><a href="#read_the_help_section">Read the Help Section</a></li>
<li><a href="#about_the_terminology">About the Terminology</a></li>
<li><a href="#what_is_mana">What is Mana?</a></li>
<li><a href="#how_do_i_gain_experience">How Do I Gain Experience?</a></li>
<li><a href="#what_are_the_captured_spirits">What Are the Captured Spirits?</a></li>
<li><a href="#how_to_kill_other_players">How to Kill Other Players?</a></li>
<li><a href="#how_to_research">How to Research?</a></li>
<li><a href="#how_to_collect_energy">How to Collect Energy?</a></li>
<li><a href="#what_should_i_build_and_why">What Should I Build, And Why?</a></li>
<li><a href="#what_is_warping">What is Warping?</a></li>
<li><a href="#what_spells_should_i_choose">What Spells Should I Choose?</a></li>
<li><a href="#closing_words">Closing Words</a></li>
</ul>
<h2 id="read_the_help_section" name="read_the_help_section">Read the Help Section</h2>
<p>Shadow Cities has a brief and clear help section, which you really should read before starting your career as a mage. It can also be found online from <a href="http://www.shadowcities.com/help/" rel="external">Shadow Cities Help Section</a>.</p>
<p>Seriously, read it.</p>
<h2 id="about_the_terminology" name="about_the_terminology">About the Terminology</h2>
<dl>
<dt>Teams</dt>
<dd>You&#8217;ll belong either on the Architects or the Animators. On daily basis, your side will mostly affect on how you&#8217;re able to travel (or warp) in your area without moving physically. On weekly basis, there are different kind of campaigns where both teams compete against each other.</dd>
<dt>Hitpoints</dt>
<dd>Mages don&#8217;t have hitpoints, only spirits do. This means neither you can&#8217;t get killed, nor can the other mages. Every time a mage is hit, he&#8217;ll lose (only) mana.</dd>
<dt>Mana</dt>
<dd>Whenever you want to do something cool, you&#8217;ll need mana for that.</dd>
<dt>Experience</dt>
<dd>In order to get on next level, you need to gain experience. The best way to gain experience is to kill spirits.</dd>
<dt>Spirits</dt>
<dd>Spirits are the non-player characters of the game, which you&#8217;ll hunt down and kill until your screen has a greasy Z figure on it. And then you&#8217;ll kill some more.</dd>
<dt>Energy</dt>
<dd>Energy can be considered as &#8220;experience points of the team&#8221;. It seems there will be different kind of contest every week between teams and the amount of collected energy is in important role. The main resource for energy are the dominators.</dd>
<dt>Warping</dt>
<dd>This is how you travel inside the game. Or of course you can travel physically, but by warping you&#8217;ll get to different places very quickly. Warping back and forth doesn&#8217;t consume any mana.</dd>
<dt>Buildings</dt>
<dd>There are different kind of buildings, and the dominators are the most important ones. These towers has several meanings which you can find out by reading through the help section.</dd>
<dt>Power</dt>
<dd>Power is needed in order to build specific type of buildings. Dominators are generating power, while other type of buildings are consuming it.</dd>
<dt>Energy Gateways</dt>
<dd>These are burning flames around the realm. They can be conquered by attaching dominators to them. They also can be bought with mana bottles, making the buyer as the Shadow lord of the realm (the close surroundings).</dd>
</dl>
<h2 id="what_is_mana" name="what_is_mana">What is Mana?</h2>
<p>On the bottom left corner of the main view, there&#8217;s a blue bottle and a tiny meter. This is your mana. Good thing to remember is that nearly every action requires mana in some way.</p>
<p>The meter will show much mana you&#8217;ve charged with, and the number above the bottle displays the amount of mana bottles. One bottle will recharge your mana completely. Full charge of mana will be enough for 3 &#8211; 4 war spells.</p>
<p>Mana bottles are also the currency in the Shadow Cities. This is quite important to realize. Don&#8217;t use bottles for recharging whenever you&#8217;ve time to wait.  Mana will automatically regenerate, but the bottles won&#8217;t. Therefore it&#8217;s the best way just to wait for recharging. Trust me, you&#8217;ll eventually end up in a situation where you&#8217;ll curse yourself for spending mana bottles in vain.</p>
<p>There are three ways to gain more mana bottles: 1) buying them from App Store, 2) researching (see &#8220;What Are the Captured Spirits?&#8221;) and 3) by completing tasks (little yellow exclamation or question mark on bottom right of the screen).</p>
<h2 id="how_do_i_gain_experience" name="how_do_i_gain_experience">How Do I Gain Experience?</h2>
<p>The best way to gain experience is by killing spirits. There are different kind of spirits, but most of them are quite easy catches (Rank 1).</p>
<p>Spirits are flying around and will not attack you until you&#8217;ve first attacked them. You should definitely go after them whenever you&#8217;ve got enough mana to throw at least two war spells.</p>
<p>It&#8217;s not cool either to kill a spirit someone else is trying to kill. No matter if he&#8217;s an Architect or an Animator. The amount of experience is nothing compared the amount of disrespect you gain.</p>
<h2 id="what_are_the_captured_spirits" name="what_are_the_captured_spirits">What Are the Captured Spirits?</h2>
<p>After you kill a spirit, it&#8217;s captured. The list of captured spirits can be found by pressing the white Shadow Cities icon on the bottom right. And on the sub menu, go for the yellow icon on the top left.</p>
<p>There are 12 different kind of spirits in total, with three different colors (red, green, blue) and four different houses (Dannan, Drioma, Inrik, Tiermes).</p>
<p>There are two things that makes some spirits more worthy than others: 1) spirits have different values (marked with stars) and 2) some type of spirits are used to research mana bottles.</p>
<p>Captured spirits can be used for generating energy. The value (no star, one star, three star) defines the amount of energy you&#8217;ll generate while donating the spirit. They can also be used for researching mana bottles.</p>
<p>The point here is to focus on more valuable spirits and / or spirits that can be used for researching. I&#8217;ve noticed that more valuable spirits (especially three stars on them) are harder to capture, but you&#8217;ll also gain more experience by killing them. So, I definitely recommend hunting down these certain type of spirits.</p>
<h2 id="how_to_kill_other_players" name="how_to_kill_other_players">How to Kill Other Players?</h2>
<p>Never ever go after other players! It just doesn&#8217;t make sense. At the moment, other players can&#8217;t be killed (I personally hope this get changed). They&#8217;ll only lose their mana &#8211; and so do you. If you encounter an hostile situation you should just warp away.</p>
<p>Only reasonable situation for attacking opponent players is when they&#8217;re trying to destroy your buildings. However, it&#8217;s easy for them to logout and come back later with recharged mana and continue the destruction. But at least you&#8217;ve tried your best :).</p>
<h2 id="how_to_research" name="how_to_research">How to research?</h2>
<p>You can research by selecting yellow character icon from top left and then the mana bottle from sub menu. In research menu you see three headers labeled as &#8220;Research&#8221;, &#8220;My Public Projects&#8221; and &#8220;Other Public Projects&#8221;.</p>
<p>Currently it seems that &#8220;Red Dannan&#8221;, &#8220;Green Drioma&#8221; and &#8220;Blue Inrik&#8221; are used for researching purposes. I don&#8217;t know whether this will change on some interval.</p>
<p>You should check what type of spirits you have for researching purposes from &#8220;Research&#8221; view. But don&#8217;t start your own project yet. Instead you should check through ongoing public projects whether you can contribute to them.</p>
<p>Every mage who participates on research project will gain one mana bottle. If they participate by adding multiple type of spirits they still gain only one bottle. Therefore it makes no sense to contribute with more than one spirit.</p>
<p>When you start your own project, it will appear as public project, but only to your friends. However, when you participate on a project created by someone else, this project will be seen only by his friends.</p>
<h2 id="how_to_collect_energy" name="how_to_collect_energy">How to Collect Energy?</h2>
<p>The dominators are the main source of energy. Dominators will slowly generate energy, and when they&#8217;re filled with energy, a red circle will appear around them and you can harvest the energy. You&#8217;re also capable of harvesting your team members dominators. Another way to collect energy is to donate captured spirits (see above).</p>
<p>You&#8217;ll also gain (or rob) energy when destroying opponents dominator which is fully charged. It&#8217;s extremely rewarding when you stumble upon a field of opponent dominators.</p>
<p>It&#8217;s rather important to collect energy. Energy will help your team to win the weekly campaign. And you&#8217;ll be rewarded according to the energy you&#8217;ve collected.</p>
<h2 id="what_should_i_build_and_why" name="what_should_i_build_and_why">What Should I Build, And Why?</h2>
<p>Build dominators. Focus on building the dominators. And harvest the dominators as often as possible.</p>
<p>Distribute dominators. The amount of power generated by dominators doesn&#8217;t depend on the location of dominator. In addition, your dominators will generate more energy in average when they&#8217;re distributed to different gateways. One dominator per player, per gateway will generate 12 energy points, while two of them will generate only 8 points each. If you connect eg. five of your dominators to a single gateway, they&#8217;ll generate only five energy points each.</p>
<p>Always destroy enemy dominators when you encounter them. This is the situation where mana bottles are essential because you really want to get rid of them all. At the moment it seems not many players are fully aware of this. By destroying opponent&#8217;s dominators you both gain experience and harm their infrastructure.</p>
<p>You&#8217;ll find out the meaning of all the other buildings while you&#8217;re progressing on the game. But the dominators are the constitution of the game.</p>
<h2 id="what_is_warping" name="what_is_warping">What is Warping?</h2>
<p>In order to get easily on different places, you&#8217;ll need to warp. Whenever there&#8217;s something that belongs to your team, you can warp on it. That is very good thing to remember.</p>
<p>It&#8217;s possible to warp longer distances. This is done through beacons, a specific type of building which has to be built by someone. You can see the available beacons by entering into expanded view by clicking on the white Shadow Cities on the bottom right, and then on the submenu, click the white cloud icon on bottom left.</p>
<h2 id="what_spells_should_i_choose" name="what_spells_should_i_choose">What Spells Should I Choose?</h2>
<p>I have no straight answer on this, so I&#8217;ll make a good guess:</p>
<ul>
<li>Upgrade your war spell first</li>
<li>Catchers are excellent for capturing loads of (both common and rare spirits). I recommend learning this spell on second.</li>
<li>Ability to heal makes you feel like a good mage when you&#8217;re donating your mana to other players. However, at the beginning it&#8217;s useless for healing buildings while most of them can be destroyed with couple of war spells</li>
<li>You won&#8217;t be needing beacons in the beginning. They consume lots of power while they won&#8217;t provide you any value. Don&#8217;t go for them.</li>
<li>Traps are always cool. But lower level spell is quite useless, since the trap can be destroyed with one or two war spells</li>
</ul>
<p>So in general, consider evolving only in the war and catcher spells. They are the spells you&#8217;ve personally needing most. Your team will need you, but not when you&#8217;re on level&nbsp;5.</p>
<h2 id="closing_words" name="closing_words">Closing Words</h2>
<p>I just hope this helps you to get started. Playing Shadow Cities isn&#8217;t that complicated. But I&#8217;ve heard some of the new players complaining about the icons and terms that they&#8217;re not self explanatory, and you easily end up wandering and doing something meaningless. But it&#8217;s good to remember that the game is in beta phase and at least I do think the game will evolve from this point.</p>
]]></content:encoded>
			<wfw:commentRss>http://samuli.hakoniemi.net/how-to-get-started-with-shadow-cities/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Debugging and Testing in Internet Explorer Made Easy</title>
		<link>http://samuli.hakoniemi.net/debugging-and-testing-in-internet-explorer-made-easy/</link>
		<comments>http://samuli.hakoniemi.net/debugging-and-testing-in-internet-explorer-made-easy/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 00:30:07 +0000</pubDate>
		<dc:creator>Samuli Hakoniemi</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[internetexplorer]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://samuli.hakoniemi.net/?p=193</guid>
		<description><![CDATA[<a href="/debugging-and-testing-in-internet-explorer-made-easy"><img class="img_main" src="http://samuli.hakoniemi.net/wp-content/images/debugging-testing-ie/debugging-testing-ie.jpg" alt="Debugging and Testing in Internet Explorer Made Easy" /></a>

It's somewhat usual to leave the testing with Internet Explorer until the end of the project. This is quite acceptable when you're dealing mainly with layout issues.

But when you're building a web application with loads of features, there are several issues to struggle with: constant debugging, client-side performance, proprietary bugs and so on. However, getting your hands dirty with IE doesn't always feel as comfortable as with other browsers.

In this article, I'm going to list and review different set of tools, which will help you and make your debugging and testing process in Internet Explorer much more enjoyable.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fdebugging-and-testing-in-internet-explorer-made-easy%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsamuli.hakoniemi.net%2Fdebugging-and-testing-in-internet-explorer-made-easy%2F&amp;source=zvona&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="img_main" src="http://samuli.hakoniemi.net/wp-content/images/debugging-testing-ie/debugging-testing-ie.jpg" alt="Debugging and Testing in Internet Explorer Made Easy" /></p>
<div class="ingress">
<p>It&#8217;s somewhat usual to leave the testing with Internet Explorer until the end of the project. This is quite acceptable when you&#8217;re dealing mainly with layout issues.</p>
<p>But when you&#8217;re building a web application with loads of features, there are several issues to struggle with: constant debugging, client-side performance, proprietary bugs and so on. However, getting your hands dirty with IE doesn&#8217;t always feel as comfortable as with other browsers.</p>
<p>In this article, I&#8217;m going to list and review different set of tools, which will help you and make your debugging and testing process in Internet Explorer much more enjoyable.
</p></div>
<p>[tweetmeme]</p>
<p>This article is a general overview of different tools and resources that are available for IE. Unfortunately it&#8217;s not providing any detailed information on how to use these tools properly. But I still hope this article offers you a good start.</p>
<p>This article is split into following topics:</p>
<ol>
<li><a href="#browserpackages">Browser Packages</a> &#8211; different IE browser packages</li>
<li><a href="#generaldebuggingtools">General Debugging Tools</a> &#8211; most common debugging tools</li>
<li><a href="#performancetesting">Performance Testing Tools</a> &#8211; excellent tools for performance testing</li>
<li><a href="#otherresources">Other Resources</a> &#8211; additional resources worth of checking</li>
</ol>
<h2 id="browserpackages">Browser Packages</h2>
<p><img class="img_main" src="http://samuli.hakoniemi.net/wp-content/images/debugging-testing-ie/browserpackages.jpg" alt="Browser Packages" /></p>
<p>The first step is to install all the common versions of Internet Explorer (IE6, IE7, IE8). There are several options available and I&#8217;ll review four of them.</p>
<h3>Utilu IE Collection</h3>
<p>My personal recommendation is <a title="Utilu IE Collection" rel="external" href="http://utilu.com/IECollection/">Utilu IE Collection</a>. Don&#8217;t be scared, it&#8217;s very reliable (despite the appearance of website). Utilu IE Collection contains multiple IE versions, which are standalone so they can be used at the same time.</p>
<p>The main reason I recommend this package is because the browsers it provides are very stable. Utilu IE Collection also includes the Internet Explorer Developer Toolbar.</p>
<h3>BrowserSeal.BrowserPack</h3>
<p><del>If you&#8217;re in need of older versions of other browsers, I recommend installing <a title="BrowserSeal.BrowserPack" rel="external" href="http://www.browserseal.com/?option=com_content&amp;view=article&amp;id=35">BrowserSeal.BrowserPack</a>. It uses the Internet Explorer Collection mentioned above, but in addition it allows to install browsers like Safari 3 and Opera 9.</del></p>
<p><del>Browsers provided in BrowserSeal.BrowserPack are very stable and I haven&#8217;t encountered any problems.</del></p>
<h3>IETester</h3>
<p><a title="IETester" rel="external" href="http://www.my-debugbar.com/wiki/IETester/HomePage">IETester</a> contains several advantages compared to other packages, like opening different versions of IE into tabs.</p>
<p>IETester is provided by DebugBar and they&#8217;re also responsible for providing excellent debugging tools like DebugBar and Companion.js (both reviewed later in this article).</p>
<p>However, IETester still (v0.4.2) feels quite unstable and I&#8217;ve encountered some contradictions while debugging. But I&#8217;m quite convinced these kind of issues gets fixed sooner or later and therefore keep IETester in my armament.</p>
<h3>Microsoft Expression Web SuperPreview</h3>
<p><a title="Microsoft Expression Web SuperPreview" rel="external" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&amp;displaylang=en">Microsoft Expression Web SuperPreview</a> is a stand-alone application and part of <a title="Microsoft Expression Web 3" rel="external" href="http://www.microsoft.com/expression/products/Web_Overview.aspx">Microsoft Expression Web 3</a> product. Mainly, it can be used for viewing the pages side by side on IE6, IE7 and IE8.</p>
<p>In my opinion, this application doesn&#8217;t provide any value for debugging and testing. It&#8217;s targetted for web design, offering the possibility for swift visual overviews and comparing layouts between different IE versions.</p>
<h2 id="generaldebuggingtools">General debugging tools</h2>
<p><img class="img_main" src="http://samuli.hakoniemi.net/wp-content/images/debugging-testing-ie/generaldebugging.jpg" alt="General Debugging" /></p>
<p>I&#8217;m quite certain you&#8217;re using Firebug on Firefox. And maybe you&#8217;re aware of Firebug Lite and already using it. Still, there&#8217;s a good chance that you&#8217;re wondering how to debug in Internet Explorer.</p>
<h3>Firebug Lite</h3>
<p>You might be already aware of Firebug Lite. If not, read further. <a title="Firebug Lite" rel="external" href="http://getfirebug.com/firebuglite">Firebug Lite</a> is a JavaScript file you can insert into your pages to simulate some Firebug features in other browser than Firefox. It doesn&#8217;t affect or interfere with HTML elements that aren&#8217;t created by itself.</p>
<p>I have to say I&#8217;m not that big fan of Firebug Lite. First of all, many core features of console are already implemented in other browsers. Second, it&#8217;s not always working properly. I&#8217;ve personally encountered some problems especially with IE and therefore I never count solely on it.</p>
<p>Still, it&#8217;s a must. Go ahead and start using it, if you still haven&#8217;t.</p>
<h3>IE Developer Toolbar</h3>
<p>You may be familiar with Developer Tools for IE8. Well, <a title="IE Developer Toolbar" rel="external" href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en">IE Developer Toolbar</a> is practically the same tool for IE6 and IE7. And it&#8217;s provided together with IE Collection by default.</p>
<p>IE Developer Toolbar is easy to use and offers a broad set of options for general debugging. It can be compared to Web Developer add-on for Firefox.</p>
<h3>DebugBar</h3>
<p>All the features you&#8217;re missing from Developer Toolbar, can be found in <a title="DebugBar" rel="external" href="http://www.debugbar.com/">DebugBar</a>. In most cases, when you need to find something out of the document, this can be done with DebugBar. It&#8217;s very fast and reliable.</p>
<p>If I had to describe DebugBar in three words, I would definitely say &#8220;it just works!&#8221;.</p>
<h3>CompanionJS</h3>
<p><a title="Companion.js" rel="external" href="http://www.my-debugbar.com/wiki/CompanionJS/HomePage">Companion.js</a> integrates with IE and it can be briefly described as a simplified version of Firebug. Like I mentioned before, I&#8217;m not that favor for Firebug Lite on IE, and Companion.js feels much more comfortable for basic-level console logging and error reporting.</p>
<p>However, there are two clear disadvantages in Companion.js: 1) it doesn&#8217;t support methods like console.dir() yet, and 2) it causes occasional breakdowns with other development tools for IE.</p>
<h2 id="performancetesting">Performance Testing Tools</h2>
<p><img class="img_main" src="http://samuli.hakoniemi.net/wp-content/images/debugging-testing-ie/performancetesting.jpg" alt="Performance Testing" /></p>
<p>Client-side performance testing and optimization is a practice that hasn&#8217;t &#8220;existed&#8221; very long in Web Development. I mean it hasn&#8217;t been getting a lot of attention until recently.</p>
<p>As you might know, Internet Explorer (especially IE6) doesn&#8217;t perform as good as many other browsers. I was actually quite surprised when I started testing performance with IE that even very small things can really affect on performance.</p>
<p>I&#8217;m reviewing couple of performance testing tools that are also possible to implement in any browser, not just in Internet Explorer.</p>
<h3>dynaTrace AJAX</h3>
<p>If you&#8217;re using Speed Tracer on Google Chrome, then you&#8217;re going to love <a title="dynaTrace AJAX" rel="external" href="http://ajax.dynatrace.com/pages/">dynaTrace AJAX</a>. Like the name says, it&#8217;s meant for diagnosing and tracking AJAX and client-side scripting perfomance issues. But in addition, it offers valid tools for tracking rendering (painting) issues and network load in general.</p>
<p>dynaTrace AJAX isn&#8217;t the easiest tool to take in proper use. I was bit troubled on how to demonstrate this tool or prove the capabilities in it. Fortunately, my colleague posted a link to an article, which solved the problem: <a href="http://blog.dynatrace.com/2010/02/22/how-to-speed-up-sites-like-vancouver2010-com-by-more-than-50-in-5-minutes/">How to Speed Up sites like vancouver2010.com by more than 50% in 5 minutes</a>.</p>
<p>dynaTrace&#8217;s blog contains many more resources how to use this powerful tool. Read them, install dynaTrace AJAX and tackle all those nasty perfomance issues that freezes up your Internet Explorer :)</p>
<h3>MySpace&#8217;s Perfomance Tracker</h3>
<p>I&#8217;d say the name of this application is a bit distracting. But <a title="msfast" rel="external" href="http://msfast.myspace.com/">MySpace&#8217;s Perfomance Tracker</a>, or <a title="msfast - Project Home" rel="external" href="http://code.google.com/p/msfast/">&#8220;msfast&#8221; (project home)</a> is a browser plugin that help developers to improve their code performance by capturing and measuring possible bottlenecks on their web pages.</p>
<p>It&#8217;s very efficient tool for tracking loading and rendering issues, and in addition, it provides the validation results either in YSlow or MySpace&#8217;s own ruleset.</p>
<p>I had some problems when I tried to install Beta. But when I first installed the alpha version and afterwards upgraded it to the beta version, it started working properly.</p>
<h3>JSLitmus</h3>
<p><a title="Link to JSLitmus Website" rel="external" href="http://www.broofa.com/Tools/JSLitmus/">JSLitmus</a> is a lightweight tool for creating ad-hoc JavaScript benchmark tests. I really recommend JSLitmus for testing performance of your Javascript in general.</p>
<p>JSLitumus really provides additional value in Internet Explorer. As generally known, there are surprising Javascript issues that really can cause performance hit in Internet Explorer. And by creating even simple testcases, you&#8217;ll probably find the actual troublemakers.</p>
<h3>Fiddler2</h3>
<p><a title="Fiddler2" href="http://www.fiddler2.com/fiddler2/">Fiddler</a> is a Web Debugging Proxy which logs all HTTP(S) traffic. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and &#8220;fiddle&#8221; with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.</p>
<p>To be honest, I haven&#8217;t use Fiddler a lot. Mostly because performance issues I&#8217;ve encountered related to traffic on website has always been solved with another tool (in another browser). But Fiddler really provides a good and broad insight what&#8217;s actually happening between the browser and the server and offers a worthy set for tweaking details.</p>
<h2 id="otherresources">Other Resources</h2>
<p>While writing this article I encountered a tool called <a title="IEInspector" rel="external" href="http://www.ieinspector.com/">IEInspector</a>. It&#8217;s chargeable, but there&#8217;s a free trial version available. I didn&#8217;t have enough time to evaluate it, but you can always give it a try.</p>
<p>There&#8217;s also a listing at Microsoft Window&#8217;s website called <a title="Internet Explorer 8 Readiness Toolkit" rel="external nofollow" href="http://www.microsoft.com/windows/internet-explorer/readiness/testing-tools.aspx">Internet Explorer 8 Readiness Toolkit</a>, which is described as a list of convenient development and test tools to help test and modify applications to run on Internet Explorer 8.</p>
<p>There are probably other tools and resources that I&#8217;m probably not aware of. If you know good tools or resources for debugging and testing in Internet Explorer, go ahead and leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://samuli.hakoniemi.net/debugging-and-testing-in-internet-explorer-made-easy/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>10 Small Things You May Not Know About Javascript</title>
		<link>http://samuli.hakoniemi.net/10-small-things-you-may-not-know-about-javascript/</link>
		<comments>http://samuli.hakoniemi.net/10-small-things-you-may-not-know-about-javascript/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 00:02:40 +0000</pubDate>
		<dc:creator>Samuli Hakoniemi</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://samuli.hakoniemi.net/?p=150</guid>
		<description><![CDATA[In this article, I'll provide ten small Javascript tips, mainly aimed for beginner and intermediate Javascript developers.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fsamuli.hakoniemi.net%2F10-small-things-you-may-not-know-about-javascript%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fsamuli.hakoniemi.net%2F10-small-things-you-may-not-know-about-javascript%2F&amp;source=zvona&amp;style=normal&amp;service=bit.ly&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>[tweetmeme]<br />
It doesn&#8217;t matter how many years I&#8217;ve been dealing with Javascript &#8211; it contains many little things that surprises me almost every week. For me, Javascript means a constant learning process.</p>
<p>In this article, I&#8217;ll provide ten small Javascript tips, mainly aimed for beginner and intermediate Javascript developers. Hopefully there&#8217;s at least one useful tip for every reader :).</p>
<h2>1. Variables conversions</h2>
<p>This sounds quite obvious, but as far I&#8217;ve seen, using object constructors, like <i>Array()</i> or <i>Number()</i> for converting variables is quite common practice.</p>
<p>Always use primitive data types (sometimes referred as literals) for converting variables. These won&#8217;t do any extra tricks and they usually have better performance.</p>
<pre name="code" class="javascript:nocontrols">var myVar	= "3.14159",
	str		= ""+ myVar,//	to string
	int		= ~~myVar,	//	to integer
	float	= 1*myVar,	//	to float
	bool	= !!myVar,	/*	to boolean - any string with length
							and any number except 0 are true */
	array	= [myVar];	//	to array</pre>
<p>Converting to dates (new Date(myVar)) and regular expressions (new RegExp(myVar)) must be done with constructors. However, always use <i>/pattern/flags</i> when creating regular expressions.</p>
<h2>2. Converting decimals to hex or octals and vice versa</h2>
<p>Are you writing separate functions for hex (or octal) conversios? Stop. This can be easily done with existing methods:</p>
<pre name="code" class="javascript:nocontrols">(int).toString(16);	// converts int to hex, eg 12 => "C"
(int).toString(8);	// converts int to octal, eg. 12 => "14"
parseInt(string, 16) // converts hex to int, eg. "FF" => 255
parseInt(string, 8) // converts octal to int, eg. "20" => 16</pre>
<h2>3. More playing with numbers</h2>
<p>In addition to previous section, here are some more small tricks with when dealing with numbers.</p>
<pre name="code" class="javascript:nocontrols">0xFF; // Hex declaration, returns 255
020; // Octal declaration, returns 16
1e3; // Exponential, same as 1 * Math.pow(10,3), returns 1000
(1000).toExponential(); // Opposite with previous, returns 1e3
(3.1415).toFixed(3); // Rounding the number, returns "3.142"</pre>
<h2>4. Javascript Version Detection</h2>
<p>Are you aware which version of Javascript your browser supports? If not, check <a href="http://en.wikipedia.org/wiki/JavaScript#Versions" title="Wikipedia: Javascript Versions">Javascript Versions</a> sheet from Wikipedia.</p>
<p>For some reason, features in <a href="https://developer.mozilla.org/en/New_in_JavaScript_1.7" title="MDC: New in Javascript 1.7">Javascript version 1.7</a> are not widely supported. However, most browsers released within a year support features in version 1.8 (and in 1.8.1).</p>
<p>Note: all the versions of Internet Explorer (8 and older) supports only Javascript version 1.5.</p>
<p>Here&#8217;s a tiny script both for detecting the version of Javascript via feature detection. It also allows checking support for specific version of Javascript:</p>
<pre name="code" class="javascript:nocontrols">var JS_ver	= [];

(Number.prototype.toFixed)?JS_ver.push("1.5"):false;
([].indexOf &#038;&#038; [].forEach)?JS_ver.push("1.6"):false;
((function(){try {[a,b] = [0,1];return true;}catch(ex) {return false;}})())?JS_ver.push("1.7"):false;
([].reduce &#038;&#038; [].reduceRight &#038;&#038; JSON)?JS_ver.push("1.8"):false;
("".trimLeft)?JS_ver.push("1.8.1"):false;

JS_ver.supports	= function()
{
	if (arguments[0])
		return (!!~this.join().indexOf(arguments[0] +",") +",");
	else
		return (this[this.length-1]);
}

alert("Latest Javascript version supported: "+ JS_ver.supports());
alert("Support for version 1.7 : "+ JS_ver.supports("1.7"));</pre>
<h2>5. window.name for simple session handling</h2>
<p>This one is something I really like. You can assign values as a string for <i>window.name</i> property and it preserves the values until you close the tab or window.</p>
<p>Although I&#8217;m not providing any script, I strongly suggest you to take full advantage from it. For instance, it&#8217;s very useful for toggling between debugging and (perfomance) testing modes, when building a website or an application.</p>
<h2>6. Testing existence of property</h2>
<p>This issue can be approached at least from two directions. Either we check whether property exists or we check the type of property. But always avoid these small mistakes:</p>
<pre name="code" class="javascript:nocontrols">// BAD: This will cause an error in code when foo is undefined
if (foo) {
	doSomething();
} 

// GOOD: This doesn't cause any errors. However, even when
// foo is set to NULL or false, the condition validates as true
if (typeof foo != "undefined") {
	doSomething();
}

// BETTER: This doesn't cause any errors and in addition
// values NULL or false won't validate as true
if (window.foo) {
	doSomething();
}</pre>
<p>However, there may be situations, when we have deeper structure and proper checking would look like this:</p>
<pre name="code" class="javascript:nocontrols">// UGLY: we have to proof existence of every
// object before we can be sure property actually exists
if (window.oFoo &#038;&#038; oFoo.oBar &#038;&#038; oFoo.oBar.baz) {
	doSomething();
}</pre>
<h2>7. Passing arguments for function</h2>
<p>When function has both required and optional parameters (arguments), eventually we may end up with functions and function calls looking like this:</p>
<pre name="code" class="javascript:nocontrols">function doSomething(arg0, arg1, arg2, arg3, arg4) {
...
}

doSomething('', 'foo', 5, [], false);</pre>
<p>It&#8217;s always easier to pass only one object instead of several arguments:</p>
<pre name="code" class="javascript:nocontrols">function doSomething() {
	// Leaves the function if nothing is passed
	if (!arguments[0]) {
		return false;
	}

	var oArgs	= arguments[0]
		arg0	= oArgs.arg0 || "",
		arg1	= oArgs.arg1 || "",
		arg2	= oArgs.arg2 || 0,
		arg3	= oArgs.arg3 || [],
		arg4	= oArgs.arg4 || false;
}

doSomething({
	arg1	: "foo",
	arg2	: 5,
	arg4	: false
});
</pre>
<p>This is only a rough example of passing an object as an argument. For instance, we could declare an object with name of the variable as keys and default values as properties (and/or data types).</p>
<h2>8. Using document.createDocumentFragment()</h2>
<p>You may need to dynamically append multiple elements into document. However, appending them directly into document will fire redrawing of whole view every time, which causes perfomance penalty. Instead, you should use document fragments, which are appended only once after completion:</p>
<pre name="code" class="javascript:nocontrols">function createList() {
	var aLI	= ["first item", "second item", "third item",
		"fourth item", "fith item"];

	// Creates the fragment
	var oFrag	= document.createDocumentFragment();

	while (aLI.length) {
		var oLI	= document.createElement("li");

		// Removes the first item from array and appends it
		// as a text node to LI element
		oLI.appendChild(document.createTextNode(aLI.shift()));
		oFrag.appendChild(oLI);
	}

	document.getElementById('myUL').appendChild(oFrag);
}</pre>
<h2>9. Passing a function for replace() method</h2>
<p>There are situations when you want to replace specific parts of the string with specific values. The best way of doing this would be passing a separate function for method String.replace().</p>
<p>Following example is a rough implementation of making a more verbose output from a single deal in online poker:</p>
<pre name="code" class="javascript:nocontrols">var sFlop	= "Flop: [Ah] [Ks] [7c]";
var aValues	= {"A":"Ace","K":"King",7:"Seven"};
var aSuits	= {"h":"Hearts","s":"Spades",
			"d":"Diamonds","c":"Clubs"};

sFlop	= sFlop.replace(/\[\w+\]/gi, function(match) {
	match	= match.replace(match[2], aSuits[match[2]]);
	match	= match.replace(match[1], aValues[match[1]] +" of ");

	return match;
});

// string sFlop now contains:
// "Flop: [Ace of Hearts] [King of Spades] [Seven of Clubs]"
</pre>
<h2>10. Labeling of loops (iterations)</h2>
<p>Sometimes, you may have iterations inside iterations and you may want to exit between looping. This can be done by labeling:</p>
<pre name="code" class="javascript:nocontrols">outerloop:
for (var iI=0;iI<5;iI++) {
	if (somethingIsTrue()) {
		// Breaks the outer loop iteration
		break outerloop;
	}

	innerloop:
	for (var iA=0;iA<5;iA++) {
		if (somethingElseIsTrue()) {
			// Breaks the inner loop iteration
			break innerloop;
		}

	}
}</pre>
<h2>Afterwords</h2>
<p>Go ahead and comment! Did you learn anything new? Do you have good tips to share? I'm always delighted for sharing information about all the little details in Javascript.</p>
<p>And if you want to familiarize with Javascript irregularities, I suggest you visiting at <a rel="external" href="http://wtfjs.com/" title="wtfjs">wtfjs</a> :).</p>
]]></content:encoded>
			<wfw:commentRss>http://samuli.hakoniemi.net/10-small-things-you-may-not-know-about-javascript/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

