<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="/templates/default/atom.css" type="text/css" ?>

<feed version="0.3" 
   xmlns="http://purl.org/atom/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/">
    <link href="http://www.digitalcarpenter.com.au/rss.php?version=atom0.3" rel="service.feed" title="Digital Carpenter" type="application/x.atom+xml" />
    <link href="http://www.digitalcarpenter.com.au/"                        rel="alternate"    title="Digital Carpenter" type="text/html" />
    <link href="http://www.digitalcarpenter.com.au/rss.php?version=2.0"     rel="alternate"    title="Digital Carpenter" type="application/rss+xml" />
    <title mode="escaped" type="text/html">Digital Carpenter</title>
    <tagline mode="escaped" type="text/html">Build the web your way</tagline>
    <id>http://www.digitalcarpenter.com.au/</id>
    <modified>2009-06-04T15:18:00Z</modified>
    <generator url="http://www.s9y.org/" version="1.3.1">Serendipity 1.3.1 - http://www.s9y.org/</generator>
    <dc:language>en</dc:language>
    <info mode="xml" type="text/html">
        <div xmlns="http://www.w3.org/1999/xhtml">You are viewing an ATOM formatted XML site feed. Usually this file is inteded to be viewed in an aggregator or syndication software. If you want to know more about ATOM, please visist <a href="http://atomenabled.org/">Atomenabled.org</a></div>
    </info>

    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/26-Doculicious-API-launched.html" rel="alternate" title="Doculicious API launched" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2009-06-04T15:18:00Z</issued>
        <created>2009-06-04T15:18:00Z</created>
        <modified>2009-06-04T15:18:00Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=26</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=26</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/26-guid.html</id>
        <title mode="escaped" type="text/html">Doculicious API launched</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I'm excited to announce the that we've just released the latest version of Doculicious.com which now includes an API. You can check out the <a href="http://docs.doculicious.com/blog/api-launched">release details and the new help documentation</a>  
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/24-Decreasing-AJAX-web-app-loading-times.html" rel="alternate" title="Decreasing AJAX web app loading times" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-12-24T09:39:05Z</issued>
        <created>2008-12-24T09:39:05Z</created>
        <modified>2009-01-06T08:57:51Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=24</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=24</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/24-guid.html</id>
        <title mode="escaped" type="text/html">Decreasing AJAX web app loading times</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                <p>When developing <a href="http://www.doculicious.com" title="Create web forms that download PDF files.">Doculicious</a>, one of my main concerns was how fast the heavy JavaScript parts would load and run in the browser. <a href="http://www.doculicious.com" title="Create web forms that download PDF files.">Doculicious</a> uses a fairly customised version of the <a href="http://dojotoolkit.org/">Dojo Toolkit</a>, and the raw files that were being loaded for some pages added up to over 550KB - made up of about 50 individual files, all being loaded by Dojo with its packaging system. This was fine for development and great for debugging, but I knew I had to do something before this went into production. In this post I'll talk about some of the things we use in <a href="http://www.doculicious.com" title="Create web forms that download PDF files.">Doculicious</a> to make our JavaScript smaller and load faster, but still easy to develop on. Hopefully it should be general enough to help anyone who has a site using JavaScript, but we use Dojo so is a bit focused on its packaging system which includes multiple files at run-time. If your app doesn't use Dojo but has multiple JavaScript files, you'll probably still get some benefit out of this.</p>

<p>There are 2 main ways to speed up a JavaScript application - Make the JavaScript load faster into the browser, and make it run quicker. There's a great article at IBM developerWorks called <a href="http://www.ibm.com/developerworks/web/library/wa-aj-perform/?ca=dgr-lnxw01FasterAjax">AJAX performance analysis</a> that goes into both of these. The first section talks about the tools to use in Web application development - <a href="http://getfirebug.com/">Firebug</a> and <a href="http://developer.yahoo.com/yslow/">YSlow</a>, which are both required tools on any development box I use. The next goes into reducing the network transfer time, and this is where I'll focus on what we did with doculicious.</p>

<h4>Reducing File Size and HTTP requests</h4><p>The Dojo Toolkit uses a packaging system similar to Java, and it's a great way to separate out all the files and keep them organised and easy to develop. We've created our own package for doculicious and one of our JavaScript heavy pages may require up to 50 individual files to be included. Because of current <a href="http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/">browser connection limits</a>, this is way too much, and it's much better to limit the number of JavaScript files to one or two instead of loading many. </p>

