<?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>U-notez</title>
	<atom:link href="http://www.unitz.com/u-notez/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unitz.com/u-notez</link>
	<description>Web development tips, ideas and discoveries from Unitz LLC</description>
	<lastBuildDate>Thu, 17 Dec 2009 14:34:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Automate Your Christmas Lights!</title>
		<link>http://www.unitz.com/u-notez/2009/12/automate-your-holiday-lights/</link>
		<comments>http://www.unitz.com/u-notez/2009/12/automate-your-holiday-lights/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 20:35:00 +0000</pubDate>
		<dc:creator>Paul Reilly</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[holiday]]></category>
		<category><![CDATA[lighting]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=144</guid>
		<description><![CDATA[As the holidays fast approach, millions of us are pulling decorations out of the attic, grabbing extension cords and untangling the lights. Last weekend I set up the tree, put lights outside, and put candle lights in each of my windows. It certainly looked nice and festive, but I quickly dreaded having to plug and [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_153" class="wp-caption alignright" style="width: 160px"><img class="size-thumbnail wp-image-153" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/xmaslights-150x150.jpg" alt="Holiday Lights Display" width="150" height="150" /><p class="wp-caption-text">Holiday Lights Display</p></div>
<p>As the holidays fast approach, millions of us are pulling decorations out of the attic, grabbing extension cords and untangling the lights. Last weekend I set up the tree, put lights outside, and put candle lights in each of my windows. It certainly looked nice and festive, but I quickly dreaded having to plug and unplug each set of lights every day.</p>
<p>Fortunately, I had a solution! Using X10 automation modules, my windows computer and about 30 minutes of effort, my lights now turn on and off automatically every day!  This post details the steps I took to accomplish this, and provides some resources so you can set up a similar solution yourself.</p>
<p><span id="more-144"></span>The X10 automation system is technology that send signals across your home wiring, to turn on and off lights and devices you plug in to power outlets. To get up and running yourself, you&#8217;ll need a starter X10 kit &#8211; I recommend the <a title="X10 Firecracker Kit" href="http://www.x10.com/automation/firecracker.htm" target="_blank">Firecracker Kit</a>.</p>
<div id="attachment_149" class="wp-caption alignleft" style="width: 160px"><img class="size-thumbnail wp-image-149" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/fc_remote-150x150.jpg" alt="X10 Firecracker Kit" width="150" height="150" /><p class="wp-caption-text">X10 Firecracker Kit</p></div>
<p>Be forewarned &#8211; the x10.com store is notorious for popup ads and gaudy design. Despite this, their products are quite reputable. Also please note that most of the items mentioned in this post are available on <a title="X10 Firecracker Kit Search on eBay" href="http://shop.ebay.com/i.html?_nkw=x10+firecracker+kit&amp;_sacat=0&amp;_trksid=p3286.m270.l1313&amp;_odkw=x10&amp;_osacat=0" target="_blank">eBay</a> for a fraction of the cost. The Firecracker kit has four items &#8211; a transceiver which receives the on/off signals and sends them through the house wiring (and can turn on/off an item plugged into it), a lamp module which can turn lights plugged into it on and off when it receives a signal sent by the transceiver, and a computer interface and remote control &#8211; both of which send the on/off signals to the transceiver. You can purchase any additional lamp outlets you may need on eBay inexpensively as well.</p>
<p>The x10 transceiver lets you select a letter from A-P via a simple dial.  This is the &#8216;house code&#8217; for that transceiver. Each of your lamp modules then let you pick both a house code and unit number from 2 to 16 (the transceiver itself is unit 1). Each combination of house and unit numbers must be unique. So to get started, set your transceiver to house code A, plug a set of Christmas lights into it, and plug it into the wall. Then take your lamp module, set it to house code A and unit number 2, and also plug lights into it and plug it into the wall. You&#8217;re ready to turn these on and off using the included remote control! Set your remote to house code A, and then hit the unit 1 and unit 2 on buttons &#8211; voila! the lights turn on. With more lamp modules you can set all the lights you want to control throughout your house this way, as long as the unit numbers are all unique.</p>
<p>After setting this up, you could just stop here. You can now turn off all of the lights with the push of a few buttons &#8211; much simpler than walking all over the house twice every day! But I wanted the lights to turn on and off completely automatically. To accomplish this, I utilized the fourth item that came with the Firecracker kit &#8211; the computer interface, called the CM17A. This tiny little item plugs into your computer&#8217;s serial port and sends the same signals that the remote control sends, only you can configure your computer to send the signals automatically. The following explanation is done on a computer running Windows 7, but the same steps can be accomplished on other versions of Windows, though the steps may look a bit different.</p>
<div id="attachment_154" class="wp-caption alignright" style="width: 552px"><img class="size-full wp-image-154" title="X10 Command Line" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/commandprompt1.GIF" alt="commandprompt" width="542" height="214" /><p class="wp-caption-text">X10 Command Line Example</p></div>
<p><a title="x10 christmas light automation" href="http://www.x10.com/friends/refer.cgi?pmreil@yahoo.com" target="_blank">X10.com</a> offers software packages for a fee that allow you to set up complicated macros &#8211; this was overkill for me as I just needed to send on and off signals once a day. I used a very simple command line tool created by Adam Davis instead. Once you have the CM17A plugged into your computer, visit his <a href="http://www.ubasics.com/adam/electronics/cm17.shtml" target="_blank">website </a>and download the CM17A.zip file. Create a c:\cm17a\ directory and unzip the files there. Then start up the &#8216;Command Prompt&#8217; under the accessories section of the start menu.</p>
<p>Type &#8216;CD C:\cm17a\&#8217; into the command prompt, as illustrated in the screen shot. The cm17a program is in this directory and is called with two or more parameters. The first is the COM port number of your actual cm17a device on your computer. The second parameter is the device you want to control. If you want to turn the lights plugged into the lamp module you set as house code A, unit 2, the parameter is &#8216;a2on,&#8217; and to turn it off, it is &#8216;a2off.&#8217; You can string multiple commands in a row, separated by spaces, so if your cm17a device was on COM port 2, and you want to turn lamp modules a2, a3 and a4 on, you would type &#8216;cm17a 2 a2on a3on a4on&#8217; into the command prompt and press enter. All three sets of lights should now turn on. By the way, if you don&#8217;t know the COM port of your device, it is likely 1,2,3 or 4, so you can type a few sample commands varying the code to see which one works.</p>
<div id="attachment_147" class="wp-caption alignright" style="width: 391px"><img class="size-full wp-image-147" title="X10 Batch Script" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/batch.GIF" alt="X10 Batch Script" width="381" height="141" /><p class="wp-caption-text">X10 Batch Script Example</p></div>
<p>Okay cool, so now we have a way to control the lights via our computer, now what? The next step is to load up notepad &#8211; we have to create a very simple batch script. This simply means we type the command that you&#8217;d use through the command prompt into a file that we can run automatically later. Follow the screen shots to see how to type the command and how to save the file &#8211; its important to select save as file type &#8216;any file&#8217; and save the file with .bat at the end. Otherwise it will append .txt to the end and this won&#8217;t work.</p>
<div id="attachment_151" class="wp-caption alignnone" style="width: 626px"><img class="size-full wp-image-151 " title="Save As Batch Script" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/saveas.GIF" alt="Save as a .bat file in Notepad" width="616" height="332" /><p class="wp-caption-text">Save as a .bat file in Notepad</p></div>
<p>After you created a lightson.bat, now do the same process again, changing the on&#8217;s in the file to off, and save it as lightsoff.bat.</p>
<p>The final step is to tell windows to run these batch scripts automatically. This is done using the windows &#8216;Task Scheduler, which is in Start -&gt; Accessories -&gt; System Tools. When the task scheduler is up and running, select Action -&gt; Create Basic Task. We&#8217;re going to create two of these, one to turn the lights on, and one to turn the lights off. Name and describe the task any way you&#8217;d like. Under Trigger, select daily, and then pick the time you want the lights to turn on. Under action, select Start a Program, and then browse to C:\cm17a\ and selected the lightson.bat script that you created. Also, under the &#8216;Start In&#8217; box, type in &#8216;c:\cm17a\.&#8217;  Once you&#8217;ve finished the lights on task, do the same thing to create a lights off task, which runs at a different time and calls the lightsoff.bat program instead. Optionally you can refine the tasks further by editing their properties, telling the computer to turn itself on if it&#8217;s in sleep mode to run the task, along with other options.</p>
<p><img class="size-full wp-image-157 alignnone" title="X10 Task Manager" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/task1.GIF" alt="X10 Task Manager Example" width="463" height="347" /></p>
<p><img class="alignnone size-full wp-image-146" title="X10 Task Action" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/12/actions.GIF" alt="X10 Task Action" width="709" height="278" /></p>
<p>This was the last step! Now your Holiday lights will turn themselves on and off each day without you having to lift another finger. Happy holidays from <a href="http://www.unitz.com">Unitz</a>!</p>
<hr />
<h2>Additional Notes and Tips:</h2>
<p>The bigger your house or your lighting needs, the more complex this setup can become. The following are a few additional tips that might help.</p>
<ul>
<li>Your whole house isn&#8217;t necessarily on the same wiring circuit. This means that some light modules might not respond to transceiver signals. There are a few solutions here. X10 offers hardware to bridge your circuits, but this requires opened up your power panel. A simpler solution is to just buy an additional transceiver and set it to another house code &#8211; then set the light modules on this circuit to the new house code.</li>
<li>To avoid buying lots of lamp modules, you can use extension cords and power strips to turn on multiple lights with one receiver &#8211; make you&#8217;re only using low wattage lights though.</li>
<li>Newer computers don&#8217;t always have serial ports. Fortunately for just a few dollars on eBay you can buy Serial to USB converters, which solve this problem.</li>
<li>The wireless range of CM17A might not be wide enough to reach your transceiver(s). You can purchase serial extension cables (or in a USBextension if using a USB to serial adapter.)</li>
<li>Obviously this solution can be used for many more uses aside from Christmas lights.</li>
<li>If you want to do more complex actions, or involve other <a title="x10 christmas light automation" href="http://www.x10.com/friends/refer.cgi?pmreil@yahoo.com" target="_blank">X10 products</a> like video cameras, they do offer software that has more control.</li>
<li>X10 lamp modules do not currently work well with compact fluorescent bulbs.</li>
<li>This same approach can be used with other operating systems. In Linux it can be done with bash scripts and cron jobs &#8211; the following explains how to control the <a href="http://pr0gr4mm3r.com/linux/getting-your-x10-cm17a-firecracker-module-working-in-linux/" target="_blank">CM17a in Linux</a>.</li>
<li>If you only want to control some devices automatically, you can still use the remote control to power other devices.</li>
<li><a href="http://www.iopus.com/guides/winscheduler.htm" target="_blank">http://www.iopus.com/guides/winscheduler.htm</a> has additional examples of how to schedule tasks in windows.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2009/12/automate-your-holiday-lights/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Location, Location, Location Aware Websites</title>
		<link>http://www.unitz.com/u-notez/2009/11/location-location-location-aware-websites/</link>
		<comments>http://www.unitz.com/u-notez/2009/11/location-location-location-aware-websites/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 05:07:23 +0000</pubDate>
		<dc:creator>Paul Reilly</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=126</guid>
		<description><![CDATA[According to reports from Gartner, Juniper Research and others, smartphone sales are growing at a fantastic rate. Sales of smartphones have increased 47% over the previous year, and some estimates suggest that smartphones will make up 80% of the  mobile phone market in 5 years. Smartphones are defined as mobile phones with advanced capabilities &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>According to reports from <a href="http://www.gartner.com/it/page.jsp?id=1126812" target="_blank">Gartner</a>, <a href="http://juniperresearch.com/shop/viewpressrelease.php?pr=131" target="_blank">Juniper Research</a> and <a href="http://www.crunchgear.com/2009/08/13/mobile-phone-sales-down-smartphone-sales-up/" target="_blank">others</a>, smartphone sales are growing at a fantastic rate. Sales of smartphones have increased 47% over the previous year, and some estimates suggest that smartphones will make up 80% of the  mobile phone market in 5 years. <a href="http://en.wikipedia.org/wiki/Smartphone" target="_blank">Smartphones </a>are defined as mobile phones with advanced capabilities &#8211; this sales trend has clearly been led by the iPhone and its internet connectivity.</p>
<p>If these analysts are correct, in a few years, 4 out of 5 people will be using the internet on their phones. What does this mean for you? Well, there will be a significant change in users&#8217; internet usage behavior.<br />
<span id="more-126"></span><br />
<div id="attachment_137" class="wp-caption alignleft" style="width: 460px"><a href="http://www.opera.com/smw/2009/09/#chart_pages"><img class="size-full wp-image-137 " title="Mobile Web Data Usage Trends" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/11/mobile-data.jpg" alt="Mobile Web Data Usage Trends" width="450" height="286" /></a><p class="wp-caption-text">Source: Opera</p></div></p>
<p>Currently, your existing and potential customers use the internet when they are stationary &#8211; at home or at the office. They surf haphazardly, often finding your website through links or basic searches.   Only when they use a <a href="http://maps.google.com" target="_blank">mapping</a> service and search around a central point does the location of your business really come into play.</p>
<p>In this web enabled, mobile future, users&#8217; behavior will be different. With a web browser constantly at their fingertips, the information they look for will be different. They will have new ideas and questions:</p>
<ul>
<li>What is the closest type of place I am looking for, based on where I am right now?</li>
<li>What are the details and reviews of this product I am looking at right now?</li>
<li>What is the reputation of  the business I am standing by?</li>
<li>Should I go in or is there a similar establishment nearby that is better?</li>
<li>Are the prices I am looking at right now competitive?</li>
<li>What does your company offer based on where I am now?</li>
<li>.. And countless others&#8230;</li>
</ul>
<p>Smartphones are being built now with <a href="http://www.apple.com/iphone/iphone-3gs/maps-compass.html" target="_blank">GPS functionality</a>, meaning the phones can know where the user is.  Many phone applications can already use this information when returning data to you &#8211; giving results based on the city you&#8217;re in.  The practice of <a href="http://en.wikipedia.org/wiki/Geotagging" target="_blank">geotagging</a>, or defining data with an associated location is increasingly popular, gaining prevalence with photo services like <a href="http://blog.flickr.net/en/2008/08/08/introducing-a-new-way-to-geotag/" target="_blank">Flickr</a>, and now shifting into micro-blogging services like <a href="http://www.fastcompany.com/blog/kit-eaton/technomix/geotagging-twitters-killer-feature" target="_blank">Twitter</a>.  Soon many more services will be targeting the data they return based on your location.</p>
<p><a title="PRTMobile.com: The Mobile Web comes to the folks next door" rel="bookmark" href="http://www.prtmobile.com/" target="_blank">PRTMobile.com</a>, as written up in <a href="http://www.crunchgear.com/2009/06/24/the-mobile-web-is-getting-closer/" target="_blank">CrunchGear.com</a> is a perfect example. They offer mobile-web friendly property listings, that customers easily access from their phones through simple URLs.  The chances of passerbys looking up property listings later from home is minuscule, but through PRTMobile&#8217;s service, these listings get immediate, interested customer response.</p>
<p>There are three aspects of this mobile future that are important to consider for your own site.</p>
<ol>
<li>Make sure your websites can handle mobile visitors. Visit your website from an iPhone and BlackBerry and make sure that users can find what they need &#8211; make changes if they can&#8217;t.  To take it a step further, consider a separate mobile based website entirely like eBay and Facebook currently offer, that streamlines the UI to be mobile friendly.</li>
<li>The good strategy is to prepare your content for this mobile future. The right steps for your company depend on your industry.  Start your analysis by considering how your customers might interact with your firm or products while away from their desks.If you are a location based business, search for your products and services through mapping websites and query search engines for them with your city included. If you don&#8217;t show up where you want to be, work on associating your location with your web presence. Ideas here include geocoding photos, updating your content to be more location specific and utilizing review services like <a href="http://www.yelp.com" target="_blank">Yelp</a>. If you have a budget for advertising, consider location based online ads, that will pop up when users are searching in your area.</li>
<li>Finally, again depending on your product and services, consider creating a web portal that returns data based on the user&#8217;s location.  Users will know they can visit your website from their phone anywhere and get just what they need, right away. If your site focuses instead on a global product or service, instead analyze how accessible your key information is from mobile devices &#8211; make sure the requests your customers have can be easily met using their phones.</li>
</ol>
<p>The changes and advances you make today will help your business grow along with the smartphone market.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2009/11/location-location-location-aware-websites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion (SVN) Repository Integration with Mantis Bug Tracker</title>
		<link>http://www.unitz.com/u-notez/2009/10/subversion-svn-integration-mantisbt/</link>
		<comments>http://www.unitz.com/u-notez/2009/10/subversion-svn-integration-mantisbt/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 23:23:39 +0000</pubDate>
		<dc:creator>Chris Dornfeld</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=118</guid>
		<description><![CDATA[I recently set out to integrate a Subversion (SVN) source control repository with MantisBT, a free bug tracking system.  I quickly found John Reese&#8217;s Source Integration plugin &#8212; available for the MantisBT 1.2.0 development branch &#8212; which promised to do exactly what I needed.
Reese provides step-by-step instructions to configure his plugin for a Git [...]]]></description>
			<content:encoded><![CDATA[<p>I recently set out to integrate a <a href="http://subversion.tigris.org/" target="_blank">Subversion</a> (SVN) source control repository with <a href="http://www.mantisbt.org/" target="_blank">MantisBT</a>, a free bug tracking system.  I quickly found John Reese&#8217;s <a href="http://git.mantisforge.org/w/source-integration.git" target="_blank">Source Integration plugin</a> &#8212; available for the MantisBT 1.2.0 development branch &#8212; which promised to do exactly what I needed.</p>
<p>Reese provides <a href="http://leetcode.net/blog/2009/01/integrating-git-svn-with-mantisbt/" target="_blank">step-by-step instructions</a> to configure his plugin for a Git version control repository, but although his plugin supports Subversion, no walkthrough was available for an SVN scenario.  Configuring the SVN plugin correctly took some trial and error, so I decided to document the process for others who want to get Mantis and SVN to play nicely.</p>
<p><span id="more-118"></span><br />
<h3>Prerequisites</h3>
<ul>
<li><a href="http://www.mantisbt.org/download.php" target="_blank">MantisBT 1.2.0</a>
<ul>
<li>As of this post, the latest development version is 1.2.0rc2</li>
</ul>
</li>
<li><a href="http://git.mantisforge.org/w/source-integration.git" target="_blank">Mantis Source Integration plugin</a>
<ul>
<li>This post refers to development snapshot version Fri, 2 Oct 2009 10:50:07</li>
</ul>
</li>
<li><a href="http://subversion.tigris.org/" target="_blank">Subversion</a> command-line binaries
<ul>
<li>The binaries must be available on the web server where MantisBT is installed</li>
</ul>
</li>
<li>A Subversion repository
<ul>
<li>It&#8217;s not necessary for the repository itself to reside on the web server where MantisBT is installed</li>
</ul>
</li>
<li><a href="http://www.websvn.info/" target="_blank">WebSVN</a>, a web front-end for Subversion respositories
<ul>
<li>It&#8217;s not necessary for WebSVN to reside on the web server where MantisBT is installed or the server where your Subversion repository resides</li>
<li>WebSVN should be configured to access the Subversion repository you&#8217;ll integrate with Mantis</li>
</ul>
</li>
</ul>
<p>Technically, WebSVN is optional: the Source Integration plugin will pull in your Subversion history using the command-line binaries alone.  However, without WebSVN, links to browse the repository and view files or diffs from within MantisBT won&#8217;t work.</p>
<h3>Source Integration Plugin Setup</h3>
<p>Follow <a href="http://leetcode.net/blog/2009/01/integrating-git-svn-with-mantisbt/" target="_blank">John Reese&#8217;s instructions</a> through Step 4.  You should now have the plugin installed in your MantisBT environment:</p>
<p><img class="alignnone size-full wp-image-120" title="MantisBT Installed Plugins" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/10/mantisbt-installed-plugins.png" alt="MantisBT Installed Plugins" width="690" height="417" /></p>
<p>Next, click on the <strong>Subversion / WebSVN Integration</strong> link to access the configuration for the SVN plugin:</p>
<p style="text-align: center;"><img class="size-full wp-image-121 aligncenter" title="MantisBT SVN Configuration" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/10/mantisbt-svn-configuration.png" alt="MantisBT SVN Configuration" width="518" height="92" /></p>
<p>Fill in the location where the SVN command-line binaries reside on the web server.  In the example above, my SVN binary is <strong>/usr/local/bin/svn</strong>.  Be sure to only enter the directory portion of the path.  Beware: if you enter the path incorrectly, the form will not return an error message.</p>
<p>Proceed with Steps 5 through 7 in Reese&#8217;s instructions, selecting <strong>WebSVN</strong> as the repository type.  When you reach Step 8, the repository settings screen will look like this:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-122" title="MantisBT WebSVN Repository" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/10/mantisbt-websvn-repository.png" alt="MantisBT WebSVN Repository" width="610" height="514" /></p>
<p>The settings are a little ambiguous at first: we&#8217;re creating a WebSVN repository, so does the <strong>URL</strong> field refer to the WebSVN address or the URL to the SVN repository itself?  The <strong>WebSVN URL</strong> field calls for a trailing slash, but what about the <strong>WebSVN Path</strong>?</p>
<p>Beta software being what it is, the instructions will surely improve as the software evolves.  For now, here are some additional guidelines to clarify the usage of each field shown above.</p>
<ul>
<li><strong>Name</strong>
<ul>
<li>A title of your choosing that will be used to describe this repository in the Mantis repositories list.</li>
</ul>
</li>
<li><strong>URL</strong>
<ul>
<li>The full Subversion (not WebSVN) repository URL</li>
<li>In the example above, the repository resides at <strong>svn://svnserver/myproject/subdir</strong></li>
</ul>
</li>
<li><strong>SVN Username</strong>
<ul>
<li>A valid username for accessing the SVN repository you entered in the <strong>URL</strong> field</li>
</ul>
</li>
<li><strong>SVN <strong>P</strong></strong><strong>assword</strong>
<ul>
<li>The corresponding password for the username you entered</li>
</ul>
</li>
<li><strong>WebSVN URL</strong>
<ul>
<li>The base URL of your WebSVN installation: that is, the WebSVN landing page where you select from a list of repositories to browse</li>
<li>In the example above, the WebSVN landing page is located at <strong>http://svnserver/websvn/</strong></li>
</ul>
</li>
<li><strong>WebSVN Name</strong>
<ul>
<li>The name you entered in your WebSVN settings to describe the SVN repository</li>
<li>In the example above, the WebSVN repository name is <strong>myproject</strong></li>
<li>Keep in mind that WebSVN names are not necessarily related to the SVN repository URL.  Check your WebSVN config file (or compare with the repository list on the WebSVN landing page) to make sure you are using the appropriate spelling and capitalization here.</li>
</ul>
</li>
<li><strong>WebSVN Path</strong>
<ul>
<li>This is the path to the Subversion repository, relative to the top-level folder in your WebSVN repository</li>
<li>In the example above, we have a WebSVN repository named <strong>myproject</strong> which is configured in our WebSVN settings to point to the Subversion URL <strong>svn://svnserver/myproject</strong></li>
<li>Since we want this MantisBT repository to point to <strong>svn://svnserver/myproject/subdir</strong> (one level deeper), the WebSVN path, relative to the WebSVN top-level path, is <strong>/subdir/</strong></li>
<li>In my testing, it was necessary to <strong>include both leading and trailing slashes</strong> in the WebSVN Path field</li>
</ul>
</li>
<li><strong>Standard Repository</strong>
<ul>
<li>Check this box if you use the conventional Subversion folder structure. In other words, the Subversion repository URL you entered should have subfolders named <strong>trunk</strong>, <strong>branches</strong> and <strong>tags</strong>, respectively.</li>
</ul>
</li>
<li><strong>Trunk Path/Branch Path/Tag Path</strong>
<ul>
<li>If you didn&#8217;t check the Standard Repository box, and if you use a different folder layout for your trunk/branches/tags folders, enter the paths here.</li>
<li>I assume that these paths are relative to the Subversion URL.  However, I haven&#8217;t tested these settings and some trial and error may be needed.</li>
</ul>
</li>
<li><strong>Ignore Other Paths</strong>
<ul>
<li>If you didn&#8217;t check the Standard Repository box, and if you  entered your custom trunk/branches/tags folder paths in the previous fields, you can tell Mantis to ignore any other paths under the Subversion repository URL by checking this box.</li>
</ul>
</li>
</ul>
<p>When you&#8217;re finished, click the <strong>Update Repository</strong> button and proceed with the remaining instructions.</p>
<p>Thanks to John Reese and the other plugin contributors for a useful add-on.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2009/10/subversion-svn-integration-mantisbt/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Make Your Company Indispensable Online</title>
		<link>http://www.unitz.com/u-notez/2009/10/make-your-company-indispensable-online/</link>
		<comments>http://www.unitz.com/u-notez/2009/10/make-your-company-indispensable-online/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 14:57:49 +0000</pubDate>
		<dc:creator>Paul Reilly</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=89</guid>
		<description><![CDATA[Most website owners now realize that, in order for their site to remain popular and successful, it needs to evolve. Exactly how it should evolve, however, isn&#8217;t always easy to determine. Should you blog or tweet or implement some other buzzword you&#8217;ve heard lately?  Should you do what your competitors have already done?  Although these [...]]]></description>
			<content:encoded><![CDATA[<p>Most website owners now realize that, in order for their site to remain popular and successful, it needs to evolve. Exactly how it should evolve, however, isn&#8217;t always easy to determine. Should you blog or tweet or implement some other buzzword you&#8217;ve heard lately?  Should you do what your competitors have already done?  Although these changes and ideas certainly have merit, by focusing just on these approaches you will  constantly be playing catchup.</p>
<p>Instead, I suggest thinking about your customers first and how you can use the internet and technology to make their lives easier.  Sure, a blog or twitter stream lets your customers hear from you more readily, and this communication has tremendous value.  However, this added communication doesn&#8217;t necessarily make you any less dispensable to the customer. Rather, to become truly indispensable, you need to offer them new services and features that they come to depend on.</p>
<p><span id="more-89"></span><strong>Examples of companies creating new value for their customers:</strong><a href="http://www.usaa.com" target="_blank"><img class="size-full wp-image-98 alignright" style="border: 1px solid black; margin: 8px;" title="images" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/10/images.jpg" alt="USAA" width="79" height="79" /></a></p>
<p>I use <a href="http://www.usaa.com" target="_blank">USAA </a>for my personal checking account. They now allow me to deposit checks online using my scanner for free, with their <a href="https://www.usaa.com/inet/ent_utils/McStaticPages?key=bank_deposit" target="_blank">Deposit@Home</a> service. This technology saves a trip to the bank and is incredibly valuable to me.  Meanwhile, <a href="http://www.wachovia.com" target="_blank">Wachovia</a>, my prior bank, does not offer a comparable service. I value USAA much more than Wachovia now, and have no desire to find a different bank.  Additionally, I now believe that USAA will continue to add functionality to make my life even easier, as they&#8217;ve set the precedent. Trusting their dedication to their customers makes me value them and want to stick with them as well.</p>
<p>As mobile computing becomes more widespread, new opportunities to help your customers abound. Companies that have created successful iPhone applications and mobile<a href="http://www.espn.com" target="_blank"><img class="alignright size-full wp-image-100" style="margin: 5px;" title="ESPN_logo" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/10/ESPN_logo.jpg" alt="ESPN_logo" width="150" height="56" /></a> sites for their customers have received great publicity through word of mouth and commentary, <a href="http://www.fedex.com" target="_blank"><img class="alignleft size-full wp-image-101" style="margin: 5px;" title="FedEx-Logo" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/10/FedEx-Logo.jpg" alt="FedEx-Logo" width="150" height="54" /></a>often lowered administrative costs and certainly better established their brand.  <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=304462049&amp;mt=8" target="_blank">FedEx </a>has made it simple to track packages away from your computer. <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317469184&amp;mt=8" target="_blank">ESPN </a>makes checking scores easier than ever before. In turn, their customers now use these companies&#8217; total basket of services more and are more likely to ship FedEx and go to ESPN.com at home because of these applications.  <a href="http://www.ismashphone.com/2009/07/corporate-branding-races-to-iphone-apps-winners-and-losers.html" target="_blank">Read overviews</a> of several other company&#8217;s mobile application ideas.  Although a full fledged iPhone application may be overkill for your business, definitely consider how accessible and useful your website is to your customers when they&#8217;re away from their desktops.</p>
<p><strong>How to create customer value yourself:</strong></p>
<p>These two examples are just a sliver of the possibilities &#8211; there are so many ways to add value for your customers online. Step back and consider all the various interactions your customers have with you. Are you in a business that is appointment driven? Provide updates and reminders about appointments through the internet. Are you constantly mailing invoices and requiring mailed checks?  Consider online billing or automated payments.  Do you provide information that your customers call to inquire about? Push this content to them in more accessible ways.  Any way your customers contact you is an area to explore.</p>
<p>Online possibilities and prospects  are constantly evolving. As you consider all the customer interactions you have, there are inevitably services you can create that will save time and effort. When you give your customers these abilities, they will come to rely on it, and become even more devoted to you. If you do not, your competitor will first, and you will lose your customers. Take time now to talk to online strategists about your firm&#8217;s operations and logistics, brainstorm great new ideas, and make your firm truly indispensable.</p>
<p><em>Paul Reilly is a partner and co-founder of <a href="http://www.unitz.com/" target="_blank">Unitz LLC</a>, a web development and internet strategy firm based in Arlington, VA and Trumbull, CT.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2009/10/make-your-company-indispensable-online/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Is Your Online Marketing Campaign Worth the Money?  Using Web Analytics to Measure ROI</title>
		<link>http://www.unitz.com/u-notez/2009/06/web-marketing-campaigns-roi-analytics/</link>
		<comments>http://www.unitz.com/u-notez/2009/06/web-marketing-campaigns-roi-analytics/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 15:09:49 +0000</pubDate>
		<dc:creator>Paul Reilly</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=48</guid>
		<description><![CDATA[It&#8217;s a common scenario.  Marketers in smaller businesses meet with management and decide to invest in a new online campaign for a product or service.  They all discuss how to structure the campaign &#8211; perhaps an email strategy that links to a micro-site or landing page or maybe a new site altogether.  The marketing team [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a common scenario.  Marketers in smaller businesses meet with management and decide to invest in a new online campaign for a product or service.  They all discuss how to structure the campaign &#8211; perhaps an email strategy that links to a micro-site or landing page or maybe a new site altogether.  The marketing team then writes up a request for proposal (RFP), solicits estimates, picks the provider they like best, and the new team rushes towards the deadline.  Intense discussion of the best look and feel and wording induces stress.  The project is completed, and then it&#8217;s only updated again when content needs to change. No attempts are made to quantitatively measure the success of the site!</p>
<p>Quite common in larger organizations with enviable budgets, but frequently absent with smaller operations is this analysis of the project&#8217;s success.  What return on investment (ROI) did the campaign provide?  How could it have been better? Can changes be made now to improve it moving forward?</p>
<p><span id="more-48"></span></p>
<p>Different versions of design and copy can have a surprising impact towards enticing potential customers. Before a large company like Coca-Cola opts for a big advertising buy, they do market testing to see how effective their new ads are. They run focus groups, take surveys, even perform eye tracking and pupil dilation tests.  After the ad is run, they analyze the response to see how effective it was. They take this analysis into consideration, make improvements to future ads and update the existing one. These practices assure that Coke gets the best return on their marketing dollar.</p>
<p>Smaller businesses though, can&#8217;t afford to conduct these types of metric tests for their relatively small campaigns. Commonly the budget is completely spent after the initial design and development. Fortunately though there are many techniques and simple steps that allow businesses to generate the best campaigns they can with the budgets they have. More than anything, just <em>getting into the measuring mindset</em> puts your campaign on the right track.</p>
<p>Here are some ideas to get the analytical juices flowing.</p>
<div id="attachment_51" class="wp-caption alignright" style="width: 435px"><img class="size-full wp-image-51" title="constant_contact" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/06/constant_contact.gif" alt="Sample Email Metrics" width="425" height="246" /><p class="wp-caption-text">Sample Email Metrics</p></div>
<p>1) When creating a new email marketing campaign, consider doing several variations.  Take the best design ideas and copy and instead of picking one version to send to your entire distribution list, create multiple versions and send these each to a different small random subset of your audience.  After giving the recipients a day or two to process the emails, review the analysis metrics of the initial mailing.</p>
<p>A sample of metrics from a <a href="http://www.constantcontact.com" target="_blank">Constant Contact</a> mailing shows several simple statistics that can be used to judge the success of a mailing.  The percentage of &#8216;Opens&#8217; that your email received shows how many were enticed enough by the subject line to open the message. Comparing this rate among all of your initial sent versions will tell you which one was most successful subject line.</p>
<p>The same logic can be applied to the click-through numbers. First, which email has the highest percentage of clicks &#8211; this one has the most appealing design to your target audience. If you use different copy to link to the same outbound destinations, which email had the most successful click-through percentage?  That&#8217;s the one that described the link the best. In our sample, landing3&#8217;s copy was the most successful.</p>
<p>Once you&#8217;ve analyzed these numbers, revisit your email ideas and create a new version using the best subject line, design and content. Send this email to the remainder of your distribution list. This extra legwork will assure that you&#8217;re sending the best email you can.  <em>Never forget that you&#8217;re marketing to your customers, not to yourself.  What they find most intriguing often isn&#8217;t what you&#8217;d expect them to</em>. Marketing research will tell you what&#8217;s really most important and interesting to them.</p>
<p>If you&#8217;d like to learn more about these metrics, there are many great resources available.  Large email campaign management services often offer lots of suggestions and ideas.  <a href="http://www.mailchimp.com/" target="_blank">MailChimp</a> offers a nice article about <a href="http://www.mailchimp.com/articles/understanding_email_campaign_reports/" target="_blank">understanding email campaign reports</a>. <a href="http://www.verticalresponse.com" target="_blank">Vertical Response</a> offers webinars about many useful topics such as <a href="http://www.verticalresponse.com/tutorials/webinars/?target=/tutorials/videos/webinars/newsletter/" target="_blank">writing good marketing copy</a>.</p>
<p>2) When it comes to your actual website, hands down, the most robust, documented and affordable (free!) metrics tool is <a href="http://analytics.google.com" target="_blank">Google Analytics</a>.  A full overview of Google Analytics&#8217; features is beyond the scope of this post, but even a basic knowledge of the tool can really help you to make subtle changes that significantly improve your site&#8217;s appeal.</p>
<div id="attachment_53" class="wp-caption alignleft" style="width: 310px"><img class="size-full wp-image-53" title="google-analytics" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/06/google-analytics.jpg" alt="Google Analytics Dashboard" width="300" height="184" /><p class="wp-caption-text">Google Analytics Dashboard</p></div>
<p>After installing the Google Analytics code to your site and allowing a few days for data to gather, the dashboard is your starting point to begin mining through your newfound data.  Clicking through from this point you can view where your visitors are coming from, both in terms of geography and referring websites. You can see how long your visitors stay, where they click and what page they were viewing when they lost interest. These available metrics are just the tip of the iceberg.</p>
<p>A simple tactic to visualize your page&#8217;s link success is the &#8216;Site Overlay&#8217; feature. This is accessible under the Content menu and shows you the percentage of users that click on each specific link on a page. Is the prominent text link in the top left of your homepage getting as high a percentage of the clicks as you&#8217;d prefer?  Now you can know for sure and tweak the copy or imagery if necessary to see if other approaches are more successful. Frequent review of the click trends can help you judge the success of all of your site&#8217;s elements.  Mindful tweaks over time assure you better success.</p>
<div id="attachment_54" class="wp-caption alignright" style="width: 310px"><img class="size-full wp-image-54" title="google-analytics2" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/06/google-analytics2.jpg" alt="Google Analytics Site Overaly" width="300" height="221" /><p class="wp-caption-text">Google Analytics Site Overaly</p></div>
<p>3) The last idea is a combination of the two ideas discussed so far. This approach is most practical for single website pages as opposed to complete websites, as multiple versions of the page need to be developed. Instead of deciding on and creating just one page when multiple versions of copy and design are debated, create them all, and then set the actual landing page to randomly load one of the page concepts (your web developer can accomplish this with some simple JavaScript).  Review the Google Analytics for each version of the page to see which one was most &#8220;sticky&#8221; (kept the most users interested) and find which elements of the pages were most clicked. Use this information to craft an ultimate page that combines the most successful elements.</p>
<p>These simple ideas are within just about any web campaign budget and hopefully can get you and your staff thinking of other ways to measure your ROI. Websites are easily changeable. Monitoring their success and making adjustments when necessary helps the site remain viable and interesting. <strong>Remember, if you aren&#8217;t measuring it, you aren&#8217;t managing it!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2009/06/web-marketing-campaigns-roi-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easy Color Customization for Embedded Google Calendars</title>
		<link>http://www.unitz.com/u-notez/2009/04/color-customization-for-embedded-google-calendars/</link>
		<comments>http://www.unitz.com/u-notez/2009/04/color-customization-for-embedded-google-calendars/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 18:07:22 +0000</pubDate>
		<dc:creator>Chris Dornfeld</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[User interfaces]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=12</guid>
		<description><![CDATA[Clients often come to us for assistance integrating an events calendar into a web site, and we frequently recommend Google Calendar.  It has a flexible and user-friendly interface for both web site visitors and calendar managers.  What it doesn&#8217;t have, unfortunately, is a way to customize its color scheme.
I had the opportunity to tackle this [...]]]></description>
			<content:encoded><![CDATA[<p>Clients often come to us for assistance integrating an events calendar into a web site, and we frequently recommend <a href="http://calendar.google.com/" target="_blank">Google Calendar</a>.  It has a flexible and user-friendly interface for both web site visitors and calendar managers.  What it doesn&#8217;t have, unfortunately, is a way to customize its color scheme.</p>
<p>I had the opportunity to tackle this shortcoming for a recent project and you can find a copy of my script below, followed by an explanation of the approach I used.<span id="more-12"></span>  With this script, you&#8217;ll be able to set your own color scheme for an embedded Google Calendar.  To illustrate, here are some screenshots showing &#8220;before&#8221; (on the left) and &#8220;after&#8221; (on the right):</p>
<p><img class="alignnone size-full wp-image-24" title="gcalendar-wrapper screenshots" src="http://www.unitz.com/u-notez/wp-content/uploads/2009/04/gcalendar-wrapper-screenshots.gif" alt="gcalendar-wrapper screenshots" width="690" height="236" /></p>
<p>Of course, you can use this script to make your embedded calendar appear any color you like.</p>
<h3>Requirements</h3>
<ul>
<li>PHP 4.3.0 or later</li>
<li>Support for one of the following JSON libraries:
<ul>
<li><a href="http://pecl.php.net/package/json" target="_blank">PECL JSON extension</a> (built in to PHP 5.2.0 and higher) <em>or</em></li>
<li><a href="http://pear.php.net/package/Services_JSON" target="_blank">PEAR::Services_JSON</a> package</li>
</ul>
</li>
<li>Support for one of the following http methods:
<ul>
<li><a href="http://www.php.net/manual/en/curl.installation.php" target="_blank">cURL extension</a> <em>or</em></li>
<li><a href="http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen" target="_blank">allow_url_fopen</a> configuration option</li>
</ul>
</li>
</ul>
<p>Check your <a href="http://www.php.net/phpinfo#function.phpinfo.examples" target="_blank">phpinfo</a> screen to see if your server meets the requirements &mdash; or, if you&#8217;re feeling lucky, just cross your fingers and run the script.</p>
<h3>Installation and Usage</h3>
<p><strong>1.</strong> Create your Google Calendar and <a href="http://www.google.com/support/calendar/bin/answer.py?hl=en&amp;answer=41207" target="_blank">embed the calendar on your web site</a> using your preferred size and settings.  Make sure it appears correctly with the default Google Calendar &#8220;skin&#8221;.</p>
<p><strong>2.</strong> <strong><a href="/downloads/gcalendar-wrapper-20091013.zip" onclick="pageTracker._trackPageview('/downloads/gcalendar-wrapper.zip')">Download the wrapper script</a></strong> (version 2009-10-13) as a ZIP file</p>
<p><strong>3.</strong> Unzip the archive to extract the script itself, <strong>gcalendar-wrapper.php</strong></p>
<p><strong>4.</strong> Edit <strong>gcalendar-wrapper.php</strong> in a text editor, such as Notepad</p>
<p><strong>5.</strong> Customize the following lines at the top of the script according to your needs:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 * Set your color scheme below
 */</span>
<span style="color: #000088;">$calColorBgDark</span>      <span style="color: #339933;">=</span> <span style="color: #0000ff;">'#c3d9ff'</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// dark background color</span>
<span style="color: #000088;">$calColorTextOnDark</span>  <span style="color: #339933;">=</span> <span style="color: #0000ff;">'#000000'</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// text appearing on top of dark bg color</span>
<span style="color: #000088;">$calColorBgLight</span>     <span style="color: #339933;">=</span> <span style="color: #0000ff;">'#e8eef7'</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// light background color</span>
<span style="color: #000088;">$calColorTextOnLight</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'#000000'</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// text appearing on top of light bg color</span>
<span style="color: #000088;">$calColorBgToday</span>     <span style="color: #339933;">=</span> <span style="color: #0000ff;">'#ffffcc'</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// background color for &quot;today&quot; box</span></pre></td></tr></table></div>

<p>You can use a tool like the one at <a href="http://html-color-codes.info/" target="_blank">html-color-codes.info</a> to pick your HTML color codes.</p>
<p><strong>6.</strong> Upload <strong>gcalendar-wrapper.php</strong> to your web server</p>
<p><strong>7.</strong> On the pages where you display an embedded Google Calendar, change the calendar embedding code to point to <strong>gcalendar-wrapper.php</strong> instead of <strong>http://www.google.com/calendar/embed</strong> (or the equivalent URL if you&#8217;re using Google Apps for Domains).  For example, if your embedding code currently looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">iframe</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.google.com/calendar/embed?src=usa__en%40holiday.calendar.google.com</span>
<span style="color: #009900;">&amp;amp;ctz=America%2FNew_York&quot;</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; border-width:0 &quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;800&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;600&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">frameborder</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">scrolling</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;no&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">iframe</span>&gt;</span></pre></div></div>

<p>edit the HTML to look like this instead:</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">iframe</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;gcalendar-wrapper.php?src=usa__en%40holiday.calendar.google.com</span>
<span style="color: #009900;">&amp;amp;ctz=America%2FNew_York&quot;</span> <span style="color: #000066;">style</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; border-width:0 &quot;</span> <span style="color: #000066;">width</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;800&quot;</span> <span style="color: #000066;">height</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;600&quot;</span></span>
<span style="color: #009900;"><span style="color: #000066;">frameborder</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">scrolling</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;no&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">iframe</span>&gt;</span></pre></div></div>

<p><strong>8.</strong> Browse to your page to test out your customized calendar!  If you still see the standard Google Calendar appearance, make sure to clear your browser&#8217;s cache and try again.</p>
<h3>Limitations</h3>
<p>To keep things simple, this script reduces the Google Calendar color scheme to just 5 different colors, even though Google&#8217;s original stylesheet uses more shades.  In addition, images within the interface (such as the month previous/next arrows and Print icon) can&#8217;t be customized and will still appear in their original color (blue).</p>
<p>After creating this solution, I came across a similar skinning effort called <a href="http://www.lindenlan.net/2008/12/04/restyle-google-calendar-4/" target="_blank">MyGoogleCal4</a> that allows more fine-grained control over the calendar appearance.  It takes more legwork to create your own theme, but anyone interested in replacing the calendar graphics or making advanced stylesheet changes should definitely give it a look.</p>
<h3>Technical Details</h3>
<p>The <strong>gcalendar-wrapper.php</strong> script works by downloading the embedded Google Calendar source code from Google&#8217;s server, modifying CSS styles and JavaScript on the fly, then outputting the customized calendar code to the user&#8217;s browser.  The Google Calendar embedding code contains a JSON-encoded data structure with information about the calendar events plus external links to a JavaScript library and CSS stylesheet located elsewhere on Google&#8217;s servers.  For simplicity, this script just inserts new CSS and JavaScript directly into the main embedding code to override the relevant parts of those external files.</p>
<p>To change the color scheme, I started by scraping the stock Google Calendar stylesheet and identifying the minimal set of styles needed to apply new colors.  New style rules are generated dynamically based on the color scheme settings to save the hassle of repeatedly copying and pasting color codes in several places.  These custom styles are then inserted at the end of the HEAD section of the embedding code with priority set to override the original styles.</p>
<p>Google Calendar&#8217;s code makes use of relative links and file references that get thrown off when routed through the wrapper script, so it&#8217;s also necessary to make a change to the base URL within the JSON data structure that holds calendar event data.  The JSON string first has to be spliced out using a regular expression and converted to a PHP data structure we can manipulate, then serialized back into a JSON string to replace the original data.</p>
<h3>Keep in Mind&#8230;</h3>
<p>The calendar customization script is closely tied to Google Calendar&#8217;s underlying stylesheets and JavaScript code.  When Google launches a new version of Google Calendar (as they&#8217;ve done in the past when launching new features) this script may need to be updated to reflect Google&#8217;s changes.  When that happens, your embedded calendars may revert to the standard Google Calendar appearance or may even show an error message.  Don&#8217;t forget to check up on your calendars periodically so you&#8217;ll know if Google has made any major changes.  I&#8217;ll make an effort to post an updated wrapper script whenever I see that Google has revised its code.</p>
<p>Feel free to respond in the comments below with questions or suggestions.  I hope you find the script useful!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2009/04/color-customization-for-embedded-google-calendars/feed/</wfw:commentRss>
		<slash:comments>60</slash:comments>
		</item>
		<item>
		<title>Welcome to U-notez</title>
		<link>http://www.unitz.com/u-notez/2008/07/welcome-to-u-notez/</link>
		<comments>http://www.unitz.com/u-notez/2008/07/welcome-to-u-notez/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 13:39:48 +0000</pubDate>
		<dc:creator>Paul Reilly</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.unitz.com/u-notez/?p=1</guid>
		<description><![CDATA[Welcome!  As Chris and I have developed web sites and web applications over the years, we have stumbled across a different issue or problem that we had to figure out nearly every day.  As we&#8217;ve found the solutions to the problems &#8211; be it a way to fix a browser quirk or a way to [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome!  As Chris and I have developed web sites and web applications over the years, we have stumbled across a different issue or problem that we had to figure out nearly every day.  As we&#8217;ve found the solutions to the problems &#8211; be it a way to fix a browser quirk or a way to to write a more efficient line of code, we always thought it would be nice to pass the solution along so that others would be able to benefit and not have to spend the time solving similar problems themselves.</p>
<p>So we&#8217;ve created this blog for that purpose &#8211; it&#8217;s our arena to post our solutions, thoughts and musings on anything and everything related to web development.  We hope one of our posts can help you!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unitz.com/u-notez/2008/07/welcome-to-u-notez/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
