<?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>Greeen Notes</title>
	<atom:link href="http://greeennotebook.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://greeennotebook.com</link>
	<description>Computer and programming notes, plus some of my software</description>
	<lastBuildDate>Thu, 29 Dec 2011 11:47:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Time and Date Difference Calculator / Time Zone Converter</title>
		<link>http://greeennotebook.com/2011/04/time-and-date-difference-calculator-time-zone-converter/</link>
		<comments>http://greeennotebook.com/2011/04/time-and-date-difference-calculator-time-zone-converter/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 12:19:23 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Conversion]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=1261</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2011/04/time-and-date-difference-calculator-time-zone-converter/"><img align="left" hspace="5" width="150" height="100" src="http://greeennotebook.com/wp-content/uploads/2011/04/dateTime_Comparison_Screenshot-150x100.png" class="alignleft tfe wp-post-image" alt="Time and Date Difference Calculator in Action" title="Time and Date Difference Calculator in Action" /></a>Calculate the number of years, days, hours, and seconds between two dates and times.  Or use the current date and time and change the time zone to find the hour difference between two time zones.  It's all available in one simple interface.  Enjoy! <a href="http://greeennotebook.com/2011/04/time-and-date-difference-calculator-time-zone-converter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><noscript>
<div id="noscript"><img src="./images/no_script.png" alt="Javascript blocked!" title="Javascript blocked!" width="400" height="150" /></div>
<p></noscript></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/dateTime_Comparison_Screenshot.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/dateTime_Comparison_Screenshot-150x100.png" alt="Time and Date Difference Calculator in Action" title="Time and Date Difference Calculator in Action" width="150" height="100" class="alignright size-thumbnail wp-image-1262" /></a></p>
<p>Calculate the number of years, days, hours, and seconds between two dates and times.  Or use the current date and time and change the time zone to find the hour difference between two time zones.  It&#8217;s all available in one simple interface.  Enjoy!</p>
<div id="days_left_container">
<form method="post" action="">
<div id="left_form_column">
<p class="dateTitle">Start Date</p>
<p class="dateFormat">(DDMMMYYYY)</p>
<p class="input">
        <img id="step_one" src="http://greeennotebook.com/wp-content/uploads/2010/06/step_one.png" alt="Step One" title="Step One" width="40" height="40" /><br />
        <img id="startDateValidImage" src="http://greeennotebook.com/wp-content/uploads/2011/04/no_input_blank.png" title="No Input" alt="No Input" width="60" height="60" /></p>
<input type="text" id="startDateInput" maxlength="9" size="9" onblur="processDate(this)" onkeydown="dateKeyHandler(event, this)" />
        <br />
        <button type="button" id="datePickerButton1" onclick="DATE_TIME.datePicker.select('startDateInput', 'datePickerButton1');">Select Date</button>
      </p>
<p class="input">
        <span class="timeTitle">Time&nbsp;</span><span class="timeFormat">(HH:MM AM/PM)</span><br />
        <img id="startTimeValidImage" src="http://greeennotebook.com/wp-content/uploads/2011/04/Green_Check.png" title="Valid Time" alt="Valid Time" width="60" height="60" /></p>
<input type="text" id="startTimeInput" maxlength="8" size="8" onblur="processTime(this)" onkeydown="timeKeyHandler(event, this)" />
        <button type="button" id="timePicker1" onclick="DATE_TIME.timePicker.select('startTimeInput', 'timePicker1');">Select Time</button>
      </p>
<p>
        <span class="timeTitle">Time Zone:</span><br />
        <span id="startTimeZoneText">Local</span><br />
        <button type="button" id="startTimeZoneButton" onClick="DATE_TIME.timeZonePicker.select('startTimeZoneButton')">Select Time-Zone</button>
      </p>
<p id="startValidText">&nbsp;<br />&nbsp;</p>
</p></div>
<div id="right_form_column">
<p class="dateTitle">End Date</p>
<p class="dateFormat">(DDMMMYYYY)</p>
<p class="input">
        <img id="step_two" src="http://greeennotebook.com/wp-content/uploads/2010/06/step_two.png" alt="Step Two" title="Step Two" width="40" height="40" /><br />
        <img id="endDateValidImage" src="http://greeennotebook.com/wp-content/uploads/2011/04/no_input_blank.png" title="No Input" alt="No Input" width="60" height="60" /></p>
<input type="text" id="endDateInput" maxlength="9" size="9" onblur="processDate(this)" onkeydown="dateKeyHandler(event, this)" />
        <br />
        <button type="button" id="datePickerButton2" onclick="DATE_TIME.datePicker.select('endDateInput', 'datePickerButton2');">Select Date</button>
      </p>
<p class="input">
        <span class="timeTitle">Time&nbsp;</span><span class="timeFormat">(HH:MM AM/PM)</span><br />
        <img id="endTimeValidImage" src="http://greeennotebook.com/wp-content/uploads/2011/04/Green_Check.png" title="Valid Time" alt="Valid Time" width="60" height="60" /></p>
<input type="text" id="endTimeInput" maxlength="8" size="8" onblur="processTime(this)" onkeydown="timeKeyHandler(event, this)" />
        <button type="button" id="timePicker2" onclick="DATE_TIME.timePicker.select('endTimeInput', 'timePicker2');">Select Time</button>
      </p>
<p>
        <span class="timeTitle">Time Zone:</span><br />
        <span id="endTimeZoneText">Local</span><br />
        <button type="button" id="endTimeZoneButton" onClick="DATE_TIME.timeZonePicker.select('endTimeZoneButton')">Select Time-Zone</button>
      </p>
<p id="endValidText">&nbsp;<br />&nbsp;</p>
</p></div>
<div id="calculate">
<p class="input">
      <button type="button" onclick="setAnswers()">Calculate</button><br />
      <br />
      <img id="step_three" src="http://greeennotebook.com/wp-content/uploads/2010/06/step_three.png" alt="Step Three" title="Step Three" width="40" height="40" />
      </p>
</p></div>
</p></form>
<p id="dates">&nbsp;</p>
<p><span class="answer_left" id="firstUnitLabel">&nbsp;</span><span id="firstUnitValue">&nbsp;</span></p>
<p><span class="answer_left" id="secondUnitLabel">&nbsp;</span><span id="secondUnitValue">&nbsp;</span></p>
<p><span class="answer_left" id="thirdUnitLabel">&nbsp;</span><span id="thirdUnitValue">&nbsp;</span></p>
</div>
<p>Let me pre-empt some confusion by explaining that each year is about 365.25 days (thus the need for leap years), so each year in this calculator will be summed as one year and 6 hours.</p>
<p>While making this, I found the following resources extremely helpful:</p>
<ul>
<li><a href="http://www.worldtimezone.com/">WorldTimeZone&#8217;s Time Zone Map</a></li>
<li><a href="http://commons.wikimedia.org/wiki/File:Standard_time_zones_of_the_world.png">WikiMedia&#8217;s World Map of Time Zones</a></li>
<li><a href="http://www.worldtimezone.com/daylight.html">WorldTimeZone&#8217;s Daylight Savings Time 2011 Page</a></li>
<li><a href="http://cs.ucla.edu/~eggert/tz/tz-link.htm">tz database</a></li>
<li><a href="http://www.iso.org/iso/english_country_names_and_code_elements">ISO 3166</a></li>
<li><a href="http://www.timeanddate.com/worldclock">timeanddate.com</a></li>
<li><a href="http://en.wikipedia.org/wiki/List_of_time_zones_by_country">Wikipedia &#8211; List of Time Zones by Country</a></li>
<li>Numerous other Wikipedia entries and local sites for specific countries and territories</li>
</ul>
<div id="calDiv"></div>
<div id="timeDiv"></div>
<div id="hoverText"><span>Some text here<br />and here</span></div>
<div id="timeZoneDiv">
  <a class="timeZoneAnchor" id="timeZoneAnchor0" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor0', TZ['AX']['tzData']['Europe/Mariehamn']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor0undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AX']['tzData']['Europe/Mariehamn']);">Aaland Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor1" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor1', TZ['AF']['tzData']['Asia/Kabul']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor1undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AF']['tzData']['Asia/Kabul']);">Afghanistan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor2" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor2', TZ['AL']['tzData']['Europe/Tirane']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor2undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AL']['tzData']['Europe/Tirane']);">Albania</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor3" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor3', TZ['DZ']['tzData']['Africa/Algiers']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor3undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['DZ']['tzData']['Africa/Algiers']);">Algeria</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor4" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor4', TZ['AD']['tzData']['Europe/Andorra']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor4undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AD']['tzData']['Europe/Andorra']);">Andorra</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor5" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor5', TZ['AO']['tzData']['Africa/Luanda']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor5undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AO']['tzData']['Africa/Luanda']);">Angola</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor6" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor6', TZ['AI']['tzData']['America/Anguilla']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor6undefined');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AI']['tzData']['America/Anguilla']);">Anguilla</a><br />
  Antarctica</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Macquarie" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Macquarie', TZ['AQ']['tzData']['Antarctica/Macquarie']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Macquarie');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Macquarie']);">Macquarie Island Station (Australia)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Casey" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Casey', TZ['AQ']['tzData']['Antarctica/Casey']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Casey');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Casey']);">Casey Station (Australia)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Palmer" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Palmer', TZ['AQ']['tzData']['Antarctica/Palmer']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Palmer');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Palmer']);">Palmer Station (US)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Davis" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Davis', TZ['AQ']['tzData']['Antarctica/Davis']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Davis');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Davis']);">Davis Station (Australia)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/DumontDUrville" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/DumontDUrville', TZ['AQ']['tzData']['Antarctica/DumontDUrville']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/DumontDUrville');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/DumontDUrville']);">Dumont-d&#8217;Urville Station (France)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Mawson" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Mawson', TZ['AQ']['tzData']['Antarctica/Mawson']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Mawson');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Mawson']);">Mawson Station (Australia)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/McMurdo" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/McMurdo', TZ['AQ']['tzData']['Antarctica/McMurdo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/McMurdo');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/McMurdo']);">McMurdo Station (US)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/South_Pole" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/South_Pole', TZ['AQ']['tzData']['Antarctica/South_Pole']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/South_Pole');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/South_Pole']);">Amundsen-Scott Station (US)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Rothera" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Rothera', TZ['AQ']['tzData']['Antarctica/Rothera']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Rothera');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Rothera']);">Rothera Station (UK)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Syowa" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Syowa', TZ['AQ']['tzData']['Antarctica/Syowa']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Syowa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Syowa']);">Syowa (Showa) Station (Japan)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor7Antarctica/Vostok" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor7Antarctica/Vostok', TZ['AQ']['tzData']['Antarctica/Vostok']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor7Antarctica/Vostok');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AQ']['tzData']['Antarctica/Vostok']);">Vostok Station (Russia)</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor8" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor8', TZ['AG']['tzData']['America/Antigua']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor8Antarctica/Vostok');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AG']['tzData']['America/Antigua']);">Antigua &amp; Barbuda</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor9" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor9', TZ['AR']['tzData']['America/Argentina/Buenos_Aires']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor9Antarctica/Vostok');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AR']['tzData']['America/Argentina/Buenos_Aires']);">Argentina</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor10" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor10', TZ['AM']['tzData']['Asia/Yerevan']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor10Antarctica/Vostok');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AM']['tzData']['Asia/Yerevan']);">Armenia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor11" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor11', TZ['AW']['tzData']['America/Aruba']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor11Antarctica/Vostok');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AW']['tzData']['America/Aruba']);">Aruba</a><br />
  Australia</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor12Australia/Adelaide" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor12Australia/Adelaide', TZ['AU']['tzData']['Australia/Adelaide']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor12Australia/Adelaide');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AU']['tzData']['Australia/Adelaide']);">South Australia and Broken Hill</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor12Australia/Darwin" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor12Australia/Darwin', TZ['AU']['tzData']['Australia/Darwin']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor12Australia/Darwin');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AU']['tzData']['Australia/Darwin']);">Northern Territory</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor12Australia/Hobart" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor12Australia/Hobart', TZ['AU']['tzData']['Australia/Hobart']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor12Australia/Hobart');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AU']['tzData']['Australia/Hobart']);">New South Wales, Victoria, Tasmania, and the Capital Territory</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor12Australia/Brisbane" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor12Australia/Brisbane', TZ['AU']['tzData']['Australia/Brisbane']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor12Australia/Brisbane');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AU']['tzData']['Australia/Brisbane']);">Queensland</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor12Australia/Perth" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor12Australia/Perth', TZ['AU']['tzData']['Australia/Perth']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor12Australia/Perth');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AU']['tzData']['Australia/Perth']);">Western Australia</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor12Australia/Lord_Howe" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor12Australia/Lord_Howe', TZ['AU']['tzData']['Australia/Lord_Howe']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor12Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AU']['tzData']['Australia/Lord_Howe']);">Lord Howe Island</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor13" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor13', TZ['AT']['tzData']['Europe/Vienna']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor13Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AT']['tzData']['Europe/Vienna']);">Austria</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor14" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor14', TZ['AZ']['tzData']['Asia/Baku']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor14Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AZ']['tzData']['Asia/Baku']);">Azerbaijan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor15" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor15', TZ['BS']['tzData']['America/Nassau']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor15Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BS']['tzData']['America/Nassau']);">Bahamas</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor16" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor16', TZ['BH']['tzData']['Asia/Bahrain']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor16Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BH']['tzData']['Asia/Bahrain']);">Bahrain</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor17" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor17', TZ['BD']['tzData']['Asia/Dhaka']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor17Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BD']['tzData']['Asia/Dhaka']);">Bangladesh</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor18" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor18', TZ['BB']['tzData']['America/Barbados']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor18Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BB']['tzData']['America/Barbados']);">Barbados</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor19" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor19', TZ['BY']['tzData']['Europe/Minsk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor19Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BY']['tzData']['Europe/Minsk']);">Belarus</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor20" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor20', TZ['BE']['tzData']['Europe/Brussels']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor20Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BE']['tzData']['Europe/Brussels']);">Belgium</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor21" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor21', TZ['BZ']['tzData']['America/Belize']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor21Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BZ']['tzData']['America/Belize']);">Belize</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor22" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor22', TZ['BJ']['tzData']['Africa/Porto-Novo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor22Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BJ']['tzData']['Africa/Porto-Novo']);">Benin</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor23" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor23', TZ['BM']['tzData']['Atlantic/Bermuda']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor23Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BM']['tzData']['Atlantic/Bermuda']);">Bermuda</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor24" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor24', TZ['BT']['tzData']['Asia/Thimphu']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor24Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BT']['tzData']['Asia/Thimphu']);">Bhutan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor25" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor25', TZ['BO']['tzData']['America/La_Paz']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor25Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BO']['tzData']['America/La_Paz']);">Bolivia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor26" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor26', TZ['BA']['tzData']['Europe/Sarajevo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor26Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BA']['tzData']['Europe/Sarajevo']);">Bosnia &amp; Herzegovina</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor27" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor27', TZ['BW']['tzData']['Africa/Gaborone']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor27Australia/Lord_Howe');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BW']['tzData']['Africa/Gaborone']);">Botswana</a><br />
  Brazil</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor28America/Manaus" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor28America/Manaus', TZ['BR']['tzData']['America/Manaus']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor28America/Manaus');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BR']['tzData']['America/Manaus']);">Western Brazil (AC,AM,RR,RO)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor28America/Campo_Grande" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor28America/Campo_Grande', TZ['BR']['tzData']['America/Campo_Grande']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor28America/Campo_Grande');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BR']['tzData']['America/Campo_Grande']);">Mato Grosso, Mato Grosso do Sui</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor28America/Belem" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor28America/Belem', TZ['BR']['tzData']['America/Belem']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor28America/Belem');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BR']['tzData']['America/Belem']);">NorthEast Brazil (RN,PB,PE,AL,SE,CE,PI,BA,MA,TO,PA,AP)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor28America/Sao_Paulo" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor28America/Sao_Paulo', TZ['BR']['tzData']['America/Sao_Paulo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor28America/Sao_Paulo');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BR']['tzData']['America/Sao_Paulo']);">South &amp; SouthEast Brazil (GO,DF,MG,ES,RJ,SP,PR,SC,RS)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor28America/Noronha" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor28America/Noronha', TZ['BR']['tzData']['America/Noronha']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor28America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BR']['tzData']['America/Noronha']);">Atlantic Islands</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor29" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor29', TZ['GB']['tzData']['Europe/London']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor29America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GB']['tzData']['Europe/London']);">Britain (UK)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor30" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor30', TZ['IO']['tzData']['Indian/Chagos']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor30America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IO']['tzData']['Indian/Chagos']);">British Indian Ocean Territory</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor31" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor31', TZ['BN']['tzData']['Asia/Brunei']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor31America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BN']['tzData']['Asia/Brunei']);">Brunei</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor32" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor32', TZ['BG']['tzData']['Europe/Sofia']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor32America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BG']['tzData']['Europe/Sofia']);">Bulgaria</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor33" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor33', TZ['BF']['tzData']['Africa/Ouagadougou']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor33America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BF']['tzData']['Africa/Ouagadougou']);">Burkina Faso</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor34" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor34', TZ['BI']['tzData']['Africa/Bujumbura']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor34America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BI']['tzData']['Africa/Bujumbura']);">Burundi</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor35" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor35', TZ['KH']['tzData']['Asia/Phnom_Penh']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor35America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KH']['tzData']['Asia/Phnom_Penh']);">Cambodia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor36" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor36', TZ['CM']['tzData']['Africa/Douala']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor36America/Noronha');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CM']['tzData']['Africa/Douala']);">Cameroon</a><br />
  Canada</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Blanc-Sablon" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Blanc-Sablon', TZ['CA']['tzData']['America/Blanc-Sablon']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Blanc-Sablon');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Blanc-Sablon']);">Quebec &#8211; Lower North Shore</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Goose_Bay" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Goose_Bay', TZ['CA']['tzData']['America/Goose_Bay']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Goose_Bay');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Goose_Bay']);">Labrador (most), New Brunswick, Nova Scotia, Prince Edward Island, and Eastern Quebec</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37American/Regina" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37American/Regina', TZ['CA']['tzData']['American/Regina']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37American/Regina');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['American/Regina']);">Saskatchewan</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Winnipeg" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Winnipeg', TZ['CA']['tzData']['America/Winnipeg']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Winnipeg');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Winnipeg']);">Manitoba, Central Nunavut, and West Ontario</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Atikokan" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Atikokan', TZ['CA']['tzData']['America/Atikokan']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Atikokan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Atikokan']);">Southamptom Island, Nunavut and Atikokan, Ontario</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Montreal" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Montreal', TZ['CA']['tzData']['America/Montreal']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Montreal');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Montreal']);">East Nunavut, East Ontario, Quebec (most)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Dawson_Creek" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Dawson_Creek', TZ['CA']['tzData']['America/Dawson_Creek']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Dawson_Creek');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Dawson_Creek']);">Dawson Creek and Fort Saint John, British Columbia</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Edmonton" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Edmonton', TZ['CA']['tzData']['America/Edmonton']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Edmonton');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Edmonton']);">Alberta, East British Columbia, Northwest Territories (most), and West Nunavut</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/St_Johns" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/St_Johns', TZ['CA']['tzData']['America/St_Johns']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/St_Johns');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/St_Johns']);">Newfoundland and SouthEast Labrador</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor37America/Vancouver" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor37America/Vancouver', TZ['CA']['tzData']['America/Vancouver']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor37America/Vancouver');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CA']['tzData']['America/Vancouver']);">West British Columbia and Yukon</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor38" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor38', TZ['CV']['tzData']['Atlantic/Cape_Verde']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor38America/Vancouver');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CV']['tzData']['Atlantic/Cape_Verde']);">Cape Verde</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor39" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor39', TZ['KY']['tzData']['America/Cayman']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor39America/Vancouver');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KY']['tzData']['America/Cayman']);">Cayman Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor40" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor40', TZ['CF']['tzData']['Africa/Bangui']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor40America/Vancouver');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CF']['tzData']['Africa/Bangui']);">Central African Rep.</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor41" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor41', TZ['TD']['tzData']['Africa/Ndjamena']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor41America/Vancouver');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TD']['tzData']['Africa/Ndjamena']);">Chad</a><br />
  Chile</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor42America/Santiago" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor42America/Santiago', TZ['CL']['tzData']['America/Santiago']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor42America/Santiago');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CL']['tzData']['America/Santiago']);">Most Locations</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor42Pacific/Easter" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor42Pacific/Easter', TZ['CL']['tzData']['Pacific/Easter']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor42Pacific/Easter');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CL']['tzData']['Pacific/Easter']);">Easter Island &amp; Sala y Gomez</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor43" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor43', TZ['CN']['tzData']['Asia/Chongqing']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor43Pacific/Easter');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CN']['tzData']['Asia/Chongqing']);">China</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor44" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor44', TZ['CX']['tzData']['Indian/Christmas']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor44Pacific/Easter');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CX']['tzData']['Indian/Christmas']);">Christmas Island</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor45" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor45', TZ['CC']['tzData']['Indian/Cocos']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor45Pacific/Easter');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CC']['tzData']['Indian/Cocos']);">Cocos (Keeling) Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor46" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor46', TZ['CO']['tzData']['America/Bogota']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor46Pacific/Easter');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CO']['tzData']['America/Bogota']);">Colombia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor47" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor47', TZ['KM']['tzData']['Indian/Comoro']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor47Pacific/Easter');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KM']['tzData']['Indian/Comoro']);">Comoros</a><br />
  Congo (Dem. Rep.)</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor48Africa/Lubumbashi" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor48Africa/Lubumbashi', TZ['CD']['tzData']['Africa/Lubumbashi']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor48Africa/Lubumbashi');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CD']['tzData']['Africa/Lubumbashi']);">East</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor48Africa/Kinshasa" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor48Africa/Kinshasa', TZ['CD']['tzData']['Africa/Kinshasa']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor48Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CD']['tzData']['Africa/Kinshasa']);">West</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor49" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor49', TZ['CG']['tzData']['Africa/Brazzaville']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor49Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CG']['tzData']['Africa/Brazzaville']);">Congo (Rep.)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor50" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor50', TZ['CK']['tzData']['Pacific/Rarotonga']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor50Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CK']['tzData']['Pacific/Rarotonga']);">Cook Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor51" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor51', TZ['CR']['tzData']['America/Costa_Rica']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor51Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CR']['tzData']['America/Costa_Rica']);">Costa Rica</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor52" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor52', TZ['CI']['tzData']['Africa/Abidjan']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor52Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CI']['tzData']['Africa/Abidjan']);">Cote d&#8217;Ivoire</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor53" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor53', TZ['HR']['tzData']['Europe/Zagreb']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor53Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['HR']['tzData']['Europe/Zagreb']);">Croatia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor54" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor54', TZ['CU']['tzData']['America/Havana']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor54Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CU']['tzData']['America/Havana']);">Cuba</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor55" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor55', TZ['CY']['tzData']['Asia/Nicosia']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor55Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CY']['tzData']['Asia/Nicosia']);">Cyprus</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor56" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor56', TZ['CZ']['tzData']['Europe/Prague']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor56Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CZ']['tzData']['Europe/Prague']);">Czech Republic</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor57" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor57', TZ['DK']['tzData']['Europe/Copenhagen']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor57Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['DK']['tzData']['Europe/Copenhagen']);">Denmark</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor58" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor58', TZ['DJ']['tzData']['Africa/Djibouti']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor58Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['DJ']['tzData']['Africa/Djibouti']);">Djibouti</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor59" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor59', TZ['DM']['tzData']['America/Dominica']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor59Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['DM']['tzData']['America/Dominica']);">Dominica</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor60" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor60', TZ['DO']['tzData']['America/Santo_Domingo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor60Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['DO']['tzData']['America/Santo_Domingo']);">Dominican Republic</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor61" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor61', TZ['TL']['tzData']['Asia/Dili']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor61Africa/Kinshasa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TL']['tzData']['Asia/Dili']);">East Timor</a><br />
  Ecuador</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor62America/Guayaquil" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor62America/Guayaquil', TZ['EC']['tzData']['America/Guayaquil']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor62America/Guayaquil');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['EC']['tzData']['America/Guayaquil']);">Mainland</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor62Pacific/Galapagos" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor62Pacific/Galapagos', TZ['EC']['tzData']['Pacific/Galapagos']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor62Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['EC']['tzData']['Pacific/Galapagos']);">Galápagos Islands</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor63" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor63', TZ['EG']['tzData']['Africa/Cairo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor63Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['EG']['tzData']['Africa/Cairo']);">Egypt</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor64" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor64', TZ['SV']['tzData']['America/El_Salvador']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor64Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SV']['tzData']['America/El_Salvador']);">El Salvador</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor65" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor65', TZ['GQ']['tzData']['Africa/Malabo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor65Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GQ']['tzData']['Africa/Malabo']);">Equatorial Guinea</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor66" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor66', TZ['ER']['tzData']['Africa/Asmara']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor66Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ER']['tzData']['Africa/Asmara']);">Eritrea</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor67" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor67', TZ['EE']['tzData']['Europe/Tallinn']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor67Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['EE']['tzData']['Europe/Tallinn']);">Estonia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor68" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor68', TZ['ET']['tzData']['Africa/Addis_Ababa']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor68Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ET']['tzData']['Africa/Addis_Ababa']);">Ethiopia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor69" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor69', TZ['FK']['tzData']['Atlantic/Stanley']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor69Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FK']['tzData']['Atlantic/Stanley']);">Falkland Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor70" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor70', TZ['FO']['tzData']['Atlantic/Faroe']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor70Pacific/Galapagos');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FO']['tzData']['Atlantic/Faroe']);">Faroe Islands</a><br />
  Federated States of Micronesia</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor71Pacific/Kosrae" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor71Pacific/Kosrae', TZ['FM']['tzData']['Pacific/Kosrae']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor71Pacific/Kosrae');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FM']['tzData']['Pacific/Kosrae']);">Pohnpei (Ponape) and Kosrae</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor71Pacific/Chuuk" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor71Pacific/Chuuk', TZ['FM']['tzData']['Pacific/Chuuk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor71Pacific/Chuuk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FM']['tzData']['Pacific/Chuuk']);">Chuuk (Truk) and Yap</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor72" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor72', TZ['FJ']['tzData']['Pacific/Fiji']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor72Pacific/Chuuk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FJ']['tzData']['Pacific/Fiji']);">Fiji</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor73" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor73', TZ['FI']['tzData']['Europe/Helsinki']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor73Pacific/Chuuk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FI']['tzData']['Europe/Helsinki']);">Finland</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor74" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor74', TZ['FR']['tzData']['Europe/Paris']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor74Pacific/Chuuk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['FR']['tzData']['Europe/Paris']);">France</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor75" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor75', TZ['GF']['tzData']['America/Cayenne']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor75Pacific/Chuuk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GF']['tzData']['America/Cayenne']);">French Guiana</a><br />
  French Polynesia</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor76Pacific/Gambier" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor76Pacific/Gambier', TZ['PF']['tzData']['Pacific/Gambier']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor76Pacific/Gambier');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PF']['tzData']['Pacific/Gambier']);">Gambier Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor76Pacific/Marquesas" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor76Pacific/Marquesas', TZ['PF']['tzData']['Pacific/Marquesas']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor76Pacific/Marquesas');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PF']['tzData']['Pacific/Marquesas']);">Marquesas Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor76Pacific/Tahiti" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor76Pacific/Tahiti', TZ['PF']['tzData']['Pacific/Tahiti']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor76Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PF']['tzData']['Pacific/Tahiti']);">Most of French Polynesia</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor77" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor77', TZ['TF']['tzData']['Indian/Kerguelen']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor77Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TF']['tzData']['Indian/Kerguelen']);">French Southern &amp; Antarctic Lands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor78" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor78', TZ['GA']['tzData']['Africa/Libreville']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor78Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GA']['tzData']['Africa/Libreville']);">Gabon</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor79" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor79', TZ['GM']['tzData']['Africa/Banjul']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor79Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GM']['tzData']['Africa/Banjul']);">Gambia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor80" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor80', TZ['GE']['tzData']['Asia/Tbilisi']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor80Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GE']['tzData']['Asia/Tbilisi']);">Georgia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor81" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor81', TZ['DE']['tzData']['Europe/Berlin']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor81Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['DE']['tzData']['Europe/Berlin']);">Germany</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor82" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor82', TZ['GH']['tzData']['Africa/Accra']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor82Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GH']['tzData']['Africa/Accra']);">Ghana</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor83" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor83', TZ['GI']['tzData']['Europe/Gibraltar']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor83Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GI']['tzData']['Europe/Gibraltar']);">Gibraltar</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor84" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor84', TZ['GR']['tzData']['Europe/Athens']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor84Pacific/Tahiti');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GR']['tzData']['Europe/Athens']);">Greece</a><br />
  Greenland</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor85America/Thule" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor85America/Thule', TZ['GL']['tzData']['America/Thule']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor85America/Thule');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GL']['tzData']['America/Thule']);">Thule</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor85America/Scoresbysund" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor85America/Scoresbysund', TZ['GL']['tzData']['America/Scoresbysund']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor85America/Scoresbysund');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GL']['tzData']['America/Scoresbysund']);">Scoresbysund</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor85America/Danmarkshavn" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor85America/Danmarkshavn', TZ['GL']['tzData']['America/Danmarkshavn']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor85America/Danmarkshavn');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GL']['tzData']['America/Danmarkshavn']);">Danmarkshavn</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor85America/Godthab" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor85America/Godthab', TZ['GL']['tzData']['America/Godthab']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor85America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GL']['tzData']['America/Godthab']);">most locations</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor86" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor86', TZ['GD']['tzData']['America/Grenada']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor86America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GD']['tzData']['America/Grenada']);">Grenada</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor87" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor87', TZ['GP']['tzData']['America/Guadeloupe']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor87America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GP']['tzData']['America/Guadeloupe']);">Guadeloupe</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor88" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor88', TZ['GU']['tzData']['Pacific/Guam']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor88America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GU']['tzData']['Pacific/Guam']);">Guam</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor89" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor89', TZ['GT']['tzData']['America/Guatemala']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor89America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GT']['tzData']['America/Guatemala']);">Guatemala</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor90" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor90', TZ['GG']['tzData']['Europe/Guernsey']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor90America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GG']['tzData']['Europe/Guernsey']);">Guernsey</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor91" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor91', TZ['GN']['tzData']['Africa/Conakry']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor91America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GN']['tzData']['Africa/Conakry']);">Guinea</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor92" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor92', TZ['GW']['tzData']['Africa/Bissau']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor92America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GW']['tzData']['Africa/Bissau']);">Guinea-Bissau</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor93" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor93', TZ['GY']['tzData']['America/Guyana']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor93America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GY']['tzData']['America/Guyana']);">Guyana</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor94" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor94', TZ['HT']['tzData']['America/Port-au-Prince']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor94America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['HT']['tzData']['America/Port-au-Prince']);">Haiti</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor95" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor95', TZ['HN']['tzData']['America/Tegucigalpa']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor95America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['HN']['tzData']['America/Tegucigalpa']);">Honduras</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor96" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor96', TZ['HK']['tzData']['Asia/Hong_Kong']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor96America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['HK']['tzData']['Asia/Hong_Kong']);">Hong Kong</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor97" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor97', TZ['HU']['tzData']['Europe/Budapest']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor97America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['HU']['tzData']['Europe/Budapest']);">Hungary</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor98" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor98', TZ['IS']['tzData']['Atlantic/Reykjavik']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor98America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IS']['tzData']['Atlantic/Reykjavik']);">Iceland</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor99" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor99', TZ['IN']['tzData']['Asia/Kolkata']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor99America/Godthab');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IN']['tzData']['Asia/Kolkata']);">India</a><br />
  Indonesia</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor100Asia/Makassar" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor100Asia/Makassar', TZ['ID']['tzData']['Asia/Makassar']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor100Asia/Makassar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ID']['tzData']['Asia/Makassar']);">Sulawesi, Bali, Nusa Tenggara, South &amp; East Kalimantan</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor100Asia/Jayapura" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor100Asia/Jayapura', TZ['ID']['tzData']['Asia/Jayapura']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor100Asia/Jayapura');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ID']['tzData']['Asia/Jayapura']);">Maluku and Papua</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor100Asia/Jakarta" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor100Asia/Jakarta', TZ['ID']['tzData']['Asia/Jakarta']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor100Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ID']['tzData']['Asia/Jakarta']);">Sumatra, Java, West &amp; Central Kalimantan</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor101" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor101', TZ['IR']['tzData']['Asia/Tehran']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor101Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IR']['tzData']['Asia/Tehran']);">Iran</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor102" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor102', TZ['IQ']['tzData']['Asia/Baghdad']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor102Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IQ']['tzData']['Asia/Baghdad']);">Iraq</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor103" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor103', TZ['IE']['tzData']['Europe/Dublin']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor103Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IE']['tzData']['Europe/Dublin']);">Ireland</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor104" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor104', TZ['IM']['tzData']['Europe/Isle_of_Man']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor104Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IM']['tzData']['Europe/Isle_of_Man']);">Isle of Man</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor105" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor105', TZ['IL']['tzData']['Asia/Jerusalem']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor105Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IL']['tzData']['Asia/Jerusalem']);">Israel</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor106" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor106', TZ['IT']['tzData']['Europe/Rome']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor106Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['IT']['tzData']['Europe/Rome']);">Italy</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor107" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor107', TZ['JM']['tzData']['America/Jamaica']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor107Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['JM']['tzData']['America/Jamaica']);">Jamaica</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor108" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor108', TZ['JP']['tzData']['Asia/Tokyo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor108Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['JP']['tzData']['Asia/Tokyo']);">Japan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor109" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor109', TZ['JE']['tzData']['Europe/Jersey']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor109Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['JE']['tzData']['Europe/Jersey']);">Jersey</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor110" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor110', TZ['JO']['tzData']['Asia/Amman']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor110Asia/Jakarta');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['JO']['tzData']['Asia/Amman']);">Jordan</a><br />
  Kazakhstan</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor111Asia/Almaty" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor111Asia/Almaty', TZ['KZ']['tzData']['Asia/Almaty']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor111Asia/Almaty');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KZ']['tzData']['Asia/Almaty']);">Eastern Kazakhstan</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor111Asia/Oral" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor111Asia/Oral', TZ['KZ']['tzData']['Asia/Oral']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor111Asia/Oral');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KZ']['tzData']['Asia/Oral']);">Western Kazakhstan</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor112" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor112', TZ['KE']['tzData']['Africa/Nairobi']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor112Asia/Oral');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KE']['tzData']['Africa/Nairobi']);">Kenya</a><br />
  Kiribati</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor113Pacific/Tarawa" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor113Pacific/Tarawa', TZ['KI']['tzData']['Pacific/Tarawa']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor113Pacific/Tarawa');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KI']['tzData']['Pacific/Tarawa']);">Gilbert Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor113Pacific/Kiritimati" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor113Pacific/Kiritimati', TZ['KI']['tzData']['Pacific/Kiritimati']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor113Pacific/Kiritimati');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KI']['tzData']['Pacific/Kiritimati']);">Line Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor113Pacific/Enderbury" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor113Pacific/Enderbury', TZ['KI']['tzData']['Pacific/Enderbury']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor113Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KI']['tzData']['Pacific/Enderbury']);">Phoenix Islands</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor114" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor114', TZ['KP']['tzData']['Asia/Pyongyang']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor114Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KP']['tzData']['Asia/Pyongyang']);">Korea (North)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor115" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor115', TZ['KR']['tzData']['Asia/Seoul']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor115Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KR']['tzData']['Asia/Seoul']);">Korea (South)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor116" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor116', TZ['KW']['tzData']['Asia/Kuwait']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor116Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KW']['tzData']['Asia/Kuwait']);">Kuwait</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor117" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor117', TZ['KG']['tzData']['Asia/Bishkek']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor117Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KG']['tzData']['Asia/Bishkek']);">Kyrgyzstan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor118" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor118', TZ['LA']['tzData']['Asia/Vientiane']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor118Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LA']['tzData']['Asia/Vientiane']);">Laos</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor119" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor119', TZ['LV']['tzData']['Europe/Riga']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor119Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LV']['tzData']['Europe/Riga']);">Latvia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor120" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor120', TZ['LB']['tzData']['Asia/Beirut']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor120Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LB']['tzData']['Asia/Beirut']);">Lebanon</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor121" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor121', TZ['LS']['tzData']['Africa/Maseru']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor121Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LS']['tzData']['Africa/Maseru']);">Lesotho</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor122" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor122', TZ['LR']['tzData']['Africa/Monrovia']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor122Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LR']['tzData']['Africa/Monrovia']);">Liberia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor123" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor123', TZ['LY']['tzData']['Africa/Tripoli']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor123Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LY']['tzData']['Africa/Tripoli']);">Libya</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor124" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor124', TZ['LI']['tzData']['Europe/Vaduz']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor124Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LI']['tzData']['Europe/Vaduz']);">Liechtenstein</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor125" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor125', TZ['LT']['tzData']['Europe/Vilnius']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor125Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LT']['tzData']['Europe/Vilnius']);">Lithuania</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor126" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor126', TZ['LU']['tzData']['Europe/Luxembourg']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor126Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LU']['tzData']['Europe/Luxembourg']);">Luxembourg</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor127" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor127', TZ['MO']['tzData']['Asia/Macau']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor127Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MO']['tzData']['Asia/Macau']);">Macau</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor128" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor128', TZ['MK']['tzData']['Europe/Skopje']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor128Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MK']['tzData']['Europe/Skopje']);">Macedonia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor129" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor129', TZ['MG']['tzData']['Indian/Antananarivo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor129Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MG']['tzData']['Indian/Antananarivo']);">Madagascar</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor130" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor130', TZ['MW']['tzData']['Africa/Blantyre']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor130Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MW']['tzData']['Africa/Blantyre']);">Malawi</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor131" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor131', TZ['MY']['tzData']['Asia/Kuala_Lumpur']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor131Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MY']['tzData']['Asia/Kuala_Lumpur']);">Malaysia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor132" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor132', TZ['MV']['tzData']['Indian/Maldives']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor132Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MV']['tzData']['Indian/Maldives']);">Maldives</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor133" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor133', TZ['ML']['tzData']['Africa/Bamako']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor133Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ML']['tzData']['Africa/Bamako']);">Mali</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor134" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor134', TZ['MT']['tzData']['Europe/Malta']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor134Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MT']['tzData']['Europe/Malta']);">Malta</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor135" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor135', TZ['MH']['tzData']['Pacific/Majuro']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor135Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MH']['tzData']['Pacific/Majuro']);">Marshall Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor136" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor136', TZ['MQ']['tzData']['America/Martinique']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor136Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MQ']['tzData']['America/Martinique']);">Martinique</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor137" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor137', TZ['MR']['tzData']['Africa/Nouakchott']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor137Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MR']['tzData']['Africa/Nouakchott']);">Mauritania</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor138" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor138', TZ['MU']['tzData']['Indian/Mauritius']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor138Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MU']['tzData']['Indian/Mauritius']);">Mauritius</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor139" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor139', TZ['YT']['tzData']['Indian/Mayotte']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor139Pacific/Enderbury');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['YT']['tzData']['Indian/Mayotte']);">Mayotte</a><br />
  Mexico</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor140America/Mexico_City" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor140America/Mexico_City', TZ['MX']['tzData']['America/Mexico_City']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor140America/Mexico_City');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MX']['tzData']['America/Mexico_City']);">most of Mexico</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor140America/Mazatlan" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor140America/Mazatlan', TZ['MX']['tzData']['America/Mazatlan']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor140America/Mazatlan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MX']['tzData']['America/Mazatlan']);">Baja California Sur, Chihuahua, Nayarit, Sinaloa</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor140America/Hermosillo" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor140America/Hermosillo', TZ['MX']['tzData']['America/Hermosillo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor140America/Hermosillo');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MX']['tzData']['America/Hermosillo']);">Sonora</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor140America/Tijuana" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor140America/Tijuana', TZ['MX']['tzData']['America/Tijuana']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor140America/Tijuana');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MX']['tzData']['America/Tijuana']);">Baja California</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor141" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor141', TZ['MD']['tzData']['Europe/Chisinau']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor141America/Tijuana');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MD']['tzData']['Europe/Chisinau']);">Moldova</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor142" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor142', TZ['MC']['tzData']['Europe/Monaco']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor142America/Tijuana');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MC']['tzData']['Europe/Monaco']);">Monaco</a><br />
  Mongolia</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor143Asia/Hovd" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor143Asia/Hovd', TZ['MN']['tzData']['Asia/Hovd']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor143Asia/Hovd');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MN']['tzData']['Asia/Hovd']);">Western Provinces</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor143Asia/Ulaanbaatar" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor143Asia/Ulaanbaatar', TZ['MN']['tzData']['Asia/Ulaanbaatar']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor143Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MN']['tzData']['Asia/Ulaanbaatar']);">Most of the country</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor144" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor144', TZ['ME']['tzData']['Europe/Podgorica']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor144Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ME']['tzData']['Europe/Podgorica']);">Montenegro</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor145" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor145', TZ['MS']['tzData']['America/Montserrat']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor145Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MS']['tzData']['America/Montserrat']);">Montserrat</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor146" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor146', TZ['MA']['tzData']['Africa/Casablanca']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor146Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MA']['tzData']['Africa/Casablanca']);">Morocco</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor147" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor147', TZ['MZ']['tzData']['Africa/Maputo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor147Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MZ']['tzData']['Africa/Maputo']);">Mozambique</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor148" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor148', TZ['MM']['tzData']['Asia/Rangoon']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor148Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MM']['tzData']['Asia/Rangoon']);">Myanmar (Burma)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor149" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor149', TZ['NA']['tzData']['Africa/Windhoek']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor149Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NA']['tzData']['Africa/Windhoek']);">Namibia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor150" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor150', TZ['NR']['tzData']['Pacific/Nauru']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor150Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NR']['tzData']['Pacific/Nauru']);">Nauru</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor151" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor151', TZ['NP']['tzData']['Asia/Kathmandu']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor151Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NP']['tzData']['Asia/Kathmandu']);">Nepal</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor152" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor152', TZ['NL']['tzData']['Europe/Amsterdam']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor152Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NL']['tzData']['Europe/Amsterdam']);">Netherlands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor153" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor153', TZ['AN']['tzData']['America/Curacao']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor153Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AN']['tzData']['America/Curacao']);">Netherlands Antilles</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor154" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor154', TZ['NC']['tzData']['Pacific/Noumea']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor154Asia/Ulaanbaatar');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NC']['tzData']['Pacific/Noumea']);">New Caledonia</a><br />
  New Zealand</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor155Pacific/Chatham" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor155Pacific/Chatham', TZ['NZ']['tzData']['Pacific/Chatham']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor155Pacific/Chatham');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NZ']['tzData']['Pacific/Chatham']);">Chatham Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor155Pacific/Auckland" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor155Pacific/Auckland', TZ['NZ']['tzData']['Pacific/Auckland']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor155Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NZ']['tzData']['Pacific/Auckland']);">Mainland</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor156" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor156', TZ['NI']['tzData']['America/Managua']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor156Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NI']['tzData']['America/Managua']);">Nicaragua</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor157" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor157', TZ['NE']['tzData']['Africa/Niamey']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor157Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NE']['tzData']['Africa/Niamey']);">Niger</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor158" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor158', TZ['NG']['tzData']['Africa/Lagos']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor158Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NG']['tzData']['Africa/Lagos']);">Nigeria</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor159" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor159', TZ['NU']['tzData']['Pacific/Niue']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor159Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NU']['tzData']['Pacific/Niue']);">Niue</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor160" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor160', TZ['NF']['tzData']['Pacific/Norfolk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor160Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NF']['tzData']['Pacific/Norfolk']);">Norfolk Island</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor161" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor161', TZ['MP']['tzData']['Pacific/Saipan']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor161Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MP']['tzData']['Pacific/Saipan']);">Northern Mariana Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor162" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor162', TZ['NO']['tzData']['Europe/Oslo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor162Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['NO']['tzData']['Europe/Oslo']);">Norway</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor163" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor163', TZ['OM']['tzData']['Asia/Muscat']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor163Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['OM']['tzData']['Asia/Muscat']);">Oman</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor164" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor164', TZ['PK']['tzData']['Asia/Karachi']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor164Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PK']['tzData']['Asia/Karachi']);">Pakistan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor165" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor165', TZ['PW']['tzData']['Pacific/Palau']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor165Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PW']['tzData']['Pacific/Palau']);">Palau</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor166" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor166', TZ['PS']['tzData']['Asia/Gaza']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor166Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PS']['tzData']['Asia/Gaza']);">Palestine</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor167" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor167', TZ['PA']['tzData']['America/Panama']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor167Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PA']['tzData']['America/Panama']);">Panama</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor168" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor168', TZ['PG']['tzData']['Pacific/Port_Moresby']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor168Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PG']['tzData']['Pacific/Port_Moresby']);">Papua New Guinea</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor169" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor169', TZ['PY']['tzData']['America/Asuncion']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor169Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PY']['tzData']['America/Asuncion']);">Paraguay</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor170" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor170', TZ['PE']['tzData']['America/Lima']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor170Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PE']['tzData']['America/Lima']);">Peru</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor171" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor171', TZ['PH']['tzData']['Asia/Manila']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor171Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PH']['tzData']['Asia/Manila']);">Philippines</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor172" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor172', TZ['PN']['tzData']['Pacific/Pitcairn']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor172Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PN']['tzData']['Pacific/Pitcairn']);">Pitcairn</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor173" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor173', TZ['PL']['tzData']['Europe/Warsaw']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor173Pacific/Auckland');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PL']['tzData']['Europe/Warsaw']);">Poland</a><br />
  Portugal</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor174Atlantic/Azores" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor174Atlantic/Azores', TZ['PT']['tzData']['Atlantic/Azores']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor174Atlantic/Azores');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PT']['tzData']['Atlantic/Azores']);">Azores</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor174Europe/Lisbon" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor174Europe/Lisbon', TZ['PT']['tzData']['Europe/Lisbon']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor174Europe/Lisbon');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PT']['tzData']['Europe/Lisbon']);">Mainland Portugal and Madeira</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor175" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor175', TZ['PR']['tzData']['America/Puerto_Rico']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor175Europe/Lisbon');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PR']['tzData']['America/Puerto_Rico']);">Puerto Rico</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor176" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor176', TZ['QA']['tzData']['Asia/Qatar']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor176Europe/Lisbon');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['QA']['tzData']['Asia/Qatar']);">Qatar</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor177" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor177', TZ['RE']['tzData']['Indian/Reunion']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor177Europe/Lisbon');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RE']['tzData']['Indian/Reunion']);">Reunion</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor178" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor178', TZ['RO']['tzData']['Europe/Bucharest']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor178Europe/Lisbon');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RO']['tzData']['Europe/Bucharest']);">Romania</a><br />
  Russia</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor179Europe/Moscow" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Europe/Moscow', TZ['RU']['tzData']['Europe/Moscow']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Europe/Moscow');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Europe/Moscow']);">Most of European Russia and all Russian railroads</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Europe/Kaliningrad" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Europe/Kaliningrad', TZ['RU']['tzData']['Europe/Kaliningrad']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Europe/Kaliningrad');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Europe/Kaliningrad']);">Kaliningrad Oblast</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Yekaterinburg" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Yekaterinburg', TZ['RU']['tzData']['Asia/Yekaterinburg']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Yekaterinburg');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Yekaterinburg']);">Bashkortostan, Chelyabinsk Oblast, Khantia-Mansia, Kurgan Oblast, Orenburg Oblast, Perm Krai, Sverdlovsk Oblast, Tyumen Oblast, and Yamalia</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Omsk" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Omsk', TZ['RU']['tzData']['Asia/Omsk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Omsk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Omsk']);">Altai Krai, Altai Republic, Kemerovo Oblast, Novosibirsk Oblast, Omsk Oblast and Tomsk Oblast</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Krasnoyarsk" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Krasnoyarsk', TZ['RU']['tzData']['Asia/Krasnoyarsk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Krasnoyarsk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Krasnoyarsk']);">Khakassia, Krasnoyarsk Krai and Tuva</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Irkutsk" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Irkutsk', TZ['RU']['tzData']['Asia/Irkutsk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Irkutsk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Irkutsk']);">Buryatia and Irkutsk Oblast</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Yakutsk" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Yakutsk', TZ['RU']['tzData']['Asia/Yakutsk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Yakutsk');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Yakutsk']);">Amur Oblast, western Sakha Republic and Zabaykalsky Krai</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Vladivostok" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Vladivostok', TZ['RU']['tzData']['Asia/Vladivostok']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Vladivostok');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Vladivostok']);">The Jewish Autonomous Oblast, Khabarovsk Krai, Primorsky Krai, central Sakha Republic and Sakhalin Island</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor179Asia/Magadan" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor179Asia/Magadan', TZ['RU']['tzData']['Asia/Magadan']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor179Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RU']['tzData']['Asia/Magadan']);">Magadan Oblast, eastern Sakha, Kuril Islands, Chukotka and Kamchatka Krai</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor180" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor180', TZ['RW']['tzData']['Africa/Kigali']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor180Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RW']['tzData']['Africa/Kigali']);">Rwanda</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor181" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor181', TZ['AS']['tzData']['Pacific/Pago_Pago']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor181Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AS']['tzData']['Pacific/Pago_Pago']);">Samoa (American)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor182" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor182', TZ['WS']['tzData']['Pacific/Apia']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor182Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['WS']['tzData']['Pacific/Apia']);">Samoa (western)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor183" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor183', TZ['SM']['tzData']['Europe/San_Marino']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor183Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SM']['tzData']['Europe/San_Marino']);">San Marino</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor184" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor184', TZ['ST']['tzData']['Africa/Sao_Tome']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor184Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ST']['tzData']['Africa/Sao_Tome']);">Sao Tome &amp; Principe</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor185" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor185', TZ['SA']['tzData']['Asia/Riyadh']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor185Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SA']['tzData']['Asia/Riyadh']);">Saudi Arabia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor186" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor186', TZ['SN']['tzData']['Africa/Dakar']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor186Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SN']['tzData']['Africa/Dakar']);">Senegal</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor187" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor187', TZ['RS']['tzData']['Europe/Belgrade']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor187Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['RS']['tzData']['Europe/Belgrade']);">Serbia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor188" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor188', TZ['SC']['tzData']['Indian/Mahe']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor188Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SC']['tzData']['Indian/Mahe']);">Seychelles</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor189" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor189', TZ['SL']['tzData']['Africa/Freetown']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor189Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SL']['tzData']['Africa/Freetown']);">Sierra Leone</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor190" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor190', TZ['SG']['tzData']['Asia/Singapore']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor190Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SG']['tzData']['Asia/Singapore']);">Singapore</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor191" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor191', TZ['SK']['tzData']['Europe/Bratislava']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor191Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SK']['tzData']['Europe/Bratislava']);">Slovakia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor192" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor192', TZ['SI']['tzData']['Europe/Ljubljana']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor192Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SI']['tzData']['Europe/Ljubljana']);">Slovenia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor193" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor193', TZ['SB']['tzData']['Pacific/Guadalcanal']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor193Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SB']['tzData']['Pacific/Guadalcanal']);">Solomon Islands</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor194" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor194', TZ['SO']['tzData']['Africa/Mogadishu']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor194Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SO']['tzData']['Africa/Mogadishu']);">Somalia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor195" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor195', TZ['ZA']['tzData']['Africa/Johannesburg']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor195Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ZA']['tzData']['Africa/Johannesburg']);">South Africa</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor196" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor196', TZ['GS']['tzData']['Atlantic/South_Georgia']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor196Asia/Magadan');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['GS']['tzData']['Atlantic/South_Georgia']);">South Georgia &amp; the South Sandwich Islands</a><br />
  Spain</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor197Europe/Madrid" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor197Europe/Madrid', TZ['ES']['tzData']['Europe/Madrid']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor197Europe/Madrid');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ES']['tzData']['Europe/Madrid']);">Mainland</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor197Atlantic/Canary" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor197Atlantic/Canary', TZ['ES']['tzData']['Atlantic/Canary']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor197Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ES']['tzData']['Atlantic/Canary']);">Canary Islands</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor198" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor198', TZ['LK']['tzData']['Asia/Colombo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor198Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LK']['tzData']['Asia/Colombo']);">Sri Lanka</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor199" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor199', TZ['BL']['tzData']['America/St_Barthelemy']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor199Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['BL']['tzData']['America/St_Barthelemy']);">St Barthelemy</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor200" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor200', TZ['SH']['tzData']['Atlantic/St_Helena']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor200Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SH']['tzData']['Atlantic/St_Helena']);">St Helena</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor201" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor201', TZ['KN']['tzData']['America/St_Kitts']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor201Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['KN']['tzData']['America/St_Kitts']);">St Kitts &amp; Nevis</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor202" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor202', TZ['LC']['tzData']['America/St_Lucia']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor202Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['LC']['tzData']['America/St_Lucia']);">St Lucia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor203" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor203', TZ['MF']['tzData']['America/Marigot']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor203Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['MF']['tzData']['America/Marigot']);">St Martin (French part)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor204" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor204', TZ['PM']['tzData']['America/Miquelon']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor204Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['PM']['tzData']['America/Miquelon']);">St Pierre &amp; Miquelon</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor205" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor205', TZ['VC']['tzData']['America/St_Vincent']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor205Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VC']['tzData']['America/St_Vincent']);">St Vincent</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor206" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor206', TZ['SD']['tzData']['Africa/Khartoum']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor206Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SD']['tzData']['Africa/Khartoum']);">Sudan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor207" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor207', TZ['SR']['tzData']['America/Paramaribo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor207Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SR']['tzData']['America/Paramaribo']);">Suriname</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor208" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor208', TZ['SJ']['tzData']['Arctic/Longyearbyen']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor208Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SJ']['tzData']['Arctic/Longyearbyen']);">Svalbard &amp; Jan Mayen</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor209" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor209', TZ['SZ']['tzData']['Africa/Mbabane']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor209Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SZ']['tzData']['Africa/Mbabane']);">Swaziland</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor210" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor210', TZ['SE']['tzData']['Europe/Stockholm']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor210Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SE']['tzData']['Europe/Stockholm']);">Sweden</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor211" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor211', TZ['CH']['tzData']['Europe/Zurich']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor211Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['CH']['tzData']['Europe/Zurich']);">Switzerland</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor212" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor212', TZ['SY']['tzData']['Asia/Damascus']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor212Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['SY']['tzData']['Asia/Damascus']);">Syria</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor213" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor213', TZ['TW']['tzData']['Asia/Taipei']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor213Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TW']['tzData']['Asia/Taipei']);">Taiwan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor214" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor214', TZ['TJ']['tzData']['Asia/Dushanbe']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor214Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TJ']['tzData']['Asia/Dushanbe']);">Tajikistan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor215" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor215', TZ['TZ']['tzData']['Africa/Dar_es_Salaam']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor215Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TZ']['tzData']['Africa/Dar_es_Salaam']);">Tanzania</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor216" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor216', TZ['TH']['tzData']['Asia/Bangkok']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor216Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TH']['tzData']['Asia/Bangkok']);">Thailand</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor217" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor217', TZ['TG']['tzData']['Africa/Lome']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor217Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TG']['tzData']['Africa/Lome']);">Togo</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor218" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor218', TZ['TK']['tzData']['Pacific/Fakaofo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor218Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TK']['tzData']['Pacific/Fakaofo']);">Tokelau</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor219" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor219', TZ['TO']['tzData']['Pacific/Tongatapu']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor219Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TO']['tzData']['Pacific/Tongatapu']);">Tonga</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor220" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor220', TZ['TT']['tzData']['America/Port_of_Spain']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor220Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TT']['tzData']['America/Port_of_Spain']);">Trinidad &amp; Tobago</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor221" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor221', TZ['TN']['tzData']['Africa/Tunis']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor221Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TN']['tzData']['Africa/Tunis']);">Tunisia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor222" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor222', TZ['TR']['tzData']['Europe/Istanbul']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor222Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TR']['tzData']['Europe/Istanbul']);">Turkey</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor223" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor223', TZ['TM']['tzData']['Asia/Ashgabat']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor223Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TM']['tzData']['Asia/Ashgabat']);">Turkmenistan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor224" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor224', TZ['TC']['tzData']['America/Grand_Turk']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor224Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TC']['tzData']['America/Grand_Turk']);">Turks &amp; Caicos Is</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor225" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor225', TZ['TV']['tzData']['Pacific/Funafuti']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor225Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['TV']['tzData']['Pacific/Funafuti']);">Tuvalu</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor226" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor226', TZ['UG']['tzData']['Africa/Kampala']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor226Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UG']['tzData']['Africa/Kampala']);">Uganda</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor227" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor227', TZ['UA']['tzData']['Europe/Kiev']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor227Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UA']['tzData']['Europe/Kiev']);">Ukraine</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor228" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor228', TZ['AE']['tzData']['Asia/Dubai']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor228Atlantic/Canary');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['AE']['tzData']['Asia/Dubai']);">United Arab Emirates</a><br />
  United States</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/Anchorage" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/Anchorage', TZ['US']['tzData']['America/Anchorage']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/Anchorage');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/Anchorage']);">most of the state of Alaska</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/Chicago" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/Chicago', TZ['US']['tzData']['America/Chicago']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/Chicago');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/Chicago']);">Central (Gulf Coast, Tennessee Valley, and Great Plains)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/New_York" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/New_York', TZ['US']['tzData']['America/New_York']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/New_York');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/New_York']);">Atlantic coast, Eastern Ohio Valley, and Michigan (most)</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/Adak" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/Adak', TZ['US']['tzData']['America/Adak']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/Adak');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/Adak']);">Western Aleutian Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229Pacific/Honolulu" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229Pacific/Honolulu', TZ['US']['tzData']['Pacific/Honolulu']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229Pacific/Honolulu');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['Pacific/Honolulu']);">Hawaii</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/Denver" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/Denver', TZ['US']['tzData']['America/Denver']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/Denver');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/Denver']);">Rocky Mountains</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/Phoenix" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/Phoenix', TZ['US']['tzData']['America/Phoenix']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/Phoenix');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/Phoenix']);">Arizona</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor229America/Los_Angeles" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor229America/Los_Angeles', TZ['US']['tzData']['America/Los_Angeles']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor229America/Los_Angeles');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['US']['tzData']['America/Los_Angeles']);">Pacific coast plus Nevada</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor230" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor230', TZ['UY']['tzData']['America/Montevideo']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor230America/Los_Angeles');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UY']['tzData']['America/Montevideo']);">Uruguay</a><br />
  US minor outlying islands</p>