<p>What I wanted to do for doculicious was to create individual files for each JS heavy page, with each file including just the JavaScript code it needed. This individual file could then be used with the dojo.js file so that all the required JavaScript for a page would be in 2 files. Because Dojo automatically includes JS files depending on which widgets and functions are used, I needed to define which ones were used on which page so that I could join them all together. Firebug is great for this, and using the <span style="font-weight: bold;">Net</span> tab quickly lets you see all the included JS files:</p>
<img src="http://www.digitalcarpenter.com.au/uploads/firebug.png" style="margin: 10px 10px 0pt 0pt;" title="Firebug" alt="Firbug" />

<p>My initial goal was to create a range of "base" files that could be concatenated together in an Ant script to create a JavaScript file for any doculicious page. Using Firebug to find the common files across each of our pages, I made a list of all the Dojo specific files that were needed, and also of our custom doculicious files. At this point I realised that each of our pages used very similar Dojo functions and widgets, so I made the decision to manually join these together into one file that could be included across all the files I needed. This is probably not the best thing to do if you are using the latest version of Dojo or another packaging system, as when changes are made it will be harder to integrate them, but our base Dojo is version 0.4.3 and I do not plan on upgrading it. We've only found a couple of bugs over the past 18 months, so I'm comfortable that this base is stable. </p>

<p>Concatenating your JavaScript into a single file is great for production code, but you still need to develop on it. So when doing this we need to keep our individual files available for development, while having a simple process to make the production code. I use Eclipse with the MyEclipse plugin as my IDE. The JavaScript project is structured like below, with the <span style="font-weight: bold;">js</span> folder being included in the web project so that it is deployed along with it:</p>

