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

<channel>
	<title>Lumenovis &#187; Software Development</title>
	<atom:link href="http://lumenovis.com/category/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://lumenovis.com</link>
	<description>Technology Consulting and Software Development</description>
	<lastBuildDate>Mon, 03 Jan 2011 18:13:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Software platform trends</title>
		<link>http://lumenovis.com/2010/12/23/software-platform-trends/</link>
		<comments>http://lumenovis.com/2010/12/23/software-platform-trends/#comments</comments>
		<pubDate>Fri, 24 Dec 2010 03:55:12 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=245</guid>
		<description><![CDATA[Software language usage]]></description>
			<content:encoded><![CDATA[<p>Interesting perspective on where the action is from a software development platform standpoint.</p>
<p><a href="http://www.eweek.com/c/a/Application-Development/Java-C-C-Top-18-Programming-Languages-for-2011-480790/?kc=EWKNLBOE12242010FEA1" target="_blank">http://www.eweek.com/c/a/Application-Development/Java-C-C-Top-18-Programming-Languages-for-2011-480790/?kc=EWKNLBOE12242010FEA1</a></p>
<p>I&#8217;m excited to see the number of new platforms that aim to simplify software development.  Seriously, the biggest language advance over the last 20-30 years (since C/C++ days) may have been virtual machines with garbage collection.  Useful, but certainly not earth-shattering.  True, there have been major improvements in productivity now that app servers and open source libraries provide most of the &#8220;plumbing&#8221; for free (or close to it), but the act of writing a program using basic language syntax is still pretty primitive and prone to error.  I&#8217;m excited to explore the new languages, and I look forward to radical improvements in productivity and quality over the next decade.</p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2010/12/23/software-platform-trends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protecting against attack</title>
		<link>http://lumenovis.com/2010/11/19/protecting-against-attack/</link>
		<comments>http://lumenovis.com/2010/11/19/protecting-against-attack/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 22:47:06 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[vulnerability]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=234</guid>
		<description><![CDATA[The web is a hostile place.  There are no real governing and policing bodies protecting &#8220;good citizens&#8221;.  There are no borders.  There are lots of bad but very clever people trying to exploit the good citizens.  The (current) underlying protocols (TCP/IP and HTTP) provide little in the way of protection but offer many attack vectors. [...]]]></description>
			<content:encoded><![CDATA[<p>The web is a hostile place.  There are no real governing and policing bodies protecting &#8220;good citizens&#8221;.  There are no borders.  There are lots of bad but very clever people trying to exploit the good citizens.  The (current) underlying protocols (TCP/IP and HTTP) provide little in the way of protection but offer many attack vectors.  In the end, it&#8217;s up to each site to largely protect itself.</p>
<p>It&#8217;s not easy, even when you&#8217;re aware of the typical vulnerabilities and diligent about securing against them.  Recently I was involved in a project in which an attack vector was accidentally left wide open through a one line oversight in a Grails application.  Grails has excellent built-in protections against attach vectors such as XSS (Cross-Site Scripting) and SQL injection- assuming you actually take advantage of them.  In this case, our team had enabled XSS protection on pages via the &#8220;render as HTML&#8221; global configuration- this setting forces all variables written to the HTML page via GSP to be encoded as HTML.  Unfortunately, we were also making heavy use of taglibs (which are not affected by the global setting), and in one taglib we failed to manually encodeAsHtml() a single parameter which was subsequently exploited when the site was penetration tested.</p>
<p>One hole.  Busted.</p>
<p>Moral of the story:</p>
<p>- Be very familiar with ALL common (and hopefully some of the uncommon) web vulnerabilities.  A good list can be found here:  <a href="http://www.owasp.org/index.php/Top_10_2007" target="_blank">http://www.owasp.org/index.php/Top_10_2007</a>.</p>
<p>- Leverage best practices in software development: code reviews, TDD, vulnerability testing, etc.</p>
<p>- Think like a hacker: try to crack your own site.</p>
<p>- If you&#8217;re developing a site with critical financial or privacy data, spend the money to have high quality independant vulnerability tests performed.</p>
<p>I&#8217;ll be adding more security best practices and lessons learned over the coming months.</p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2010/11/19/protecting-against-attack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test Driven Development</title>
		<link>http://lumenovis.com/2010/10/14/test-driven-development/</link>
		<comments>http://lumenovis.com/2010/10/14/test-driven-development/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 21:10:48 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[sdlc]]></category>
		<category><![CDATA[software testing]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=230</guid>
		<description><![CDATA[Test driven development to the rescue!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on a large (multi-quarter) project for a large telecommunications client to produce a very stable and high-performing communications middleware component.  Throughout the project I&#8217;ve been a big advocate of test driven development (TDD), and as we approach the end of the project our decision to adopt TDD practices is paying off on a daily basis.  I&#8217;ve already lost count of the number of times our automated testing has caught &#8220;oops&#8221; bugs resulting from unintended consequences of unrelated code changes and bug fixes.  I wish I would have tracked the time, but my guess is we&#8217;ve saved ourselves 3-6 man months of painful debugging vs. perhaps a total of a couple of man weeks of test case development.   A multi-month savings, even on a multi-man-year project, is no trivial thing.  As an added bonus, I&#8217;m very confident that our release 1 product will be far higher quality than it would have been without a TDD approach.</p>
<p>Test early.  Test often.  Be happy.</p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2010/10/14/test-driven-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outages in 5 minutes or less</title>
		<link>http://lumenovis.com/2010/10/04/outages-in-5-minutes-or-less/</link>
		<comments>http://lumenovis.com/2010/10/04/outages-in-5-minutes-or-less/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 22:15:55 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Outage resolution]]></category>
		<category><![CDATA[Reliability]]></category>
		<category><![CDATA[Stability]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=208</guid>
		<description><![CDATA[How to design systems for rapid outage resolution.]]></description>
			<content:encoded><![CDATA[<p>One of my primary architecture principles when designing mission-critical real-time systems is that the time from a user-affecting outage to resolution should be 5 minutes or less.  Of course we&#8217;d like there to never be a customer affecting outage, but that impossible- the best we can do (via redundancy, caching, N+1, etc.) is seriously minimize the occurrences of outages or the impact to the customer.  But at some point there will be an outage and customers will be affected, so we need to design rapid recovery into the architecture.</p>
<p>Getting to &lt;5 minutes is not a trivial task; in this time, we need to:</p>
<ol>
<li>DETECT the outage</li>
<li>ALERT personnel (assuming there is no automated recovery capability in place)</li>
<li>Allow time for personnel to DIAGNOSE the cause of the issue.</li>
<li>FIX the problem through some set of corrective actions.</li>
<li>VERIFY the system works properly.</li>
</ol>
<p>Clearly there is no time to waste, so each step has to be traversed as efficiently as possible.  Here are some general best practices on how to reach this goal:</p>
<p>1)  DETECT:  the system needs to have both internal (push) and external (pull, polling) monitoring in place.  The internal checks need to be tuned to identify any condition (usually exceptions) that indicate that the system is sick or about to be sick.  The system needs a way to push this information to a monitoring console or alerting system.  Likewise, an independent, continuously polling/monitoring system should be in place that sends test events or transactions through the system every few seconds; this external monitor also needs a pay to post alerts.</p>
<p>Time: &lt; 5 seconds after the issue</p>
<p>2) ALERT: when the system detects a potentially customer affecting issue, an alert must immediately be sent to support personnel.  In the cases where there is a 24&#215;7 NOC, this should not be an issue (though some thought needs to be put into preventing alert-storms).  Where there is no NOC in place, paging, email, SMS, automated call, etc. should be explored, and additional tools will need to be developed for remote trouble resolution.</p>
<p>Time: 30-90 seconds</p>
<p>3) DIAGNOSE: this is usually the &#8220;make or break&#8221; step- the responding technician needs to have all of the relevant information &#8220;at their fingertips&#8221;, with perhaps a small amount of digging, in order to quickly identify the cause of the problem.  Logs typically don&#8217;t cut it&#8230; by the time the technician has identified the affected server, logged into the host, and reviewed (potentially millions of lines of) the logs, the five minute window will long have been history.  Don&#8217;t get me wrong- logs are great for debugging (when you have time), forensics, and as a last resort, but they should NOT be the first line of defense for time-critical outages.</p>
<p>The best tool I&#8217;ve used/experienced is a lightweight, extensible central monitoring console.  Typically a small webapp, the console will display the status of all running servers and applications using the appropriate APIs for the environment in question (for Unix/Java, SNMP + JMX is a good start).  These APIs can be used to pull information and effect changes as needed.  Besides environmental data, business data is often useful to have as well (e.g. number of &#8220;sessions&#8221; in progress, etc).  If you need to push information to console, consider using publish/subscribe (e.g. JMS).  Finally, the console can also provide access to recent logs, and should certainly provide access to recent errors.</p>
<p>Ideally, the technician should be able to look at the console and immediately (color, etc) see which host / app is in distress and then drill down into that host / app to view additional diagnostics that should quickly identify the root cause (which may, in some cases, be in a downstream component).</p>
<p>Time: 60-120 seconds</p>
<p>4)  FIX:  at this point the action(s) required should be clear; now the only trick is making sure the technicians have the tools and procedures required to take the actions.  More often than not, &#8220;fix&#8221; entails bouncing and app or a server.  In some cases it&#8217;s more complex- perhaps there&#8217;s data corruption that needs to be cleaned up, for example.  Regardless, wherever possible, have scripts that can be executed safely but easily, perhaps even from the monitoring console.  This increases speed and removes opportunities for mistakes.</p>
<p>A key success factor here is &#8220;defensive&#8221; component design.  If your system is multiple component executables (e.g. app server and database), make sure that (a) the failure of any one component doesn&#8217;t cascade through the entire system, and (b) that each component will automatically &#8220;reconnect&#8221; to the failed component once it&#8217;s fixed.  The last thing you want to do is have to shut down the entire system and execute a slow sequential startup just because a single component failed.</p>
<p>Time: 60-90 seconds</p>
<p>5) VERIFY: once the fix has been applied, verify the system now works as expected and that customers are not being impacted; if there is still a problem, go back to #3.</p>
<p>The list above is admittedly high-level- each system has it&#8217;s own challenges and complexities that need to be factored in.  There are also many commercial and open-source third party components that either should or must be taken into account.  But regardless of the final toolset the five above steps should provide a framework and acid-test for the integrated design.</p>
<p>A final note: effective outage resolution capabilities, like most RASS (Reliability Availability, Scalability and Security) elements, fall into the &#8220;don&#8217;t try this at home&#8221; category&#8230; there is no substitute for hard-won battle scars earned from developing and operating similar systems.  Do what you can to get someone like that on your team, at the very least in a coaching role.</p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2010/10/04/outages-in-5-minutes-or-less/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C + C = A</title>
		<link>http://lumenovis.com/2010/07/09/c-c-a/</link>
		<comments>http://lumenovis.com/2010/07/09/c-c-a/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 22:22:33 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[talent]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=177</guid>
		<description><![CDATA[It&#8217;s said that one definition of insanity is doing the same thing over and over but expecting different results.  By that definition most of us are probably a little insane, and most of the businesses I&#8217;ve worked with even more so.  I&#8217;m going to spend some time over the next few postings discussing some of [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s said that one definition of insanity is doing the same thing over and over but expecting different results.  By that definition most of us are probably a little insane, and most of the businesses I&#8217;ve worked with even more so.  I&#8217;m going to spend some time over the next few postings discussing some of these tried and true, repeatable methods for underperforming or failing.  The first installment:  C + C = A.</p>
<p>If you&#8217;ve been in the technology field for any length of time, you witnessed some variation of this logic:</p>
<ol>
<li>The company has a budget X for a certain project/product.</li>
<li>We need as many people as we can get for that budget.</li>
<li>Let&#8217;s avoid top talent and instead target the market average (or below) to get as many people as possible.</li>
<li>Let&#8217;s apply the latest hot methodology to produce a great product (a topic for another day).</li>
</ol>
<p>In other words, I&#8217;m going to create a team of C players but expect A results.  C + C = A.</p>
<p>The major breakdown here is, of course, #2: the assumption that quantity begets productivity.  While that is true in some cases (you can&#8217;t build a massive, multi-million-lines-of-code enterprise system in a reasonable timeframe with 2-3 sharp developers), it is not true when you measure across quality levels.  Ten C-players will probably not out-produce 5 A-players.  In fact, they might not even outproduce 1 A-player.  If the problem is complex, the C-players may never deliver an acceptable solution.</p>
<p>I&#8217;ve seen many variations of these cases play out in the real world.  I&#8217;ve seen a large development team shed 1/3 of it&#8217;s (bottom ranking) staff and improve productivity by 50% or more.  I&#8217;ve seen a small group of A-players produce an order of magnitude (yes, 10X) more features in a given time period than a larger group of C-players.  But most of all, I&#8217;ve seen teams of C players produce lots and lots of C results, followed by inevitable surprise and confusion at the management level.</p>
<p>So if it&#8217;s clear that, in many or most cases, net productivity improves when you go up-talent, why don&#8217;t companies do so?  In my experience, the number one reason is concerns about cost (actual or perceived).  Paying 20-40% more for an A player (vs. a C player) seems prohibitive on a person-by-person basis, but once you look at the ratio of productivity to cost at the team level, it quickly becomes apparent that going up-talent is probably a net cost savings.  If I had a budget of X, I&#8217;d much rather hire 6 A players than 10 C players, knowing full well that I&#8217;ll get a 2-3X productivity boost even with fewer bodies.</p>
<p>But management (especially CFOs and financial types) generally can&#8217;t get past the cost of the individual resources.  Large companies are often driven by the CFOs, who are by and large focussed on raising the top line and reducing the bottom line on a quarterly or annual basis; in their quest to squeeze out all costs, they get a little gassy when they see high-dollar individuals on the payroll.  In short they see top-performers as an expense item, and not as an investment in future success.  Great for the short run; not so good if you want to be competitive 3-5 years from now.</p>
<p>A more reasonable excuse is finding that talent- there are not many A players on the market, and the companies that have them keep them.  But it&#8217;s not impossible to move up-talent over time.  Companies that are brutally honest in their evaluations and ones that refuse to keep low-talent can move up-talent over time.  I believe it&#8217;s possible to bump up a full grade level within a year or two with some firm commitment.  But again, this is tough.  Companies and made of people, and people live by relationships, and relationships make it sometimes hard to do what is best for the team.  Likewise companies (and their management) like to think they&#8217;ve done a great job building a great team (like the old adage about 70% of people thinking of themselves as above average)&#8230; deep down many of these managers are resistant to going up-talent.</p>
<p>Another reason is &#8220;thrashing&#8221;, which results when C players produce a faulty, leaky system, and then massive amounts of manpower have to be thrown at the problems to keep them at bay.  In this case you are caught between a rock and hard place- you can&#8217;t shed too many bodies since you simply need numbers to spread them out over all the problems.  Once you&#8217;re at this point, good luck.  I&#8217;m sure you&#8217;ll spend many painful sleepless nights wishing you (or your predecessor) had invested in A players and avoided the problems altogether.</p>
<p>I&#8217;m running out of time for this entry, but suffice it to say that there are more reasons for the perpetuation of this insanity, and I see no evidence that it will stop (in aggregate).  That said, there are plenty of exceptions to the rule- teams that have invested in A-talent and are reaping the benefit; teams that are working hard to move up-talent; etc.  Kudos to these teams.  And if you&#8217;re on the wrong side of the insanity, just know that it&#8217;s never too late start moving up-talent.</p>
<p>By the way, there is a variation of this myth known as outsourcing, but we&#8217;ll hit that another day.</p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2010/07/09/c-c-a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails ROCKS!</title>
		<link>http://lumenovis.com/2010/03/24/grails-rocks/</link>
		<comments>http://lumenovis.com/2010/03/24/grails-rocks/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 04:38:20 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=170</guid>
		<description><![CDATA[Grails development.]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been pretty heads down for the last year cranking out a number of enterprise Java, service provider, and iPhone projects.  It&#8217;s been a hugely productive period and I&#8217;ve both taught and learned a great deal.  One of the highlights, though, has to be diving into the Grails web application development framework.  If you&#8217;re not familiar with Grails, it&#8217;s a &#8220;convention over configuration&#8221; framework (much like Ruby on Rails) that sits on top of Spring and Hibernate and leverages Groovy to make development faster and easier.  It was a bit of a steep learning curve (probably because I refused to read any of the great books out there (e.g. Grails in Action) and instead tried to learn on the go), but now that I&#8217;m up to speed I have to say that it&#8217;s made web development fun again.  Gone are the hours and hours futzing with build configurations and XML files.  Gone are the days of writing boilerplate code to transfer data from the brower to the database and back.  With Grails, most of the tedious stuff is done &#8220;automagically&#8221; and you can focus on cranking out your app.  My unscientific estimate is that I&#8217;m producing features 3-5x faster with Grails than I can with Struts 2 or Spring MVC.  Seriously- it&#8217;s that good.</p>
<p>Here&#8217;s an example.  I&#8217;m finishing on an app for a nationwide company that decided a couple of weeks before the portal was to go live that it needed to support co-branding for all of their clients- basically, display a custom logo depending on who was logged in.  The right answer should have been &#8220;No!&#8221; since we were short on time and had limited resources available, but I had a hunch that Grails would make it easy enough to take on despite the risk.  So I branched the code (just in case), started a timer (literally) and dove into it.  I developed a &#8220;Brand&#8221; table that would store name, styles, and logos.  I developed full featured CRUD pages for admins to add, change, and delete brands.  I added the Brand section to the Admin section of the portal.  I modified the portal pages to show the brand logos when available.  And I developed a servlet (&#8220;controller&#8221; in Grails) to serve up images out of the database.  Grand total:  35 minutes and maybe 50 lines of handwritten code.  (To be fair, I should also add another 30-60 minutes for automated test development and testing.)  My guess is that this would have been a couple of days in any other framework.</p>
<p>If you&#8217;re a Java web developer do yourself a favor and have a look.  I think you won&#8217;t be disappointed.</p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2010/03/24/grails-rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Responder Application</title>
		<link>http://lumenovis.com/2009/05/14/first-responder-application/</link>
		<comments>http://lumenovis.com/2009/05/14/first-responder-application/#comments</comments>
		<pubDate>Thu, 14 May 2009 20:43:07 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[first responder]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=147</guid>
		<description><![CDATA[I recently worked with on an interesting application for first responders.  This app allows volunteer firemen (for example) to announce their location and availability with the click of a button upon receipt of an alarm.  Their peers and leaders can then see updated location and response information in near realtime, allowing for more effective decision [...]]]></description>
			<content:encoded><![CDATA[<p>I recently worked with on an interesting application for first responders.  This app allows volunteer firemen (for example) to announce their location and availability with the click of a button upon receipt of an alarm.  Their peers and leaders can then see updated location and response information in near realtime, allowing for more effective decision making.  The app makes heavy use of REST polling and messaging plus mapping via Google Maps and has hooks for realtime communications.</p>
<p><a href="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082048.png"><img class="alignnone size-medium wp-image-148" title="screenshot-20090512-082048" src="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082048-200x300.png" alt="" width="200" height="300" /></a> <a href="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082107.png"><img class="alignnone size-medium wp-image-149" title="screenshot-20090512-082107" src="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082107-200x300.png" alt="" width="200" height="300" /></a> <a href="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082130.png"><img class="alignnone size-medium wp-image-150" title="screenshot-20090512-082130" src="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082130-200x300.png" alt="" width="200" height="300" /></a> <a href="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082137.png"><img class="alignnone size-medium wp-image-151" title="screenshot-20090512-082137" src="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090512-082137-200x300.png" alt="" width="200" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2009/05/14/first-responder-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KiddyBase 1.0</title>
		<link>http://lumenovis.com/2009/03/23/kiddybase-10/</link>
		<comments>http://lumenovis.com/2009/03/23/kiddybase-10/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 17:40:34 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[kiddybase]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=136</guid>
		<description><![CDATA[I just wrapped up version 1 of KiddyBase, the electronic baby book for iPhone. The idea came to me after watching my wife agonize to remember what the kids had said or done over the past week/month. I looked around and found a few height/weight trackers, but no comprehensive journal to track the baby&#8217;s milestones. [...]]]></description>
			<content:encoded><![CDATA[<p>I just wrapped up version 1 of KiddyBase, the electronic baby book for iPhone.  The idea came to me after watching my wife agonize to remember what the kids had said or done over the past week/month.  I looked around and found a few height/weight trackers, but no comprehensive journal to track the baby&#8217;s milestones.  Thus was KiddyBase born.</p>
<p>You can read more about the app in the product section.  Here are some additional screenshots:<br />
<a href="http://lumenovis.com/wp-content/uploads/2009/03/screenshot-20090318-223550.jpg"><img class="alignnone size-medium wp-image-127" title="screenshot-20090318-223550" src="http://lumenovis.com/wp-content/uploads/2009/03/screenshot-20090318-223550-200x300.jpg" alt="" width="200" height="300" /></a> <img class="alignnone size-medium wp-image-143" title="screenshot-20090624-125858" src="http://lumenovis.com/wp-content/uploads/2009/06/screenshot-20090624-125858-200x300.png" alt="" width="200" height="300" /> <a href="http://lumenovis.com/wp-content/uploads/2009/03/screenshot-20090318-224140.jpg"><img class="alignnone size-medium wp-image-138" title="screenshot-20090318-224140" src="http://lumenovis.com/wp-content/uploads/2009/03/screenshot-20090318-224140-200x300.jpg" alt="" width="200" height="300" /></a> <a href="http://lumenovis.com/wp-content/uploads/2009/03/screenshot-20090318-224211.jpg"><img class="alignnone size-medium wp-image-139" title="screenshot-20090318-224211" src="http://lumenovis.com/wp-content/uploads/2009/03/screenshot-20090318-224211-200x300.jpg" alt="" width="200" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2009/03/23/kiddybase-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Conversion Application</title>
		<link>http://lumenovis.com/2009/02/25/iphone-conversion-application/</link>
		<comments>http://lumenovis.com/2009/02/25/iphone-conversion-application/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 18:14:47 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=88</guid>
		<description><![CDATA[I was recently contracted to develop a conversion application for the iPhone called &#8220;All in One Converter&#8221;, with a focus on business users. This was a fun project in that: I chose to develop a generalized XML processing engine that would allow the creation and deployment of new conversion sets on the fly. we developed [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently contracted to develop a conversion application for the iPhone called &#8220;All in One Converter&#8221;, with a focus on business users.  This was a fun project in that:</p>
<ol>
<li> I chose to develop a generalized XML processing engine that would allow the creation and deployment of new conversion sets on the fly.</li>
<li> we developed a proxy server to feed currency updates</li>
<li> I developed a full calculator stack that runs inline with the converter</li>
<li> I created a flexible &#8220;favorites&#8221; or bookmarking mechanism</li>
<li> we &#8220;invented&#8221; the Zone Scheduler, which helps schedule meeting across time zones</li>
</ol>
<p>Attached are some screenshots.  Should be in the iTunes store shortly.</p>
<div id="attachment_91" class="wp-caption alignnone" style="width: 210px"><a href="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112027.png"><img class="size-medium wp-image-91" title="screenshot-20090225-112027" src="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112027-200x300.png" alt="Conversion View" width="200" height="300" /></a><p class="wp-caption-text">Conversion View</p></div>
<div id="attachment_92" class="wp-caption alignnone" style="width: 210px"><a href="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112033.png"><img class="size-medium wp-image-92" title="screenshot-20090225-112033" src="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112033-200x300.png" alt="Calculator View" width="200" height="300" /></a><p class="wp-caption-text">Calculator View</p></div>
<div id="attachment_93" class="wp-caption alignnone" style="width: 210px"><a href="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112143.png"><img class="size-medium wp-image-93" title="screenshot-20090225-112143" src="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112143-200x300.png" alt="Currency View" width="200" height="300" /></a><p class="wp-caption-text">Currency View</p></div>
<div id="attachment_94" class="wp-caption alignnone" style="width: 210px"><a href="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112253.png"><img class="size-medium wp-image-94" title="screenshot-20090225-112253" src="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-112253-200x300.png" alt="Zone Scheduler View" width="200" height="300" /></a><p class="wp-caption-text">Zone Scheduler View</p></div>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2009/02/25/iphone-conversion-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Directory Search Application</title>
		<link>http://lumenovis.com/2009/02/10/iphone-directory-search-application/</link>
		<comments>http://lumenovis.com/2009/02/10/iphone-directory-search-application/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 20:36:58 +0000</pubDate>
		<dc:creator>Dan</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://lumenovis.com/?p=98</guid>
		<description><![CDATA[I just finished a contract app called &#8220;BizFinder&#8221; that searches a set of business directories based on the location of the user. This app required extensive XML processing and a number of REST operations, integration with Google Maps (both remote server and local app), and use of the onboard GPS capability. This is version 1- [...]]]></description>
			<content:encoded><![CDATA[<p>I just finished a contract app called &#8220;BizFinder&#8221; that searches a set of business directories based on the location of the user.  This app required extensive XML processing and a number of REST operations, integration with Google Maps (both remote server and local app), and use of the onboard GPS capability.</p>
<p>This is version 1- version 2 will have a host of new features and user friendly options.</p>
<p>Here are some screen shots (more to follow):</p>
<div id="attachment_114" class="wp-caption alignnone" style="width: 210px"><a href="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-113209.png"><img class="size-medium wp-image-114" title="screenshot-20090225-113209" src="http://lumenovis.com/wp-content/uploads/2009/02/screenshot-20090225-113209-200x300.png" alt="Search Page" width="200" height="300" /></a><p class="wp-caption-text">Search Page</p></div>
]]></content:encoded>
			<wfw:commentRss>http://lumenovis.com/2009/02/10/iphone-directory-search-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