<div class="indented">    →<a class="timeZoneAnchor" id="timeZoneAnchor231Pacific/Johnston" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor231Pacific/Johnston', TZ['UM']['tzData']['Pacific/Johnston']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor231Pacific/Johnston');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UM']['tzData']['Pacific/Johnston']);">Johnston Atoll</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor231Pacific/Midway" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor231Pacific/Midway', TZ['UM']['tzData']['Pacific/Midway']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor231Pacific/Midway');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UM']['tzData']['Pacific/Midway']);">Midway Islands</a><br />
    →<a class="timeZoneAnchor" id="timeZoneAnchor231Pacific/Wake" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor231Pacific/Wake', TZ['UM']['tzData']['Pacific/Wake']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor231Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UM']['tzData']['Pacific/Wake']);">Wake Island</a>
  </div>
<p>  <a class="timeZoneAnchor" id="timeZoneAnchor232" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor232', TZ['UZ']['tzData']['Asia/Samarkand']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor232Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['UZ']['tzData']['Asia/Samarkand']);">Uzbekistan</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor233" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor233', TZ['VU']['tzData']['Pacific/Efate']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor233Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VU']['tzData']['Pacific/Efate']);">Vanuatu</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor234" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor234', TZ['VA']['tzData']['Europe/Vatican']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor234Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VA']['tzData']['Europe/Vatican']);">Vatican City</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor235" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor235', TZ['VE']['tzData']['America/Caracas']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor235Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VE']['tzData']['America/Caracas']);">Venezuela</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor236" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor236', TZ['VN']['tzData']['Asia/Ho_Chi_Minh']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor236Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VN']['tzData']['Asia/Ho_Chi_Minh']);">Vietnam</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor237" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor237', TZ['VG']['tzData']['America/Tortola']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor237Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VG']['tzData']['America/Tortola']);">Virgin Islands (UK)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor238" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor238', TZ['VI']['tzData']['America/St_Thomas']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor238Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['VI']['tzData']['America/St_Thomas']);">Virgin Islands (US)</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor239" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor239', TZ['WF']['tzData']['Pacific/Wallis']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor239Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['WF']['tzData']['Pacific/Wallis']);">Wallis &amp; Futuna</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor240" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor240', TZ['EH']['tzData']['Africa/El_Aaiun']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor240Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['EH']['tzData']['Africa/El_Aaiun']);">Western Sahara</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor241" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor241', TZ['YE']['tzData']['Asia/Aden']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor241Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['YE']['tzData']['Asia/Aden']);">Yemen</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor242" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor242', TZ['ZM']['tzData']['Africa/Lusaka']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor242Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ZM']['tzData']['Africa/Lusaka']);">Zambia</a><br />
  <a class="timeZoneAnchor" id="timeZoneAnchor243" onmouseover="DATE_TIME.timeZonePicker.buttonMouseOver('timeZoneAnchor243', TZ['ZW']['tzData']['Africa/Harare']);" onmouseout="DATE_TIME.timeZonePicker.buttonMouseOut('timeZoneAnchor243Pacific/Wake');" href="javascript:DATE_TIME.timeZonePicker.finish(TZ['ZW']['tzData']['Africa/Harare']);">Zimbabwe</a>
</div>
<p><script type="text/javascript">
DATE_TIME.startDateValidImage = document.images["startDateValidImage"];
DATE_TIME.startTimeValidImage = document.images["startTimeValidImage"];
DATE_TIME.endDateValidImage = document.images["endDateValidImage"];
DATE_TIME.endTimeValidImage = document.images["endTimeValidImage"];
DATE_TIME.validStartTextObject = document.getElementById("startValidText");
DATE_TIME.validEndTextObject = document.getElementById("endValidText");
DATE_TIME.invalidImage = "http://greeennotebook.com/wp-content/uploads/2011/04/Red_X.png";
DATE_TIME.validImage = "http://greeennotebook.com/wp-content/uploads/2011/04/Green_Check.png";
DATE_TIME.dateRangeTextObject = document.getElementById("dates");
DATE_TIME.unitLabelObject1 = document.getElementById("firstUnitLabel");
DATE_TIME.unitValueObject1 = document.getElementById("firstUnitValue");
DATE_TIME.unitLabelObject2 = document.getElementById("secondUnitLabel");
DATE_TIME.unitValueObject2 = document.getElementById("secondUnitValue");
DATE_TIME.unitLabelObject3 = document.getElementById("thirdUnitLabel");
DATE_TIME.unitValueObject3 = document.getElementById("thirdUnitValue");
DATE_TIME.timeDifferenceTextObject = document.getElementById("timeDelta");
DATE_TIME.startDateInputObject = document.getElementById("startDateInput");
DATE_TIME.endDateInputObject = document.getElementById("endDateInput");
DATE_TIME.startTimeInputObject = document.getElementById("startTimeInput");
DATE_TIME.endTimeInputObject = document.getElementById("endTimeInput");
// Reset inputs after page refresh
DATE_TIME.startDateInputObject.value = "";
DATE_TIME.endDateInputObject.value = "";
DATE_TIME.startTimeInputObject.value = "0:00 am";
DATE_TIME.endTimeInputObject.value = "0:00 am";
DATE_TIME.datePickerDivObject = document.getElementById("calDiv");
DATE_TIME.datePicker = new DatePicker("DATE_TIME.datePicker");
DATE_TIME.timePickerDivObject = document.getElementById("timeDiv");
DATE_TIME.timePicker = new TimePicker("DATE_TIME.timePicker");
DATE_TIME.datePickerDivObject = document.getElementById("calDiv");
DATE_TIME.datePicker = new DatePicker("DATE_TIME.datePicker");
DATE_TIME.timeZonePickerDivObject = document.getElementById("timeZoneDiv");
DATE_TIME.timeZonePicker = new TimeZonePicker("DATE_TIME.timeZonePicker");
DATE_TIME.hoverTextObject = document.getElementById("hoverText");
DATE_TIME.startTimeZoneTextObject = document.getElementById("startTimeZoneText");
DATE_TIME.endTimeZoneTextObject = document.getElementById("endTimeZoneText");
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2011/04/time-and-date-difference-calculator-time-zone-converter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Use Excel to Automate Repetitive Code</title>
		<link>http://greeennotebook.com/2011/04/use-excel-to-automate-repetitive-code/</link>
		<comments>http://greeennotebook.com/2011/04/use-excel-to-automate-repetitive-code/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 08:50:10 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Excel]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=1208</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2011/04/use-excel-to-automate-repetitive-code/"><img align="left" hspace="5" width="143" height="150" src="http://greeennotebook.com/wp-content/uploads/2011/04/javascript_excel-143x150.png" class="alignleft tfe wp-post-image" alt="Excel + JavaScript" title="Excel + JavaScript" /></a>Have you ever wanted to pull data from an Excel Spreadsheet and place it into a Class or Object in your program?  If you need to use a large number of repetitive structures, do you think it would be easier to create and modify them in Excel first?  I'll show you how I've used Excel 2007 to create a large table, then used Excel tools to automatically turn them into JavaScript Objects. <a href="http://greeennotebook.com/2011/04/use-excel-to-automate-repetitive-code/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="#problem">Introducting to the Problem</a></li>