<pre>
<span style="font-weight: bold;">JavaScript Project</span>
&#160;&#160; - <span style="font-weight: bold;">buildscripts</span>
&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">build</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">functions</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">widgets</span>
&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">lib</span>
&#160;&#160;&#160;&#160;&#160; - build.xml
&#160;&#160; -<span style="font-weight: bold;"> js</span>
&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">digitalcarpenter</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">system</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - Command.js
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - DocumentState.js
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - State.js
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - ...
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">widgets
</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - Canvas.js
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - Elements.js
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - ...
&#160;&#160;&#160;&#160;&#160; - <span style="font-weight: bold;">dojo</span>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - dojo_functions_widgets_minimal.js
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; - dojo.js
</pre>
Underneath the <span style="font-weight: bold;">dojo</span> folder is the <span style="font-weight: bold;">dojo_functions_widgets_minimal.js</span> file which contains all the dojo functions and widgets that our pages need. The <span style="font-weight: bold;">digitalcarpenter</span> folder is our base package, and contains all our individual JavaScript files, including widgets and system classes. Under the <span style="font-weight: bold;">buildscripts</span> folder is our build file and a <span style="font-weight: bold;">build</span> folder to hold temp files. The <span style="font-weight: bold;">lib</span> folder holds some tools we will use later. The ant script is pretty basic, here's what it does:
<ol><li>At the beginning we define the paths that are used and the files we are going to create.</li><li>We then build the directory structure for the build</li><li>Then in&#160;<span style="font-weight: bold;">copy</span> we move all the files we are going to use into the <span style="font-weight: bold;">build/functions</span> and <span style="font-weight: bold;">build/widgets</span>. Taking care to not move stuff that isn't needed, such as testing files, images and css.</li><li>Next we define a regular expression replace to remove all lines with "dojo.require" on them. This line is the way Dojo knows which files to include, and it's not needed in our final file because all the code is together. In fact things break if these are left in. Depending on which JS library you use, you may not need to do something similar when cancatenating your files together.</li><li>The next area is where we actually create our specific file. First we copy the base file to our working directory, then we concat all the individual files together, appending them to this file. Order may be important. Some of the widgets in our code include other widgets, so they need to be added before-hand.</li><li>The last step is calling ./lib/custom_rhino.jar. This is the Dojo <a href="http://dojotoolkit.org/docs/shrinksafe">ShrinkSafe</a> application which removes comments and shrinks down the code. I highly recommend that you use this. ShrinkSafe has worked great for all of my JS, and I've never had errors. Because it parses the JavaScript it does a great job. It will even tell me if I've left some horrible bug in the code.</li><li>At the end is the <span style="font-weight: bold;">create</span> and <span style="font-weight: bold;">clean</span> methods you use to run the whole thing.</li></ol><div style="overflow: scroll; height: 400px;"><pre>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;project name="DigitalCarpenter_JavaScript" default="create"
	basedir="."&gt;
	&lt;description&gt;
		Creates the javascript files needed for Doculicious.
	&lt;/description&gt;
	&lt;!-- set global properties for this build --&gt;
	&lt;property name="build" location="build" /&gt;
	&lt;property name="widgets" location="${build}/widgets" /&gt;
	&lt;property name="functions" location="${build}/functions" /&gt;
	&lt;property name="lib" location="lib" /&gt;
	&lt;property name="dojo_src" location="${basedir}/../js/dojo" /&gt;
	&lt;property name="dc_src" location="${basedir}/../js/digitalcarpenter" /&gt;
	
	&lt;property name="dojo_base" value="dojo_base" /&gt;
	&lt;property name="dojo_minimal" value="dojo_functions_widgets_minimal" /&gt;
	&lt;property name="base_workshop_dojo_file" value="workshop_dojo" /&gt;
	&lt;property name="document_workshop_js" value="document_workshop" /&gt;

	&lt;target name="init"&gt;
		&lt;!-- Create the build directory structure used to create the JS files --&gt;
		&lt;mkdir dir="${build}" /&gt;
		&lt;mkdir dir="${widgets}" /&gt;
		&lt;mkdir dir="${functions}" /&gt;
	&lt;/target&gt;
	
	&lt;target name="copy" depends="init"&gt;
		&lt;copy file="${dojo_src}/${base_workshop_dojo_file}.js" todir="${build}" /&gt;
		&lt;copy file="${dojo_src}/${dojo_minimal}.js" todir="${build}" /&gt;
		&lt;copy todir="${functions}"&gt;
			&lt;fileset dir="${dc_src}/system" /&gt;
		&lt;/copy&gt;
		&lt;copy todir="${widgets}" includeEmptyDirs="false"&gt;
			&lt;fileset dir="${dc_src}/widget"&gt;
				&lt;exclude name="<u>_package_</u>.js" /&gt;
				&lt;exclude name="ButtonField.js" /&gt;
				&lt;exclude name="InlineEditor.js" /&gt;
				&lt;exclude name="RichEditor.js" /&gt;
				&lt;exclude name="TestWidget.js" /&gt;
				&lt;exclude name="Popup.js" /&gt;
				&lt;exclude name="templates/*" /&gt;
				&lt;exclude name="templates/buttons/*" /&gt;
				&lt;exclude name="templates/images/*" /&gt;
			&lt;/fileset&gt;
		&lt;/copy&gt;
	&lt;/target&gt;
	
	&lt;target name="remove_dojorequires" depends="copy"&gt;
		&lt;replaceregexp match='dojo.require' replace="//dojo.require" byline="true"&gt;
			&lt;fileset dir="${widgets}"/&gt;
		&lt;/replaceregexp&gt;
		
		&lt;replaceregexp match='dojo.require' replace="//dojo.require" byline="true"&gt;
			&lt;fileset dir="${functions}"/&gt;
		&lt;/replaceregexp&gt;
	&lt;/target&gt;

	&lt;target name="document_workshop" depends="remove_dojorequires"&gt;
		&lt;copy file="${build}/${base_workshop_dojo_file}.js" 
                               tofile="${build}/${document_workshop_js}.js" /&gt;
		&lt;!-- NOTE: The order of the below files is important -
		            later code expects the previous code to be available --&gt;
		&lt;concat destfile="${build}/${document_workshop_js}.js" append="true"&gt;
	    	&lt;filelist id="dw_functions" dir="${functions}"&gt;
			    &lt;file name="Utils.js"/&gt;
			    &lt;file name="SHA1.js"/&gt;
			    &lt;file name="Constants.js"/&gt;
			    &lt;file name="Command.js"/&gt;
			    &lt;file name="DocState.js"/&gt;
			&lt;/filelist&gt;
			&lt;filelist id="dw_widgets" dir="${widgets}"&gt;
				&lt;!-- file name="Resizer.js"/ --&gt;
			    &lt;file name="ImagePicker.js"/&gt;
			    &lt;file name="FloatingImagePicker.js"/&gt;
			    &lt;file name="TextField.js"/&gt;
			    &lt;file name="Element.js"/&gt;
			    &lt;file name="Canvas.js"/&gt;
			    &lt;file name="ColorPalette.js"/&gt;
			    &lt;file name="FontSizePicker.js"/&gt;
			    &lt;file name="FontPicker.js"/&gt;
			    &lt;file name="RichTextToolbar.js"/&gt;
			    &lt;file name="Dialog.js"/&gt;
			&lt;/filelist&gt;
	  	&lt;/concat&gt;
	  	
	  	&lt;antcall target="-rhino-compress"&gt;
			&lt;param name="srcFile" value="${build}/${document_workshop_js}" /&gt;
		&lt;/antcall&gt;
		&lt;!-- Copy the completed file to the js/dojo directory - 
                           will overwrite the one already there --&gt;
		&lt;copy overwrite="true" 
                               file="${build}/${document_workshop_js}.js" 
                               tofile="${dojo_src}/${document_workshop_js}.js" /&gt;
	&lt;/target&gt;
	
	&lt;target name="-rhino-compress" unless="nostrip"&gt;
		&lt;copy overwrite="true" file="${srcFile}.js" tofile="${srcFile}.uncompressed.js" /&gt;
		&lt;java jar="./lib/custom_rhino.jar" 
                              failonerror="true" 
                              fork="true" 
                              logerror="true" 
                              output="${srcFile}.js"&gt;
			&lt;arg value="-strict" /&gt;
			&lt;arg value="-opt"/&gt;
			&lt;arg value="-1" /&gt;
			&lt;arg value="-c" /&gt;
			&lt;arg value="${srcFile}.uncompressed.js" /&gt;
		&lt;/java&gt;
	&lt;/target&gt;
	
	&lt;target name="create" depends="clean, init, copy, remove_dojorequires, document_workshop" 
                          description="creates the javascript files"&gt;
		&lt;echo message="All done! :)" /&gt;
	&lt;/target&gt;

	&lt;target name="clean" description="clean up"&gt;
		&lt;!-- Clean up the files used --&gt;
		&lt;delete dir="${build}" /&gt;
		&lt;delete dir="${widgets}" /&gt;
		&lt;delete dir="${functions}" /&gt;
	&lt;/target&gt;
