<?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"
	>

<channel>
	<title>epicblog</title>
	<atom:link href="http://www.rickwargo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rickwargo.com</link>
	<description>Acquiring information, one day at a time.</description>
	<pubDate>Sat, 23 Aug 2008 18:36:24 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6-bleeding2</generator>
	<language>en</language>
			<item>
		<title>What Technical Tests Do You Give Potential Hires?</title>
		<link>http://www.rickwargo.com/2008/05/02/what-technical-tests-do-you-give-potential-hires/</link>
		<comments>http://www.rickwargo.com/2008/05/02/what-technical-tests-do-you-give-potential-hires/#comments</comments>
		<pubDate>Fri, 02 May 2008 17:46:10 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[Musings]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/?p=132</guid>
		<description><![CDATA[I&#8217;m amazed at how many candidates I&#8217;ve interviewed cannot provide an elegant solution to the following test:
Write a routine, in your favorite language or even a mock language, without using an intrinsic function to solve the problem for you, to reverse the contents of a string. The routine should take an input of a string [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m amazed at how many candidates I&#8217;ve interviewed cannot provide an elegant solution to the following test:</p>
<blockquote><p>Write a routine, in your favorite language or even a mock language, without using an intrinsic function to solve the problem for you, to reverse the contents of a string. The routine should take an input of a string and output a string. For example, if the input is &#8220;hello&#8221; the output should be &#8220;olleh&#8221;.</p></blockquote>
<p>I inform the candidate that it is a simple problem and invite them to talk through their logic as they write their solution on the whiteboard. I let them know it does not have to be syntactically correct; I am more interested in their approach. </p>
<p>It is enlightening, to say the least, to watch interviewees attack this problem. I&#8217;ve actually had so many people fail that I&#8217;ve been questioned if my &#8220;test&#8221; was too difficult. I understand there are abnormal pressures in play due to the setting but employees should ultimately perform decently under some pressure.</p>
<p>Silently I watch and listen to the candidate attempt to solve the problem. When the candidate is finished I usually ask, with good reason, are you certain this solution is correct? The response is often a &#8220;yes.&#8221; This usually gives us ample opportunity to talk about different strategies and try to understand why it was coded in a particular method.</p>
<p>I notice lots of issues that should not occur; for example, the candidate:</p>
<ul>
<li>does not understand the chosen language or it&#8217;s string libraries.</li>
<li>has issues with zero-based arrays depending on chosen language.</li>
<li>overly complicates the approach and never sits back to re-evaluate.</li>
<li>can not come up with a solution.</li>
<li>chooses a complicated approach involving math and gets the math wrong.</li>
<li>uses too many variables.</li>
<li>writes unnecessary code that essentially does nothing.</li>
<li>can not validate the output of the routine they wrote correctly.</li>
<li>writes more than ten lines of code to solve the problem.</li>
<li>does not know how to swap values in to variables properly.</li>
<li>&#8230; and many more.</li>
</ul>
<p>I&#8217;d appreciate others offering this simple test and sharing your results with me and everyone else. I&#8217;d also like to know your thoughts the validity of this test and how you would let the results affect your view of the candidate.</p>
<p>Before reading on to see my solution, try it for yourself. Let me know how you do.<br />
<span id="more-132"></span><br />
Here is my solution:<br />
<code>static string reverse(string s)<br />
{<br />
    string r = "";</p>
<p>    for (int i = s.Length - 1; i >= 0; i--)<br />
        r += s[i];</p>
<p>    return r;<br />
}</code></p>
<p>Can it be more simple? Let me know?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/05/02/what-technical-tests-do-you-give-potential-hires/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cannot update Fedora 8 via yum</title>
		<link>http://www.rickwargo.com/2008/04/23/cannot-update-fedora-8-via-yum/</link>
		<comments>http://www.rickwargo.com/2008/04/23/cannot-update-fedora-8-via-yum/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 23:54:23 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[WILT]]></category>

		<category><![CDATA[nagios]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/?p=130</guid>
		<description><![CDATA[I&#8217;ve been having difficulties trying to update a Fedora 8 installation with yum. When I execute &#8220;yum update&#8221; I received the following error:
Transaction Check Error:
  file /usr/lib/libsensors.so.3 from install of lm_sensors-2.10.6-1.fc8.i386 conflicts with file from package libsensors3-2.10.5-52.fc6.i386

When I try to remove lm_sensors, a bunch of dependant packages want to be removed, too (but that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been having difficulties trying to update a Fedora 8 installation with yum. When I execute &#8220;<code>yum update</code>&#8221; I received the following error:</p>
<blockquote><p>Transaction Check Error:<br />
  file /usr/lib/libsensors.so.3 from install of lm_sensors-2.10.6-1.fc8.i386 conflicts with file from package libsensors3-2.10.5-52.fc6.i386
</p></blockquote>
<p>When I try to remove lm_sensors, a bunch of dependant packages want to be removed, too (but that is not what I want). </p>
<p>I noticed there was a nagios plugin that was being updated called nagios-plugins-sensors. Removing that allowed me to successfully perform a yum update!</p>
<p>So, I typed <code>yum erase nagios-plugins-sensors</code> and yum removed the following:</p>
<blockquote><p>=============================================================================<br />
 Package                 Arch       Version          Repository        Size<br />
=============================================================================<br />
Removing:<br />
 nagios-plugins-sensors  i386       1.4.8-9.fc8      installed         1.1 k<br />
Removing for dependencies:<br />
 nagios-plugins-all      i386       1.4.8-9.fc8      installed          0.0
</p></blockquote>
<p>Success!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/04/23/cannot-update-fedora-8-via-yum/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Blog Search to the Rescue!</title>
		<link>http://www.rickwargo.com/2008/04/05/blog-search-to-the-rescue/</link>
		<comments>http://www.rickwargo.com/2008/04/05/blog-search-to-the-rescue/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 15:53:03 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[WILT]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/?p=127</guid>
		<description><![CDATA[It&#8217;s quicker to ask a blog search engine like blogsearch.google.com or technorati.com to find out what is happening with my Internet service than to ask Comcast. After struggling with quirky behavior (like only comcast DNS being able to resolve DNS queries and opendns and others failing) a search on the last hour of blog comments [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s quicker to ask a blog search engine like <a href="http://blogsearch.google.com">blogsearch.google.com</a> or <a href="http://www.technorati.com">technorati.com</a> to find out what is happening with my Internet service than to ask <a href="http://www.comcast.net">Comcast</a>. After struggling with quirky behavior (like only comcast DNS being able to resolve DNS queries and <a href="http://www.opendns.com">opendns</a> and others failing) a <a href="http://blogsearch.google.com/blogsearch?hl=en&#038;ie=UTF-8&#038;q=comcast&#038;as_drrb=q&#038;as_qdr=h">search on the last hour</a> of blog comments regarding Comcast let me know that they are having major problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/04/05/blog-search-to-the-rescue/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Strange Resource Errors under Citrix Presentation Server</title>
		<link>http://www.rickwargo.com/2008/03/25/strange-resource-errors-under-citrix-presentation-server/</link>
		<comments>http://www.rickwargo.com/2008/03/25/strange-resource-errors-under-citrix-presentation-server/#comments</comments>
		<pubDate>Tue, 25 Mar 2008 14:43:08 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[WILT]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/?p=126</guid>
		<description><![CDATA[I&#8217;ve been beleaugured with strange resource errors in a VBA-based Excel application while running it under Presentation Server. I had missing bitmaps, incorrectly drawn WMF images, unloadable bmp files, and error messages such as &#8220;Not enough system resources to display completely.&#8221; These issues would appear intermittently and were difficult to determine the cause. Oddly enough [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been beleaugured with strange resource errors in a VBA-based Excel application while running it under Presentation Server. I had missing bitmaps, incorrectly drawn WMF images, unloadable bmp files, and error messages such as &#8220;Not enough system resources to display completely.&#8221; These issues would appear intermittently and were difficult to determine the cause. Oddly enough I didn&#8217;t receive error messages from the ICA client and these issues did not appear while running under Terminal Services. The issues seemed related to running out of GDI resources. After a lot of strife (mostly with the computer) I found the issue: the amount of memory dedicated to video. I had 5625KB memory dedicated to it and it needed more. I also had checked &#8220;Degrade resolution first&#8221; and would prefer to to &#8220;Degrade color depth first&#8221; so the application does not get confused with a different size display. After increasing the amount of display memory to 8192KB and also setting the published application to 16-bit color, my problems disappeared.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/03/25/strange-resource-errors-under-citrix-presentation-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Nikon D200 GPS - Version 2</title>
		<link>http://www.rickwargo.com/2008/02/24/nikon-d200-gps-version-2/</link>
		<comments>http://www.rickwargo.com/2008/02/24/nikon-d200-gps-version-2/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 08:03:29 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[GPS]]></category>

		<category><![CDATA[OSI]]></category>

		<category><![CDATA[WILT]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/?p=111</guid>
		<description><![CDATA[I&#8217;ve had it for quite a while and love it: a new and improved of my original GPS design for my D200. This time it&#8217;s smaller, practical and easy; just mount it on the flash shoe, plug it in to the 10-pin connector and turn it on! Within no time at all GPS coordinates will [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2008/02/d200gps1.jpg" rel="lightbox" title="Nikon D200 w/GPS"><img class="alignleft" src="/wp-content/uploads/2008/02/d200gps1.thumbnail.jpg" alt="Nikon D200 w/GPS" /></a>I&#8217;ve had it for quite a while and love it: a new and improved of my <a href="/2006/12/21/nikon-d200-gps/">original GPS design</a> for my D200. This time it&#8217;s smaller, practical and easy; just mount it on the flash shoe, plug it in to the 10-pin connector and turn it on! Within no time at all GPS coordinates will be flowing into the camera.</p>
<p>This version eliminates the need for the expensive MC-35 and even the special 10-pin connector. I&#8217;ve opted for a quick GPS receiver and encased everything in a small black box with a flash shoe mount. Because it is powered through the camera&#8217;s power source, a switch on the side of the box turns off the GPS. Version 3 should include a battery, rechargeable through a USB connection.</p>
<p>Read on for directions on how to create your own GPS.<span id="more-111"></span></p>
<p><a href="/wp-content/uploads/2008/02/wiring.jpg" rel="lightbox" title="Wiring Diagram"><img class="alignright" src="/wp-content/uploads/2008/02/wiring.thumbnail.jpg" alt="Wiring Diagram" /></a><br />
<strong>Parts List</strong></p>
<ol>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062328&#038;cp=2032058.2032230.2032267&#038;pg=5&#038;parentPage=family">4.7Kohm resistor</a> (x 2)</li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062330&#038;cp=2032058.2032230.2032267&#038;pg=5&#038;parentPage=family">10Kohm resistor</a></li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062325&#038;cp=2032058.2032230.2032267&#038;pg=5&#038;parentPage=family">2.2Kohm resistor</a></li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062586&#038;cp=2032058.2032230.2032279&#038;allCount=27&#038;fbn=Type%2FTransistor&#038;f=PAD%2FProduct+Type%2FTransistor&#038;fbc=1&#038;parentPage=family">NPN Transistor</a></li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2103799&#038;cp=2032058.2032230.2032265&#038;parentPage=family">IC PC Board</a></li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062503&#038;cp=2032058.2032230.2032278&#038;pg=2&#038;searchSort=TRUE&#038;y=10&#038;retainProdsInSession=1&#038;s=A-StorePrice-RSK&#038;x=9&#038;parentPage=family">SPST Micromini Toggle Switch</a></li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062279&#038;cp=2032058.2032230.2032276&#038;parentPage=family">3&#215;2x1&#8243; Project Enclosure Box</a></li>
<li><a href="http://www.sparkfun.com/commerce/product_info.php?products_id=465">USGloblSat EM-406A GPS</a></li>
<li><a href="http://search.ebay.com/search/search.dll?satitle=Remote+Cord+Nikon+D200">Remote Cord for Nikon D200</a> - find a cheap (<$10) one on <a href="http://www.ebay.com">eBay</a></li>
<li>Small cable ties</li>
<li>Velcro with a sticky mount</li>
<li>Epoxy stick</li>
</ol>
<p><strong>Tools Needed</strong></p>
<ol>
<li>Soldering iron &#038; solder</li>
<li>Wire cutters</li>
<li>Needlenose pliers</li>
<li>Exacto knife</li>
<li>Patience</li>
</ol>
<p><strong>Overview</strong><br />
It&#8217;s quite a simple project; just four resistors, a capacitor, the GPS, a switch and some soldering. The goal is to make it tight so it fits in a small enclosure that can be mounted on the camera. I prefer to do a dry run without any soldering to see how it all fits together; I would suggest you do the same.</p>
<p><strong>Disclaimer</strong><br />
Although I have used this successfully with my camera, I cannot guarantee that it will not harm your camera, even if all directions are followed exactly. By constructing this GPS following these directions (or even using them as a basis for your own project), you do so at your own risk and agree to hold me harmless from any damage done to your camera.</p>
<p><strong>Wiring Diagram</strong><br />
The wiring diagram depicted above is the top view of the PC board. My handwriting shows four resistors (r1, r2, r3, r4), a transistor (with <strong>e</strong>mitter, <strong>b</strong>ase, and <strong>c</strong>ommon leads), <strong>R</strong>ed, <strong>B</strong>lack, and <strong>W</strong>hite wires, and the six leads to the GPS (number 1 through 6).</p>
<p><a href="/wp-content/uploads/2008/02/step1.jpg" rel="lightbox" title="PC board with resistors"><img class="alignright" src="/wp-content/uploads/2008/02/step1.thumbnail.jpg" alt="Step 1" /></a><br />
<strong>Step 1</strong><br />
Attach the four resistors to the PC Board as shown.
<ol>
<li>R1 - 4.7K ohm</li>
<li>R2 - 10K ohm</li>
<li>R3 - 2.2K ohm</li>
<li>R4 - 4.7K ohm</li>
</ol>
<p><a href="/wp-content/uploads/2008/02/step2-3.jpg" rel="lightbox" title="Addition of transistor and switch"><img class="alignright" src="/wp-content/uploads/2008/02/step2-3.thumbnail.jpg" alt="Steps 2 and 3" /></a><br />
<strong>Step 2</strong><br />
Attach the transistor to the PC board, carefully placing the base, common and emitter leads in their proper holes on the board.</p>
<p><strong>Step 3</strong><br />
Attach a wire (preferably red) between the PC board and the switch. This will be used to cut off power to the GPS.</p>
<p><strong>Step 4</strong><br />
Cut the switch off of the cheap remote cord to expose the measly three wires in it. If you happen to have a 10 pin connector with ten wires then you will have to do things a bit differently.</p>
<p>Attach the red wire to the other terminal of the switch. Note the picture depicts a SPDT switch and has an additional terminal. You can choose to leave the switch out as it is a bit obtrusive on the box but doing so will keep the camera active and drain the battery quickly. Alternative, you may prefer a switch with a lower profile such as a slide switch.</p>
<p>Attach the black and white wires to the PC board. The location of the white is depicted with a <em>&#8220;w&#8221;</em> in the wiring diagram although the picture should help to clear up where it goes.</p>
<p><a href="/wp-content/uploads/2008/02/step4-5.jpg" rel="lightbox" title="Adding GPS connector and camera wire"><img class="alignright" src="/wp-content/uploads/2008/02/step4-5.thumbnail.jpg" alt="Steps 4 and 5" /></a><br />
<strong>Step 5</strong><br />
Take the six pin cord for the GPS and cut off one end. I made the mistake of cutting it in half, giving me a much shorter span of wire to work with.</p>
<p>Attach the black wires, numbered 1 through 6 to the locations on the PC board. Wire 3 is connected to the emitter and wire 6 to common of the transistor. The other four wires should be readable.</p>
<p><a href="/wp-content/uploads/2008/02/step5a.jpg" rel="lightbox" title="Completed underside of PC board"><img class="alignright" src="/wp-content/uploads/2008/02/step5a.thumbnail.jpg" alt="Step 5a" /></a><br />
<strong>Step 5a</strong><br />
Solder the connections on the underside of the PC board, if you haven&#8217;t done so already. I like to fit everything together first and when I&#8217;m happy, do the soldering and then snip the extra wire. You can see from the image that I am not an expert solderer; just make sure that the solder does not stray.</p>
<p><a href="/wp-content/uploads/2008/02/step6.jpg" rel="lightbox" title="Completed top side of PC board with GPS connected"><img class="alignleft" src="/wp-content/uploads/2008/02/step6.thumbnail.jpg" alt="Step 6" /></a><br />
<strong>Step 6</strong><br />
Attach the GPS to the PC board using velcro, connecting the white 6-pin connector to it.<br />
Wrap a wire tie around the wire and through a hole in the PC board, make a tight connection to provide strain relief. This is a <em>very</em> important step because if it is not done, one tug on that wire will disconnect something on the PC board making the GPS inoperative.</p>
<p>The device is finally beginning to take a recognizable shape!</p>
<p><a href="/wp-content/uploads/2008/02/step7.jpg" rel="lightbox" title="Enclosure with holes drilled"><img class="alignright" src="/wp-content/uploads/2008/02/step7.thumbnail.jpg" alt="Step 7" /></a><br />
<strong>Step 7</strong><br />
Create two holes on the long side of the enclose, one to fit the wire through and the other to hold the switch. Make the hole for the switch the size specified for the switch. Remember both the switch and wire will be on the same side as the 10-pin connector on the Nikon body with the switch to the front of the box. If the holes will be different sizes, pay careful attention to where the holes are made.</p>
<p><a href="/wp-content/uploads/2008/02/step8.jpg" rel="lightbox" title="Mounted in the box!"><img class="alignright" src="/wp-content/uploads/2008/02/step8.thumbnail.jpg" alt="Step 8" /></a><br />
<strong>Step 8</strong><br />
Carefully insert the PC board, wire, and switch into the enclosure. It should fit in there tight. Make sure to secure it to the box if there is anything loose. You can screw the top cover onto the enclosure; we are almost done!</p>
<p><strong>Step 9</strong><br />
This is the tricky part: making the connector. With an exacto knife, strip off the rubber on the 10-pin connector of the cheap remote cord. The goal is to get the plastic piece with the 10 holes and three pins. With patience, the rubber can all be removed and the pins extracted. The pins must be located in different holes than their original location. You&#8217;ll want to cut the wire to a size that would ultimately fit between the enclosure and the camera with just a little bit of slack.</p>
<p><a href="/wp-content/uploads/2008/02/10pin.jpg" rel="lightbox" title="Nikon 10-pin Connector"><img class="alignright" src="/wp-content/uploads/2008/02/10pin.thumbnail.jpg" alt="Nikon 10-pin Connector" /></a><br />
Ultimately the wires are connected to the pins in the following sequences. This image is looking into the barrel of the connector.</p>
<ol>
<li>White wire - pin 1 (receive)</li>
<li>Red wire - pin 3 (power)</li>
<li>Black wire - pin 7 (power ground)</li>
</ol>
<p>You&#8217;ll want to hook GPS power to pin 3 on the camera which always has +5V while the camera is active; note that by keeping the GPS on, this pin will continue to have a +5V supply as receiving the <a href="http://www.gpsinformation.org/dale/nmea.htm">NMEA</a> data keeps the camera active. Using pin 2 to power would keep the power to the GPS flowing even while the camera is off and this would be sure to drain your battery quickly.</p>
<p><a href="/wp-content/uploads/2008/02/step9.jpg" rel="lightbox" title="New wiring on connector"><img class="alignright" src="/wp-content/uploads/2008/02/step9.thumbnail.jpg" alt="Step 9" /></a><br />
It takes a bit of patience and luck to extract the pins, clean them, reinsert in the correct location and solder the wires to the pins. Be careful as the pins are often numbered looking into the connector although you will be soldering on the outside of the connector.</p>
<p><strong>Step 10</strong><br />
Once you have confirmed everything is correct, plug it into your camera and turn the camera on, making sure the switch on the box is in the on position. You should start to see the flashing GPS symbol on the display of the camera within a few seconds. If you don&#8217;t, turn off the camera and disconnect the connector and recheck your work. After a bit, the GPS symbol will stop flashing and will be solid (you may need to have a clear view of the sky for a lock to be made). At this point all we need are a few finishing touches.</p>
<p><a href="/wp-content/uploads/2008/02/gps-bottom.jpg" rel="lightbox" title="Bottom View of GPS"><img class="alignleft" src="/wp-content/uploads/2008/02/gps-bottom.thumbnail.jpg" alt="Bottom View of GPS" /></a></p>
<p><a href="/wp-content/uploads/2008/02/gps-side.jpg" rel="lightbox" title="Side View of GPS"><img class="alignright" src="/wp-content/uploads/2008/02/gps-side.thumbnail.jpg" alt="Side View of GPS" /></a></p>
<p>Carefully disconnect the module from the camera. To make the connector secure, fashion some epoxy in the shape of an elbow connector around the bare wires and the 10-pin connector making sure to secure the pins in the connector. Make certain to leave enough room on the connector to plug it into the camera (about 1/4&#8243;). Also, make the elbow bend such that it lines up with how you want your cable to flow. Hopefully you can do a prettier job than I did!</p>
<p>Finally, to make the mount, fashion one out of a hot shoe adapter or take the mount from the bottom of an old, broken flash and mount it to the base of the case. This will give the GPS a place to sit while taking photos. You may need to get creative with how to attach it. The next version will need to add a flash mount on top of the GPS so we can use the GPS and flash at the same time.</p>
<p>Good luck! I look forward to hearing your results and would love to see pictures of your projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/02/24/nikon-d200-gps-version-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make a Call through a Bluetooth Connection</title>
		<link>http://www.rickwargo.com/2008/02/19/make-a-call-through-a-bluetooth-connection/</link>
		<comments>http://www.rickwargo.com/2008/02/19/make-a-call-through-a-bluetooth-connection/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 14:02:13 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[Mobile]]></category>

		<category><![CDATA[OSI]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/2008/02/19/make-a-call-through-a-bluetooth-connection/</guid>
		<description><![CDATA[Unfortunately, I am tiring of my iPhone; mostly due to the slow network speed. Now that the iTouch has all the cool apps as the iPhone (Goole Maps being the most useful for me) I&#8217;d like to give up the phone capabilities but still want to make phone calls through Google Maps. It would be [...]]]></description>
			<content:encoded><![CDATA[<p>Unfortunately, I am tiring of my iPhone; mostly due to the slow network speed. Now that the iTouch has all the cool apps as the iPhone (Goole Maps being the most useful for me) I&#8217;d like to give up the phone capabilities but still want to make phone calls through Google Maps. It would be great to have an iTouch application (or any platform in general) that could place a call through a bluetooth-connected cell phone. This would give me most of the same functionality of the iPhone without the headaches of the AT&#038;T network.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/02/19/make-a-call-through-a-bluetooth-connection/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting Plogger to Work with Gallery Remote</title>
		<link>http://www.rickwargo.com/2008/01/08/getting-plogger-to-work-with-gallery-remote/</link>
		<comments>http://www.rickwargo.com/2008/01/08/getting-plogger-to-work-with-gallery-remote/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 05:01:03 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[WILT]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/2008/01/08/getting-plogger-to-work-with-gallery-remote/</guid>
		<description><![CDATA[I use Plogger as my image gallery and enjoy it&#8217;s simplicity. I also use iView MediaPro to manage my images and have a simple script (contact me for details) that uploads selected images to my gallery on this blog. It&#8217;s been quite a while since I&#8217;ve tried to run the script and tonight, when I [...]]]></description>
			<content:encoded><![CDATA[<p>I use <a href="http://www.plogger.org/">Plogger</a> as my image gallery and enjoy it&#8217;s simplicity. I also use <a href="http://www.iview-multimedia.com/mediapro/">iView MediaPro</a> to manage my images and have a simple script (contact me for details) that uploads selected images to my gallery on this blog. It&#8217;s been quite a while since I&#8217;ve tried to run the script and tonight, when I did, it failed.</p>
<p>The failing portion was <a href="http://codex.gallery2.org/Downloads:Galleryadd.pl_NG">galleryadd.pl</a> and it was giving me:</p>
<blockquote><p>Error:  incorrect username/password</p></blockquote>
<p>The resolution is simple: plog-remote.php makes a reference to a $config global that has not been defined. By including plog-load_config.php the gallery remote functionality works!</p>
<p>To fix, add:<br />
<code>require_once("plog-load_config.php");</code></p>
<p>after the require statements in plog-remote.php.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2008/01/08/getting-plogger-to-work-with-gallery-remote/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Social Networking 3.0</title>
		<link>http://www.rickwargo.com/2007/08/25/social-networking-30/</link>
		<comments>http://www.rickwargo.com/2007/08/25/social-networking-30/#comments</comments>
		<pubDate>Sat, 25 Aug 2007 16:08:45 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[Musings]]></category>

		<category><![CDATA[OSI]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/2007/08/25/social-networking-30/</guid>
		<description><![CDATA[I&#8217;m amazed at the tie-in between entertainment and social networking. A recent episode of my favorite podcast (Standford University&#8217;s Entrepreneurial Thought Leaders) had a group of notable entrepreneurs talking about the future of social networking. Of course their thinking is aligned with their company direction as of course my thinking is greatly influenced by the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m amazed at the tie-in between entertainment and social networking. A <a href="http://edcorner.stanford.edu/authorMaterialInfo.html?mid=1780">recent episode</a> of my favorite podcast (Standford University&#8217;s <a href="http://edcorner.stanford.edu/podcasts.html">Entrepreneurial Thought Leaders</a>) had a group of notable entrepreneurs talking about the future of social networking. Of course their thinking is aligned with their company direction as of course my thinking is greatly influenced by the current events in my life.</p>
<p>Being a new father to twins and often pondering the potential cost of education has guided my thoughts on this podcast. We desperately need a shift in the education paradigm; I&#8217;m not sure I&#8217;ll be able to offer a decent education for my children considering the current college trends. I imagine removing the walls of the learning institutions and replacing them with social networks. And as technology removes the language and distance barriers, social networking can be the driving force behind sharing knowledge - there are so many bright people all over the world.</p>
<p>I also thought about the <a href="http://en.wikipedia.org/wiki/Borg_%28Star_Trek%29">Borg</a> (Star Trek&#8217;s Next Generation version of a highly functional social network) and how a primary goal is to get smarter though collective thinking. Social networking can be used as the medium to add brainpower to solve problems. I would hope in the years to come that the focus of social networking is to share information allowing us all to get smarter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2007/08/25/social-networking-30/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Converting activeCollab to Trac</title>
		<link>http://www.rickwargo.com/2007/07/31/converting-activecollab-to-trac/</link>
		<comments>http://www.rickwargo.com/2007/07/31/converting-activecollab-to-trac/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 03:40:52 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[WILT]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/2007/07/31/converting-activecollab-to-trac/</guid>
		<description><![CDATA[I selected activeCollab with the hope that the 1.0 release would be sufficient to manage the development of a series of software projects. Part of the requirement was bug tracking: we used tasks and task lists to track bugs with the hope of migrating them to the 1.0 version of activeCollab. Key to enabling activeCollab [...]]]></description>
			<content:encoded><![CDATA[<p>I selected <a href="http://www.activecollab.com/">activeCollab</a> with the hope that the 1.0 release would be sufficient to manage the development of a series of software projects. Part of the requirement was bug tracking: we used tasks and task lists to track bugs with the hope of migrating them to the 1.0 version of activeCollab. Key to enabling activeCollab for bug tracking was the ability to <a href="http://haris.tv/2007/02/28/activecollab-and-071-hack-for-task-comments/">attach comments to tasks</a>. It was not an ideal solution but believed 1.0 would be worth the wait. Unfortunately, the wait was too long and we decided to transition to <a href="http://trac.edgewall.org/">trac</a>.</p>
<p>I wasn&#8217;t able to find any utility to move the tasks to trac so I decided to write my own, mostly as a collection of SQL code and offer them for those in a similar predicament.<span id="more-106"></span><br />
I am using a trac installation with <a href="http://www.sqlite.org/">SQLite</a> and activeCollab running from <a href="http://www.mysql.com/">MySQL</a>. I also have added two custom fields: Vertical and Application. Ad I&#8217;m not bringing any attached files.</p>
<p>Also worthwhile to note is I used <a href="http://dev.mysql.com/doc/en/mysqldump.html">mysqldump</a> to move the data from MySQL to SQL Server so I could do development there. Some changes to the code below may be necessary to get this to run on MySQL.</p>
<p>The migration consists of generating a bunch of insert statements to populate the SQLite database.</p>
<p>There are a few support routines I created to help the migration.</p>
<p>SQLite3_DateToJulian converts a datetime value into a Julian int suitable for a SQLite int column.</p>
<p><code>create function dbo.SQLite3_DateToJulian (<br />
&nbsp;&nbsp;@Date datetime -- Date to convert to Julian<br />
)   returns int -- Julian date.  # days since 1900-01-01<br />
as begin<br />
&nbsp;&nbsp;declare @val int<br />
&nbsp;&nbsp;if (@Date is null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;set @val = 0<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;set @val = datediff(second, '1970-01-01', @Date)<br />
&nbsp;&nbsp;return @val<br />
end</code></p>
<p>The next function converts an activeCollab user id into a username for trac. We are using SSPI to map our network logins to a trac user automatically. Our user names are the first character of our first name followed by the last name. Yoy may have to update this as necessary.</p>
<p><code>create function dbo.acuser (@id int)<br />
returns varchar(50)<br />
as<br />
begin<br />
&nbsp;&nbsp;declare @val varchar(50)<br />
&nbsp;&nbsp;select @val = upper(left(username, 2)) + lower(right(username, len(username)-2)) from ac_users where id = @id<br />
&nbsp;<br />
&nbsp;&nbsp;return @val<br />
end</code></p>
<p>The last function formats a string value into a string literal.</p>
<p><code>create function dbo.strout (@s varchar(max))<br />
returns varchar(max)<br />
as<br />
begin<br />
&nbsp;&nbsp;declare @res varchar(max)<br />
&nbsp;&nbsp;if (@s is null) set @s = ''<br />
&nbsp;&nbsp;set @s = replace(@s, '''', '''''')<br />
&nbsp;&nbsp;set @s = replace(@s, '’', '''''')<br />
&nbsp;&nbsp;set @s = replace(@s, '\r', ' ') -- may want to convert this CR/NL translation to something else<br />
&nbsp;&nbsp;set @s = replace(@s, '\n', '')<br />
&nbsp;&nbsp;return '''' + @s + ''''<br />
end</code></p>
<p>There are four trac tables I populated to hold the tickets, comments and custom fields. I always start from scratch so it is necessary to delete the records in each table first.</p>
<p><code>select 'delete from milestone;'<br />
select 'delete from ticket;'<br />
select 'delete from ticket_custom;'<br />
select 'delete from ticket_change;'<br />
</code></p>
<p>I translate the activeCollab milestones to trac milestones but use the trac milestone name as the Project Name followed by the Milestone name (as my milestones were not unique across projects).</p>
<p><code>select 'insert into milestone values(''' + p.name + ' ' + m.name + ''', ' + convert(varchar, dbo.SQLite3_DateToJulian(m.due_date)) + ', ' + convert(varchar, dbo.SQLite3_DateToJulian(m.completed_on)) + ', ''' + convert(varchar(max), m.description)  + ''');'<br />
from ac_project_milestones m<br />
join ac_projects p on p.id = m.project_id<br />
</code></p>
<p>Tickets are tasks attached to task lists. For us, the task list describes a sub component and we pump this into the keywords field. We could add a third UDF but decided against it.</p>
<p><code>select<br />
&nbsp;&nbsp;'insert into ticket values (' +<br />
&nbsp;&nbsp;convert(varchar, t.id) + ', ' +<br />
&nbsp;&nbsp;dbo.strout('defect') + ', ' +  -- defects by default, could add more logic<br />
&nbsp;&nbsp;convert(varchar, dbo.SQLite3_DateToJulian(t.created_on)) + ', ' +<br />
&nbsp;&nbsp;convert(varchar, dbo.SQLite3_DateToJulian(t.updated_on)) + ', ' +<br />
&nbsp;&nbsp;dbo.strout('Templates') + ', ' + -- Component can (and should) be genericized<br />
&nbsp;&nbsp;dbo.strout('') + ', ' +<br />
&nbsp;&nbsp;dbo.strout('major') + ', ' +  -- major by default<br />
&nbsp;&nbsp;dbo.strout(dbo.acuser(t.assigned_to_user_id)) + ', ' +<br />
&nbsp;&nbsp;dbo.strout(dbo.acuser(t.created_by_id)) + ', ' +<br />
&nbsp;&nbsp;dbo.strout('') + ', ' +<br />
&nbsp;&nbsp;dbo.strout('0.9') + ', ' + -- the version<br />
&nbsp;&nbsp;'''' + isnull(p.name, '') + isnull(' ' + m.name, '') + ''', ' + -- milestone names are project names followed by milestones<br />
&nbsp;&nbsp;dbo.strout( -- set the status<br />
&nbsp;&nbsp;&nbsp;&nbsp;case<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when t.completed_on is not null then 'closed'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when t.assigned_to_user_id > 0 then 'assigned'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else 'new'<br />
&nbsp;&nbsp;&nbsp;&nbsp;end) + ', ' +<br />
&nbsp;&nbsp;dbo.strout(case when t.completed_on is not null then 'fixed' else '' end) +', ' +<br />
&nbsp;&nbsp;dbo.strout(t.text) + ', ' + -- summary and description are one in the same<br />
&nbsp;&nbsp;dbo.strout(t.text) + ', ' +<br />
&nbsp;&nbsp;dbo.strout(l.name) + ');'<br />
from ac_project_tasks t<br />
join ac_project_task_lists l on l.id = t.task_list_id<br />
left outer join ac_project_milestones m on m.id = l.milestone_id<br />
left outer join ac_projects p on p.id = l.project_id</code></p>
<p>Adding a custom field is easy; I do a mapping from the project name to determine the vertical and application.<br />
<code>select<br />
&nbsp;&nbsp;'insert into ticket_custom values (' +<br />
&nbsp;&nbsp;convert(varchar, t.id) + ', ' +<br />
&nbsp;&nbsp;dbo.strout('vertical') + ', ' +<br />
&nbsp;&nbsp;dbo.strout(<br />
&nbsp;&nbsp;&nbsp;&nbsp;case p.name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 'Project 1' then 'Vertical 1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 'Project 2' then 'Vertical 2'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 'Project 3' then 'Vertical 1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;) + ');',<br />
&nbsp;&nbsp;'insert into ticket_custom values (' +<br />
&nbsp;&nbsp;convert(varchar, t.id) + ', ' +<br />
&nbsp;&nbsp;dbo.strout('application') + ', ' +<br />
&nbsp;&nbsp;dbo.strout(<br />
&nbsp;&nbsp;&nbsp;&nbsp;case p.name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 'Project 1' then 'Application 1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 'Project 2' then 'Application 2'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;when 'Project 3' then 'Application 1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;) + ');'<br />
from ac_project_tasks t<br />
join ac_project_task_lists l on l.id = t.task_list_id<br />
left outer join ac_project_milestones m on m.id = l.milestone_id<br />
left outer join ac_projects p on p.id = l.project_id</code></p>
<p>And finally moving the comments over is straightforward.<br />
<code>select<br />
&nbsp;&nbsp;'insert into ticket_change values (' +<br />
&nbsp;&nbsp;convert(varchar, c.rel_object_id) + ', ' +<br />
&nbsp;&nbsp;convert(varchar, dbo.SQLite3_DateToJulian(c.created_on)) + ', ' +<br />
&nbsp;&nbsp;dbo.strout(dbo.acuser(c.created_by_id)) + ', ' +<br />
&nbsp;&nbsp;dbo.strout('comment') + ', ' +<br />
&nbsp;&nbsp;dbo.strout('1') + ', ' +    -- this should really sequence for each comment for each ticket<br />
&nbsp;&nbsp;dbo.strout(c.text) + ');'<br />
from ac_comments c<br />
where rel_object_manager = 'ProjectTasks' -- not concerted about messages, only tasks<br />
order by rel_object_id, created_on</code></p>
<p>There is a lot of cheating going on here but it is mostly for historical purposes. Just take the output of each section of routines and run them against the trac database. </p>
<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2007/07/31/converting-activecollab-to-trac/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extend the Life of Your Car</title>
		<link>http://www.rickwargo.com/2007/07/21/extend-the-life-of-your-car/</link>
		<comments>http://www.rickwargo.com/2007/07/21/extend-the-life-of-your-car/#comments</comments>
		<pubDate>Sat, 21 Jul 2007 20:14:36 +0000</pubDate>
		<dc:creator>Rick Wargo</dc:creator>
		
		<category><![CDATA[OSI]]></category>

		<guid isPermaLink="false">http://www.rickwargo.com/2007/07/21/extend-the-life-of-your-car/</guid>
		<description><![CDATA[I just purchased an ElmScan 5 OBD II wireless scan tool to peek into the dynamics of my engine. That tool, coupled with my Nokia N800 and some cool software called CarMan sent my mind wandering.
I am able to capture the engine load at a point in time. What if I calculate an average load [...]]]></description>
			<content:encoded><![CDATA[<p>I just purchased an <a href="http://www.scantool.net/products/product_info.php?cPath=8_6&#038;products_id=37">ElmScan 5 OBD II wireless scan tool</a> to peek into the dynamics of my engine. That tool, coupled with my <a href="http://www.google.com/url?sa=t&#038;ct=res&#038;cd=1&#038;url=http%3A%2F%2Fwww.nseries.com%2Fproducts%2Fn800%2F&#038;ei=LmeiRtDDKI_cetSr5Z4D&#038;usg=AFQjCNH5EvWbzGbFZ72Qjm6Cb0cTTph7Kw&#038;sig2=5Nh5Bp4qCzGVHxDsA_ckEA">Nokia N800</a> and some cool software called <a href="http://openbossa.indt.org/carman/index.html">CarMan</a> sent my mind wandering.</p>
<p>I am able to capture the engine load at a point in time. What if I calculate an average load for a commonly traveled route? I can then take variations of that route and determine which path minimizes the impact to the car. I could factor a lot of variables including time, distance, average engine load, gas consumption, frustration, etc. I could then determine a set of heuristics that could suggest the optimal path. </p>
<p>This could be useful for frequently traveled routes like to and from work daily. Or any other profession that does a fair amount of repetitive automobile travel. I believe the software could just sit there gathering information with little input from the user. This would allow it to collect a vast amunt of info and make decent determintions based on user preferences.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rickwargo.com/2007/07/21/extend-the-life-of-your-car/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
