<?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>This Little Program Went to Market</title>
	<atom:link href="http://www.godtlandsoftware.com/word-press/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.godtlandsoftware.com/word-press</link>
	<description>Create, Deploy, Distribute, Sell, and Market Software and More on the Internet at Little or No Cost to You</description>
	<lastBuildDate>Fri, 20 Jan 2012 16:56:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Kindle and Nook Editions Now Available for This Little Program Went to Market</title>
		<link>http://www.godtlandsoftware.com/word-press/2012/01/20/kindle-and-nook-editions-now-available-for-this-little-program-went-to-market/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2012/01/20/kindle-and-nook-editions-now-available-for-this-little-program-went-to-market/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 16:56:48 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=251</guid>
		<description><![CDATA[This little Program Went to Market: Create, Deploy, Distribute, Sell, and Market Software and More on the Internet at Little or No Cost to You is now available as an e-book for both Kindle and Nook. Many of the tips, techniques, and tools discussed in this blog are demonstrated in a detailed step-by-step tutorial in &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2012/01/20/kindle-and-nook-editions-now-available-for-this-little-program-went-to-market/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p><em><img class="alignleft" src="http://www.godtlandsoftware.com/this-little-program/front-cover-shadow.jpg" alt="This Little Program Went to Market" width="150" height="183" />This little Program Went to Market: Create, Deploy, Distribute, Sell, and Market Software and More on the Internet at Little or No Cost to You</em> is now available as an e-book for both <a href="http://www.amazon.com/This-Little-Program-Market-ebook/dp/B006VHANKI">Kindle</a> and <a title="This Little Program Went to Market" href="http://www.barnesandnoble.com/w/this-little-program-went-to-market-annette-godtland/1022822402?ean=2940013703964&amp;itm=1&amp;usri=this+little+program+went+to+market">Nook</a>.</p>
<p>Many of the tips, techniques, and tools discussed in this blog are  demonstrated in a detailed step-by-step tutorial in the book, <em><a href="../../this-little-program/">This Little Program Went to Market</a></em>, by Annette Godtland.</p>
<p>The book takes a computer program through the entire process of  creating, deploying and distributing a program, then selling and  marketing it (or any other product) on the Internet.  <a href="../../this-little-program/">Read more</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2012/01/20/kindle-and-nook-editions-now-available-for-this-little-program-went-to-market/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Include the Java Runtime Environment (JRE) with Your Program</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/08/06/include-the-java-runtime-environment-jre-with-your-program/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/08/06/include-the-java-runtime-environment-jre-with-your-program/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 22:16:53 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=242</guid>
		<description><![CDATA[What if someone wants to run your Java program but doesn&#8217;t have the required Java Runtime Environment (JRE) installed on his computer? You could tell him where to download Java so he could install it, but chances are that he would instead just not use your program. This would greatly reduce sales of your program. &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/08/06/include-the-java-runtime-environment-jre-with-your-program/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>What if someone wants to run your Java program but doesn&#8217;t have the required Java Runtime Environment (JRE) installed on his computer?  You could tell him where to download Java so he could install it, but chances are that he would instead just not use your program.  This would greatly reduce sales of your program.  Consider including the JRE with your program.</p>
<h1>Licensing Issues</h1>
<p lang="en-US">Always check for licensing issues before you include a third party program with your program.  Read the “License to Distribute” section of the license agreement for the version of the JRE that you plan to use, and make sure that you understand and follow the terms of that agreement.</p>
<h1>Advantages of including the JRE</h1>
<p lang="en-US">By including the JRE with my program, the user can install both my program and the JRE by downloading a single file, and then run just one install wizard.  The user does not have to figure out how and were to get the required JRE.  Nor does he have to stop in the middle of installing my program in order to go find Java.</p>
<p lang="en-US">I use Inno Setup to create my install wizard.  My install wizard checks if the user has the minimum required version of the JRE installed.  If he does, it installs just my program.  If he does not have the minimum required version of the JRE, my install wizard asks if he wants to install it, and if so, installs the JRE that is included with my program.  After installing my program, my install wizard deletes the JRE install file, freeing up space from a large file that is no longer needed.</p>
<p lang="en-US">Inno Setup, available free of charge, is a very comprehensive program for creating Windows install wizards.  Download Inno Setup from <a title="Inno Setup" href="http://www.jrsoftware.org/isinfo.php.">http://www.jrsoftware.org/isinfo.php.</a></p>
<h1>Disadvantages of including the JRE</h1>
<p lang="en-US">My Java programs are small.  Even with all my program&#8217;s required resources, my setup.exe file is often less than 2 MB.  The JRE installer adds 15 MB to the size of my setup.exe file, greatly increasing the file size.  Larger files take longer to download.  The disadvantage of including the JRE in my install wizard is that some potential users of my program may decide to not bother downloading my program if its download takes too long.</p>
<h1>Offer Both</h1>
<p lang="en-US">I decided to offer both solutions.  The user may choose to download the version of my installer with the JRE, or the one without the JRE.  I believe I would lose more potential users of my program if I didn&#8217;t include the JRE than if I did, so the default download option is the one with the installer.  But then I also provide the alternative option to download the much smaller installer without Java if the user believes he has a valid version of Java already on his computer.</p>
<h1>Conclusion</h1>
<p>One basic rule to keep in mind when you create your program&#8217;s install wizard is always minimize the nubmer of steps required of the user.  You don&#8217;t want a potential customer to give up just because too many steps or decisions were required to install your program.</p>
<p>By bundling the JRE with your program and letting your installer decide if it will be needed, you greatly simplify the installation of your program and its requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/08/06/include-the-java-runtime-environment-jre-with-your-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Minimum Java Runtime Environment (JRE) for Your Program</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/07/24/the-minimum-java-runtime-environment-jre-for-your-program/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/07/24/the-minimum-java-runtime-environment-jre-for-your-program/#comments</comments>
		<pubDate>Sun, 24 Jul 2011 19:41:43 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=235</guid>
		<description><![CDATA[Your program development may go easier and faster when you use the latest Java technology. However, that means users of your program must have the same version of the Java Runtime Environment (JRE), or newer, in order to run your program. How do you make sure your program&#8217;s user has an appropriate version of the &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/07/24/the-minimum-java-runtime-environment-jre-for-your-program/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p lang="en-US">Your program development may go easier and faster when you use the latest Java technology.  However, that means users of your program must have the same version of the Java Runtime Environment (JRE), or newer, in order to run your program.  How do you make sure your program&#8217;s user has an appropriate version of the JRE installed on his computer before he tries to run your program?</p>
<h1>What Minimum Version Should You Require?</h1>
<p lang="en-US">In a moment I&#8217;ll discuss steps you can take to make sure someone doesn&#8217;t try to run your program if he doesn&#8217;t have the minimum version of Java installed on his computer.  But first, what version of Java should you require as the minimum version?</p>
<p lang="en-US">Suppose you do your program development using the most recent version of Java, but you carefully avoid using any of its new features.  Suppose your program could be run with an older version of the JRE, such as Java 1.3.  Should your program state and enforce use of Java 1.3 as its minimum JRE version?  Sun (now Oracle) recommends always using the most recent version of Java.</p>
<p lang="en-US">I went back and forth on this.  I hated to force the user to install a newer version of Java if my program would work fine on the version of Java he already has on his computer.  However, it is a poor business practice to claim a program will work in a particular environment if you haven&#8217;t actually verified that it will work in that environment.  I wasn&#8217;t sure if I would very easily be able to test my program on the older version of the JRE.</p>
<p lang="en-US">Finally I decided that the surest way to warrant the quality of my program is to claim whatever version of Java I used to compile, build, and test my program as the minimum version of Java required.  So if I do all my development work with the latest version of Java, that is the version that I state as the minimum version of Java required for my program.  Besides, Java technical support is only available for issues found in the latest version of Java.</p>
<h1>Require the Minimum Version of Java When the Program Runs</h1>
<p lang="en-US">In a prior blog post, <a title="Should You Create a Windows .EXE Wrapper for Java Programs?" href="http://www.godtlandsoftware.com/word-press/2011/05/27/should-you-create-a-windows-exe-wrapper-for-java-programs/">Should You Create an .EXE Wrapper for a Java Program</a>, I discussed my favorite free tool for creating an .exe wrapper, jStart32.  An .exe wrapper is simply a small program file with an .exe extension that will call another type of program, in this case a Java program, with all the program&#8217;s required parameters.</p>
<p lang="en-US">Some of the settings for creating an .exe wrapper using jStart32  include:</p>
<ul>
<li>
<p lang="en-US">Minimal Java Version</p>
</li>
<li>
<p lang="en-US">Display when no JRE found</p>
</li>
<li>
<p lang="en-US">Display when JRE version is too low</p>
</li>
</ul>
<p lang="en-US">By setting these options, the program&#8217;s exe wrapper won&#8217;t run on a computer that does not meet the minimum JRE requirements for the program.</p>
<h1>Require the Minimum Version of Java When the Program is Installed</h1>
<p lang="en-US">By placing the minimum JRE requirements on the .exe wrapper as stated above, you enforce the requirement only when the user tries to start your program by running the .exe file.  But what if he instead tries to start your program by double clicking its executable .jar file?  No minimum JRE requirement is checked when the user directly starts an executable .jar file.</p>
<p lang="en-US">To avoid such problems I would recommend that you also make sure the user has the minimum JRE installed on his computer when he installs your program.  Your program&#8217;s install wizard should verify that Java is installed and that it is the same version that you require, or newer.  You could then abort installation of your program if the computer doesn&#8217;t meet your minimum Java requirement.  This would save the user from installing a program that he cannot use on his computer.</p>
<h1>Conclusion</h1>
<p lang="en-US">Set your minimum JRE requirement to the version of Java that you used to compile, build, and test your program.  Enforce that minimum JRE requirement both when the program is installed and when the program is run.</p>
<p lang="en-US">But what should you do if he doesn&#8217;t have the minimum version of Java?  The above steps would simply not allow such a user to use your program.  It would be even more helpful if you instead helped him get the correct version of Java so he could run your program.  What to consider when setting that up will be the topic of my next blog article.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/07/24/the-minimum-java-runtime-environment-jre-for-your-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Distribute Java External Jar Files</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/07/10/how-to-distribute-java-external-jar-files/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/07/10/how-to-distribute-java-external-jar-files/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 17:39:38 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>
		<category><![CDATA[Distribute a Program]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=230</guid>
		<description><![CDATA[You can save a lot of time and effort by using java code that others have already written. Such code is usually available as external jar files. But how do you distribute that code with your program? Check the License Agreement Before you decide to use code that someone that else wrote, check the license &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/07/10/how-to-distribute-java-external-jar-files/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>You can save a lot of time and effort by using java code that others have already written.  Such code is usually available as external jar files.  But how do you distribute that code with your program?</p>
<h1>Check the License Agreement</h1>
<p lang="en-US">Before you decide to use code that someone that else wrote, check the license agreement for that code.  Are you allowed to use it for commercial use, or only for personal use?  Are there any other restrictions?</p>
<p>Is the code bundled in a jar file?  Are you required to keep that code in its original form?  Are you allowed to redistribute the jar file?</p>
<p>If you are not allowed to redistribute an external jar file, do not use it in your program.  You would not be able to sell your program, let alone run your program on any other computer, if you can&#8217;t redistribute the external jar file.</p>
<p>The rest of this article assumes the code you want to use is bundled in an external jar file which you are allowed to redistribute.</p>
<h1>Build Your Jar File</h1>
<p lang="en-US">If you&#8217;ve been working with Java, you will have learned that you can easily bundle all your code into a single executable jar file.  But what do you do with the external jar files that your program requires?</p>
<p>I heard someone once suggest that you should unpack the external jar file, then bundle all its objects into your jar file.  This would simplify distributing your program since you would then have everything in one jar file.  However, this likely breaks the license agreement for your allowed use of the external jar file.</p>
<p>Instead, plan to distribute both your program&#8217;s jar file and the external jar file as separate jar files.  For your program to still work, include the classpath to the required external jar file in the manifest of your program&#8217;s jar file.</p>
<h1>Build an Install Wizard</h1>
<p lang="en-US">How will your program&#8217;s jar file&#8217;s manifest know where the external jar file will be installed on the next computer?  It&#8217;s easy if you control the installation of all the external jar files.  You may do so by providing an install wizard for your program.</p>
<p>An install wizard can take any number of required resources for your program and install them where you want them on the user&#8217;s computer.  Your install wizard should make sure that the external jar files are installed in expected locations relative to where your program&#8217;s jar file is installed.  Then your programs jar file manifest should include classpaths to those expected relative locations of the required external jar files.</p>
<h1>Conclusion</h1>
<p lang="en-US">Read the license agreement of any external jar file that you want to use in your program.  The safest way to package a redistributable external jar file with your program is to keep it in its original jar file form.  Create an install wizard to install all your program&#8217;s required resources.  By doing so, your program should be able to find and access all its required external jar files.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/07/10/how-to-distribute-java-external-jar-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a File Type Association</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/06/26/create-a-file-type-association/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/06/26/create-a-file-type-association/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 19:01:57 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>
		<category><![CDATA[Favorite Free Programs]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=222</guid>
		<description><![CDATA[Double clicking a .doc file will usually start Microsoft Office. Double clicking a .pdf file will usually start Adobe Acrobat Reader. By assigning a default program to a file extension you create a file type association. Any program, even programs you wrote, can be assigned as the default program for any file extension. Creating a &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/06/26/create-a-file-type-association/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p lang="en-US">Double clicking a .doc file will usually start Microsoft Office.  Double clicking a .pdf file will usually start Adobe Acrobat Reader.  By assigning a default program to a file extension you create a file type association.  Any program, even programs you wrote, can be assigned as the default program for any file extension.      Creating a file type association for your program is one more important software deployment step that makes your program easier for others to use.</p>
<h1>How Do File Type Associations Work?</h1>
<p>File type associations associate types of data files with programs.  The computer operating system recognizes a data file type by its extension, such as “.doc”, “.pdf”, or “.jpg”. Only one program may be associated as the default program for a particular file type at any time.  The install wizard of a program may automatically register a data file type with its own program.  A user may at any time manually change system settings so a data file type is assigned to a different default program. Therefore, the program associated with each data file type may be different on every computer.</p>
<p>In order for a program to work with the associated file type, the program must be coded to accept the name of a file as an input parameter.  The program must then be able to read that data file, process the data in that file, and run successfully using the data that was in that input file.  If the program requires data from more than one file, it must be able to locate the additional required files on its own, possibly based on the data that was in the first data file.  The only input that will come into a program when a data file is double clicked is the name of the clicked file.</p>
<h1>Manually Set a File Type Association</h1>
<p>When you double click a file with an extension that is not yet associated with a program, Windows will prompt you to choose a program for opening that type of file.  This creates a file type association for files with that extension.</p>
<p>When you double click a file with an extension that is already associated with a different program, you will not get the opportunity to choose another program.  If you want to manually change the program associated with a particular file extension, you must go through the Windows Control Panel options to assign a different program to that file type.</p>
<h1>Automatically Set a File Type Association</h1>
<p lang="en-US">Many programs set their file type association as part of their install process.  This is preferred to expecting the user of the program to set up the file type association manually.</p>
<p>Another of my favorite free programs is Inno Setup.  I use it to create the install wizards for my programs.  Inno Setup can be downloaded from <a title="Inno Setup" href="http://www.jrsoftware.org">http://www.jrsoftware.org</a>.  One of the many things you can configure for your install wizard using Inno Setup is automatic configuration of a customized file type association.</p>
<h1>File Type Name and Icon</h1>
<p lang="en-US">When you configure a file type association in Inno Setup, you can also indicate the file type name and file type icon.  In other words, when your program is installed and the file type associations are automatically created, any file with that extension listed in Windows Explorer or on the computer desktop will be displayed using the icon and type name you assigned to that file type.  This gives your program a much more polished look.</p>
<h1>Scope of a File Type Association</h1>
<p lang="en-US">File type associations may be set for either all users of the computer or only the current user.  When you set the file type association manually as described above, it sets the file type association for the current user only.  When you set a file type association automatically during the install of the program, you probably want it set for all users of the computer.  However, current user associations take priority over all users of the computer.  Current User associations will not be reset to match the new setting for all users.</p>
<p lang="en-US">This became a problem for me when I was working on one of my test programs.  I gave my data file for my Hello World program an extension of .hwd.  Before I set up my file type associations, I unwittingly manually assigned Notepad to open .hwd files.  Unfortunately, when I eventually set up a file type association for .hwd files to default to my Hello World program for all users of my computer, .hwd files still defaulted to open with Notepad for me.  The current user .hwd file type association to Notepad was an unwanted association that I needed to delete.</p>
<p>Windows XP had an option to delete any unwanted file type associations.  There is no such option with Windows Vista and Windows 7.   To get around this problem, I recommend another of my favorite free programs that I found, Unassoc.exe.  It may be used to remove any unwanted file type associations in Windows Vista and Windows 7.  You can download Unassoc.exe from <a title="Unnassoc.exe" href="http://www.winhelponline.com/articles/231/1/An-Utility-to-Unassociate-File-Types-in-Windows-7-and-Vista.html">http://www.winhelponline.com/articles/231/1/An-Utility-to-Unassociate-File-Types-in-Windows-7-and-Vista.html</a></p>
<h1>Can You Claim Any File Extension as Your Own?</h1>
<p lang="en-US">Actually, you can.  There is no global database where you need to register your use of a file extension for your program.  There is nothing that will prevent you from associating your program with an already used  file extension.  However, it is to your advantage to try to come up with a file extension that no one else (or at least, not many others) are using.   Otherwise, there may be data files out there for other programs that would not work with your program.</p>
<h1>Conclusion</h1>
<p lang="en-US">Creating file type associations is one more deployment step that makes your program easier for others to use.  Write your program so it accepts the name of a data file as input.  Then set up a file type association as part of the installation of your program.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/06/26/create-a-file-type-association/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protect Your Program Code – Obfuscate It</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/06/19/protect-your-program-code-%e2%80%93-obfuscate-it/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/06/19/protect-your-program-code-%e2%80%93-obfuscate-it/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 13:54:53 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>
		<category><![CDATA[Favorite Free Programs]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=217</guid>
		<description><![CDATA[It&#8217;s depressing to read online just how easy it is for someone to decompile Java class file byte code, to turn it back into the original Java source code. You can&#8217;t prevent someone from decompiling your code, but you can make the decompiled code more difficult to understand. You can rename objects, variables, and method &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/06/19/protect-your-program-code-%e2%80%93-obfuscate-it/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s depressing to read online just how easy it is for someone to decompile Java class file byte code, to turn it back into the original Java source code.  You can&#8217;t prevent someone from decompiling your code, but you can make the decompiled code more difficult to understand.  You can rename objects, variables, and method names to meaningless symbols; and rearrange and change code in such a way that it will still run the same way but is harder to understand.  This process is called code obfuscation.</p>
<h1>Two Reasons to Obfuscate Your Code</h1>
<p lang="en-US">One reason to obfuscate program code is to protect your intellectual property.   You don&#8217;t want someone else to decompile your code and use pieces or all of it as he wishes.  Though you can&#8217;t prevent someone from decompiling your code, if he can&#8217;t understand the code, your coding secrets may remain secret. He may decide to not use any of your code in his own programs if he cannot figure out what the various parts of your code do.</p>
<p>Another benefit of obfuscating program code is to improve performance.  How can obfuscation improve performance?  First, most obfuscators remove unused classes, variables, and methods, thus reducing the size of the executable files.  Many of the longer names you used for objects, variables, and methods are changed to smaller, meaningless names, so the executable file will be smaller.  Smaller executable files load faster and consume less memory. Some obfuscators may also move code around in ways that improve performance.</p>
<h1>Reasons to Not Obfuscate Your Code</h1>
<p lang="en-US">A big disadvantage of obfuscated code is that it is normally very difficult to debug.  This isn&#8217;t as much of a problem with Java because Java obfuscation is performed on the byte code, not the source code.  The source code will still be untouched for debugging. However, if you receive a runtime error with a stack trace, it could be more difficult to locate what triggered the error, because the stack trace will give the identifier names and line numbers based on the obfuscated byte code.</p>
<p>As you decide whether to obfuscate your code, be aware of the limitations. At best, obfuscation merely makes it time-consuming, not impossible, to reverse engineer a program. Obfuscation makes your code a little more difficult for others to examine for security weaknesses. However, when security is important, you must use measures more effective than obfuscation.</p>
<h1>Let a Program Do It</h1>
<p lang="en-US">What&#8217;s the  easiest way to systematically rename identifiers, move code around, and  make it difficult to read?  Let a program do it.  ProGuard is another of  my favorite free programs.  ProGuard is an open source program that  obfuscates Java program code and performs code optimization.  It does  all its work on the generated class files, never touching the source  code.</p>
<p>You can download ProGuard from <a title="ProGuard" href="http://proguard.sourceforge.net/"> http://proguard.sourceforge.net/</a>.  One of the many features I like about  ProGuard is that it can be run as an Ant task, making code  obfuscation an automated part of my build process.</p>
<h1>Conclusion</h1>
<p lang="en-US">If you obfuscate your code, it will be more difficult, but not impossible, for others to examine the coding techniques you used, and to copy your code.  Obfuscating your code may also make your program perform better.  However, obfuscating your code may make your program more difficult to debug.  Whether or not you should obfuscate your code is something you must decide for yourself.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/06/19/protect-your-program-code-%e2%80%93-obfuscate-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a Readme.txt File</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/06/12/create-a-readme-txt-file/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/06/12/create-a-readme-txt-file/#comments</comments>
		<pubDate>Sun, 12 Jun 2011 13:18:54 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=211</guid>
		<description><![CDATA[A readme.txt file is important.  If  someone has problems installing your  program, he will likely look for your readme.txt file for answers.  Examining a readme.txt file is also the easiest way for someone to determine the purpose of a program without starting the program itself. What Should You Include in a Readme.txt File? Include any &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/06/12/create-a-readme-txt-file/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>A readme.txt file is important.  If  someone has problems installing your  program, he will likely look for your readme.txt file for answers.  Examining a readme.txt file is also the easiest way for someone to determine the purpose of a program without starting the program itself.</p>
<h1>What Should You Include in a Readme.txt File?</h1>
<p>Include any combination of the following in your readme.txt file:</p>
<ul>
<li>Name, version, description, and/or features of the program.</li>
<li>System requirements.</li>
<li>Install, uninstall, configuration, and operating instructions.</li>
<li>Files list.</li>
<li>Credit, acknowledgments, contact information, and copyright.</li>
<li>Known bugs and a change log.</li>
</ul>
<p>It is up to you which items you feel would be useful to users of your program, and the level of detail you should provide.</p>
<h1>How to Create a Readme.txt File</h1>
<p>Like the license agreement file, <a title="Create a Software License Agreement" href="http://www.godtlandsoftware.com/word-press/2011/06/04/create-a-software-license-agreement/">Create a Software License Agreement</a>, the readme.txt file should be a simple text document.  Create the readme.txt file using a simple text editor, such as Windows Notepad. Every computer should be able to recognize and open a .txt file with a simple text editor.</p>
<p>When you create the readme.txt file, insert carriage returns at the end of each line of each paragraph. That will keep your  text nicely formatted whether or not the user has word wrap turned.</p>
<p>Also, by creating the readme.txt file as a simple text document, it may easily be used as input to other applications. For example, the program I use to create the install wizard for my programs can import the readme text from a simple text document and give the user the option to view the text when the program is installed.</p>
<h1>Conclusion</h1>
<p>The readme.txt file should identify your program, help the user start using it, and lead him to what to do next if he runs into problems.  Create a readme.txt file that is easy to read with the simplest of text editors.  Remember, the readme.txt file may be the first thing the user reads about you or your program.</p>
<div class="mcePaste" style="width: 1px;height: 1px;overflow: hidden">
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Create a Readme.txt File</span></span></p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">A readme.txt file is important.  If  someone has problems installing your program, he will likely look for your readme.txt file for answers.  Examining a readme.txt file is also the easiest way for someone to determine the purpose of a program without starting the program.</span></span></p>
<p style="margin-bottom: 0in">&nbsp;</p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">What Should You Include in a Readme.txt File?</span></span></p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Include any combination of the following in your readme.txt file:</span></span></p>
<p style="margin-bottom: 0in">&nbsp;</p>
<ul>
<li>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Name, 	version, description, and/or features of the program.</span></span></p>
</li>
<li>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">System 	requirements.</span></span></p>
</li>
<li>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Install, 	uninstall, configuration, and operating instructions.</span></span></p>
</li>
<li>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Files 	list.</span></span></p>
</li>
<li>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Credit, 	acknowledgments, contact information, and copyright.</span></span></p>
</li>
<li>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Known 	bugs and a change log.</span></span></p>
</li>
</ul>
<p style="margin-bottom: 0in">&nbsp;</p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">It is up to you which items you feel would be useful to users of your program, and the level of detail you should provide.</span></span></p>
<p style="margin-bottom: 0in">&nbsp;</p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">How to Create a Readme.txt File</span></span></p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Like the license agreement file, How to Create a License Agreement, the readme.txt file should be a simple text document.  Create the readme.txt file using a simple text editor, such as Windows Notepad. Every computer should be able to recognize and open a .txt file with a simple text editor.</span></span></p>
<p style="margin-bottom: 0in">&nbsp;</p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">When you create the readme.txt file, insert carriage returns at the end of each line of each paragraph. That will keep your  text nicely formatted whether or not the user has word wrap turned.</span></span></p>
<p style="margin-bottom: 0in">&nbsp;</p>
<p><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Also, by creating the readme.txt file as a simple text document, it may easily be used as input to other applications. For example, the program I use to create the install wizard for my programs can import the readme text from a simple text document and give the user the option to view the text when the program is installed.</span></span></p>
<p style="margin-bottom: 0in">&nbsp;</p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">Conclusion</span></span></p>
<p style="margin-bottom: 0in"><span style="font-family: PalatinoLinotype,serif"><span style="font-size: x-small">The readme.txt file should identify your program, help the user start using it, and lead him to what to do next if he runs into problems.  Create a readme.txt file that is easy to read with the simplest of text editors.  Remember, the readme.txt file may be the first thing the user reads about you or your program.</span></span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/06/12/create-a-readme-txt-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a Software License Agreement</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/06/04/create-a-software-license-agreement/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/06/04/create-a-software-license-agreement/#comments</comments>
		<pubDate>Sat, 04 Jun 2011 21:48:41 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>
		<category><![CDATA[Favorite Free Programs]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=205</guid>
		<description><![CDATA[You&#8217;ve seen all sorts of license agreements. They appear when you install other people&#8217;s software. You may have hated them. You may not have bothered to read them. But now that you are selling your own software, it is time to realize that the license agreement is very important, and that you need one too. &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/06/04/create-a-software-license-agreement/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve seen all sorts of license agreements. They appear when you install other people&#8217;s software. You may have hated them. You may not have bothered to read them. But now that you are selling your own software, it is time to realize that the license agreement is very important, and that you need one too.</p>
<h1>What Should You Put in a License Agreement?</h1>
<p>You may write your own license agreement, including whatever you feel is important. I suggest you read through the license agreements of other software you&#8217;ve purchased, especially those that might be similar to your software, and choose the topics and thoroughness that you liked most. Also be aware of things that you didn&#8217;t like about others&#8217; license agreements. For example, blocks of text in all capital letters are difficult to read.</p>
<p>Legal considerations of what should be included, and the exact terms to use, is beyond the scope of this blog entry.  Consult an attorney if you have specific questions about the content of your license agreement.</p>
<h1>Make Your License Agreement Easy to Read</h1>
<p>You&#8217;ll want users to be able to read your license agreement with the simplest of editors.  Do not force the user to purchase a copy of Microsoft Office or to install Adobe Acrobat Reader so he can read your license agreement.  Such requirements would only persuade the user to not bother reading your license agreement.</p>
<p>A common practice is to create the license agreement using a simple text editor, such as Windows Notepad, and give the license file an extension of .txt.  Every computer should be able to recognize and open a .txt file with a simple text editor.</p>
<p>Another consideration is that even with the simplest of editors, the user may not have word wrap turned on when viewing your license agreement.  You don&#8217;t want text disappearing off the right edge of the text viewer to prevent him from reading your entire license agreement.  Insert carriage returns to end each line of each paragraph.  Keep each line short. It is better to have the lines too short than too long.</p>
<p>Also, by creating your license agreement as a simple text document, it may easily be used as input to other applications.  For example, the program I use for creating the install wizard for my programs can import the license agreement from a simple text document and display agreement during the install process.</p>
<h1>Require Acceptance During Program Install</h1>
<p>The only chance you will get to actually enforce the terms of your license agreement is by making the user&#8217;s agreement a condition of the installation of your program.  You may easily set this up if you use another of my favorite free programs, Inno Setup, for creating your program&#8217;s install wizard.  If you created your license agreement as a simple text document, Inno Setup can show the user the text from that document during installation of your program, and cancel the installation if the user does accept it.</p>
<p>Of course, that does not guarantee that the user really does agree to it, or even that he actually read your entire agreement.  But at least you can be assured that he really did consent to the terms of your license agreement.</p>
<h1>Make Your License Agreement Easy to Find</h1>
<p>If you want a user to honor the terms of your license agreement, he has to be able to easily find your license agreement.  Though you may have shown him the license agreement when he installed your program, he may have reason to check the terms of your license agreement again at a later date.  For example, after using your program for awhile, maybe he is wondering if he is allowed to install it on a second computer, make backup copies, or sell it to someone else.  Whether or not you allow these things should be clearly stated in your license agreement.   Consider making your license agreement easy to find by adding it to the Windows Start Programs menu and/or by adding it to your website.</p>
<h1>Conclusion</h1>
<p>A license agreement is an important part of making your program market ready.  You must make it clear what you will allow and won&#8217;t allow the user to do with your program.  Then make your license agreement a condition of installing your program, make it easy to read, and make it easy to find.  None of this guarantees every user will honor the terms of your license agreement, but at least you will have made the conditions of use known and he will have accepted your terms.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/06/04/create-a-software-license-agreement/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Should You Create a Windows .EXE Wrapper for Java Programs?</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/05/27/should-you-create-a-windows-exe-wrapper-for-java-programs/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/05/27/should-you-create-a-windows-exe-wrapper-for-java-programs/#comments</comments>
		<pubDate>Fri, 27 May 2011 23:44:28 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>
		<category><![CDATA[Favorite Free Programs]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=193</guid>
		<description><![CDATA[To make your program market ready, users should be able to start your program by double clicking a file. Support for this is not automatically provided for Java programs. Even double clicking an executable jar file will not start your program if the user&#8217;s computer isn&#8217;t set up correctly, Why Not Just Use an Executable &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/05/27/should-you-create-a-windows-exe-wrapper-for-java-programs/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>To make your program market ready, users should be able to start your program by double clicking a file.  Support for this is not automatically provided for Java programs.  Even double clicking an executable jar file will not start your program if the user&#8217;s computer isn&#8217;t set up correctly,</p>
<h1>Why Not Just Use an Executable Jar File?</h1>
<p>I first experienced the problem with double clicking executable jar files when I gave my daughter a copy of one of the first programs I was working on.  I sent her the executable jar file and instructed her to double click the file to start my program. I had many Java tools installed on my computer.  When I installed those Java tools, file associations were set up so double clicking a .jar file would automatically call Java.  However, my daughter had an unpack utility installed on her computer.  The unpack utility was for unpacking any packed files, including jar files.  So her computer had file associations set up so double clicking a .jar file would automatically unpack the jar file.  Double clicking my program&#8217;s jar file on her computer unpacked it instead of calling Java.</p>
<p>Therefore, double clicking an executable jar file may have different behaviors on different computers.  But as stated above, for your program to be market ready, users should be able to start your program by double clicking a file.</p>
<h1>Could you Change the File Association?</h1>
<p>You could code the installation of your program to automatically set a file association for .jar files to call Java.  Then you would be assured that double clicking your executable jar file would start your program, at least until someone did something to change file associations on that computer again.  However, I think changing such file associations for file types that may be used by many different programs takes too many liberties with another&#8217;s computer.  Don&#8217;t you hate it when you install a program and it manipulates settings you didn&#8217;t want it to change?</p>
<h1>Create an EXE Wrapper</h1>
<p>Instead, I prefer to provide a separate file the user can double click to start the program.  In other words, I create an .exe wrapper.  An .exe wrapper is simply a small program file with an .exe extension that will call another type of program, in this case a Java program, with all the program&#8217;s required parameters.  Double clicking that .exe file provides the exact response one has come to expect from .exe files.  Plus, your program then has no dependencies on a file type association.</p>
<h1>Doesn&#8217;t That Limit Your Program to Windows?</h1>
<p>OK, so you&#8217;re thinking you went through all the trouble of writing a program in Java so it can run on any operating system, and now I am asking you to restrict it to Windows by starting it with an .exe wrapper.   Yes, it is true that the .exe wrapper I&#8217;m asking you to put around your program runs only in Windows.  But take a look at other programs that are available for many different operating systems.  Notice that they provide different installers for each operating system, even for those programs that were created using Java.  Create the .exe wrapper only for the installer you create for the Windows operating system.  You could provide other installers, and maybe other wrappers, for other operating systems.</p>
<h1>jStart32</h1>
<p>I looked at a few of the available free programs that I found that may be used to create an .exe wrapper for Java programs.  Though it is an old program, and it has a quirk I need to work around, I found jStart32 to be by far the easiest to use.  You can download jStart32 from<a title="jStart32" href="http://sourceforge.net/projects/jstart32/"> http://sourceforge.net/projects/jstart32/</a>.</p>
<p>What&#8217;s its quirk?  It doesn&#8217;t recognize icon libraries.  When you create the .exe wrapper, you may specify the .ico file for your program&#8217;s icon.  jStart32 assigns the first icon in the icon library, which is typically very low resolution, as the program&#8217;s icon.  See my blog article on <a title="Create Your Own Icons" href="http://www.godtlandsoftware.com/word-press/2011/04/17/153/"> Create Your Own Icons</a> for an explanation of icon libraries and how to create your own.  Fortunately, I can get around this quirk by assigning the full icon library to the .exe file as part of my program&#8217;s install wizard.  This replaces the default, low resolution icon that was assigned by jStart32.</p>
<h1>Conclusion</h1>
<p>Make your program market ready by making it easy to use.  Make it easy to use by allowing the user to start your program by double clicking a file.  Therefore, one more step in deploying your Java programs should be to create an .exe wrapper for the Windows version of your program.</p>
<p>jStart32 makes it easy to create the .exe wrapper.  However, if you use jStart32 to create the .exe wrapper, assign a full icon library to the .exe wrapper as part of the install process of your program.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/05/27/should-you-create-a-windows-exe-wrapper-for-java-programs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Integrated Help and a User&#8217;s Guide for Your Programs</title>
		<link>http://www.godtlandsoftware.com/word-press/2011/05/21/integrated-help-and-a-users-guide-for-your-programs/</link>
		<comments>http://www.godtlandsoftware.com/word-press/2011/05/21/integrated-help-and-a-users-guide-for-your-programs/#comments</comments>
		<pubDate>Sat, 21 May 2011 15:04:13 +0000</pubDate>
		<dc:creator>Annette Godtland</dc:creator>
				<category><![CDATA[Deploy a Program]]></category>
		<category><![CDATA[Favorite Free Programs]]></category>

		<guid isPermaLink="false">http://www.godtlandsoftware.com/word-press/?p=185</guid>
		<description><![CDATA[One of the most important areas of consideration for making a program more marketable is to make it more usable. A key aspect of making a program more usable is the inclusion of online help and a user&#8217;s guide. The JavaHelp System may be used to create a very good, easy to use, user&#8217;s guide &#8230;<div class="font11 margin10t"><a href="http://www.godtlandsoftware.com/word-press/2011/05/21/integrated-help-and-a-users-guide-for-your-programs/"> Continue Reading <span class="meta-nav">&#187;</span></a></div>]]></description>
			<content:encoded><![CDATA[<p>One of the most important areas of consideration for making a program more marketable is to make it more usable. A key aspect of making a program more usable is the inclusion of online help and a user&#8217;s guide.</p>
<p>The JavaHelp System may be used to create a very good, easy to use, user&#8217;s guide for your program that will run on any operating system.  If the program you are creating the help system for is a Java program, you may also integrate your help documents into your program.</p>
<h1>The JavaHelp System</h1>
<p>The JavaHelp System is an open source help system framework that is highly customizable and easy to integrate into Java programs. The JavaHelp System comes with a toolbar, content pane, and navigation pane, and supports a table of contents with an unlimited number of content levels, a searchable index, and full-text search database.</p>
<p>You may download the JavaHelp System from <a title="JavaHelp System" href="http://javahelp.java.net/">http://javahelp.java.net/</a>.</p>
<h1>Creating Your Help Documents</h1>
<p>To create the most basic JavaHelp System:</p>
<ul>
<li>Create a simple HTML file for each 	topic of your help documentation.</li>
<li>Create an XML file that defines 	the tree structure and text to be used in your table of contents.</li>
<li>Create an XML file that maps each 	topic of the table of contents to the appropriate help files.</li>
</ul>
<p>Here is a screen shot of a basic JavaHelp System using the default view configuration.  This help system was created for my sample Hello World application with help topics of Who, What, When, Why, and How.  Each topic has a separate help page. When a topic is selected in the left pane, its corresponding help page is displayed in the right pane.</p>
<p><a href="http://www.godtlandsoftware.com/word-press/wp-content/uploads/2011/05/JavaHelpSystem.jpg"><img class="aligncenter size-medium wp-image-188" src="http://www.godtlandsoftware.com/word-press/wp-content/uploads/2011/05/JavaHelpSystem-300x165.jpg" alt="JavaHelp System Screen Shot" width="300" height="165" /></a>All the window layout, navigation controls, and toolbar options are provided by the JavaHelp System.  All I needed to provide were the HTML help files and two XML files.</p>
<h1>Integrating the JavaHelp System into Your Program</h1>
<p>The JavaHelp System has a complete API interface, made to be accessed from your Java programs.  Using standard Java ActionListeners, you can program any button, menu item, or other Java component of your program to launch the JavaHelp System.  Each ActionListener can be programmed to open directly to its own topic.  This allows you to provide context sensitive help to your program.</p>
<h1>User&#8217;s Guide</h1>
<p>When creating online help for my programs, I like to create an additional separate program which does nothing more than open the same JavaHelp System to its main page.  Users then have access to all my help documentation without needing to first open the program for which it provides the help.  This second program is my User&#8217;s Guide which my program&#8217;s installer adds to the user&#8217;s Windows Start Menu.</p>
<h1>Integrating the Help Documents into Your Website</h1>
<p>Because the help pages of the JavaHelp System are simply HTML files, it is easy to include any or all of the help pages that you created for your program, directly into your website.  This allows your website visitor to learn more about your program before he decides to download or buy your program.</p>
<h1>Advanced Features</h1>
<p>The basic help system is probably sufficient for a fairly small program. However, if the program is large and needs a lot of help documentation, it might be worth adding an index, a glossary, a favorites list, and maybe even search capability.  These capabilities too are all available through the JavaHelp System.</p>
<h1>Conclusion</h1>
<p>When I was trying to get my first program ready for market, I considered other alternatives for my online help documentation.  However, I did not like the effort that would be required to program all my own pop-up windows for help within my program.  I did not like the expense required to create a PDF help system with table of contents capability.  And I thought creating a basic set of HTML help pages lacked many ease of use features that I thought were needed.</p>
<p>I was thrilled when I discovered the JavaHelp System.  The JavaHelp System made it easy for me to provide a full functioning help system to my programs with a minimal of effort.  And best of all, it is available for free!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.godtlandsoftware.com/word-press/2011/05/21/integrated-help-and-a-users-guide-for-your-programs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