&lt;/project&gt;
</pre>
</div>

<p>Cool, we've now got our Ant file ready to create the individual files. The example above creates only one file. Our production one creates a couple of different files. Because this allows you to pick and choose individual files you can customise the generated JS very specifically. Doculicious has two main "applications". One is the front end web form and the other is the template/style creator. They use similar functions and widgets, but doing it this way I can save about 30kb on the uncompressed files by only including the stuff each page needs. </p>

<p>Now when I'm developing on my code I can just comment out the single file call at the top of the HTML page and uncomment the dojo.require lines to use the individual files, allowing us to program on nicely formatted files that have comments and line breaks. When everything's tested and ready for prod we just re-comment the dojo.requires, uncomment the individual line, run <span style="font-weight: bold;">ant create</span> and increment the jsVersion variable so that clients get the new version.</p>
<div><pre>
&lt;!-- Comment out the following line to test the individual js files
&lt;script type="text/javascript" src="http://www.digitalcarpenter.com.au/js/dojo/document_workshop.js?v${jsVersion }"&gt;&lt;/script&gt;		 
--&gt;
&lt;script type="text/javascript"&gt;
	&lt;!-- Uncomment these to test the individual js files--&gt;
	dojo.require("digitalcarpenter.widget.Element");
	dojo.require("digitalcarpenter.widget.Canvas");
	dojo.require("digitalcarpenter.system.DocState");
</pre></div>
<p>Now our production code is all nicely together in one file. We still have commented and formatted code to develop on, and running it all through ShrinkSafe has also lowered the file size. Our uncompressed file has gone from 370KB to 262KB, but most importantly we've gone from about 50 individual file calls to 2. The file size still seems large, but with mod_deflate on Apache2 it comes down to 68KB and with aggressive caching, clients should only need to download it when we change it.</p>


  <div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div><!-- technorati tags begin --><p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/AJAX" rel="tag">AJAX</a>, <a href="http://technorati.com/tag/Web%20development" rel="tag">Web development</a>, <a href="http://technorati.com/tag/%20web%202.0" rel="tag"> web 2.0</a>, <a href="http://technorati.com/tag/%20JavaScript" rel="tag"> JavaScript</a>, <a href="http://technorati.com/tag/%20" rel="tag"> </a></p><!-- technorati tags end --> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/21-Blogging-from-Flock.html" rel="alternate" title="Blogging from Flock" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-12-18T21:52:20Z</issued>
        <created>2008-12-18T21:52:20Z</created>
        <modified>2008-12-19T11:37:11Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=21</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=21</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/21-guid.html</id>
        <title mode="escaped" type="text/html">Blogging from Flock</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I installed the <a href="http://www.flock.com">Flock</a> browser a little while ago because I wanted 2 different browsers on my machine for testing websites, and also so I could have multiple sessions running. I initially wanted to use Safari, but then found out it there isn't a version that runs under Ubuntu.<br />
