<?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>geedew &#187; Development</title>
	<atom:link href="http://www.geedew.com/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geedew.com</link>
	<description>flirting with the accessible web</description>
	<lastBuildDate>Wed, 13 Apr 2011 22:46:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Developing a Robust Build Process Using Phing</title>
		<link>http://www.geedew.com/2011/04/13/developing-a-robust-build-process-using-phing/</link>
		<comments>http://www.geedew.com/2011/04/13/developing-a-robust-build-process-using-phing/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 22:46:59 +0000</pubDate>
		<dc:creator>drew</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Phing]]></category>

		<guid isPermaLink="false">http://www.geedew.com/?p=297</guid>
		<description><![CDATA[What is Phing? Phing is a PHP build process that uses XML , ANT style syntax. At some point in development, the choice is made to begin professional work. If more than 1 developer contributes to the effort, then an (&#8230;)</p><p><a href="http://www.geedew.com/2011/04/13/developing-a-robust-build-process-using-phing/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h3>What is Phing?</h3>
<p><strong>Phing is a PHP build process that uses XML , ANT style syntax.</strong></p>
<p>At some point in development, the choice is made to begin professional work. If more than 1 developer contributes to the effort, then an the easy mode of keeping in sync with that person and, in the future, others that may join the effort is required. Because not all developers are alike, and not all hosting providers are alike, you must have a solid build process of your code.  The build process automates the routines that every developer must do, either daily, hourly, or with every code change as well as when code is pushed into client facing distributions.  Phing is an XML to PHP build process that imitates the ANT build process that many development shops are used to.  As a PHP developer, Phing is much easier for me to work with and get things done, as well as keeps things simple when needing to update the build process.</p>
<p><span id="more-297"></span></p>
<h3>Installing Phing</h3>
<p><strong>Dependencies :</strong></p>
<p><a title="Phing Setup" href="To use Phing you must have installed PHP version 5.2 or above compiled --with-libxml2, as well as --with-xsl if you want to make use of advanced functionality." target="_blank">Straight from the source</a>, &#8220;To use Phing you must have installed PHP version 5.2 or above compiled &#8211;with-libxml2, as well as &#8211;with-xsl if you want to make use of advanced functionality.&#8221; I would hope that if you are doing any serious PHP development, you would already meet these requirements.  If you are needing to upgrade your PHP, then you really should reconsider what you are using PHP for.</p>
<p>My approach to installing Phing is the simplest solution and it follows exactly what the setup guide describes by using Pear.</p>
<pre class="brush: plain; title: ; notranslate">
$ pear channel-discover pear.phing.info&lt;/span&gt;
$ pear install phing/phing
</pre>
<p>You should now be able to test Phing by simply typing &#8216;phing&#8217; from the command line. You should get an error similar to this: &#8216;Buildfile: build.xml does not exist!&#8217;</p>
<h3>Copying and Moving Files</h3>
<p> One of the most important parts of a build process is the ability to move and copy files to different places. Phing makes this easy and allows you to modify the files as you are moving them. Different reasons to have a build process will determine how you would like to set up your folder paths for Phing to manipulate. Let&#8217;s do one that is pretty powerful and pretty simple at the same time: copying all files from a folder, into a single file, located in an entirely different folder.</p>
<p><strong>build.xml</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project name=&quot;MyWebapp&quot; default=&quot;default&quot; basedir=&quot;.&quot;&gt;
&lt;target name=&quot;default&quot;&gt;
 &lt;foreach param=&quot;dirname&quot; absparam=&quot;absname&quot; target=&quot;compile-folder-js&quot;&gt;
  &lt;fileset dir=&quot;./js&quot;&gt;
   &lt;type type=&quot;dir&quot; /&gt;
   &lt;depth max=&quot;0&quot; min=&quot;0&quot; /&gt;
  &lt;/fileset&gt;
 &lt;/foreach&gt;
&lt;/target&gt;
&lt;target name=&quot;compile-folder-js&quot;&gt;
  &lt;mkdir dir=&quot;./${dirname}-js&quot; /&gt;
  &lt;fileset id=&quot;filestocompile&quot; dir=&quot;js/${dirname}&quot;&gt;
   &lt;include name=&quot;**/*.js&quot; /&gt;
  &lt;/fileset&gt;
  &lt;append destFile=&quot;./${dirname}-js/${dirname}.js&quot;&gt;
   &lt;fileset refid=&quot;filestocompile&quot; /&gt;
  &lt;/append&gt;
&lt;/target&gt;
</pre>
<p>Phing works using a Build.xml file to run the commands when Phing is called.  The only requirements of this file are the project tag and a default target. We have set our default target to run code that dives into the ./js folder path; loops through every <em>folder</em> in this path and passes them to another target (compile-folder-js) for processing; one at a time.  Now we can have in our source ./js/jquery/ and ./js/modernizr/ and this will take all JavaScript files send them to the compile-folder-js target.</p>
<p>The compile-folder-js target will loop through the directory that is passed to it and grab all JavaScript files (recursive folder depth because of the **/ ) and append them to a single file under the path ./directory-js/directory.js. This is pretty great when it comes to a production versus a development site. For instance, in a development site, you may have 5 different JavaScript files, but in a Production site, after a build, you could have a single JavaScript file. However, one point to be aware of, the files will be appended in teh order the file system sends them (defaults as alphabetical order).</p>
<h3>Sanitizing Files</h3>
<p>Now that we are concatenating our JS files, we can take it further and do some sanitizing with JSLint. Adding this to our current project is fairly simple. Start by <a href="http://www.javascriptlint.com/download.htm">downloading</a> the most recent version of JSLint for your operating system. Make sure to uncompress the file and remember where you put the uncompressed file.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project name=&quot;MyWebapp&quot; default=&quot;default&quot; basedir=&quot;.&quot;&gt;
&lt;target name=&quot;default&quot;&gt;

 &lt;property name=&quot;jslint&quot; value=&quot;./path/to/jslint/jsl-0.3.0-mac/jsl&quot; /&gt;
 &lt;echo msg=&quot;Checking JS for errors...&quot; /&gt;
 &lt;jsllint haltonfailure=&quot;true&quot; cachefile=&quot;./jslint.cache&quot; executable=&quot;${jslint}&quot; conffile=&quot;./path/to/jslint/jsl.default.conf&quot;&gt;
  &lt;fileset dir=&quot;./js&quot;&gt;
   &lt;include name=&quot;**/*.js&quot;/&gt;
  &lt;/fileset&gt;
 &lt;/jsllint&gt;

 &lt;foreach param=&quot;dirname&quot; absparam=&quot;absname&quot; target=&quot;compile-folder-js&quot;&gt;
  &lt;fileset dir=&quot;./js&quot;&gt;
   &lt;type type=&quot;dir&quot; /&gt;
   &lt;depth max=&quot;0&quot; min=&quot;0&quot; /&gt;
  &lt;/fileset&gt;
 &lt;/foreach&gt;
&lt;/target&gt;
&lt;target name=&quot;compile-folder-js&quot;&gt;
  &lt;mkdir dir=&quot;./${dirname}-js&quot; /&gt;
  &lt;fileset id=&quot;filestocompile&quot; dir=&quot;js/${dirname}&quot;&gt;
   &lt;include name=&quot;**/*.js&quot; /&gt;
  &lt;/fileset&gt;
  &lt;append destFile=&quot;./${dirname}-js/${dirname}.js&quot;&gt;
   &lt;fileset refid=&quot;filestocompile&quot; /&gt;
  &lt;/append&gt;
&lt;/target&gt;
</pre>
<p>We&#8217;ve added a JSLint check that runs through all of the JavaScript files and send them through the JSLint downloaded binary for checking.  The process will now stop if you right improper JavaScript, immediately letting you know if you have issues with your code.</p>
<h3>Compressing Files</h3>
<p>Sometimes, checking your JavaScript for errors, and moving into a single folder is just not enough. You still may want to compress them down, obfuscate them, so that they are at the absolute smallest size possible. For this, a good option is Google Closure Compiler. You can <a href="https://github.com/mathewbyrne/closure-task">get a good task</a> to help with this so that it&#8217;s a drop in solution. Just drop this new task definition into your phing path and you are set. Now our code can implement this piece to get a better JavaScript file.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project name=&quot;MyWebapp&quot; default=&quot;default&quot; basedir=&quot;.&quot;&gt;
 &lt;taskdef name=&quot;googleclosurecompiler&quot; classname=&quot;phing.customtasks.GoogleClosureCompiler&quot; /&gt;

&lt;target name=&quot;default&quot;&gt;
 &lt;property name=&quot;jslint&quot; value=&quot;./path/to/jslint/jsl-0.3.0-mac/jsl&quot; /&gt;
 &lt;echo msg=&quot;Checking JS for errors...&quot; /&gt;
 &lt;jsllint haltonfailure=&quot;true&quot; cachefile=&quot;./jslint.cache&quot; executable=&quot;${jslint}&quot; conffile=&quot;./path/to/jslint/jsl.default.conf&quot;&gt;
  &lt;fileset dir=&quot;./js&quot;&gt;
   &lt;include name=&quot;**/*.js&quot;/&gt;
  &lt;/fileset&gt;
 &lt;/jsllint&gt;

 &lt;foreach param=&quot;dirname&quot; absparam=&quot;absname&quot; target=&quot;compile-folder-js&quot;&gt;
  &lt;fileset dir=&quot;./js&quot;&gt;
   &lt;type type=&quot;dir&quot; /&gt;
   &lt;depth max=&quot;0&quot; min=&quot;0&quot; /&gt;
  &lt;/fileset&gt;
 &lt;/foreach&gt;
&lt;/target&gt;
&lt;target name=&quot;compile-folder-js&quot;&gt;
  &lt;mkdir dir=&quot;./${dirname}-js&quot; /&gt;
  &lt;fileset id=&quot;filestocompile&quot; dir=&quot;js/${dirname}&quot;&gt;
   &lt;include name=&quot;**/*.js&quot; /&gt;
  &lt;/fileset&gt;
  &lt;append destFile=&quot;./${dirname}-js/${dirname}.js&quot;&gt;
   &lt;fileset refid=&quot;filestocompile&quot; /&gt;
  &lt;/append&gt;

 &lt;googleclosurecompiler compilationLevel=&quot;SIMPLE_OPTIMIZATIONS&quot; targetDir=&quot;./${dirname}-js/&quot; failOnError=&quot;true&quot; outputFile=&quot;${dirname}-compressed.js&quot; merge=&quot;true&quot;&gt;
  &lt;fileset dir=&quot;./${dirname}-js/}&quot;&gt;
   &lt;include name=&quot;${dirname}.js&quot; /&gt;
  &lt;/fileset&gt;
 &lt;/googleclosurecompiler&gt;
&lt;/target&gt;
</pre>
<h3>Conclusion</h3>
<p>We&#8217;ve been able to now create a worthwhile setup that allows a webapp to move,verify and compress all of its JavaScript files whenever the command &#8216;phing&#8217; is ran on the path. This is a very simple setup, but one that can really be expanded on. For instance, you can use dates or hashes appended to files so that caching is easier. You can setup a multi-directory structure for better handling of JS versions. You can even pre-gzip your code so that it is much faster for downloads and lighter weight on the server-side load.</p>
<p>Hopefully this will get you into the process of using Phing and developing a solid build process in your web coding.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2011/04/13/developing-a-robust-build-process-using-phing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The new Digg, V4: Quick Review</title>
		<link>http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/</link>
		<comments>http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 03:21:12 +0000</pubDate>
		<dc:creator>drew</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[digg]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.geedew.com/?p=237</guid>
		<description><![CDATA[I&#8217;m a reader of Digg.com. What can I say? I like to hear the quirky stories sometimes and when I come across something intelligent, it makes me feel more like I&#8217;m learning. So when the new Digg was dropped into (&#8230;)</p><p><a href="http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a reader of Digg.com.  What can I say? I like to hear the quirky stories sometimes and when I come across something intelligent, it makes me feel more like I&#8217;m learning.  So when the new Digg was dropped into Beta testing, you bet that I was all over that.  See some screen-shots after the jump.</p>
<p><span id="more-237"></span></p>
<p><b>Logging In</b></p>
<hr />
<p>
The new Digg can be viewed by going to <a href="http://new.digg.com">http://new.digg.com</a> which drops you into a pretty nice looking log in screen.</p>

<a href='http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/login/' title='Login Compared to the Old Digg'><img width="150" height="56" src="http://www.geedew.com/wp-content/uploads/2010/07/Login.png" class="attachment-thumbnail" alt="New login on the left, Old Digg on the right." title="Login Compared to the Old Digg" /></a>
<a href='http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/connections/' title='Connections'><img width="150" height="94" src="http://www.geedew.com/wp-content/uploads/2010/07/Connections.png" class="attachment-thumbnail" alt="This shows the Digg setup page for connections" title="Connections" /></a>
<a href='http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/loadmorebug/' title='LoadMoreBug'><img width="150" height="94" src="http://www.geedew.com/wp-content/uploads/2010/07/LoadMoreBug.png" class="attachment-thumbnail" alt="Bug that shows up when loading too many" title="LoadMoreBug" /></a>
<a href='http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/digg4home/' title='Digg4Home'><img width="150" height="56" src="http://www.geedew.com/wp-content/uploads/2010/07/Digg4Home.png" class="attachment-thumbnail" alt="Current versus New Digg" title="Digg4Home" /></a>

<p><b>Connecting</b></p>
<hr />
<p>
The first time you log in, it has a really easy to follow setup that asks some basic questions for you to connect to other social sites.  I connected them all; Twitter,Google and Facebook. </p>
<p>Apparently not a single friend of mine is currently using Digg V4, no surprise there!</p>
<p><b>Usage</b></p>
<hr />
<p>
Digg is setting itself up in a very good way.  They are re-inventing themselves with this idea.  Before, you could only get Diggs via categories like Top Ten, Technology, etc. or you could find users and view the Diggs that they Dugg.  But now, it is being setup so that you control your Digg feed, according to those users that you Digg.  In which you can then Digg items up.  So from now on Digg will be able to suggest to you, only the items that you really would like to see (mrbabyman all the way!).</p>
<p><b>Bugs</b></p>
<hr />
<p>
I did however encounter a bug, to which I filed a report.  If you try to load more items than there are currently in the system, you get an error stating that there are no more items, but the loading never quits and still shows up as a click-able link.  So there are still some kinks to work out, but I for one think this is a great way to stay ahead of the rest!</p>
<p><b>&#8211; Update &#8211;</b></p>
<p>Another bug was discovered. When clicking to add a link to your account (like adding my website to mine), if you press <enter> after typing in your web address, the form does not submit.  Instead the page refreshes and you lose your previous entry you typed in.  The only way to submit the form it to actually click the button.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2010/07/20/the-new-digg-v4-quick-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Looks: Yahoo! Search Monkey</title>
		<link>http://www.geedew.com/2008/05/12/first-looks-yahoo-search-monkey/</link>
		<comments>http://www.geedew.com/2008/05/12/first-looks-yahoo-search-monkey/#comments</comments>
		<pubDate>Mon, 12 May 2008 11:57:05 +0000</pubDate>
		<dc:creator>drew</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Yahoo!]]></category>

		<guid isPermaLink="false">http://geedew.com/wp-content/uploads/2008/05/12/first-looks-yahoo-search-monkey/</guid>
		<description><![CDATA[So the other day I was invited to try out Yahoo! Search Monkey.  If you haven&#8217;t heard yet, the Yahoo! Develepors Team is looking to set Yahoo! at the cutting edge of the current level of Internet Develepment.  They have (&#8230;)</p><p><a href="http://www.geedew.com/2008/05/12/first-looks-yahoo-search-monkey/">Read the rest of this entry &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>So the other day I was invited to try out Yahoo! Search Monkey.  If you haven&#8217;t heard yet, the <a title="Yahoo! Develepor Team" href="http://developer.yahoo.com/" target="_blank" title="Yahoo! Develepor Team">Yahoo! Develepors Team</a> is looking to set Yahoo! at the cutting edge of the current level of Internet Develepment.  They have realeased a preview (think private beta) testing of SearchMonkey which is the first step to making Yahoo! entirely Web 3.0 (buzzword: sharing social information accross websites, using the internet as a development platform itself).</p>
<p>After loggin in you are given three categories to get started with.  Presentation Applications, Custom Data Services, and Data Feeds.  The first is pretty much defining what you want th individual to see when they run a search using your application.  You can pull from up to 10 URL&#8217;s after defining what information you are looking to grab.  The second, Custom Data Services, is where you are able to construct your own search engine&#8217;ish data path.  You can strip data from pages themselves (think wikipedia) or grab from an API (think facebook).  The last is mainly used for grabbing from RSS feeds and the like.</p>
<p>More to come as I get developing.  I will keep you up to date!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geedew.com/2008/05/12/first-looks-yahoo-search-monkey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

