<?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>Kev009.com &#187; development</title>
	<atom:link href="http://www.kev009.com/wp/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kev009.com/wp</link>
	<description>Speed and Accuracy are fine, kev009 is final: Projects and Ventures of Kevin Bowling</description>
	<lastBuildDate>Thu, 19 Jan 2012 03:18:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>But First, Write No Code</title>
		<link>http://www.kev009.com/wp/2010/05/but-first-write-no-code/</link>
		<comments>http://www.kev009.com/wp/2010/05/but-first-write-no-code/#comments</comments>
		<pubDate>Fri, 28 May 2010 06:28:30 +0000</pubDate>
		<dc:creator>kev009</dc:creator>
				<category><![CDATA[c]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.kev009.com/wp/?p=468</guid>
		<description><![CDATA[Something I see often in person and online are programmers constantly implementing common solutions, reinventing wheels, or embracing NIH. Before you do this, please consider the Kev009’s Oath – “But First, Write No Code”.  This is a solution to a &#8230; <a href="http://www.kev009.com/wp/2010/05/but-first-write-no-code/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Something I see often in person and online are programmers constantly implementing common solutions, reinventing wheels, or embracing <acronym title="Not Invented Here">NIH</acronym>.</p>
<p>Before you do this, please consider the <em>Kev009’s Oath</em> – <strong>“But First, Write No Code”</strong>.  This is a solution to a variety of problems in software development, but today&#8217;s article is specifically on using external code.</p>
<p>I’ve found that programmers who follow a system similar to mine (detailed below) develop systems that are more stable, maintainable, and sane.  They likely write better code because it means they understand their tools and also read others’ code.  They examine the problem first rather than going in guns blazing.</p>
<p>Steps to decide whether to use an existing solution or write your own implementation:</p>
<ol>
<li><strong>Scan the area.</strong> <a href="http://www.google.com/">Google</a>, <a href="http://www.freshmeat.net/">Freshmeat</a>, <a href="http://www.sf.net/">SourceForge</a>, standard library, OS libraries, etc. are your friend.  See if the problem you are trying to solve has been solved.  I don’t care how long you’ve been programming or how much you think you know. The ecosystem of a language is constantly changing.Make a list of hits that look similar to the problem you are trying to solve.  Try and get a quick sense of the idiomatic methods of using your language, OS, etc.</li>
<li><strong>Do research.</strong> Are the solutions you found in step 1 suitable to the problem at hand?  Consider the <em>pros</em> and <em>cons</em> of each item.  Now, carefully evaluate how idiomatic the items are to your language and environment.If the item is open source, does the community seem active?  If it doesn’t fully map to your problem, does it look like you can modify it to do so?
<p>Even if you end up developing a solution from scratch, you should at  least now have some good references.  Keep in mind, extending an existing project may be considerably less work.  You might even be able to offload maintenance of that component.</li>
<li><strong>Consider the license.</strong> This isn’t just for the legal department.  What kind of project you are working on will weigh in heavily.  Commercial or open source?  As a software professional, you need to be abreast with the various licenses in the wild.  As an open source developer, you need to consider how licenses will affect your work being packaged by distributions.An open source library licensed under the GPL is not acceptable for static linking to commercial software.  However, you can link to an operating system provided copy or bundle the dynamic library with your application.  LGPL does not have this restriction.  With both of these, you must supply your changes upon request from end users among other things.
<p>BSD, MIT, and Apache style licenses allow you to make changes and redistribute under completely different licenses.  Some just want credit in your documentation.  These are very compelling even in commercial development.</p>
<p>Commercial components may have a per-copy fee associated which may dissuade their use by your organization.  If you don’t get the source, you won’t be able to effectively change or maintain it so you will also be at mercy of that developer.</li>
<li><strong>Make a decision.</strong> By now, your list should have been pared down based on licenses and research.  Perform extensive evaluations of the remainder and eventually hone in on the one you think fits best.  You’re going to have to rely on your experience and intuition while making the critical decision.  Perhaps the hardest part:  weighing it against a mythical home-grown solution in your mind.</li>
<li><strong>Implement the decision.</strong> Self explanatory.  This either means bootstrapping your own project or fully integrating the external one.  If you are extending an open source solution, consider submitting the patches back to the community for feedback and perhaps integration.  If you are bootstrapping your own solution, you’ve got your work cut out.  Is this only suitable for an internal project, or perhaps it would have its own merit as a new open source project?Be sure to reevaluate early and often.  That library you chose might turn out to be a can of worms, just as the &#8220;easy&#8221; new solution you had in your head might require years of development.</li>
<li><strong>Subscribe to the announce mailing list.</strong> <em>Only if you used an external solution</em>. Does the project have an RSS feed for releases or a low volume announcement list?  Don’t be like Adobe.  <a href="http://secunia.com/blog/76">Avoid embarrassing security problems</a>.  Also consider how enhancements and bug fixes to the external project might make your own project better, more stable, and more efficient.  This is where the real lasting dividends of using an external solution come from.</li>
</ol>
<p>This list is widely applicable.  You’ve got a seriously high bar to reach if you are developing containers of &lt;T&gt;, sorting methods, GUI frameworks, parsers, text and binary file formats, and much more so try and follow it the next time you code.</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.kev009.com/wp/2010/05/but-first-write-no-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Java: The Good Parts</title>
		<link>http://www.kev009.com/wp/2009/10/java-the-good-parts/</link>
		<comments>http://www.kev009.com/wp/2009/10/java-the-good-parts/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 05:31:24 +0000</pubDate>
		<dc:creator>kev009</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Datacenter]]></category>
		<category><![CDATA[Gentoo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[openjdk]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.kev009.com/wp/?p=303</guid>
		<description><![CDATA[A while back, a book entitled JavaScript: The Good Parts made waves on the internet, especially social networking sites.  This book purported to show the inner beauty of a language that was long considered second or third rate, coming of &#8230; <a href="http://www.kev009.com/wp/2009/10/java-the-good-parts/">Continue reading <span class="meta-nav">&#8594;</span></a>
No related posts.]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-313" style="margin-left: 5px; margin-right: 5px;" title="javascript-the-good-parts" src="http://www.kev009.com/wp/wp-content/uploads/2009/10/javascript-the-good-parts.gif" alt="javascript-the-good-parts" width="180" height="236" />A while back, a book entitled <a href="http://oreilly.com/catalog/9780596517748" target="_blank">JavaScript: The Good Parts</a> made waves on the internet, especially social networking sites.  This book purported to show the inner beauty of a language that was long considered second or third rate, coming of age.  With the advent of toolkits like JQuery, Javascript/AJAX development has become easy and even fun.</p>
<p>I aim to do the same by showing &#8220;Java: The Good Parts&#8221; here at a high level.<img class="alignright size-full wp-image-312" title="java_powered_logo_rgb" src="http://www.kev009.com/wp/wp-content/uploads/2009/10/java_powered_logo_rgb.gif" alt="java_powered_logo_rgb" width="70" height="131" /></p>
<p>When I was younger, I used to despise Java for political reasons and bad memories of early applets and applications.  I suspect many users and developers (especially Libre software devs!) are on the same boat.  By the end of this article, I hope I swayed your opinion or at least caused you to reevaluate your bias.  I also wish to  encourage further discussion about these points and ways we can improve any deficiencies.</p>
<h2>Rough and Tumble Upbringing</h2>
<p>When Java first started gaining popularity, it was loudly hyped as the end all language.  It was expected that Java would take the &#8220;rich client&#8221; by storm, and applets would be the go to solution for enhancing web pages.  What happened was a bit different.  Java floundered and struggled to find a niche.  On the client side, AWT apps looked horrendous despite using native widgets.  Then Swing came about and despite easing development, it looked equally bad on all platforms (by default).  Applets were basically a stillbirth.  The ugly gray box, loadtime sometime measuring in minutes, and no coordination with the DOM and web browser made the average user hate Java.</p>
<p>One area Java was able to develop and secure a foundation, however, was the back end of large web applications.  The Virtual Machine approach provided a marked advantage over the CGI and interpreted scripts of the day.  Java&#8217;s rich networking libraries, clean Object Oriented design, and safety made this the language de jour for large web applications.</p>
<h2>Open Source Matters</h2>
<p title="Just In Time">In my opinion, the open sourcing of Java during its  early infancy would have  had  little impact on most of the teething issues.  The Virtual Machine, JIT, and Garbage Collection required many years of tuning to get acceptable performance and Sun did an acceptable job keeping it under wing.  The relatively limited CPU and RAM of the mid &#8217;90s also made these concepts a bit ahead of their time.  Somewhere in the 1999-2002 time frame, though, Sun really dropped the ball.  An Open Source Java would have led to ubiquity on the booming Linux platform and a chance for all sorts of cross-platform software.</p>
<p>Open Source matters, and not just for the source code.  Open Source  projects naturally bring about very pragmatic and intelligent  developers.  These are the folks that thoroughly enjoy their hobby,  work, and tools.  The marketing guys and pointed haired bosses have much  less pull here.  On one hand, a vibrant community built itself with the many Apache Software Foundation projects.  However, most of these were squarely focused on web applications or low level things such as build tools, testing frameworks, and message buses.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-331" title="ThumbsUp" src="http://www.kev009.com/wp/wp-content/uploads/2009/10/ThumbsUp.jpg" alt="ThumbsUp" width="224" height="180" />Due to the void, interpreted languages such as Python rose to the challenge while C and C++ remained the mainstay for applications programming.  Microsoft started dominating Windows development with their .NET CLR languages.  The glib/Gtk+ and Qt toolkits brought about a renaissance in cross-platform development with C and C++ respectively [though not limited].</p>
<p>It wasn&#8217;t until the open-sourcing of SWT that GUI development in Java became attractive.  The obvious killer apps here were the <a href="http://www.eclipse.org/" target="_blank">Eclipse IDE</a> and the Azureus (now <a href="http://en.wikipedia.org/wiki/Vuze" target="_blank">Vuze</a>) bittorrent client.</p>
<p>Sun&#8217;s closed grip of Java really stagnated any chance of abundant expansion in these middle years (2001-2006).  Microsoft leveraged this weakness to create the excellent .NET platform and associated languages to maintain their closed platform and market dominance.  The counterbalance that would have been Java was thus left playing catchup.</p>
<p>We are just beginning to see the fruits of this labor from 2006 through today.  The OpenJDK project is now distributed with popular Linux distributions such as Ubuntu and Fedora.  We finally have decent browser plugins and Java Web Start applications across 32 and 64-bit machines.  The Java deployment problem will slowly fade from memory.</p>
<h2>Application Development</h2>
<p>SWT made Java apps beautiful.  OpenJDK should make them ubiquitous.  We finally have an Open Source platform that is widely deployed.  The strong built in standard library and clean OO design patterns of Java make it a very pleasant host for developing rich client apps.  Obvious areas for improvement here include better layout/form design tools and closer integration with upstream Linux distributors.</p>
<p><img class="alignleft size-full wp-image-319" title="qt-logo" src="http://www.kev009.com/wp/wp-content/uploads/2009/10/qt-logo.png" alt="qt-logo" width="196" height="80" />Somewhere along the line, Trolltech/<a href="http://www.qtsoftware.com/" target="_blank">QT Software</a> (now owned by Nokia) released Jambi &#8212; the complete Qt bindings, GUI framework, and incredibly rich library &#8212; for Java.  Oddly, this bombshell received little of the community and fanfare I thought it would or deserves.  Indeed, QT Software demoted Jambi from their teir-1 platforms and hopes the community will pick it up.  I hope this project isn&#8217;t allowed to stagnate as there is a lot of potential here.</p>
<h2>Web Apps</h2>
<p>Along the &#8220;Enterprise Web Application&#8221; lineage of Java, we wound up with some disgustingly overcomplicated and bloated frameworks for building web apps.  Ruby on Rails and Python Django came about and put a new spin on the development of rapid and robust web apps.  The learning curve of these frameworks is much less than Java EE and I will go as far as saying they are more capable because of it.</p>
<p>By using Java, JSP, and Servlets directly on top of a light Model-View-Controller, I believe Java is just as compelling as some of the more popular scripting languages.  Developers need to know they can trim the fat and that there are many advantages to developing in Java, namely because of the next topic&#8230;</p>
<h2>Dynamic Languages, its all about the VM</h2>
<p>It&#8217;s all about the JVM stupid!  One of the best features of Java and .NET are the underlying Virtual Machines.  By using JIT compiled VMs, Java code has a distinct advantage over the common interpreted languages such as Perl, Python, and PHP.  In the case of Java, the resultant is even naturally crossplatform.</p>
<p>The really interesting developments here focus on extending the JVM to syntax and paradigms other than the statically typed C++ lookalike.  <a href="http://clojure.org/" target="_blank">Clojure</a> and <a href="http://www.scala-lang.org/" target="_blank">Scala</a> deliver innovative new techniques while <a href="http://www.jython.org/" target="_blank">Jython</a> and <a href="http://www.jruby.org/" target="_blank">JRuby</a> bring these excellent languages to the Java software platform and virtual machine.</p>
<p>In short, Java provides everyone with a counter to Microsoft&#8217;s .NET CLR.  The Java VM has been around the block and tuned by giants such as Sun, IBM, Oracle, SAP and more.</p>
<p>I call on the community to discuss how we can encourage use of the JVM for languages other than Java and build this into a defacto runtime.  Continued tuning and integration with Windows, Mac OS X, and Gnome/KDE *NIX systems is paramount.  Research for easy multi-core development is also worthwhile.  Meanwhile, distributions need to continue packaging the JRE and make it a default.  Individual developers need to be made aware of &#8220;Java: The Good Parts&#8221; and myths debunked.</p>
<h2>Applets, Rich Media, Native Code!?</h2>
<p><img class="alignright size-full wp-image-311" title="javafx_logo" src="http://www.kev009.com/wp/wp-content/uploads/2009/10/javafx_logo.png" alt="javafx_logo" width="120" height="52" />With the release of <a href="http://www.javafx.com/" target="_blank">Java FX</a>, widespread deployment of the JRE, and better browser integration, Java has set the stage for a comeback to its roots.</p>
<p>During the late &#8217;90s and 2000s, Adobe Flash became the tool of choice for web animation and interactive pages.  It really exploded with the advent of Youtube and other internet streaming sites making use of the Flash video format.  Unfortunately, Flash player is notoriously insecure, resource intensive, and crash-prone.  It is also not widely available for the millions of smartphones that have become more accessible than computers.</p>
<p>Luckily, there seems to be a shift back to the browser with new developments in AJAX, JavaScript, and HTML.  The &lt;video&gt; tag will hopefully make video as easy and portable as graphics are today in the browser.  Clean JavaScript libraries and fast JIT JS engines make it practical to use this paradigm for many domains.</p>
<p>Yet one must acknowledge that somewhere along the line, manipulating a DOM/markup language with a scripting language isn&#8217;t the most effective development platform for everything.  Google even thinks it poignant to run x86 machine code in a sandboxed environment in your browser.  I personally fail to see the logic behind this.  Java provides a well evolved, cross-platform solution.   Java can run on your ARM powered Android.  Requiring an x86 CPU just seems like the wrong track in this modern age.  Hopefully JavaFX will pick up the slack and return Java to its roots.  I would love to see the demise of the terrible Flash plugin.</p>
<h2>Future and Conclusion</h2>
<p>It&#8217;s time we considered Java for The Good Parts.</p>
<p>I hope some of my points caused you to reevaluate any bad preconceptions or past experiences you may have had with Java.  Java has undergone great change since its birth and I think it is capable of becoming the premier development platform for applications programming of all types.  Particularly interesting are some of the new languages such as Scala and Clojure.  Java has long been a staple in web development, but has traditionally scared away amateur coders.  If you cut the fat, Servlets and JSP are not much harder to set up than common place scripting languages.  Frameworks such as Grails bring it to parity with Rails or Django.</p>
<p>Java underwent a sea change in 2006 with the releasing of the source code and opening of the development process.  Java and the JVM should be championed by Libre software developers and users alike!</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><img class="alignleft size-full wp-image-313" style="margin-left: 5px; margin-right: 5px;" title="javascript-the-good-parts" src="http://www.kev009.com/wp/wp-content/uploads/2009/10/javascript-the-good-parts.gif" alt="javascript-the-good-parts" width="180" height="236" /></div>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.kev009.com/wp/2009/10/java-the-good-parts/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