<br />
I'm glad I made this choice. It's funny actually, because I began using it just to test sites, then I noticed it's social media extras, and thought I'd sign up for twitter. Now I'm writing this blog post using it. And after testing my site and doing some browsing, it actually feels a lot faster than Firefox too. I installed Firebug and yslow, so now am pretty happy to make this my default browser.<br />
  <div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div><!-- technorati tags begin --><p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/flock" rel="tag">flock</a>, <a href="http://technorati.com/tag/technology" rel="tag">technology</a>, <a href="http://technorati.com/tag/%20browser" rel="tag"> browser</a></p><!-- technorati tags end --> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/20-A-fun-doculicious-example.html" rel="alternate" title="A fun doculicious example" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-12-17T09:46:26Z</issued>
        <created>2008-12-17T09:46:26Z</created>
        <modified>2008-12-17T12:33:51Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=20</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=20</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/20-guid.html</id>
        <title mode="escaped" type="text/html">A fun doculicious example</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                With the launch of <a href="http://www.doculicious.com">Doculicious.com</a> I thought I'd take the opportunity to post a couple of examples of how it looks and works on an external site.<br />
<br />
The <a href="http://www.digitalcarpenter.com.au/archives/19-Launch-of-www.doculicious.com!.html">original launch article</a> has an example of a business/government form, but I also want to show a more graphical and fun one. The following is an Award Certificate that can be used for many types of occasions. The border, flower decoration and title images are all changeable, just click them to choose a different image.<br />
<br />
This is one of the free awards certificate templates on doculicious.com, so with even just a free account you can copy this and change bits around and put it on your own site or blog. You could create more border and text images to have it work for whatever type of award you like.<br />
<br />
<noframes><div style="margin-bottom: 20px;">Your browser does not support frames, so you can't complete this form here. However, you can <a href="http://www.doculicious.com/img/screenshots/2b9d83ae0a087d5e.pdf">click here to download a PDF file of this form</a></div> </noframes><iframe height="585" allowTransparency="true" frameborder="0" scrolling="no" style="width:704px;border:none" src="http://www.doculicious.com/do/doc?dbt=2b9d83ae0a087d5e-b372b61e52bf72c3&m=edit&auth=0"></iframe> <br />
<small><a href="http://www.doculicious.com/">powered by doculicious</a></small><br />
<br />
 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/19-Launch-of-www.doculicious.com!.html" rel="alternate" title="Launch of www.doculicious.com!" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-12-16T16:04:42Z</issued>
        <created>2008-12-16T16:04:42Z</created>
        <modified>2008-12-17T10:06:46Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=19</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=19</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/19-guid.html</id>
        <title mode="escaped" type="text/html">Launch of www.doculicious.com!</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I'm happy to finally announce the launch of our new web application, <a href="http://www.doculicious.com">www.doculicious.com.</a> It's been under development for the past couple of months, and is a great enhancement on the underlying technology that we've used to build our previous applications.<br />
<br />
Doculicious is similar to our previous sites in that it allows people to create documents in their browser, the difference is that we've opened it up so that anyone can create templates and embed them on their own websites.<br />
<br />
Because of it's support of PDF, Doculicious is perfectly placed to offer solutions similar to what a PDF file solves, and together with it's web based delivery, it can act like a web form too. We've chosen to focus on this idea of merging a web form and a PDF file, and allow the editing of a document directly in the browser using easy and simple fields, just like a web form. It's an alternative to offering a PDF download that offers many other benefits.<br />
<br />
A Doculicious template provides a downloadable PDF, but only after the user has filled in the fields - so the PDF is complete and ready to print, fax, mail or whatever else may be required. After the form is filled out we store the details that were entered and make it accessible to the form owner. This means it can be processed straight away, the data will have less mistakes, there's no retyping or handwriting to read and it's exportable as CSV or as the original PDF. The form owner can go in and edit or add details themselves. There's also integrated notifications, redirection after submissions, editable confirmation pages and you can make unique styles for each template, allowing you to make them match any design. Templates can also be made with a tracking code so when the PDF is printed and sent back, it's easy to match up with the data in the system. <br />
<br />
We're really happy with the current system, but we have many features we want to add, and plan on working with our existing and new clients to keep making Doculicious better.<br />
<br />
Doculicious has a free account that gives almost all the functionality listed above (styles and redirection are the only premium features), so if you have a need for a PDF application form, or a form where you'd like the data in PDF format, or even just a standard web form, give it a try or at least check out the example page and see just a few ways it can be used  <a href="http://www.doculicious.com/do/examples">www.doculicious.com</a><br />
<br />
Make sure you keep reading to see the example template ...<br />
<br />
<br />
 <br /><a href="http://www.digitalcarpenter.com.au/archives/19-Launch-of-www.doculicious.com!.html#extended">Continue reading "Launch of www.doculicious.com!"</a>
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/17-Doculicious.com-Launch-Imminent.html" rel="alternate" title="Doculicious.com Launch Imminent" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-12-09T07:51:00Z</issued>
        <created>2008-12-09T07:51:00Z</created>
        <modified>2009-01-13T09:59:37Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=17</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=17</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/17-guid.html</id>
        <title mode="escaped" type="text/html">Doculicious.com Launch Imminent</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                We plan on launching our new site, doculicious.com, in the next few days. With this launch we will be decommissioning the AustralianBusinessForms.com website, as all the ASIC forms will now be within Doculicious. This is really exciting, and adds a whole new range of features for users, as they can now use front-end web forms to have their clients complete some parts of their forms, while still being able to complete the rest of the form themselves.<br />