<li><a href="#simplecat">Simple Excel Concatenation Example</a></li>
<li><a href="#vba">User Defined VBA Function</a></li>
<li><a href="#calculation">Fancy Calculation</a></li>
<li><a href="#result">Retrieving the Result</a></li>
</ul>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/javascript_excel.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/javascript_excel.png" alt="Excel + JavaScript" title="Excel + JavaScript" width="153" height="160" class="alignleft size-full wp-image-1253" /></a></p>
<p>Have you ever wanted to pull data from an Excel Spreadsheet and place it into a Class or Object in your program?  If you need to use a large number of repetitive structures, do you think it would be easier to create and modify them in Excel first?  I&#8217;ll show you how I&#8217;ve used Excel 2007 to create a large table, then used Excel tools to automatically turn them into JavaScript Objects.</p>
<h3><span class="green"><a name="problem">Introduction to the Problem</a></span></h3>
<p>I&#8217;ll show you the data I was working with so you can follow along.  I had created my own time-zone database, compiled from numerous sources, for use in a JavaScript time-zone converter.  Here&#8217;s the format:</p>
<p>A: <i>countryCode</i> | B: <i>countryName</i> | C: <i>numberTZs</i> | D: <i>description</i> | E: <i>cities</i> | F: <i>abbreviation</i> | G: <i>fullName</i> | H: <i>databaseName</i> | I: <i>UtcOffset</i> | J: <i>UtcOffsetNumber</i> | K: <i>DstHiemisphere</i> | L: <i>DstStart2010</i> | M: <i>DstEnd</i></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Timezone_database_table.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Timezone_database_table-450x183.png" alt="Timezone database table" title="Timezone database table" width="450" height="183" class="aligncenter size-medium wp-image-1216" /></a></p>
<p>There are 310 rows in my table, and I want to make each one into a JavaScript object, each a property of one containing object.  You might ask me why I don&#8217;t just use a real database, and the answer is this data is final (I wont be updating Daylight Savings Times), and I&#8217;m trying to use this for a JavaScript drop-list in a specific post on a WordPress blog (yes, this blog).  I don&#8217;t want to deal with any server-side code (mostly because I don&#8217;t know how yet).  Anyway, the point is I&#8217;m going to use Excel to do all my work for me.</p>
<h3><span class="green"><a name="simplecat">Simple Excel Concatenation Example</a></span></h3>
<p>The tricky part is going to be dealing with quotation marks.  In the language of Excel (VBA), a quotation mark signifies the beginning or end of a string.  In order to actually display the quotation mark in a cell, you need to escape it by first entering another quotation mark.  Also important to know: (1) To tell Excel you want a cell to perform a calculation, you need to start by entering an equal sign; and (2) The ampersand (&amp;) is the concatenation operator.</p>
<p>I&#8217;ve already given you enough information to get started.  Try it out.  Enter some text in cell A1 and B1, then place this in cell C1: </p>
<div class="highlight">
<pre><span class="o">=</span> <span class="s">&quot;A1: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">A1</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, B1: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">B1</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;</span>
</pre>
</div>
<p>Here&#8217;s what it should look like:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Simple_Excel_Example.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Simple_Excel_Example-450x68.png" alt="" title="Simple_Excel_Example" width="450" height="68" class="aligncenter size-medium wp-image-1222" /></a></p>
<h3><span class="green"><a name="vba">User Defined VBA Function</a></span></h3>
<p>Unfortunately, my final solution is going to be much more complicated.  I started out using the technique above to simply write out the code required to create the objects, but I ran into a problem.  In my column E, I have entered a list of cities (of varying size) separated by <strong>comma + space</strong>.  In order to turn that list into the JavaScript code to create an array, I was forced to write  a custom VBA function.  Don&#8217;t worry, it&#8217;s not that hard.  Just find the tool to <strong>View Macros</strong> (in Excel 2007, it&#8217;s in the <strong>View</strong> tab) as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/View_Macros.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/View_Macros.png" alt="View Macros" title="View Macros" width="222" height="219" class="aligncenter size-full wp-image-1225" /></a></p>
<p>In the new dialog, type in a name for your &#8220;Macro&#8221; and click <strong>Create</strong>.  This will add the &#8220;Macro&#8221; to all open workbooks by default, which is fine with me.  By the way, we&#8217;re not really going to be using a macro, but the process to create a User Defined Function is the same.  You can change the name by simply changing the name of your function (as I did later).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Create_Macro.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Create_Macro.png" alt="Create Macro" title="Create Macro" width="408" height="393" class="aligncenter size-full wp-image-1226" /></a></p>
<p>Now at this point, you&#8217;re creating a custom VBA function (User Defined Function).  If you&#8217;re like me, you don&#8217;t know much about programming in VBA, so you might want to use the <a href="http://msdn.microsoft.com/en-us/library/sh9ywfdk.aspx">Microsoft Visual Basic Reference</a>.  After a little reading, this is what I came up with (and it works):</p>
<div class="highlight">
<pre><span class="k">Public</span> <span class="k">Function</span> <span class="nf">TextToArray</span><span class="p">(</span><span class="n">str</span> <span class="ow">As</span> <span class="kt">String</span><span class="p">,</span> <span class="k">Optional</span> <span class="n">sepChar</span> <span class="ow">As</span> <span class="kt">String</span> <span class="o">=</span> <span class="s">&quot;, &quot;</span><span class="p">)</span>
    <span class="k">Dim</span> <span class="n">strList</span><span class="p">()</span> <span class="ow">As</span> <span class="kt">String</span>
    <span class="k">Dim</span> <span class="n">final</span> <span class="ow">As</span> <span class="kt">String</span>
    <span class="k">Dim</span> <span class="n">i</span> <span class="ow">As</span> <span class="kt">Integer</span>
    <span class="n">strList</span> <span class="o">=</span> <span class="n">Split</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="n">sepChar</span><span class="p">)</span>
    <span class="k">For</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">To</span> <span class="n">UBound</span><span class="p">(</span><span class="n">strList</span><span class="p">)</span>
        <span class="n">final</span> <span class="o">=</span> <span class="n">final</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">strList</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span>
    <span class="k">Next</span>
    <span class="n">TextToArray</span> <span class="o">=</span> <span class="n">Left</span><span class="p">(</span><span class="n">final</span><span class="p">,</span> <span class="n">Len</span><span class="p">(</span><span class="n">final</span><span class="p">)</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
<span class="k">End</span> <span class="k">Function</span>
</pre>
</div>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Creating_Custom_Function_In_Excel.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Creating_Custom_Function_In_Excel-450x164.png" alt="Creating Custom Function In Excel" title="Creating Custom Function In Excel" width="450" height="164" class="aligncenter size-medium wp-image-1227" /></a></p>
<p>Strangely, once you&#8217;re finished typing the function, it will automatically become available within the spreadsheet.  There&#8217;s no need to save or even close the editor window, but I have noticed that changes may not update unless you do: <strong>Debug &rarr;  Compile VBA Project</strong>.  Your function should be listed as soon as you start tying the name (after an equals sign, of course).  However, there will not be a description or any help with the parameters.  Martin Green has some guidance for adding a function description in his post at ExcelTip.com:  <a href="http://www.exceltip.com/st/Writing_Your_First_VBA_Function_in_Excel/631.html">Writing your First VBA Function in Excel</a>.  However, I wont need a description for mine (I know what it does).</p>
<p>Here it is in action:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Using_Custom_Function_In_Excel.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Using_Custom_Function_In_Excel.png" alt="Using Custom Function In Excel" title="Using Custom Function In Excel" width="379" height="100" class="aligncenter size-full wp-image-1228" /></a></p>
<h3><span class="green"><a name="calculation">Fancy Calculation</a></span></h3>
<p>Finally, we have all the tools we need to write some code with Excel.  As you may have noticed, you can either do the concatenations inside each cell, or you can create a new User Defined Function that takes the cell references as parameters.  The second solution would be more elegant, but it would also require more thought, and this is all about fast, easy automation!  So I will be entering the entire calculation into a single cell, then copying that calculation to all the other cells using Excel&#8217;s <a href="http://office.microsoft.com/en-us/excel-help/fill-data-automatically-in-worksheet-cells-HP001216366.aspx#BMaboutfillhandle">Fill Handle</a>, so it will modify the cell references as appropriate.</p>
<p>I recommend using <a href="http://notepad-plus-plus.org/">Notepad++</a> to edit your concatenation string to help with visualizing syntax.  Make sure you set the <strong>Language</strong> to <strong>VB</strong>.  After much tweaking, here is the formula I came up with:</p>
<div class="highlight">
<pre><span class="o">=</span><span class="k">IF</span><span class="p">(</span><span class="n">EXACT</span><span class="p">(</span><span class="n">A1</span><span class="p">,</span> <span class="n">A2</span><span class="p">),</span>
    <span class="s">&quot;&quot;</span><span class="p">,</span>
    <span class="s">&quot;&quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">A2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;: {&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;    &quot;&quot;countryName&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">B2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;    &quot;&quot;countryCode&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">A2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;    &quot;&quot;numberTZs&quot;&quot;: &quot;</span> <span class="o">&amp;</span> <span class="n">C2</span> <span class="o">&amp;</span> <span class="s">&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;    &quot;&quot;tzData&quot;&quot;: {&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">))</span> <span class="o">&amp;</span>
<span class="s">&quot;        &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">H2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;: {&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="s">&quot;            &quot;&quot;UtcOffset&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">I2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="s">&quot;            &quot;&quot;UtcOffsetNumber&quot;&quot;: &quot;</span> <span class="o">&amp;</span> <span class="n">J2</span> <span class="o">&amp;</span> <span class="s">&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="s">&quot;            &quot;&quot;databaseName&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">H2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="s">&quot;            &quot;&quot;abbreviation&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">F2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="s">&quot;            &quot;&quot;fullName&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">G2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="s">&quot;            &quot;&quot;cities&quot;&quot;: new Array(&quot;</span> <span class="o">&amp;</span> <span class="n">TextToArray</span><span class="p">(</span><span class="n">E2</span><span class="p">,</span> <span class="s">&quot;, &quot;</span><span class="p">)</span> <span class="o">&amp;</span> <span class="s">&quot;)&quot;</span> <span class="o">&amp;</span>
<span class="k">IF</span><span class="p">(</span><span class="n">ISBLANK</span><span class="p">(</span><span class="n">D2</span><span class="p">),</span>
    <span class="s">&quot;&quot;</span><span class="p">,</span>
    <span class="s">&quot;,&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;            &quot;&quot;Description&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">D2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;&quot;</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="k">IF</span><span class="p">(</span><span class="n">ISBLANK</span><span class="p">(</span><span class="n">K2</span><span class="p">),</span>
    <span class="s">&quot;&quot;</span><span class="p">,</span>
    <span class="s">&quot;,&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;            &quot;&quot;DstHemisphere&quot;&quot;: &quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">K2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;, &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;            &quot;&quot;DstStart2010&quot;&quot;: new Date(Date.UTC(&quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">L2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;)), &quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;            &quot;&quot;DstEnd&quot;&quot;: new Date(Date.UTC(&quot;&quot;&quot;</span> <span class="o">&amp;</span> <span class="n">M2</span> <span class="o">&amp;</span> <span class="s">&quot;&quot;&quot;))&quot;</span><span class="p">)</span> <span class="o">&amp;</span>
<span class="k">IF</span><span class="p">(</span><span class="n">EXACT</span><span class="p">(</span><span class="n">A2</span><span class="p">,</span> <span class="n">A3</span><span class="p">),</span>
    <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;        },&quot;</span><span class="p">,</span>
    <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;        }&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;    }&quot;</span> <span class="o">&amp;</span> <span class="kt">CHAR</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">&amp;</span>
    <span class="s">&quot;}&quot;</span><span class="p">)</span>
</pre>
</div>
<p>A few notes about the calculation above:</p>
<ul>
<li>Notice that you can use the <strong>IF</strong> function within the concatenation string itself</li>
<li><strong>CHAR(10)</strong> is a line feed character, used to start a new line for better clarity.  However,  you wont be able to see the improved formatting in your cells until you change the <strong>Cell Alignment</strong> to <strong>Wrap Text</strong>, enabling multiple lines per cell.</li>
<li>I used <strong>ISBLANK</strong> to check for empty cells before adding the optional properties.</li>
<li>I used <strong>EXACT</strong> to check for identical country codes above and below the current row to determine whether or not to create a new object for the country.  Note that this will cause an error on the first row (there is no row above the first row), so I designed the entire calculation for the second row.  It&#8217;s easy to fix the first row after dragging this to it with the Fill Handle.</li>
</ul>
<h3><span class="green"><a name="result">Retrieving the Result</a></span></h3>
<p>After finishing the calculation, paste it into the next available cell in the second row of the spreadsheet:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Paste_Calculation_into_Spreadsheet1.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Paste_Calculation_into_Spreadsheet1-450x203.png" alt="Paste Calculation into Spreadsheet" title="Paste Calculation into Spreadsheet" width="450" height="203" class="aligncenter size-medium wp-image-1241" /></a></p>
<p>Then press <strong>Enter</strong> to complete the calculation.  You should see something like your desired output displayed in the target cell.  If not, begin debugging.  The next step is to change the cell alignment for every cell in the column you&#8217;re using for calculations, so that you can see the formatting you worked so hard on with your calculation.  First select the entire column (the one you&#8217;re using for the calculations), and then change the alignment to Wrap Text (either from the right-click menu or from the toolbar) as shown below (Excel 2007 example shown):</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Change_Cell_Alignment_To_Wrap_Text.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Change_Cell_Alignment_To_Wrap_Text-450x171.png" alt="Change Cell Alignment To Wrap Text" title="Change Cell Alignment To Wrap Text" width="450" height="171" class="aligncenter size-medium wp-image-1242" /></a></p>
<p>Excellent!  Now just drag that calculation down to the rest of the table as shown below.  This will copy the calculation but change the cell references as appropriate:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Drag_Calculation_with_Fill_Handle.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Drag_Calculation_with_Fill_Handle-450x215.png" alt="Drag Calculation with Fill Handle" title="Drag Calculation with Fill Handle" width="450" height="215" class="aligncenter size-medium wp-image-1243" /></a></p>
<p>Note: I also dragged the calculation to the first row with the fill handle, but I had to modify it slightly to prevent an invalid reference to cell A0.</p>
<p>So now the cells are all populated.  Isn&#8217;t it beautiful?</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Finished_Excel_Spreadsheet.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Finished_Excel_Spreadsheet-450x258.png" alt="Finished Excel Spreadsheet" title="Finished Excel Spreadsheet" width="450" height="258" class="aligncenter size-medium wp-image-1244" /></a></p>
<p>Ok, it&#8217;s a little hard to see, but it&#8217;s great.  We&#8217;re not done yet, though.  There&#8217;s one last tricky part: <strong>You can&#8217;t just copy and paste this into your text editor / IDE !!!</strong>.  For some reason I don&#8217;t fully understand, Excel adds extra quotation marks around seemingly random portions of the output, even if you export it to a text file.  Here&#8217;s what it looks like (thanks for nothing, Excel):</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Excel_Copy_Screwed_Syntax.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Excel_Copy_Screwed_Syntax-450x230.png" alt="Excel Copy Screwed Syntax" title="Excel Copy Screwed Syntax" width="450" height="230" class="aligncenter size-medium wp-image-1245" /></a></p>
<p>That is a disaster for our code wherein <strong>quotation marks are everything!</strong>, so you can&#8217;t just replace all quotation marks with an empty string, as you might see suggested in some internet forums.  The only way to paste this and preserve your careful formatting is to <strong>paste it into Microsoft Word</strong>, then copy and paste it into your editor.  Thank goodness for Word.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Saved_Syntax_With_Word.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Saved_Syntax_With_Word-450x243.png" alt="Saved Syntax With Word" title="Saved Syntax With Word" width="450" height="243" class="aligncenter size-medium wp-image-1246" /></a></p>
<p>That&#8217;s it, the finished product!  Even with all the time I spend learning this, I&#8217;m still very much time-ahead.  Plus, I think I would have shot myself by now if I tried to do that by hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2011/04/use-excel-to-automate-repetitive-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Create a 360 x 180 Degree Panorama</title>
		<link>http://greeennotebook.com/2011/04/how-to-create-a-360-x-180-degree-panorama/</link>
		<comments>http://greeennotebook.com/2011/04/how-to-create-a-360-x-180-degree-panorama/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 22:41:38 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=1103</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2011/04/how-to-create-a-360-x-180-degree-panorama/"><img align="left" hspace="5" width="150" height="75" src="http://greeennotebook.com/wp-content/uploads/2011/04/2011_03_31_@11-17-52_Beach_on_Naval_Base_Guam_near_-150x75.jpg" class="alignleft tfe wp-post-image" alt="Orote Peninsula Beach Panorama" title="Orote Peninsula Beach Panorama" /></a>If you're a novice photographer looking to create a 360 x 180 degree Panorama similar to those found at <a href="http://www.360cities.net/">360 Cities</a>, <a href="http://viewat.org/">ViewAt.org</a>, or <a href="http://www.panoramas.dk/">panoramas.dk</a>, then this step-by-step tutorial is for you.  It's also an excellent guide for photographers new to panoramic photography.   <a href="http://greeennotebook.com/2011/04/how-to-create-a-360-x-180-degree-panorama/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="#hardware">Buy the Hardware</a></li>
<li><a href="#npp">Find the No-Parallax Point of Your Lens</a></li>
<li><a href="#shoot">Take Some Photos</a></li>
<li><a href="#stitch">Stitch Photos Together With Hugin</a></li>
<li><a href="#tripod">Make a Logo To Cover Your Tripod</a></li>
<li><a href="#panini">View the Photo in 3D with Panini</a></li>
</ul>
<h3><span class="green"><a name="hardware">Buy the Hardware</a></span></h3>
<ul>
<li><a href="#Fisheye">Fish-eye Lens</a></li>
<li><a href="#DSLR">DSLR Camera</a></li>
<li><strong>Tripod</strong></li>
<li><a href="#PanoHead">Panoramic Head</a></li>
<li><a href="#Switch">Remote Switch</a></li>
<li><strong>Computer</strong> (high performance much appreciated)</li>
</ul>
<p><em><a name="Fisheye">Fish-eye Lens</a></em></p>
<p>It&#8217;s very difficult to make a 360&deg; x 180&deg; panorama using a standard lens.  If you have a standard 24mm point-and-shoot camera lens (crop factor about 1.6), it takes 12 photos (portrait orientation) to get a 360&deg; photo, and that&#8217;s just one row.  Even after that 12-photo series, you&#8217;ll still only have a a 360&deg; x 50&deg; panorama.  How do you photograph the rest of the scene, including the zenith (top) and nadir (bottom)?  The answer is you either spend all day to take one picture (hopefully the clouds don&#8217;t move!) or you upgrade your hardware.</p>
<p>The best kind of lens for a panorama is a <strong>fish-eye lens</strong>.  The main types are spherical and full-frame.  Spherical fish-eye lenses capture the widest angle of view and produce a circular image.  Full-frame fish-eye lenses produce a square image but at the cost of a reduced angle of view.  With a spherical fish-eye lens, you can take a 360&deg; x 180&deg; panorama in 3-4 photos.  With a full-frame fish-eye lens, you&#8217;ll need up to 8 photos.  Even so, I decided to buy a full-frame fish-eye lens because the price was right.  I&#8217;m very happy with my <a href="http://www.samyang.pl/product,96,category,5,samyang_8_mm_f35_aspherical_if_mc_fisheye">Samyang 8 mm f/3,5 Aspherical IF MC Fish-eye</a>, which I bought for about $300.  The only drawback to this lens is its lack of interface with my DSLR, but I don&#8217;t mind since panoramas should be done in manual mode anyway.</p>
<p><em><a name="DSLR">DSLR</a></em></p>
<p>In order to use your fish-eye lens, you&#8217;re going to need a <strong>DSLR camera</strong>.  I&#8217;m happy with my low-end <a href="http://www.usa.canon.com/dlc/controller?act=GetProductAct&#038;productID=210">Canon EOS Digital Rebel XS</a>.  I paid about $550 for mine.</p>
<p><em><a name="PanoHead">Panoramic Head</a></em></p>
<p>You can now use your new camera and lens to take some wide-angle photos, but if you&#8217;re not using a tripod with a panoramic head, you&#8217;re never going to get the photos to stitch together properly on your computer.  You might actually need to buy a new keyboard after you smash yours from frustration (maybe).  You might get away with hand-held shots if you&#8217;re only photographing the horizon, but the paralax error is too great when you&#8217;re shooting a full 360&deg; x 180&deg; panorama.  Even very slight changes in the position of the <a href="http://wiki.panotools.org/No-parallax_point">no-parallax point</a> of your camera between photos can cause disaster when it comes time to join the photos together, especially when you&#8217;re dealing with objects that are close to you, such as the ground.  An alternative is to use the <a href="http://wiki.panotools.org/Philopod">Philopod Technique</a> to try to rotate the camera about its <a href="http://wiki.panotools.org/No-parallax_point">no-parallax point</a>, but that method simply did not work for me at all.</p>
<p>Anyway, what you&#8217;re going to need is a tripod and a <strong>panoramic head</strong>.  These can be very expensive, depending on the features you&#8217;re looking for.  If you&#8217;re going to be a panoramic photographer, then I&#8217;d say a good panoramic head is definitely worth the money.  I&#8217;m just a dabbler, so I looked for a cheap one.  If you&#8217;re a handy-man, you can <a href="http://www.wikihow.com/Build-a-Panoramic-Tripod-Head">build your own panoramic head</a>.  I&#8217;m not, though, so I bought a <a href="http://gregwired.com/pano/Pano.htm">Panosaurus Panoramic Tripod Head</a> for $86.  I&#8217;m fairly happy with it, since it fits in my camera bag and does the job.  However, it&#8217;s not as stable as I&#8217;d like, and if you want to keep it fully spherical (able to take pictures straight up and down for the zenith and nadir shots), then you have to use a flat-head screw to secure the camera onto the panoramic head.  I&#8217;m not a big fan of setting up my photography equipment with a screwdriver, but it works.</p>
<p><em><a name="Switch">Remote Switch</a></em></p>
<p>Finally, you&#8217;ll need a remote switch to prevent the whole setup from shaking every time you take a picture.  These are fairly cheap.  I got my <a href="http://www.amazon.co.uk/Shoot-RS-60E3-Remote-Switch-Canon/dp/B0042Z1Z94">Shoot Remote Switch</a> for under $10.</p>
<p>My setup costs just under $1000, but I already had the DSLR.  Here it is:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/2011_04_01_@11-22-55_My_panoramic_camera_setup__1.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/2011_04_01_@11-22-55_My_panoramic_camera_setup__1-450x707.jpg" alt="My Panoramic Photo Setup - (1) Canon EOS Digital Rebel XS DSLR, (2) Samyang 8 mm f/3,5 Aspherical IF MC Fish-eye, (3) Panosaurus Panoramic Tripod Head, (4) Tripod, and (5) Shoot Remote Switch" title="My Panoramic Photo Setup - (1) Canon EOS Digital Rebel XS DSLR, (2) Samyang 8 mm f/3,5 Aspherical IF MC Fish-eye, (3) Panosaurus Panoramic Tripod Head, (4) Tripod, and (5) Shoot Remote Switch" width="450" height="707" class="aligncenter size-medium wp-image-1108" /></a></p>
<h3><span class="green"><a name="npp">Find the No-Parallax Point of Your Lens</a></span></h3>
<p>The no-parallax point is point about which you can rotate your camera without getting parallax error (a difference in perspective between foreground and background).  Here is what the <a href="http://wiki.panotools.org/No-parallax_point">PanoTools.org Wiki</a> says about it:</p>
<blockquote><p>It is the is the center of the lens&#8217;s entrance pupil, a virtual aperture within the lens. In the panorama photography community, this special point is often called the &#8220;nodal point&#8221;, but it is in fact unrelated to the actual nodal points of the lens.</p></blockquote>
<p>Even if you don&#8217;t quite understand what the no-parallax point is, you can easily setup your panoramic head by following the directions given in this video: <a href="http://www.youtube.com/watch?v=k0HaRZi-FWs">Panoramic photography &#8211; how to find the Nodal Point (no parallax point) of your lens&#8230; </a>.  I wont attempt to compete with their excellent tutorial here, so just check it out.</p>
<h3><span class="green"><a name="shoot">Take Some Photos</a></span></h3>
<p>There are a number of things to take into account when you decide how to take the actual photos you will use for your panorama:</p>
<ul>
<li><a href="#NumberPics">Number of Photos Needed For a 360&deg; x 180&deg; Panorama</a></li>
<li><a href="#Exposure">Exposure</a></li>
<li><a href="#Speed">Speed</a></li>
</ul>
<p>First off, all of this is going to vary depending on your hardware, and the best tutorial is trial-and-error.  With that said, I&#8217;m going to talk about my own setup.  For some help with other setups, check out this nifty <a href="http://wiki.panotools.org/Entrance_Pupil_Database#Number_of_pics_for_360.C2.B0">Table of the Number of Pictures Required for 360&deg; Panoramas for Various Lenses</a>.</p>
<p><em><a name="NumberPics">Number of Photos Needed For a 360&deg; x 180&deg; Panorama</a></em></p>
<p>My lens has a Horizontal Field of View of 159.27&deg; and a Vertical Field of View of about 83.8&deg;.  The best way I&#8217;ve found to create a 360&deg; x 180&deg; panorama is to take 6 portrait-oriented photos spaced 60 degrees apart, then take a separate zenith (top) and nadir (bottom) shot.  That&#8217;s 8 photos total.  However, with my Panosaurus Panoramic Tripod Head, the nadir is ruined by part of the panoramic head.  My solution is to take two nadirs with the arm of my Panosaurus pivoted 180 degrees between the two.  That way, I can edit out the arm with panoramic software.</p>
<p>In summary, I need 9 photos for every panorama.</p>
<p><em><a name="Exposure">Exposure</a></em></p>
<p>You could easily take all your photos using your camera&#8217;s automatic exposure adjustments, but they wont make a good panorama.  The exposure needs to match from image to image, or you&#8217;ll be able to see exactly where the photos were stitched together, even with the best software exposure blending.  Your camera will try to adjust for the best exposure for the current image, which may not be the best setting for the overall panorama.  For this reason, <strong>you need to shoot panoramas in manual mode</strong> and decide on the best settings yourself.</p>
<p>Manual exposure adjustment is hard.  You should learn about it from an expert, perhaps <a href="http://henryphotoblog.com/lessons/manual/">this guy</a>.  For a daylight outdoor scene, I usually keep my ISO at 100, my aperture near F/8 &#8211; F/11, and I use the DSLR&#8217;s exposure meter to tell me where the shutter speed should be.  However, I&#8217;ve often gone wrong with these settings.  The key is trial and error.  Also, take some practice shots and use your viewfinder to watch out for over- and under-exposure.</p>
<p><em><a name="Speed">Speed</a></em></p>
<p>Finally, if you are shooting by sunlight, you need to take the whole series of photos as quickly as possible.  If you are outdoors, the clouds are going to move and screw up your alignment or cover the sun and screw up your exposure.</p>
<p>That&#8217;s all there is to it.  Here are the photos I took for a recent panorama:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2566.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2566-150x100.jpg" alt="Photo 1" title="Photo 1" width="150" height="100" class="alignleft size-thumbnail wp-image-1111" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2567.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2567-150x100.jpg" alt="Photo 2" title="Photo 2" width="150" height="100" class="alignleft size-thumbnail wp-image-1112" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2568.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2568-150x100.jpg" alt="Photo 3" title="Photo 3" width="150" height="100" class="alignleft size-thumbnail wp-image-1113" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2569.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2569-150x100.jpg" alt="Photo 4" title="Photo 4" width="150" height="100" class="alignleft size-thumbnail wp-image-1114" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2570.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2570-150x100.jpg" alt="Photo 5" title="Photo 5" width="150" height="100" class="alignleft size-thumbnail wp-image-1115" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2571.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2571-150x100.jpg" alt="Photo 6" title="Photo 6" width="150" height="100" class="alignleft size-thumbnail wp-image-1116" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2572.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2572-150x100.jpg" alt="Photo 7" title="Photo 7" width="150" height="100" class="alignleft size-thumbnail wp-image-1117" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2573.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2573-150x100.jpg" alt="Photo 8" title="Photo 8" width="150" height="100" class="alignleft size-thumbnail wp-image-1118" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2574.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/IMG_2574-150x100.jpg" alt="Photo 9" title="Photo 9" width="150" height="100" class="alignleft size-thumbnail wp-image-1119" /></a></p>
<h3><span class="green"><a name="stitch">Stitch Photos Together With Hugin</a></span></h3>
<p><a href="http://hugin.sourceforge.net/">Hugin</a> is free, open-source, cross-platform panorama photo stitching software comparable to any commercial panorama software.  It&#8217;s excellent.  Download it and follow along.</p>
<p>The first step is to open Hugin and press <strong>Load</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_1.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_1-450x199.png" alt="Stitching Step 1" title="Stitching Step 1" width="450" height="199" class="aligncenter size-medium wp-image-1122" /></a></p>
<p>Then, in the file browser dialog that comes up, select the photos you will be using for your panorama.  When you&#8217;re finished, click <strong>Open</strong> and you should see the following dialog.  Make sure you select the correct lens type.  Hugin will probably automatically detect your focal length multiplier (aka crop factor) from the image metadata.  If it doesn&#8217;t, then you need to look that up for your specific DSLR.  Mine was in the manual.  Anyway, after you fill in the focal length of your lens along with the rest of that information, Hugin will automatically calculate the Horizontal Field of View (HFOV) for your images as shown below.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_2-450x236.png" alt="Stitching Step 2" title="Stitching Step 2" width="450" height="236" class="aligncenter size-medium wp-image-1123" /></a></p>
<p>Depending on your Hugin settings, the application may automatically start generating control points and trying to align your images at this point.  If it does, it will show you the dialog window below to show you what it is doing.  Otherwise, you&#8217;ll need to start this process yourself by pressing the <strong>Align</strong> button (located just below the Load button).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_3.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_3-450x307.png" alt="Stitching Step 3" title="Stitching Step 3" width="450" height="307" class="aligncenter size-medium wp-image-1124" /></a></p>
<p>Even though Hugin tries hard to put this together for you, it&#8217;s never completely successful.  Here&#8217;s the status of the panorama after automatic alignment:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_4.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_4-450x244.png" alt="Stitching Step 4" title="Stitching Step 4" width="450" height="244" class="aligncenter size-medium wp-image-1125" /></a></p>
<p>So Hugin did find 207 <strong>control points</strong> which are points that look to be from the same part of the scene from two different images.  Unfortunately, Hugin is telling us that the panorama is still a bad fit.  We&#8217;ll have to take a look at the control points manually.  Head to the <strong>Control Point</strong> tab and pull up two adjacent images using the drop-lists (Hugin might default to opening the same image on both sides, which doesn&#8217;t make any sense).  The goal here is to find points from both images that are the same part of the scene.  You&#8217;ll have to do this for every adjacent pair of images.  Yes, this does include linking each of the 6 portrait images to both the zenith and nadir shots.  It&#8217;s a tedious task, but it&#8217;s the only way to do it if Hugin doesn&#8217;t do it automatically.  I sometimes get away with just a few control points between some adjacent images (I say as an absolute minimum you should have three points between images).  You can play with the <strong>auto add</strong>, <strong>auto estimate</strong>, and <strong>auto fine-tune</strong> toggle buttons at the bottom right-hand corner of the control point editor.  These automatic features are a big help for the portrait shots, but when the perspective is skewed (such as for the zenith and nadir shots), these features are better left turned off.  You should also get used to adjusting the <strong>Zoom</strong> drop-list, because you&#8217;ll often have to switch between <strong>fit to window</strong> and <strong>100%</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_5.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_5-450x247.png" alt="Stitching Step 5" title="Stitching Step 5" width="450" height="247" class="aligncenter size-medium wp-image-1133" /></a></p>
<p>Control Point Tips:</p>
<ul>
<li>Hugin often adds control points to the sky, water, and other surfaces that are transient or have smooth textures.  You should automatically delete any of these control points, because they are usually misaligned.  I often end up deleting half of the control points automatically generated by the Auto-SIFT-C application bundled with Hugin.</li>
<li>The clouds move, so try not to put control points in the clouds.  If you have to, though, use the clouds that are far away (they move slower).</li>
<li>Leaves and branches also move, so if you have to put control points on these, try to focus on the large branches that don&#8217;t move in the wind.</li>
<li>Avoid bunching all your control points in the same location.  Find points that are spread apart to help with alignment.</li>
</ul>
<p>You also need to set a few horizontal or vertical lines to help Hugin determine the correct orientation for your panorama.  If there is a man-made structure that you know is vertical or horizontal in your scene, then pull up the photo with that object into both sides of the control point editor.  On one side of the editor, find a point on one end of the edge of the object.  On the other side of the editor, find a point on the other end of that same edge.  Hugin will automatically assume that you are assigning a line instead of a control point, as indicated in the <strong>Alignment</strong> column of your control point list.  See the image below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_6.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_6-450x208.png" alt="Stitching Step 6" title="Stitching Step 6" width="450" height="208" class="aligncenter size-medium wp-image-1134" /></a></p>
<p>Once you&#8217;re done with your control points (finally!), head back to the assistant tab and try re-aligning:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_7.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_7-450x325.png" alt="Stitching Step 7" title="Stitching Step 7" width="450" height="325" class="aligncenter size-medium wp-image-1137" /></a></p>
<p>Hopefully, you get a better fit.  If not, go though your control points again and look in the <strong>Distance</strong> column.  Distances greater than 3 make for a poor fit.  Edit or delete mis-aligned control points if you think they&#8217;re in the wrong place.  If you do this and re-align, and you still don&#8217;t get a good fit, don&#8217;t fret.  The panorama might look just fine anyway.  Just do your best, try it, and you can edit the points later if the stitch doesn&#8217;t turn out right.  For this project, I never got a <strong>Good Fit</strong>, but the panorama looks pretty good.</p>
<p>Next, head to the <strong>Mask</strong> tab and add a new mask around any object you don&#8217;t want in the final result.  Warning: if you mask an area that isn&#8217;t in any of the other photos, the resulting panorama will show only black for the masked region.  Only mask objects that you know are in an alternate photo.  I usually mask only the arm of the panoramic head, as shown in the image below.  Hint: it isn&#8217;t very intuitive, but <strong>to complete a mask, you have to right-click</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_8.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_8-450x184.png" alt="Stitching Step 8" title="Stitching Step 8" width="450" height="184" class="aligncenter size-medium wp-image-1139" /></a></p>
<p>Next, head to the <strong>Optimizer</strong> tab and hit the <strong>Optimize Now</strong> button.  Then, head to the <strong>Exposure</strong> tab and hit the <strong>Optimize Now</strong> button.</p>
<p>Take a look at your progress so far by clicking on the <strong>Fast Panorama Preview</strong> icon:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_9.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Hugin_Stitch_9-450x263.png" alt="Stitching Step 9" title="Stiching Step 9" width="450" height="263" class="aligncenter size-medium wp-image-1142" /></a></p>
<p>I pretty much just use this for the <strong>Move/Drag</strong> tab.  The <strong>Straighten</strong> button is pretty handy if you drag the wrong way.  Don&#8217;t worry if your image looks all screwed up in here.  It&#8217;s just a preview (and not a very accurate one).  When you&#8217;re done, close the preview window and head to the <strong>Stitcher</strong> tab.</p>
<p>For full panoramas, you don&#8217;t need to change anything on this tab.  Just press the <strong>Stitch Now</strong> button on the bottom right and save the resulting TIFF file wherever you want it.</p>
<p>Assuming there&#8217;s no major flaws in your image, you&#8217;re done with Hugin!</p>
<h3><span class="green"><a name="tripod">Make a Logo to Cover Your Tripod</a></span></h3>
<p>These are the steps we&#8217;re going to follow to cover up the tripod in the panorama:</p>
<ul>
<li><a href="#Sizing">Determine the Proper Logo Size</a></li>
<li><a href="#Design">Design the Logo</a></li>
<li><a href="#Perspective">Change the Logo Perspective For Use As a GIMP Layer</a></li>
<li><a href="#AddLogo">Add The Logo To Your Panorama</a></li>
</ul>
<p>For this, you&#8217;re going to need the <a href="http://www.gimp.org/">GIMP (GNU Image Manipulation Program)</a> as well as some familiarity with using it.  If you are more familiar with another image editor, feel free to perform these steps in Photoshop or Paint.NET, but I&#8217;ll walk through how to do it in GIMP.
<p><em><a name="Sizing">Determine the Proper Logo Size</a></em></p>
<p>First, open your panorama in GIMP and create a new layer as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/New-Layer-For-Panorama.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/New-Layer-For-Panorama-450x284.png" alt="" title="New Layer For Panorama" width="450" height="284" class="aligncenter size-medium wp-image-1163" /></a></p>
<p>By default, GIMP will make the layer the same size as your panorama layer.  That&#8217;s perfect, so don&#8217;t change it.  Also, we want a transparent layer (default).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/New-Layer-Settings.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/New-Layer-Settings.png" alt="" title="New Layer Settings" width="320" height="391" class="aligncenter size-full wp-image-1164" /></a></p>
<p>Next, make sure you have the new layer selected in the Layers Dialog and use the <strong>Rectangle Select Tool</strong> to select the entire area you want covered by your tripod logo.  Then, fill the selection with white as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Sizing-the-tripod.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Sizing-the-tripod-450x256.png" alt="" title="Sizing the tripod" width="450" height="256" class="aligncenter size-medium wp-image-1165" /></a></p>
<p>We&#8217;re going to make a new image from this white layer, so we need to get rid of the background.  We can do this by simply making it invisible before we save:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Invisible-Background.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Invisible-Background-450x643.png" alt="" title="Invisible Background" width="450" height="643" class="aligncenter size-medium wp-image-1166" /></a></p>
<p>Finally, save the image as a TIF.  Let&#8217;s say we call this <strong>tripod_logo_rectangular_template.tif</strong>.  GIMP will ask if you want to export visible layers, and the answer is yes.  Just FYI, we made the rectangle white because Hugin displays transparency as black, so a black rectangle on transparent background would be invisible in Hugin.  Anyway, we can close GIMP for now and open tripod_logo.tif in Hugin.  Open Hugin, click the <strong>Load Images</strong> button, and select tripod_logo_rectangular_template.tif.  Hugin always needs to know the Lens Type and Horizontal Field of View for images you load, so when the dialog pops up, you need to tell Hugin that this is already a 360 degree panorama, as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/360-Equirectangular-Hugin-Input.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/360-Equirectangular-Hugin-Input-450x238.png" alt="" title="360 Equirectangular Hugin Input" width="450" height="238" class="aligncenter size-medium wp-image-1167" /></a></p>
<p>You&#8217;ll get the following warning, but just ignore it:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Only-1-Image-Warning.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Only-1-Image-Warning-450x238.png" alt="" title="Only 1 Image Warning" width="450" height="238" class="aligncenter size-medium wp-image-1168" /></a></p>
<p>Now for the tricky part.  We will re-orient the 360&deg; image to simulate looking down by changing the <strong>Pitch</strong> to -90&deg;.  Also, we will need to change the <strong>Yaw</strong> to 180&deg; to ensure the resulting circle is centered in our field of view.  We can do all this from within the <strong>Fast Panorama Preview</strong>, so feel free to try it there where you can see the results, but I prefer not to use the preview on my shitty computer because it&#8217;s prohibitively slow.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Re-Orient-Image.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Re-Orient-Image-450x686.png" alt="" title="Re-Orient Image" width="450" height="686" class="aligncenter size-medium wp-image-1169" /></a></p>
<p>Take a look at the Stitcher tab.  For some reason, Hugin&#8217;s canvas size will default to 3000 x 1500 pixels, even though the image we loaded was originally 6490 x 3245 pixels.  So change that canvas size back to the dimensions of your panorama.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Resize-Canvas.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Resize-Canvas-450x227.png" alt="" title="Resize Canvas" width="450" height="227" class="aligncenter size-medium wp-image-1170" /></a></p>
<p>That&#8217;s it.  Just push the <strong>Stitch Now</strong> button and save the file as <strong>tripod_logo_circular_template.tif</strong>.  Now we have a template for the tripod logo that is the exact size we need to cover the tripod.  When we&#8217;re done customizing it, we can open it back up in Hugin and turn it back into a stretched-out rectangle.  Then, we can layer it over our panorama in GIMP.</p>
<p><em><a name="Design">Design the Logo</a></em></p>
<p>I&#8217;m not going to cover the specifics on how to design a logo here.  Just open tripod_logo_circular_template.tif in GIMP and make it look as good as you can with your existing GIMP skills.  Here&#8217;s what I came up with for this image:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Circular-Tripod-Logo.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Circular-Tripod-Logo-450x440.png" alt="" title="Circular Tripod Logo" width="450" height="440" class="aligncenter size-medium wp-image-1171" /></a></p>
<p><em><a name="Perspective">Change the Logo Perspective For Use As a GIMP Layer</a></em></p>
<p>Once you&#8217;re done designing your logo (using the template we created earlier to ensure it&#8217;s the right size), save it as <strong>tripod_logo_circular_final.tif</strong> and be sure to include all the transparent empty space you started with.  Your image should still have the same dimensions as your panorama.</p>
<p>Next, open it in Hugin.  Just as before, you need to specify that it is an equirectangular image and the Horizontal Field of View is 360&deg;.  Go to the Images tab and change the pitch to -90.  That&#8217;s really all you have to do for this step, but if you prefer, you can open up the Fast Panorama Preview dialog and change the Yaw in the Move/Drag tab until your logo is oriented better.  For example, if you have wrapped text, then you might want to change the yaw until your sentence reads from right to left in the resulting equirectangular image.  360&deg; x 180&deg; images like this aren&#8217;t meant for viewing in equirectangular mode, but it doesn&#8217;t hurt to make it look better anyway.  Here&#8217;s mine as seen in the preview dialog after adjusting the yaw a little:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Tripod-Logo-Rectangular.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Tripod-Logo-Rectangular-450x31.png" alt="" title="Tripod Logo Rectangular" width="450" height="31" class="aligncenter size-medium wp-image-1172" /></a></p>
<p>When you&#8217;re done, just go back to the stitcher tab.  Again, you&#8217;re going to need to change the Canvas Size back to the size of the original panorama.  Then, press the <strong>Stitch Now</strong> button.  Save the resulting TIF image as <strong>tripod_logo_rectangular_final.tif</strong>.</p>
<p><em><a name="AddLogo">Add The Logo To Your Panorama</a></em></p>
<p>Now open your panorama in GIMP again.  From the <strong>File</strong> menu, select <strong>Open as Layer</strong> and select the tripod_logo_rectangular_final.tif image you just created.  Your panorama is basically done at this point.  Here&#8217;s what mine looks like in GIMP:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Panorama-with-Tripod-Logo.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Panorama-with-Tripod-Logo-450x227.png" alt="" title="Panorama with Tripod Logo" width="450" height="227" class="aligncenter size-medium wp-image-1173" /></a></p>
<p>Now is the perfect time to do some post-processing.  I usually adjust the Hue, Saturation, and Levels of the background image.  Make sure you have the background layer selected before you start tweaking, though.  Finally, save your finished product.  I usually save it as both a GIMP project file (.xcf) and as a high-quality JPG.  Here&#8217;s my finished equirectangular panorama:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/2011_03_31_@11-17-52_Beach_on_Naval_Base_Guam_near_.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/2011_03_31_@11-17-52_Beach_on_Naval_Base_Guam_near_-450x224.jpg" alt="" title="Orote Peninsula Beach Panorama" width="450" height="224" class="aligncenter size-medium wp-image-1183" /></a></p>
<h3><span class="green"><a name="panini">View the Photo in 3D with Panini</a></span></h3>
<p>So far, my favorite panorama viewer is <a href="http://sourceforge.net/projects/pvqt/">Panini</a>.  It&#8217;s simple and yet does everything you need it to do well.  Just download and install it, then open up the program and click on the <strong>Source</strong> menu, then select <strong>equirectangular</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Panini-Open-File.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Panini-Open-File.png" alt="" title="Panini Open File" width="186" height="204" class="aligncenter size-full wp-image-1179" /></a></p>
<p>Next, navigate to your panorama and open it.  You&#8217;ll see the following dialog confirming that Panini has guessed the right field of view.  Just say OK:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Panini-confirm-FOV.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Panini-confirm-FOV.png" alt="" title="Panini confirm FOV" width="342" height="257" class="aligncenter size-full wp-image-1180" /></a></p>
<p>It&#8217;s really fun to look around in Panini.  Here it is in action, looking slightly downward so you can see the tripod logo:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/04/Panini-In-Action.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/04/Panini-In-Action-450x269.png" alt="" title="Panini In Action" width="450" height="269" class="aligncenter size-medium wp-image-1182" /></a></p>
<p>If you want to share with others, try uploading to <a href="http://www.360cities.net/">360 Cities</a>, <a href="http://viewat.org/">ViewAt.org</a>, or <a href="http://www.panoramas.dk/">panoramas.dk</a>.  I prefer 360 Cities, and I&#8217;ve uploaded a few images there (<a href="http://www.360cities.net/profile/john_aylsworth">My 360 Cities Page</a>).</p>
<p>Here&#8217;s the finished product:</p>
<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" id="_360_krpano_id_497795" name="_360_krpano_name_497795" width="425" height="315" class="aligncenter"><param name="movie" value="http://www.360cities.net/javascripts/krpano/krpano.swf"/><param name="quality" value="autohigh"/><param name="allowScriptAccess" value="always"/><param name="flashvars" value="pano=http://www.360cities.net/krpano/external_embed/beach-at-orote-peninsula.xml&#038;epd=http://www.360cities.net/data/embed/plugin_data/beach-at-orote-peninsula"/><param name="allowFullScreen" value="true"/><embed src="http://www.360cities.net/javascripts/krpano/krpano.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" width="425" height="315" allowFullScreen="true" allowScriptAccess="always" quality="autohigh" flashvars="pano=http://www.360cities.net/krpano/external_embed/beach-at-orote-peninsula.xml&#038;epd=http://www.360cities.net/data/embed/plugin_data/beach-at-orote-peninsula"></embed></object></p>
<p>I hope this tutorial is helpful.  That&#8217;s all!</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2011/04/how-to-create-a-360-x-180-degree-panorama/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Customize Your Fresh Windows 7 Installation</title>
		<link>http://greeennotebook.com/2011/01/customize-your-fresh-windows-7-installation/</link>
		<comments>http://greeennotebook.com/2011/01/customize-your-fresh-windows-7-installation/#comments</comments>
		<pubDate>Mon, 10 Jan 2011 02:36:35 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=1066</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2011/01/customize-your-fresh-windows-7-installation/"><img align="left" hspace="5" width="150" height="120" src="http://greeennotebook.com/wp-content/uploads/2011/01/Windows_7_in_action-150x120.png" class="alignleft tfe wp-post-image" alt="Windows 7 in action" title="Windows 7 in action" /></a>If you've just installed Windows 7 and want to do some tweaking to make your new OS more functional and to look better, then this walkthrough is for you. <a href="http://greeennotebook.com/2011/01/customize-your-fresh-windows-7-installation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve just installed Windows 7 and want to do some tweaking to make your new OS more functional and to look better, then this walkthrough is for you.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Windows_7_in_action.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Windows_7_in_action-450x360.png" alt="Windows 7 in action" title="Windows 7 in action" width="450" height="360" class="aligncenter size-medium wp-image-1088" /></a></p>
