<?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>Matthew T. Mead</title>
	<atom:link href="http://www.matthewtmead.com/blog/index.php?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.matthewtmead.com/blog</link>
	<description>Blogs About Technology, GTD and Life</description>
	<pubDate>Tue, 08 Dec 2009 06:04:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>OL2EN - Convert Outlook 2007 Notes to Evernote Export/Import Format</title>
		<link>http://www.matthewtmead.com/blog/?p=204</link>
		<comments>http://www.matthewtmead.com/blog/?p=204#comments</comments>
		<pubDate>Tue, 08 Dec 2009 04:59:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Cloud Computing]]></category>

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

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

		<category><![CDATA[Open Source]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=204</guid>
		<description><![CDATA[Background
Anyone who uses Outlook tasks and notes and an iPhone knows the pain of not being able to sync tasks and notes over-the-air from Exchange to the iPhone. I was surprised when I first realized that the Exchange client oin the iPhone only syncs email, calendar and contacts and does not sync notes and tasks. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Background</strong></p>
<p>Anyone who uses Outlook tasks and notes and an iPhone knows the pain of not being able to sync tasks and notes over-the-air from Exchange to the iPhone. I was surprised when I first realized that the Exchange client oin the iPhone only syncs email, calendar and contacts and does not sync notes and tasks. I was surprised because I assumed it would be like any other Exchange client and sync tasks and notes as well. Initially, not being able to sync notes did not seem like a showstopper. But over time it became more and more problematic as I was unable to access notes from Outlook that I have become dependent upon.</p>
<p><strong>Evernote</strong></p>
<p>A <a href="http://redpointtech.blogspot.com/" target="_blank">colleague </a>introduced me to Evernote (see <a href="http://www.evernote.com" target="_blank">evernote.com</a>). Evernote is a service that allows you to save notes containing various types of media to a central, cloud-based service. The notes are available for viewing and editing using a variety of applications including: traditional web, iPhone, Windows dand Mac. Best of all, the service and clients are free if you do not exceed a (fairly generous) disk space allotment. Notes that are created or edited on any platform are quickly and efficiently replicated to all clients.</p>
<p><strong>Moving Existing Notes</strong></p>
<p>Evernote has two built-in mechanisms to import data:</p>
<ol>
<li>Import Evernote import/export files</li>
<li>Extract notes from Microsoft OneNote</li>
</ol>
<p>I found myself in a bind. I had over 125 notes in Outlook 2007 (I was not using OneNote) and could not find an existing way to import these Outlook notes other than to copy and paste each note, one-by-one, into my Windows Evernote application. So I wrote a program to convert the Outlook notes into a format that can be imported into the Evernote Windows client (Note: as of this writing, the Mac Evernote client does not support this import feature).</p>
<p>My Outlook to Evernote (OL2EN) program takes an exported Outlook 2007 Notes file in Windows CSV format as input and creates an Evernote compatible import/export XML file as output. The Evernote import/export file can then be imported into the Evernote Windows client.</p>
<p style="text-align: center;"><a href="http://www.matthewtmead.com/blog/wp-content/uploads/ol2en.jpg"><img class="size-medium wp-image-216 aligncenter" title="Outlook to Evernote Application Screenshot" src="http://www.matthewtmead.com/blog/wp-content/uploads/ol2en-300x109.jpg" alt="Outlook to Evernote Application Screenshot" width="300" height="109" /></a></p>
<p>The complete steps to get started and import your Outlook 2007 notes are detailed:</p>
<ol>
<li>Download Evernote iphone client from the Apple App Store (the app is free)</li>
<li>Download and install the Evernote Windows client from the <a href="http://www.evernote.com/about/download/" target="_blank">evernote.com</a> site (the app is free)</li>
<li>Create a free account on evernote.com. You can do this from iPhone application or on evernote.com website.</li>
<li>Export notes from outlook in windows CSV using the following steps:<br />
a. Click on Notes in Microsoft Outlook 2007<br />
b. Select File | Import and Export&#8230;<br />
c. Select &#8216;Export to a File&#8217; in the resulting Import and Export dialog and click Next<br />
d. Select &#8216;Comma Separated Values (Windows)&#8217; and click Next<br />
e. Make sure that &#8216;Notes&#8217; is selected in the hierarchy and click Next<br />
f. Type in a location and filename (ending in .CSV) for your Outlook notes export CSV file and click Next<br />
g. Leave the default mappings on the final dialog and click Finish (your file will be created)</li>
<li>Create an Evernote XML import/export file using my tool using the following steps:<br />
a. <a href="http://www.matthewtmead.com/OL2EN/OL2EN_v1.zip" target="_blank">Download</a> the OL2EN application and run it (note that it requires the Microsoft .NET runtime)<br />
b. Run the program and select the CSV file you created in step 4 in the &#8216;Outlook Export File&#8217; field<br />
c. Type in the name of the Evernote XML file you want to generate in &#8216;Evernote Import File&#8217; field<br />
d. Leave &#8216;Ignore header row (first CSV row)&#8217; checked as the first CSV entry from the Outlook 2007 export is a header row<br />
e. Click &#8216;Generate&#8217;. A success dialog should indicate how many notes were converted.</li>
<li>Import the Evernote import/export XML file using the Evernote Windows client application using the following steps<br />
a. Start the Evernote Windows application<br />
b. Select File | Import | Evernote Export Files&#8230;<br />
c. In the resulting File Open dialog, browser for and select the Evernote import/export file created in step 5 and click open. If the import is successful, you will see a success dialog indicating the notes were imported into a separate notebook inside Evernote. Contratulations! In the event of a failure to import, your import notebook will be empty and you will not see a success message. Unfortunately, there doesn&#8217;t appear to be any information provided by Evernote, but is is likely that the XML file is malformed.</li>
</ol>
<p>OL2EN is free to use for commercial or non-commercial purposes. If you find OL2EN useful or want me to add any additional features, or run into any errors, please post a comment. OL2EN saved me from a lot of typing. I hope someone else can make use of it as well&#8230;</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=204">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=204#comments">6 comments</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=204&title=OL2EN - Convert Outlook 2007 Notes to Evernote Export/Import Format">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=evernote" rel="tag">Evernote</a>, <a href="http://www.matthewtmead.com/blog/?tag=gtd" rel="tag">GTD</a>, <a href="http://www.matthewtmead.com/blog/?tag=iphone" rel="tag">iPhone</a>, <a href="http://www.matthewtmead.com/blog/?tag=matthewtmead" rel="tag">matthewtmead</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=204</wfw:commentRss>
		</item>
		<item>
		<title>Backwards Hangers – Removing the Clutter in your GTD System</title>
		<link>http://www.matthewtmead.com/blog/?p=190</link>
		<comments>http://www.matthewtmead.com/blog/?p=190#comments</comments>
		<pubDate>Wed, 18 Nov 2009 05:42:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[GTD]]></category>

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=190</guid>
		<description><![CDATA[


Who doesn’t have clothes in their closet that they never wear? It is hard to decide what I will not wear and therefore should donate, but fortunately, I learned a trick that I can turn hangers backwards for all clothing for which I don’t think I will wear. If I end up wearing any of [...]]]></description>
			<content:encoded><![CDATA[<dl id="attachment_192" class="wp-caption alignleft" style="width: 310px;">
<dt class="wp-caption-dt"><img class="size-medium wp-image-192 alignleft" src="http://www.matthewtmead.com/blog/wp-content/uploads/hangers-300x190.jpg" alt="Image of backward hangers." width="300" height="190" /></dt>
</dl>
<p>Who doesn’t have clothes in their closet that they never wear? It is hard to decide what I will not wear and therefore should donate, but fortunately, I learned a trick that I can turn hangers backwards for all clothing for which I don’t think I will wear. If I end up wearing any of this questionable clothing, when it is returned to the closet, I will hang it with the hanger positioned normally (i.e. not backwards).</p>
<dl id="attachment_192" class="wp-caption alignleft" style="width: 310px;"> </dl>
<dl id="attachment_192" class="wp-caption alignleft" style="width: 310px;"> </dl>
<p>After a few months (or however long I want to wait) I can determine what clothing I did not wear because their hangers are still backwards. Clothes that are left on a backward hanger can safely be donated/given away because they are definitely not being worn. This approach allows even a pack-rats the peace of mind to get rid of any unnecessary clothing. The benefit is that I can get rid of clothing that takes up valuable space in my closet, but more importantly, it makes dealing with my closet easier because I don’t have excess clothes to pick through.</p>
<p>I&#8217;ve found that my brain is most at ease when my GTD lists of next actions (ToDos) and projects are most abundant because that means (or at least has the feeling) that everything is out of my head and in my system. This allows my brain to stop thinking about what I need to do and allows me to focus on getting things done. However, as my GTD system grows (i.e. more projects and ToDos are added to my system), it seems as if it becomes exponential difficulty to simply scan my context-specific list of ToDos when trying to determine the most appropriate next action.</p>
<p>During the course of my day, my ToDo list is constantly changing. I’m adding items that I’ve identified and removing items that I’ve completed. With just over 350 tasks in my GTD system, it can take several minutes to scan a list of @Computer-Broadband related next actions when the list has over 50 items. Just the thought of scanning through 350 next actions is painful!</p>
<p>In order to keep my GTD system complete, but not bloated, I need to prune my list of next actions and projects from time to time. GTD suggests moving unnecessary next actions and projects to the Someday Maybe list/category. My problem, like with clothes in my closet, is that it is very difficult to make the mental leap that an item is not needed and should be moved to the Someday maybe list.</p>
<p>To combat this resistance to prune an item, I use a similar technique to the backward hangers in the closet for my GTD lists. Although there are many ways you can approach it, during a special, monthly review, I put a trailing asterisk on next actions and projects for which I have not acted upon in at least a month. If, at some point, I act upon the action or project, I remove the asterisk (similar to returning clothing to the closet with the hanger oriented normally).</p>
<p style="text-align: center;"><img class="size-medium wp-image-199 aligncenter" title="asterisk" src="http://www.matthewtmead.com/blog/wp-content/uploads/asterisk1-300x75.jpg" alt="" width="300" height="75" /></p>
<p>Once a month, during my weekly review, I review the items with asterisks (see example above). If it has been at least a month since I dealt with the project or next action, I move it to the someday maybe category.</p>
<p>The beauty of this technique is that it helps me be aggressive at keeping my next action list to a minimum. (GTD practitioners will understand that we ignore the someday maybe list except during our weekly reviews). Minimizing the clutter and bloat in my lists allows me to more quickly understand what is truly important. By using this technique, my GTD system is much less bloated and I enjoy scanning my shorter lists easily throughout my day.</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=190">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=190#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=190&title=Backwards Hangers – Removing the Clutter in your GTD System">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=190</wfw:commentRss>
		</item>
		<item>
		<title>Adobe Mosaic - Task Centric, Composite RIA Mashup</title>
		<link>http://www.matthewtmead.com/blog/?p=183</link>
		<comments>http://www.matthewtmead.com/blog/?p=183#comments</comments>
		<pubDate>Wed, 28 Oct 2009 06:23:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[RIA]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=183</guid>
		<description><![CDATA[At Adobe MAX last month, Adobe announced the Mosaic alpha release (to a beta community). It is a composite rich internet application product that allows organizations to integrate and mash up their Flash/Flex, HTML and 3rd party web applications. Mosaic is part of Adobe&#8217;s approach to building next generation rich internet application (RIA) applications in [...]]]></description>
			<content:encoded><![CDATA[<p>At Adobe MAX last month, Adobe announced the Mosaic alpha release (to a beta community). It is a composite rich internet application product that allows organizations to integrate and mash up their Flash/Flex, HTML and 3rd party web applications. Mosaic is part of Adobe&#8217;s approach to building next generation rich internet application (RIA) applications in the enterprise. Using Mosaic, you can create task-centric applications (i.e. mashups) that are context aware and are composed of other applications.</p>
<p>From the glimpse of what I saw in my hands-on session, the alpha version of Mosaic includes a subset of what you&#8217;d expect from a portal. But Adobe was very careful not to call Mosaic a portal. It provides the UI layout and inter-application communication that you&#8217;d want from a portal-like technology, but it is intended to be more of a mashup container. As a result, Mosaic is intentionally missing many portal features such as user management.</p>
<p><strong>Tiles and Views</strong><br />
Each application that is contained in Mosaic is referred to as a tile. Tiles are made available to Mosaic through the catalog. The catalog contains all the information about a tile including its location, category, description, tags and other information about its layout. Any tile from the catalog is available to be injected into Mosaic. At the moment, Mosaic stores the tiles in an XML-based catalog. It seems likely to assume that Adobe will ultimately provide a management facility to allow non-programmers to manage the catalog and tile information.</p>
<p>An interesting aspect of the Mosaic UI is its support for up to 3 views. A view allows end-users to create a collection of related applications in single context. For example, within Mosaic you might have a view that contains your financial tiles, another view that contains your HR-related tiles and a third view that contains CRM-related tiles. You can think of views along the lines of multiple desktops or workspaces supported in Windows or Spaces on a Mac. As you would expect, the views can be saved from session to session and support the task-centric focus of Mosaic. As you would expect from a RIA application, Mosaic allows tiles to be rearranged within the view and also to run normalized or maximized.</p>
<p><strong>Inter-Tile Communication</strong><br />
Ultimately, Mosaic allows Flash/Flex, HTML and 3rd party applications (where source code is not available) to be integrated.  Flash/Flex tiles interact by modifying the application source to allow the resulting tile to send and receive messages and to take advantage of a global or view-based context. HTML applications (where source is available and can be edited) can make use of a JavaScript library to communicate. And finally, 3rd party HTML application (for which the source code is not available) can use URL Bridging to pass URL parameters. For example, you can include a tile in your application that calls google news to retrieve any recent news regarding Adobe by using the URL &#8220;http://news.google.com/news/search?q={global.sym}&#8221; where global.sym resolves to &#8220;adobe&#8221;.</p>
<p>Although details are not available, Adobe plans to provide tight integration with Mosaic and LiveCycle ES2.</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=183">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=183#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=183&title=Adobe Mosaic - Task Centric, Composite RIA Mashup">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=adobe" rel="tag">Adobe</a>, <a href="http://www.matthewtmead.com/blog/?tag=livecycle" rel="tag">LiveCycle</a>, <a href="http://www.matthewtmead.com/blog/?tag=mashup" rel="tag">Mashup</a>, <a href="http://www.matthewtmead.com/blog/?tag=mosaic" rel="tag">Mosaic</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=183</wfw:commentRss>
		</item>
		<item>
		<title>Spikes in Everyday Life - Deck Lattice</title>
		<link>http://www.matthewtmead.com/blog/?p=172</link>
		<comments>http://www.matthewtmead.com/blog/?p=172#comments</comments>
		<pubDate>Wed, 06 May 2009 18:09:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Agile]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=172</guid>
		<description><![CDATA[Extreme Programming (XP) defines a concept called a spike. A spike is an activity to find out answers to a touch technical or design problem. Extremeprogramming.org defines a spike as:
Create spike solutions to figure out answers to tough technical or design problems. A spike solution is a very simple program to explore potential solutions. Build [...]]]></description>
			<content:encoded><![CDATA[<p>Extreme Programming (XP) defines a concept called a spike. A spike is an activity to find out answers to a touch technical or design problem. Extremeprogramming.org defines a spike as:</p>
<blockquote><p>Create spike solutions to figure out answers to tough technical or design problems. A spike solution is a very simple program to explore potential solutions. Build a system which only addresses the problem under examination and ignore all other concerns. Most spikes are not good enough to keep, so expect to throw it away. The goal is reducing the risk of a technical problem or increase the reliability of a user story&#8217;s estimate.</p>
<p>When a technical difficulty threatens to hold up the system&#8217;s development put a pair of developers on the problem for a week or two and reduce the potential risk.</p></blockquote>
<p>So a spike should be the minimum work required to demonstrate the suitability of the solution, reduce the risk and help estimate the overall effort. Now to a problem outside of programming&#8230;</p>
<p>I&#8217;ve been meaning to replace the battered wooden lattice around the base of my deck that is attached to my house for several years. I was planning to use a plastic material (plastic lattice sheet and accompanying edging with a pre-cut channel) rather than wood so it is maintenance free and doesn&#8217;t rot. I used this plastic lattice and edging the previous year on a project, but was not happy with the way I assembled the lattice to the frame to form a panel.</p>
<p>I realized I was procrastinating on the deck lattice replacement project because of my previous mediocre experience with the plastic material coupled with the fact that I was not sure how long it would take, how much material I needed, what it would cost, and most importantly how I would anchor the finished panels to the base of the deck.</p>
<p>Furthermore, underneath the deck there are no vertical supports on the edge of the deck to which I could screw the panels. As a result, I was not sure how to fabricate and install the appropriate vertical supports without making this a huge production. And I also wanted to make sure the decorative panels were built to last and didn&#8217;t fall because they are not secured properly.</p>
<p>Then it occurred to me, I really needed to do a spike to better understand what I was up against. To remove the unknown, determine the effort involved and material needed. I had some scrap lattice and frame left over from my previous project, so I assembled a small panel the way I thought I wanted to do the whole deck. Given that it was a spike, I was prepared and expecting to throw out the panels I was building, just like I would do with code on an agile development project.</p>
<p>When I positioned my first panel in place below the deck, it fit beautifully and I was able to find two excellent and easy locations to secure vertical posts to which the panel was screwed. I was feeling good, but realized that the panel I installed was different from all the other locations and that it was likely easier to install. So, just like with software, if you find your spike does not represent the true unknown, you need to continue the spike. So I decided to continue building a second panel that would be installed in a more typical and potentially more difficult location.</p>
<p>After building the second panel, I held it in position and pondered how the heck to install it without any vertical supports. At this point, it would have been extremely helpful to have a pair carpenter to collaborate with on ideas, but I was out of luck, I was alone. After inspecting the way the panel met the bottom of the deck I realized an easy and hidden way to use metal strapping to secure a post just about anywhere I needed a post. Using this technique, I was able to successfully and easily screw the second panel to its supports. At this point I felt I learned enough and brought the spike to an end.</p>
<p style="text-align: center;"><img class="aligncenter" src="/blog/wp-content/uploads/lattice.jpg" alt="description" width="491" height="367" /></p>
<h6 style="text-align: center;"><strong>Photo of one installed panel that was built during the spike</strong></h6>
<p>With the information I learned from the spike, I was able to estimate the materials needed, the cutting I had to do and the time to cut, assemble and install. Given these discoveries I knew how much it was going to cost and roughly how long it would take to build and install the remaining panels for the deck.</p>
<p>Just like with code built in a spike, I ended up discarding the first two panels I built during the spike because I built them with an emphasis on experimentation and was not concentrating on quality.</p>
<p>The most significant benefit from the spike was the pressure lifted from my shoulders by just committing to do a single panel in a spike and letting go of the complexities for the remainder of the deck skirt. Just like in a software spike, I only addressed the problem under examination and ignored all other concerns. That shift in mindset was freeing!</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=172">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=172#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=172&title=Spikes in Everyday Life - Deck Lattice">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=agile" rel="tag">Agile</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a>, <a href="http://www.matthewtmead.com/blog/?tag=software" rel="tag">software</a>, <a href="http://www.matthewtmead.com/blog/?tag=spike" rel="tag">spike</a>, <a href="http://www.matthewtmead.com/blog/?tag=xp" rel="tag">XP</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=172</wfw:commentRss>
		</item>
		<item>
		<title>Open Source Software (OSS) Evaluation</title>
		<link>http://www.matthewtmead.com/blog/?p=163</link>
		<comments>http://www.matthewtmead.com/blog/?p=163#comments</comments>
		<pubDate>Fri, 01 May 2009 14:53:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

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

		<category><![CDATA[Open Source Software]]></category>

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

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

		<category><![CDATA[sotware evaluation]]></category>

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=163</guid>
		<description><![CDATA[There are differences in evaluating and comparing open source software (OSS) products, as opposed to commercial packages. A number of key OSS criteria are also described. This information is based on years of experience at Redpoint , using OSS and evaluating both open source and commercial software for clients.
Evaluating OSS effectively requires different criteria than [...]]]></description>
			<content:encoded><![CDATA[<p>There are differences in evaluating and comparing open source software (OSS) products, as opposed to commercial packages. A number of key OSS criteria are also described. This information is based on years of experience at <a href="http://www.redpointtech.com" target="_blank">Redpoint </a>, using OSS and evaluating both open source and commercial software for clients.</p>
<p>Evaluating OSS effectively requires different criteria than the ones used for commercial software. Commercial software selection techniques and tools are inadequate in making informed choices about OSS. Different OSS products will have strengths in different functional and technical areas. Some are growing and vibrant with strong growth in the developer and end-user community, others may be stagnant.</p>
<p>The traditional commercial software evaluation process involves establishing software requirements/functionality evaluation criteria, reading industry analyst reports, meeting with sales and technical pre-sales teams and negotiating licensing and support costs. An in-depth evaluation of commercial software will involve talking to a few reference customers and reviewing the financial stability of the software vendor and the longevity of their product.</p>
<p>Much of the information that is used for the commercial software evaluation is obtained from the software vendor’s sales team. When evaluating OSS, there typically aren’t any sales teams, no on-site demos by the sales team, no glossy sales brochures that highlight product advantages, no advertising and, as a result, the process needs to be different. Also, unlike commercial software, it is not always easy to determine who else is using an OSS product.</p>
<p>Industry analyst reports on OSS are scarce and the information is usually limited. Typically, OSS evaluations focus on the few leading OSS initiatives such as Apache, Linux, MySQL, etc. When evaluating an open source software package, it is important to focus on the following categories:</p>
<ul>
<li>Product Capabilities</li>
<li>Quality</li>
<li>Integration and Dependencies</li>
<li>OSS Community</li>
<li>Support</li>
</ul>
<p><strong>Product Capabilities</strong></p>
<p>It is usually easy to identify and verify the capabilities of an OSS product. Most groups clearly document their features and exaggerations of their capabilities are not typical as they will generate support email and unfavorable discussions in their community. Also, these groups are typically looking for developers to implement their missing feature so they have an incentive to be honest about the capabilities.</p>
<p>Open source products many times have a different focus because of their origins or because of the influence of the developers that initially developed it. Also, OSS tends to evolve and sometimes take on different focus. It is important to consider the focus of a product and how it has evolved to get an indication of where the product may evolve in the future.</p>
<p>Although all OSS can be modified, it is important to understand what modifications are in-line with the product direction so they are within the upgrade path in the future. Most CRM OSS provides a mechanism to customize the software. However, the technique and range of customization that is allowed varies greatly among the products.</p>
<p><strong>Quality</strong></p>
<p>In addition to inspecting the code, development approach, documentation, build environment, testing strategy and general product literature, inspecting the bug database, which is usually public, is a good way to understand the number of bugs in a system. This will indicate the number of high-visibility bugs outstanding and the length of time it takes for typical bugs to get fixed.</p>
<p><strong>Integration and Dependencies</strong></p>
<p>Most OSS list the other OSS or commercial products with which they integrate. The products with which they integrate and the way in which the OSS integrates often says a lot about the general integration mechanism that is available in the product.</p>
<p>Product dependencies also give an indicator of how the product is intended to be integrated. Many times the dependencies are available explicitly from the OSS literature, other times it must be inferred by reviewing the installation and support documentation.</p>
<p><strong>OSS Community</strong></p>
<p>OSS projects can vary from a single developer to a distributed, world-wide, company-backed team. It is important to understand the project structure, its backing and its motivation. Some products are developed by commercial companies attempting to make their money from the customization, support and training. Other projects are only supported by key alliance partners that are a result of the OSS community.</p>
<p>Ideally the team is more than a single developer, but sometimes a very large, distributed team can hinder the ability for the product to have a clear, concise vision and to make targeted release dates.</p>
<p>The strength of the community is best gauged by the support and activity of the OSS wikis, forums and mailing lists. Typically, there are two mailing lists – one for users that includes help installing, upgrading, etc. and another list for the developers to discuss bugs, the roadmap, new features, etc.</p>
<p><strong>Development Process and Source Code Control</strong></p>
<p>The quality and development process is another important consideration for OSS that is not typically available for commercial software. The code can be reviewed and checked for adherence to general product and industry best practices and coding style.</p>
<p>The testing techniques used are also very important. Even if it is not documented, a quick check of the build script will typically reveal whether any unit testing is incorporated into the project. Overall, the software should have some documentation – both from an architectural and code-level perspective.</p>
<p>Even if you don’t plan to alter the OSS source code, it is important that the system can be built (i.e. compiled). Even if you don’t intend to contribute back to the OSS community, it is important to be able to rebuild the system if a show-stopper bug were encountered.</p>
<p>The release management techniques employed by the OSS development group is important. A quality product does not necessarily have a robust release process and does not necessarily have any easy upgrade path. A feel for the release process can be determined by reviewing the release notes with previous builds and determining whether frequent bug releases are distributed shortly after major product releases.</p>
<p><strong>Support</strong></p>
<p>The first level of support for typical OSS is by the community having access to the source. Many OSS bugs are identified and fixed by developers that use the product. Some fix and contribute back the fix to help ensure it is fixed in a future release, not because they feel they have to contribute to the community.</p>
<p>In order to perform fixes on the OSS source code, it must be logical, easy to understand and proper documentation must exist. Some documentation may be in-line in the source code and other documentation will vary from on-line to PDF format.</p>
<p>Most major OSS products have paid support options. This support can range from first-tier support, where the vendor will act as your first-line help desk, to second- and third-tier support where internal support will first attempt to identify and fix a problem before it is escalated to the paid support. The cost of the support decreases as the company takes on more initial support roles (e.g. help desk).</p>
<p>Paid support can range from typical commercial-style maintenance contracts to per-incident agreements. It is important to understand the typical turn-around time for support under the various support agreements.</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=163">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=163#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=163&title=Open Source Software (OSS) Evaluation">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=cots" rel="tag">COTS</a>, <a href="http://www.matthewtmead.com/blog/?tag=open-source-software" rel="tag">Open Source Software</a>, <a href="http://www.matthewtmead.com/blog/?tag=oss" rel="tag">OSS</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a>, <a href="http://www.matthewtmead.com/blog/?tag=sotware-evaluation" rel="tag">sotware evaluation</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=163</wfw:commentRss>
		</item>
		<item>
		<title>Performance Testing RackSpace&#8217;s Mosso Cloud Files</title>
		<link>http://www.matthewtmead.com/blog/?p=136</link>
		<comments>http://www.matthewtmead.com/blog/?p=136#comments</comments>
		<pubDate>Fri, 30 Jan 2009 06:16:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Cloud Computing]]></category>

		<category><![CDATA[.net]]></category>

		<category><![CDATA[Cloud Files]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=136</guid>
		<description><![CDATA[At Redpoint Technologies, we&#8217;ve been evaluating many of the services offered by leading cloud vendors in order to better understand where various cloud offerings are most appropriate. Like any technology, it is important to understand each offering&#8217;s strengths and weaknesses.
Today I executed some crude performance tests against the Rack Space Mosso Cloud Files offering. This [...]]]></description>
			<content:encoded><![CDATA[<p>At Redpoint Technologies, we&#8217;ve been evaluating many of the services offered by leading cloud vendors in order to better understand where various cloud offerings are most appropriate. Like any technology, it is important to understand each offering&#8217;s strengths and weaknesses.</p>
<p>Today I executed some crude performance tests against the <a href="http://www.mosso.com/index.jsp" target="_blank">Rack Space Mosso Cloud Files</a> offering. This is very similar to the Amazon S3 storage offering. It allows files to be uploaded to the Mosso cloud server where they can be later retrieved. The service offers no minimum or maximum in overall storage, but does limit individual files to 5GBs or smaller, and utilizes utility-style pricing.</p>
<p>Cloud Files optionally allows you to store your content on a content delivery network (CDN). <em>A CDN is an infrastructure of servers located in different geographic locations that work together to rapidly deliver web content to users based on their geographic location. </em>As a result, a CDN can dramatically increase the speed with which content is delivered/retrieved.</p>
<p><strong>Major Considerations</strong></p>
<p>Depending on your needs for uptime, Mosso offers what I&#8217;d consider the minimum availability with a 99.9% uptime guarantee for Cloud Files. This means the service may be down about 10 minutes per week or roughly 40.5 minutes per month. For many applications, that is acceptable, but for mission critical situations, this may not be enough.</p>
<p>The following table summarizes many of the considerations and the description for how these considerations are addressed by Mosso.</p>
<table border="1" cellspacing="3" cellpadding="3" width="100%" align="center" bgcolor="#d4d4d4" bordercolor="#000000">
<tbody>
<tr>
<td align="left" valign="top"><strong>Consideration</strong></td>
<td align="left" valign="top"><strong>Description</strong></td>
</tr>
<tr>
<td align="left" valign="top">Contracts and Minimums</td>
<td align="left" valign="top">No contracts, no minimums.</td>
</tr>
<tr>
<td align="left" valign="top">Performance</td>
<td align="left" valign="top">See performance notes below.</td>
</tr>
<tr>
<td align="left" valign="top">Cost</td>
<td align="left" valign="top">Minimal: $.15 per GB of storage, $.22 per GB of bandwidth out, $.01 for requests (via control panel).</td>
</tr>
<tr>
<td align="left" valign="top">Security</td>
<td align="left" valign="top">All traffic between your application and the Cloud Files server uses SSL to establish a secure, encrypted channel. This ensures that any data (usernames, passwords, and content) cannot be intercepted and read by a third party.</td>
</tr>
<tr>
<td align="left" valign="top">Availability</td>
<td align="left" valign="top">Offers a 99.9% uptime guarantee. That&#8217;s about 10 minutes of downtime per week.</td>
</tr>
<tr>
<td align="left" valign="top">Backup/Redundancy</td>
<td align="left" valign="top">Data is replicated to three locations.</td>
</tr>
<tr>
<td align="left" valign="top">Accessibility</td>
<td align="left" valign="top">Access files via Mosso browser-based control panel or via programmatic API.</td>
</tr>
<tr>
<td align="left" valign="top">Language Support</td>
<td align="left" valign="top">Supports PHP, Phython, Java and .NET via their API. See the <a href="https://api.mosso.com/guides/cloudfiles/cfs-devguide-20081119.pdf" target="new">developer API documentation</a></td>
</tr>
</tbody>
</table>
<p><strong>Performance</strong></p>
<p>For an upcoming distributed, grid-based project, I&#8217;m interested in the speed with which I can upload gigabytes of data to a temporary storage location.</p>
<p>The performance of Mosso was decent when using their API, but dreadful when uploading via their web-based interface (but to be fair, the web interface is more for account management and less about use in a production system). The overhead of SSL was surprisingly minimal (as compared to raw FTP - see below as this was not an exact comparison).</p>
<p>I used a 24.9 MB bitmap file as my test file to measure performance for uploading files to Mosso (additional tests around downloading would be worth while testing as well). I tested uploading the test file via the Mosso web interface, using the Mosso API from a .NET application (see the c# console application code below) and to this blog site via FTP to have a non SSL benchmark.</p>
<p>I ran each test several times and throughout the day from my cable modem (which scores between 712 to 2550 Kbps in a browser-based connection speed tests). The results from each run were pretty consistent. On average, it took about 6.25 minutes to upload the 24.9 MB test file to Mosso via the Mosso web interface (control panel), about 3.5 minutes to upload the 24.9 MB test file to Mosso via the Mosso API using the below application and about 3.25 minutes uploading to this (shared .NET hosting) blog site using Filezilla.</p>
<p>The results were satisfying in that my raw FTP upload (to a non-Mosso server) were just a bit faster than the Mosso upload that uses SSL. In my brief testing the service was reliable and I like that the Mosso session could be cached indefinitely in a custom application (unlike the web interface that timed out my session after about 20 to 30 minutes of inactivity).</p>
<p><strong>.NET Test Application </strong></p>
<p>You can use the code below to create a C# console application that will upload a file to Mosso&#8217;s Cloud Files service. (Please note that you will need to purchase an account at Mosso prior to being able to run this code.) Prior to building/running the application, you need to add a reference to the com.mosso.cloudfiles .NET assembly that is included in the lib directory of the free download that includes the Mosso .NET sample code. And don&#8217;t forget to provide meaningful values for the string values in lines 16, 18, 20 and 22.</p>
<p>Although it would be easy to add an upload timer to the code below, I used a physical stopwatch to capture the time for my upload tests.<br />
<!--<br />
.csharpcode, .csharpcode pre<br />
{<br />
font-size: small;<br />
color: black;<br />
font-family: Consolas, "Courier New", Courier, Monospace;<br />
background-color: #ffffff;<br />
/*white-space: pre;*/<br />
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt<br />
{<br />
background-color: #f4f4f4;<br />
width: 100%;<br />
margin: 0em;<br />
}</p>
<p>.csharpcode .lnum { color: #606060; }<br />
--></p>
<div class="csharpcode">
<pre class="alt"><span class="lnum">   1:  </span><span class="kwrd">using</span> System;</pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre class="alt"><span class="lnum">   3:  </span><span class="kwrd">using</span> System.Linq;</pre>
<pre><span class="lnum">   4:  </span><span class="kwrd">using</span> System.Text;</pre>
<pre class="alt"><span class="lnum">   5:  </span><span class="kwrd">using</span> com.mosso.cloudfiles.services;</pre>
<pre><span class="lnum">   6:  </span><span class="kwrd">using</span> com.mosso.cloudfiles.domain;</pre>
<pre class="alt"><span class="lnum">   7:  </span></pre>
<pre><span class="lnum">   8:  </span><span class="kwrd">namespace</span> MossoPerfTest</pre>
<pre class="alt"><span class="lnum">   9:  </span>{</pre>
<pre><span class="lnum">  10:  </span>    <span class="kwrd">class</span> Program</pre>
<pre class="alt"><span class="lnum">  11:  </span>    {</pre>
<pre><span class="lnum">  12:  </span>        <span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)</pre>
<pre class="alt"><span class="lnum">  13:  </span>        {</pre>
<pre><span class="lnum">  14:  </span>            Connection connection;</pre>
<pre class="alt"><span class="lnum">  15:  </span>            <span class="rem">// get your user name from mosso at sign-up</span></pre>
<pre><span class="lnum">  16:  </span>            <span class="kwrd">string</span> username = <span class="str">"your-user-name-here"</span>;</pre>
<pre class="alt"><span class="lnum">  17:  </span>            <span class="rem">// get this from mosso console once you have an account</span></pre>
<pre><span class="lnum">  18:  </span>            <span class="kwrd">string</span> api_access_key = <span class="str">"your-key-here"</span>;</pre>
<pre class="alt"><span class="lnum">  19:  </span>            <span class="rem">// containers are top-level "folders" for your data files</span></pre>
<pre><span class="lnum">  20:  </span>            <span class="kwrd">string</span> container = <span class="str">"your-container-name-here"</span>;</pre>
<pre class="alt"><span class="lnum">  21:  </span>            <span class="rem">// fully-qualified filename you want to upload </span></pre>
<pre><span class="lnum">  22:  </span>            <span class="kwrd">string</span> fileName = <span class="str">@"C:\your-filename-here.txt"</span>;</pre>
<pre class="alt"><span class="lnum">  23:  </span>            <span class="kwrd">try</span></pre>
<pre><span class="lnum">  24:  </span>            {</pre>
<pre class="alt"><span class="lnum">  25:  </span>                connection = <span class="kwrd">new</span> Connection(</pre>
<pre><span class="lnum">  26:  </span>                        <span class="kwrd">new</span> UserCredentials(username, api_access_key));</pre>
<pre class="alt"><span class="lnum">  27:  </span>                connection.PutStorageItem(container, fileName);</pre>
<pre><span class="lnum">  28:  </span>            }</pre>
<pre class="alt"><span class="lnum">  29:  </span>            <span class="kwrd">catch</span></pre>
<pre><span class="lnum">  30:  </span>            {</pre>
<pre class="alt"><span class="lnum">  31:  </span>                Console.WriteLine(</pre>
<pre><span class="lnum">  32:  </span>                        <span class="str">"Authentication failed or file upload failed"</span>);</pre>
<pre class="alt"><span class="lnum">  33:  </span>            }</pre>
<pre><span class="lnum">  34:  </span>        }</pre>
<pre class="alt"><span class="lnum">  35:  </span>    }</pre>
<pre><span class="lnum">  36:  </span>}</pre>
</div>
<p><strong>Conclusion</strong></p>
<p>In conclusion, you need to be strategic in thinking where you&#8217;d use a service like Cloud Files from RackSpace&#8217;s Mosso. We would use a service like Cloud Files for storing large files if we could queue them up and upload them asynchronously from our system. Or, perform a synchronous upload if the file was small enough.</p>
<p>From the Mosso&#8217;s marketing material, they state that Cloud Files is good for:</p>
<ul>
<li>Backups/archives of your data</li>
<li>Serving images/videos (streaming data to the user&#8217;s browser)</li>
<li>Secondary/tertiary, web-accessible storage for your data</li>
<li>Well suited when amount of storage is difficult to predict</li>
<li>Simple point-and-click interface via Mosso Control Panel</li>
</ul>
<p>But that it is not so good for:</p>
<ul>
<li>Native support within your Operating System. It is not yet possible to &#8220;mount&#8221; or &#8220;map&#8221; the Cloud Files storage system as a virtual hard-disk on your computer.</li>
<li>Disk mirroring or backup solutions that require byte/block level differences. There are no concepts of &#8220;append&#8221; or &#8220;file locking&#8221; operations within Cloud Files.</li>
<li>Data can be organized into storage compartments called &#8220;Containers&#8221;, but they cannot be nested. Since there is only one top-level of Containers, you will not be able to upload a nested directory/folder structures into Cloud Files unless a transformation is performed to flatten the structure.</li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=136">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=136#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=136&title=Performance Testing RackSpace&#8217;s Mosso Cloud Files">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=net" rel="tag">.net</a>, <a href="http://www.matthewtmead.com/blog/?tag=cloud-computing" rel="tag">Cloud Computing</a>, <a href="http://www.matthewtmead.com/blog/?tag=cloud-files" rel="tag">Cloud Files</a>, <a href="http://www.matthewtmead.com/blog/?tag=matthewtmead" rel="tag">matthewtmead</a>, <a href="http://www.matthewtmead.com/blog/?tag=mosso" rel="tag">Mosso</a>, <a href="http://www.matthewtmead.com/blog/?tag=rackspace" rel="tag">RackSpace</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=136</wfw:commentRss>
		</item>
		<item>
		<title>Perfect Temperature Coffee</title>
		<link>http://www.matthewtmead.com/blog/?p=113</link>
		<comments>http://www.matthewtmead.com/blog/?p=113#comments</comments>
		<pubDate>Fri, 23 Jan 2009 06:26:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Electronics]]></category>

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=113</guid>
		<description><![CDATA[Some of you are blessed with the ability to drink coffee or tea at temperatures that seem to be approaching the temperature of lava. Unfortunately, I&#8217;m always trying to find ice or cold water to cool down my drink whether I just brewed it at home or bought coffee from a cafe.
So it is not [...]]]></description>
			<content:encoded><![CDATA[<p>Some of you are blessed with the ability to drink coffee or tea at temperatures that seem to be approaching the temperature of lava. Unfortunately, I&#8217;m always trying to find ice or cold water to cool down my drink whether I just brewed it at home or bought coffee from a cafe.</p>
<p>So it is not surprising that a <a href="http://www.popsci.com/node/29314" target="_blank">Smart Coaster Popular Science Build It project</a> by Dave Prochnow caught my eye. This is a pretty simple circuit that uses a thermistor to measure the temperature of your hot drink. You calibrate your coaster to illuminate an LED while the temperature of the drink is too hot and to turn off the LED once the temperature reaches the point where it is cool enough to drink. I like the author&#8217;s use of a shoe polish container, but all I could get my hands on was an ever-so-versitile Altoids container.</p>
<p>Like the author <span class="pic-credit">explains, once you have your circuit built and tested, you need to calibrate your potentiometer to turn off your LED just when the temperature of your drink is ready to drink. I taped my thermistor to the underside of the top of the metal enclosure, but still found it a bit tricky to get the potentiometer set properly</span>. When you are calibrating, you need to make sure you use the same type of coffee cup or else you will get very inconsistent results.</p>
<p>My finished product is below. As you can see, the LED sticks out the front and I also have my potentiometer sticking out the side of the enclosure. With the Altoids box, it is easy to have wires hang outside, but be careful as repeated open and closing quickly wears away the insulation on the wires!</p>
<p style="text-align: center;"><a href="http://www.matthewtmead.com/blog/wp-content/uploads/smartcoasterwithcup-sm.jpg"><img class="size-medium wp-image-122 aligncenter" title="Smart Coaster with Cup" src="http://www.matthewtmead.com/blog/wp-content/uploads/smartcoasterwithcup-sm-300x299.jpg" alt="" width="300" height="299" /></a></p>
<p style="text-align: center;"><a href="http://www.matthewtmead.com/blog/wp-content/uploads/smartcoasterbycup-sm.jpg"><img class="size-medium wp-image-120 aligncenter" title="Smart Coaster by Cup" src="http://www.matthewtmead.com/blog/wp-content/uploads/smartcoasterbycup-sm-300x187.jpg" alt="" width="300" height="187" /></a></p>
<p>I initially prototyped the circuit on a breadboard, like I do for any new circuit I&#8217;m building or experimenting with, and used a plastic (note metal would not be good here given that it would conduct and cause your battery to get extremely hot!) chip clip to hold the positive and negative leads onto each side of the flat, disc-shaped battery. In the enclosure I built a home made 3.7V battery holder by putting the battery in the top of an old 35mm camera film case and used hard plastic to cover the bottom. I cut a small hole in the top and bottom to route a wire with a long, uninsulated lead (that was swirled into a spring-like shape) into each side of the battery enclosure. Finally, I taped the home made battery enclosure with electrical tape to keep the positive and negative wires snug against each side of the battery. It looks pretty ugly, but works great.</p>
<p>Below is a picture of the inside of the enclosure where you will see the battery holder on right side, the tangled mess of wires and the thermistor taped with electrical tape to the bottom of the lid:</p>
<p style="text-align: center;"><a href="http://www.matthewtmead.com/blog/wp-content/uploads/smartcoasterinside-sm.jpg"><img class="size-medium wp-image-121 aligncenter" title="Smart Coaster Inside" src="http://www.matthewtmead.com/blog/wp-content/uploads/smartcoasterinside-sm-300x222.jpg" alt="" width="300" height="222" /></a></p>
<p>And I used the <em>dead bug</em> method to solder the LM324N Integrated Circuit (IC) into the circuit. This is a technique that is popular in robotics where space is limited. This technique is nothing more than turning the IC upside down, with the legs sticking up (so it looks like a dead bug on its back with its legs up in the air) and soldering your connections directly to the legs of the integrated circuit chip. If I had an IC socket handy I would have used the dead bug technique to solder directly to the empty socket and would have avoided the risk of damaging the circuit by soldering it directly. Fortunately, I did not damage the IC by soldering directly to it. By clipping the unused legs of the IC, it made it a bit easier to solder directly to the IC legs.</p>
<p>Finally, I&#8217;d highly recommend that you use a <a href="http://www.mouser.com/Search/ProductDetail.aspx?qs=sGAEpiMZZMvJBlHRSOGUxHYmn%252bCGy5OpyeFTLS%252bcHp8%3d" target="_blank">stripboard</a> or create a printed circuit board for this circuit. The article does not advocate the use of a board and in the excitement to build the smart coaster I did not use a board&#8230;but shortly into the project remembered how frustrating it can be to solder everything together and then struggle to get the circuit into its enclosure without breaking any solder joint. With a strip or circuit board the circuit would easily sit in the enclosure with the LED, thermistor and potentiometer connected via lead wires. </p>
<p>In retrospect, I also recommend that you use very light gauge wire for any wires that will require flexibility and that you intend to move around. Otherwise, you end up breaking solder joints as you move the components around.</p>
<p>A few items worth noting if you are building this project:</p>
<ul>
<li>You can always identify leg 1 of an IC by finding the dimple in side of Integrated Circuit (IC) and then finding the first leg that is counter clockwise to the dimple. Sometimes, leg 1 also has a dot of paint near it. My LM324N IC had the dimple, but not paint. Below is the block diagram that displays the dimple at the top and leg 1 on the top left.</li>
<li><a href="http://www.matthewtmead.com/blog/wp-content/uploads/lm324n.jpg"><img class="size-medium wp-image-115" title="LM324N" src="http://www.matthewtmead.com/blog/wp-content/uploads/lm324n-300x216.jpg" alt="LM324N" width="300" height="216" /></a></li>
</ul>
<ul>
<li>I recommend that you purchase a battery holder for your 3.7v battery. <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8863" target="_blank">Here is a battery holder</a> available from SparkFun.com. You will still need to wrap your battery and holder in lots of electrical tape to make sure a metal holder does not conduct against the side of the smart coaster (assuming your enclosure is metal).</li>
<li>I would highly recommend that you use a heat sink if you are soldering your IC using the dead bug technique. This will draw heat from the leg and minimize the chance of damaging your IC.</li>
<li>Whether you use a board or not, you should make sure you have a helping hands or other desktop vice to hold your parts in place while you are soldering.</li>
<li>Get some heat shrinking insulator material and slip the heat shrink tubes on your wires prior to soldering. This way you can easily cover your soldering joints and exposed metal inside your crowded, metal enclosure. And for places where you cannot easily use heat shrink tubing, use plenty of electrical tape.</li>
</ul>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=113">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=113#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=113&title=Perfect Temperature Coffee">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=electronics" rel="tag">Electronics</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=113</wfw:commentRss>
		</item>
		<item>
		<title>GTD Supportive Alarm Clock</title>
		<link>http://www.matthewtmead.com/blog/?p=109</link>
		<comments>http://www.matthewtmead.com/blog/?p=109#comments</comments>
		<pubDate>Fri, 09 Jan 2009 23:49:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[GTD]]></category>

		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=109</guid>
		<description><![CDATA[For Christmas my wife and kids bought me an iHome iPhone alarm clock. My first impression was good, I thought it would be nice to have a home for my phone at night and be able to listen to music in our bedroom.
iHome Alarm Clock
But, what I didn&#8217;t realize was that it would be incredibly [...]]]></description>
			<content:encoded><![CDATA[<p>For Christmas my wife and kids bought me an iHome iPhone alarm clock. My first impression was good, I thought it would be nice to have a home for my phone at night and be able to listen to music in our bedroom.</p>
<div id="attachment_111" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.matthewtmead.com/blog/wp-content/uploads/ihome.jpg"><img class="size-medium wp-image-111" title="iHome Alarm Clock" src="http://www.matthewtmead.com/blog/wp-content/uploads/ihome-300x169.jpg" alt="iHome Alarm Clock" width="300" height="169" /></a><p class="wp-caption-text">iHome Alarm Clock</p></div>
<p>But, what I didn&#8217;t realize was that it would be incredibly convenient to capture todos/thoughts while lying in bed prior to falling asleep. I&#8217;m not sure if this is common, but all sorts of things fly though my head when I&#8217;m relaxing at the end of the day. I think of things I didn&#8217;t get completed (not too many!), but also have many creative thoughts.</p>
<p>Prior to my cool new iHome alarm clock, I kept a notepad and pen in my nightstand to capture thoughts, but it requires the light to be turned on to see what I was writing. With the backlit iPhone right by the bed, I can capture notes in the dark and, best of all, my GTD next actions are already in my official GTD system and don&#8217;t require any further thought.</p>
<p>Aside from GTD, it would be a shame if I didn&#8217;t mention how great this iHome alarm clock really is. Like the iPhone&#8217;s visual voicemail, which is easy to maneuver and use, the iHome has a visual display for setting the alarm&#8230;and the alarm time is always visible on the display, so I always know whether the alarm is set and if the alarm time is correct.</p>
<p>Regards,<br />
Matt</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2009. |
<a href="http://www.matthewtmead.com/blog/?p=109">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=109#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=109&title=GTD Supportive Alarm Clock">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=add-new-tag" rel="tag">Add new tag</a>, <a href="http://www.matthewtmead.com/blog/?tag=gtd" rel="tag">GTD</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=109</wfw:commentRss>
		</item>
		<item>
		<title>AWS Launches CloudFront</title>
		<link>http://www.matthewtmead.com/blog/?p=100</link>
		<comments>http://www.matthewtmead.com/blog/?p=100#comments</comments>
		<pubDate>Mon, 08 Dec 2008 03:35:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Cloud Computing]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=100</guid>
		<description><![CDATA[Late last month (November 18, 2008), Amazon Web Services (AWS) announced the public beta of  a new service for content delivery. The new Cloud Computing service, CloudFront, provides developers an easy way to distribute HTTP content to end users with minimal latency delays and provides high data transfer speeds.
CloudFront integrates with other AWS services [...]]]></description>
			<content:encoded><![CDATA[<p>Late last month (November 18, 2008), Amazon Web Services (AWS) announced the public beta of  a new service for content delivery. The new <a href="http://www.matthewtmead.com/blog/?p=89">Cloud Computing</a> service, <a href="http://aws.amazon.com/">CloudFront</a>, provides developers an easy way to distribute HTTP content to end users with minimal latency delays and provides high data transfer speeds.</p>
<p>CloudFront integrates with other AWS services and, like the other AWS services, does not require any long-term commitment or expensive upfront cost, has the self-service account interface and utility pay-as-you-go payment model.</p>
<p>CloudFront is exciting because it provides a mechanism to deliver HTTP content throughout the world by leveraging the Amazon network of edge servers. These edge servers are distributed throughout the world in order for the content cached at these servers to be physically closer to the end users in order to lower the latency in delivering the content.</p>
<p>CloudFront integrates with AWS S3 by allowing you to store the original versions of your data in an AWS S3 bucket (S3 is Amazon&#8217;s Simple Storage Service, which is a web service that allows any size chunk of data to easily be stored and retrieved). The beauty is that the original data objects can be stored in S3 and, after a simple registration process, are seamlessly accessible through the AWS edge servers throughout the world.</p>
<p>At the moment, the dominant players in the Content Delivery Network or Content Distribution Network (CDN) space are Limelight, Akamai and CDNetworks. CDNs are used by most high-scaling websites including, for example, MySpace.com and the National Basketball Association (NBA). The CloudFront offering in this space provides a lower-cost alternative to the existing players.</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2008. |
<a href="http://www.matthewtmead.com/blog/?p=100">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=100#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=100&title=AWS Launches CloudFront">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=cloud" rel="tag">Cloud</a>, <a href="http://www.matthewtmead.com/blog/?tag=computing" rel="tag">computing</a>, <a href="http://www.matthewtmead.com/blog/?tag=innovation" rel="tag">Innovation</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=100</wfw:commentRss>
		</item>
		<item>
		<title>CRC Cards, Simple Yet Powerful</title>
		<link>http://www.matthewtmead.com/blog/?p=74</link>
		<comments>http://www.matthewtmead.com/blog/?p=74#comments</comments>
		<pubDate>Sun, 16 Nov 2008 05:35:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Code Quality]]></category>

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

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

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

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

		<guid isPermaLink="false">http://www.matthewtmead.com/blog/?p=74</guid>
		<description><![CDATA[It seems the excitement and use of Class, Responsibility, Collaboration (CRC) cards has diminished over the years. But with an emphasis on agile development approaches, it seems there is a rise in simple, yet powerful approaches that are low tech. The barrier to entry for CRC cards is pretty low&#8230;you just need a pile of [...]]]></description>
			<content:encoded><![CDATA[<p>It seems the excitement and use of Class, Responsibility, Collaboration (CRC) cards has diminished over the years. But with an emphasis on agile development approaches, it seems there is a rise in simple, yet powerful approaches that are low tech. The barrier to entry for CRC cards is pretty low&#8230;you just need a pile of 3&#8243;x5&#8243; or 4&#8243;x6&#8243; index cards and a pen.</p>
<p>Are CRC big upfront design? I don&#8217;t think so, but it is a potentially conflicting with Test Driven Development (TDD). I see the greatest value of CRC cards as a way to get a sense for the initial high-level design and not a way to work through the design of every low-level class in a system. This may be most useful in the case of a service oriented system, for example, where you may desire a bit of focus up front on the exposed external interface. Or better yet, a way to talk through a design if you get &#8220;stuck&#8221;. The downside of CRC cards is that you are not keeping a client-oriented view like you do when using TDD. A client-oriented view is critical to good design and is one of the natural advantages to TDD.</p>
<p>Back to CRC cards&#8230;The idea is that each physical index card represents a single class or interface. Each card should have the name of the class at the top, the class responsibility (note that conscious choice to make this singular) on the bottom left and the classes with which the given class collaborates on the bottom right.</p>
<div id="attachment_84" class="wp-caption alignnone" style="width: 410px"><a href="http://www.matthewtmead.com/blog/wp-content/uploads/crccard.jpg"><img class="size-full wp-image-84" title="CRC Card" src="http://www.matthewtmead.com/blog/wp-content/uploads/crccard.jpg" alt="CRC Card" width="400" height="300" /></a><p class="wp-caption-text">CRC Card</p></div>
<p>I like the smaller 3&#8243;x5&#8243; cards because you want to be constrained by space. If you write your class responsibility (typically captured as bullets) and you find that you are running out of room on your card because it is requiring too many bullets, you have already identified that you are likely violating the <a title="SRP" href="http://www.matthewtmead.com/blog/?p=7" target="_self">SRP</a> and you need to break the class up into separate classes or at least rethink your design. If you run out of space for your collaborations, you also likely have an issue.</p>
<p>I like to arrange the cards physically on a table so they are arranged close to their collaborators. The process is typically done with a pair or group of developers and involves a lot of discussion as the cards are created and modified. The cards are a jumpstart mechaims, and like many other artifacts in an agile project, they will be discarded and the software will take on a life of its own.</p>
<hr />
<p><small>© admin for <a href="http://www.matthewtmead.com/blog">Matthew T. Mead</a>, 2008. |
<a href="http://www.matthewtmead.com/blog/?p=74">Permalink</a> |
<a href="http://www.matthewtmead.com/blog/?p=74#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.matthewtmead.com/blog/?p=74&title=CRC Cards, Simple Yet Powerful">del.icio.us</a>
<br/>
Post tags: <a href="http://www.matthewtmead.com/blog/?tag=agile" rel="tag">Agile</a>, <a href="http://www.matthewtmead.com/blog/?tag=code-quality" rel="tag">Code Quality</a>, <a href="http://www.matthewtmead.com/blog/?tag=crc" rel="tag">CRC</a>, <a href="http://www.matthewtmead.com/blog/?tag=redpoint" rel="tag">Redpoint</a>, <a href="http://www.matthewtmead.com/blog/?tag=tdd" rel="tag">TDD</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://www.matthewtmead.com/blog/?feed=rss2&amp;p=74</wfw:commentRss>
		</item>
	</channel>
</rss>
