<?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>End-User Development</title>
	<atom:link href="http://zipxap.com/kurtsblog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://zipxap.com/kurtsblog</link>
	<description>Discussing current trends in End-User Development, and software development in general..</description>
	<lastBuildDate>Sun, 27 Sep 2009 19:37:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Popularity of Web Application Frameworks September 27, 2009</title>
		<link>http://zipxap.com/kurtsblog/?p=65</link>
		<comments>http://zipxap.com/kurtsblog/?p=65#comments</comments>
		<pubDate>Sun, 27 Sep 2009 15:40:18 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Web Framework Comparison]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=65</guid>
		<description><![CDATA[The following is a rundown of the adoption rates of various web application frameworks by programming language, according to Indeed.  Keep in mind that there are many other considerations, besides popularity, when choosing a framework. Framework feature sets vary dramatically and this is just as important as popularity.  This article simply displays the adoption rates [...]]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">The following is a rundown of the adoption rates of various web application frameworks by programming language, according to Indeed.  Keep in mind that there are many other considerations, besides popularity, when choosing a framework. Framework feature sets vary dramatically and this is just as important as popularity.  This article simply displays the adoption rates (according to indeed) of the various frameworks listed in the Wikipedia <a href="http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks">Comparison of web frameworks</a> article and gives some brief summary information.  In some cases there are so many competitors that it takes some effort to narrow them down.  The intermediate graphs (prior to narrowing down the number of items on each graph) are not shown.  To further narrow down the criteria, I will only look at frameworks that produce web based output that can be viewed without a plugin (thus Flash and Silverlight frameworks will be ignored for this article).  Lastly, there are some framework names, such as &#8220;PHP Work&#8221; (I mean really, you&#8217;re going to name your framework THAT?!?!  Ambiguous names are a Microsoft FUD trick to hide a technology&#8217;s unpopularity until it&#8217;s marketing department convinces the world that it is taking-off), are too generic to be search on and so thus are ignored.  Lastly, this article then pits the winner from each category to determine an overall winner.</div>
<div class="mceTemp"><strong>PHP Web Frameworks:</strong></div>
<div class="mceTemp">
<div id="attachment_68" class="wp-caption alignnone" style="width: 553px"><a href="http://www.indeed.com/jobtrends?q=drupal+and+php%2C+cakephp%2C+codeigniter&amp;l="><img class="size-full wp-image-68" title="PHP Web Frameworks" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/php1.png" alt="PHP Web Frameworks" width="543" height="304" /></a><p class="wp-caption-text">PHP Web Frameworks</p></div>
</div>
<p>PHP Frameworks: Agavi, Akelos, CakePHP, DooPHP, CodeIgniter, Drupal, Elixon, jFramework, Helix, Horde, eZ Components, FUSE, Kohana, KumbiaPHP, LISA, Orinoco, PEAR, PHP For Applications, PHP Work, Qcodo, Rapyd Framework, Samstyle, Satya Portal Pack, Seagull, SilverStripe, Simplicity, Solar, SPIP, Symphony and CMS, Tekuna, Tigermouse, Vork, Wigbi,Yii, Zend,  and Zoop.<br />
PHP Observations: Joomla is not listed.  Is this not considered a general-purpose web framework?  PHP Work and PHP For Applications are ignored.<br />
PHP Winners:  Drupal, cakephp, and CodeIgniter.  Nothing else is shown on the graph because there are no close fourth-place PHP frameworks.</p>
<p><strong>Java Web Frameworks:</strong></p>
<div id="attachment_70" class="wp-caption alignnone" style="width: 553px"><a href="http://www.indeed.com/jobtrends?q=Apache+and+Wicket+and+Java%2C+%22Google+Web+Toolkit%22+or+GWT+and+Java%2C+%22JBoss+Seam%22+and+Java%2C+Tapestry+and+Java&amp;l="><img class="size-full wp-image-70" title="java" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/java1.png" alt="Java Web Frameworks" width="543" height="304" /></a><p class="wp-caption-text">Java Web Frameworks</p></div>
<p>Java Frameworks: Apache Cocoon, Apache Struts, Apache Wicket, AppFuse, Aranea, Eclipse RAP, Google Web Toolkit, Hamlets, ItsNat, IT Mill Toolkit, JavaServer Faces, JBoss Seam, ManyDesigns Portofino, OpenLaszlo, OpenXava, pirka, RIFE, Shale, Sling, SmartClient, Sofia, Spring, Stripes, Tapestry, ThinWire, Vaadin, WebObjects, WebWork, ZK, and ztemplates.<br />
Java Winners: GWT, Tapestry, JBoss Seam, Wicket.</p>
<p><strong>Python Web Frameworks:</strong></p>
<div id="attachment_66" class="wp-caption alignnone" style="width: 553px"><a href="http://www.indeed.com/jobtrends?q=CherryPy%2C+CubicWeb%2C+Django%2C+Grok%2C+Pyjamas%2C+Pylons%2C+TurboGears%2C+web2py%2C+Zope&amp;l="><img class="size-full wp-image-66" title="python" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/python.png" alt="Python Web Frameworks" width="543" height="304" /></a><p class="wp-caption-text">Python Web Frameworks</p></div>
<p>Python Frameworks: CherryPy, CubicWeb, Django, Grok, Pyjamas, Pylons, TurboGears, web2py, and Zope.<br />
Python Winner(s):  Django</p>
<p><strong>Other Web Frameworks:</strong></p>
<p>The other category includes languages other than PHP, Java, and Python.  Flex framework was excluded because we are only interested in frameworks that deal with HTML/Javascript.</p>
<div id="attachment_76" class="wp-caption alignnone" style="width: 553px"><img class="size-full wp-image-76" title="other" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/other.png" alt="Other Web Frameworks" width="543" height="304" /><p class="wp-caption-text">Other Web Frameworks</p></div>
<p>Other Frameworks: AIDA/Web, Apache Click, ASP.NET MVC, Axiom Stack, BFC, Camping, Catalyst, ColdSpring, Csla, CppCMS,DotNetNuke, Flex, Fusebox, Grails, Helma, Interchange, Kepler, Lift, Mason, Maypole, Mach-II, Merb, Midgard, Model-Glue, MonoRail, Morfik, Nitro, onTap, OpenACS, Orbit, Ruby on Rails, Seaside, Sinatra, Sproutcore, Wavemaker, and Wt.<br />
Other Winners: Ruby On Rails, Grails, ASP.NET MVC, and Mason (Perl).</p>
<p>Overall:</p>
<div id="attachment_77" class="wp-caption alignnone" style="width: 553px"><a href="http://www.indeed.com/jobtrends?q=Drupal+and+PHP%2C+CakePHP%2C+CodeIgniter%2C+Django+and+Python%2C+GWT%2C+Tapestry+and+Java%2C+JBoss+and+Seam+and+Java%2C++Wicket+and+Java%2C+Ruby+on+Rails&amp;l="><img class="size-full wp-image-77" title="overall" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/overall1.png" alt="Overall Web Frameworks" width="543" height="304" /></a><p class="wp-caption-text">Overall Web Frameworks</p></div>
<p>Overall Winners: Ruby on Rails (by a wide margin), Drupal (PHP), GWT (Java)</p>
<p>If we remove our top three performers (Ruby on Rails, Drupal, and GWT) then we can see the remaining winners more clearly in our graph:</p>
<div id="attachment_82" class="wp-caption alignnone" style="width: 553px"><a href="http://www.indeed.com/jobtrends?q=CakePHP%2C+CodeIgniter%2C+Django+and+Python%2C+Tapestry+and+Java%2C+JBoss+and+Seam+and+Java%2C++Wicket+and+Java%2C+grails&amp;l="><img class="size-full wp-image-82" title="Overall Web Frameworks without Top Three Performers" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/overallwithoutror1.png" alt="Overall Web Frameworks without Top Three Performers" width="543" height="304" /></a><p class="wp-caption-text">Overall Web Frameworks without Top Three Performers</p></div>
<p>The remaining popular web frameworks are, in order of popularity: Django (Python), Grails, CakePHP, Tapestry, JBoss Seam, Wicket, and CodeIgniter.</p>
<p>Of the most popular, the following appear to be growing quickly in popularity: Drupal, GWT, Grails, Django,  CakePHP, CodeIgniter, and Ruby on Rails.</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=65</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is the most popular IDE, regardless of language?</title>
		<link>http://zipxap.com/kurtsblog/?p=56</link>
		<comments>http://zipxap.com/kurtsblog/?p=56#comments</comments>
		<pubDate>Sat, 19 Sep 2009 02:26:55 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=56</guid>
		<description><![CDATA[What is the most popular IDE, regardless of language?  That is a tough question to ask for a number of reasons.  For one, there are lots of open source IDEs that may have a tremendous home-user backing, but not a good backing in the business world.  Also, Eclipse is a platform, and as such it [...]]]></description>
			<content:encoded><![CDATA[<p>What is the most popular IDE, regardless of language?  That is a tough question to ask for a number of reasons.  For one, there are lots of open source IDEs that may have a tremendous home-user backing, but not a good backing in the business world.  Also, Eclipse is a platform, and as such it goes by many names.  You add a sliver of usage here and a sliver of usage there and it starts to add up.  Next, I&#8217;m not an SAP expert, so maybe there is some great IDE in that universe that can give our heavy hitters (below) a run for their money.</p>
<p>I like Indeed because it aggregates job postings and resumes from many sources.  I think it does a better job at filtering noise than Google trends.</p>
<p>Anyhow, a picture tells a thousand words.  Looking at the graph below you can see that  Visual Studio reigns supreme.  This is because of its virtual monopoly on .net language development (Yes, I tried many different combinations of IDEs in the graph below, but I remove the ones that don&#8217;t register at least a little blip).  VS is the gatekeeper of .net!  Eclipse itself (without Aptana, Flex Studio, IRAD, etc) amasses a huge second place victory.  Looks like Zend might be an up-and-comer.  With all of the PHP developers in this world, it sure seems like there should be a dominant PHP IDE.</p>
<p>Surprise: Low Netbeans numbers doesn&#8217;t surprise me only because I&#8217;ve seen it before.  But as a frequent user I&#8217;m always amazed that this terrific product doesn&#8217;t do better.</p>
<p><a href="http://www.indeed.com/jobtrends?q=visual+studio%2Cnetbeans%2C+eclipse+or+%22flex+studio%22+or+aptana%2C+delphi+and+database%2Czend&amp;l="><img class="alignnone size-full wp-image-61" title="IDE Comparison" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/09/idecomparison21.jpg" alt="IDE Comparison" width="543" height="304" /></a></p>
<p>Ok, this is really boring since there are no real competitors.  When I first ran these numbers, Delphi showed up as a major player.  The problem is that it is also a city, so it was skewing my statistics.  So I qualified it as &#8220;Delphi and Database&#8221;, since its primarily used for database applications.  Once I did that, Delphi became one of the little guys.</p>
<p>In summary, happy coding in whatever IDE you choose!</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=56</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Universal Health Care in the United States</title>
		<link>http://zipxap.com/kurtsblog/?p=53</link>
		<comments>http://zipxap.com/kurtsblog/?p=53#comments</comments>
		<pubDate>Sat, 15 Aug 2009 16:16:32 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=53</guid>
		<description><![CDATA[Sorry tech aficionados, I have to take a time out from technology and speak my mind about universal health care in the United States.  It’s important that President Obama first address these issues before pushing universal health care.
 
1)      Taxes are out of control.  First, each American pays Federal and state income taxes and sales taxes.  [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman; font-size: small;">Sorry tech aficionados, I have to take a time out from technology and speak my mind about universal health care in the United States.<span style="mso-spacerun: yes;">  </span>It’s important that President Obama first address these issues before pushing universal health care.</span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman; font-size: small;"> </span></p>
<p class="MsoNormal" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1; tab-stops: list .5in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">1)</span><span style="font-family: &quot;Times New Roman&quot;;">      </span></span><span style="font-size: small;">Taxes are out of control.<span style="mso-spacerun: yes;">  </span>First, each American pays Federal and state income taxes and sales taxes.<span style="mso-spacerun: yes;">  </span>But what most people don’t consider is that corporations must recoup the money they pay in taxes by raising the cost of the goods and services the sell.<span style="mso-spacerun: yes;">  </span>This means that the end consumers ultimately pay the corporate taxes as well.<span style="mso-spacerun: yes;">  </span>Once you start adding up all these numbers, the average American pays anywhere between 60% and 75% of their money, depending on how it’s calculated, to government taxes.</span></span></p>
<p class="MsoNormal" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1; tab-stops: list .5in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">2)</span><span style="font-family: &quot;Times New Roman&quot;;">      </span></span><span style="font-size: small;">One of the main reasons why health care costs are out of control is because our legal system is out of control.<span style="mso-spacerun: yes;">  </span>If we hide these costs inside the federal budget, we mask the problem rather than fixing it.<span style="mso-spacerun: yes;">  </span>First FIX THE REAL PROBLEMS, then we can talk about federalizing health care.<span style="mso-spacerun: yes;">  </span>This problem is perpetuating itself because we keep voting lawyers into congress, and lawyers don’t seem to have a problem with all profits from every industry ultimately ending up in the hands of lawyers.</span></span></p>
<p class="MsoNormal" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1; tab-stops: list .5in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">3)</span><span style="font-family: &quot;Times New Roman&quot;;">      </span></span><span style="font-size: small;">Figure out how UHC is going to work by first fixing Medicare, Medicaid, and Social Security.<span style="mso-spacerun: yes;">  </span>I’ve seen different estimates for impending doom, but even the most optimistic forecasts for these programs don’t look good.<span style="mso-spacerun: yes;">  </span>It comes down to a fundamental reality of group collaboration.<span style="mso-spacerun: yes;">  </span>The full natural lifecycle of any entity is from struggle to success to bureaucracy to failure.<span style="mso-spacerun: yes;">  </span>No entity, whether it be corporate or government, is exempt from this natural evolution.<span style="mso-spacerun: yes;">  </span>I know there are companies that reinvent themselves and prolong their natural lifecycle, but all successful entities ultimately collapse under their own bureaucracy.<span style="mso-spacerun: yes;">  </span>What is the oldest standing government?<span style="mso-spacerun: yes;">  </span>We, as Americans, can stagger the damage caused by essential reinvention by following the example of our constitutional authors and placing as much power in state and local government as possible.<span style="mso-spacerun: yes;">  </span>Then we have state-by-state competition to sharpen the system.<span style="mso-spacerun: yes;">  </span>We have monopoly laws, but they can’t protect us from a federal monopoly.<span style="mso-spacerun: yes;">  </span>This is a fundamental flaw that will destroy us if we continue down this path.</span></span></p>
<p class="MsoNormal" style="text-indent: -0.25in; margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1; tab-stops: list .5in;"><span style="font-family: Times New Roman;"><span style="mso-list: Ignore;"><span style="font-size: small;">4)</span><span style="font-family: &quot;Times New Roman&quot;;">      </span></span><span style="font-size: small;">Historically, congress has proven to be the creators of knee-jerk regulation.<span style="mso-spacerun: yes;">  </span>This is why even our allies have strained relationships with the USA.<span style="mso-spacerun: yes;">  </span>Our foreign policies reverse themselves every time a new president enters office.<span style="mso-spacerun: yes;">  </span>Do you want your health care mandated by an institution that is going to reverse its policies on virtually everything the instant the public is sick of Democrat rule and votes a Republican majority back into office?</span></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman; font-size: small;"> </span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="font-family: Times New Roman; font-size: small;">Please, President Obama, fix fundamental problems first, then we can talk about universal health care.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=53</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Universal Data Entities a Necessary First Step towards Interchangeable Global Services</title>
		<link>http://zipxap.com/kurtsblog/?p=51</link>
		<comments>http://zipxap.com/kurtsblog/?p=51#comments</comments>
		<pubDate>Fri, 03 Jul 2009 22:26:08 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=51</guid>
		<description><![CDATA[
First, I want to plug Jonathan Sapir. A colleague pointed me to this gentleman while we were discussing End User Development. I read most of his blog entries on http://www.powerinthecloud.com and came to the conclusion that his description and thoughts on what he calls “Situational Applications” are remarkably similar to my own ideas. Amazing…

There’s lots [...]]]></description>
			<content:encoded><![CDATA[<p><!--[endif]--></p>
<p class="MsoNormal">First, I want to plug Jonathan Sapir.<span> </span>A colleague pointed me to this gentleman while we were discussing End User Development.<span> </span>I read most of his blog entries on <a href="http://www.powerinthecloud.com/">http://www.powerinthecloud.com</a> and came to the conclusion that his description and thoughts on what he calls “Situational Applications” are remarkably similar to my own ideas.<span> </span>Amazing…</p>
<p class="MsoNormal">
<p class="MsoNormal">There’s lots of smart people, including Jon, asserting that services are the future of software development.<span> </span>Jon says, &#8220;In the future, there won&#8217;t be such a thing as an application. Applications are artificial barriers. You just need services that you can synchronize.&#8221;<span> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">I think this viewpoint is MOSTLY correct, but its missing a key element.<span> </span>Currently, OOP has a blinding stranglehold on software development.<span> </span>OOP is a wonderful tool, but one of its key tenets may be holding us back.<span> </span>The problematic tenet is the integration of data and logic.<span> </span>The problem rears its ugly head when you begin to think of the world as an enormous collection of compatible services.<span> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">The problem is that data has a much broader application than logic does.<span> </span>For instance a Person data entity has much broader usefulness than any set of logic that is wrapped within it.<span> </span>The situation becomes worse when you consider that data objects are tied to their APIs/framework/technology stacks.<span> </span>If I create a Person object in Java, I can reuse it in .net.</p>
<p class="MsoNormal">
<p class="MsoNormal">I’ve put a lot of thought into Universal Data Entities over the years and I’ve come to the conclusion that data needs to finally make a clean break from its technological chains before we can finally realize the true productivity benefits of worldwide software reuse.<span> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">Why shouldn’t data objects automatically be compatible by name and/or attributes?<span> </span>If Application A uses a Person object with 5 attributes and Application B was written on another continent using a Person object with 3 attributes, all of which are in the Person object from Application A, then why shouldn’t Application B accept the Person object from Application A?!?!</p>
<p class="MsoNormal">
<p class="MsoNormal">The likelihood of two incompatible data objects sharing exactly the same attributes is extremely unlikely.<span> </span>And we could avoid it completely with a few ground rules.<span> </span>For instance, entity and attribute names can use the “extends” construct, and introduce a new construct called “aka” that provides a list of synonymous terms.<span> </span>Attributes would need to match by name or one of the aka names.<span> </span>Entities on the other hand can match up even if their names don’t match, as long as their attributes do.<span> </span>Perhaps the matching would trigger a warning if the names were not matched by name or one of the aka names.</p>
<p class="MsoNormal">
<p class="MsoNormal">There are some problems to be solved, such as implicit use of measurement units.<span> </span>If we had two Person objects that both had a Height attribute, then we would almost certainly encounter a unit problem.<span> </span>So any attribute that quantifies a value in space or time would need to also handle the unit of measure.<span> </span>This could be as simple as some form of Hungarian notation.<span> </span>For instance, the Height attribute would need to be HeightInch, or HeightFeet.<span> </span></p>
<p class="MsoNormal">
<p class="MsoNormal">The aka construct could even go a little further by providing conversions from one unit to another.<span> </span>So, for instance an attribute named HeightInch might be declared as;</p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-indent: 0.5in;">HeightInch aka HeightFoot computed as HeightInch/12 <span> </span><span> </span><span> </span></p>
<p class="MsoNormal" style="text-indent: 0.5in;">
<p class="MsoNormal">I’m quite certain there are many other details that need to be worked out. <span> </span>This type of object would certainly need a text-based intermediary representation to become universal.<span> </span>I think it would be relatively easy to produce an XML notation (Schema).<span> </span>I’ve also considered using JSON, but there is not yet a specification that gives data objects their well-deserved universal liberation from logic and implementation.<span> </span>I’ve produced a proof of concept implementation that I would be happy to share if there is some interest.<span> </span>I do believe that the Universal Data Entity is a necessary first step towards the vision of a global Services library.<span> </span>It almost certainly is a necessary first step towards creating a Situational Application development environment that is both powerful and user friendly.</p>
<p class="MsoNormal">
<p class="MsoNormal">Thanks for your time!</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=51</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social Media Monitoring</title>
		<link>http://zipxap.com/kurtsblog/?p=49</link>
		<comments>http://zipxap.com/kurtsblog/?p=49#comments</comments>
		<pubDate>Fri, 19 Jun 2009 16:56:11 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=49</guid>
		<description><![CDATA[I&#8217;ve been investigating Listening Platforms off-and-on for weeks. There are tons to choose from, and yet they all seem to want hundreds or thousands of dollars per month. Is there anybody out there that charges a sane amount just to play around and surf data?
Another question is; why can&#8217;t I just grab one or two [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been investigating Listening Platforms off-and-on for weeks. There are tons to choose from, and yet they all seem to want hundreds or thousands of dollars per month. Is there anybody out there that charges a sane amount just to play around and surf data?</p>
<p>Another question is; why can&#8217;t I just grab one or two decent aggregators (that give me the entire content of the post), suck the data I want locally, and then just use some sort of off-the-shelf business intelligence dashboard? Or if I really wanted to be low tech, look at it in Excel?</p>
<p>PS: My <a rel="me" href="http://technorati.com/claim/uu3z9369mg">Technorati Profile</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=49</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Single-File Virtual File System for Info-Binder</title>
		<link>http://zipxap.com/kurtsblog/?p=46</link>
		<comments>http://zipxap.com/kurtsblog/?p=46#comments</comments>
		<pubDate>Fri, 19 Jun 2009 03:34:19 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=46</guid>
		<description><![CDATA[Its been more than two months since the last beta release of Info-Binder.  Now you know what I&#8217;ve been doing.  I knew that I could simplify the user experience if I could come up with a way to put all images and attachments in one file, rather than having a separate resources directory that needed [...]]]></description>
			<content:encoded><![CDATA[<p>Its been more than two months since the last beta release of Info-Binder.  Now you know what I&#8217;ve been doing.  I knew that I could simplify the user experience if I could come up with a way to put all images and attachments in one file, rather than having a separate resources directory that needed to be managed by users.</p>
<p>To make a long story short, I created an experimental branch to integrate TrueZip into Info-Binder and test it.  First let me say that it is a terrific product.  Next let me say that it doesn&#8217;t work for Info-Binder because it didn&#8217;t scale.  Performance degraded linearly with the size of the archive file.  This is not the fault of TrueZip, but a consequence of using zip as the underlying archive format.</p>
<p>Thus, I found myself doing something I swore I wasn&#8217;t going to do.  I wrote my own Single-File Virtual File System.  It wasn&#8217;t quite as painful as I thought it would be.  But still, its not for the faint of heart.  It so far is proving to be quite robust and remarkably performant if I do say so myself.</p>
<p>So please try the latest beta of Info-Binder and let me know what you think.</p>
<p>P.S. Developers;  I have released the source code for the VFS under the LGPL license.  You can download the compiled jar separately if you prefer.  The javadoc is also available online.  Go <a href="http://www.zipxap.com/0A06101CFE80CAC7400000.html">here</a> to get it.</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=46</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Internet Hurts</title>
		<link>http://zipxap.com/kurtsblog/?p=43</link>
		<comments>http://zipxap.com/kurtsblog/?p=43#comments</comments>
		<pubDate>Mon, 27 Apr 2009 02:55:34 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=43</guid>
		<description><![CDATA[When something revolutionary comes along, and the internet most certainly qualifies as revolutionary, it takes many years to see the indirect consequences of it.  I wouldn&#8217;t want to live without the internet, but it sure is making life difficult&#8230;
(1) If you love going into a bookstore and browsing, the internet is making life difficult.  I [...]]]></description>
			<content:encoded><![CDATA[<p>When something revolutionary comes along, and the internet most certainly qualifies as revolutionary, it takes many years to see the indirect consequences of it.  I wouldn&#8217;t want to live without the internet, but it sure is making life difficult&#8230;</p>
<p>(1) If you love going into a bookstore and browsing, the internet is making life difficult.  I love the smell of new books.  How long will the dinosaurs like Barnes and Noble and Borders be around before they are undercut into extinction?</p>
<p>(2) If your any kind of journalist, the internet is making life difficult.  The local newspapers are drying up faster than you can say &#8220;This just in&#8230;&#8221;  My buddy has been a sports journalist for 16 years, and is now facing foreclosure and bankruptcy while finishing his teaching degree.</p>
<p>(3) If you&#8217;re a real estate agent, your days are numbered.  The internet is making life difficult.</p>
<p>(4) If you&#8217;re a phone company, your days are numbered.</p>
<p>(5) Blockbuster, your days are numbered.</p>
<p>(6) If people keep stealing music, kiss the music industry goodbye.</p>
<p>I could go on and on.  I agree with the counter-argument; its great to give the little guy a chance.  But if all we are is a country of &#8220;little guys&#8221;, nobody is going to make any money.  If nobody makes any money, nobody is going to be buying anything.  What are we all going to do for a living?  We can&#8217;t all be nurses&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=43</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latest Info-Binder Beta Adds Reporting Capabilities</title>
		<link>http://zipxap.com/kurtsblog/?p=37</link>
		<comments>http://zipxap.com/kurtsblog/?p=37#comments</comments>
		<pubDate>Mon, 09 Mar 2009 00:01:10 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Code-Assist]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Info-Binder]]></category>
		<category><![CDATA[Reporting]]></category>
		<category><![CDATA[Spreadsheet]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=37</guid>
		<description><![CDATA[ 

The 3/8/2009 beta of Info-Binder has replaced the plain-text HTML source editor with a proper HTML editor supplied by Fifesoft, with syntax highlighting and many other advanced features.  (see http://fifesoft.com/rsyntaxtextarea/ to get a feel for the features it offers).

Most importantly, it implements REPORTING.  The reporting subsystem shares the scripting language from the export subsystem.  [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0in 5.4pt 0in 5.4pt; 	mso-para-margin-top:0in; 	mso-para-margin-right:0in; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0in; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal">The 3/8/2009 beta of Info-Binder has replaced the plain-text HTML source editor with a proper HTML editor supplied by Fifesoft, with syntax highlighting and many other advanced features.  (see http://fifesoft.com/rsyntaxtextarea/ to get a feel for the features it offers).</p>
<p class="MsoNormal" style="text-align: left;">
<div id="attachment_38" class="wp-caption alignnone" style="width: 310px"><a href="http://zipxap.com/kurtsblog/wp-content/uploads/2009/03/neweditor.jpg"><img class="size-medium wp-image-38" title="neweditor" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/03/neweditor-300x193.jpg" alt="The latest Info-Binder beta has a new HTML code editor." width="300" height="193" /></a><p class="wp-caption-text">The latest Info-Binder beta has a new HTML code editor.</p></div>
<p class="MsoNormal" style="text-align: left;">Most importantly, it implements REPORTING.  The reporting subsystem shares the scripting language from the export subsystem.  In the coming weeks I plan to write a series of articles entitled &#8220;Anything You Can Do, I Can Do Better&#8221; that compares Excel to Info-Binder and demonstrates that you can do most of the same types of things just as easily in Info-Binder as in Excel.<span> </span></p>
<p class="MsoNormal">Not only that, but there are many circumstances where you&#8217;re far better off to use Info-Binder.  For instance, with Excel, your calculations are forever entombed in your output, meaning that if you created a useful set of calculations/projections for a client, you wouldn’t be able to send it to them electronically without giving away all of your secrets.<span> </span>With Info-Binder, there is a distinctive separation between Input and Output.</p>
<p class="MsoNormal">To get a feel for how it works, install the latest version and select File-&gt;New Organizer.<span> </span>The new-organizer template now includes a &#8220;Contacts&#8221; report.<span> </span>Right click on the root node and select “Generate Report…”<span> </span>Select the “Contacts” report, and click [OK].<span> </span></p>
<p class="MsoNormal">You will notice that it generated a new node under the selected node (root node) named “Contacts &lt;today’s date&gt;”.<span> </span>It is a static report, meaning that it does not automatically update if you create new contacts.<span> </span>You must generate a new report to have a version that reflects your latest list of contacts.</p>
<p class="MsoNormal">To begin peeling back the covers to see how this works, click on the Organizer-Properties icon (or select it from the file menu).<span> </span>Then select the [Reports] tab.<span> </span>Double click the “Contacts” report from the list.<span> </span>What you will discover is that you can write reports that generate any type of text-based output.<span> </span>In most cases, you will be utilizing HTML to create rich reports with text and graphics.<span> </span>If you’re anxious to get started, then see Appendix C in the Users Guide.<span> </span>It may be a little ugly right now, but up to date!<span> </span>Also, if you position your cursor within the code editor of the report , create a blank line, and hit control-space, you will discover Code-Assist, a feature that can dramatically simplify the process of creating new Reports.</p>
<p class="MsoNormal">
<div id="attachment_39" class="wp-caption alignnone" style="width: 310px"><a href="http://zipxap.com/kurtsblog/wp-content/uploads/2009/03/codeassist.jpg"><img class="size-medium wp-image-39" title="CodeAssist" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/03/codeassist-300x204.jpg" alt="The Report Editor from the latest beta of Info-Binder. " width="300" height="204" /></a><p class="wp-caption-text">The Report Editor from the latest beta of Info-Binder. </p></div>
<p class="MsoNormal">
<p class="MsoNormal">In the coming weeks a feature to import reports into existing Organizers will become available.<span> </span>Also expect to see new features for creating custom graphs and charts inside reports.</p>
<p class="MsoNormal">This is an exciting time, as Info-Binder begins to grow into a new tool in the software arsenal that finally can complement the rich power of the spreadsheet.</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=37</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safe General-Purpose Local Storage Mechanism for RIAs</title>
		<link>http://zipxap.com/kurtsblog/?p=23</link>
		<comments>http://zipxap.com/kurtsblog/?p=23#comments</comments>
		<pubDate>Sat, 03 Jan 2009 22:35:56 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=23</guid>
		<description><![CDATA[
 The problem I have with “cloud” computing is that I’m too possessive. When I purchase software, I pay the extra money to have the physical DVD shipped to me.  The reason I do it is because I have a sense of ownership in the applications I buy (Yeah, I know, &#8220;license&#8221;, not &#8220;buy&#8221;).  [...]]]></description>
			<content:encoded><![CDATA[<p><!--[endif]--></p>
<p class="MsoNormal"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> The problem I have with “cloud” computing is that I’m too possessive.<span> </span>When I purchase software, I pay the extra money to have the physical DVD shipped to me.<span> </span><span> </span>The reason I do it is because I have a sense of ownership in the applications I buy (Yeah, I know, &#8220;license&#8221;, not &#8220;buy&#8221;).  That sense of ownership is even stronger when it comes to my data.<span> </span>I don’t want my data off in internet-land, where if the company hosting it goes out of business or gets acquired, I find myself paying $49.99 per month for access to it, or worse, lose it.<span> </span>I also have a fear that my data could be mined or exploited.  I can&#8217;t possibly be the only one that feels this way.</p>
<p class="MsoNormal">So how do we create a safe general-purpose mechanism for accessing persistent local storage from web applications?</p>
<p class="MsoNormal">The Google Gears approach is to create a server to be run on the client’s machine.<span> </span>Then, the user is running a web application from a server hosted locally.<span> </span>I’m by no means a Gears expert, but I feel it becomes a slippery slope to ask end-users to run servers on their desktops.<span> Savy end-</span>users will no-doubt understand the risk of opening up a port to the public, but many will not?  I think the Gears server blocks direct public access, but couldn&#8217;t any arbitrary web page embed a reference to the local Gears server, and use client-side scripting to expose the file system?  The only way to safely protect it would be to limit the capabilities of the Gears server.  This is a less-than-ideal solution because it imposes a limit to the capabilities of all RIAs.  At the very least, this approach will be incompatible with many corporate infrastructures.</p>
<p class="MsoNormal">Even if Gears manages to get all of the kinks worked out of their security mechanism, there is still one enormous problem with their approach; it’s not a general-purpose solution.  Gears appears to provide it&#8217;s functionality via a fairly extensive JavaScript API.<span> </span><span> </span>Don’t get me wrong, there’s absolutely nothing wrong with JavaScript.<span> </span>But I don&#8217;t want to be writing some of my business logic in JavaScript, and some of it in another language.</p>
<p class="MsoNormal">I’ve considered writing an application that ran in the browser and provided programmatic access to the file-system, either through a plug-in or via a Java applet.<span> The Applet would be cool because the user wouldn&#8217;t have to install anything, but just grant authority to the Applet when the page loaded.  On the other hand, many users would be confused by this request each and every time it loaded.  Not only that, you don&#8217;t necessarily know what applet is requesting permission, so it wouldn&#8217;t be good to train users to grant full permission to any old arbitrary public web page..  Plus, an Applet would need to be downloaded to the client machine every time it was utilized (cached for each web page utilizing it?). </span></p>
<p class="MsoNormal"><span>A plug-in would be a better solution.  Once its installed, it doesn&#8217;t need to beg for permissions.  As long as its provides safety from being hacked, life will be good.  But now, the question becomes, &#8220;how do we make it hacker-proof&#8221;?</span></p>
<p class="MsoNormal">If you think about it, we already have a fairly safe File-Upload component.  So why couldn&#8217;t we employ the same strategies to create a Data-Save component?  What makes the file-upload component safe is that the user is provided a familiar component that is (1) easily recognizable, (2) can only be manipulated by the user and not by code.</p>
<p class="MsoNormal">Today I had an idea.  Every browser-based technology I can think of provides intercommunication with<span> </span>JavaScript variables.<span> </span>This means that we could use JavaScript variables as the mechanism for storing and recalling data.<span> </span>It would work like this; A plug-in could be created that is able to load and save the state of a particular JavaScript object, lets say for purposes of discussion, an object named “StateSpace”.  For instance, if we had an application that wanted to save off the coordinates of a 2D point, it might set StateSpace.X and StateSpace.Y.<span> </span></p>
<p class="MsoNormal">The plug-in would then provide a user interface that appears on the user’s browser as shown in Figure 1.</p>
<p class="MsoNormal">
<p class="MsoNormal">
<div id="attachment_22" class="wp-caption alignnone" style="width: 249px"><a href="http://zipxap.com/kurtsblog/wp-content/uploads/2009/01/interface1_smaller.png"><img class="size-medium wp-image-22" title="StateSpace Sample Interface" src="http://zipxap.com/kurtsblog/wp-content/uploads/2009/01/interface1_smaller.png" alt="StateSpace Sample Interface" width="239" height="126" /></a><p class="wp-caption-text">Figure 1: The proposed StateSpace interface.</p></div>
<p class="MsoNormal">
<p class="MsoNormal">To prevent a web application from directly accessing the local file system, there would be no programmatic access to the functions that save and retrieve data.<span> A</span>ll file interaction would be controlled exclusively by the user via the StateSpace UI.  This prevents the plug-in from being used to bamboozle users into exposing their file system.  Not only that, but only ASCII files in JSON notation could be loaded.  An attempt to load any other type of file would simply fail.</p>
<p class="MsoNormal">The RIA developer embeds the Flash, Silverlight, JavaScript (,etc) application into the HTML of the web page, along with the StateSpace object.  The embedded object would provide the UI (Figure 1) in a window in much the same way that an embedded Flash object does.  The beauty of this arrangement is that the StateSpace plug-in would be instantly recognizable to the end user since (1) it has its own unique interface, and (2) it would appear on the page of all StateSpace-enabled web applications.  Users would immediately recognize when an RIA is able to save and load data via StateSpace, and trust that it will be safe.</p>
<p class="MsoNormal">To help visualize this better, imagine a spreadsheet RIA written in flash (A possible RIA replacement for Microsoft Excel).  The flash application would save off the data within each of the cells to the StateSpace JavaScript object using its own strategy.  For instance using two-dimensional arrays to hold the state of each of the cells.  The user could save off the state of these JavaScript variables using the StateSpace plug-in by clicking on the [Save] or [Save As] buttons on the StateSpace interface within the browser window.  Later, the session could be recalled upon returning to the web page by clicking on the [Open] Button withing the StateSpace interface.</p>
<p class="MsoNormal">To make this work, three additional issues must be addressed;</p>
<p class="MsoNormal">(1) The user should be able to identify whether or not there is unsaved data simply by glancing at the StateSpace UI.<span> </span>There must also be a JavaScript function, for instance isSaved(), that returns a boolean value.  RIA Developers could then check the value when the page is being unloaded,  and warn the user that unsaved data will be lost if they navigate away.<span> </span></p>
<p class="MsoNormal">(2) The StateSpace UI would have an INFO button that would provide access to various metrics about the JavaScript object available to be saved, most importantly the amount/size of the data-set being saved.  It could have an options panel where the user could set a maximum size-limit so that a warning message would pop-up if the object exceeded a certain size (for instance 1 megabyte).</p>
<p class="MsoNormal">(3) The StateSpace UI would automatically associate data-sets with the URL from which they were saved, so that the user knows which data-sets go with which URLS, and can easily retrieve their data from a prior session.  Obviously, it would also need to allow users to open data-sets created from different URLs too, if they desired to do so.</p>
<p class="MsoNormal">The StateSpace strategy would allow quite a bit of flexibility.<span> </span>A StateSpace enabled application could organize the JavaScript variables however it see&#8217;s fit.  For instance the application could have its own internal mechanism for subdividing data into “projects”, etc.  I would imagine there would ultimately be JavaScript libraries that simplified this task.</p>
<p class="MsoNormal">Please help me to identify any possible weaknesses or exploits.  Will it work?<span> </span>Am I missing anything?  Please comment (either publically or via email).<span> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=23</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Relevance of the Apple Macintosh</title>
		<link>http://zipxap.com/kurtsblog/?p=8</link>
		<comments>http://zipxap.com/kurtsblog/?p=8#comments</comments>
		<pubDate>Mon, 22 Dec 2008 18:23:55 +0000</pubDate>
		<dc:creator>Admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[market share]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://zipxap.com/kurtsblog/?p=8</guid>
		<description><![CDATA[
I spend entirely too much time thinking about and worrying about cross-platform compatibility.  This is because I love OSX and everything it stands for.  Coming from a UNIX background, it all makes perfect sense to me.  The Apple business model makes sense too; creating an exclusive hardware and software club with stringent requirements improves the [...]]]></description>
			<content:encoded><![CDATA[<div style="width: 540px;"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--></p>
<p>I spend entirely too much time thinking about and worrying about cross-platform compatibility.  This is because I love OSX and everything it stands for.  Coming from a UNIX background, it all makes perfect sense to me.  The Apple business model makes sense too; creating an exclusive hardware and software club with stringent requirements improves the quality and reliability of the Mac platform.  It is then poised as an upscale alternative to the conventional PC.  I’m also intrigued by Linux.  An open source alternative is a romantic notion.</p>
<p>But then reality hits.  I try Linux every few years, just to be disappointed.  Last time I installed it was a few years back.  It always seems to require massive amounts of research to figure out how to support the hardware.  There are always a few aspects of the computer that are compromised in the process, perhaps the video card doesn’t work quite right, or I can’t get the network card working, or I’m using some strange generic audio driver with lousy quality and/or excessive latency.  The thought that ultimately puts the nail in the Linux coffin is, “considering that I want to develop end-user applications, how many end-users in my target market have the patience and knowledge to utilize Linux as their desktop?”</p>
<p>I&#8217;ve owned two Macs.  In the Mac world you can’t be a value shopper, as I am.  If you are, then you will be obsoleted within six months of your purchase.  That’s what happened to me.  I first got caught on the tail end of the G3, and couldn’t upgrade to Tiger.  Then, I had my G4 for about a year and was told I’d have to upgrade to Intel Mac else be stuck in the dark ages.  I don’t know about you, but I don’t have $1500 to spend on computer hardware every year or so.  I sold my Mac and bought a Sony VAIO.  It may not be as sexy as a Mac, but it still runs all the latest software,  and it was a heck of a lot cheaper.</p>
<p>Back around 2000, when Apple was desperate for market share, they supported Java as an equal to Cocoa.  But in late 2005, Mac’s market share was big enough that Apple decided that Java should no longer support the latest OSX features (see their press releases).  (Its obvious to me that the Apple business model is to &#8220;get leverage and then rip, sucking people into the Apple vortex).  The iPhone frustrates me to no end.   At a time when no mobile platform has more than 20% market share, Apple’s decision to force us to use cocoa essentially destroys the ability of the little guy to compete in the market.  Companies are stuck developing multiple versions to provide their application(s) to all (or most) mobile platforms.  Only the gigantic corporations have the resources to do that.  Hey Apple, do you know that you are sticking it to the little guy?</p>
<p>My latest round of cross-platform analysis-paralysis was provoked by two things; (1) A recent news article claiming that 66% of all computers sold over $1000 were Macs, and that their total market share was around 12%.  I&#8217;m unable to find that article now, but I did find <a title="Apple Market Share" href="http://apple20.blogs.fortune.cnn.com/2008/10/16/macintosh-share-of-the-us-market-tops-9/">this one</a> from October claiming Mac has a 9% market share, and (2) my recent search for new employment (which brings me to the inevitable conclusion that Microsoft .NET is slowly taking over the business world).  My own [unscientific] independent research shows that Mac&#8217;s market share is nowhere near 12%.  I think it would be optimistic to claim 6%.</p>
<p>It&#8217;s clear that if I want to continue to be employable, I have no choice but to be a .NET developer.  Not only is it taking over from a purely development perspective, but it is also taking over via value-added platforms, such as SharePoint and MOSS.  The latest numbers don’t lie.</p></div>
<p style="width: 540px;">.NET is slowly overtaking Java… Cocoa is a non-player;</p>
<div style="width: 540px;"><a title="java and sql, c# or vb.net, xcode and cocoa Job Trends" href="http://www.indeed.com/jobtrends?q=java+and+sql%2C+c%23+or+vb.net%2C+xcode+and+cocoa"><img src="http://www.indeed.com/trendgraph/jobgraph.png?q=java+and+sql%2C+c%23+or+vb.net%2C+xcode+and+cocoa" border="0" alt="java and sql, c# or vb.net, xcode and cocoa Job Trends graph" width="540" height="300" /></a></div>
<div style="width: 540px;"><a title="&quot;windows vista&quot;, xcode and cocoa, macintosh and osx Job Trends" href="http://www.indeed.com/jobtrends?q=%22windows+vista%22%2C+xcode+and+cocoa%2C+macintosh+and+osx"><br />
</a></div>
<p>The Java portal is a dead dog and SharePoint is taking off;</p>
<div style="width: 540px;"><a title="sharepoint, jsr168 or jsr286 or &quot;websphere portal&quot; or &quot;sun java system portal server&quot; Job Trends" href="http://www.indeed.com/jobtrends?q=sharepoint%2C+jsr168+or+jsr286+or+%22websphere+portal%22+or+%22sun+java+system+portal+server%22"><img src="http://www.indeed.com/trendgraph/jobgraph.png?q=sharepoint%2C+jsr168+or+jsr286+or+%22websphere+portal%22+or+%22sun+java+system+portal+server%22" border="0" alt="sharepoint, jsr168 or jsr286 or &quot;websphere portal&quot; or &quot;sun java system portal server&quot; Job Trends graph" width="540" height="300" /></a></div>
<p style="width: 540px;">Adobe Flex is taking off, but Silverlight is hot on its tail.  Who knows what will happen with JavaFX.  Sun has yet to create the designer tool for it, so we probably won’t have an answer to that question for least another year;</p>
<div style="width: 540px;"><a title="adobe and flex, silverlight, javafx Job Trends" href="http://www.indeed.com/jobtrends?q=adobe+and+flex%2C+silverlight%2C+javafx"><img src="http://www.indeed.com/trendgraph/jobgraph.png?q=adobe+and+flex%2C+silverlight%2C+javafx" border="0" alt="adobe and flex, silverlight, javafx Job Trends graph" width="540" height="300" /></a></div>
<div style="width: 540px;"><a title="java and sql, c# or vb.net, xcode and cocoa Job Trends" href="http://www.indeed.com/jobtrends?q=java+and+sql%2C+c%23+or+vb.net%2C+xcode+and+cocoa"> </a></div>
<div style="width: 540px;"><a title="sharepoint, jsr168 or &quot;websphere portal&quot; or &quot;sun java system portal server&quot; Job Trends" href="http://www.indeed.com/jobtrends?q=sharepoint%2C+jsr168+or+%22websphere+portal%22+or+%22sun+java+system+portal+server%22"></a></div>
<p style="width: 540px;">Vista looks to continue Microsoft’s tradition of Windows domination.  This chart has a smaller scale, so you can see that the popularity of cocoa has increased in recent months, no doubt because of the popularity of iPhone and Apple’s insistence that iPhone apps be written in Cocoa.  You’re kidding yourself if you don’t think this is part of Apple’s strategy to increase the sales of Macs (running XCode), and increase the number of Cocoa developers.  Outside of specialized markets, they just can’t seem to break into the business world.  The business world shows a declining interest in OSX, while Vista has clearly begun its march to market dominance. Not even iPhone can stop this trend.</p>
<div style="width: 540px;"><a title="&quot;windows vista&quot;, xcode and cocoa, macintosh and osx Job Trends" href="http://www.indeed.com/jobtrends?q=%22windows+vista%22%2C+xcode+and+cocoa%2C+macintosh+and+osx"><br />
<img src="http://www.indeed.com/trendgraph/jobgraph.png?q=%22windows+vista%22%2C+xcode+and+cocoa%2C+macintosh+and+osx" border="0" alt="&quot;windows vista&quot;, xcode and cocoa, macintosh and osx Job Trends graph" width="540" height="300" /><br />
</a></div>
<div style="width: 540px;"><img src="file:///C:/DOCUME~1/KPENRO~1/LOCALS~1/Temp/moz-screenshot.jpg" alt="" /><img src="file:///C:/DOCUME~1/KPENRO~1/LOCALS~1/Temp/moz-screenshot-1.jpg" alt="" /></div>
<p style="width: 540px;">.NET is winning the desktop race.</p>
<div style="width: 540px;"><a title="java and (swing or swt), winforms or wpf or silverlight Job Trends" href="http://www.indeed.com/jobtrends?q=java+and+%28swing+or+swt%29%2C+winforms+or+wpf+or+silverlight"><br />
<img src="http://www.indeed.com/trendgraph/jobgraph.png?q=java+and+%28swing+or+swt%29%2C+winforms+or+wpf+or+silverlight" border="0" alt="java and (swing or swt), winforms or wpf or silverlight Job Trends graph" width="540" height="300" /></a></div>
<div style="width: 540px;"><a title="java and (jsf or jsp or servlet), asp.net, php Job Trends" href="http://www.indeed.com/jobtrends?q=java+and+%28jsf+or+jsp+or+servlet%29%2C+asp.net%2C+php"></a></div>
<p style="width: 540px;">.NET is winning the web-app race, but PHP is hot on its tail.  Ruby on Rails is a viable solution to a problem, but if you’re hedging your employment bets, you’re far better off learning .NET, PHP, or JEE (J2EE).</p>
<div style="width: 540px;"><a title="java and (jsf or jsp or servlet), asp.net, php, ruby on rails Job Trends" href="http://www.indeed.com/jobtrends?q=java+and+%28jsf+or+jsp+or+servlet%29%2C+asp.net%2C+php%2C+ruby+on+rails"> <img src="http://www.indeed.com/trendgraph/jobgraph.png?q=java+and+%28jsf+or+jsp+or+servlet%29%2C+asp.net%2C+php%2C+ruby+on+rails" border="0" alt="java and (jsf or jsp or servlet), asp.net, php, ruby on rails Job Trends graph" width="540" height="300" /></a></div>
<p style="width: 540px;">Sorry, I&#8217;ve been ignoring C++.  This is because, despite what the C++ and QT pundits claim, I just don’t see C++ as a viable platform for business applications.  The continued popularity of C++ is largely a function of its applicability to embedded development.</p>
<div style="width: 540px;"><a title="java and sql, c# or vb.net, c++ and sql Job Trends" href="http://www.indeed.com/jobtrends?q=java+and+sql%2C+c%23+or+vb.net%2C+c%2B%2B+and+sql"><br />
<img src="http://www.indeed.com/trendgraph/jobgraph.png?q=java+and+sql%2C+c%23+or+vb.net%2C+c%2B%2B+and+sql" border="0" alt="java and sql, c# or vb.net, c++ and sql Job Trends graph" width="540" height="300" /></a></div>
<p style="width: 540px;">In conclusion I have no conclusion.  I only have more confusion.  This is because I&#8217;m still searching for the silver bullet.  But there is no silver bullet, and technological religion has nothing to do with it.  If I want to be employable as a business-application developer, I’m stuck in the .NET or Java world.  I suppose if I worked near the Apple headquarters in California, I might have a shot at being a professional Mac developer.  If I develop in Java, I’m a second rate citizen on every platform (as you will discover when you go to integrate Java into SharePoint or MOSS on Windows, or when you read the hatred for Java in the Linux world, or when you read Apple’s press releases regarding the status of Java as a programming language).  I’m starting to believe my best bet is to be a .NET guru and hope that MONO and Portable.Net continue to grow in popularity and capability.</p>
<p style="width: 540px;">I fully understand the Ruby/Python/Linux crowd arguments.  I appreciate their certain distaste for my opinion.  I welcome their suggestions for how to make a viable living off developing Ruby applications.  But until they prove I can make a reasonable living off it, I’m going to be realistic and hedge my bets by sticking close to Microsoft… for now&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://zipxap.com/kurtsblog/?feed=rss2&amp;p=8</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