<ul>
<li><a href="#remove">Remove Crapware</a></li>
<li><a href="#antivirus">Install Security Software</a></li>
<li><a href="#updates">Install Updates</a></li>
<li><a href="#goodies">Install Other Software</a></li>
<li><a href="#boot">Speed Boot Time</a></li>
<li><a href="#setup">Setup Mail, Browser, Music, Photos, Videos, etc.</a></li>
<li><a href="#theme">Change Theme, User Picture, and Login Background</a></li>
<li><a href="#backup">Choose a Backup Option</a></li>
</ul>
<h3><span class="green"><a name="remove">Remove Crapware</a></span></h3>
<p>In the past, my only copy of Windows has been the one that came with my PC.  Unfortunately, all the PC manufacturers sell out and install tons of crapware (software you don&#8217;t need) on your Windows installation before you even open the box.  I usually spend nearly a day researching and trying to remove crapware without removing essential Windows components or other necessary software.  In the past, I have found <a href="http://www.piriform.com/ccleaner">CCleaner</a> very helpful with this task.  However, I&#8217;ve also heard good things about <a href="http://www.pcdecrapifier.com/home">PC Decrapifier</a>.  Fortunately, this time, I had a nice unsoiled copy of Windows to work with.  Next time, though, I&#8217;ll probably give the decrapifier a whirl.</p>
<p>This should always be your first step after installation.  In that past I have removed software that was essential (then promptly forgotten what it was) and been forced to re-install Windows.  That&#8217;s not such a big problem if you haven&#8217;t spent a lot of time on the installation yet.</p>
<p>Of course, you should be careful not to remove software you&#8217;re going to need.  However, you should also be careful not to keep software that you don&#8217;t need.  I have found that pre-installed software is nearly always unnecessarily slow, bloated, and ineffective.  Freeware alternatives are usually a better choice.  Keeping this crapware can slow down your boot time, use up your memory, and perhaps interfere with alternative software you might install in the future.</p>
<p>In general, to remove software you should try to run the custom <strong>Un-Install</strong> executable that comes bundled with most software.  If present, you&#8217;ll find it from the Start menu under <strong>All Programs</strong> and within the folder for the software you&#8217;re trying to remove.  If there is no un-install application, the next step is to open the Control Panel and click <strong>Uninstall a program</strong> (or <strong>Programs and Features</strong> if you&#8217;re using the icon view).  CCleaner seems to duplicate the Windows Un-Install feature, so alternatively you could use CCleaner for this task.  I&#8217;m not sure how the Windows un-installer compares to CCleaner, but either method should work fine.  Finally, after removing software you should be aware that the removal application probably did not do a good job of cleaning up your computer.  There is almost always garbage left behind.  You can see it in the <strong>C:\Program Files</strong> directory, in the hidden <strong>C:\ProgramData</strong> directory, and in the Windows Registry.  The files left in your program directories don&#8217;t impact system performance, but the crap left in the registry does.  That&#8217;s why I frequently run a registry cleaner that I trust not to screw anything up&#8230; <a href="http://www.piriform.com/ccleaner">CCleaner</a>.</p>
<h3><span class="green"><a name="antivirus">Install Security Software</a></span></h3>
<p>Before you connect your fresh Windows installation to the Internet, you need to make sure you have a firewall.  If you&#8217;re connected via a modern router, you already have a hardware firewall.  Otherwise, you might be relying on Windows Firewall, which comes with Windows.  I usually use both.  Unless you have specifically disabled Windows Firewall or your router&#8217;s built-in firewall, they will work by default and you don&#8217;t generally need to worry about it.</p>
<p>Once you&#8217;re on-line, there are plenty of free anti-virus applications to choose from.  I&#8217;ve usually used <a href="http://free.avg.com/au-en/homepage">AVG Free</a>, but more recently I discovered <a href="http://www.microsoft.com/security_essentials/">Microsoft Security Essentials</a> (MSE) and have been very pleased.  From what I&#8217;ve read, it&#8217;s more effective than the free alternatives, it scans quickly, it doesn&#8217;t have any &#8220;nagscreens&#8221; asking you to pay money for an upgrade, and it&#8217;s simple to use and customize.  MSE will automatically disable Windows Defender (a built-in Windows anti-malware program) because MSE takes over all the functionality of Windows Defender, so don&#8217;t be concerned if you notice that.</p>
<p>I usually run an anti-spyware application in addition to my default anti-virus software, and I usually find many threats that were not detected by the primary anti-virus.  However, since installing MSE, neither <a href="http://superantispyware.com/">SUPERAntiSpyware</a> or <a href="http://www.malwarebytes.org/mbam.php">Malwarebytes&#8217; Anti-Malware</a> have detected any threats that were missed by MSE&#8217;s scans.  I occasionally run scans with both of those anyway, just for peace-of-mind.</p>
<h3><span class="green"><a name="updates">Install Updates</a></span></h3>
<p>I&#8217;m sure that by now, Windows has already nagged you to update.  If not, you can access Windows Update from the Start menu, under <strong>All Programs</strong>, near the top of the list.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Windows_Update_from_start.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Windows_Update_from_start.png" alt="Windows Update from Start" title="Windows Update from Start" width="412" height="408" class="aligncenter size-full wp-image-1074" /></a></p>
<p>I usually install most of the optional updates as well as the recommended ones.</p>
<h3><span class="green"><a name="goodies">Install Other Software</a></span></h3>
<p>Finally, it&#8217;s time to start installing the excellent programs that led you to Windows-dependence in the first place.  This is my current list of favorites.  In most cases, I have tried several alternatives before deciding to keep these particular programs installed.  They are all free except Microsoft Office (which you can get for free or cheap if you&#8217;re a student or corporate employee), and they all work well.  Only a few are open source, but this is Windows after all.</p>
<ul>
<li><a href="http://www.utorrent.com/">μTorrent</a> &#8211; A (very) tiny BitTorrent client</li>
<li><a href="http://www.7-zip.org/">7-Zip</a> &#8211; Open source utility for manipulating archives (&#8220;zipping&#8221; and &#8220;unzipping&#8221;)</li>
<li><a href="http://www.adobe.com/downloads/">Adobe Flash Player</a> &#8211; Browser-based runtime environment for web applications and videos developed with Flash Professional (SWF files)</li>
<li><a href="http://www.adobe.com/downloads/">Adobe Reader</a> &#8211; Read PDF files (yes, I know Sumatra PDF is light-weight, but it&#8217;s not as reliable)</li>
<li><a href="http://www.adobe.com/downloads/">Adobe Shockwave Player</a> &#8211; Displays web content created with Adobe Director such as high-performance multiuser games, interactive 3D product simulations, online entertainment, and training applications</li>
<li><a href="http://audacity.sourceforge.net/">Audacity</a> &#8211; Open source audio editor/recorder</li>
<li><a href="http://www.piriform.com/ccleaner">CCleaner</a> &#8211; Remove unnecessary files to free disk space AND full-featured registry cleaner, fast and reliable</li>
<li><a href="http://www.cccp-project.net/">Combined Community Codec Pack</a> &#8211; Play any video file without a fuss.  In most cases, this allows you to play all videos in the default Windows Media Player without a problem, although the included Media Player Classic generally works better.  This succeeds where VLC fails (and vice versa).  Some codec packs have been known to cause Windows errors, but this one is much more responsible.</li>
<li><a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3">DirectX Runtime</a> &#8211; For displaying applications rich in multimedia elements such as full-color graphics, video, 3D animation, and rich audio</li>
<li><a href="http://www.dropbox.com/">Dropbox</a> &#8211; Sync files online and across computers automatically</li>
<li><a href="http://sourceforge.net/projects/freefilesync/">FreeFileSync</a> &#8211; Open-Source folder comparison and synchronization tool.  Fast and easy to use.</li>
<li><a href="http://www.freemake.com/free_video_converter/">Freemake Video Converter</a> &#8211; Convert between nearly any of the video formats.  True freeware, no adware, sneakware, or registration.</li>
<li><a href="http://www.gadwin.com/printscreen/">Gadwin PrintScreen</a> &#8211; Highly-customizable yet still easy to use screenshot capture software.  Basic version is freeware and still has great features.</li>
<li><a href="http://www.gimp.org/">GIMP</a> &#8211; Open source image editor.  Not quite as cool as Photoshop but it&#8217;s free!</li>
<li><a href="http://www.google.com/chrome">Google Chrome</a> &#8211; Google&#8217;s Internet browser.  I&#8217;m a Firefox fan, but Chrome is still pretty neat.</li>
<li><a href="http://www.google.com/earth/index.html">Google Earth</a> &#8211; The ultimate mapping application.</li>
<li><a href="http://www.imgburn.com/">ImgBurn</a> &#8211; Read from or create a disk image file (ISO), write an image file to disk, or simply burn to a disk directly.  Best of its kind.</li>
<li><a href="http://www.java.com/en/">Java</a> &#8211; the Java Runtime Environment is required to run any Java-based software</li>
<li><a href="http://www.malwarebytes.org/mbam.php">Malwarebytes&#8217; Anti-Malware</a> &#8211; Detect viruses, worms, trojans, rootkits, dialers, spyware, and malware</li>
<li><a href="http://www.mediamonkey.com/">MediaMonkey</a> &#8211; Music player, organizer, tag editor, and much more.  It&#8217;s the only music organizer/player that actually allows you to edit the ID3 tags in the audio files instead of saving everything in a separate database specific to the application.  Works well with MiniLyrics for synchronized, scrolling lyrics (downloaded and saved directly to the ID3 tags).</li>
<li><a href="http://www.microsofthup.com/hupus/chooser.aspx?culture=en-US">Microsoft Office Enterprise 2007/2010</a> &#8211; I like open source software, but when you use Microsoft Office at work, you can&#8217;t get around using it at home for compatibility.  Plus, it really is much better than any of the alternatives.  If you use it at work (like me), you might be eligible for the <a href="http://www.microsofthup.com/hupus/chooser.aspx?culture=en-US">Home Use Program</a> and get it for $9.99.  Students can get it for $79.99 <a href="http://www.microsoft.com/student/office/en-us/default.aspx">here</a>.</li>
<li><a href="http://www.microsoft.com/security_essentials/">Microsoft Security Essentials</a> &#8211; described above in <a href="#antivirus">Install Security Software</a></li>
<li><a href="http://www.microsoft.com/getsilverlight/Get-Started/Install/Default.aspx">Microsoft Silverlight</a> &#8211; for rich Internet applications including multimedia, animations, and graphics.  Similar to Adobe Flash</li>
<li><a href="http://www.crintsoft.com/">MiniLyrics</a> &#8211; Lyrics plugin software for numerous media players, automatically downloads and displays scrolling lyrics, allows you to save downloaded synchronized lyrics to ID3 tags.</li>
<li><a href="http://www.mozilla.com/en-US/firefox/">Mozilla Firefox</a> &#8211; World&#8217;s greatest Internet browser.  Also get the <a href="https://addons.mozilla.org/en-US/firefox/addon/1865/">Adblock Plus</a> Add-On to minimize the ads you see and block malware domains.</li>
<li><a href="http://www.nitroreader.com/">Nitro PDF Reader</a> &#8211; An excellent PDF printer, but also much more.  It&#8217;s also a PDF editor, allowing for text anywhere and even a signature.  Very professional, offered now for free while in beta.  If it&#8217;s not free anymore, try PDFill, Bullzip, or PrimoPDF, but these are not nearly as nice.  You can edit PDFs with GIMP to add signatures and text, and the result is legible, but you&#8217;ll notice distortion.  If you have Microsoft Office, OneNote can do everything Nitro PDF can do, but it&#8217;s not as streamlined.</li>
<li><a href="http://notepad-plus-plus.org/">Notepad++</a> &#8211; Open source code editor.  Best application to use for any kind of text editing, excellent syntax highlighting.</li>
<li><a href="http://www.getpaint.net/">Paint.NET</a> &#8211; Cross between GIMP/Photoshop and old-fashioned Paint that allows you to do anything from doodle to advanced photo editing.</li>
<li><a href="http://picasa.google.com/index.html">Picasa</a> &#8211; Photo organizer, editor, viewer, and much much more.  My favorite features are the photo album viewer, collage creator, geotagger with Google Earth integration, and Picasa Web Albums which display a map next to every geotagged image.  Additionally, Picasa recognizes all my image tags (I tag everything with my own software).</li>
<li><a href="http://www.skype.com/intl/en/get-skype/">Skype</a> &#8211; Video chat, IM, and phone calls on your PC.  Last I checked, it still worked a little better than Google Chat on the PC I was using.</li>
<li><a href="http://superantispyware.com/">SUPERAntiSpyware</a> &#8211; Spyware and adware detection and removal (Works great except annoying nagscreen)</li>
<li><a href="http://www.videolan.org/vlc/">VLC Player</a> &#8211; Media player than can play anything using built-in codecs.  I often </li>
<li><a href="http://explore.live.com/windows-live-movie-maker?os=other">Windows Live Movie Maker</a> &#8211; Best free video editor.</li>
</ul>
<h3><span class="green"><a name="boot">Speed Boot Time</a></span></h3>
<p>Coming from Ubuntu, Windows 7 seems to take forever to boot.  If you want to see exactly what applications are taking so long to load at startup, try <a href="http://www.soluto.com/">Soluto</a> (free now while in Beta).  Soluto is excellent for visualizing the startup process, but I warn you not to try to modify your startup applications using Soluto.  Just use it to help you decide what you need to get rid of, and then un-install it.  Soluto itself takes a long time to load, and when used as a boot manager, it simply runs in the background and prevents or delays other programs from loading.  It&#8217;s more efficient to modify startup applications from within Windows.  Here&#8217;s a screenshot:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Soluto_screenshot.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Soluto_screenshot-450x287.png" alt="Soluto screenshot" title="Soluto screenshot" width="450" height="287" class="aligncenter size-medium wp-image-1070" /></a></p>
<p>You&#8217;ll notice that the first thing in Soluto&#8217;s <strong>No-brainer (remove from boot)</strong> category is WMP, meaning Windows Media Player Network Sharing Service.  In the past I have used this service to stream music from Media Player to my Xbox360.  However, I no longer have any need to stream music from Media Player, so this service is a waste of time.  Here&#8217;s how to remove it (without using Saluto):</p>
<h3>Disable Windows Media Player Network Sharing Service</h3>
<p>You need to open the Windows Services dialog.  You can do that from the Control Panel (<strong>Control Panel &rarr; System and Security &rarr; Administrative Tools &rarr; Services</strong>), or you can simply hold the windows key + R to open the <strong>Run Dialog</strong>, then type <strong>services.msc</strong>.  Once you have the Services dialog open, keep scrolling down until you find the Windows Media Player Network Sharing Service, then right-click on it.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Disable_WMP_sharing_service.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Disable_WMP_sharing_service-450x330.png" alt="Disable WMP sharing service" title="Disable WMP sharing service" width="450" height="330" class="aligncenter size-medium wp-image-1071" /></a></p>
<p>From the right-click menu, select <strong>Properties</strong> and from the Properties dialog, in the <strong>General</strong> tab, change the <strong>Startup Type</strong> to <strong>Disabled</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Disable_WMP_sharing_service_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Disable_WMP_sharing_service_2.png" alt="Disable WMP sharing service part 2" title="Disable WMP sharing service part 2" width="418" height="473" class="aligncenter size-full wp-image-1072" /></a></p>
<p>That&#8217;s it for the WMP sharing service (Windows Media Player will still work just fine, by the way, it just wont stream media unless you restart the service manually).  One of the other applications Saluto flagged for removal is Microsoft Office Groove, which is part of Microsoft Office Enterprise and allows for collaborative document editing.  Although Groove sounds neat, I have no need for it and don&#8217;t want it slowing down my boot.  Here&#8217;s how to remove it (or any other component of Microsoft Office, for that matter):</p>
<h3>Remove Microsoft Office Groove</h3>
<p>From the Control Panel, select <strong>Uninstall a program</strong> (or <strong>Programs and Features</strong>, depending on your Control Panel view).  Find Microsoft Office, select it, and click the <strong>Change</strong> button:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Change_Microsoft_Office_installation.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Change_Microsoft_Office_installation-450x360.png" alt="Change Microsoft Office Installation" title="Change Microsoft Office Installation" width="450" height="360" class="aligncenter size-medium wp-image-1073" /></a></p>
<p>Use the next dialog to remove Groove as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Uninstall_Microsoft_Office_Groove.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Uninstall_Microsoft_Office_Groove-450x380.png" alt="Uninstall Microsoft Office Groove" title="Uninstall Microsoft Office Groove" width="450" height="380" class="aligncenter size-medium wp-image-1075" /></a></p>
<p>That&#8217;s it!  Groove is gone.</p>
<h3>Identify Other Programs That Run At Startup</h3>
<p>If you don&#8217;t want to install Saluto just to see what&#8217;s running at startup, you can figure it out by looking in a few different places.  The first one is the easiest&#8230; just look in the Notification Area:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Notification_Area.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Notification_Area.png" alt="Notification Area" title="Notification Area" width="267" height="166" class="aligncenter size-full wp-image-1076" /></a></p>
<p>If you see a program running in here that you didn&#8217;t start yourself, it probably is set to run automatically at Windows Startup.  Sometimes, this is good.  For example, you can see that I have Microsoft Security Essentials running at startup (the green house icon).  I also allow Dropbox to run at boot (the blue box).  However, other applications you only use occasionally will still add themselves to the startup list.  For example, the camera and monitor icon is Gadwin Printscreen, which apparently decided it&#8217;s important enough to run at startup.  I disagree.  Most of the time, preventing a program from running at startup is as simple as using that programs <strong>Options</strong> dialog.  That is the case with Gadwin Printscreen, along with most others:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Disable_Run_At_Startup.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Disable_Run_At_Startup-450x362.png" alt="Disable Run At Startup" title="Disable Run At Startup" width="450" height="362" class="aligncenter size-medium wp-image-1077" /></a></p>
<p>That was easy, but I guarantee there are many startup applications other than those listed in the Notification Area.  Ideally, you should be able to see all the programs that run at startup from the <strong>Startup</strong> folder, visible from the Start menu under <strong>All Programs</strong>.  Alas, that folder is far from accurate.  Eight programs that I installed myself (not Windows components) run at startup, and only one of them manifests itself in the Startup folder (good job, Dropbox).  The only way to see the entire list is from within the <strong>System Configuration</strong> tool, <strong>msconfig</strong>.  Note: CCleaner users may notice that CCleaner will mimic msconfig, displaying an accurate list of startup applications.</p>
<p>To run <strong>msconfig</strong>, open the <strong>Run Dialog</strong> (Windows key plus &#8216;r&#8217;) and type <strong>msconfig</strong>.  Open the <strong>Startup</strong> tab:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/msconfig_Startup_List.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/msconfig_Startup_List-450x302.png" alt="msconfig Startup List" title="msconfig Startup List" width="450" height="302" class="aligncenter size-medium wp-image-1078" /></a></p>
<p>As you can see, I allow Adobe, Java, and Google to run an updater application at startup (they&#8217;re pretty light-weight).  Other than those, I only have Miscrosoft Security Essentials, Microsoft IntelliPoint (for my mouse), and Dropbox.  Don&#8217;t ask me why the Windows Operating System is listed as a startup application.  If you find something in here that you want to get rid of, you can simply de-select it.  However, once you know what&#8217;s running at startup, I think it&#8217;s better practice to at least attempt to disable the <strong>Run At Startup</strong> option from within each individual program&#8217;s <strong>Options</strong> dialog before resorting to msconfig.</p>
<h3><span class="green"><a name="setup">Setup Mail, Browser, Music, Photos, Videos, etc.</a></span></h3>
<p>Now that you have installed your main Windows software and trimmed all the unnecessary stuff, it&#8217;s time to grab your external hard drive (or navigate to your FTP server or online backup website) and start copying all your files back into your Windows machine.  If you&#8217;ve simply copied files and folders onto your backup medium, this will be as easy as dragging and dropping into the right folders.  If you&#8217;ve used backup software (like Windows Backup), you&#8217;ll have to use the same backup software to find the files you wish to restore.</p>
<p>I use Outlook to access my GMail account via IMAP.  If you want to do the same, follow <a href="http://mail.google.com/support/bin/answer.py?hl=en&#038;answer=77689">this GMail tutorial</a>.</p>
<p>If you want to copy calendars from Google into Outlook, you can obtain an ICS file from GMail like this:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Google_Calendar_to_ICS_1.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Google_Calendar_to_ICS_1.png" alt="Google Calendar to ICS 1" title="Google Calendar to ICS 1" width="360" height="452" class="aligncenter size-full wp-image-1082" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Google_Calendar_to_ICS.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Google_Calendar_to_ICS-450x311.png" alt="Google Calendar to ICS" title="Google Calendar to ICS" width="450" height="311" class="aligncenter size-medium wp-image-1081" /></a></p>
<p>Then from Outlook, go to <strong>File &rarr; Import and Export&#8230;</strong> and select <strong>Import an iCalendar (.ics) or vCalendar file (.vcs)</strong>.</p>
<p>If you want to copy contacts from GMail into Outlook, you can export a CSV from GMail like this:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/GMail_Contacts_to_CSV.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/GMail_Contacts_to_CSV-450x133.png" alt="GMail Contacts to CSV" title="GMail Contacts to CSV" width="450" height="133" class="aligncenter size-medium wp-image-1079" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/GMail_Contacts_to_CSV_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/GMail_Contacts_to_CSV_2-450x284.png" alt="GMail Contacts to CSV 2" title="GMail Contacts to CSV 2" width="450" height="284" class="aligncenter size-medium wp-image-1080" /></a></p>
<p>Then from Outlook, go to <strong>File &rarr; Import and Export&#8230;</strong>, and choose the following:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Outlook_import_from_CSV1.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Outlook_import_from_CSV1.png" alt="Outlook import from CSV 1" title="Outlook import from CSV 1" width="450" height="343" class="aligncenter size-full wp-image-1083" /></a></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2011/01/Outlook_import_from_CSV2.png"><img src="http://greeennotebook.com/wp-content/uploads/2011/01/Outlook_import_from_CSV2-450x343.png" alt="Outlook import from CSV 2" title="Outlook import from CSV 2" width="450" height="343" class="aligncenter size-medium wp-image-1084" /></a></p>
<p>Now that Outlook is setup, you might want to take some time to restore your browser bookmarks (if you backed them up).  In Firefox, go to <strong>Bookmarks &rarr; Organize Bookmarks</strong>, then select <strong>Import and Backup &rarr; Restore &rarr; Choose File&#8230;</strong> and find your bookmark backup file (ends in .json).  All the favicons will be missing, but they&#8217;ll show back up whenever you navigate to each page.</p>
<p>In addition to Outlook and Firefox, I take some time to setup Picasa for my photo management and MediaMonkey for my music management.  I&#8217;ll leave that to you to figure out how you want to organize your media.</p>
<h3><span class="green"><a name="theme">Change Theme, User Picture, and Login Background</a></span></h3>
<p>Now it&#8217;s time to make Windows <strong>look</strong> a little better.  Changing the theme is easy.  Just go to <strong>Control Panel &rarr; Appearance and Personalization &rarr; Change the theme</strong> and pick the theme you like.  If you want to download a new theme, that&#8217;s easy too.  Just go to <a href="http://windows.microsoft.com/en-US/windows/downloads/personalize/themes">Microsoft Windows &#8211; Windows 7 themes</a>, find a theme you like and open it with <strong>themefile (default)</strong>.  It will automatically install and load.</p>
<p>Changing the user picture is easy too.  Just go to <strong>Control Panel &rarr; User Accounts and Family Safety &rarr; User Accounts &rarr; Change your account picture</strong>.  If you have your own picture to use, click on <strong>Browse for more pictures&#8230;</strong> and navigate to your picture.  Otherwise, pick one from the list.</p>
<p>Changing the login background is not quite as easy, but it&#8217;s still not too bad.  I&#8217;ve already written a tutorial for this &#8211; <a href="http://greeennotebook.com/2010/06/change-windows-7-login-background-without-installing-any-extra-software/">Change Windows 7 Login Background Without Installing Any Extra Software</a>.</p>
<h3><span class="green"><a name="backup">Choose a Backup Option</a></span></h3>
<p>Now that you&#8217;ve gone to all this trouble to customize your Windows installation, it&#8217;s time to backup.  There are many options, but I just use the built-in Windows Backup.  Not only does it allow you to backup individual folders and files, it also creates an entire disk image you can use to restore from if all hell breaks loose.  Get there from <strong>Control Panel &rarr; System and Security &rarr; Backup and Restore</strong>.  Keep in mind that this process will take several hours, so just start the backup before you go to bed.</p>
<p>Well, that&#8217;s all I can think of for now.  Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2011/01/customize-your-fresh-windows-7-installation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Best Way to Select Foreground with GIMP (A Photo-Editing Tutorial)</title>
		<link>http://greeennotebook.com/2010/12/best-way-to-select-foreground-with-gimp-a-photo-editing-tutorial/</link>
		<comments>http://greeennotebook.com/2010/12/best-way-to-select-foreground-with-gimp-a-photo-editing-tutorial/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 19:41:34 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[GIMP]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=1009</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2010/12/best-way-to-select-foreground-with-gimp-a-photo-editing-tutorial/"><img align="left" hspace="5" width="150" src="http://greeennotebook.com/wp-content/uploads/2010/12/Final_Result-150x112.jpg" class="alignleft wp-post-image tfe" alt="Original Versus GIMPed Version" title="Original Versus GIMPed Version" /></a>When editing a photograph, it is common to apply an effect to just the foreground and not the background, or vice versa.  The problem is that GIMP does a poor job of selecting the foreground for you, so you have to do it yourself (From what I've seen, Photoshop isn't much better at this).  This tutorial will show you a couple methods for foreground selection, how to use them together, and how to apply them with some other basic photo editing techniques to improve a photo. <a href="http://greeennotebook.com/2010/12/best-way-to-select-foreground-with-gimp-a-photo-editing-tutorial/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Final_Result.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Final_Result-150x112.jpg" alt="Original Versus GIMPed Version" title="Original Versus GIMPed Version" width="150" height="112" class="alignright size-thumbnail wp-image-1057" /></a></p>
<p>When editing a photograph, it is common to apply an effect to just the foreground and not the background, or vice versa.  The problem is that GIMP does a poor job of selecting the foreground for you, so you have to do it yourself (From what I&#8217;ve seen, Photoshop isn&#8217;t much better at this).  This tutorial will show you a couple methods for foreground selection, how to use them together, and how to apply them with some other basic photo editing techniques to improve a photo.</p>
<p>The original photo we&#8217;ll use for this tutorial is below.  That is the Orote Peninsula in the background, and there is a Coast Guard vessel navigating Apra Harbor to the right (<a href="http://lmgtfy.com/?q=orote+peninsula+apra+harbor">Where did I take the picture?</a>).  I have the subject&#8217;s permission to use his picture for this tutorial, of course.
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/DSC01268.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/DSC01268-450x337.jpg" alt="Original Image" title="Original Image" width="450" height="337" class="aligncenter size-medium wp-image-1011" /></a></p>
<p>Here&#8217;s what we&#8217;ll be doing to this image:</p>
<ul>
<li><a href="#basics">Attempt Basic Photo Editing</a></li>
<li><a href="#quick">Select the Foreground With a Quick Mask</a></li>
<li><a href="#save">Two Ways to Save A Selection</a></li>
<li><a href="#worthless">Demonstrate Why the Foreground Select Tool Is Worthless</a></li>
<li><a href="#threshold">Easier Foreground Selection With Threshold and a Layer Mask</a></li>
<li><a href="#effects">Selectively Apply Effects Using Foreground Selection</a></li>
<li><a href="#contrast">Contrast Mask to Remove Shadows From Foreground</a></li>
<li><a href="#final">Final Result</a></li>
</ul>
<h3><span class="green"><a name="basics">Attempt Basic Photo Editing</a></span></h3>
<p>The first step is to open the image in GIMP.  Now, look at the <strong>Layers</strong> Dialog to the right.  If you don&#8217;t know how the layers work, you should spend some time playing with that dialog or <a href="http://docs.gimp.org/2.6/en/gimp-image-combining.html#gimp-concepts-layers">read the GIMP documentation</a>.  At this point, you could duplicate the Background Layer in order to preserve the original image before changing it.  However, I usually just make my basic changes on the background layer and then save the result as a separate file later, so the original is still preserved somewhere.  If you change your mind and want the original as a separate layer later, just do <strong>File &rarr; Open As Layers</strong> and import the original image.</p>
<p>Anyway, I&#8217;ve found that most of my pictures look better after an <strong>Unsharp Mask</strong>.  Just do: <strong>Filters &rarr; Enhance &rarr; Unsharp Mask</strong> as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Unsharp_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Unsharp_Mask-450x435.png" alt="Unsharp Mask" title="Unsharp Mask" width="450" height="435" class="aligncenter size-medium wp-image-1026" /></a></p>
<p>In the Unsharp Mask dialog that will pop up, I almost always stick to the defaults.</p>
<p>Next, let&#8217;s change the brightness of the image.  Don&#8217;t use the Brightness/Contrast tool though, use either <strong>Levels</strong> or <strong>Curves</strong>.  I&#8217;m pretty sure they do the same things, but I&#8217;ve found the <strong>Levels</strong> tool to be easier to use.  Go to <strong>Colors &rarr; Levels</strong> and this dialog will pop up:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Edit_Levels.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Edit_Levels-450x374.png" alt="Edit Levels" title="Edit Levels" width="450" height="374" class="aligncenter size-medium wp-image-1015" /></a></p>
<p>Make the image brighter or darker with the <strong>Gamma</strong> slider, which is the middle slider for the Input Levels control.  In this case, I thought it looked better a little brighter.  It&#8217;s all up to you.  Sometimes, the ideal gamma setting is right under the highest point of the biggest curve in the graph, but only if you&#8217;ve taken an excellent photo (doesn&#8217;t happen to me often).</p>
<p>Usually, the next thing I do is increase the color saturation.  Go to <strong>Color &rarr; Hue-Saturation</strong> and try it out:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Saturation_Makes_Skin_Orange.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Saturation_Makes_Skin_Orange-450x281.png" alt="Saturation Makes Skin Orange" title="Saturation Makes Skin Orange" width="450" height="281" class="aligncenter size-medium wp-image-1023" /></a></p>
<p>In this case, extreme color saturation is making the subject&#8217;s skin orange.  I do like how it looks in the background though.  How can we apply color saturation to the background but not the foreground?  Well, that&#8217;s the whole point of this tutorial.  If we can select the foreground, we will be able to invert the selection and apply color saturation to the background without messing up the foreground.  Cancel the Hue-Saturation changes and read on to learn how.</p>
<h3><span class="green"><a name="quick">Select the Foreground With a Quick Mask</a></span></h3>
<p>In GIMP, if you want to make certain parts of a layer transparent by using the drawing/painting tools, you can use a <strong>Layer Mask</strong> (I&#8217;ll cover that later).  However, you can use the same techniques to carefully design a selection with a <strong>Quick Mask</strong>.  Although there is also a <strong>Free Select Tool</strong> and a <strong>Scissors Select Tool</strong>, those tools do not offer enough precision to avoid noticeable overlaps between foreground and background after editing.  The <strong>Quick Mask</strong> allows you to draw the selection yourself, and if you make a mistake, just draw over it with the opposite color.  You start a <strong>Quick Mask</strong> by clicking on the <strong>Toggle Quick Mask</strong> button:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Toggle_Quick_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Toggle_Quick_Mask.png" alt="Toggle Quick Mask" title="Toggle Quick Mask" width="329" height="91" class="aligncenter size-full wp-image-1025" /></a></p>
<p>Assuming you hadn&#8217;t already selected an area before starting the Quick Mask, the entire image should now appear pink.  The next step is to head to the <strong>Toolbox</strong> dialog, pick a painting/drawing tool (I like the pencil), adjust the scale until your brush is the right size, and make sure your foreground and background colors are set to black and white.  The easy way to reset your foreground/background colors if you&#8217;ve picked different colors recently is to click on the black and white icon:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Reset_Colors.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Reset_Colors.png" alt="Reset Colors" title="Reset Colors" width="160" height="83" class="aligncenter size-full wp-image-1031" /></a></p>
<p>The idea is to paint in black and white, then click on the <strong>Toggle Quick Mask</strong> button again to turn it into a selection.  Don&#8217;t worry, you&#8217;re not altering the image itself.  Pink areas are <strong>not</strong> selected.  Use <strong>white</strong> to color in the areas you want to select.  If you mess up, draw back over the area with black (which will turn the area pink).  Confusing?  Just start playing with it and you&#8217;ll get it.  You can switch colors easily by pressing <strong>x</strong>.  I usually crank up the scale on my brush and start with a rough outline of my selection:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Rough_Quick_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Rough_Quick_Mask-450x208.png" alt="Rough Quick Mask" title="Rough Quick Mask" width="450" height="208" class="aligncenter size-medium wp-image-1022" /></a></p>
<p>Next, zoom in (use <strong>+</strong> to zoom in and <strong>-</strong> to zoom out) and start painting the details.  If you hold shift, you can draw a straight line from the last point you painted to the current location.  I use this feature constantly, as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Edit_Quick_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Edit_Quick_Mask-450x211.png" alt="Edit Quick Mask" title="Edit Quick Mask" width="450" height="211" class="aligncenter size-medium wp-image-1016" /></a></p>
<p>You can finish the entire selection as stated above, but I find it easier to paint over the foreground instead of painting over the background, so I&#8217;m going to invert the whole thing.  Click on the <strong>Toggle Quick Mask</strong> button to turn it back into a selection, then do <strong>Selection &rarr; Invert</strong> as shown below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Invert_Quick_Mask_Selection.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Invert_Quick_Mask_Selection-450x253.png" alt="Invert Quick Mask Selection" title="Invert Quick Mask Selection" width="450" height="253" class="aligncenter size-medium wp-image-1019" /></a></p>
<p>You wont actually see anything change when you do this, but the difference will be apparent when you start your Quick Mask again.  Hit the <strong>Toggle Quick Mask</strong> button, and you&#8217;ll notice that the pink areas are now over the foreground, and you can finish the details by painting the edges of the subject with black.  Note that doing it this way is backwards, so what you&#8217;re actually doing is selecting the background.  About 5-10 minutes later, you&#8217;ll have something like this:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Finished_Quick_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Finished_Quick_Mask-450x693.png" alt="Finished Quick Mask" title="Finished Quick Mask" width="450" height="693" class="aligncenter size-medium wp-image-1018" /></a></p>
<p>Now what?  I guess we could get on to selectively editing the photo, but I learned a long time to <strong>ALWAYS SAVE YOUR SELECTIONS!</strong>, at least if you had to work hard for them.  There are actually a couple methods to do this, so I devoted a whole section to it.  It&#8217;s the section just below this one.  Stay with me, I wont make this painful.</p>
<h3><span class="green"><a name="save">Two Ways to Save a Selection</a></span></h3>
<p>The easy way to save a selection is to do <strong>Select &rarr; Save to Channel</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Save_Selection_To_Channel.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Save_Selection_To_Channel.png" alt="Save Selection To Channel" title="Save Selection To Channel" width="376" height="471" class="aligncenter size-full wp-image-1024" /></a></p>
<p>After you do this, the <strong>Channels</strong> tab will automatically open up in the Layers Dialog.  I make a habit of renaming the selection so I don&#8217;t forget which is which.  You can rename it by right-clicking and selecting <strong>Edit Channel Attributes</strong> (the only option is to rename it, so why not call it <strong>Rename</strong>?).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Rename_Selection_Channel.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Rename_Selection_Channel.png" alt="Rename Selection Channel" title="Rename Selection Channel" width="328" height="305" class="aligncenter size-full wp-image-1021" /></a></p>
<p>That&#8217;s all there is to the first method.  If you wanted to retrieve the selection later, just go back to the Channels tab, right-click on the selection, and select <strong>Channel to Selection</strong>.  For now, though, to get back to normal operations, you need to click back to the Layers tab.</p>
<p>The second way to save a selection is to actually duplicate it in a separate layer.  I prefer this sometimes just because it&#8217;s easier to see what exactly has been selected.  The first thing we need for this process is a copy of the first layer.  This is easy with the <strong>Duplicate</strong> button:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Duplicate_Background.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Duplicate_Background.png" alt="Duplicate Background" title="Duplicate Background" width="370" height="312" class="aligncenter size-full wp-image-1014" /></a></p>
<p>Next, it&#8217;s a good habit to keep track of your layers with appropriate names.  Right click on the new layer, select <strong>Edit Layer Attributes</strong>, and name it whatever you want.  I picked <strong>Quick Mask Selection</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Rename_Layer.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Rename_Layer.png" alt="Rename Layer" title="Rename Layer" width="320" height="82" class="aligncenter size-full wp-image-1020" /></a></p>
<p>By default, if you click <strong>Delete</strong> while an area is selected in GIMP, that area will turn white.  However, if you have added an <strong>Alpha Channel</strong> to the layer, each pixel can now store a transparent value in addition to the standard Red, Green, and Blue.  After adding an alpha channel, clicking <strong>Delete</strong> will turn an area transparent (visualized by gray checkered squares).  Add an Alpha Channel by right-clicking on the layer and selecting <strong>Add Alpha Channel</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Add_Alpha_Channel.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Add_Alpha_Channel.png" alt="Add Alpha Channel" title="Add Alpha Channel" width="326" height="700" class="aligncenter size-full wp-image-1013" /></a></p>
<p>Now, assuming you&#8217;ve done everything exactly as I have, all you need to do is click <strong>Delete</strong>, and the entire background will become transparent.  However, if you still have the foreground selected, just invert the selection and then click <strong>Delete</strong>.  Here&#8217;s how it should look:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Quick_Mask_Selection.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Quick_Mask_Selection-450x713.png" alt="Quick Mask Selection" title="Quick Mask Selection" width="450" height="713" class="aligncenter size-medium wp-image-1030" /></a></p>
<p>Are the selection lines distracting to look at?  I think so to, so I usually do <strong>Select &rarr; All</strong> (or <strong>Ctrl + A</strong>) to select the entire layer and remove the selection lines from my foreground.  But wait, how do I get my selection back now!?  Well, you can always try <strong>Undo</strong>, but if you&#8217;ve done a lot of work since then, it will all be undone.  No, there is a much easier way.  Just right-click on the layer and choose <strong>Alpha to Selection</strong>.  This will select only the colored areas, and since the background is now transparent, it will result in selecting only the foreground.</p>
<p>Well, that&#8217;s it for saving selections.  Next, let&#8217;s take a quick look at why I wrote this tutorial in the first place&#8230; the <strong>Foreground Select Tool</strong> stinks.</p>
<h3><span class="green"><a name="worthless">Demonstrate Why the Foreground Select Tool Is Worthless</a></span></h3>
<p>I was going to post directions on how to use the <strong>Foreground Select Tool</strong> here, but I&#8217;m a little low on motivation and my whole point is that you shouldn&#8217;t use it anyway.  I&#8217;ll just show you the result I got with it below.  Although it&#8217;s a start, you&#8217;d need to refine the borders by hand for virtually every part of the foreground, so how&#8217;s that any different from what we did above?  I prefer to start with a clean slate if I&#8217;m going to have to do all the work myself anyway.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Foreground_Select_Tool_results.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Foreground_Select_Tool_results-450x703.png" alt="Foreground Select Tool Results" title="Foreground Select Tool Results" width="450" height="703" class="aligncenter size-medium wp-image-1036" /></a></p>
<p>Maybe in the future this tool will improve, but for now it&#8217;s not nearly good enough for me.  However, the following technique does occasionally pay off and save me a lot of time painting everything by hand.</p>
<h3><span class="green"><a name="threshold">Easier Foreground Selection With Threshold and a Layer Mask</a></span></h3>
<p>I&#8217;m guessing some of you were appalled by the amount of work you have to do to select a foreground manually.  The good news is that there is a technique which may help you, and sometimes it may help you an <strong>aweful</strong> lot.  The bad news is that sometimes it doesn&#8217;t help at all.  In this case, it was partially successful in selecting the foreground.  It offers a small amount of improvement in my original selection, but not a lot.  However, if the subject in this photo had more hair, I believe this technique would have been <strong>essential</strong> to making a good foreground selection.  If you&#8217;ve ever tried to color in someone&#8217;s hair manually, you know that it&#8217;s nearly impossible to do.  Using this technique, I have successfully created a convincing selection of someone&#8217;s hair numerous times.  In fact, I tailor my use of this technique for selecting hair, and I care little if anything else shows up well (the rest of the outline I can do myself easily, as we did above, but the hair is a <strong>pain</strong>!).  I usually <strong>start</strong> my selection process with this technique, and then edit the resulting Layer Mask just as we edited the Quick Mask above.  I decided to cover the Quick Mask technique first in this tutorial because it helps you learn the basics.</p>
<p>The first step is to create another copy of the <strong>Background</strong> layer, so that we don&#8217;t erase parts of the image we already edited.  We already learned how to do this, so I wont repeat myself here.  I named this new copy <strong>Saturation Select</strong>, but you can name it whatever you want.  Next, make sure you have either the Background layer selected or the copy we just made (either one, it doesn&#8217;t matter), and go to <strong>Colors &rarr; Components &rarr; Decompose</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Decompose_Layer.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Decompose_Layer.png" alt="Decompose Layer" title="Decompose Layer" width="412" height="576" class="aligncenter size-full wp-image-1037" /></a></p>
<p>You&#8217;ll see the following dialog box pop up.  Just stick to the default options as shown and click OK.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Decompose_To_Layers.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Decompose_To_Layers.png" alt="Decompose To Layers" title="Decompose To Layers" width="306" height="228" class="aligncenter size-full wp-image-1038" /></a></p>
<p>Next, GIMP will open a new image with three new layers that are grayscale representations of the red, green, and blue components of the image.  As you can see, this is a new image, so we can mess with this without altering the image we care about.  The first thing we need to do is choose which layer will suit our needs the best.  Click on the eye icon next to each layer to change its visibility (make it visible or invisible).  The only way to see the blue layer is to make the other two layers invisible, as I have done below.  The layer we want to keep is the one that shows the highest contrast between foreground and background.  In this case, the blue layer was the best, because the foreground is dark while the background is light (especially around the hair).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Decomposed_Image.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Decomposed_Image-450x344.png" alt="Decomposed Image" title="Decomposed Image" width="450" height="344" class="aligncenter size-medium wp-image-1039" /></a></p>
<p>Next, we are going to open the <strong>Threshold Tool</strong> by doing <strong>Colors &rarr; Threshold</strong> (while the blue layer of the decomposed image is selected).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Open_Threshold_Tool.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Open_Threshold_Tool-450x153.png" alt="Open Threshold Tool" title="Open Threshold Tool" width="450" height="153" class="aligncenter size-medium wp-image-1042" /></a></p>
<p>Play with both sliders of the Threshold Tool until you obtain a clear outline of the subject&#8217;s hair.  It doesn&#8217;t matter if the foreground is black or white, only that there&#8217;s a good outline (you can invert the colors later).  It also doesn&#8217;t matter if the rest of the outline looks good.  The hair is usually the hard part (although not in this case, thanks to the haircut).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Clear_Outline.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Clear_Outline-450x325.png" alt="Clear Outline" title="Clear Outline" width="450" height="325" class="aligncenter size-medium wp-image-1043" /></a></p>
<p>Now use a large brush and fill in the background so all that you have left to worry about is refining the foreground selection.  If you want to fill in large areas (and make sure you don&#8217;t miss small spots), use the Rectangle Select Tool and the Bucket Fill Tool.  Make sure the Bucket Fill Tool is set to <strong>Fill Whole Selection</strong>, and everything you have selected will turn white (or black, depending on which color the background turned out to be).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Outline.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Outline-450x718.png" alt="Outline" title="Outline" width="450" height="718" class="aligncenter size-medium wp-image-1044" /></a></p>
<p>Earlier in this tutorial, I mentioned that a <strong>Layer Mask</strong> is just like a Quick Mask, except that a Quick Mask is used to paint a selection, while you use a <strong>Layer Mask</strong> to paint transparency.  Well, the image above is going to be the beginning of a <strong>Layer Mask</strong> that we are going to apply to the new layer (the one I called Saturation Select).  In order to get this outline from its current location to our original image, we just copy it to the clipboard with <strong>Ctrl + C</strong>.  Then, we return to our original image, right-click on the new layer, and select <strong>Add Layer Mask</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Add_Layer_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Add_Layer_Mask-450x228.png" alt="Add Layer Mask" title="Add Layer Mask" width="450" height="228" class="aligncenter size-medium wp-image-1045" /></a></p>
<p>The Layer Mask defaults to white, and there&#8217;s no reason to change the default because we&#8217;re just going to paste in our own image anyway.  Once the Layer Mask is created, just make sure the new layer is selected and press <strong>Ctrl + V</strong> to paste in our outline.  Note that pasted images are inserted as a separate layer until they are anchored, so go ahead and click the <strong>Anchor</strong> button:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Anchor_Layer.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Anchor_Layer.png" alt="Anchor Layer" title="Anchor Layer" width="284" height="308" class="aligncenter size-full wp-image-1046" /></a></p>
<p>You&#8217;ll notice that since my foreground is black in the Layer Mask, it appears transparent in the result.  I can fix that with a simple <strong>Colors &rarr; Invert</strong>.  The only reason I am able to do that is because I have not <strong>Applied</strong> the Layer Mask (you can apply the mask from the right-click menu or from the Layer menu), so I am still able to edit it.  As a matter of fact, I can even change the Mode of this layer to Burn (or another similar mode of your choosing), make sure the Background layer is visible below it, and edit this Layer Mask the exact same way we did with the Quick Mask above.  That&#8217;s my usual method, in fact.  However, it isn&#8217;t necessary here, since we&#8217;ve already done most of the work.  This is what the rough outline looks like:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Layer_Mask_Result.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Layer_Mask_Result-450x700.png" alt="Layer Mask Result" title="Layer Mask Result" width="450" height="700" class="aligncenter size-medium wp-image-1047" /></a></p>
<p>If you need more contrast to see the fine details around the edges, just add an empty white layer to the bottom of the layer stack.  You can do this with the <strong>New Layer</strong> button, which is located to the left in the same area as the <strong>Duplicate</strong> button.</p>
<p>Now we need to combine the two foreground selections to get the best of both worlds.  The easiest way I can think of is to delete part of each selection layer and then merge the two together.  I wanted to keep my original Quick Mask Selection, though, so I Duplicated that first.  I didn&#8217;t care about the Layer Mask Selection (not as much work), so I just merged the original.</p>
<p>First off, we still need to finish our Layer Mask by applying the Layer Mask:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Apply_Layer_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Apply_Layer_Mask.png" alt="Apply Layer Mask" title="Apply Layer Mask" width="247" height="324" class="aligncenter size-full wp-image-1048" /></a></p>
<p>Now delete the parts of the Layer Mask selection that didn&#8217;t turn out well, and make a copy of the Quick Mask selection layer so you can delete part of that one too.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Getting_Reading_to_Merge_Selections.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Getting_Reading_to_Merge_Selections-450x120.png" alt="Getting Reading to Merge Selections" title="Getting Reading to Merge Selections" width="450" height="120" class="aligncenter size-medium wp-image-1049" /></a></p>
<p>Toggle the visibilities of the two layers back and forth until you can decide on the right area to delete from the Quick Mask selection so that there is only a small amount of overlap.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Getting_Reading_to_Merge_Selections_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Getting_Reading_to_Merge_Selections_2-450x155.png" alt="Getting Reading to Merge Selections" title="Getting Reading to Merge Selections" width="450" height="155" class="aligncenter size-medium wp-image-1050" /></a></p>
<p>Now make both layers visible and correct any obvious problems with the resulting foreground.  Then, merge them together:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Merge_Down.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Merge_Down-450x120.png" alt="Merge Down" title="Merge Down" width="450" height="120" class="aligncenter size-medium wp-image-1051" /></a></p>
<p>After merging, I renamed the resulting layer to Compiled Selection, and I saved it to a channel, just to be sure I didn&#8217;t lose it.  That&#8217;s it!  I know this process seems long, but once you know it well it goes fast (except for the part where you have to draw the outline by hand).</p>
<h3><span class="green"><a name="effects">Selectively Apply Effects Using Foreground Selection</a></span></h3>
<p>Finally, let&#8217;s put our foreground selection to good use.  Retrieve your selection, either by right-clicking on one of the selection layers and choosing <strong>Alpha to Selection</strong> or by right-clicking on one of your saved channels and selecting <strong>Channel to Selection</strong>.  Then, make sure your Background layer is selected and visible (and make the other layers invisible if they are above Background on the stack).  Finally, invert your selection if necessary to select the background instead of the foreground.  You can tell the difference by remembering that the animated selection border (the &#8220;marching ants&#8221;) will extend around all the layer borders when the background is selected, but only around the foreground when the foreground is selected.  Still can&#8217;t tell?  Just click the <strong>Toggle Quick Mask</strong> button twice to see what&#8217;s selected and then return to normal mode.  Once you&#8217;ve got it straight, open the <strong>Hue-Saturation</strong> tool again (<strong>Colors &rarr; Hue-Saturation</strong>).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Saturated_Background.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Saturated_Background-450x285.png" alt="Saturated Background" title="Saturated Background" width="450" height="285" class="aligncenter size-medium wp-image-1052" /></a></p>
<p>Much better, right?  Was it worth the work?  I think so.  It doesn&#8217;t take very long to do all this once you have some practice.  And it&#8217;s nice to have some lush greenery without any orange skin!</p>
<h3><span class="green"><a name="contrast">Contrast Mask to Remove Shadows From Foreground</a></span></h3>
<p>While we have this excellent foreground selection, let&#8217;s make use of it some more.  This time, let&#8217;s beef up the foreground instead of the background.  We&#8217;re going to apply what has been called a Contrast Mask, which I have discussed in detail <a href="http://greeennotebook.com/2010/07/brighten-a-dark-foreground-with-the-gimp-image-editor/">before</a>.</p>
<p>First, Duplicate the Background Layer, rename the copy to <strong>Contrast Mask</strong>, add an Alpha Channel, and delete the background (it should still be selected, so just press the <strong>Delete</strong> key).  If you don&#8217;t remember how to do these things, they have all been demonstrated earlier in this tutorial, so just search for the key words in your browser using <strong>Ctrl + F</strong>.  The next step is to Desaturate the Contrast Mask.  This is what your screen should look like so far:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Desaturate_Contrast_Mask.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Desaturate_Contrast_Mask-450x168.png" alt="Desaturate Contrast Mask" title="Desaturate Contrast Mask" width="450" height="168" class="aligncenter size-medium wp-image-1053" /></a></p>
<p>In the <strong>Desaturate</strong> dialog that follows, just choose the default mode (<strong>Lightness</strong>).  The next step is to invert the resulting grayscale foreground.  Just do <strong>Colors &rarr; Invert</strong>, and the result should be a nice bright glowing version of the subject of our photo.  We&#8217;re going to use this to brighten the shadowy parts of our subject by changing the mode of the Contrast Mask to <strong>Overlay</strong>.  For some reason, the Contrast Mask can make things look a little blurry unless you blur the mask itself, so do <strong>Filters &rarr; Gaussian Blur</strong> on the Contrast Mask.  I used 31.5 for my horizontal and vertical blur settings, but you can read my <a href="http://greeennotebook.com/2010/07/brighten-a-dark-foreground-with-the-gimp-image-editor/">other tutorial</a> for the details on the ideal Gaussian Blur settings.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Contrast_Mask_In_Action.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Contrast_Mask_In_Action-450x205.png" alt="Contrast Mask In Action" title="Contrast Mask In Action" width="450" height="205" class="aligncenter size-medium wp-image-1054" /></a></p>
<p>And finally, adjust the Contrast Mask layer to desired affect.  I usually choose to leave it at about 60%-70% opacity.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Adjust_Contrast_Mask_Opacity.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Adjust_Contrast_Mask_Opacity-450x211.png" alt="Adjust Contrast Mask Opacity" title="Adjust Contrast Mask Opacity" width="450" height="211" class="aligncenter size-medium wp-image-1055" /></a></p>
<h3><span class="green"><a name="final">Final Result</a></span></h3>
<p>Here it is!  The result:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/DSC01268_altered.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/DSC01268_altered-450x337.jpg" alt="Final Result" title="Final Result" width="450" height="337" class="aligncenter size-medium wp-image-1056" /></a></p>
<p>And here it is contrasted with the original:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/Final_Result.jpg"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/Final_Result-450x337.jpg" alt="Original Versus GIMPed Version" title="Original Versus GIMPed Version" width="450" height="337" class="aligncenter size-medium wp-image-1057" /></a></p>
<p>I hope you&#8217;ve learned something!  Happy editing.</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2010/12/best-way-to-select-foreground-with-gimp-a-photo-editing-tutorial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using a VPN in Ubuntu 10.10 (CryptoCloud aka TorrentFreedom)</title>
		<link>http://greeennotebook.com/2010/12/using-a-vpn-in-ubuntu-10-10-cryptocloud-aka-torrentfreedom/</link>
		<comments>http://greeennotebook.com/2010/12/using-a-vpn-in-ubuntu-10-10-cryptocloud-aka-torrentfreedom/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 22:47:06 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VPN]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=994</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2010/12/using-a-vpn-in-ubuntu-10-10-cryptocloud-aka-torrentfreedom/"><img align="left" hspace="5" width="77" height="75" src="http://greeennotebook.com/wp-content/uploads/2010/12/secure_connection.png" class="alignleft tfe wp-post-image" alt="VPN Indicator Icon" title="VPN Indicator Icon" /></a>Having trouble connecting to your VPN in Ubuntu 10.10?  I'll show you how to connect to CryptoCloud (previously TorrentFreedom) without downloading any software other than OpenVPN. <a href="http://greeennotebook.com/2010/12/using-a-vpn-in-ubuntu-10-10-cryptocloud-aka-torrentfreedom/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A VPN is a Virtual Private Network, and it creates an encrypted tunnel through the Internet, allowing for a secure connection between two private networks.  This allows you to access remote computer systems as if you were connected to them directly, and it also ensures that no one can eavesdrop.  One popular open-source VPN implementation is OpenVPN.  It&#8217;s a full-featured SSL VPN toolkit (<a href="http://openvpn.net/index.php/open-source/documentation/security-overview.html">security details here</a>).  In this tutorial, I&#8217;ll use OpenVPN on Ubuntu 10.10 to establish a VPN connection to one of the <a href="https://www.cryptocloud.com/producttour.php">CryptoCloud</a> servers (now a partner to Torrent Freedom), which also uses OpenVPN.  Cryptocloud is one of the higher-end paid VPN services ($17/month), but I paid for a month to try it out after reading <a href="http://filesharefreak.com/2008/10/18/total-anonymity-a-list-of-vpn-service-providers/">this comparison</a>.  It&#8217;s also one of the few services that caters to Linux users like me.  It has worked well so far, although I was unable to make the connection on a couple occasions (server was down?).</p>
<p>CryptoCloud distributes a client program that takes care of all the connection details for you.  They even have a version that works on Ubuntu, but Ubuntu 10.10 is not currently supported as of this writing.  What would be the point of writing this tutorial if it was that easy?</p>
<p>The first step, assuming you&#8217;re willing to sign on with CryptoCloud, is to pay for an account.  You can get one <a href="https://www.cryptocloud.com/index.php">here</a>.  Once you have established an account, log into the site.  In the members page, you&#8217;ll be able to see the following:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/download_config_files.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/download_config_files-450x235.png" alt="CryptoCloud - Download Configuration Files" title="CryptoCloud - Download Configuration Files" width="450" height="235" class="aligncenter size-medium wp-image-997" /></a></p>
<p>As you can see, the next step is to download the configuration files.  However, you should take a look at the country preferences first, as you&#8217;ll have to download a new configuration file after changing your country code preferences.  Anyway, when you&#8217;re ready, download the configuration files.  There will be four of them, and you should save them somewhere permanent.  Next, head to the GNOME Network Manager Applet and choose the option to <strong>Configure VPN</strong> (you can also do: <strong>System &rarr; Preferences &rarr; Network Connections &rarr; VPN</strong>).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/configure_vpn.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/configure_vpn-450x337.png" alt="GNOME Network Manager Applet - Configure VPN" title="GNOME Network Manager Applet - Configure VPN" width="450" height="337" class="aligncenter size-medium wp-image-995" /></a></p>
<p>The Network Manager is able to read the configuration file you downloaded, so just import the right settings from <strong>cryptocloud.conf</strong> as depicted below.  I learned this step from the <a href="http://blog.encryptica.com/2010/12/ubuntu-linux-10-10-instructions/">Encryptica Blog</a>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/import_from_cryptocloud_config.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/import_from_cryptocloud_config-450x152.png" alt="Import VPN Settings from CryptoCloud configuration file" title="Import VPN Settings from CryptoCloud configuration file" width="450" height="152" class="aligncenter size-medium wp-image-999" /></a></p>
<p>Since the Network Manager did all the work, all you have to do is add your User name and Password (leave the Private Key Password field blank!).  Also, make sure to keep your User name in all lowercase.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/edit_cryptocloud_vpn_authentication.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/edit_cryptocloud_vpn_authentication-450x498.png" alt="Edit CryptoCloud VPN Authentication" title="Edit CryptoCloud VPN Authentication" width="450" height="498" class="aligncenter size-medium wp-image-998" /></a></p>
<p>If you followed the steps above, you don&#8217;t need to look at the Advanced settings, but I opened them up anyway for future reference.  Before I learned about the import feature, it took me forever to learn I needed to enable LZO data compression.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/other_openvpn_settings.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/other_openvpn_settings-450x498.png" alt="Other OpenVPN settings" title="Other OpenVPN settings" width="450" height="498" class="aligncenter size-medium wp-image-1000" /></a></p>
<p>Now exit out of Network Connections and connect to CryptoCloud from the Network Manager Applet like this:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/connect_to_cryptocloud.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/connect_to_cryptocloud-450x355.png" alt="GNOME Network Manager Applet - Connect to CryptoCloud" title="GNOME Network Manager Applet - Connect to CryptoCloud" width="450" height="355" class="aligncenter size-medium wp-image-996" /></a></p>
<p>Watch your Network Manager Applet.  It should display a rotating semicircle while establishing the connection.  If successful, you should see this icon:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/12/secure_connection.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/12/secure_connection.png" alt="VPN Indicator Icon" title="VPN Indicator Icon" width="77" height="75" class="aligncenter size-full wp-image-1001" /></a></p>
<p>Now, your connection is secure!  To verify, head to <a href="http://www.whatsmyip.org/more/">WhatsMyIp.org</a> and look at the map.  Where does it look like you live now?  The Netherlands?  The UK?  Charlotte, NC?  It all depends on what you picked for your country preference.  Enjoy your secure connection!</p>
<p>Keep in mind that since you don&#8217;t have the fancy application, you&#8217;re going to have to re-download the <strong>cryptocloud.conf</strong> file every time your server&#8217;s IP address changes (I&#8217;m not sure how often that happens, but it&#8217;s somewhere between every couple days to every couple weeks) and also whenever you change your country preferences.  You&#8217;ll also have to repeat the other steps to reconfigure the connections settings after downloading the new configuration file.  You don&#8217;t need to update the rest of the files we downloaded initially, though, as those wont change.  If you desire, you can open up <strong>cryptocloud.conf</strong> and use it as a reference to configure your connection settings manually, using one of the other servers on the list.  Just pay attention because the settings are slightly different depending on whether you chose a TCP or UDP connection.</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2010/12/using-a-vpn-in-ubuntu-10-10-cryptocloud-aka-torrentfreedom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Clean up the &#8216;Open With&#8217; Menu in Ubuntu 10.10</title>
		<link>http://greeennotebook.com/2010/11/clean-up-the-open-with-menu-in-ubuntu-10-10/</link>
		<comments>http://greeennotebook.com/2010/11/clean-up-the-open-with-menu-in-ubuntu-10-10/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 21:24:02 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=943</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2010/11/clean-up-the-open-with-menu-in-ubuntu-10-10/"><img align="left" hspace="5" width="150" height="106" src="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_other_application-150x106.png" class="alignleft tfe wp-post-image" alt="GNOME &#039;Open With&#039; Menu" title="GNOME &#039;Open With&#039; Menu" /></a>Is your 'Open With' menu cluttered with duplicates and bad shortcuts?  See this guide to clean it up! <a href="http://greeennotebook.com/2010/11/clean-up-the-open-with-menu-in-ubuntu-10-10/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="#problem">The Problem</a></li>
<li><a href="#adding">Add Applications to the List</a></li>
<li><a href="#removing">Removing Applications from the List</a></li>
</ul>
<h3><span class="green"><a name="problem">The Problem</a></span></h3>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_other_application.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_other_application-150x106.png" alt="GNOME &#039;Open With&#039; Menu" title="GNOME &#039;Open With&#039; Menu" width="150" height="106" class="alignright size-thumbnail wp-image-946" /></a></p>
<p>Let&#8217;s say you&#8217;re trying to open a file with a specific application from the Nautilus file browser (or from the Desktop).  You want to choose yourself because when you double-click on the file, Ubuntu opens it with Gedit or another application you&#8217;re not interested in using right now.  But when you get to the <strong>Open With</strong> Menu, you have to navigate through duplicate applications and plain garbage to find the desired application (or to realize you need to add it to the list yourself).  Here&#8217;s a bunch of WINE crap in mine:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_menu_cluttered.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_menu_cluttered.png" alt="Cluttered &#039;Open With&#039; Menu" title="Cluttered &#039;Open With&#039; Menu" width="441" height="512" class="aligncenter size-full wp-image-945" /></a></p>
<p>And some duplicates:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_menu_duplicates.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_open_with_menu_duplicates.png" alt="Duplicates in &#039;Open With&#039; Menu" title="Duplicates in &#039;Open With&#039; Menu" width="440" height="512" class="aligncenter size-full wp-image-949" /></a></p>
<p>And finally, since I want to open my VBScript program with Notepad++, which I installed through WINE (works great by the way), I&#8217;m disappointed that Notepad++ isn&#8217;t even on my list!</p>
<h3><span class="green"><a name="adding">Adding Applications to the List</a></span></h3>
<p>Note: I haven&#8217;t actually figured out how to add applications to the <strong>Open With Other Application</strong> list, only to the <strong>Open With</strong> context menu for files with the right MIME-type.  If you know how to add to the <strong>Open With Other Application</strong> list, please let me know in the comments.  Anyway, since I&#8217;m trying to open my VBScript program with Notepad++, I&#8217;ll add that application for this example. First, we need to know the command to run Notepad++.  I usually figure that out by looking at the launcher I already have, in the Applications Menu.  Get to the Main Menu Editor easily by right-clicking on the Applications Menu:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_main_menu_editor.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/gnome_main_menu_editor.png" alt="GNOME Main Menu Editor" title="GNOME Main Menu Editor" width="189" height="164" class="aligncenter size-full wp-image-955" /></a></p>
<p>Once in the Main Menu Editor, find Notepad++ and click on Properties.  Then, you can copy the command.  Also, click on the image to see where the icon is saved.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/launcher_properties_in_menu_editor.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/launcher_properties_in_menu_editor-450x372.png" alt="Get Command from Launcher Properties" title="Get Command from Launcher Properties" width="450" height="372" class="aligncenter size-medium wp-image-956" /></a></p>
<p>At this point, it&#8217;s important that you know where Ubuntu keeps all the application launchers: <strong>~/.local/share/applications/</strong> and <strong>/usr/share/applications/</strong>.  I don&#8217;t have any reason to hide my applications from other users, so I&#8217;ll be adding to the <strong>/usr/share/applications/</strong> folder.  I&#8217;ll show you a single example of how to add a launcher, but I&#8217;ll not cover much of the specific options.  For more details, go to <a href="http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html">Desktop Entry Specification</a>.  First, create a file with the <strong>.desktop</strong> extension in the applications folder:</p>
<pre>
<span class="prompt">~$</span> sudo gedit /usr/share/applications/notepad++.desktop
</pre>
<p>Customize your launcher options to your liking.  For specifics, see <a href="http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html">Desktop Entry Specification</a>, and to see preferred categories, see <a href="http://standards.freedesktop.org/menu-spec/latest/apa.html">Registered Categories</a>:</p>
<pre>
[Desktop Entry]
Encoding=UTF-8
Name=Notepad++
Comment=Awesome Windows Text Editor
GenericName=Text Editor
Exec=env WINEPREFIX="/home/greeenguru/.wine" wine C:\\windows\\command\\start.exe /Unix /home/greeenguru/.wine/dosdevices/c:/users/Public/Start\ Menu/Programs/Notepad++/Notepad++.lnk %U
Terminal=false
Type=Application
Icon=/home/greeenguru/.local/share/icons/33E8_notepad++.0.png
Categories=Development;
MimeType=text/plain;
</pre>
<p>Now do this to make the launcher executable:</strong></p>
<pre>
<span class="prompt">~$</span> sudo chmod +x /usr/share/applications/notepad++.desktop
</pre>
<p>Of course, instead of the steps above, you can always use the GUI to add a launcher to the Desktop (right-click on the Desktop and select <strong>Create Launcher</strong>), then copy it to the /usr/share/applications folder.  For that matter, you could also drag one of the launchers from your application menu directly into Nautilus while it&#8217;s open (as root) to /usr/share/applications.  However, when you copy the launcher like that, you&#8217;ll need to ensure that all the paths were full paths and not relative paths, and you also need to make sure that the MimeType attribute is correctly specified.  Drag the launcher into Gedit to check.</p>
<p><strong>Important Note:</strong>  If the <strong>Exec</strong> command to launch your application does not end in <strong>%U</strong>, then add that to the end of the command.  <strong>%U</strong> will substitute a URL or filename.  Without <strong>%U</strong>, you&#8217;ll still be able to use the launcher to open the application, but when you try to open a specific file with that application from the <strong>Open With</strong> menu, nothing happens.</p>
<p>I&#8217;ve tried this procedure several times, and I haven&#8217;t been able to figure out what, exactly, triggers the context menu to update with your newly added application.  It didn&#8217;t update after logging out and then logging back in again, it didn&#8217;t update with <strong>sudo update-desktop-database</strong>, and it didn&#8217;t update when restarting nautilus (<strong>sudo killall nautilus</strong>), but at some point after playing with the main menu, I looked again and it was magically there!  If you can fill in this gap, please let me know in the comments.  <del datetime="2010-11-29T00:08:50+00:00">That being said, I can tell for sure that you can force it by editing <strong>/usr/share/applications/mimeinfo.cache</strong>.  Which line to edit depends on what application you&#8217;re adding and which MIME-types you would like it to be able to open.  Since I want mine to open plain text files, I added my application to the tex/plain MIME-type line as follows:</del></p>
<pre>
<del datetime="2010-11-29T00:08:50+00:00">text/plain=gedit.desktop;openoffice.org-writer.desktop;notepad++.desktop;</del>
</pre>
<p><strong>Update:</strong> Instead of editing <strong>mimeinfo.cache</strong>, get Ubuntu Tweak <strong>sudo apt-get install ubuntu-tweak</strong> and change the file associations with the provided tools.  Much easier and safer!</strong></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/customize_file_associations_with_Ubuntu_Tweak.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/customize_file_associations_with_Ubuntu_Tweak-450x196.png" alt="Customize File Associations with Ubuntu Tweak" title="Customize File Associations with Ubuntu Tweak" width="450" height="196" class="aligncenter size-medium wp-image-977" /></a></p>
<p>That&#8217;s it.  You should now be able to files with your application from the right-click menu.  That&#8217;s a big convenience, and very satisfying.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/modified_open_with_context_menu.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/modified_open_with_context_menu.png" alt="Modified Context Menu" title="Modified Context Menu" width="336" height="139" class="aligncenter size-full wp-image-969" /></a></p>
<h3><span class="green"><a name="removing">Removing Applications From the List</a></span></h3>
<p>This is actually much easier than I thought originally.  Just delete the garbage from the <strong>Main Menu Editor</strong>.  Most of it is found in the <strong>Other</strong> category.  If you&#8217;ve ever tried to open a file by opening its context menu, choosing <strong>Open With Other Application</strong>, and specifying a custom command, the application you chose will appear in your Main Menu under the <strong>Other</strong> category.  Anyway, just delete the stuff you <strong>KNOW</strong> is garbage or you&#8217;ll never need a launcher for.  You&#8217;re not actually deleting applications, just launchers.  Often, an application is listed under two different categories, causing it to display twice in the <strong>Open With Other Application</strong> list.  Just make sure that both launchers use the same command (look in the properties), and then choose one to delete.
<p><strong>Disclaimer:</strong> Be careful what you delete from your Main Menu.  I went hog-wild and it caused some problems for me (<strong>Places</strong> menu completely non-functional and Compiz requires reload every time I log in).  I&#8217;d be more specific, but I&#8217;m not exactly sure what I changed to cause these bugs.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/delete_garbage_applictions_from_main_menu_editor.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/delete_garbage_applictions_from_main_menu_editor-450x373.png" alt="Delete Garbage From Main Menu Editor" title="Delete Garbage From Main Menu Editor" width="450" height="373" class="aligncenter size-medium wp-image-968" /></a></p>
<p>After you&#8217;ve carefully deleted garbage from your Main Menu, check out the <strong>Open With Other Application</strong> list.  I&#8217;m sure you&#8217;ll be pleasantly surprised.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/11/modified_open_with_other_application_menu.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/11/modified_open_with_other_application_menu.png" alt="Modified Open With Other Application Menu" title="Modified Open With Other Application Menu" width="438" height="510" class="aligncenter size-full wp-image-970" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2010/11/clean-up-the-open-with-menu-in-ubuntu-10-10/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Customize Your Fresh Ubuntu 10.10 Maverick Meerkat Installation</title>
		<link>http://greeennotebook.com/2010/10/customize-your-fresh-ubuntu-10-10-maverick-meerkat-installation/</link>
		<comments>http://greeennotebook.com/2010/10/customize-your-fresh-ubuntu-10-10-maverick-meerkat-installation/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 14:16:57 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=902</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2010/10/customize-your-fresh-ubuntu-10-10-maverick-meerkat-installation/"><img align="left" hspace="5" width="150" src="http://greeennotebook.com/wp-content/uploads/2010/10/Maverick_Meerkat_screenshot-450x281.png" class="alignleft wp-post-image tfe" alt="Screenshot of Maverick Meerkat running Compiz" title="Screenshot of Maverick Meerkat running Compiz" /></a>If you've just installed Ubuntu 10.10 and want to do some tweaking to make your new OS more functional and to <strong>look</strong> new, then this walkthrough is for you. <a href="http://greeennotebook.com/2010/10/customize-your-fresh-ubuntu-10-10-maverick-meerkat-installation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve just installed Ubuntu 10.10 and want to do some tweaking to make your new OS more functional and to <strong>look</strong> new, then this walkthrough is for you.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/10/Maverick_Meerkat_screenshot.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/10/Maverick_Meerkat_screenshot-450x281.png" alt="Screenshot of Maverick Meerkat running Compiz" title="Screenshot of Maverick Meerkat running Compiz" width="450" height="281" class="aligncenter size-medium wp-image-932" /></a></p>
<ul>
<li><a href="#install">Installation Gotcha</a></li>
<li><a href="#update">Update Ubuntu and Install New Software</a></li>
<li><a href="#video">Install Video Driver</a></li>
<li><a href="#compiz">Setup Compiz</a></li>
<li><a href="#cairo">Setup Cairo-Dock</a></li>
<li><a href="#evolution">Setup Evolution</a></li>
<li><a href="#firefox">Setup Firefox</a></li>
<li><a href="#login">Change Login Screen With Ubuntu Tweak</a></li>
<li><a href="#finished">Conclusion</a></li>
</ul>
<h3><span class="green"><a name="install">Installation Gotcha</a></span></h3>
<p>The installer is outstanding, but there is one problem with it.  You might get to this screen and get stuck:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/10/Meerkat_installer_stuck.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/10/Meerkat_installer_stuck-450x339.png" alt="Meerkat Installer Stuck" title="Meerkat Installer Stuck" width="450" height="339" class="aligncenter size-medium wp-image-991" /></a></p>
<p>Why isn&#8217;t the <strong>Forward</strong> button enabled?  My status bar says it&#8217;s ready when I am, and I am ready!  I thought there was something wrong with my bootable USB, and I must have re-tried this installation 5 times before I realized what was wrong.  Then, I felt like a total idiot.  The installer does not allow capitalization in the username (or spaces, for that matter).  As you can see in the next image, it will display a green check-mark when your username is valid.  However, it doesn&#8217;t display a red X when your username is invalid.  A friggin X would have saved me hours!</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/10/Meerkat_installer_un-stuck.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/10/Meerkat_installer_un-stuck-450x339.png" alt="Meerkat Installer un-stuck" title="Meerkat Installer un-stuck" width="450" height="339" class="aligncenter size-medium wp-image-992" /></a></p>
<h3><span class="green"><a name="update">Update Ubuntu and Install New Software</a></span></h3>
<p>The installer will ask you if you want to include updates in the installation process, but for some reason, the Update Manager will still pop up after installation with some more updates for you.  You can install these updates via the Update Manager, but then you&#8217;ll have to wait for them to finish installing before you&#8217;re able to start downloading any new software.  I recommend installing updates via the Synaptic Package Manager instead.  Just open Synaptic from the <strong>System &rarr; Administration</strong> menu and click the <strong>Mark All Upgrades</strong> button, then proceed to mark any other packages you want before clicking <strong>Apply</strong> to begin the installation.  Here is a list of packages I downloaded right away:</p>
<ul>
<li><em>audacity</em> &#8211; Very nice multi-track audio editor</li>
<li><del datetime="2011-04-28T14:04:44+00:00"><em>cairo-dock</em> &#8211; Excellent dock for application launching/management.  Great eye-candy.  I believe it&#8217;s far superior to Docky and AWN, which are similar.  Installation details are found at the <a href="http://www.glx-dock.org/ww_page.php?p=ppa%20Weekly&#038;lang=en">Cairo-Dock/Glx-Dock repository page</a>, but if you just want the most up-to-date version, add the repository: <strong>sudo add-apt-repository ppa:cairo-dock-team/weekly/ubuntu</strong></del> Simply no longer a fan of any dock.</li>
<li><del datetime="2011-04-28T14:04:44+00:00"><em>cairo-dock-plug-ins</em> &#8211; Plugins for Cairo-Dock.  Add the repository first as described above.</del></li>
<li><em>chromium-browser</em> &#8211; The base for Google Chrome, for when I don&#8217;t feel like using Firefox</li>
<li><em>clamtk</em> &#8211; GUI front-end for ClamAV (antivirus), just to avoid passing along Windows viruses.</li>
<li><em>compiz-fusion-plugins-extra</em> &#8211; Compiz provices excellent Desktop Eye-Candy Effects.  This is a collection of extra plugins for Compiz from OpenCompositing.</li>
<li><em>compizconfig-settings-manager</em> &#8211; The GUI Tool for managing Compiz Desktop Effects</li>
<li><em>faenza-icon-theme</em> &#8211; Nice set of icons for theme customization.  Add the repository first: <strong>sudo add-apt-repository ppa:tiheum/equinox</strong>.  After installation, go to <strong>System &rarr; Preferences &rarr; Appearance</strong>, choose a Theme, click <strong>Customize</strong>, go to the <strong>Icons</strong> tab, and choose either <strong>Faenza</strong> or <strong>Faenza Dark</strong>.</li>
<li><em>firefox4</em> &#8211; As of late April, 2011, this is not available in the Ubuntu repositories, so add the mozilla repository with <strong>sudo add-apt-repository ppa:mozillateam/firefox-stable</strong>.</li>
<li><em>firestarter</em> &#8211; Easy-to-use firewall software.</li>
<li><em>freefilesync</em> &#8211; Excellent backup solution and GUI for rsync.  Add the repository with <strong>sudo add-apt-repository ppa:freefilesync/ffs</strong></li>
<li><em>gimp</em> &#8211; Image editor, rival to Photoshop</li>
<li><em>googleearth-package</em> &#8211; Utility to automatically build a Debian package of Google Earth.  I wasn&#8217;t able to install Google Earth using the binary they offer from their website for some reason, but this utility worked perfectly.  After installation, just do: <strong>make-googleearth-package &#8211;force</strong>, and it will create a Debian package from the current Google Earth binary, saving it to the current directory.  Afterwards, you can install like this: <strong>sudo dpkg -i ./googleearth_5.2.1.1588+0.5.7-1_i386.deb</strong> (but the name might be different for you).  If it doesn&#8217;t launch after this, try installing <strong>lsb-core</strong> (<strong>sudo apt-get install lsb-core</strong>) and attempt to launch again.  That last step was necessary for me.</li>
<li><em>handbrake-gtk</em> &#8211; Outstanding video encoder.  When you have VLC installed, you can also use for personal DVD backups.  Add John Stebbins&#8217; PPA with <strong>sudo add-apt-repository ppa:stebbins/handbrake-releases</strong></li>
<li><em>hugin</em> &#8211; Panorama creator, works great when you learn how to use it.  Get the most up-to-date version from the repo: <strong>sudo add-apt-repository ppa:hugin/hugin-builds</strong>, then update (<strong>sudo apt-get update</strong>), then install: <strong>sudo apt-get install hugin autopano-sift libpano13-dev</strong></li>
<li><em>lastfm</em> &#8211; Very nice music player for Last.fm personalized radio.  I know what you&#8217;re thinking, but the Rhythmbox implementation of this is terrible and broken.</li>
<li><em>libdvdread4</em> &#8211; Library for reading DVDs.  After installation, you&#8217;ll have to do <strong>sudo /usr/share/doc/libdvdread4/install-css.sh</strong>, and then you should be able to play DVDs from the disc using your default video player.  VLC can read the movie without this package, but I like running the default player.</li>
<li><em>nautilus-dropbox</em> &#8211; Excellent file syncing application which is cross-platform and free of the bugs that plague Ubuntu One.  I can&#8217;t remember exactly how I added the dropbox repository, so go here for more up-to-date information: <a href="http://www.dropbox.com/downloading?os=lnx">Download Dropbox</a></li>
<li><em>panini</em> &#8211; A fantastic panoramic viewer, and the only good one that is stable in Linux.  It&#8217;s not in the repos, unfortunately.  These build instructions worked perfectly though: <a href="http://wiki.panotools.org/Hugin_Compiling_ubuntu#Panini_Perspective_Tool">PanoTools Wiki Panini Install Walkthrough</a>.  Then you can get their icon and usage tips at the <a href="http://www.flickr.com/groups/panini/">Flickr Panini Group</a> page.</li>
<li><em>p7zip-full</em> &#8211; The Unix port of 7-Zip, a very nice file archiver.</li>
<li><em>skype</em> &#8211; VOIP and IM client <em>(the Canonical repository has nearly the latest version)</em></li>
<li><em>sun-java6-fonts</em> &#8211; Make your Java programs look nicer with the right fonts.  <span class="red">Update &#8211; you now have to enable partner repositories first</span></li>
<li><em>sun-java6-jre</em> &#8211; The Sun Java Runtime Environment for running Java applications.  You should already have one installed, but this is the official Sun version, which I prefer.  To make this one the default JRE, run this after installation: <strong>sudo update-java-alternatives -s java-6-sun</strong>. <span class="red">Update &#8211; you now have to enable partner repositories first</span></li>
<li><em>sun-java6-plugin</em> &#8211; Enables Java applets in your browser.  Here&#8217;s the trick: you have to <strong>remove icedtea6-plugin</strong> for your browser to use this Sun applet instead.  I&#8217;ve had all kinds of problems with Iced Tea, but the Sun version works great.  <span class="red">Update &#8211; you now have to enable partner repositories first</span></li>
<li><del datetime="2011-04-28T14:04:44+00:00"><em>sync-ui</em> &#8211; This is the GUI to go along with syncevolution.</del> Now I use Thunderbird, and I haven&#8217;t synced my phone like this in a LONG time</li>
<li><del datetime="2011-04-28T14:04:44+00:00"><em>syncevolution</em> &#8211; Evolution data synchronization program.  I use it to sync contacts between my Nokia phone and Evolution.</del></li>
<li><em>thunderbird</em> &#8211; Thunderbird mail client.  I like this much better than Evolution.  The only down side is there&#8217;s no built-in calendar, but you can add that with the next package.</li>
<li><em>xul-ext-lightning xul-ext-gdata-provider</em> &#8211; Mozilla Calendar extension for Thunderbird along with an extension to provide Google Calendar support.  Supports sync with Google Calendar even for 64-bit Ubuntu systems (It&#8217;s worth noting that at the time of this writing I can&#8217;t get this to work with Microsoft Outlook 2010 even with the dedicated Google Calendar Sync application because there&#8217;s no 64-bit support, but the free alternative doesn&#8217;t have any problems :)</li>
<li><em>tuxpaint</em> &#8211; A paint program for the kids.</li>
<li><em>ubuntu-restricted-extras</em> &#8211; A must-have.  Contains many gstreamer plugins, microsoft fonts, a java runtime environment and browser plugin, a flash plugin, LAME (for MP3 encoding), and DVD playback (libavcodec-extra-52).</li>
<li><em>ubuntu-tweak</em> &#8211; Nice Ubuntu Configuration Tool.  Make sure you add the repository first: <strong>sudo add-apt-repository ppa:tualatrix/ppa</strong></li>
<li><em>vlc</em> &#8211; Multimedia player that can play <strong>anything</strong>.  The newest version is only available through the repository to the newest Ubuntu version.  If you have an older version of Ubuntu but you want the most updated version of VLC, then try <strong>sudo add-apt-repository ppa:gnome-media-player-development/development</strong>, then <strong>sudo apt-get update</strong> and <strong>sudo apt-get install vlc mozilla-plugin-vlc</strong></li>
<li><em>wine1.3</em> &#8211; For when you need to run Windows applications on Linux.  Make sure you add the repository first: <strong>sudo add-apt-repository ppa:ubuntu-wine/ppa</strong></li>
<li><em>xchm</em> &#8211; a viewer for Compiled HTML Help (CHM) files, a common ebook format.</li>
</ul>
<h3>Software for Python and Java Programmers</h3>
<ul>
<li><em>eclipse</em> &#8211; Java IDE.  I wouldn&#8217;t recommend installing this from the repository.  Follow <a href="http://greeennotebook.com/2010/09/eclipse-cc-cdt-python-pydev-and-qt-qt4-plugins-installation-tutorial-for-ubuntu-10-04/">these instructions</a> instead for the latest version.</li>
<li><em>ghex</em> &#8211; Hex editor, for fellow nerds</li>
<li><em>idle-python2.6</em> &#8211; Python interpreter GUI, for Python programmers.</li>
<li><em>python-gtk2</em> &#8211; GTK+ support for Python</li>
<li><em>python-gtk2-doc</em> &#8211; pyGTK documentation.  It will be located at <strong>/usr/share/doc/python-gtk2-doc/html/index.html</strong> after installation.</li>
<li><em>python-imaging-doc</em> &#8211; The Python Imaging Library (PIL) comes installed by default (python-imaging), but here is the documentation, which will be located at <strong>/usr/share/doc/python-imaging-doc/index.html</strong></li>
<li><em>python-mutagen</em> &#8211; Audio metadata editing library.</li>
<li><em>python-pyexiv2</em> &#8211; Python binding to Exiv2, allows manipulation of image metadata.  This package comes with documentation that you can find at <strong>/usr/local/share/doc/pyexiv2/index.html</strong>.  I recommend getting the latest version from the PPA: <strong>sudo add-apt-repository ppa:pyexiv2-developers/ppa</strong>, then update before installing the package.</li>
<li><em>python-pygments</em> &#8211; Syntax highlighting package</li>
<li><em>python-pypcap</em> &#8211; Python interface for libpcap</li>
<li><em>python-wxgtk2.8</em> &#8211; Python bindings for wxWidgets GUI toolkit</li>
<li><em>python2.6-doc</em> &#8211; Python documentation, which will be located at <strong>/usr/share/doc/python2.6/html/index.html</strong></li>
<li><em>sun-java6-jdk</em> &#8211; Development Environment for building Java programs, for Java programmers.  <span class="red">Update &#8211; you now have to enable partner repositories first</span></li>
<li><em>texlive-latex-base</em> &#8211; LaTeX support, includes pdflatex for conversion of LaTeX to PDF</li>
<li><em>wx2.8-examples</em> &#8211; Excellent wxPython Demo, which you can find at <strong>/usr/share/doc/wx2.8-examples/examples/wxPython/demo.py</strong> after installation.</li>
</ul>
<p>Note:  I like to keep programming language references available on my hard drive.  If you&#8217;re interested in the quick way to create access Python documentation, see <a href="http://greeennotebook.com/2010/06/get-python-documentation-for-ubuntu-10-04/">Get Python Documentation for Ubuntu 10.04</a>.  For Java Documentation, you&#8217;ll have to download it first from the <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java Standard Edition Download Page</a> (I found it under <strong>Additional Resources</strong>).  Let&#8217;s assume you downloaded it to your Downloads folder.  Then, extract the zipped archive with the Archive Manager (that&#8217;s what will open the zipped file by default).  If you just click <strong>Extract</strong> without changing the settings, it&#8217;ll extract to the current directory, which is your Downloads folder.  Then, do:</p>
<pre>
<span class="prompt">~$</span> sudo mkdir /usr/local/share/doc
<span class="prompt">~$</span> sudo mv ~/Downloads/docs /usr/local/share/doc/java6
</pre>
<p>Finally, make a launcher to open that location with firefox (or just bookmark the location in firefox).  The location will be: <strong>/usr/local/share/doc/java6/index.html</strong>.</p>
<h3><span class="green"><a name="video">Install Video Driver</a></span></h3>
<p>Go to <strong>System &rarr; Administration &rarr; Additional Drivers</strong> and install the recommended video driver.  I didn&#8217;t have any problem doing this for my NVidia Geforce Go 7900 GS, for the first time ever!</p>
<p><span class="red">Update: ATI driver</span> I just got a new Radeon graphics card and dual monitors, and everything I needed to do to get it working perfectly was outlined in this <a href="http://wiki.cchtml.com/index.php/Ubuntu_Maverick_Installation_Guide#Installing_the_drivers_manually">AMD Linux Driver Ubuntu Maverick Installation Guide</a>.</p>
<h3><span class="green"><a name="compiz">Setup Compiz</a></span></h3>
<p>To start customizing Compiz Desktop Effects, head to <strong>System &rarr; Preferences &rarr; CompizConfig Settings Manager</strong>.  Here is my setup, but feel free to improve on it:</p>
<p><span class="green">General Category</span></p>
<ul>
<li><strong>General Options</strong> &#8211; Under the Desktop tab, ensure Horizontal Virtual Size is set to 4.  This is required for the Cube to work, but it is now the default setting.</li>
<li><strong>Commands</strong> &#8211; Enabled by default</li>
<li><strong>Gnome Compatibility</strong> &#8211; Enabled by default</li>
</ul>
<p><span class="green">Accessibility Category</span></p>
<ul>
<li><strong>Enhanced Zoom Desktop</strong></li>
</ul>
<p><span class="green">Desktop Category</span></p>
<ul>
<li><strong>Desktop Cube</strong> &#8211; Under the Appearance tab, ensure the Skydome is enabled and animated, and download a good image for the skydome (there are some good ones <a href="http://www.proofofbrain.com/2010/02/18-awesome-skydome-images-and-more/">here</a>).  You can also resize a panoramic photo to 4096&#215;1024 (2^12 x 2^10), and keep in mind that you wont be able to see the top and bottom of the image (over 200 pixels on each side), which actually worked in my favor because my panorama was thin to begin with.  Under the Transparent Cube tab, change the Opacity During Rotation to somewhere around 65.  If you have dual monitors, go to the General tab and change <strong>Multi Output Mode</strong> to <strong>One big cube</strong> (awesome effect, by the way)</li>
<li><strong>Rotate Cute</strong> &#8211; To avoid conflicts, disable Expo before enabling this.  Change Zoom to about 0.5.</li>
<li><strong>Viewport Switcher</strong> &#8211; This has to be enabled if you want to be able to rotate your cube/cylinder/sphere.</li>
</ul>
<p><strong><span class="green">Effects Category</span></strong></p>
<ul>
<li><strong>3D Windows</strong></li>
<li><strong>Cube Reflection and Deformation</strong> &#8211; When you enable this, you might be prompted to resolve conflicts.  This plugin conflicts with Next Slide from the Desktop Cube plugin, so just disable Next Slide.  Under the Cube caps tab, I have all the Bindings disabled; the top and bottom images are drawn, scaled, and clamped, but I disabled image adjustment and aspect ratio maintenance (they screw up the picture I put there); I changed the cube top and bottom colors to black and selected just one image each for the top and bottom (the same for both &#8211; one with black edges so it blends with the default color).  If you like the one I&#8217;m using, you can find it <a href="http://img374.imageshack.us/i/ballsnakesgrayon9.jpg/">here</a>.  Under the Reflection tab, I have reflection enabled, the Reflection ground size is about 0.34, the Intensity is at 1.0, and the Reflection mode is Jumpy.  Under the Deformation tab, I chose a Sphere with an aspect ratio of 0.7 (The other options I left to default).</li>
<li><strong>Window Decoration</strong> &#8211; Leave this enabled else the top of all your windows will disappear</li>
<li><strong>Animations</strong> &#8211; These are the same as the Extra Visual Effects you can enable under System → Preferences → Appearance before you even download the CompizConfig Settings Manager.</li>
<li><strong>Fading Windows</strong></li>
<li><strong>Wobbly Windows</strong></li>
</ul>
<p><span class="green">Extras Category</span></p>
<ul>
<li><strong>None</strong></li>
</ul>
<p><span class="green">Utility Category</span></p>
<ul>
<li><strong>Resize Info</strong> &#8211; Enabled by Default</li>
<li><strong>Session Management</strong> &#8211; Enabled by Default</li>
<li><strong>Dbus</strong> &#8211; Enabled by Default</li>
<li><strong>Mouse position polling</strong> &#8211; Enabled by Default</li>
<li><strong>Scale Addons</strong> &#8211; Enabled by Default</li>
<li><strong>Regex Matching</strong> &#8211; Enabled by Default</li>
<li><strong>Workarounds</strong> &#8211; Enabled by Default</li>
<li><strong>Resize Info</strong> &#8211; Enabled by Default</li>
</ul>
<p><span class="green">Window Management</span></p>
<ul>
<li><strong>Place Windows</strong> &#8211; Enabled by Default</li>
<li><strong>Ring Switcher</strong> &#8211; Use default settings.</li>
<li><strong>Scale</strong> &#8211; Use default settings.</li>
<li><strong>Grid</strong> &#8211; Changed key binding for <strong>Put Left</strong> to <strong>Super+Left</strong> because I don&#8217;t have a keypad on my laptop.  Likewise changed Put Right, Put Top, and Put Bottom using Super+Arrow Key.</li>
<li><strong>Resize Window</strong> &#8211; Use default settings.</li>
<li><strong>Move Window</strong> &#8211; Use default settings.</li>
<li><strong>Maximize</strong> &#8211; Enabled Horizontal and Vertical Maximize, set to Super+h and Super+v respectively.</li>
</ul>
<h3>Compiz Keyboard Shortcuts, based on the settings above:</h3>
<ul>
<li><strong>Ctrl+Alt+Left/Right/Mouse</strong> &#8211; Rotate desktop cube/cylinder/sphere</li>
<li><strong>Shift+Ctrl+Alt+Left/Right</strong> &#8211; Rotate desktop cube/cylinder/sphere and drag the selected window to the new virtual desktop</li>
<li><strong>Ctrl+Alt+Down</strong> &#8211; Unfold desktop cube/cylinder/sphere into a long strip, then hold Ctrl+Alt and use left/right to select desired virtual desktop</li>
<li><strong>Super+scroll</strong> &#8211; Zoom</li>
<li><strong>Super+Tab</strong> &#8211; Ring Application Switcher &#8211; Next Window (Current Workspace) (add Shift for Previous Window)</li>
<li><strong>Alt+Super+Tab</strong> &#8211; Ring Application Switcher &#8211; Next Window (All Workspaces) (add Shift for Previous Window)</li>
<li><strong>Super+w</strong> &#8211; Window picker (Current Workspace)</li>
<li><strong>Super+a</strong> &#8211; Window picker (All Workspaces)</li>
<li><strong>Super+Left</strong> &#8211; Resize window to fill the left side of the screen</li>
<li><strong>Super+Right</strong> &#8211; Resize window to fill the right side of the screen</li>
<li><strong>Super+Top</strong> &#8211; Resize window to fill the top of the screen</li>
<li><strong>Super+Bottom</strong> &#8211; Resize window to fill the bottom of the screen</li>
<li><strong>Alt+Middle Click</strong> &#8211; Initiate window resize</li>
<li><strong>Alt+Left Click</strong> &#8211; Initiate window move</li>
<li><strong>Super+m</strong> &#8211; Maximize window</li>
<li><strong>Shift+Super+m</strong> &#8211; Make window as small as possible (without actually minimizing)</li>
<li><strong>Super+v</strong> &#8211; Maximize window vertically</li>
<li><strong>Super+h</strong> &#8211; Maximize window horizontally</li>
</ul>
<h3><span class="green"><a name="cairo">Setup Cairo-Dock</a></span></h3>
<p><span class="red">Update: This still works, but I&#8217;m just no longer a fan of any dock</span></p>
<p>I&#8217;m not going to specify every customization I have made to my Cairo-Dock because there are many good ways to set it up.  However, I will mention a few very helpful features.  First, open Cairo-Dock from <strong>Applications &rarr; System Tools &rarr; GLX-Dock (Cairo-Dock with OpenGL)</strong>.  Then, once the dock is open, you can open the configuration tool by right-clicking on the dock and selecting <strong>Cairo-Dock &rarr; Configure</strong>.  You can also set Cairo-Dock to run at startup from this right-click menu.</p>
<ul>
<li>In Advanced Mode, under Behavior,  you can deselect <strong>Only show applications on current desktop</strong>, so that no matter which virtual desktop you&#8217;re on, you can see all available windows (minimized or not) on Cairo-Dock.</li>
<li>If you right click on Cairo-Dock and select Add, you can add a Sub-Dock.  Just Type in a name like <strong>Internet</strong>, select <strong>Use an Image</strong> for how to render the icon, and find the path to the icon (you can duplicate the icons from the applications window, just use System &rarr; Preferences &rarr; Main Menu to help you locate the icons).  As I said earlier, I prefer the Faenza Icon pack.  If you&#8217;ve downloaded Faenza, you should be able to find the icons you want in <strong>/usr/share/icons/Faenza/categories/48/</strong>.  Once you have a Sub-Dock, you can add application launchers to the Sub-Dock to help keep Cairo-Dock more organized.  That way, you can click on the Internet Sub-Dock, and you&#8217;ll be able to see your launchers for Firefox, Chromium, Evolution, Skype, Google Earth, Empathy, etc.</li>
<li>There are numerous Add-Ons for Cairo-Dock, but most of them duplicate functionality that is already present in the GNOME top panel.  I prefer to keep the top panel (just make it Autohide) because I know it works.  However, after customizing Cairo-Dock, I no longer had a need for the bottom panel in GNOME, so I removed it.</li>
</ul>
<p>Here is a screenshot of the bottom of my desktop using Cairo-Dock:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/10/Cairo-Dock_Screenshot.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/10/Cairo-Dock_Screenshot-450x281.png" alt="Cairo-Dock Screenshot" title="Cairo-Dock Screenshot" width="450" height="281" class="aligncenter size-medium wp-image-934" /></a></p>
<h3><span class="green"><a name="evolution">Setup Evolution</a></span></h3>
<p><span class="red">Update: This still works, but I&#8217;ve found Thunderbird with the Lightning extension to be superior in every way.  Syncing with GMail and Google Calendar is so easy with Thunderbird that it would be silly to write a tutorial about it.</span></p>
<p>Ideally, if you were running a previous version of Ubuntu prior to installation of Maverick Meerkat, you should have backed up your Evolution settings before re-installing Ubuntu.  Backup is as easy as selecting <strong>File &rarr; Backup Settings</strong> from within Evolution.  If you remembered to do this, then you can restore your Evolution settings by simply selecting <strong>File &rarr; Restore Settings</strong> and then loading the backup file from your backup media (external hard drive, disk, thumb drive, etc.).</p>
<p>If you are setting up Evolution from scratch, the Evolution wizard will walk you through the process, but if you want to add synchronized calendars and task lists, you still have some work to do.  If you use Gmail, follow this tutorial: <a href="http://greeennotebook.com/2010/06/syncing-gmail-and-evolution-contacts-calendars-and-mail-in-ubuntu-10-04/">Syncing GMail and Evolution Contacts, Calendar, and Mail in Ubuntu 10.04</a>.  However, I noticed that Evolution no longer correctly syncs Calendars with GMail via CalDAV.  Instead, I had to setup the Evolution calendars as Google Calendars.</p>
<h3><span class="green"><a name="firefox">Setup Firefox</a></span></h3>
<p>In Firefox, select <strong>Tools &rarr; Addons</strong> to see all available extensions.  I usually install the following:</p>
<ul>
<li><strong>Adblock Plus</strong> &#8211; Block most advertisements</li>
<li><strong>User Agent Switcher</strong> &#8211; Make Firefox act like Internet Explorer, this will work just well enough to make some broken websites functional again (usually government sites).</li>
<li><strong>Firebug</strong> &#8211; Troubleshoot websites and javascript.</li>
<li><strong>Moonlight</strong> &#8211; Silverlight for Linux, only available from <a href="http://www.go-mono.com/moonlight/">this website</a>.</li>
</ul>
<h3><span class="green"><a name="login">Change Login Screen with Ubuntu Tweak</a></span></h3>
<p>Using Ubuntu Tweak, you can change the login screen background and the login screen logo.  There are just a couple of gotchas you should know about:</p>
<ul>
<li>You can&#8217;t use images stored in an encrypted directory.</li>
<li>You have to ensure <strong>all users have read access</strong> for the specified image.</li>
<li>For some reason, the login background wouldn&#8217;t work until I placed it in <strong>/usr/share/backgrounds</strong></li>
</ul>
<p>For example, let&#8217;s say I want to use <strong>~/Pictures/Picasa/Collages/Login_background.jpg</strong> for the background image.  First, I open Ubuntu Tweak, head to <strong>Login Settings</strong>, and click the <strong>Unlock</strong> button in the bottom right corner (specify password when prompted).  Next, I click on the background image and choose my desired image.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/10/Ubuntu_tweak_Login_Settings.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/10/Ubuntu_tweak_Login_Settings-450x268.png" alt="Ubuntu Tweak - Login Settings" title="Ubuntu Tweak - Login Settings" width="450" height="268" class="aligncenter size-medium wp-image-981" /></a></p>
<p>Finally, I need to ensure all users have read access to the image:</p>
<pre>
<span class="prompt">~$</span> ls -l ~/Pictures/Picasa/Collages
total 5168
-rw-<span style="color: red">-</span>--<span style="color: red">-</span>-- 1 greeenguru greeenguru 5265605 2010-10-31 02:56 Login_background.jpg
...
</pre>
<p>Notice that only the User (me) has permission to read this file.  Other users do not have read access (highlighted in red above).  If you can&#8217;t see what I mean, take a <a href="http://danielmiessler.com/study/unixlinux_permissions/">Linux Permissions Refresher</a>.  Anyway, let&#8217;s fix this:</p>
<pre>
<span class="prompt">~$</span> sudo chmod +r ~/Pictures/Picasa/Collages/Login_background.jpg
<span class="prompt">~$</span> ls -l ~/Pictures/Picasa/Collages
total 5168
-rw-<span style="color: red">r</span>--<span style="color: red">r</span>-- 1 greeenguru greeenguru 5265605 2010-10-31 02:56 Login_background.jpg
...
</pre>
<p>Problem solved.  Repeat this process for the login screen logo, if desired.  Just make sure you have a 64 x 64 pixel PNG image to use for the logo.  Then, logout to see your screen!</p>
<p>If the background image doesn&#8217;t display, try moving the file to <strong>/usr/share/backgrounds</strong> and repeating the process above.  That&#8217;s the only way I could get mine to work, even with no spaces in the path.</p>
<h3><span class="green"><a name="finished">Conclusion</a></span></h3>
<p>At this point, you can setup your login accounts for Skype, Empathy, and Dropbox.  Also, save all your backup data from your previous OS.  If you have an image collection, you can load it into Shotwell for easy viewing/editing.  That&#8217;s it.  Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2010/10/customize-your-fresh-ubuntu-10-10-maverick-meerkat-installation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eclipse &#8211; C/C++ (CDT), Python (PyDev), and Qt (Qt4) Plugins Installation Tutorial for Ubuntu 10.04</title>
		<link>http://greeennotebook.com/2010/09/eclipse-cc-cdt-python-pydev-and-qt-qt4-plugins-installation-tutorial-for-ubuntu-10-04/</link>
		<comments>http://greeennotebook.com/2010/09/eclipse-cc-cdt-python-pydev-and-qt-qt4-plugins-installation-tutorial-for-ubuntu-10-04/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 11:48:38 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[PyDev]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Qt]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=883</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2010/09/eclipse-cc-cdt-python-pydev-and-qt-qt4-plugins-installation-tutorial-for-ubuntu-10-04/"><img align="left" hspace="5" width="150" height="99" src="http://greeennotebook.com/wp-content/uploads/2010/09/eclipse_image-150x99.jpg" class="alignleft tfe wp-post-image" alt="eclipse_image" title="eclipse_image" /></a>This walk-through will take you from a fresh install of Eclipse to a fully-functional IDE ready for development of Java, Python, C/C++, and Qt GUI applications.  Every step is tailored to Ubuntu but might possibly be useful to Windows/Mac users as well.  Enjoy! <a href="http://greeennotebook.com/2010/09/eclipse-cc-cdt-python-pydev-and-qt-qt4-plugins-installation-tutorial-for-ubuntu-10-04/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This walk-through will take you from a fresh install of Eclipse to a fully-functional IDE ready for development of Java, Python, C/C++, and Qt GUI applications.  Every step is tailored to Ubuntu but might possibly be useful to Windows/Mac users as well.  Enjoy!</p>
<ul>
<li><a href="#java">Install Java</a></li>
<li><a href="#eclipse">Install Eclipse</a></li>
<li><a href="#cdt">Install the C/C++ Development Toolkit (CDT) Eclipse Plugin</a></li>
<li><a href="#pydev">Install the PyDev Eclipse Plugin for Python Support</a></li>
<li><a href="#qt4">Install The Qt Eclipse Integration Plugin</a></li>
</ul>
<h3><span class="green"><a name="java">First step, Install Java</a></span></h3>
<p>By default, Ubuntu comes with the OpenJDK Runtime Environment.  Honestly, I haven&#8217;t had any problems running Java applications with OpenJDK.  However, I&#8217;ve read in a couple of places that Eclipse and/or some of its plugins cannot use OpenJDK.  If you want to see what JRE version you have enabled, do this:</p>
<pre>
<span class="prompt">~$</span> java -version
</pre>
<p>Getting Sun Java in Ubuntu is easy.  Just do this to get everything you need (the JRE, browser plugin, development kit, and fonts):</p>
<pre>
<span class="prompt">~$</span> sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-jdk sun-java6-fonts
</pre>
<p><span class="red">Update 28APR11 &#8211; you have to make sure you&#8217;ve enabled partner repositories before the above command will work.  From the Synaptic Package Manager, click on <strong>Settings &rarr; Repositores</strong>, go to the <strong>Other Software</strong> tab, and make sure <strong>Canonical Partners</strong> is checked.  Thanks to HelloWorld321 for this update.</span></p>
<p>Now, while we&#8217;re at it, let&#8217;s make sure your browser actually uses this new browser plugin for Java applets instead of the default IcedTea plugin that&#8217;s based on OpenJDK.  I <strong>have</strong> had many problems with the IcedTea browser plugin.</p>
<pre>
<span class="prompt">~$</span> sudo apt-get remove icedtea6-plugin
</pre>
<p>To ensure your browser is using the Sun Java plugin, you can look at <strong>Tools &rarr; Addons</strong> or simply go to <a href="http://www.javatester.org/version.html">JavaTester.org</a> to get a display of the version and vender from the JRE your browser is using.</p>
<p>Anyway, back to the task at hand.  Just because we have Sun Java is installed doesn&#8217;t mean Ubuntu is going to use it.  If you do <strong>java -version</strong> again, you&#8217;ll note that Ubuntu still uses OpenJDK.  You could uninstall OpenJDK, but that&#8217;s not necessary.  We can switch which version of Java runs by default.  First, though, let&#8217;s see which version of Java we just installed:</p>
<pre>
<span class="prompt">~$</span> /usr/lib/jvm/java-6-sun/bin/java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)
</pre>
<p>At the time of this writing, the most recent stable version of Java is Version 6 Update 21.  According to my terminal output above, I just installed Version 6 Update 20.  One update behind isn&#8217;t too bad, so I didn&#8217;t see any reason to download Java directly from Sun.</p>
<p>Ok, how do we switch which version of Java runs by default?  Do this:</p>
<pre>
<span class="prompt">~$</span> sudo update-java-alternatives -l
</pre>
<p>This should show you the available versions of Java.  Now, to switch the default to Sun Java, do this:</p>
<pre>
<span class="prompt">~$</span> sudo update-java-alternatives -s java-6-sun
java-6-openjdk 1061 /usr/lib/jvm/java-6-openjdk
java-6-sun 63 /usr/lib/jvm/java-6-sun
</pre>
<p>Great!  Now we have a recent version of Sun Java installed and ready to use.  The next step is to get Eclipse.</p>
<h3><span class="green"><a name="eclipse">Install Eclipse</a></span></h3>
<p>Don&#8217;t download eclipse from the Ubuntu repository.  If you already have, uninstall it.  Instead, get the most up-to-date version of eclipse at the <a href="http://www.eclipse.org/downloads/">Eclipse download page</a>.  I chose to download Eclipse Classic 3.6.1 as opposed to the tailored versions.  From my understanding, the only differences are which plugins come with the download.  Here&#8217;s how to extract the download and create a startup script for it that&#8217;s inside the system path:</p>
<pre>
<span class="prompt">$</span> cd /opt
<span class="prompt">$</span> sudo tar xzf /home/greeenguru/Downloads/eclipse-SDK-3.6.1-linux-gtk.tar.gz
<span class="prompt">$</span> sudo touch /usr/bin/eclipse
<span class="prompt">$</span> sudo chmod +x /usr/bin/eclipse
<span class="prompt">$</span> sudo gedit /usr/bin/eclipse
</pre>
<p>Now edit the executable file you just created to contain the following BASH startup script:</p>
<div class="highlight">
<pre><span class="c">#!/bin/sh</span>

<span class="nb">export </span><span class="nv">ECLIPSE_HOME</span><span class="o">=</span><span class="s2">&quot;/opt/eclipse&quot;</span>

<span class="c"># Now run eclipse with the argument list $*</span>
<span class="nv">$ECLIPSE_HOME</span>/eclipse <span class="nv">$*</span>
</pre>
</div>
<p>Create a GNOME menu item for Eclipse:</p>
<p><span class="red">Just use the GUI to do this.  It&#8217;s easier and more reliable.  Right-click on your applications menu, choose <strong>Edit Menu</strong>, go to your <strong>Programming</strong> menu, and hit the <strong>New Item</strong> button.  This way, your icon set might even have a default icon for you automatically, and you don&#8217;t have to worry about if the method below will work or not.</span></p>
<pre>
<span class="prompt">~$</span><del datetime="2011-04-28T13:22:35+00:00"> sudo gedit /usr/share/applications/eclipse.desktop</del>
</pre>
<p><del datetime="2011-04-28T13:22:35+00:00">Here&#8217;s what to enter to create the menu item correctly:</del></p>
<pre>
<del datetime="2011-04-28T13:22:35+00:00">[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Program Some Stuff
GenericName=Interactive Development Environment
Exec=eclipse
Terminal=false
Type=Application
Icon=/opt/eclipse/icon.xpm
Categories=GNOME;Application;Development;
StartupNotify=true </del>
</pre>
<p>Now go to your Applications Menu, click on Eclipse, and make sure it works.</p>
<h3><span class="green"><a name="cdt">Install the C/C++ Development Toolkit (CDT) Eclipse Plugin</a></span></h3>
<p>Now that you have Eclipse up and running, let&#8217;s add C/C++ support via the CDT plugin.  We can do this entirely from within Eclipse.  Just go to <strong>Help &rarr; Install New Software&#8230;</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_install_new_software.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_install_new_software.png" alt="Install New Software" title="Install New Software" width="446" height="335" class="aligncenter size-full wp-image-890" /></a></p>
<p>Then click on the <strong>Add</strong> to add a software site to install from:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_add_software_site.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_add_software_site-450x124.png" alt="Add Software Site" title="Add Software Site" width="450" height="124" class="aligncenter size-medium wp-image-885" /></a></p>
<p>The CDT repository is located at <strong>http://download.eclipse.org/tools/cdt/releases/helios</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_repository.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_repository-450x166.png" alt="CDT Repository" title="CDT Repository" width="450" height="166" class="aligncenter size-medium wp-image-889" /></a></p>
<p>At first, I tried to just install all the available CDT options:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_packages.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_packages.png" alt="CDT Packages" title="CDT Packages" width="226" height="51" class="aligncenter size-full wp-image-887" /></a></p>
<p>But after I received an error, I went back and deselected the Remote Launch package.  I&#8217;m sure I don&#8217;t need all of these options, but I don&#8217;t know which ones I <strong>do</strong> need, so I just installed all of the rest as you can see below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_packages_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_packages_2-450x442.png" alt="CDT Packages Final Selection" title="CDT Packages Final Selection" width="450" height="442" class="aligncenter size-medium wp-image-888" /></a></p>
<p>After making your choices, click <strong>Next</strong>.  You will see an <strong>Install Details</strong> dialog containing all the software you selected to install (assuming you didn&#8217;t get an error).  Just click <strong>Next</strong>.  Finally, you&#8217;ll see a <strong>Review Licenses</strong> window.  Just agree to the license agreement and your installation will begin:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_installing.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_CDT_installing-450x199.png" alt="CDT Installing" title="CDT Installing" width="450" height="199" class="aligncenter size-medium wp-image-886" /></a></p>
<p>Since Ubuntu already has <strong>g++</strong>, <strong>make</strong>, <strong>gcc</strong>, and <strong>gdb</strong>, installed and in the system path, you shouldn&#8217;t have any problem building C++ programs once CDT is finished installing.  Just be sure to restart when prompted, then try it out.  Go to <strong>Help &rarr; Cheat Sheets</strong> and find the Hello World application for C++.  This will walk you through building a simple C++ executable.</p>
<p>Note: If you have problems after restarting Eclipse, exit and restart from the run dialog or terminal with the command <strong>eclipse -clean</strong>.  This will clean the Eclipse cache and hopefully resolve some problems.</p>
<h3><span class="green"><a name="pydev">Install the PyDev Eclipse Plugin for Python Support</a></span></h3>
<p>You can install PyDev for Python support completely from within Eclipse just as you did the CDT.  Just follow the same steps as before (<strong>Help &rarr; Install New Software&#8230;</strong> and click <strong>Add</strong>), then add the PyDev repository, which is located at <strong>http://pydev.org/updates</strong></p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_PyDev_repository.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_PyDev_repository-450x333.png" alt="PyDev Repository" title="PyDev Repository" width="450" height="333" class="aligncenter size-medium wp-image-892" /></a></p>
<p>I don&#8217;t use Django, so I just need the main package:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_PyDev_packages.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_PyDev_packages-450x502.png" alt="PyDev Packages" title="PyDev Packages" width="450" height="502" class="aligncenter size-medium wp-image-891" /></a></p>
<p>Finish the Install Wizard as you did with CDT and restart Eclipse when prompted.  You now have support for Java, C/C++, and Python!</p>
<p>Note: If you have problems after restarting Eclipse, exit and restart from the run dialog or terminal with the command <strong>eclipse -clean</strong>.  This will clean the Eclipse cache and hopefully resolve some problems.</p>
<h3><span class="green"><a name="qt4">Install The Qt Eclipse Integration Plugin</a></span></h3>
<p>Qt Eclipse Integration is pretty cool if you&#8217;re going to be doing any C++ GUI development.  You have to make sure you have CDT installed first, then download the package from the <a href="http://qt.nokia.com/developer/eclipse-integration/">Qt Eclipse Integration Download Page</a>.  The rest of my instructions are basically taken from Qt&#8217;s <a href="http://qt.nokia.com/developer/eclipse-integration/installation-instructions-for-linux-systems">Installation Instructions for Linux Systems</a>.</p>
<p>According to Qt&#8217;s website, the preferred method for installing their plugin is from outside Eclipse, so go ahead and close it first.  Next, make sure you have the Qt4 Development Library installed:</p>
<pre>
<span class="prompt">$</span> sudo apt-get install libqt4-dev qt4-doc-html
</pre>
<p>Notice that I also installed the documentation.  I usually create a launcher for the documentation I think I&#8217;ll use:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Qt4_Documentation_Launcher.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Qt4_Documentation_Launcher-450x212.png" alt="Qt4 Documentation Launcher" title="Qt4 Documentation Launcher" width="450" height="212" class="aligncenter size-medium wp-image-896" /></a></p>
<p>Go to the location of your eclipse installation directory and extract the Qt plugin.  For some reason the plugin has been archived to extract as eclipse &rarr; plugins &rarr; important stuff, so you need to be in the parent folder of your eclipse installation directory when you extract the plugin in order for everything to extract to the right place:</p>
<pre>
<span class="prompt">$</span> cd /opt
<span class="prompt">$</span> sudo tar xzf /home/greeenguru/Downloads/qt-eclipse-integration-linux.x86-1.6.1.tar.gz
</pre>
<p>That&#8217;s it.  Just launch Eclipse from the run dialog or terminal with the command <strong>eclipse -clean</strong> to start with a clean configuration.  However, you&#8217;re not quite done because it still needs some configuring.  You&#8217;ll need to know the version of Qt that you&#8217;re using, so do this to find out:</p>
<pre>
<span class="prompt">~$</span> qmake -version
QMake version 2.01a
Using Qt version 4.6.2 in /usr/lib
</pre>
<p><strong>qmake</strong> came with the <strong>libqt4-dev</strong> package you just installed, and it is using Qt version 4.6.2 (on my system anyway).  Now in Eclipse go to <strong>Window &rarr; Preferences</strong> and you should see the dialog below.  Go to the <strong>Qt</strong> section as shown and Click the <strong>Add&#8230;</strong> button to add a new Qt version.  This will tell Eclipse where to find the Qt version you plan to use.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Add_Qt_Version.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Add_Qt_Version-450x363.png" alt="Add Qt Version" title="Add Qt Version" width="450" height="363" class="aligncenter size-medium wp-image-884" /></a></p>
<p>When you&#8217;ve finished with the dialog above, click <strong>Finish</strong>.  Then click on the version you just added and click <strong>Default</strong> to make that the default Qt version:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Set_Default_Qt_Version.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Set_Default_Qt_Version-450x410.png" alt="Set Default Qt Version" title="Set Default Qt Version" width="450" height="410" class="aligncenter size-medium wp-image-895" /></a></p>
<p>Finally, click <strong>Apply</strong> and you should get the following dialog:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Rebuild_Qt_Projects.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Rebuild_Qt_Projects-450x412.png" alt="Rebuilt Qt Projects" title="Rebuilt Qt Projects" width="450" height="412" class="aligncenter size-medium wp-image-894" /></a></p>
<p>Click <strong>Yes</strong> to this dialog and then exit Preferences by clicking <strong>Ok</strong>.  Now, you&#8217;re finished configuring Qt.  To get started using it, go to <strong>Help &rarr; Cheat Sheets</strong> and select Qt Development.  There should be an address book application walkthrough you can learn from.  Here&#8217;s what my screen looked like halfway through the walkthrough.  It works just like Qt Designer, but it&#8217;s running inside Eclipse.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Qt_Designer.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Qt_Designer-450x238.png" alt="Qt Designer" title="Qt Designer" width="450" height="238" class="aligncenter size-medium wp-image-893" /></a></p>
<p>Well that&#8217;s really it.  Now you should be able to program in Java, Python, C/C++, and design Qt-based C++ GUI applications all from inside the same cross-platform IDE.  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2010/09/eclipse-cc-cdt-python-pydev-and-qt-qt4-plugins-installation-tutorial-for-ubuntu-10-04/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>JUnit Testing Java Code Using Eclipse</title>
		<link>http://greeennotebook.com/2010/09/junit-testing-java-code-using-eclipse/</link>
		<comments>http://greeennotebook.com/2010/09/junit-testing-java-code-using-eclipse/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 08:14:42 +0000</pubDate>
		<dc:creator>GreeenGuru</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://greeennotebook.com/?p=844</guid>
		<description><![CDATA[<a href="http://greeennotebook.com/2010/09/junit-testing-java-code-using-eclipse/"><img align="left" hspace="5" width="150" src="http://greeennotebook.com/wp-content/uploads/2010/09/SortedStringList_in_Eclipse-450x316.png" class="alignleft wp-post-image tfe" alt="Eclipse Java View - Where to find the Run button" title="Eclipse Java View - Where to find the Run button" /></a>New to Java?  Trying to learn how to test your code?  Trying to learn how to use the popular Eclipse IDE?  Trying to do all three at once?  Me too.  Hopefully, this tutorial will help both of us. <a href="http://greeennotebook.com/2010/09/junit-testing-java-code-using-eclipse/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>New to Java?  Trying to learn how to test your code?  Trying to learn how to use the popular Eclipse IDE?  Trying to do all three at once?  Me too.  Hopefully, this tutorial will help both of us.  I&#8217;m using Eclipse 3.5.2, so you may have to adapt to changes in the GUI if your version is different than mine.</p>
<h3><span class="green">Example Java Class</span></h3>
<p>Let&#8217;s start out with a class I wrote that represents an alphabetized String Array.  It is a good example of how to use an Array as a data buffer, and it also demonstrates how to read and write files (one method, anyway).</p>
<p><strong>SortedStringList.java</strong></p>
<div class="highlight">
<pre class="height200px"><span class="kn">import</span> <span class="nn">java.io.File</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.FileWriter</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.io.PrintWriter</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">java.util.Scanner</span><span class="o">;</span>

<span class="cm">/**</span>
<span class="cm"> * This class represents a sorted list of Strings.</span>
<span class="cm"> * </span>
<span class="cm"> * @author GreeenGuru (greeenguru@greeennotebook.com)</span>
<span class="cm"> * @version 1.0</span>
<span class="cm"> */</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SortedStringList</span> <span class="o">{</span>
    <span class="cm">/** The maximum length of the stringList_ */</span>
    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="n">MAX_SIZE</span> <span class="o">=</span> <span class="mi">100</span><span class="o">;</span>
    <span class="cm">/** The list of strings */</span>
    <span class="kd">private</span> <span class="n">String</span><span class="o">[]</span> <span class="n">stringList_</span> <span class="o">=</span> <span class="k">new</span> <span class="n">String</span><span class="o">[</span><span class="n">MAX_SIZE</span><span class="o">];</span>
    <span class="cm">/** Keeps track of next available index in stringList_ */</span>
    <span class="kd">private</span> <span class="kt">int</span> <span class="n">size_</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>

    <span class="cm">/**</span>
<span class="cm">     * Constructor that initializes stringList_ from data stored in a text file,</span>
<span class="cm">     * sorted alphabetically</span>
<span class="cm">     * </span>
<span class="cm">     * @param input</span>
<span class="cm">     *            Name of text file containing string data.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="nf">SortedStringList</span><span class="o">(</span><span class="n">String</span> <span class="n">input</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">try</span> <span class="o">{</span>
            <span class="n">Scanner</span> <span class="n">scan</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Scanner</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">input</span><span class="o">));</span>
            <span class="c1">// Skip the heading line</span>
            <span class="k">if</span> <span class="o">(</span><span class="n">scan</span><span class="o">.</span><span class="na">hasNextLine</span><span class="o">())</span> <span class="o">{</span>
                <span class="n">scan</span><span class="o">.</span><span class="na">nextLine</span><span class="o">();</span>
            <span class="o">}</span>
            <span class="k">while</span> <span class="o">(</span><span class="n">scan</span><span class="o">.</span><span class="na">hasNextLine</span><span class="o">()</span> <span class="o">&amp;&amp;</span> <span class="n">size_</span> <span class="o">&lt;</span> <span class="n">MAX_SIZE</span><span class="o">)</span> <span class="o">{</span>
                <span class="n">stringList_</span><span class="o">[</span><span class="n">size_</span><span class="o">++]</span> <span class="o">=</span> <span class="n">scan</span><span class="o">.</span><span class="na">nextLine</span><span class="o">();</span>
            <span class="o">}</span>
            <span class="n">scan</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span><span class="s">&quot;Unable to read from input file: %s\n\nThe &quot;</span>
                    <span class="o">+</span> <span class="s">&quot;error encountered was:\n\n%s\n&quot;</span><span class="o">,</span> <span class="n">input</span><span class="o">,</span> <span class="n">e</span><span class="o">);</span>
            <span class="n">System</span><span class="o">.</span><span class="na">exit</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
        <span class="o">}</span>
        <span class="c1">// Sort the array using exchange sort</span>
        <span class="n">String</span> <span class="n">temp</span><span class="o">;</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size_</span> <span class="o">-</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="o">;</span> <span class="n">j</span> <span class="o">&lt;</span> <span class="n">size_</span><span class="o">;</span> <span class="n">j</span><span class="o">++)</span> <span class="o">{</span>
                <span class="k">if</span> <span class="o">(</span><span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">].</span><span class="na">compareToIgnoreCase</span><span class="o">(</span><span class="n">stringList_</span><span class="o">[</span><span class="n">j</span><span class="o">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
                    <span class="n">temp</span> <span class="o">=</span> <span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">];</span>
                    <span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="n">stringList_</span><span class="o">[</span><span class="n">j</span><span class="o">];</span>
                    <span class="n">stringList_</span><span class="o">[</span><span class="n">j</span><span class="o">]</span> <span class="o">=</span> <span class="n">temp</span><span class="o">;</span>
                <span class="o">}</span>
            <span class="o">}</span>
        <span class="o">}</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Default Constructor</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="nf">SortedStringList</span><span class="o">()</span> <span class="o">{</span>
        <span class="c1">// Nothing to do here.</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Getter for list size.</span>
<span class="cm">     * </span>
<span class="cm">     * @return The number of strings in the list.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getSize</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">size_</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Adds a new string to the list.</span>
<span class="cm">     * </span>
<span class="cm">     * @param newString</span>
<span class="cm">     *            The string to be added</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">add</span><span class="o">(</span><span class="n">String</span> <span class="n">newString</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">newString</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="s">&quot;&quot;</span><span class="o">)</span> <span class="o">||</span> <span class="n">newString</span><span class="o">.</span><span class="na">equals</span><span class="o">(</span><span class="kc">null</span><span class="o">)</span> <span class="o">||</span> <span class="n">size_</span> <span class="o">&gt;=</span> <span class="n">MAX_SIZE</span><span class="o">)</span> <span class="o">{</span>
            <span class="c1">// If input is invalid or the array is maxed out</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;The list is full or the string is invalid.&quot;</span><span class="o">);</span>
            <span class="k">return</span><span class="o">;</span>
        <span class="o">}</span>
        <span class="kt">int</span> <span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
        <span class="c1">// Find the right position for the new string</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size_</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="k">if</span> <span class="o">(</span><span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">].</span><span class="na">compareToIgnoreCase</span><span class="o">(</span><span class="n">newString</span><span class="o">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="o">)</span> <span class="o">{</span>
                <span class="n">index</span><span class="o">++;</span>
            <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
                <span class="k">break</span><span class="o">;</span>
            <span class="o">}</span>
        <span class="o">}</span>
        <span class="c1">// Shift remaining strings to the right</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">size_</span><span class="o">;</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="n">index</span><span class="o">;</span> <span class="n">i</span><span class="o">--)</span> <span class="o">{</span>
            <span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="n">stringList_</span><span class="o">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="o">];</span>
        <span class="o">}</span>
        <span class="n">size_</span><span class="o">++;</span>
        <span class="c1">// Add the new string</span>
        <span class="n">stringList_</span><span class="o">[</span><span class="n">index</span><span class="o">]</span> <span class="o">=</span> <span class="n">newString</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Removes the string at the given index.</span>
<span class="cm">     * </span>
<span class="cm">     * @param index</span>
<span class="cm">     *            The index of the string to be removed.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">remove</span><span class="o">(</span><span class="kt">int</span> <span class="n">index</span><span class="o">)</span> <span class="o">{</span>
        <span class="c1">// If the index is invalid, do nothing</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="n">size_</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;There is no string at the given index.&quot;</span><span class="o">);</span>
            <span class="k">return</span><span class="o">;</span>
        <span class="o">}</span>
        <span class="c1">// Shift the rest of the strings to the left</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">index</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size_</span> <span class="o">-</span> <span class="mi">1</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">=</span> <span class="n">stringList_</span><span class="o">[</span><span class="n">i</span> <span class="o">+</span> <span class="mi">1</span><span class="o">];</span>
        <span class="o">}</span>
        <span class="n">stringList_</span><span class="o">[</span><span class="n">size_</span> <span class="o">-</span> <span class="mi">1</span><span class="o">]</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
        <span class="n">size_</span><span class="o">--;</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Removes the string given.</span>
<span class="cm">     * </span>
<span class="cm">     * @param string</span>
<span class="cm">     *            The string to be removed.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">remove</span><span class="o">(</span><span class="n">String</span> <span class="n">string</span><span class="o">)</span> <span class="o">{</span>
        <span class="kt">int</span> <span class="n">index</span> <span class="o">=</span> <span class="k">this</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="n">string</span><span class="o">);</span>
        <span class="c1">// If the string is not found, do nothing</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">index</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">)</span> <span class="o">{</span>
            <span class="k">return</span><span class="o">;</span>
        <span class="o">}</span>
        <span class="c1">// Now that we know where the string is, call the other remove method</span>
        <span class="k">this</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="n">index</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Returns the string at the given index.</span>
<span class="cm">     * </span>
<span class="cm">     * @param index</span>
<span class="cm">     *            The index queried</span>
<span class="cm">     * @return The string stored at the queried index.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="n">String</span> <span class="nf">getStringAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">index</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">return</span> <span class="n">stringList_</span><span class="o">[</span><span class="n">index</span><span class="o">];</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Get the index of the string in question or -1 if the string is not found.</span>
<span class="cm">     * </span>
<span class="cm">     * @param string</span>
<span class="cm">     *            The string queried.</span>
<span class="cm">     * @return The index of the queried string or -1 if the string is not found.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getIndexOf</span><span class="o">(</span><span class="n">String</span> <span class="n">string</span><span class="o">)</span> <span class="o">{</span>
        <span class="kt">boolean</span> <span class="n">stringFound</span> <span class="o">=</span> <span class="kc">false</span><span class="o">;</span>
        <span class="kt">int</span> <span class="n">index</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size_</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="k">if</span> <span class="o">(</span><span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">].</span><span class="na">equals</span><span class="o">(</span><span class="n">string</span><span class="o">))</span> <span class="o">{</span>
                <span class="n">stringFound</span> <span class="o">=</span> <span class="kc">true</span><span class="o">;</span>
                <span class="n">index</span> <span class="o">=</span> <span class="n">i</span><span class="o">;</span>
            <span class="o">}</span>
        <span class="o">}</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">stringFound</span> <span class="o">==</span> <span class="kc">false</span><span class="o">)</span> <span class="o">{</span>
            <span class="c1">// If the string is not found, do nothing</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;There is no such string in the list.&quot;</span><span class="o">);</span>
            <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="o">;</span>
        <span class="o">}</span>
        <span class="k">return</span> <span class="n">index</span><span class="o">;</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Prints the list to the screen.</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">print</span><span class="o">()</span> <span class="o">{</span>
        <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size_</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">]);</span>
        <span class="o">}</span>
    <span class="o">}</span>

    <span class="cm">/**</span>
<span class="cm">     * Writes the list to a file.</span>
<span class="cm">     * </span>
<span class="cm">     * @param input</span>
<span class="cm">     *            The name of the file to be created</span>
<span class="cm">     */</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">printToFile</span><span class="o">(</span><span class="n">String</span> <span class="n">input</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">try</span> <span class="o">{</span>
            <span class="n">FileWriter</span> <span class="n">fw</span> <span class="o">=</span> <span class="k">new</span> <span class="n">FileWriter</span><span class="o">(</span><span class="k">new</span> <span class="n">File</span><span class="o">(</span><span class="n">input</span><span class="o">));</span>
            <span class="n">PrintWriter</span> <span class="n">pw</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PrintWriter</span><span class="o">(</span><span class="n">fw</span><span class="o">);</span>
            <span class="k">for</span> <span class="o">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">size_</span><span class="o">;</span> <span class="n">i</span><span class="o">++)</span> <span class="o">{</span>
                <span class="n">pw</span><span class="o">.</span><span class="na">print</span><span class="o">(</span><span class="n">stringList_</span><span class="o">[</span><span class="n">i</span><span class="o">]</span> <span class="o">+</span> <span class="s">&quot;\n&quot;</span><span class="o">);</span>
            <span class="o">}</span>
            <span class="n">pw</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
            <span class="n">fw</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
        <span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="n">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span><span class="s">&quot;Unable to write to file.  The &quot;</span>
                    <span class="o">+</span> <span class="s">&quot;error encountered was:\n\n%s\n&quot;</span><span class="o">,</span> <span class="n">e</span><span class="o">);</span>
            <span class="n">System</span><span class="o">.</span><span class="na">exit</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
        <span class="o">}</span>
    <span class="o">}</span>

    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="n">SortedStringList</span> <span class="n">list</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SortedStringList</span><span class="o">();</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;Zulu&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;2010&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;juliet&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;09&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;FOXTROT&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;27&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;alpha&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;Delta&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;papa&quot;</span><span class="o">);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">print</span><span class="o">();</span>
        <span class="n">list</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="s">&quot;FOXTROT&quot;</span><span class="o">);</span>
        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span>
                <span class="s">&quot;\nAfter removing \&quot;FOXTROT\&quot;, the list now contains %d strings:\n\n&quot;</span><span class="o">,</span>
                <span class="n">list</span><span class="o">.</span><span class="na">getSize</span><span class="o">());</span>
        <span class="n">list</span><span class="o">.</span><span class="na">print</span><span class="o">();</span>
    <span class="o">}</span>
<span class="o">}</span>
</pre>
</div>
<p>I&#8217;m going to assume here that you know how to create a new project in Eclipse (named whatever you want), create a new class called <strong>SortedStringList</strong>, and insert the code above to complete the class.  If you haven&#8217;t learned Eclipse enough to do that, I suggest reading another Eclipse tutorial first.  Specifically, I&#8217;d recommend the built-in Eclipse tutorial available from the Help menu.  Go to <strong>Help &rarr; Cheat Sheets&#8230;</strong>, open the <strong>Java Development</strong> folder, and select <strong>Create a Hello World application</strong>.  This will open a short tutorial as a handy side pane.  If you need more guidance than that, look around under <strong>Help &rarr; Help Contents</strong> and you should be able to find anything you need to know.</p>
<p>You may have noticed that I&#8217;ve included a main method in my code that calls some of the methods in my class.  I like to do that as a quick functional test.  It gives me some instant feedback, telling me whether or not my class works at all.  Of course, this small functional test does not test all my methods, nor does it tell me how they will respond to marginal or invalid parameters.  A better technique is to write unit tests for each method before you even start coding the method.  When you&#8217;re finished coding, all you have to do is run the test and you&#8217;ll receive instant feedback telling you whether or not your method works.  That is why we&#8217;re learning how to use JUnit, which can do just that.  Until then, however, let&#8217;s run the functional test.  Make sure you have our new class selected in Eclipse and click on the green <strong>Run</strong> button.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/SortedStringList_in_Eclipse.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/SortedStringList_in_Eclipse-450x316.png" alt="Eclipse Java View - Where to find the Run button" title="Eclipse Java View - Where to find the Run button" width="450" height="316" class="aligncenter size-medium wp-image-845" /></a></p>
<p>You should see the following in the console pane:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/SortedStringList_functional_test.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/SortedStringList_functional_test-450x378.png" alt="Console output for SortedStringList" title="Console output for SortedStringList" width="450" height="378" class="aligncenter size-medium wp-image-846" /></a></p>
<p>This tells us that the class is keeping the String Array sorted alphabetically even after adding strings in the wrong order and removing one from the middle.  Great!  By the way, we could have also run this from the terminal.  First, we have to know where our Elipse workspace is located.  From there, we need to navigate to the project directory we created and then to the <strong>src</strong> folder to find <strong>SortedStringList.java</strong>.  If you can&#8217;t find it, just go to <strong>File &rarr; Properties</strong> and Eclipse will show you the location of the file.  For our sake, let&#8217;s say the path to SortedStringList.java is <strong>path/SortedStringList.java</strong>.  If you&#8217;re using Windows, the commands will be the same but the prompts will look different (obviously).</p>
<pre class="height200px">
<span class="prompt">$</span> javac path/SortedStringList.java
<span class="prompt">$</span> java -cp path SortedStringList
09
2010
27
alpha
Delta
FOXTROT
juliet
papa
Zulu

After removing "FOXTROT", the list now contains 8 strings:

09
2010
27
alpha
Delta
juliet
papa
Zulu
</pre>
<p>Note that I used the argument <strong>-cp</strong> to specify the path to the java bytecode I was trying to run.  You don&#8217;t have to do this if you navigate to the directory containing the bytecode.</p>
<h3><span class="green">Command Line Arguments in Eclipse</span></h3>
<p>Before we go on to JUnit testing, let&#8217;s cover another tricky situation in Eclipse: how do we use command line arguments from within a graphical IDE?  You might have noticed that my class has methods to read strings from a text file and write strings to a new text file, but we haven&#8217;t tested them yet.  Let&#8217;s re-write the main method to read as follows:</p>
<div class="highlight">
<pre>    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">args</span><span class="o">.</span><span class="na">length</span> <span class="o">!=</span> <span class="mi">2</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;\nYou must specify the input and output file &quot;</span> <span class="o">+</span>
                    <span class="s">&quot;paths!\n\nExample: SortedStringList input.txt ouput.txt&quot;</span> <span class="o">+</span>
                    <span class="s">&quot;\n\n&quot;</span><span class="o">);</span>
            <span class="n">System</span><span class="o">.</span><span class="na">exit</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
        <span class="o">}</span>
        <span class="n">SortedStringList</span> <span class="n">list</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SortedStringList</span><span class="o">(</span><span class="n">args</span><span class="o">[</span><span class="mi">0</span><span class="o">]);</span>
        <span class="n">list</span><span class="o">.</span><span class="na">printToFile</span><span class="o">(</span><span class="n">args</span><span class="o">[</span><span class="mi">1</span><span class="o">]);</span>
        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">printf</span><span class="o">(</span><span class="s">&quot;\nResults written to: %s\n\n&quot;</span><span class="o">,</span> <span class="n">args</span><span class="o">[</span><span class="mi">1</span><span class="o">]);</span>
    <span class="o">}</span>