<br />
Currently we are clearing out the doculicious test database and forum so it's all shiny and new on launch. Also, after the last Open Coffee meet-up in Sydney I had someone mention a feature that I had planned on implementing, but had put off. On the train ride back I couldn't stop thinking about how I could do it. Luckily, the widgely website had a similar functionality developed, but was not moved into production. When I got back to the office and looked at the code I realised it would do everything required, and more. So my launch plans were put off a little as I put this new change in and had it tested. I was actually happy to do this, as for a while I'd had concerns about launching without this feature .. so hearing that it was something people would want gave me the impetuous to get it in.<br />
 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/16-Proposed-Internet-Filter-in-Australia.html" rel="alternate" title="Proposed Internet Filter in Australia" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-10-27T09:32:20Z</issued>
        <created>2008-10-27T09:32:20Z</created>
        <modified>2008-10-27T09:39:32Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=16</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=16</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/16-guid.html</id>
        <title mode="escaped" type="text/html">Proposed Internet Filter in Australia</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                There's been a little bit of talk in the media lately about the Australian Governments proposed internet filter and the heavy-handed tactics they have used against some ISP employees bagging it. Unfortunately, there's not been enough talk in the media about how bad the filter really is. People need to understand how this solution can't work, and how it could eventually erode our rights.<br />
<br />
I'll be writing about this more in the future, but initially wanted to post a link to the <a href="http://nocleanfeed.com/" title="No internet censorship for Australia">NoCleanFeed.com</a> website and offer my support.<br />
<br />
<br />
<a href="http://nocleanfeed.com"><img width="180px" height="60px" border="0" src="http://nocleanfeed.com/nocensorship.gif"/></a><br />
<br />
 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/15-Map-a-network-drive-from-Windows-to-Linux.html" rel="alternate" title="Map a network drive from Windows to Linux" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-10-17T09:44:37Z</issued>
        <created>2008-10-17T09:44:37Z</created>
        <modified>2008-10-17T10:02:55Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=15</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=15</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/15-guid.html</id>
        <title mode="escaped" type="text/html">Map a network drive from Windows to Linux</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I use rdesktop to connect to my Windows machine for doing Photoshop work. I use the Gimp for some stuff, but I'm much more comfortable in Photoshop so use it for more complex work.<br />
<br />
The default network connection I was getting through rdesktop kept failing, so I wanted to set up a Samba network to access my Ubuntu laptop, as that's where all my files are kept. A quick search on google gave me some tips, but not as much as I'd wanted, so i thought I would document it here in case it can help someone else:<br />
<br />
Hardware:<br/><br />
Laptop - Ubuntu 7.10 Gutsy Gibbon <br/><br />
Desktop - Windows XP Professional sp2<br />
<ul><br />
  <li>First I right clicked the folder on my Ubuntu laptop that I wanted to share, and chose "Share Folder". I didn't have the Samba service installed, so it prompted me to install it.</li><br />
