<?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"
	>

<channel>
	<title>SitePoint Blogs &#187; Tech</title>
	<atom:link href="http://www.sitepoint.com/blogs/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sitepoint.com/blogs</link>
	<description></description>
	<pubDate>Fri, 05 Sep 2008 18:05:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>SitePoint Technical Editor Might Just be Your Dream Job</title>
		<link>http://www.sitepoint.com/blogs/2008/09/05/sitepoint-technical-editor-might-just-be-your-dream-job/</link>
		<comments>http://www.sitepoint.com/blogs/2008/09/05/sitepoint-technical-editor-might-just-be-your-dream-job/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 23:29:37 +0000</pubDate>
		<dc:creator>Andrew Tetlaw</dc:creator>
		
		<category><![CDATA[Web Tech]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2941</guid>
		<description><![CDATA[SitePoint is still looking for a technical editor to join our publishing team. The technical editor positions are always hard to fill; the required technical and communication skills are a unique combination. But I also think a big problem with filling this kind of role is that not many people in the web industry are [...]]]></description>
			<content:encoded><![CDATA[<p>SitePoint is still looking for a <a href="http://www.sitepoint.com/about/jobs/job2-technical_editor.php">technical editor</a> to join our publishing team. The technical editor positions are always hard to fill; the required technical and communication skills are a unique combination. But I also think a big problem with filling this kind of role is that not many people in the web industry are ever looking to move specifically into this kind of role. I know I wasn&#8217;t. In fact, before I got the job, I had no idea that this kind of job existed.</p>
<p>Some of the blame might rest with the job title: &#8220;technical editor&#8221; is no match for web industry jobs with titles that include the word wizard, genius, guru, or ninja. The title technical editor makes the role sound like it&#8217;s for the resident apostrophe nazi. Banish that thought; we already have a word nerd. What we need is a real web nerd.</p>
<p>If you are someone, or know of someone, who enjoys tinkering with stuff on the web just for the fun of it, and then sharing your knowhow, this might just be <a href="http://www.sitepoint.com/about/jobs/job2-technical_editor.php">the perfect job</a> &#8212; getting paid for staying up to date with web technology and working with a bunch of hardcore web geeks who share the passion.</p>
<p>The <a href="http://www.sitepoint.com/about/referral/techeditor/">16GB 3G iPhone</a> is still up for grabs for a successful referral too!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/09/05/sitepoint-technical-editor-might-just-be-your-dream-job/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The release of ColdFusion 9&#8230;</title>
		<link>http://www.sitepoint.com/blogs/2008/09/05/the-release-of-coldfusion-9/</link>
		<comments>http://www.sitepoint.com/blogs/2008/09/05/the-release-of-coldfusion-9/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 15:43:13 +0000</pubDate>
		<dc:creator>kay.smoljak</dc:creator>
		
		<category><![CDATA[ColdFusion]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2946</guid>
		<description><![CDATA[CF9 the shirt, that is. If you’re eagerly anticipating ColdFusion 9 – codenamed Centaur – you can now get the unofficial tshirt. As well as looking after your fashion woes, Kay wraps up the latest developments in the ColdFusion community from this week.]]></description>
			<content:encoded><![CDATA[<p>&#8230;well, the shirt anyway. If you’re eagerly anticipating ColdFusion 9 – codenamed Centaur – <a href="http://www.centaurshirt.com/">you can now get the unofficial tshirt</a>. User groups can get bulk orders with their name on the back. Pity it’s white though! <a href="http://www.forta.com/blog/index.cfm/2008/8/29/Get-Your-Unofficial-Centaur-TShirt">hat tip to Ben Forta</a>.</p>
<p>The biggest news this week was that Adobe have finalized their educational licensing and <a href="http://www.webbschofield.com/index.cfm/2008/9/2/ColdFusion-8-Now-Available-to-Students-and-Educators-for-Free">ColdFusion 8 is now available to students and educators free of charge</a>. Government agencies in the US <a href="http://www.webbschofield.com/index.cfm/2008/8/28/20-off-ColdFusion-8-for-Government-Agencies">can get a 20% discount on ColdFusion 8</a> at the moment as well.</p>
<p><strong>Coding</strong></p>
<p>A couple of security posts this week – <a href="http://www.bryantwebconsulting.com/blog/index.cfm/2008/9/2/CFBlogPicks-September-2-2008">hat tip to Steve Bryant’s CF_BlogPicks</a> for these links:</p>
<ul>
<li><a href="http://www.usefulconcept.com/index.cfm/2008/8/27/ColdFusion-Errors-and-Security">Joshua Cyr reminds us to make sure we’re not giving away too much information</a> on our production servers</li>
<li>Jason Dean continues his security series (9th installment) with <a href="http://www.12robots.com/index.cfm/2008/8/25/Request-Forgeries-and-ColdFusion--Security-Series-9">Request Forgeries and ColdFusion</a></li>
</ul>
<p>In more general code-related news, Stephen Withington has out together <a href="http://www.stephenwithington.com/blog/index.cfm/2008/8/26/CGI-Variables-and-Their-Respective-ColdFusionJava-Servlet-Alternative-Methods">a big list of Java Servlet equivalents to CGI scoped variables</a> – so instead of CGI.PATH_INFO for example, you can use getPageContext().getRequest().getPathInfo(). The comments on the post explain a little about why you might find the Java Servlet alternatives more useful.</p>
<div id="adz" class="vertical"></div><p>Paul Marcotte explains his approach to test driven development in detail – part 1 (<a href="http://www.fancybread.com/blog/index.cfm/2008/8/27/My-Approach-to-Test-Driven-Development-Part-1--Application-Structure-and-Apache">Application Structure and Apache</a>) and part 2 (<a href="http://www.fancybread.com/blog/index.cfm/2008/8/28/My-Approach-to-Test-Driven-Development-Part-2--MXUnit-Coldspring-and-ColdMock">MXUnit, ColdSpring and ColdMock</a>) are available.</p>
<p>Ben Nadel, always one to share his learning experiences, <a href="http://www.bennadel.com/index.cfm?dax=blog:1337.view">has posted about his first experiences using ColdFusion 8 secure CFFTP</a>. <a href="http://www.codersrevolution.com/index.cfm/2008/8/28/Delay-Evaluation-What-does-the-de-function-do-anyway">Brad Wood explains what the de() function actually does</a>. <a href="http://www.coldfusionjedi.com/index.cfm/2008/8/29/CFFEED--You-have-failed-me-for-the-last-time">And Raymond Camden still hates CFFEED</a>.</p>
<p><strong>Frameworks</strong></p>
<p>Mach-II news: <a href="http://www.mattwoodward.com/blog/index.cfm?event=showEntry&amp;entryId=FBE0A217-E0F5-4442-A6F96B5852644854">Matt Woodward reports that the alpha of the Mach-II Dashboard has been released</a>. According to Matt, the dashboard “gives you a ton of insight into and control over your Mach-II applications, letting you reload the application or individual modules, reload the base or child ColdSpring bean factories, manage logging, and manage caching.”</p>
<p>An on the Fusebox front: <a href="http://corfield.org/blog/index.cfm/do/blog.entry/entry/How_to_Drive_Fusebox_55">Sean Corfield reports that Jeff Peters’ book</a> <a href="http://protonarts.com/index.cfm?fuseaction=Books.showBookDetails&amp;ISBN=0975264761">How to Drive Fusebox 5.5 is now available for purchase</a>. Being a Fuseboxer myself, I’ve ordered my copy already – Jeff’s previous Fusebook books were great.</p>
<p><strong>Community</strong></p>
<p>Brian Rinaldi took a week off his Open Source Update last week – I don’t know if you missed him, but I certainly did. <a href="http://www.remotesynthesis.com/post.cfm/coldfusion-open-source-update-september-2-2008">This week he’s back with four new projects, 12 updates</a>, and a whole ton of announcements, tutorials, presentations and reviews. </p>
<p>After a bit of a hiatus, I’m getting back into the swing of my CF-TALK mailing list roundups. <a href="http://www.fusionauthority.com/news/4765-coldfusion-talk-roundup-aug-28-2008.htm">Last week’s summary included discussion threads on SQL Injection, Web Services, Academic Licensing and Career Advice</a>.</p>
<p>A Wee Dram of Scotch – the mini Scotch On The Rocks conference being held in London on September 25 – <a href="http://aweedram.com/ofScotch/">now has a full program and is open for registration</a> (hat tips to <a href="http://www.creative-restraint.co.uk/blog/index.cfm/2008/9/1/A-Wee-Dram-of-Scotch--Registration-Open">Andy Allan</a> and <a href="http://corfield.org/blog/index.cfm/do/blog.entry/entry/A_Wee_Dram__location_and_more_details">Sean Corfield</a>). With the stars in the lineup and at only £10, I dare say it’s going to sell out quickly. </p>
<p><strong>Alternative CFML Engines</strong></p>
<p><a href="http://www.garyrgilbert.com/blog/index.cfm/2008/8/29/Railo-30-Not-just-a-Pretty-Face">Gary Gilbert has posted his impressions of Railo 3</a>, after meeting Gert Franz and Michi Streit at the Munich CFUG. Gary was impressed by the “strict” variable scoping setting in the Administrator, the Amazon S3 resource, and the extension framework.</p>
<p><a href="http://www.webtrenches.com/post.cfm/jquery-replacements-for-cfgride-cfwindowe-and-cftooltip">Michael Sprague has released a beta of CFjqAjax</a>, a library of custom tags to replicate ColdFusion 8’s Ajax UI controls CFGRID, CFWINDOW, and CFTOOLTIP with jQuery equivalents. This is great news, not only for people who prefer to work with the jQuery JavaScript than ExtJS or YUI… but also for those using alternative CFML engines like Railo and Open BlueDragon.</p>
<p>Okey dokes kids, that’s all for now. Got a tip? Email kay at smoljak dot com, leave a comment or tag at delicious.com with for:kay.smoljak. Til next time&#8230;</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/09/05/the-release-of-coldfusion-9/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Easy Vector Graphics with the Raphaël JavaScript Library</title>
		<link>http://www.sitepoint.com/blogs/2008/09/03/easy-vector-graphics-with-the-raphael-javascript-library/</link>
		<comments>http://www.sitepoint.com/blogs/2008/09/03/easy-vector-graphics-with-the-raphael-javascript-library/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 06:17:48 +0000</pubDate>
		<dc:creator>Andrew Tetlaw</dc:creator>
		
		<category><![CDATA[JavaScript &amp; CSS]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2926</guid>
		<description><![CDATA[Raphaël is a small JavaScript library that allows you to create and manipulate vector graphics in your web pages. It's amazingly simple to use and is cross-browser compatible, as Andrew demonstrates in this short demo.]]></description>
			<content:encoded><![CDATA[<p><a href="http://raphaeljs.com/">Raphaël</a> is a small JavaScript library written by Dmitry Baranovskiy of <a href="http://www.atlassian.com/?s_kwcid=atlassianawsearch">Atlassian</a>, that allows you to create and manipulate vector graphics in your web pages. It&#8217;s amazingly simple to use and is cross-browser compatible; supporting Internet Explorer 6.0+, Safari 3.0+, Firefox 3.0+, and Opera 9.5+. Internally Raphaël uses VML in IE and SVG in the other browsers.</p>
<p>Now, demos involving circles and squares are fine, but I wanted to create an example that demonstrated a legitimate, practical use of vector graphics. So how about <a href="http://www.sitepoint.com/blogs/wp-content/uploads/2008/09/raphael-graph-demo/" title="Jump straight to the demo">real-time statistics measurement</a>? Here&#8217;s a screenshot of my Current Sprocket Usage line graph that plots real-time &#8220;sprocket&#8221; usage levels. Best of all, it was a snap to make.</p>
<p><img src="http://www.sitepoint.com/blogs/wp-content/uploads/2008/09/raphael-sprocket-graph1.gif" width="400" height="145" /></p>
<p>The HTML is simple;  we just need a heading and container to hold our canvas &#8212; a <code>div</code> element:</p>
<div id="adz" class="horizontal"></div><pre><code>&lt;h1&gt;Current Sprocket Usage: &lt;span id="readout"&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;div id="graph"&gt;&lt;/div&gt;</code></pre>
<p>To start we have to generate a new graphics canvas. I always like to place all my code within an object definition in order to create a separate namespace, so we&#8217;ll start with the following code:</p>
<pre><code>var SpGraph = {
  init : function(){
    SpGraph.graph = Raphael("graph", 400, 200);
    SpGraph.graph.rect(0, 0, 390, 110, 10).attr("fill", "#000");
  }
}

window.onload = function () {
  SpGraph.init();
};</code></pre>
<p>Using the window.onload event we call our <code>SpGraph.init</code> method. Within this method we create our canvas using <code>Raphael("graph", 400, 200)</code>. The first argument is the ID of our container element, the other two represent width and height. We store the returned canvas object in our <code>SpGraph.graph</code> property.  With the next line we create a rectangle and set some attributes:</p>
<pre><code>SpGraph.graph.rect(0, 0, 390, 110, 10).attr("fill", "#000");</code></pre>
<p>The <code>rect</code> method allows us to draw a rectangle specifying the x coordinate, y coordinate, width, height, and optionally a corner radius. Notice that we&#8217;ve also chained a call to the <code>attr</code> method to set the fill color. All Raphaël graphic objects support the <code>attr</code> method and there&#8217;s a range of attributes you can set. Raphaël supports chaining all its methods, which we will take advantage of soon. Our effort so far has resulted in this lovely black rectangle with rounded corners.</p>
<p><img src="http://www.sitepoint.com/blogs/wp-content/uploads/2008/09/raphael-sprocket-graph2.gif" width="400" height="145" /></p>
<p>Now lets add stripes! To do this we add the following loop to the <code>SpGraph.init</code> method:</p>
<pre><code>for(var x = 10; x &lt; 110; x += 10) {
  var c = (x > 10) ? "#333" : "#f00";
  SpGraph.graph.path({stroke: c}).moveTo(0, x).lineTo(390,x);
}</code></pre>
<p>The loop executes 10 times drawing a line each time; a red line for the first one and a gray line for the others. The Raphaël <code>path</code> method initializes the path mode of drawing, returning a <code>path</code> object. It doesn&#8217;t actually draw anything itself; you have to use the <code>path</code> object methods, which are chainable. The <code>moveTo</code> method moves the drawing cursor to the specified x and y coordinates and the <code>lineTo</code> method draws a line from the cursor point to the point specified. The result is the stripey background below:</p>
<p><img src="http://www.sitepoint.com/blogs/wp-content/uploads/2008/09/raphael-sprocket-graph3.gif" width="400" height="145" /></p>
<p>So now we have to draw the actual graph line. The vertical axis (represented by the stripes) is the percentage usage level. The horizontal axis will represent time in 10 pixel increments. In the real world each update of the graph would be obtained via an Ajax call, say every 5 seconds, but here I just create random values and update the graph every second. Once again, we use the path method to draw a 5 pixel wide line.</p>
<p>We initialise the path and store the reference to it in the <code>SpGraph.path</code> property like so:</p>
<pre><code>SpGraph.path = SpGraph.graph.path({
    stroke: "#0f0",
    "stroke-width": 5, 
    "fill-opacity": 0
}).moveTo(20, 110);</code></pre>
<p>Every update, we extend the line using the <code>lineTo</code> method like so:</p>
<pre><code>SpGraph.path.lineTo(20+SpGraph.updates*10, 110-perf);</code></pre>
<p><code>perf</code> is a random value between 0 and 100. The <code>SpGraph.updates</code> property is a simple counter that allows us to control how many updates before the line is reset. The counter value is also used to plot the location of the line on the horizontal axis. After 35 updates the line is reset by removing it, using the <code>SpGraph.path.remove</code> method, and starting a new one.</p>
<p>So the whole script looks like this:</p>
<pre><code>var SpGraph = {
  init : function(){
    SpGraph.graph = Raphael("graph", 400, 200);
    SpGraph.graph.rect(0, 0, 390, 110, 10).attr("fill", "#000");

    for(var x = 10; x &lt; 110; x += 10) {
      var c = (x > 10) ? "#333" : "#f00";
      SpGraph.graph.path({stroke: c}).moveTo(0, x).lineTo(390,x);
    }
    SpGraph.startPath();
    SpGraph.updateGraph();
  },
  startPath : function() {
    if(SpGraph.path) {
      SpGraph.path.remove();
    }
    SpGraph.path = SpGraph.graph.path({
        stroke: "#0f0",
        "stroke-width": 5, 
        "fill-opacity": 0
    }).moveTo(20, 110);
  },
  updateGraph : function() {
    if(SpGraph.updates++ &lt; 36) {
      // imagine this value comes from an ajax request
      var perf = Math.floor(Math.random() * 100);
      SpGraph.path.lineTo(20+SpGraph.updates*10, 110-perf);
      document.getElementById('readout').innerHTML = perf+'%';
    } else {
      SpGraph.updates = 0;
      SpGraph.startPath();
    }
    SpGraph.timer = setTimeout("SpGraph.updateGraph();",1000);
  },
  updates : 0
}
window.onload = function () {
  SpGraph.init();
};</code></pre>
<p>Don&#8217;t forget to see it working in <a href="http://www.sitepoint.com/blogs/wp-content/uploads/2008/09/raphael-graph-demo/" title="Jump straight to the demo">the demo</a>. OK, so maybe a sprocket usage graph isn&#8217;t exactly the legitimate, practical example I promised, but at least you got a look at what you can achieve with Raphaël with only a little effort. The documentation on the site isn&#8217;t complete, but it&#8217;s not too difficult to work out anyway. Why don&#8217;t you have a go yourself? Quick, Simple, cross-browser compatible, vector graphics on the web has never been easier.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/09/03/easy-vector-graphics-with-the-raphael-javascript-library/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tagging is Not Just for Content</title>
		<link>http://www.sitepoint.com/blogs/2008/08/29/tagging-is-not-just-for-content/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/29/tagging-is-not-just-for-content/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 04:19:59 +0000</pubDate>
		<dc:creator>brothercake</dc:creator>
		
		<category><![CDATA[Web Tech]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2917</guid>
		<description><![CDATA[We all know what tags are in web terms, right? Well what if we extended the concept of tagging content, to include users with different levels of access, resulting in an infinitely extensible user access system. How else could tags be applied?]]></description>
			<content:encoded><![CDATA[<p><img src='http://sitepointstatic.com/images/blogs/mattymcg/tags-juandesant.jpg' alt='' class='imgright'/>
<p>We all know what <strong>tags</strong> are in web terms, right? (If not, check out this <a href="http://en.wikipedia.org/wiki/Tag_(metadata)">Wikipedia article on the subject</a>.) Tags are almost exclusively used to associate subject matter with content; you tag something like a photo or a blog post with a number of keywords that describe it, so that you can build semantic relationships &#8212; search criteria, content-by-subject lists, that kind of thing.</p>
<p>But it occurred to me that tagging can also be used as the basis of an authentication system. (To give props &#8212; I came up with this idea a while ago but I didn&#8217;t think of it in terms of tagging; it was <a href="http://lachstock.com.au/">Lachlan Hardy</a> who made that connection for me.)</p>
<p>The idea is very simple: you create a system in which you define a number of tags that indicate permission groups, so you might have tags like <q>guest</q>, <q>friend</q>, <q>moderator</q> and <q>me</q>. Individual users also have one or more tags associated with their user account.</p>
<p>Then for each piece of content, you assign tags that indicate who&#8217;s allowed to see it &#8212; if a post is tagged <q>me, moderator</q> then only you and mods can see it. Or to put it more generally, whenever a permission tag for a piece of content and a permission tags for a user coincide, that user is allowed to see that content.</p>
<div id="adz" class="vertical"></div><p>The real point here is that it&#8217;s infinitely extensible. You can define any number of tags &#8212; from tags that apply to everyone, right down to individual users &#8212; and create a user/permissions system that&#8217;s <strong>as granular as you need</strong>. (One of the problems with <a href="http://en.wikipedia.org/wiki/XHTML_Friends_Network">XFN</a> is that it&#8217;s too broad &#8212; I can&#8217;t encompass all my personal relationships as <q>friend</q> or <q>acquaintance</q>.)</p>
<p>You could describe this as a kind of <a href="http://www.oasis-open.org/khelp/dotorg/user_help/html/rolebasedauth.html">role-based authentication</a>, and in those terms it&#8217;s not a new idea; you might also see it as <em>inverted</em> role-based authentication &#8212; instead of defining user groups that have attributes (such as the member groups in vBulletin), we&#8217;re defining attributes directly, and therefore bypassing the need to define groups. Either way, by putting it in terms of tagging it somehow seemed more interesting, and more relevant to modern web development practices.</p>
<p>And it makes me wonder &#8212; where else could we extend the idea of tagging, beyond its current uses? Let me know your thoughts in the comments.</p>
<p><em>Image credit: <a href="http://www.flickr.com/photos/juandesant/2641262447/">juandesant</a></em></p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/29/tagging-is-not-just-for-content/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rasmus Lerdorf: PHP Frameworks? Think Again.</title>
		<link>http://www.sitepoint.com/blogs/2008/08/29/rasmus-lerdorf-php-frameworks-think-again/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/29/rasmus-lerdorf-php-frameworks-think-again/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 16:10:56 +0000</pubDate>
		<dc:creator>david.seth.p</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2914</guid>
		<description><![CDATA[ This is the fist time I have heard Rasmus Lerdorf speak and it was entertaining to say the least. Refreshing would another way to describe it, I enjoy hearing real opinions and not holding back &#8212; Rasmus doesn&#8217;t hold back. 
Just a short background, Rasmus Lerdorf is the creator of PHP and still continues [...]]]></description>
			<content:encoded><![CDATA[<p><img style="0px 0px 0px 10px" src="http://szeged2008.drupalcon.org/files/Rasmus.jpg" align="right" /> This is the fist time I have heard <a href="http://en.wikipedia.org/wiki/Rasmus_Lerdorf">Rasmus Lerdorf</a> speak and it was entertaining to say the least. Refreshing would another way to describe it, I enjoy hearing real opinions and not holding back &#8212; Rasmus doesn&#8217;t hold back. </p>
<p>Just a short background, Rasmus Lerdorf is the creator of PHP and still continues as a core developer to the PHP project. </p>
<p><strong>PHP frameworks</strong></p>
<p>In his address he choose to highlight PHP frameworks (Drupal was not spared) and how poor they are at performance. Not only are they slow, but their &quot;jack-of-all-trades&quot; attitude leads developers down the wrong path by not using what is best for the job. He continues on by stating that PHP developers really need to think about performance for not only scalability reasons but for green reasons. If programs were more efficient it would cut the number of data centres and would reduce energy needs as a result. In our newly emerging age of energy awareness this does become an important aspect and I am glad that he is raising awareness.</p>
<div id="adz" class="vertical"></div><p>Back to frameworks, he started by discussing a database heavy Twitter mashup that he created. This does a lot of database calls and a lot of behind the scenes work. By hand-tuning it he was able to get on the order of 280 req/sec. By comparison and simple HTML page with nothing but &quot;Hello World&quot; served by Apache is just over 600 req/sec. Okay, stage is set (by the way, this was tested on his local machine).</p>
<p><strong>Hello World</strong></p>
<p>How do PHP frameworks score on the &quot;Hello World&quot; test? No database calls, just the framework being used in its native tongue to output Hello World. The results were not too good, one of the fastest got just over 120 req/sec, the slowest was 8 req/sec. This is a dramatic difference and of course highlights his argument for performance. Where did Drupal score? Right above 50 req/sec. So not the greatest, but he did make the point that Drupal is not really a framework in the traditional sense. It is a web content management system that can be quickly extended.</p>
<p>So, are there any frameworks that don&#8217;t suck? Rasmus did mention that he liked <a href="http://codeigniter.com/">CodeIgniter</a> because it is faster, lighter and the least like a framework.</p>
<p><strong>How to make PHP fast</strong></p>
<p>&quot;Well, you can&#8217;t&quot; was his quick answer. PHP is simply not fast enough to scale to Yahoo levels. PHP was never meant for those sorts of tasks. &quot;Any script based language is simply not fast enough&quot;. To get the speed that is necessary for truly massive web systems you have to use compiled C++ extensions to get true, scaleable architecture. That is what Yahoo does and so do many other PHP heavyweights.</p>
<p><strong>RDF, Semantic Web and the Monkey</strong></p>
<p>RDF in Drupal. Rasmus made a special point of highlighting the importance of embedding structured    metadata into the page. RDFa allows you to embed data into your web pages and also lets you create custom vocabularies, or even better, reuse existing vocabularies. Why would you want to do this? Searchmonkey will go out and index this content and open up a rich search API to allow you to do intelligent queries. Well beyond what is possible with traditional search. </p>
<p>Along with rich search you also get enhanced search results. I have blogged about this previously so take a <a href="http://www.sitepoint.com/blogs/2008/03/16/why-rdfa-is-the-only-web-scaleable-metadata-format-for-next-generation-search-engines/">look</a>. It is really cool stuff and I will be discussing it in much more detail over the course of the conference.</p>
<p><strong>Pitching the Semantic Web</strong></p>
<p>What if all Drupal sites had embedded RDFa tags? Well, for one, Yahoo would be very happy. It would play directly into the strengths of Yahoo&#8217;s new Semantic Web strategy. They are trying to do interesting things with semantic data but of course they need data &#8212; the classic chicken and egg thing.</p>
<p>Rasmus mentioned that Yahoo&#8217;s semantic data store can scale to the size of the web so the invitation is open. </p>
<p><strong>The future of Drupal</strong></p>
<p>This is where my focus at Drupalcon is, driving the adoption of semantic technologies within Drupal &#8212; I feel that the momentum here will make that a reality. There is a lot of interest, a Semantic Web BoF session was stacked with people with some cool ideas&#8230;</p>
<p>More to come.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/29/rasmus-lerdorf-php-frameworks-think-again/feed/</wfw:commentRss>
		</item>
		<item>
		<title>All&#8217;s Quiet on the CF Front&#8230;</title>
		<link>http://www.sitepoint.com/blogs/2008/08/29/alls-quiet-on-the-cf-front/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/29/alls-quiet-on-the-cf-front/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 14:09:57 +0000</pubDate>
		<dc:creator>kay.smoljak</dc:creator>
		
		<category><![CDATA[ColdFusion]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2916</guid>
		<description><![CDATA[This week was strangely quiet. Nothing much on the frameworks front; Open BlueDragon and Railo kept to themselves. Hmmm, looks like everyone is heads down coding&#8230; let’s see what they’ve got for us.
Code n&#8217; Concepts

Adobe have released a technote briefly demonstrating how images can be streamed. And if you’re working with CFIMAGE, Scott Pinkston reminds [...]]]></description>
			<content:encoded><![CDATA[<p>This week was strangely quiet. Nothing much on the frameworks front; Open BlueDragon and Railo kept to themselves. Hmmm, looks like everyone is heads down coding&#8230; let’s see what they’ve got for us.</p>
<p><strong>Code n&#8217; Concepts</strong></p>
<ul>
<li>Adobe have released <a href="http://kb.adobe.com/selfservice/viewContent.do?externalId=kb405330&amp;sliceId=2">a technote briefly demonstrating how images can be streamed</a>. And if you’re working with CFIMAGE, <a href="http://www.scottpinkston.org/blog/index.cfm/2008/8/20/Patch-for-CFImage-and-javaioFileNotFoundException">Scott Pinkston reminds you to make sure you apply all the patches</a> lest you find yourself pulling your hair out unnecessarily </li>
<li>Ben Nadel&#8217;s OOPhoto project is still progressing – the latest installment is <a href="http://www.bennadel.com/index.cfm?dax=blog:1334.view">Encapsulating Form Processing In The Service / Facade Layer</a> </li>
<li>Raymond Camden answers a reader&#8217;s query about <a href="http://www.coldfusionjedi.com/index.cfm/2008/8/26/Using-a-CFC-to-drive-content-to-cftooltip">populating tooltips with a CFC</a> and <a href="http://www.coldfusionjedi.com/index.cfm/2008/8/21/Yet-another-post-on-cffeed-and-columnMap">beats up on the CFFEED</a> tag </li>
<li>Following up from his <a href="http://www.dougboude.com/blog/1/2008/03/What-IS-Business-Logic-Anyway.cfm">ruminations on Business Logic</a>, Doug Boude attempts to define just <a href="http://www.dougboude.com/blog/1/2008/08/Just-What-Is-Application-Logic-Anyway.cfm">what is Application Logic</a> </li>
<li>Doug Hughes introduces the <a href="http://alagad.com/go/blog-entry/introducing-cfant">CFANT project, a toolkit for scripting remote CF deployments</a> </li>
<li><a href="http://mxunit.org/blog/2008/08/mxunit-102-now-available.html">The MXUnit unit testing framework has been updated to 1.0.2</a> </li>
</ul>
<p>Are you a fan of nested sets to represent tree structures in your database? <a href="http://nstree.riaforge.org/">Nested Set Trees</a> – a ColdFusion library for managing the various operations involved - has hit <a href="http://stannard.net.au/blog/index.cfm/2008/8/25/Nested-Set-Trees-in-ColdFusion-v08">version 0.8</a>.</p>
<div id="adz" class="vertical"></div><p>SQL Injection attacks still bugging you? Simon Whatley has posted on <a href="http://www.simonwhatley.co.uk/how-to-fix-a-sql-injection-attack">how to fix an SQL Injection hack</a>, and also how to <a href="http://www.simonwhatley.co.uk/how-to-protect-your-website-from-a-malicious-attack">protect against a malicious attack in the first place</a> (hat tip to <a href="http://www.bryantwebconsulting.com/blog/index.cfm/2008/8/25/CFBlogPicks-August-25-2008">Steve Bryant</a>). You know what they say about prevention being better than cure… <a href="http://blog.bpsite.net/item/63/QueryParam%20Scanner%20-%20Eclipse%20Plugin.html">Peter Boughton has released an Eclipse IDE plugin</a> called <a href="http://www.hybridchill.com/projects/qpscanner.html">QueryParam Scanner</a> which looks through code to find and report on queries with unprotected input parameters. No excuses now – lock down that code!</p>
<p><strong>Conferences</strong></p>
<p>Some bad news UK developers: <a href="http://corfield.org/blog/index.cfm/do/blog.entry/entry/CFDevCon_and_other_UK_news">UK conference CFDevCon has been canned</a>. </p>
<p>Some good news for UK developers: <a href="http://www.aweedram.com/ofScotch/">A Wee Dram of Scotch</a> – a one day conference from the Scotch on the Rocks team - has been announced for September 25 in London (<a href="http://andyjarrett.co.uk/andy/blog/index.cfm/2008/8/27/Who-is-up-for-a-wee-dram-on-the-25th-September">hat tip to Andy Jarrett</a>).</p>
<p>While we’re on conferences, the <a href="http://www.cfobjective.com/sessions.cfm">four tracks for cf.Objective() 2009</a> have been announced (hat tip to <a href="http://www.nictunney.com/index.cfm?mode=entry&amp;entry=FC027A0B-FF61-56C5-E959056671F7D9E0">Nic Tunney</a>).</p>
<p>So that&#8217;s it? Really? Tell me people, did I miss something? Leave a comment, tag for:kay.smoljak on delicious.com or email kay at smoljak dot com with all the juicy goss.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/29/alls-quiet-on-the-cf-front/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Attending Drupalcon 2008 - Szeged, Hungary</title>
		<link>http://www.sitepoint.com/blogs/2008/08/28/attending-drupalcon-2008-szeged-hungary/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/28/attending-drupalcon-2008-szeged-hungary/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 08:01:38 +0000</pubDate>
		<dc:creator>david.seth.p</dc:creator>
		
		<category><![CDATA[Web Tech]]></category>
<category>drupal</category><category>drupalcon</category><category>hungary</category><category>szeged</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2913</guid>
		<description><![CDATA[Well, I had intended to title this &#8220;On my way to&#8230;&#8221; but my travel has taken longer and my net access has been shorter than I had anticipated. Anyway, I find myself now in the lovely town of Szeged Hungary. Szeged is a small, attractive little town with tree-lined streets that has been converted to [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://szeged2008.drupalcon.org/sites/all/themes/szeged2008/logo.png' alt='Drupalcon 2008' class='alignright' />Well, I had intended to title this &#8220;On my way to&#8230;&#8221; but my travel has taken longer and my net access has been shorter than I had anticipated. Anyway, I find myself now in the lovely town of Szeged Hungary. Szeged is a small, attractive little town with tree-lined streets that has been converted to Drupaltown. There are over 500 Drupal devoted in attendance with what looks like a great line up of sessions and BoFs.</p>
<p><img src="http://davidseth.smugmug.com/photos/360104480_96339-M.png" alt="Szeged, Hungary - Drupalcon 2008" /></p>
<p>I find myself here to track what is the current state of the art in Drupal land. I have been using Drupal extensively for a number of community based and science publishing systems and have been very happy with the results. So I am keen to learn what else I can add to my toolkit &#8212; after all, Drupal has something like a billion contributed modules and I have only gone through a hundred or so ;)</p>
<p>The other key reason I am here is to see the uptake of Semantic Web technologies inside of Drupal. There are a few sessions directly addressing semantic tech, but I wanted to have the fireside chats with the core Drupal folk and see what is out there. Yesterday I was heartened to hear in a keynote by <a href="http://lerdorf.com/">Rasmus Lerdorf</a> (inventor of PHP) that the Semantic Web is near and dear to his heart and that of Yahoo. I will write more on that later&#8230;</p>
<div id="adz" class="horizontal"></div><p>Okay, so that is enough lead up. I plan on getting a good nights rest (yeah right) and kick into full gear tomorrow. Over the last three days I have had about 3 hours of sleep per night so I am cutting this post a bit short.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/28/attending-drupalcon-2008-szeged-hungary/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Another 100 Free Adobe AIR Books: First In, Best Dressed!</title>
		<link>http://www.sitepoint.com/blogs/2008/08/28/another-100-free-adobe-air-books-first-in-best-dressed/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/28/another-100-free-adobe-air-books-first-in-best-dressed/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 06:57:59 +0000</pubDate>
		<dc:creator>mattymcg</dc:creator>
		
		<category><![CDATA[Web Tech]]></category>
<category>adobe</category><category>adobe air</category><category>air</category><category>free</category><category>free book</category><category>giveaway</category><category>javascript</category><category>pdf</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2912</guid>
		<description><![CDATA[We&#8217;re at it again.
If you missed your opportunity last week to pick up a copy of the excellent pocket guide, Adobe AIR For JavaScript Developers (that&#8217;s the dead-tree version), then now&#8217;s your chance to grab a copy again.
We just set live the second of Akash Mehta&#8217;s tutorials on building applications with AIR, Learn Adobe AIR, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sitepoint.com/quiz/air/part2/"><img src='http://i2.sitepoint.com/graphics/1665_feature.jpg' alt='Adobe AIR For JavaScript Developers' class='imgright' /></a><strong>We&#8217;re at it again.</strong></p>
<p>If you missed your opportunity last week to <a href=" http://www.sitepoint.com/blogs/2008/08/21/free-book-giveaway-adobe-air-for-javascript-developers/">pick up a copy</a> of the excellent pocket guide, <em>Adobe AIR For JavaScript Developers</em> (that&#8217;s the dead-tree version), then now&#8217;s your chance to <a href="http://www.sitepoint.com/quiz/air/part2/">grab a copy again</a>.</p>
<p>We just set live the second of Akash Mehta&#8217;s tutorials on building applications with AIR, <em><a href="http://www.sitepoint.com/article/learn-adobe-air-part-2/">Learn Adobe AIR, Part 2: Build A Customer Management App</a></em>. This time round, Akash looks at expanding the user interface of an AIR-powered app, by exploring how to implement drag-and-drop and window management features. He also touches on menu construction and native window interaction. It&#8217;s all useful stuff if you&#8217;re experimenting with Adobe AIR development.</p>
<p>And once again, we have a quiz, so you can test how much of the article you absorbed. The first 100 people to complete the quiz will receive a free copy of the pocket guide, <em>Adobe AIR For JavaScript Developers</em> (once again, that’s the print version) delivered to your door.</p>
<div id="adz" class="horizontal"></div><p>Plus the book is still available as a free PDF download, so if you miss out on the print version, be sure to grab it in digital form. This free PDF offer is available until the end of October.</p>
<p>If you haven&#8217;t installed the <a href="http://ad.doubleclick.net/clk;205852848;28495102;m">AIR SDK</a>, that&#8217;s probably a good place to start. Then once you&#8217;ve read the article, <a href="http://www.sitepoint.com/quiz/air/part2/">take the quiz</a> and leave your details to score a freebie. Only the first 100 people!</p>
<p><a href="http://www.sitepoint.com/quiz/air/part2/"><strong>Take the quiz!</strong></a></p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/28/another-100-free-adobe-air-books-first-in-best-dressed/feed/</wfw:commentRss>
		</item>
		<item>
		<title>10 Questions for Isaac Dealey on the OnTap Framework</title>
		<link>http://www.sitepoint.com/blogs/2008/08/25/isaac-dealey-on-the-ontap-framework/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/25/isaac-dealey-on-the-ontap-framework/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 23:50:02 +0000</pubDate>
		<dc:creator>kay.smoljak</dc:creator>
		
		<category><![CDATA[ColdFusion]]></category>
<category>ColdFusion</category><category>frameworks</category><category>onTap</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2883</guid>
		<description><![CDATA[Isaac Dealey is the author of two ColdFusion frameworks: onTap and an object relational mapper called DataFaucet.  SitePoint recently had the privilege of sitting down with him for a discussion about his frameworks.]]></description>
			<content:encoded><![CDATA[<p>Isaac Dealey is the author of two frameworks: onTap and more recently, an ORM (object relational mapper) called DataFaucet (subject of a future framework interview). Here&#8217;s his answers to my 10 framework questions.</p>
<p>See other framework interviews: <a href="http://www.sitepoint.com/article/geoff-bowers-farcry-framework">Geoff Bowers on FarCry</a>, <a href="http://www.sitepoint.com/article/coop-coldfusion-framework">John Farrar on COOP</a> and <a href="http://www.sitepoint.com/blogs/2008/06/09/10-questions-for-mark-mandel-on-transfer-orm/">Mark Mandel on Transfer ORM</a>.</p>
<p><strong>1. Hi Ike! Give us your elevator pitch: summarize the essence of onTap in a sentence or two.</strong></p>
<p>Sales Pitchy Version: The onTap framework does for ColdFusion what ColdFusion did for the web: simplify a lot of powerful tools. </p>
<div id="adz" class="vertical"></div><p>Not so Sales Pitchy Version: The onTap framework is an SOA approach to ColdFusion development. </p>
<p><strong>2. Let&#8217;s dig a little deeper: tell us more about the main features.</strong></p>
<p>Version 3.2 has converted all its config files from flat CFML includes now to CFCs and includes a new IoC Manager. The IoC Manager and the Plugin Manager provides a structure for developers to distribute or sell pluggable, smartly integrated applications and services that can be installed within a browser. In the not too distant future, the framework site will host a webservice which allows those &#8220;plugin&#8221; applications to be installed directly from within the framework in much the same way that add-ons can be installed in Eclipse or FireFox 3 without leaving the IDE. </p>
<p>If that sounds intimidating, don&#8217;t worry. None of that is actually necessary for developing applications with the onTap framework. The framework itself is agnostic about OO, the same way that the Fusebox framework is agnostic. You can choose to develop your application in an &#8220;extreme OO&#8221; manner, using an IoC framework, etc. or you can just build pages if that&#8217;s your preference. My preference is for the OO/SOA approach. </p>
<p>The framework includes a powerful XHTML library: a powerful and extensible templating engine which gives you access to a variety of form building and Ajax tools. </p>
<p>I use these XHTML tools in combination with a unique core architecture I&#8217;ve been calling &#8220;tiered inclusion&#8221;. Where Fusebox has circuits and fuseactions, the onTap framework has a &#8220;process&#8221;, which resembles and actually maps to both a URL and a file path. This tiered inclusion also provides some additional directory-based hooks for powerful branding/customization features as well as a host of very comprehensive internationalization (i18n) features for anyone who needs or wants them. </p>
<p>And that&#8217;s not even getting into a variety of other odds and ends you&#8217;ll find in the framework like content caching, section-508 compliant Ajax widgets, an XML-based rule-manager tool for providing powerfully configurable business logic that users can manage (not found in other frameworks), etc. </p>
<p><strong>3. How did onTap come about and what was the reason for creating it? How are you involved?</strong></p>
<p>I&#8217;m the original author. About the time I started working on the tiered inclusion technique, I had been doing a lot of work with Fusebox 3. Sure it was a decent framework, and initially I was a big fan of it&#8230; over time I found myself growing increasingly disenchanted by the amount of repetition involved in the switch files in Fusebox 3. </p>
<p>The tiered inclusion concept was something that just occurred to me spur of the moment one day and I worked on it for a long time to perfect it. For myself, it&#8217;s always provided an excellent way of reducing the amount of code I write. The rest of the framework came later and has always just been an endless pursuit of tools to make my own development work easier - if I found a way to create a generic tool that would be useful later, I included it in the distribution.  </p>
<p><strong>4. When should a developer seek out onTap? What has it got going for it?</strong></p>
<p>The onTap framework&#8217;s biggest strength is in its ability to allow seamless branding and customization as well as seamless, automated integration between plugin applications (both using the same techniques). </p>
<p>I worked for a lot of ASP companies over the years and one thing that has been a consistent problem at every ASP I&#8217;ve worked for has been client customization requests. Clients invariably want tools the system wasn&#8217;t designed to provide and then finding a way to provide them is consistently problematic for the company providing the service, often actually hurting the company financially. The onTap framework provides a comprehensive set of tools that work very well for mitigating the problems caused by implementing client customization requests. </p>
<p><strong>5. What are the pre-requisites for using onTap? Is there any prior knowledge that would help new users? Does it use any other frameworks that could simplify or complicate things?</strong></p>
<p>Knowing some ColdFusion obviously would help! The only real requirement is ColdFusion 7 and it should run on both Windows and Unix operating systems. I haven&#8217;t tried with more recent versions of BlueDragon or with Railo yet. It doesn&#8217;t require any additional frameworks, although it does include built-in integration for ColdSpring or Lightwire if that&#8217;s your preference. </p>
<p>The core architecture behind the onTap framework is honestly not very complicated and is intentionally designed to be very simple to use, however it is unlike most other ColdFusion frameworks in its approach. So if you come to it expecting it to behave just like Mach-II, Model-Glue, ColdBox or even FuseBox you might have to unlearn some complexity to understand how simple and powerful the onTap framework is. </p>
<p>When I work on my own projects, I spend no more than a few minutes on things that normally, even with a good framework like ColdBox, would take several hours of my time. I spend those extra hours working on new problems instead of working on problems that I&#8217;ve already solved a bazillion times, like laying out or validating a form. And when I work on projects at my day job I essentially consider much of my time spent working as &#8220;time wasted&#8221; because I know how much faster things could be done. </p>
<p><strong>6. What sets onTap apart from other frameworks?</strong></p>
<p>Three things especially:<br />
- Its SOA Approach to ColdFusion development<br />
- Powerful tools for customization and branding (very useful for ASPs)<br />
- Its simplicity </p>
<p>Actually something I find interesting is that several years ago I had done a comparison of several ColdFusion frameworks - there weren&#8217;t very many at the time, so I had just Fusebox 3 and 4, Mach-II and the onTap framework. At the time I was really disenchanted by the extra work required by the other frameworks, particularly the many, many lines of XML required for Mach-II. </p>
<p>In the intervening years, not just Mach-II and Fusebox have adopted my approaches, but other frameworks like ColdBox have cropped up in various places all touting as their advantages techniques that I&#8217;d been using for a long time. I&#8217;m not just saying this to pat myself on the back (in spite of the fact that I do take pride in it), but to point out that nearly everything that&#8217;s in the onTap framework has always been &#8220;ahead of its time&#8221;. I think that should speak to the longevity of the framework, which I know a few people have worried about. </p>
<p>In truth I like to think that the onTap framework functions in many ways a lot more like ColdFusion than most of the other ColdFusion frameworks that have been created in recent years.</p>
<p><strong>7. Are there any great examples of onTap &#8220;in the wild&#8221;? </strong></p>
<p>I have to be honest here and say nobody&#8217;s informed me of any yet. I really wish I could say &#8220;ahh yeah, XXX Bank is using it&#8221;, but I can&#8217;t.  </p>
<p>Several years ago I implemented a solution using it for a defense contractor called Raytheon. I hesitate to say that&#8217;s an example of the framework in the wild because it was such an early version. </p>
<p>I&#8217;m excited to get the news though! </p>
<p><strong>8. What about licensing, community, support and documentation? </strong></p>
<p>It&#8217;s released with an OpenBSD style license, which is a little less restrictive than LGPL2 in that, not only are you allowed to create commercial software using it (lord knows I&#8217;ve had my own plans), but you can also encrypt your own software based on the onTap framework if you want to. It only requires that you include the notice that your distribution includes the onTap framework and that it&#8217;s not endorsed by the framework authors (which as of today is just me). </p>
<p>I&#8217;m currently working rather hard to try and grow the framework community. I&#8217;m trying to find better ways to encourage feedback and participation. I&#8217;m just not good at the marketing and people skills. I am however very interested in growing a more active community around this framework like the Fusebox or FarCry communities which have actual dev. teams and active forums and mailing lists. I&#8217;d like the framework to have a dev team at some point, not just me. I&#8217;d like for it to include code reviews / critiques and code contributions from other members of the community. I just recently published a blog about this specifically asking for people to write about their experiences with the framework, good bad or ugly. </p>
<p>Documentation for the framework has always been&#8230; well, verbose. I have actually removed some of the documentation in this latest release because I found that not only was a lot of it not read, but I&#8217;d had a number of developers over the years voice &#8230; well they weren&#8217;t complaints, but they would say things like Jeff Peters from the Fusebox community when I met him at cf.Objective had related an anecdote about having looked at the documentation a few days before and having a conversation with someone else in which the phrase &#8220;Do I have to read ALL this?!&#8221; was used. </p>
<p>The author of Model-Glue, Joe Rinehart once made a comment on the cf-talk list to the effect of &#8220;thanks for setting the bar so high for documentation&#8221; because he found my documentation to be so thorough (read LONG). </p>
<p><strong>9. What&#8217;s coming up in the future for onTap?</strong> </p>
<p>Right now I&#8217;m working on getting it back onto its own domain. I just registered tapogee.com &#8230; Soon I hope it will be hosting the webservice I mentioned before for instantly finding and downloading plugin applications. My hope is that with a more active community there will be many plugin-based services and applications that can all work together to create a suite that truly leverages the collective talents of the ColdFusion community at large in a way that&#8217;s not been seen with other frameworks thus far (yes even FarCry, I&#8217;m that bold). Work less, accomplish more.</p>
<p>To that end I&#8217;m also considering self-publishing a small book on how to develop applications using the framework, and possibly t-shirts and other guerilla-marketing techniques. </p>
<p><strong>10. Where can people find more information about onTap?</strong></p>
<p><a href="http://on.tapogee.com">http://on.tapogee.com</a> and check out the <a href="http://ontap.riaforge.org/">framework blog on RIAForge</a>.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/25/isaac-dealey-on-the-ontap-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Debugging JavaScript: Throw Away Your Alerts!</title>
		<link>http://www.sitepoint.com/blogs/2008/08/22/debugging-javascript-throw-away-your-alerts/</link>
		<comments>http://www.sitepoint.com/blogs/2008/08/22/debugging-javascript-throw-away-your-alerts/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 02:00:56 +0000</pubDate>
		<dc:creator>brothercake</dc:creator>
		
		<category><![CDATA[Web Tech]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=2877</guid>
		<description><![CDATA[Are you overly reliant upon the alert() statement when debugging JavaScript? James suggests considering the throw() statement, which provides several advantages, including writing debug information to the console and termination execution. Give it a go!]]></description>
			<content:encoded><![CDATA[<p>One JavaScript statement that rarely surfaces in the wild is <code>throw()</code>. The <code>throw</code> statement allows you to throw a formal error &#8212; sending details of the error to the browser&#8217;s error console &#8212; and halting further execution of the script.</p>
<p>The <code>throw</code> statement is particularly useful for <abbr title="Application Programming Interfaces">APIs</abbr> developers, as a way to  warn its user-developers about runtime issues, such as missing or invalid input data. Its use should be generally preferable to <code>alert()</code> because it makes best use of the browser&#8217;s native functionality (and it&#8217;s less annoying):</p>
<pre><code>if(typeof input == 'undefined')
{
	throw('Missing input');
}
else if(parseFloat(input) != input)
{
	throw('Input must be a number');
}</code></pre>
<p>Using <code>throw()</code> with a string argument will throw a general error. However you can also create and pass an <code>Error</code> object, with which you can specify more details about the error:</p>
<pre><code>var err = new Error();
err.name = 'My API Input Error';
err.message = 'Input must be a number';
throw(err);</code></pre>
<p>The example above produces this output in Opera&#8217;s error console:</p>
<div id="adz" class="horizontal"></div><p><a href='http://www.sitepoint.com/blogs/wp-content/uploads/2008/08/throw-opera.gif'><img src="http://www.sitepoint.com/blogs/wp-content/uploads/2008/08/throw-opera-300x249.gif" alt="Opera\&#39;s error console showing the error just detailed" class="size-medium wp-image-2876" /></a></p>
<p>Firefox&#8217;s console doesn&#8217;t show the error name, only the message; but it&#8217;s still almost as useful:</p>
<p><a href='http://www.sitepoint.com/blogs/wp-content/uploads/2008/08/throw-firefox.gif'><img src="http://www.sitepoint.com/blogs/wp-content/uploads/2008/08/throw-firefox-300x189.gif" alt="Firefox\&#39;s error console showing the error just detailed" class="size-medium wp-image-2878" /></a></p>
<p>The important thing to note is that anywhere you use <code>throw()</code> will <strong>halt the execution of the script</strong> (not just the enclosing scope). So you should arrange your code so that any <code>throw()</code> statement comes at the end of an execution block:</p>
<pre><code>function err(type, message)
{
	var err = new Error();
	err.name = 'My API ' + type + ' Error';
	err.message = message;
	throw(err);
}

<strong>// the delete in this example won't happen</strong>
if(typeof this.input == 'undefined')
{
	err('Input', 'Missing input');
	delete this.input;
}

<strong>// but this delete will happen fine</strong>
if(typeof this.input == 'undefined')
{
	delete this.input;
	err('Input', 'Missing input');
}</code></pre>
<p>Of course, a single language statement &#8212; however useful &#8212; can never replace a fully-featured debugging tool like Firebug; a proper debugger lets you set breakpoints, watchpoints, step-through execution &#8230; all kinds of goodness. Firebug even lets you log messages to its own console.</p>
<p>But Firebug is a browser-specific tool, where this is a cross-browser language feature, so it can be safely integrated into the heart of a script without any chance of unsatisfied dependencies.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/08/22/debugging-javascript-throw-away-your-alerts/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