</pre>
</div>
<p>Be sure to save the file.  Next, we&#8217;ll need an input file to use as an example.  Here&#8217;s one I came up with:</p>
<p><strong>input.txt</strong></p>
<pre class="height200px">
Whiskey
Oscar
Quebec
Delta
X-Ray
Sierra
Mike
Hotel
Uniform
Juliet
Tango
Lima
India
November
Golf
Bravo
Romeo
Yankee
Zulu
Papa
Victor
Charlie
Foxtrot
Echo
Alpha
Kilo
</pre>
<p>Now let&#8217;s see how this would work from the terminal.  Let&#8217;s say the path to your <strong>input.txt</strong> file is <strong>input_path</strong>.  Recompile your java bytecode and run the program again like this:</p>
<pre>
<span class="prompt">$</span> javac path/SortedStringList.java
<span class="prompt">$</span> java -cp path SortedStringList input_path/input.txt input_path/output.txt

Results written to: input_path/output.txt
</pre>
<p>Opening the new <strong>output.txt</strong> file, you should see the following:</p>
<p><strong>output.txt</strong></p>
<pre class="height200px">
Alpha
Bravo
Charlie
Delta
Echo
Foxtrot
Golf
Hotel
India
Juliet
Kilo
Lima
Mike
November
Oscar
Papa
Quebec
Romeo
Sierra
Tango
Uniform
Victor
X-Ray
Yankee
Zulu
</pre>
<p>So it worked!  But how do we get this to run from within Eclipse?</p>
<p>It&#8217;s pretty easy.  Go to <strong>Run &rarr; Run Configurations</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Run_Configurations.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Run_Configurations-450x144.png" alt="Eclipse Run Configuration" title="Eclipse Run Configuration" width="450" height="144" class="aligncenter size-medium wp-image-856" /></a></p>
<p>Make sure that you have the right class selected (<strong>SortedStringList</strong>) and click on the <strong>(x) = Arguments</strong> tab.  Under <strong>Program Arguments</strong>, enter the paths to the input and output files separated by a space just as you would have on the terminal (except without using shortcuts like <strong>~</strong> for Linux or <strong>$HOME</strong> for Windows).</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Command_Line_Arguments_in_Eclipse.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Command_Line_Arguments_in_Eclipse-450x128.png" alt="Command Line Arguments in Eclipse" title="Command Line Arguments in Eclipse" width="450" height="128" class="aligncenter size-medium wp-image-857" /></a></p>
<p>When you&#8217;re finished, just click the run button at the bottom of the dialog.  The program will run just as it did from the terminal.</p>
<h3><span class="green">JUnit Testing</span></h3>
<p>Finally, let&#8217;s get to the testing.  I&#8217;m using Eclipse 3.5.2, which comes with JUnit4 as a plug-in.  Unfortunately, I can&#8217;t just import JUnit packages.  First, I have to add the JUnit Library to my project&#8217;s <strong>Java Build Path</strong>.  Make sure you have the right project selected (the one with SortedStringList), then go to <strong>Project &rarr; Properties</strong>:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Project_Properties.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Project_Properties-450x447.png" alt="Project Properties" title="Project Properties" width="450" height="447" class="aligncenter size-medium wp-image-863" /></a></p>
<p>Select <strong>Java Build Path</strong> from the left pane and click on the <strong>Libraries</strong> tab.  Then, click on <strong>Add External JARs&#8230;</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Add_External_JARs.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Add_External_JARs-450x151.png" alt="Add External JAR" title="Add External JAR" width="450" height="151" class="aligncenter size-medium wp-image-861" /></a></p>
<p>The exact location of the JUnit4 plug-in will depend on your Eclipse install directory.  I&#8217;m using Ubuntu Linux, and the location of JUnit4 on my machine is shown below.  For other operating systems, the Eclipse install directory will differ but the rest of the path should be the same.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Path_to_JUnit4.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_Path_to_JUnit4-450x173.png" alt="Path to JUnit4" title="Path to JUnit4" width="450" height="173" class="aligncenter size-medium wp-image-862" /></a></p>
<p>Once the JUnit JAR has been added, click <strong>OK</strong> at the bottom of the dialog.  For future reference, you can add the JUnit4 Library when creating a new project directly from the New Project Dialog, so don&#8217;t forget to do that when you start your own project next time.</p>
<p>The next step is to create a test case for our SortedStringList class.  A test case is a whole new class, but JUnit4 does most of the setup work for us.  Just make sure to select the SortedStringList class in the package browser, then go to <strong>File &rarr; New &rarr; JUnit Test Case</strong>.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_New_JUnit_Test_Case.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_New_JUnit_Test_Case-450x321.png" alt="New JUnit Test Case" title="New JUnit Test Case" width="450" height="321" class="aligncenter size-medium wp-image-866" /></a></p>
<p>You should see the following:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_JUnit_Test_Case_1.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_JUnit_Test_Case_1-450x495.png" alt="JUnit Test Case Setup 2" title="JUnit Test Case Setup 1" width="450" height="495" class="aligncenter size-medium wp-image-864" /></a></p>
<p>Make sure you select JUnit4.  The rest of the fields should default correctly.  It should look like the image below:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_JUnit_Test_Case_1.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_JUnit_Test_Case_1-450x495.png" alt="JUnit Test Case Setup 2" title="JUnit Test Case Setup 1" width="450" height="495" class="aligncenter size-medium wp-image-864" /></a></p>
<p>When you&#8217;re finished, click the <strong>Next</strong> button.  Select the methods you wish to test.  As I am just getting started with JUnit, I&#8217;m staying away from the methods that deal with file operations and console output.</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_JUnit_Test_Case_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/Eclipse_JUnit_Test_Case_2-450x496.png" alt="JUnit Test Case Setup 2" title="JUnit Test Case Setup 2" width="450" height="496" class="aligncenter size-medium wp-image-867" /></a></p>
<p>Click <strong>Finish</strong>, and the <strong>SortedStringListTest</strong> test case will be created for you!  Here&#8217;s what it looks like so far:</p>
<div class="highlight">
<pre class="height200px"><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">junit</span><span class="o">.</span><span class="na">Assert</span><span class="o">.*;</span>
<span class="kn">import</span> <span class="nn">org.junit.Before</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.Test</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SortedStringListTest</span> <span class="o">{</span>

    <span class="nd">@Before</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setUp</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetSize</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">fail</span><span class="o">(</span><span class="s">&quot;Not yet implemented&quot;</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testAdd</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">fail</span><span class="o">(</span><span class="s">&quot;Not yet implemented&quot;</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveInt</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">fail</span><span class="o">(</span><span class="s">&quot;Not yet implemented&quot;</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveString</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">fail</span><span class="o">(</span><span class="s">&quot;Not yet implemented&quot;</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetStringAt</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">fail</span><span class="o">(</span><span class="s">&quot;Not yet implemented&quot;</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetIndexOf</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">fail</span><span class="o">(</span><span class="s">&quot;Not yet implemented&quot;</span><span class="o">);</span>
    <span class="o">}</span>
<span class="o">}</span>
</pre>
</div>
<p>To learn the specifics about using JUnit, see the <a href="http://kentbeck.github.com/junit/javadoc/latest/">JUnit Javadoc</a> or the <a href="http://junit.sourceforge.net/">JUnit Homepage</a>.  Here is what I came up with using only the basic JUnit tools.  Please keep in mind that I&#8217;m a beginner with JUnit and testing in general.</p>
<div class="highlight">
<pre class="height200px"><span class="kn">import</span> <span class="nn">static</span> <span class="n">org</span><span class="o">.</span><span class="na">junit</span><span class="o">.</span><span class="na">Assert</span><span class="o">.*;</span>
<span class="kn">import</span> <span class="nn">org.junit.Before</span><span class="o">;</span>
<span class="kn">import</span> <span class="nn">org.junit.Test</span><span class="o">;</span>

<span class="kd">public</span> <span class="kd">class</span> <span class="nc">SortedStringListTest</span> <span class="o">{</span>

    <span class="c1">// Usually start by declaring at least one instance variable of the same</span>
    <span class="c1">// type of the class you are testing.</span>
    <span class="kd">private</span> <span class="n">SortedStringList</span> <span class="n">list_</span><span class="o">;</span>

    <span class="c1">// @Before annotation means execute this method before executing each test</span>
    <span class="c1">// method</span>
    <span class="nd">@Before</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setUp</span><span class="o">()</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
        <span class="c1">// Initialize the instance variable(s) in the setUp() method. That way</span>
        <span class="c1">// every test method will start with the same initial values.</span>
        <span class="n">list_</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SortedStringList</span><span class="o">();</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;C&quot;</span><span class="o">);</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;b&quot;</span><span class="o">);</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;D&quot;</span><span class="o">);</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;a&quot;</span><span class="o">);</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;1&quot;</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="c1">// @Test annotation means this is a test method and should be executed.</span>
    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetSize</span><span class="o">()</span> <span class="o">{</span>
        <span class="c1">// Each method in a test case should have EXACTLY one assert statement</span>
        <span class="c1">// Here I&#39;m using assertEquals. Usage as follows:</span>
        <span class="c1">// assertEquals([String], expected, actual)</span>
        <span class="c1">// [String] is optional and embellishes the assert message on failure</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">5</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">());</span>
    <span class="o">}</span>

    <span class="c1">// It&#39;s good practice to test the boundaries of the parameters (beginning,</span>
    <span class="c1">// middle, end, and bad input)</span>
    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testAddFirst</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;0&quot;</span><span class="o">);</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;0&quot;</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testAddMiddle</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;bb&quot;</span><span class="o">);</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;bb&quot;</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testAddLast</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;Z&quot;</span><span class="o">);</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">5</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;Z&quot;</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testAddBadInput</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="s">&quot;&quot;</span><span class="o">);</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="s">&quot;No adding empty strings&quot;</span><span class="o">,</span> <span class="mi">5</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">());</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveIntFirst</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="mi">0</span><span class="o">);</span>
        <span class="c1">// assertTrue([String], boolean expression)</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">4</span> <span class="o">&amp;&amp;</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;1&quot;</span><span class="o">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveIntMiddle</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="mi">2</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">4</span> <span class="o">&amp;&amp;</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;b&quot;</span><span class="o">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveIntLast</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="mi">4</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">4</span> <span class="o">&amp;&amp;</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;D&quot;</span><span class="o">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveIntBadInput</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(-</span><span class="mi">1</span><span class="o">);</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="mi">5</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">5</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveStringFirst</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="s">&quot;1&quot;</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">4</span> <span class="o">&amp;&amp;</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;1&quot;</span><span class="o">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveStringMiddle</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="s">&quot;b&quot;</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">4</span> <span class="o">&amp;&amp;</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;b&quot;</span><span class="o">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveStringLast</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="s">&quot;D&quot;</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">4</span> <span class="o">&amp;&amp;</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;D&quot;</span><span class="o">)</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testRemoveStringBadInput</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">list_</span><span class="o">.</span><span class="na">remove</span><span class="o">(</span><span class="s">&quot;Z&quot;</span><span class="o">);</span>
        <span class="n">assertTrue</span><span class="o">(</span><span class="n">list_</span><span class="o">.</span><span class="na">getSize</span><span class="o">()</span> <span class="o">==</span> <span class="mi">5</span><span class="o">);</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetStringAtFirst</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="s">&quot;1&quot;</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getStringAt</span><span class="o">(</span><span class="mi">0</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetStringAtMiddle</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="s">&quot;b&quot;</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getStringAt</span><span class="o">(</span><span class="mi">2</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetStringAtLast</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="s">&quot;D&quot;</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getStringAt</span><span class="o">(</span><span class="mi">4</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetStringAtBadInput</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="kc">null</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getStringAt</span><span class="o">(-</span><span class="mi">1</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetIndexOfFirst</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;1&quot;</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetIndexOfMiddle</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;b&quot;</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetIndexOfLast</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;D&quot;</span><span class="o">));</span>
    <span class="o">}</span>

    <span class="nd">@Test</span>
    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">testGetIndexOfBadInput</span><span class="o">()</span> <span class="o">{</span>
        <span class="n">assertEquals</span><span class="o">(-</span><span class="mi">1</span><span class="o">,</span> <span class="n">list_</span><span class="o">.</span><span class="na">getIndexOf</span><span class="o">(</span><span class="s">&quot;Z&quot;</span><span class="o">));</span>
    <span class="o">}</span>