<li>A box popped up with the share name and a drop down box asking how "Share through:" I chose "Windows network (SMB)"</li><br />
<li>After that I thought it would work .. it didn't, so I took a look at "man samba" and the /etc/samba/smb.conf file.</li><br />
<li>I changed the security settings to ensure all user connecting have a user account on the linux laptop. I also changed the windows workgroup to "workgroup" to match my windows network.</li><br />
<li>After a bit of reading through the Google search results and the man files it seemed that Samba has its own password management, so I used the smbpasswd command to create a password for my laptop login.</li><br />
<li>I then rdesktop'ed into the windows box and tested and it all worked!</li><br />
</ul> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/11-Startups-and-Small-Business-2.0.html" rel="alternate" title="Startups and Small Business 2.0" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-08-22T13:40:43Z</issued>
        <created>2008-08-22T13:40:43Z</created>
        <modified>2008-12-16T08:26:02Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=11</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=11</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/11-guid.html</id>
        <title mode="escaped" type="text/html">Startups and Small Business 2.0</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Lately I've been reading about marketing and how to create a marketing plan. One of the things I've seen repeatedly stressed is to define the benefits that your solution has for your customers. Why should they use your application or service over somebody else's? I started to think about the benefits that the Australian Business Forms application gives it's users, such as the convenience and ease of use, the ability to save your progress and no handwriting of forms. However, there are other benefits that the customer can enjoy, ones that are not just a result of the specific problem the application is solving, but benefits inherited from the application provider, the startup: being agile, quick to market, and the ability to utilise the latest technologies, such as web2.0, which enables <a href="http://en.wikipedia.org/wiki/Software_as_a_Service">software as a service</a>. <br />
<br />
Many startup enablers and commentators, such as<a href="http://www.paulgraham.com/"> Paul Graham</a> and <a href="http://www.37signals.com/">37Signals</a>, often mention the ability of a startup to move faster than the big companies. Large companies are usually the slowest in adopting new technologies -  <a href="http://www.informationweek.com/news/internet/webdev/showArticle.jhtml?articleID=207001060">A survey in December 2007 found that 55.2% of companies still use IE 6</a>. This alone would make it hard for their employees to effectively use some new web 2.0 applications. Not only that: how often do these companies upgrade the software that they sell to you, their consumers? Once every 12-18 months or more. Then <em>you</em> have to upgrade your systems and processes, which brings with it a range of other headaches, such as ensuring the compatibility of the new version, the IT costs involved in new hardware, testing, support etc. Whereas during this time, a fast moving startup could be constantly adding new features and content to their web based product, and these things will just flow through to you - and they may not even raise their prices.<br />
<br />
With people now talking about <a href="http://www.readwriteweb.com/archives/11_things_to_know_about_enterprise_20.php">Enterprise 2.0</a> and how large companies are looking into ways that the new technologies such as cloud computing and social networking can help them, it's time for small businesses to use their size to get ahead and utilize the technologies that are out there now. Small businesses that don't have the IT budget to build applications themselves or utilize cloud computing, should be leveraging the agility and technological savvy of the web 2.0 startups that are out there, and thus gain these benefits by proxy. Not only do they get their problem solved, but they also get to move ahead in ways which their larger competitors may not take advantage of for years to come.  
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/8-Researching-for-a-Media-Release.html" rel="alternate" title="Researching for a Media Release" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-08-08T11:38:26Z</issued>
        <created>2008-08-08T11:38:26Z</created>
        <modified>2008-12-16T08:25:18Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=8</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=8</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/8-guid.html</id>
        <title mode="escaped" type="text/html">Researching for a Media Release</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I've been thinking lately about how to get the word out about newly developed web applications and had a chat with a few people at the <a href="http://entrepreneur.meetup.com/1136/">Sydney Open Coffee</a> yesterday about this. An interesting talk with Paul from <a href="http://www.WebEquity.com">WebEquity.com</a> and a conversation on <a href="http://groups.google.com.au/group/silicon-beach-australia">Silicon Beach Australia</a> got me researching media contacts and how to write media releases.<br />
<br />
I found a paid service called <a href="http://www.ozmedia.com">www.ozmedia.com</a> that will send your release to multiple media outlets throughout Australia. I used a demo they had on the site, and it looks pretty cool, but as I'm bootstrapping this, I have to save as much cash as possible ... so will start by doing it all myself.<br />
<br />
A few Google searches later I found a <a href="http://www.ourcommunity.com.au/marketing/marketing_article.jsp?articleId=1524" title="Media Contacts">list of newspaper, TV and radio contacts</a> that can be downloaded as a spreadsheet. So I've now got the beginnings of my media contact list. As stated on that site, there are thousands of other magazines, niche publications, trade mags etc that can be found, but this is a good start. <br />
<br />
A Squidoo lens for<a href="http://www.squidoo.com/free-press-release-services"> free web press releases</a> created by <a href="http://www.tjoos.com/">Bart Jellema from tjoos.com</a> looks to also be a great research time saver for getting some SEO for your startup.<br />
<br />
As for writing the release, there are standards you should stick to. A search on Google about <a href="http://www.google.com.au/search?hl=en&q=writing+press+releases&btnG=Search&meta=">writing media releases</a> finds a bunch of help sites. The main points seem to be:<br />
<br />
<br />
 - Have a catchy title.<br />
 - Make the subject line and first paragraph engaging.<br />
 - Try not to go over 1 page.<br />
 - Include contact details that your are contactable on (Obvious it seems, but many help pages I read stressed it)<br />
 - Put "press release" prominently on it.<br />
 - Put the date it can be released. "For Immediate Release" if you want it to go out straight away<br />
 - Use quotable quotes that the journo's can use.<br />
