<?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>BorkWeb &#187; programming</title>
	<atom:link href="http://borkweb.com/story/tag/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://borkweb.com</link>
	<description>Some People Are Squirrel Handed.</description>
	<lastBuildDate>Tue, 17 Jan 2012 22:00:21 +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>Oracle 10g: Using The Returning Clause With ADOdb</title>
		<link>http://borkweb.com/story/oracle-10g-using-the-returning-clause-with-adodb</link>
		<comments>http://borkweb.com/story/oracle-10g-using-the-returning-clause-with-adodb#comments</comments>
		<pubDate>Tue, 21 Oct 2008 13:26:49 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[10g]]></category>
		<category><![CDATA[adodb]]></category>
		<category><![CDATA[banner]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dml]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[oracle 10g]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/?p=638</guid>
		<description><![CDATA[Plymouth State University uses Oracle heavily due to its Student Information System of choice &#8211; SungardHE Banner. As such, I play around in Oracle a lot (sometimes a lot more than I&#8217;d like) and I occasionally find functionality that seems more cumbersome than it should. One such item is selecting the last inserted value on [...]]]></description>
			<content:encoded><![CDATA[<p>Plymouth State University uses <a href="http://www.oracle.com">Oracle</a> heavily due to its Student Information System of choice &#8211; <a href="http://www.sungardhe.com">SungardHE</a> Banner.  As such, I play around in Oracle a lot (sometimes a lot more than I&#8217;d like) and I occasionally find functionality that seems more cumbersome than it should.  </p>
<p>One such item is <strong>selecting the last inserted value on an auto-incrementing column</strong>.</p>
<p>Historically, when you are inserting into a table with auto incrementing values (via a <a href="http://borkweb.com/story/oracles-auto-incrementing-with-sequences">sequence</a>) you have always been able to grab the last value with a simple SELECT statement (line 22):</p>
<pre class="brush: sql; title: ; notranslate">
-- setup a table
CREATE TABLE bork (id INTEGER NOT NULL PRIMARY KEY, data VARCHAR2(10) NOT NULL);

-- create the sequence
CREATE SEQUENCE sq_bork INCREMENT BY 1 START WITH 1; 

-- create a trigger for auto-incrementing the sequence'
CREATE OR REPLACE TRIGGER tr_sq_bork
BEFORE INSERT
ON bork
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT sq_bork.NEXTVAL INTO :NEW.id FROM DUAL;
END;
/

-- insert a record into the table
INSERT INTO bork (name) VALUES ('Matt');

-- retrieve last inserted id
SELECT sq_bork.CURRVAL FROM dual;
</pre>
<p>As you see there, two statements must be executed to get that new id.  The INSERT and the SELECT.  Well, as of Oracle 10g you can utilize the RETURNING clause like so:</p>
<pre class="brush: sql; title: ; notranslate">
INSERT INTO bork (name) VALUES ('Matt') RETURNING id INTO i_id;
</pre>
<p>That statement inserts a record into &#8220;bork&#8221; and returns the value of &#8220;id&#8221; into the &#8220;i_id&#8221; variable.  Pretty sexy and all with one DML statement.  Here&#8217;s what we do at Plymouth to utilize the RETURNING clause with the PHP library <a href="http://adodb.sf.net">ADOdb</a>:</p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php
//do your database object initialization here:
//$db = new ADONewConnection...

$sql = &quot;BEGIN INSERT INTO bork (data) VALUES ('Matt') RETURNING id INTO :i_id; END;&quot;;
$stmt = $db-&gt;PrepareSP($sql);
$db-&gt;OutParameter($stmt, $inserted_id, 'i_id');
$db-&gt;Execute($stmt);
?&gt;
</pre>
<p>Yup.  4 lines of PHP but only 1 statement sent to the database!  I&#8217;d take the extra lines any day over the latency of data retrieval.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/oracle-10g-using-the-returning-clause-with-adodb/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery 1.2 Released!</title>
		<link>http://borkweb.com/story/jquery-12-released</link>
		<comments>http://borkweb.com/story/jquery-12-released#comments</comments>
		<pubDate>Tue, 11 Sep 2007 11:29:15 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery 1.2]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[toolkit]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-12-released</guid>
		<description><![CDATA[This is a major release for the JavaScript library that I have grown to love. Before I list the new features, it is important to note what functionality has been removed from jQuery. Here&#8217;s the deprecated functionality: These Selectors XPath Descendant Selector: $(&#8220;div//p&#8221;) XPath Child Selector: $(&#8220;div/p&#8221;) XPath Parent Selector: $(&#8220;p/../div&#8221;) XPath Contains Predicate Selector: [...]]]></description>
			<content:encoded><![CDATA[<p>This is a <a href="http://jquery.com/blog/2007/09/10/jquery-12-jqueryextendawesome/">major release</a> for the JavaScript library that I have <a href="http://borkweb.com/story/the-ajax-experience-jquery-toolkit">grown to</a> <a href="http://borkweb.com/story/book-review-learning-jquery">love</a>.  Before I list the new features, it is important to note what functionality has been removed from jQuery.  </p>
<h2 id="_heres-the-deprecated_1" >Here&#8217;s the deprecated functionality:</h2>
<ul>
<li>These Selectors
<ul>
<li><strong>XPath Descendant Selector</strong>: $(&#8220;div//p&#8221;)</li>
<li><strong>XPath Child Selector</strong>: $(&#8220;div/p&#8221;)</li>
<li><strong>XPath Parent Selector</strong>: $(&#8220;p/../div&#8221;)</li>
<li><strong>XPath Contains Predicate Selector</strong>: $(&#8220;div[p]&#8220;)</li>
<li><strong>XPath Attribute Selector</strong>: $(&#8220;a[@href]&#8220;)</li>
</ul>
</li>
<li><strong>Calling clone() with an argument</strong>: $(&#8220;div&#8221;).clone(false);</li>
<li>These Traversal Functions <em>use the new .slice() instead)</em>:
<ul>
<li>$(&#8220;div&#8221;).eq(0);</li>
<li>$(&#8220;div&#8221;).lt(2);</li>
<li>$(&#8220;div&#8221;).gt(2);</li>
</ul>
</li>
<li>These Ajax Functions:
<ul>
<li>$(&#8220;#elem&#8221;).loadIfModified(&#8220;some.php&#8221;);</li>
<li>$.getIfModified(&#8220;some.php&#8221;);</li>
<li>$.ajaxTimeout(3000);</li>
<li>$(&#8230;).evalScripts();</li>
</ul>
</li>
</ul>
<p>Thankfully a number of those don&#8217;t effect me.  I&#8217;ll have to comb through my code to get rid of the .gt, .lt, and .eq traversal functions as well as a few of the selectors&#8230;but other than that, I&#8217;m good to go.  To find out more about workarounds for the above removed functionality, check the <a href="http://docs.jquery.com/Release:jQuery_1.2">jQuery 1.2 release notes</a></p>
<p>Now&#8230;on to the good stuff.  </p>
<h2 id="_new-features_1" >New features!</h2>
<ul>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Selectors" title="Release:jQuery 1.2/Selectors">Selectors</a></b></p>
<ul>
<li>&nbsp;:has(selector)
</li>
<li>&nbsp;:header
</li>
<li>&nbsp;:animated
</li>
<li> XPath Selector Plugin
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Attributes" title="Release:jQuery 1.2/Attributes">Attributes</a></b>
<ul>
<li> .val() Overhaul
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Traversing" title="Release:jQuery 1.2/Traversing">Traversing</a></b>
<ul>
<li> .map()
</li>
<li> .prevAll() / .nextAll()
</li>
<li> .slice()
</li>
<li> .hasClass()
</li>
<li> .andSelf()
</li>
<li> .contents()
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Manipulation" title="Release:jQuery 1.2/Manipulation">Manipulation</a></b>
<ul>
<li> .wrapInner() / .wrapAll()
</li>
<li> .replaceWith() / .replaceAll()
</li>
<li> Event Cloning
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/CSS" title="Release:jQuery 1.2/CSS">CSS</a></b>
<ul>
<li> .offset()
</li>
<li> .height() / .width() for document and window
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Ajax" title="Release:jQuery 1.2/Ajax">Ajax</a></b>
<ul>
<li> Partial .load()
</li>
<li> Cross-Domain getScript
</li>
<li> JSONP
</li>
<li> .serialize() Overhaul
</li>
<li> Disable Caching
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Effects" title="Release:jQuery 1.2/Effects">Effects</a></b>
<ul>
<li> .stop()
</li>
<li> %/em Animations
</li>
<li> Color Animations
</li>
<li> Relative Animations
</li>
<li> Queue Control
</li>
<li>&nbsp;:animated
</li>
<li> step: Function
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Events" title="Release:jQuery 1.2/Events">Events</a></b>
<ul>
<li> Namespaced Events
</li>
<li> .triggerHandler()
</li>
</ul>
</li>
<li> <b><a href="http://docs.jquery.com/Release:jQuery_1.2/Internals" title="Release:jQuery 1.2/Internals">Internals</a></b>
<ul>
<li> Documentation Move
</li>
<li> Expando Management
</li>
</ul>
</li>
</ul>
<p>I have to say&#8230;it is a pretty snazzy release and I&#8217;ll begin implementing the new version shortly. w00t.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-12-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Plugin: Live Query</title>
		<link>http://borkweb.com/story/jquery-plugin-live-query</link>
		<comments>http://borkweb.com/story/jquery-plugin-live-query#comments</comments>
		<pubDate>Wed, 22 Aug 2007 14:24:00 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Brandon Aaron]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[live query]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-plugin-live-query</guid>
		<description><![CDATA[My hear is exploding with happiness and joy at the existence of Brandon Aaron. He has built a sweet jQuery plugin (Live Query) that reduces complexity in Ajax and general DOM manipulation coding by a great deal (when it comes to applying behaviors). First, let me tell you the problem (if you don&#8217;t already know): [...]]]></description>
			<content:encoded><![CDATA[<p>My hear is exploding with happiness and joy at the existence of <a href="http://brandonaaron.net">Brandon Aaron</a>.  He has built a sweet jQuery plugin (<a href="http://brandonaaron.net/docs/livequery/">Live Query</a>) that reduces complexity in Ajax and general DOM manipulation coding by a great deal (when it comes to applying behaviors).  First, let me tell you the problem (if you don&#8217;t already know):</p>
<p>Say I build a web application where I want to assign an onClick event to an &lt;a&gt; tag.  In jQuery I&#8217;d do it like this:</p>
<p>First the HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;another.html&quot; class=&quot;another&quot;&gt;Grab Another!&lt;/a&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Now lets do up the JavaScript:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $('a.whatever').bind('click',function(){
    alert('ZOMG Hai');
    return false;
  });
});
</pre>
<p>Simple, right?  Yeah.  It is.  Nothing new.  Now&#8230;say that I manipulate the DOM and add in another &lt;a&gt; tag with the class &#8220;whatever&#8221; that I want the same even applied (with or without Ajax, doesn&#8217;t matter).  Here&#8217;s what I would have had to do in the past:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $('a.another').bind('click',function(){
    $('ul').append('&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;');

    $('a.whatever').bind('click',function(){
      alert('ZOMG Hai');
      return false;
    });

    return false;
  });
});
</pre>
<p>See that?  Kinda complex.  Things become quite complex when you begin doing Cross Domain Scripting via Remote JavaScript calls (which is what is heavily used in one of the apps I have done front-end development for).  </p>
<p>The Live Query plugin is a beautiful thing as it &#8220;auto-magically&#8221; binds events to dynamically added elements within the page as they appear! So ALL of that JavaScript from both examples becomes:</p>
<pre class="brush: jscript; title: ; notranslate">
$(document).ready(function(){
  $('a.whatever').livequery('click',function(){
    alert('ZOMG Hai');
    return false;
  });

  $('a.another').bind('click',function(){
    $('ul').append('&lt;a href=&quot;whee.html&quot; class=&quot;whatever&quot;&gt;Bork&lt;/a&gt;');
    return false;
  });
});
</pre>
<p>Yup.  That&#8217;s it.  Bind a livequery event to an element and as elements that match appear on the page&#8230;BAM!  The event is applied.</p>
<p>There are some more advanced things you can do with the plugin and you can find those out at the <a href="http://brandonaaron.net/docs/livequery/">Live Query site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-plugin-live-query/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Internet Explorer &#8211; Web Developer Toolbar</title>
		<link>http://borkweb.com/story/internet-explorer-web-developer-toolbar</link>
		<comments>http://borkweb.com/story/internet-explorer-web-developer-toolbar#comments</comments>
		<pubDate>Wed, 08 Aug 2007 11:52:46 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[toolbar]]></category>
		<category><![CDATA[web developer toolbar]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/internet-explorer-web-developer-toolbar</guid>
		<description><![CDATA[In a world of FireFox and its beautiful extensions of web-development power, Internet Explorer has been a horrid browser to develop/debug your code. Microsoft has a fancy FireBug clone for the bane of every web developer&#8230;Internet Explorer! They call it the Web Developer Toolbar (although it isn&#8217;t much of a toolbar and more of a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm2.static.flickr.com/1040/1033690575_555a334cd1_o.png" class="post_image" style="float:left;"/>In a world of <a href="http://getfirefox.com">FireFox</a> and its beautiful <a href="http://borkweb.com/story/must-have-extensions-for-firefox">extensions of web-development power</a>, Internet Explorer has been a horrid browser to develop/debug your code.  </p>
<p><a href="http://microsoft.com">Microsoft</a> has a fancy FireBug clone for the bane of every web developer&#8230;Internet Explorer!  They call it the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&#038;displaylang=en">Web Developer Toolbar</a> (although it isn&#8217;t much of a toolbar and more of a tool set) and it is a blessing for finding problems in IE.  Its features include:</p>
<div class="quote">
The Internet Explorer Developer Toolbar provides several features for exploring and understanding Web pages. These features enable you to:</p>
<ul>
<li>Explore and modify the document object model (DOM) of a Web page.</li>
<li>Locate and select specific elements on a Web page through a variety of techniques.</li>
<li>Selectively disable Internet Explorer settings.</li>
<li>View HTML object class names, ID&#8217;s, and details such as link paths, tab index values, and access keys.</li>
<li>Outline tables, table cells, images, or selected tags.</li>
<li>Validate HTML, CSS, WAI, and RSS web feed links.</li>
<li>Display image dimensions, file sizes, path information, and alternate (ALT) text.</li>
<li>Immediately resize the browser window to a new resolution.</li>
<li>Selectively clear the browser cache and saved cookies. Choose from all objects or those associated with a given domain.</li>
<li>Display a fully featured design ruler to help accurately align and measure objects on your pages.</li>
<li>Find the style rules used to set specific style values on an element.</li>
<li>View the formatted and syntax colored source of HTML and CSS.</li>
</ul>
<p>The Developer Toolbar can be pinned to the Internet Explorer browser window or floated separately.
</p></div>
<p>This toolbar isn&#8217;t a match for the features, look, or usability of FireBug&#8230;but it is a great start and a pretty decent tool provided by the guys at Microsoft.  As many developers can attest, developing sites that work according to standards AND Internet Explorer is a pain&#8230;this tool eases that pain.</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&#038;displaylang=en">Get it here</a>.</p>
<p>Oh, and once you install the toolbar, it is hard to see where to open the thing.  After installing, a little blue arror will appear in the icon bar at the top of the browser.  Click that and the tool will open at the bottom of the screen.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/internet-explorer-web-developer-toolbar/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Plugin: Sexy Comments v1.4 Released!</title>
		<link>http://borkweb.com/story/plugin-sexy-comments-v14-released</link>
		<comments>http://borkweb.com/story/plugin-sexy-comments-v14-released#comments</comments>
		<pubDate>Fri, 03 Aug 2007 12:52:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[borkweb]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[gravatar]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[matt batchelder]]></category>
		<category><![CDATA[matthew batchelder]]></category>
		<category><![CDATA[mybloglog]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sexy]]></category>
		<category><![CDATA[sexy comments]]></category>
		<category><![CDATA[sexycomments]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/plugin-sexy-comments-v14-released</guid>
		<description><![CDATA[[[innerindex]] Introduction This has been a long time coming and I am happy to announce the release of Sexy Comments v1.4! With this version comes a lot of changes&#8230;so be sure to read the installation section! Along with simple optimizations and general restructure, the following features are now available: Feature List Ajax comment preview (new [...]]]></description>
			<content:encoded><![CDATA[<p>[[innerindex]]<br />
<h2 id="_introduction_1" >Introduction</h2>
<p>This has been a long time coming and I am happy to announce the release of Sexy Comments v1.4!  With this version comes <strong>a lot of changes&#8230;so be sure to read the installation section</strong>!  Along with simple optimizations and general restructure, the following features are now available:</p>
<h2 id="_feature-list_1" >Feature List</h2>
<ul>
<li>Ajax comment preview (<strong>new feature</strong>)</li>
<li>Author post highlighting</li>
<li>Avatars
<ul>
<li>Either display/hide avatars</li>
<li>Select your avatar service of choice (Gravatar and MyBlogLog options are available)</li>
<li>Specify maximum avatar dimension (Gravatar Only)</li>
<li>Customize default/trackback avatars</li>
</ul>
</li>
<li>Comment Reply-To  (<strong>new feature</strong>)</li>
<li>Comment Themes  (<strong>new feature</strong>)</li>
<li>CSS overriding</li>
<li>&#8220;Number of Comments&#8221; message customization</li>
<li>jQuery inclusion toggling</li>
</ul>
<p></p>
<h2 id="_installation-upgradi_1" >Installation &#038; Upgrading</h2>
<ol>
<li>Download Sexy Comments v1.4 from the WordPress <a href="http://wordpress.org/extend/plugins/sexy-comments/">plugin directory</a></li>
<li>Unzip that little sucker</li>
<li>Place <strong>sexy-comments</strong> folder in your wp-content/plugins directory (it should look like this: <strong>wp-content/plugins/sexy-comments/</strong></li>
<li>Log in to your WordPress plugin admin page and activate the plugin.</li>
<li>In the plugin admin page, click the <strong>SexyComments</strong> sub-menu.</li>
<li>Customize the settings until you have something that works for you.</li>
<li>Locate your theme&#8217;s template file that displays comments (typically <strong>comments.php</strong>).  Remove the comment output loop and replace with:
<pre class="brush: php; title: ; notranslate">
&lt; ?php sexycomments::show($comments); ?&gt;
</pre>
</li>
<li>If you plan to use the Ajax features or the Reply-To features, you will need to do two things.
<ol>
<li>Enable jQuery and jQuery Form Extension via the Plugin > SexyComments administration page.</li>
<li>Locate the template file that contains the comment submission form (typically <strong>comments.php</strong> <em>near the bottom</em>) and replace that chunk of code with:
<pre class="brush: php; title: ; notranslate">
&lt; ?php sexycomments::form(); ?&gt;
</pre>
</li>
</ol>
<p><em>NOTE: Be sure not to touch the section that generates the form for adding comments! This plugin does not re-create the comment creation form.</em>
</li>
<li>Lastly, consider disabling the plugin CSS and taking the example CSS provided and customize it to suit your theme&#8217;s color scheme.</li>
<li>You should be all set, now! w00t w00t! Go make a MyBlogLog or Gravatar account if you don&#8217;t already have one and upload an avatar. Gravatar tends to be pretty flakey so I&#8217;d suggest using MyBlogLog.</li>
</ol>
<p></p>
<h2 id="_faqs_1" >FAQs</h2>
<ul>
<li><strong>Q:</strong> <em>What is this &#8220;comment loop&#8221; you speak of?</em>
<p><strong>A:</strong> Ah, yes.  That thing.  Well, its anatomy looks similar to this (there will be some variation from theme to theme):</p>
<pre class="brush: php; title: ; notranslate">
&lt; ?php if ($comments) : ?&gt;
	&lt;!-- some HTML is typically here --&gt;

	&lt; ?php foreach ($comments as $comment) : ?&gt;
        &lt;!-- the output HTML of each individual comment --&gt;

	&lt; ?php endforeach; /* end for each comment */ ?&gt;
	&lt;!--...more HTML --&gt;
 &lt; ?php else : // this is displayed if there are no comments so far ?&gt;
	&lt; ?php if ('open' == $post-&gt;comment_status) : ?&gt;
		&lt;!-- typically a blank area or a place with a comment --&gt;
	 &lt; ?php else : // comments are closed ?&gt;
		&lt;!-- closed comments section --&gt;
	&lt; ?php endif; ?&gt;
&lt; ?php endif; ?&gt;
</pre>
</li>
<li><strong>Q:</strong> <em>Ok&#8230;so I just upgraded to a new version and there is nothing in the SexyComments admin page&#8230;WTF?</em>
<p><strong>A:</strong> Yeah. Sorry about that.  In this version, the directory structure has changed drastically and Sexy Comments should no longer live in wp-content/plugins/sexycomments.php OR wp-content/plugins/sexycomments/sexycomments.php, but instead it should be in <strong>wp-content/plugins/sexy-comments/</strong>.  Make sure that the plugin is in the correct location of your plugins directory.
</li>
<li><strong>Q:</strong> <em>What happened to sexycomments_print($comments)?  I used to use that to get my comments to display&#8230;will it still work?</em>
<p><strong>A:</strong> Along with a directory structure overhaul, this version had a large code overhaul as well.  The old function (<em>sexycomments_print</em>) is <strong>deprecated</strong> but will still work for the time being.  I greatly urge you to move over to the new function call <strong>sexycomments::show($comments)</strong> as that is the new *impoved* function.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/plugin-sexy-comments-v14-released/feed</wfw:commentRss>
		<slash:comments>298</slash:comments>
		</item>
		<item>
		<title>jQuery 1.1.3: Speed Improvements and Bug Fixes</title>
		<link>http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes</link>
		<comments>http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes#comments</comments>
		<pubDate>Mon, 02 Jul 2007 11:44:35 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes</guid>
		<description><![CDATA[After a long wait, jQuery 1.1.3 has been released! (Download it at the jQuery site) When I first adopted jQuery a year ago, the library boasted both faster speeds and smaller size than any other JavaScript Ajax/DOM tool. With the release of jQuery&#8217;s version 1.1.2, a number of jQuery&#8217;s operations became very slow and inefficiencient, [...]]]></description>
			<content:encoded><![CDATA[<p>After a long wait, jQuery 1.1.3 has been released! (Download it at the <a href="http://jquery.com">jQuery site</a>)  When I first adopted jQuery a year ago, the library boasted both faster speeds and smaller size than any other JavaScript Ajax/DOM tool.  With the release of jQuery&#8217;s version 1.1.2, a number of jQuery&#8217;s operations became very slow and inefficiencient, as evidenced by MooTool&#8217;s <a href="http://mootools.net/slickspeed/">SlickSpeed CSS Selector Test</a> (found via <a href="http://ajaxian.com/archives/slickspeed-css-selector-testsuite">Ajaxian</a>) which crept up a few weeks ago.</p>
<p>This new release boasts an 800% speed improvement with a number of its selectors along with various enhancements across the board!  The selector speed boost makes me one happy camper.  Check out the enhancements as it compares to 1.1.2:</p>
<table>
<thead>
<tr>
<th>Browser</th>
<th>jQuery 1.1.2</th>
<th>jQuery 1.1.3</th>
<th>% Improvement</th>
</tr>
</thead>
<tbody>
<tr>
<th>IE 6</th>
<td>4890ms</td>
<td>661ms</td>
<th>740%</th>
</tr>
<tr>
<th>Firefox 2</th>
<td>5629ms</td>
<td>567ms</td>
<th>993%</th>
</tr>
<tr>
<th>Safari 2</th>
<td>3575ms</td>
<td>475ms</td>
<th>753%</th>
</tr>
<tr>
<th>Opera 9.1</th>
<td>3196ms</td>
<td>326ms</td>
<th>980%</th>
</tr>
<tr>
<td colspan="3" style="text-align: right;">Average improvement:</td>
<th>867%</th>
</tr>
</tbody>
</table>
<p>And here&#8217;s how it now stacks up against the SlickSpeed test:</p>
<table>
<thead>
<tr>
<th>Browser</th>
<th>Prototype</th>
<th>jQuery</th>
<th>Mootools</th>
<th>Ext</th>
<th>Dojo</th>
</tr>
</thead>
<tbody>
<tr>
<th>IE 6</th>
<td>1476ms</td>
<th>661ms</th>
<td>1238ms</td>
<td>672ms</td>
<td>738ms</td>
</tr>
<tr>
<th>Firefox 2</th>
<td>219ms</td>
<td>567ms</td>
<td>220ms</td>
<td>951ms</td>
<td>440ms</td>
</tr>
<tr>
<th>Safari 2</th>
<td>1568ms</td>
<td>475ms</td>
<td>909ms</td>
<td>417ms</td>
<td>527ms</td>
</tr>
<tr>
<th>Opera 9.1</th>
<td>220ms</td>
<td>326ms</td>
<td>217ms</td>
<td>296ms</td>
<td>220ms</td>
</tr>
</tbody>
</table>
<p>In addition to the speed enhancements, there were several other notable things:</p>
<ul>
<li><strong>Unicode Selectors</strong>: Yup&#8230;now you can use fancy non-english characters.</li>
<li><strong>Escape Selectors</strong>:  This is awesome.  Now, if you use weird characters (i.e. punctuation) in a class/id name, you can now escape those characters within the selector syntax.  E.g. <em>$(&#8220;div#foo\.bar&#8221;)</em></li>
<li><strong>Inequality Selector</strong>: You can now select elements where their attributes do not match a specific string of characters.  E.g. <em>$(&#8220;div[@id!=test]&#8220;)</em></li>
<li><strong>:nth-child() improvements</strong>: jQuery has supported selectors like :nth-child(1) and :nth-child(odd) since the beginning of jQuery, now they’ve added advanced :nth-child selectors, such as:
<ul>
<li>$(&#8220;div:nth-child(2n)&#8221;)</li>
<li>$(&#8220;div:nth-child(2n+1)&#8221;)</li>
<li>$(&#8220;div:nth-child(n)&#8221;)</li>
</ul>
</li>
<li><strong>Space-separated attributes</strong>: After being removed in jQuery 1.0, this selector has now been brought back by popular demand. It allows you to locate individual items in a space-separated attribute (such as a class or rel attribute).  E.g. <em>$(&#8220;a[@rel~=test]&#8220;)</em></li>
<li><strong>Animation Improvements</strong>: Animations are now significantly faster and smoother. Additionally, you can run more simultaneous animations without incurring any speed hits.</li>
<li><strong>DOM Event Listeners</strong>: Internally, the jQuery Event system has been overhauled to use the DOM Event system, rather than the classical “onclick” style of binding event handlers. This improvement allows you to be more unobtrusive in your use of the library (not affecting the flow of other libraries around it). Additionally, it helped to resolve some of the outstanding issues that existed with binding event listeners to IFrames.</li>
<li><strong>Event Normalization</strong>: Some great steps have been taken to normalize keyboard and mouse events. You can now access the event.which property to get most details about the specific key or button that was pressed.</li>
<li><strong>Multiple .is()</strong>: The .is() method can now take multiple selectors, separated by a comma. This allows you to test your jQuery set against multiple selectors. E.g. <em>$(&#8220;div&#8221;).is(&#8220;:visible, :first&#8221;)</em></li>
<li><strong>Browser Version</strong>: A commonly requested feature, by plugin authors, was a way to determine what browser version their users were using. We now expose an extra property through which this information can be accessed. E.g. <em>jQuery.browser.version</em></li>
</ul>
<p>Additionally, the jQuery team has addressed 80+ bugs and has roadmapped out the next two releases (v1.1.4 and v1.2).  To check out the full jQuery 1.2 roadmap, <a href="http://docs.jquery.com/JQuery_1.2_Roadmap">go here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-113-speed-improvements-and-bug-fixes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faster Page Loads With Image Concatenation</title>
		<link>http://borkweb.com/story/faster-page-loads-with-image-concatenation</link>
		<comments>http://borkweb.com/story/faster-page-loads-with-image-concatenation#comments</comments>
		<pubDate>Wed, 25 Apr 2007 15:50:06 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[image size]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[latency]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/faster-page-loads-with-image-concatenation</guid>
		<description><![CDATA[[[innerindex]] Introduction When designing web applications, icons and images are used to enhance the user experience, give visual cues, and simply look sexy. For complex web apps, the quantity and resulting latency of icons and images used can greatly impact page load times&#8230;and developers, in most cases, generally try to reduce page load time with [...]]]></description>
			<content:encoded><![CDATA[<p>[[innerindex]]<br />
<h2 id="_introduction_8" >Introduction</h2>
<p>When designing web applications, icons and images are used to enhance the user experience, give visual cues, and simply look sexy.  For complex web apps, the quantity and resulting <a href="http://en.wikipedia.org/wiki/Lag">latency</a> of icons and images used can greatly impact page load times&#8230;and developers, in most cases, generally try to reduce page load time with a sweet web app rather than increase it.</p>
<p>To reduce latency in my apps, I use Image Concatenation!  Coupled with a bit of CSS magic, performance improves and life is great.</p>
<h2 id="_image-concatenationw_1" >Image Concatenation&#8230;WTF?</h2>
<p>The basic idea is this: <strong>Change X number of image downloads to 1 image download</strong> by <strong>making 1 big image that contains the X images.</strong></p>
<p>As an example, lets say we have these icons:</p>
<div class="center-pic"><a href="http://www.flickr.com/photos/borkweb/472422038/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/170/472422038_4b0d062dfe_o.gif" width="14" height="14" alt="help" /></a>&nbsp;<a href="http://www.flickr.com/photos/borkweb/472422044/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/192/472422044_88096e3aa5_o.gif" width="15" height="14" alt="settings" /></a>&nbsp;<a href="http://www.flickr.com/photos/borkweb/472422042/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/177/472422042_43718aa8a3_o.gif" width="15" height="14" alt="maximize" /></a>&nbsp;<a href="http://www.flickr.com/photos/borkweb/472437809/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/202/472437809_d202ac49b3_o.gif" width="15" height="14" alt="shade" /></a>&nbsp;<a href="http://www.flickr.com/photos/borkweb/472422036/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/198/472422036_4e0a97e7e3_o.gif" width="15" height="14" alt="grow" /></a>&nbsp;<a href="http://www.flickr.com/photos/borkweb/472422030/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/220/472422030_84bc73ceeb_o.gif" width="13" height="14" alt="close" /></a></div>
<p>While those are pretty tiny in size, on page load the user must <em>still</em> deal with downloading 6 individual images.  Instead, we can simply concatenate those images using whatever image software that suits your fancy.  Like so:</p>
<div class="center-pic">
<a href="http://www.flickr.com/photos/borkweb/472422040/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/204/472422040_6c50b7ed1a_o.gif" width="88" height="14" alt="icons" /></a>
</div>
<h2 id="_displaying-concatena_1" >Displaying Concatenated Images</h2>
<p>Now that we have our sweet concatenated image we can&#8217;t simply drop that image into an image tag and call it good&#8230;that&#8217;ll display all icons at once.  So&#8230;how do we display it?</p>
<p>To display the concatenated image, you need to place that image as a background on an appropriately sized DOM element using CSS to adjust the <strong>background positioning</strong> to make the appropriate image display.  Now, when I say a DOM element&#8230;it could really be anything as you can plop a background image on any element with CSS pretty easily:</p>
<pre class="brush: css; title: ; notranslate">
.whatever{
  background: url('/path/to/image.png');
}
</pre>
<p>Even though you can use any element, only a few make sense.  I&#8217;ve seen spans and divs used to accomplish this task, but styling those elements to work cross-browser is flaky at best and really churns my stomach.  The element that his handled pretty universally is the <strong>img</strong> tag.  </p>
<p>Yes&#8230;yes&#8230;I know, I just said don&#8217;t place the concatenated image in an img tag.  I still hold to that statement.  You place the concatenated image as a <strong>background</strong> on the img tag.  So what goes in the src of the img tag?  Our old friend the 1 pixel by 1 pixel transparent gif, of course!  This way, the image will still act as an image, can be styled like an image, and be super easy to update via CSS.</p>
<h2 id="_an-example_1" >An Example</h2>
<p>Lets say we have the following concatenated image: <a href="http://www.flickr.com/photos/borkweb/472456608/" title="Photo Sharing"><img src="http://farm1.static.flickr.com/199/472456608_de2ee630dc_o.gif" width="48" height="16" alt="sidebar_icons"  style="float: none;vertical-align:middle;"/></a> that we want displayed in the sidebar with the appropriate links.</p>
<p>Lets set up the HTML first using <strong>transparent.gif</strong> (a transparent 1&#215;1 pixel image) as the src of the image tags:</p>
<pre class="brush: xml; title: ; notranslate">
...
&lt;ul id=&quot;sidebar&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;index.html&quot; title=&quot;Home&quot;&gt;&lt;img src=&quot;images/transparent.gif&quot; class=&quot;icon icon-home&quot; alt=&quot;Home&quot;/&gt;Home&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;search.html&quot; title=&quot;Search&quot;&gt;&lt;img src=&quot;images/transparent.gif&quot; class=&quot;icon icon-search&quot; alt=&quot;Search&quot;/&gt;Search&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;bookmarks.html&quot; title=&quot;Bookmarks&quot;&gt;&lt;img src=&quot;images/transparent.gif&quot; class=&quot;icon icon-bookmarks&quot; alt=&quot;Bookmarks&quot;/&gt;Bookmarks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
...
</pre>
<p>Note the class names on the images&#8230;those will be used in the CSS as such:</p>
<pre class="brush: css; title: ; notranslate">
#sidebar img.icon{
  background: url('/path/to/concatenated/image.gif') no-repeat;
  height: 16px;
  margin-right: 3px;
  vertical-align: middle;
  width: 16px;
}

#sidebar img.icon-home{
  background-position: 0px 0px;
}

#sidebar img.icon-search{
  background-position: -16px 0px;
}

#sidebar img.icon-bookmarks{
  background-position: -32px 0px;
}
</pre>
<p>That&#8217;s really all there is to it.  The <strong>icon</strong> class allows us to set the same image background and dimensions for all icons in the sidebar.  The individual classes allow us to change the image that actually shows through.</p>
<h2 id="_more-css-magic_1" >More CSS Magic</h2>
<p>Since CSS is being used to display the appropriate image, you can do your typical property manipulation as normal (e.g. :hover, set transparencies, etc).  </p>
<p>A little trick I picked up at <a href="http://zimbra.com">Zimbra</a>&#8216;s presentation (the same presentation I learned the benefit of image concatenation) at <a href="http://borkweb.com/story/the-ajax-experience-leveraging-ajax-for-enterprise-application-development">The Ajax Experience</a> last October was how to reduce the number of images used by representing inactive icons with CSS transparency rather than using individual images for inactive icons.  Like so:</p>
<pre class="brush: css; title: ; notranslate">
#sidebar img.inactive{
  filter:alpha(opacity=50);
  -moz-opacity: 0.5;
  opacity: 0.5;
}
</pre>
<p>If you wanted to make the icons partially transparent all the time but on mouse over make them 0% transparent, you can do so like so:</p>
<pre class="brush: css; title: ; notranslate">
#sidebar img.icon{
  filter:alpha(opacity=50);
  -moz-opacity: 0.5;
  opacity: 0.5;
}

#sidebar img.icon:hover{
  filter:alpha(opacity=100);
  -moz-opacity:1.0;
  opacity:1.0;
}
</pre>
<p>Basically, whatever CSS magic you can weave can be done.</p>
<h2 id="_additional-benefits_1" >Additional Benefits</h2>
<p>If you are a developer working in a painful development environment, the above methods are extremely valuable.  Oh&#8230;and by painful I mean: any change to the base document structure requires a restart of the application.  I&#8217;ve been doing a lot of development in an XSLT/Java environment recently and this method has saved me countless restarts :)  </p>
<p>Now, if I decide an icon should change from a &#8220;house&#8221; to a &#8220;moon&#8221; (for some strange reason) I can make that change easily in CSS without needing to change the XSLT&#8230;thus no restart needed.  Beautiful.</p>
<p>Heck&#8230;I use this CSS method for a number of non-concatenated images as well just so I can make general image changes with ease.</p>
<h2 id="_what-not-to-do_1" >What Not To Do</h2>
<p>When using the above image concatenation methods, it is important to note that concatenating similar images is a good plan.  Avoid concatenating images of vastly different sizes because the wasted space on the concatenated image increases the amount of data being downloaded which can counter-act what we are attempting to reduce by concatenation.  </p>
<h2 id="_drawbacks_1" >Drawbacks</h2>
<p><strong>Update:</strong> <em>This section was added a couple of hours after posting as per someone&#8217;s suggestion.</em><br />
Using this method can affect the printability of your page as background images assigned with CSS don&#8217;t show in print too well :)</p>
<h2 id="_conclusion_4" >Conclusion</h2>
<p>Image concatenation can be a beautiful thing when dealing with large numbers of icons/images.  But, as with anything, weigh its benefit.  Thus far, I&#8217;m pretty happy with the results!</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/faster-page-loads-with-image-concatenation/feed</wfw:commentRss>
		<slash:comments>107</slash:comments>
		</item>
		<item>
		<title>MyComic WordPress Plugin v0.5 Released!</title>
		<link>http://borkweb.com/story/mycomic-wordpress-plugin-v05-released</link>
		<comments>http://borkweb.com/story/mycomic-wordpress-plugin-v05-released#comments</comments>
		<pubDate>Fri, 09 Mar 2007 14:25:49 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[comic browser]]></category>
		<category><![CDATA[mycomic]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web comic]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/mycomic-wordpress-plugin-v05-released</guid>
		<description><![CDATA[Last night I went into plugin fixing mode and have updated and released the latest version of the MyComic WordPress Plugin (download it here)! This new version is compatible with the latest version of WordPress (2.1.2) and it fixes/adds/changes a few things: Bug Fixes: Error on plugin activation is fixed Fixed some inefficiencies with the [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I went into <a href="http://borkweb.com/story/masterwish-wordpress-plugin-v15-released">plugin fixing mode</a> and have updated and released the latest version of the <a href="http://borkweb.com/story/wordpress-plugin-mycomic-browser">MyComic WordPress Plugin</a> (download it <a href="http://borkweb.com/downloads/mycomic.zip">here</a>)!  This new version is compatible with the latest version of <a href="http://wordpress.org">WordPress</a> (2.1.2) and it fixes/adds/changes a few things:</p>
<p>Bug Fixes:</p>
<ul>
<li>Error on plugin activation is fixed</li>
<li>Fixed some inefficiencies with the comic nav display code</li>
<li>Fixed some incompatibility errors with the new version of WordPress</li>
<li>Correctly linked to the example MyComic CSS file</li>
</ul>
<p>New Features/Updates:</p>
<ul>
<li>MyComic options menu has been relocated from the WordPress Options Tab to the WordPress Plugins Tab</li>
<li>Users can choose to sort comic navigation by post_id or by comic id</li>
</ul>
<p>Special thanks to all the people that left comments to poke/prod me to update the plugin.  Thanks to <a href="http://www.zetahelp.net/">Mosey</a> for being my Beta Testing Guinea Pig.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/mycomic-wordpress-plugin-v05-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery 1.1a Released</title>
		<link>http://borkweb.com/story/jquery-11a-released</link>
		<comments>http://borkweb.com/story/jquery-11a-released#comments</comments>
		<pubDate>Mon, 08 Jan 2007 13:50:10 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jquery-11a-released</guid>
		<description><![CDATA[The jQuery 1.1a has been released today by the jQuery team! Its important to note that this is an alpha version before you go out and install it in a production environment, but the jQuery team asks that people give it a round of testing prior to the release this weekend. The &#8220;Quick and Dirty&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://jquery.com/blog/2007/01/08/jquery-11a/">jQuery 1.1a has been released</a> today by the jQuery team!  Its important to note that this is an alpha version before you go out and install it in a production environment, but the jQuery team asks that people give it a round of testing prior to the release this weekend.</p>
<p>The &#8220;Quick and Dirty&#8221; on v1.1:</p>
<ul>
<li>Its selectors are 10-20x faster than those in jQuery 1.0.4.</li>
<li>The documentation has been completely revamped.</li>
<li>The complexity of the API has dropped by 47%.</li>
<li>It has a ton of bug fixes.</li>
<li>It has a bunch of great new features.</li>
<li>… and it’s still the small 19KB that you’ve come to expect.</li>
</ul>
<p>With this release come a <em>lot</em> of API changes:</p>
<p>Firstly, <strong>:nth-child()</strong> now starts at 1, instead of 0.</p>
<p>A number of methods have been re-organized/re-named.  Here&#8217;s the translation of old to new functions:</p>
<table style="width:100%">
<tr>
<th>Old Way (1.0.x)</th>
<th>New Way (1.1)</th>
</tr>
<tr>
<td>.ancestors()</td>
<td>.parents()</td>
</tr>
<tr>
<td>.width()</td>
<td>.css(&#8221;width&#8221;)</td>
</tr>
<tr>
<td>.height()</td>
<td>.css(&#8221;height&#8221;)</td>
</tr>
<tr>
<td>.top()</td>
<td>.css(&#8221;top&#8221;)</td>
</tr>
<tr>
<td>.left()</td>
<td>.css(&#8221;left&#8221;)</td>
</tr>
<tr>
<td>.position()</td>
<td>.css(&#8221;position&#8221;)</td>
</tr>
<tr>
<td>.float()</td>
<td>.css(&#8221;float&#8221;)</td>
</tr>
<tr>
<td>.overflow()</td>
<td>.css(&#8221;overflow&#8221;)</td>
</tr>
<tr>
<td>.color()</td>
<td>.css(&#8221;color&#8221;)</td>
</tr>
<tr>
<td>.background()</td>
<td>.css(&#8221;background&#8221;)</td>
</tr>
<tr>
<td>.id()</td>
<td>.attr(&#8221;id&#8221;)</td>
</tr>
<tr>
<td>.title()</td>
<td>.attr(&#8221;title&#8221;)</td>
</tr>
<tr>
<td>.name()</td>
<td>.attr(&#8221;name&#8221;)</td>
</tr>
<tr>
<td>.href()</td>
<td>.attr(&#8221;href&#8221;)</td>
</tr>
<tr>
<td>.src()</td>
<td>.attr(&#8221;src&#8221;)</td>
</tr>
<tr>
<td>.rel()</td>
<td>.attr(&#8221;rel&#8221;)</td>
</tr>
<tr>
<td>.oneblur(fn)</td>
<td>.one(&#8221;blur&#8221;,fn)</td>
</tr>
<tr>
<td>.onefocus(fn)</td>
<td>.one(&#8221;focus&#8221;,fn)</td>
</tr>
<tr>
<td>.oneload(fn)</td>
<td>.one(&#8221;load&#8221;,fn)</td>
</tr>
<tr>
<td>.oneresize(fn)</td>
<td>.one(&#8221;resize&#8221;,fn)</td>
</tr>
<tr>
<td>.onescroll(fn)</td>
<td>.one(&#8221;scroll&#8221;,fn)</td>
</tr>
<tr>
<td>.oneunload(fn)</td>
<td>.one(&#8221;unload&#8221;,fn)</td>
</tr>
<tr>
<td>.oneclick(fn)</td>
<td>.one(&#8221;click&#8221;,fn)</td>
</tr>
<tr>
<td>.onedblclick(fn)</td>
<td>.one(&#8221;dblclick&#8221;,fn)</td>
</tr>
<tr>
<td>.onemousedown(fn)</td>
<td>.one(&#8221;mousedown&#8221;,fn)</td>
</tr>
<tr>
<td>.onemouseup(fn)</td>
<td>.one(&#8221;mouseup&#8221;,fn)</td>
</tr>
<tr>
<td>.onemousemove(fn)</td>
<td>.one(&#8221;mousemove&#8221;,fn)</td>
</tr>
<tr>
<td>.onemouseover(fn)</td>
<td>.one(&#8221;mouseover&#8221;,fn)</td>
</tr>
<tr>
<td>.onemouseout(fn)</td>
<td>.one(&#8221;mouseout&#8221;,fn)</td>
</tr>
<tr>
<td>.onechange(fn)</td>
<td>.one(&#8221;change&#8221;,fn)</td>
</tr>
<tr>
<td>.onereset(fn)</td>
<td>.one(&#8221;reset&#8221;,fn)</td>
</tr>
<tr>
<td>.oneselect(fn)</td>
<td>.one(&#8221;select&#8221;,fn)</td>
</tr>
<tr>
<td>.onesubmit(fn)</td>
<td>.one(&#8221;submit&#8221;,fn)</td>
</tr>
<tr>
<td>.onekeydown(fn)</td>
<td>.one(&#8221;keydown&#8221;,fn)</td>
</tr>
<tr>
<td>.onekeypress(fn)</td>
<td>.one(&#8221;keypress&#8221;,fn)</td>
</tr>
<tr>
<td>.onekeyup(fn)</td>
<td>.one(&#8221;keyup&#8221;,fn)</td>
</tr>
<tr>
<td>.oneerror(fn)</td>
<td>.one(&#8221;error&#8221;,fn)</td>
</tr>
<tr>
<td>.unblur(fn)</td>
<td>.unbind(&#8221;blur&#8221;,fn)</td>
</tr>
<tr>
<td>.unfocus(fn)</td>
<td>.unbind(&#8221;focus&#8221;,fn)</td>
</tr>
<tr>
<td>.unload(fn)</td>
<td>.unbind(&#8221;load&#8221;,fn)</td>
</tr>
<tr>
<td>.unresize(fn)</td>
<td>.unbind(&#8221;resize&#8221;,fn)</td>
</tr>
<tr>
<td>.unscroll(fn)</td>
<td>.unbind(&#8221;scroll&#8221;,fn)</td>
</tr>
<tr>
<td>.ununload(fn)</td>
<td>.unbind(&#8221;unload&#8221;,fn)</td>
</tr>
<tr>
<td>.unclick(fn)</td>
<td>.unbind(&#8221;click&#8221;,fn)</td>
</tr>
<tr>
<td>.undblclick(fn)</td>
<td>.unbind(&#8221;dblclick&#8221;,fn)</td>
</tr>
<tr>
<td>.unmousedown(fn)</td>
<td>.unbind(&#8221;mousedown&#8221;,fn)</td>
</tr>
<tr>
<td>.unmouseup(fn)</td>
<td>.unbind(&#8221;mouseup&#8221;,fn)</td>
</tr>
<tr>
<td>.unmousemove(fn)</td>
<td>.unbind(&#8221;mousemove&#8221;,fn)</td>
</tr>
<tr>
<td>.unmouseover(fn)</td>
<td>.unbind(&#8221;mouseover&#8221;,fn)</td>
</tr>
<tr>
<td>.unmouseout(fn)</td>
<td>.unbind(&#8221;mouseout&#8221;,fn)</td>
</tr>
<tr>
<td>.unchange(fn)</td>
<td>.unbind(&#8221;change&#8221;,fn)</td>
</tr>
<tr>
<td>.unreset(fn)</td>
<td>.unbind(&#8221;reset&#8221;,fn)</td>
</tr>
<tr>
<td>.unselect(fn)</td>
<td>.unbind(&#8221;select&#8221;,fn)</td>
</tr>
<tr>
<td>.unsubmit(fn)</td>
<td>.unbind(&#8221;submit&#8221;,fn)</td>
</tr>
<tr>
<td>.unkeydown(fn)</td>
<td>.unbind(&#8221;keydown&#8221;,fn)</td>
</tr>
<tr>
<td>.unkeypress(fn)</td>
<td>.unbind(&#8221;keypress&#8221;,fn)</td>
</tr>
<tr>
<td>.unkeyup(fn)</td>
<td>.unbind(&#8221;keyup&#8221;,fn)</td>
</tr>
<tr>
<td>.unerror(fn)</td>
<td>.unbind(&#8221;error&#8221;,fn)</td>
</tr>
</table>
<p>What&#8217;s more?  Well, the jQuery team will be posting throughout the week on all the cool new things you can do with jQuery 1.1.  I&#8217;m looking forward to seeing the changes!  Oh, with regards to changes, its important to note with that list of functions above&#8230;the old method will no longer work come v1.1.  To keep those functions in use, a &#8216;helper&#8217; library will need to be used&#8230;chances are that won&#8217;t be available until the 1.1 final.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jquery-11a-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSMin: Javascript Compression</title>
		<link>http://borkweb.com/story/jsmin-javascript-compression</link>
		<comments>http://borkweb.com/story/jsmin-javascript-compression#comments</comments>
		<pubDate>Mon, 01 Jan 2007 23:49:50 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[douglas crockford]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[jsmin]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://borkweb.com/story/jsmin-javascript-compression</guid>
		<description><![CDATA[While at The Ajax Experience in October, I attended a presentation who spoke of the 3 C&#8217;s (Combine, Compress, Cache) for Ajax development. In the Compress section I was introduced to the beauty of JSMin! What is it? Well, shut up and I&#8217;ll tell you. Quoting Douglas Crockford (the creator of JSMin): JSMin is a [...]]]></description>
			<content:encoded><![CDATA[<p>While at <a href="http://borkweb.com/story/the-ajax-experience">The Ajax Experience</a> in October, I attended <a href="http://borkweb.com/story/the-ajax-experience-leveraging-ajax-for-enterprise-application-development">a presentation</a> who spoke of the 3 C&#8217;s (Combine, Compress, Cache) for Ajax development.  In the Compress section I was introduced to the beauty of <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a>!</p>
<p>What is it? Well, shut up and I&#8217;ll tell you.</p>
<p>Quoting <a href="http://www.crockford.com/">Douglas Crockford</a> (the creator of JSMin):</p>
<blockquote><p>
JSMin is a filter which removes comments and unnecessary whitespace from JavaScript files. It typically reduces filesize by half, resulting in faster downloads. It also encourages a more expressive programming style because it eliminates the download cost of clean, literate self-documentation.
</p></blockquote>
<p>As I&#8217;ve been creating more complex Javascript applications, the file size has been increasing (although the size is greatly reduced, thanks to <a href="http://borkweb.com/story/the-ajax-experience-jquery-toolkit">jQuery</a>).  And, as a careful programmer should, I place comments all over my Javascript code so I don&#8217;t draw too many blanks while updating/debugging&#8230;well, those comments tend to bloat the file size, as does the whitespace.  The stripping of those elements alone has dropped the file-size of a number of my scripts by 40-50%!  Thats huge.  What previously was an 8K file goes down to 4K.  Awesome.  </p>
<p>If you&#8217;re curious what JSMin does to your code, here&#8217;s an example that Douglas gives:<br />
<strong>Before</strong></p>
<pre class="brush: jscript; title: ; notranslate">
// is.js

// (c) 2001 Douglas Crockford
// 2001 June 3

// is

// The -is- object is used to identify the browser.  Every browser edition
// identifies itself, but there is no standard way of doing it, and some of
// the identification is deceptive. This is because the authors of web
// browsers are liars. For example, Microsoft's IE browsers claim to be
// Mozilla 4. Netscape 6 claims to be version 5.

var is = {
    ie:      navigator.appName == 'Microsoft Internet Explorer',
    java:    navigator.javaEnabled(),
    ns:      navigator.appName == 'Netscape',
    ua:      navigator.userAgent.toLowerCase(),
    version: parseFloat(navigator.appVersion.substr(21)) ||
             parseFloat(navigator.appVersion),
    win:     navigator.platform == 'Win32'
}
is.mac = is.ua.indexOf('mac') &gt;= 0;
if (is.ua.indexOf('opera') &gt;= 0) {
    is.ie = is.ns = false;
    is.opera = true;
}
if (is.ua.indexOf('gecko') &gt;= 0) {
    is.ie = is.ns = false;
    is.gecko = true;
}
</pre>
<p><strong>After</strong></p>
<pre class="brush: jscript; title: ; notranslate">
var is={ie:navigator.appName=='Microsoft Internet Explorer',java:navigator.javaEnabled(),ns:navigator.appName=='Netscape',ua:navigator.userAgent.toLowerCase(),version:parseFloat(navigator.appVersion.substr(21))||parseFloat(navigator.appVersion),win:navigator.platform=='Win32'}
is.mac=is.ua.indexOf('mac')&gt;=0;if(is.ua.indexOf('opera')&gt;=0){is.ie=is.ns=false;is.opera=true;}
if(is.ua.indexOf('gecko')&gt;=0){is.ie=is.ns=false;is.gecko=true;}
</pre>
<p>As you can see&#8230;the result is not easily read so you&#8217;ll want to keep your original script around in the event that editing is needed.  Super cool.  So how do you get it?  Well&#8230;there&#8217;s a number of languages that JSMin logic has been ported to: <a href="http://www.crockford.com/javascript/jsmin.zip">zip file containing<br />
  an MS-DOS.exe file</a>, or you can get the <a href="http://www.crockford.com/javascript/jsmin.c">C source code</a> and build it yourself. Now in <a href="http://www.crockford.com/javascript/jsmin.cs">C#</a> and <a href="http://inconspicuous.org/projects/jsmin/JSMin.java">Java</a> and <a href="http://fmarcia.info/jsmin/">JavaScript</a> and <a href="http://search.cpan.org/%7Eherrera/JavaScript-Minifier-0.01/lib/JavaScript/Minifier.pm">Perl</a> and <a href="http://www.crockford.com/javascript/jsmin2.php.txt">PHP</a> and <a href="http://www.crockford.com/javascript/jsmin.py.txt">Python</a> and <a href="http://www.crockford.com/javascript/jsmin.rb">Ruby</a>.</p>
<p>If you haven&#8217;t thought about Javascript compression yet, you might want to start.  Try it out&#8230;you&#8217;ll be happy you did.  Oh, and if you are curious: the <a href="http://fmarcia.info/jsmin/">Javascript</a> implementation of JSMin is my favorite as it gives some excellent feedback and comment options on compression.</p>
]]></content:encoded>
			<wfw:commentRss>http://borkweb.com/story/jsmin-javascript-compression/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