<span class="o">}</span>
</pre>
</div>
<p>After saving the test case, run it by simply clicking on the <strong>Run</strong> button.  The following should appear in your left panel:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/JUnit_test_results.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/JUnit_test_results-450x356.png" alt="JUnit Test Results" title="JUnit Test Results" width="450" height="356" class="aligncenter size-medium wp-image-875" /></a></p>
<p>As you can see, there were no failures, but one of the tests generated an <strong>ArrayIndexOutOfBoundsException</strong>.  In the public method <strong>getStringAt</strong>, I had failed to check for valid input.  We can fix that by changing the method definition of <strong>getStringAt</strong> in the <strong>SortedStringList</strong> class to the following:</p>
<div class="highlight">
<pre>    <span class="kd">public</span> <span class="n">String</span> <span class="nf">getStringAt</span><span class="o">(</span><span class="kt">int</span> <span class="n">index</span><span class="o">)</span> <span class="o">{</span>
        <span class="k">if</span> <span class="o">(</span><span class="n">index</span> <span class="o">&lt;</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">index</span> <span class="o">&gt;=</span> <span class="n">size_</span><span class="o">)</span> <span class="o">{</span>
            <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;There is no string at the given index.&quot;</span><span class="o">);</span>
            <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
        <span class="o">}</span>
        <span class="k">return</span> <span class="n">stringList_</span><span class="o">[</span><span class="n">index</span><span class="o">];</span>
    <span class="o">}</span>