<br />
<br />
<br />
<br />
<br />
 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/7-Digital-Carpenter.html" rel="alternate" title="Digital Carpenter" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-08-06T18:53:02Z</issued>
        <created>2008-08-06T18:53:02Z</created>
        <modified>2009-01-07T15:10:01Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=7</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=7</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/7-guid.html</id>
        <title mode="escaped" type="text/html">Digital Carpenter</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                Digital Carpenter Pty Ltd is a web development company specialising in making internet applications using some of the latest technologies. Our latest offering is <a href="http://www.doculicious.com" title="Easily create forms and documents you can embed on your website.">www.doculicious.com</a>, an online application that combines web forms and PDF downloads, providing an easy way for people to gather information that they would normally need on a faxed or mailed form. Check out the <a href="http://www.doculicious.com" title="Easily create forms and documents you can embed on your website.">Doculicious website</a> to read more and look at some examples of how it works.<br />
<br />
 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/5-Busy,-busy,-busy.html" rel="alternate" title="Busy, busy, busy" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-07-09T10:27:00Z</issued>
        <created>2008-07-09T10:27:00Z</created>
        <modified>2008-09-01T13:54:19Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=5</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=5</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/5-guid.html</id>
        <title mode="escaped" type="text/html">Busy, busy, busy</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I've been busy hacking away at the code behind <a href="http://www.widgely.com">Widgely,</a> trying to make it into a more modular form so that I can re-use it across some other website ideas I have. This month will be very busy while I get this new idea launched, and make sure that the code is reusable.<br />
<br />
I can see great potential for the template/document creation code behind <a href="http://www.widgely.com">Widgely,</a> and I've got heaps of ideas for how to make some cool sites using it. But I need to focus on some ideas that have the potential for me to make some money from them. I love doing this, but in the end, I have to pay the bills. Widgely is a great website (If I do say so myself :), and so far the users I have seem to like it. Many keep coming back, and I can see through the Google Analytics that they spend a good amount of time on the site, creating documents. But a site like this is hard to monetize untill we have large amounts of users, who will only come when there is content, which only comes when there is a large amount of users, which .... you get the picture.<br />
<br />
So I plan on using the code behind widgely to create some more sites with a greater business flavour. One's that solve some problems for people who are willing and capable of paying. The first will be launched in a couple of weeks, and then I'll be working on another that is really getting me excited <img src="http://www.digitalcarpenter.com.au/templates/default/img/emoticons/smile.png" alt=":-)" style="display: inline; vertical-align: bottom;" class="emoticon" /> 
            </div>
        </content>

        
    </entry>
    <entry>
        <link href="http://www.digitalcarpenter.com.au/archives/10-Welcome-to-the-new-blog.html" rel="alternate" title="Welcome to the new blog" type="text/html" />
        <author>
            <name>Chris Carpenter</name>
                    </author>
    
        <issued>2008-05-15T11:01:00Z</issued>
        <created>2008-05-15T11:01:00Z</created>
        <modified>2008-09-01T13:54:29Z</modified>
        <wfw:comment>http://www.digitalcarpenter.com.au/wfwcomment.php?cid=10</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://www.digitalcarpenter.com.au/rss.php?version=atom0.3&amp;type=comments&amp;cid=10</wfw:commentRss>
    
        <id>http://www.digitalcarpenter.com.au/archives/10-guid.html</id>
        <title mode="escaped" type="text/html">Welcome to the new blog</title>
        <content type="application/xhtml+xml" xml:base="http://www.digitalcarpenter.com.au/">
            <div xmlns="http://www.w3.org/1999/xhtml">
                I've finally replaced the old brochure style website with a blog. The old site was so 2003 ;p<br />
<br />
As I have many new projects launching soon, I thought a blog would be a better way to show what we do here at Digital Carpenter. I'll be trying to move some of the articles we had on the old site over to here, but that is a much lower priority that the current things I'm working on, so the site will most likely look a little blank for a while.<br />
<br />
 
            </div>
        </content>

        
    </entry>
</feed>