</pre>
</div>
<p>Now when we try running the SortedStringListTest test case again, we see the following:</p>
<p><a href="http://greeennotebook.com/wp-content/uploads/2010/09/JUnit_test_results_2.png"><img src="http://greeennotebook.com/wp-content/uploads/2010/09/JUnit_test_results_2-450x372.png" alt="JUnit Test Results 2" title="JUnit Test Results 2" width="450" height="372" class="aligncenter size-medium wp-image-876" /></a></p>
<p>Success!  Now we see the value in unit testing.</p>
<p>Now, to be clear, I plan to do all my JUnit testing from within Eclipse.  However, I also like to know how to do things from the terminal.  Here&#8217;s how I would compile and run my test case on my Linux box.  Paths matter here, so I&#8217;m just going to post exactly how I&#8217;ve successfully run this on my machine and you can substitute your paths as appropriate.  The path to SortedStringListTest on my box is <strong>/home/greeenguru/workspace/Practice/src/SortedStringListTest.java</strong>.  In the command below, I&#8217;ve made it more complicated by not navigating to the appropriate directory first (on purpose).  This way, I have to modify the classpath to include the JUnit library as well as the directory containing my SortedStringList classes.  Also note that you have to compile both classes to bytecode before attempting to run the test case with JUnit.</p>
<pre>
<span class="prompt">~$</span> javac <em>-cp /usr/lib/eclipse/plugins/org.junit4_4.5.0.v20090824/junit.jar:/home/greeenguru/workspace/Practice/src</em> ~/workspace/Practice/src/SortedStringList.java ~/workspace/Practice/src/SortedStringListTest.java
<span class="prompt">~$</span> java <em>-cp /usr/lib/eclipse/plugins/org.junit4_4.5.0.v20090824/junit.jar:/home/greeenguru/workspace/Practice/src</em> <strong>org.junit.runner.JUnitCore</strong> SortedStringListTest
JUnit version 4.8.1
.....The list is full or the string is invalid.
.There is no such string in the list.
.There is no such string in the list.
.There is no such string in the list.
.There is no string at the given index.
There is no string at the given index.
.There is no such string in the list.
.There is no such string in the list.
.There is no such string in the list.
.There is no such string in the list.
....There is no string at the given index.
....There is no such string in the list.

Time: 0.022

OK (21 tests)
</pre>
<p>Above, you can see that each time I run a test on one of the methods in SortedStringList with invalid input, a message is printed.  Since this class will probably not be used directly by a user, the messages are useless and should be removed (oops).  Besides that, though, you can see that the tests all completed successfully. If they hadn&#8217;t, I&#8217;d be able to see which ones failed or which exceptions were raised.  That&#8217;s it!</p>
]]></content:encoded>
			<wfw:commentRss>http://greeennotebook.com/2010/09/junit-testing-java-code-using-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

