<?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>Notes Log</title>
	<atom:link href="http://noteslog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://noteslog.com</link>
	<description>I'd like there to be no software patents at all,\nand to back off from the ones that have been issued (Ewald Detjens)</description>
	<pubDate>Tue, 01 Jul 2008 20:13:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Chili 2.1 Released Today</title>
		<link>http://noteslog.com/post/chili-21-released-today/</link>
		<comments>http://noteslog.com/post/chili-21-released-today/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 16:39:29 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Chili]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[highlight]]></category>

		<category><![CDATA[language]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[syntax]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=215</guid>
		<description><![CDATA[Changes

Added support for line numbers (boolean option: lineNumbers)
Added a selection helper for Internet Explorer and Mozilla
Improved the PHP recipe for working fine with Safari too
Improved crossbrowser support

Links

download
start page

]]></description>
			<content:encoded><![CDATA[<h4>Changes</h4>
<ul>
<li>Added support for line numbers (boolean option: lineNumbers)</li>
<li>Added a selection helper for Internet Explorer and Mozilla</li>
<li>Improved the PHP recipe for working fine with Safari too</li>
<li>Improved crossbrowser support</li>
</ul>
<h4>Links</h4>
<ul>
<li><a href="http://code.google.com/p/jquery-chili-js/downloads/list">download</a></li>
<li><a href="http://noteslog.com/personal/projects/chili/" target="_blank">start page</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/chili-21-released-today/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Counting, repeating, and unique ids</title>
		<link>http://noteslog.com/post/counting-repeating-and-unique-ids/</link>
		<comments>http://noteslog.com/post/counting-repeating-and-unique-ids/#comments</comments>
		<pubDate>Sun, 01 Jun 2008 20:40:42 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[other]]></category>

		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=211</guid>
		<description><![CDATA[Here are some micro jQuery plugins that implement JavaScript closures, for object oriented pleasure.
Repeat Something n Times
/**
 * Repeat something n times
 */
$.repeat = function( n ) {
	return {
		times: function( something ) {
			for( var i = 0; i &#60; n; i++ ) {
				something( i );
			}
			return this;
		}
	}
};

/*
 * Example: hip hip hurrah
 */
$.repeat(3).times( function( i ) [...]]]></description>
			<content:encoded><![CDATA[<p>Here are some micro jQuery plugins that implement JavaScript closures, for object oriented pleasure.</p>
<h4>Repeat Something n Times</h4>
<p><pre><code class="javascript">/**
 * Repeat something n times
 */
$.repeat = function( n ) {
	return {
		times: function( something ) {
			for( var i = 0; i &lt; n; i++ ) {
				something( i );
			}
			return this;
		}
	}
};

/*
 * Example: hip hip hurrah
 */
$.repeat(3).times( function( i ) { 
	$( 'body' ).append( '&lt;span&gt;' + (i &lt; 2 ? &quot;hip&quot; : &quot;hurrah&quot;) + ' &lt;/span&gt;' );
} );</code></pre></p>
<h4>New Date Value (unique id)</h4>
<p><pre><code class="javascript">/**
 * Return a new date value
 * 
 * Each call returns a value greater than the previous call
 */
$.newDateValue = (function() {
	var current = 0;
	return function() {
		do {
			var d = Number(new Date());
		} 
		while( current == d );
		return (current = d);
	}
})();

/*
 * Example: 4 unique ids, and 4 not unique
 */
$.repeat(4)
	.times( function( i ) {
		$( 'body' ).append( '&lt;div&gt;' + i + ': ' + $.newDateValue() + '&lt;/div&gt;' );
	} )
	.times( function( i ) {
		$( 'body' ).append( '&lt;div&gt;' + i + ': ' + Number(new Date()) + '&lt;/div&gt;' );
	} );</code></pre></p>
<h4>Counter</h4>
<p><pre><code class="javascript">/**
 * Return a counter with three methods: next, current, and init
 */
$.counter = function() {
	var current = 0;
	var increment = 1;
	return {
		/**
		 * Initialize current value and increment
		 */
		  init: function( c, i ) {
			var newCurrent = parseInt( c, 10 ); 
			if (! isNaN( newCurrent )) {
				current = newCurrent;
			}
			var newIncrement = parseInt( i, 10 ); 
			if (! isNaN( newIncrement )) {
				increment = newIncrement;
			}
			return this;
		}
		/**
		 * Get the next value
		 */
		, next: function() { 
			return current += increment; 
		}
		/**
		 * Get the current value
		 */
		, current: function() { 
			return current; 
		}
	}
};

/*
 * Example: 1 2 3 3 1 -1 -3
 */
var k = $.counter();

$.repeat(3).times( function() {
	$( 'body' ).append( '&lt;span&gt;' + k.next() + ' &lt;/span&gt;' );
} );

$.repeat(1).times( function() {
	$( 'body' ).append( '&lt;span&gt;' + k.current() + ' &lt;/span&gt;' );
} );

k.init( null, -2 );

$.repeat(3).times( function() {
	$( 'body' ).append( '&lt;span&gt;' + k.next() + ' &lt;/span&gt;' );
} );</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/counting-repeating-and-unique-ids/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to write a fast catch-all RegExp</title>
		<link>http://noteslog.com/post/how-to-write-a-fast-catch-all-regexp/</link>
		<comments>http://noteslog.com/post/how-to-write-a-fast-catch-all-regexp/#comments</comments>
		<pubDate>Sat, 17 May 2008 17:55:36 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Fixing]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[regular expression]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=208</guid>
		<description><![CDATA[In How to write a safe catch-all RegExp I suggested to use (?:\w&#124;\W)* for matching any character in a regular expression. It&#8217;s certainly true and safe, and the same stands for its siblings (?:\s&#124;\S)* and (?:\d&#124;\D)*.
If you want to match a large text, these expressions are not the best. I&#8217;ve prepared a simple test page [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://noteslog.com/post/how-to-write-a-safe-catch-all-regexp/" target="_self">How to write a safe catch-all RegExp</a> I suggested to use <strong><span style="color: #333399;">(?:\w|\W)*</span></strong> for matching any character in a regular expression. It&#8217;s certainly true and safe, and the same stands for its siblings <strong><span style="color: #333399;">(?:\s|\S)*</span></strong> and <strong><span style="color: #333399;">(?:\d|\D)*</span></strong>.</p>
<p>If you want to match a large text, these expressions are not the best. I&#8217;ve prepared a simple <a href="http://noteslog.com/personal/projects/regexp/test.html">test page</a> where the GeSHi&#8217;s engine file, which is almost 120KB, is going to be matched by the regular expression you input.</p>
<p>In Firefox 2 the performance is quite good, about 100 ms on my PC, but in Internet Explorer 7 it takes more than 7 minutes !!!</p>
<p>The best catch-all regular expression is <strong><span style="color: #333399;">[\w\W]*</span></strong>, which employs about 50 ms in FF2, and 0 ms in IE7 !!! (yes, zero milliseconds)</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/how-to-write-a-fast-catch-all-regexp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Chili 2.0 Released Today</title>
		<link>http://noteslog.com/post/chili-20-released-today/</link>
		<comments>http://noteslog.com/post/chili-20-released-today/#comments</comments>
		<pubDate>Tue, 13 May 2008 21:40:14 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Chili]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[highlight]]></category>

		<category><![CDATA[language]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[syntax]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=207</guid>
		<description><![CDATA[UPDATE: Chili 2.1 has been released
Changes

added support for a much better recipe format
optimized regular expressions for speed
moved project hosting to Google Code: jquery-chili-js
removed support for the previous recipe format
removed support for metaobjects
removed support for nearly obsolete features


Links

download
start page

A new recipe format
Chili 2.0 supports a new recipe format which is a bit more structured than the [...]]]></description>
			<content:encoded><![CDATA[<h4><span style="color: #ff0000;"><strong>UPDATE</strong>: <a href="http://noteslog.com/post/chili-21-released-today" target="_self">Chili 2.1</a> has been released</span></h4>
<h4>Changes</h4>
<ul>
<li>added support for a much better recipe format</li>
<li>optimized regular expressions for speed</li>
<li>moved project hosting to Google Code: <a href="http://code.google.com/p/jquery-chili-js/" target="_blank">jquery-chili-js</a></li>
<li>removed support for the previous recipe format</li>
<li>removed support for metaobjects</li>
<li>removed support for nearly obsolete features<br />
<a href="http://code.google.com/p/jquery-chili-js/" target="_blank"></a></li>
</ul>
<h4>Links</h4>
<ul>
<li><a href="http://code.google.com/p/jquery-chili-js/downloads/list">download</a></li>
<li><a href="http://noteslog.com/personal/projects/chili/" target="_blank">start page</a></li>
</ul>
<h4>A new recipe format</h4>
<p>Chili 2.0 supports a new recipe format which is a bit more structured than the old one and will make hard-to-highlight languages a thing of the past. BTW, old recipes won&#8217;t be accepted by Chili 2.0. (although a simple manual conversion is possible)</p>
<h5>How to convert old recipes to the new format</h5>
<p>First of all let&#8217;s see an example of how to convert a recipe in the old format to the new one.</p>
<p>What follows is a piece of recipe (for JavaScript) in the old format</p>
<p><pre><code class="javascript">{
	  ignoreCase: false
	, steps: {
		  ml_comment: { 
			exp: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\//
		}
		, sl_comment: { 
			exp: /\/\/.*/
		}
		//...
	}
}</code></pre></p>
<p>And here is the same piece in the new format</p>
<p><pre><code class="javascript">{
	  _name: 'js'
	, _case: true
	, _main: {
		  ml_comment: { 
			  _match: /\/\*[^*]*\*+(?:[^\/][^*]*\*+)*\//
			, _style: 'color: gray;'
		}
		, sl_comment: { 
			  _match: /\/\/.*/
			, _style: 'color: green;'
		}
		//...
	}
}</code></pre></p>
<p>As you see, they are very similar. Here are all the differences:</p>
<ol>
<li>property names beginning with an underscore are reserved words</li>
<li><span style="color: #333399;">_name</span> didn&#8217;t exist before</li>
<li><span style="color: #333399;">_case</span> replaces the old <span style="color: #333399;">ignoreCase<span style="color: #000000;">; <span style="color: #333399;">_case</span> is TRUE if the language is case sensitive, and FALSE otherwise; <span style="color: #333399;">_case</span> defaults to FALSE</span></span></li>
<li><span style="color: #333399;"><span style="color: #000000;"><span style="color: #333399;">_main</span> replaces the old <span style="color: #333399;">steps</span></span></span></li>
<li><span style="color: #333399;"><span style="color: #000000;"><span style="color: #333399;"><span style="color: #000000;"><span style="color: #333399;">_match</span> replaces the old <span style="color: #333399;">exp</span></span></span></span></span></li>
<li><span style="color: #333399;"><span style="color: #000000;"><span style="color: #333399;"><span style="color: #000000;"><span style="color: #333399;">_style</span> didn&#8217;t exist before</span></span></span></span></li>
</ol>
<p><span style="color: #333399;">_style</span> makes a big difference with respect to the past: CSS styles can now be embedded into the recipe. Separate stylesheets are no longer supported by the autoloading engine, but you can load them by yourself, if you prefer to keep them apart.</p>
<p>Another important difference about CSS is that now Chili builds the class associated to a step, by prefixing the <span style="color: #333399;">_name</span> to the step name, separated by <span style="color: #333399;">__</span> (a double underscore). So, for example, the class for the multiline comment will be <span style="color: #333399;">js__ml_comment</span>.</p>
<h4>More expressive power with the new recipe format</h4>
<p>Besides the minor changes described in the previous section, the new format is much more powerful thanks to the major improvement I&#8217;m going to describe here.</p>
<p>The old recipe format supported an optional <span style="color: #333399;">replacement</span> property of a step, by means of which you could customize how the highlighting was applied to the matched text. Such a feature was useful when you captured subexpressions and wanted to highlight them separately.</p>
<p><span style="color: #333399;"><span style="color: #000000;">Now </span>_replace</span> replaces <span style="color: #333399;">replacement</span> (sic) and it&#8217;s still optional.</p>
<p>As before, if you don&#8217;t specify a <span style="color: #333399;">_replace</span> property, Chili will default to <span style="color: #333399;">&lt;span class=&#8221;$0&#8243;&gt;$$&lt;/span&gt;</span>, where <span style="color: #333399;">$0</span> and <span style="color: #333399;">$$</span> refer to the name of the current step and the matched text respectively.</p>
<p>As before, <span style="color: #333399;">_replace</span> can also be a different string expression, like in the following step, extracted from the MySQL recipe</p>
<p><pre><code class="javascript">variable: { 
	  _match: /@([$.\w]+|([`\&quot;\'])(?:(?:[^\2\\\r\n]*?(?:\2\2|\\.))*[^\2\\\r\n]*?)\2)/
	, _replace: '&lt;span class=&quot;keyword&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;variable&quot;&gt;$1&lt;/span&gt;'
	, _style: { keyword: 'color: navy;', variable: 'color: blue;' }
}</code></pre></p>
<p>What to note in the above example:</p>
<ol>
<li>you can specify a style for each of the involved classes, by using properties of an object</li>
<li>you must use a span for applying style to a text run</li>
</ol>
<h5>A big improvement</h5>
<p>In Chili 2.0, <strong><span style="color: #333399;">_replace</span> can also be a function</strong>, like in the following step, extracted from the new HTML recipe</p>
<p><pre><code class="javascript">// matches a starting tag of an element (with attrs)
// like &quot;&lt;div ... &gt;&quot; or &quot;&lt;img ... /&gt;&quot;
, tag_start: { 
	  _match: /(&lt;\w+)((?:\w|[?%]&gt;|\W)*?)(\/&gt;|&gt;)/ 
	, _replace: function( all, open, content, close ) { 
		  return &quot;&lt;span class='tag_start'&gt;&quot; + this.x( open ) + &quot;&lt;/span&gt;&quot; 
			  + this.x( content, '/tag_attrs' ) 
			  + &quot;&lt;span class='tag_start'&gt;&quot; + this.x( close ) + &quot;&lt;/span&gt;&quot;;
	}
	, _style: &quot;color: navy; font-weight: bold;&quot;
}</code></pre></p>
<p>What to note in the above example:</p>
<ol>
<li><span style="color: #333399;"><span style="color: #000000;">when </span>_replace</span> is a function, it receives match and submatches as arguments, and inside</li>
<li>there is a valid <span style="color: #333399;">this</span> object which contains a magic <span style="color: #333399;">x</span> method, by which</li>
<li>a string can be escaped for HTML (like <span style="color: #333399;">open</span> and <span style="color: #333399;">close</span>), or</li>
<li>a string can be transformed by an expression (like <span style="color: #333399;">content</span>)</li>
</ol>
<h4>Chili 2.0 recipes are modular</h4>
<p>A Chili 2.0 recipe contains blocks (like <span style="color: #333399;">_main</span>), which contain steps (like <span style="color: #333399;">tag_start</span>). An expression can be built for referencing each module, be it a recipe, a block, or a step. For example, <span style="color: #333399;">/tag_attrs</span> is the <span style="color: #333399;">tag_attrs</span> block in the current recipe.</p>
<h5>One method to highlight them all</h5>
<p>The JavaScript code inside a <span style="color: #333399;">_replace</span> function can use the <span style="color: #333399;">x</span> method of <span style="color: #333399;">this</span>.</p>
<p><span style="color: #333399;">x</span> takes two arguments: a subject to process, and an optional module to use.</p>
<p><span style="color: #333399;">x</span> returns the subject escaped for HTML if no module is given, or the module is not available, else it returns the result of applying the module to the subject using Chili 2.0.</p>
<p>If the ChiliBook option <span style="color: #333399;">recipeLoading</span> is true, any unavailable module will be automatically loaded.</p>
<h5>The new HTML recipe</h5>
<p>As an example, here is the new HTML recipe</p>
<p><pre><code class="javascript">{
	  _name: 'html'
	, _case: false
	, _main: {
		  doctype: { 
			  _match: /&lt;!DOCTYPE\b(?:\w|\W)*?&gt;/ 
			, _style: &quot;color: #CC6600;&quot;
		}
		, ie_style: {
			  _match: /(&lt;!--\[[^\]]*\]&gt;)((?:\w|\W)*?)(&lt;!\[[^\]]*\]--&gt;)/
			, _replace: function( all, open, content, close ) {
				return &quot;&lt;span class='ie_style'&gt;&quot; + this.x( open ) + &quot;&lt;/span&gt;&quot; 
					  + this.x( content, '//style' ) 
					  + &quot;&lt;span class='ie_style'&gt;&quot; + this.x( close ) + &quot;&lt;/span&gt;&quot;;
			}
			, _style: &quot;color: DarkSlateGray; font-weight: bold;&quot;
		}
		, comment: { 
			  _match: /&lt;!--(?:\w|\W)*?--&gt;/ 
			, _style: &quot;color: #4040c2;&quot;
		}
		, script: { 
			  _match: /(&lt;script\s+[^&gt;]*&gt;)((?:\w|\W)*?)(&lt;\/script\s*&gt;)/
			, _replace: function( all, open, content, close ) { 
				  return this.x( open, '//tag_start' ) 
					  + this.x( content, 'js' ) 
					  + this.x( close, '//tag_end' );
			} 
		}
		, style: { 
			  _match: /(&lt;style\s+[^&gt;]*&gt;)((?:\w|\W)*?)(&lt;\/style\s*&gt;)/
			, _replace: function( all, open, content, close ) { 
				  return this.x( open, '//tag_start' ) 
					  + this.x( content, 'css' ) 
					  + this.x( close, '//tag_end' );
			} 
		}
		// matches a starting tag of an element (with attrs)
		// like &quot;&lt;div ... &gt;&quot; or &quot;&lt;img ... /&gt;&quot;
		, tag_start: { 
			  _match: /(&lt;\w+)((?:\w|[?%]&gt;|\W)*?)(\/&gt;|&gt;)/ 
			, _replace: function( all, open, content, close ) { 
				  return &quot;&lt;span class='tag_start'&gt;&quot; + this.x( open ) + &quot;&lt;/span&gt;&quot; 
					  + this.x( content, '/tag_attrs' ) 
					  + &quot;&lt;span class='tag_start'&gt;&quot; + this.x( close ) + &quot;&lt;/span&gt;&quot;;
			}
			, _style: &quot;color: navy; font-weight: bold;&quot;
		} 
		// matches an ending tag
		// like &quot;&lt;/div&gt;&quot;
		, tag_end: { 
			  _match: /&lt;\/\w+\s*&gt;|\/&gt;/ 
			, _style: &quot;color: navy;&quot;
		}
		, entity: { 
			  _match: /&amp;\w+?;/ 
			, _style: &quot;color: blue;&quot;
		}
	}
	, tag_attrs: {
		// matches a name/value pair
		attr: {
			// before in $1, name in $2, between in $3, value in $4
			  _match: /(\W*?)([\w-]+)(\s*=\s*)((?:\'[^\']*(?:\\.[^\']*)*\')|(?:\&quot;[^\&quot;]*(?:\\.[^\&quot;]*)*\&quot;))/ 
			, _replace: &quot;$1&lt;span class='attr_name'&gt;$2&lt;/span&gt;$3&lt;span class='attr_value'&gt;$4&lt;/span&gt;&quot;
			, _style: { attr_name:  &quot;color: green;&quot;, attr_value: &quot;color: maroon;&quot; }
		}
	}
}</code></pre></p>
<p>What to note in the above example:</p>
<ol>
<li>a <span style="color: #333399;">_replace</span> function can be used for applying a recipe to a text run inside another recipe, like the <span style="color: #333399;">script</span> an <span style="color: #333399;">style</span> steps, where highlighting of script and style elements is delegated to <span style="color: #333399;">js</span> and <span style="color: #333399;">css</span> recipes respectively</li>
<li>a <span style="color: #333399;">_replace</span> function can be used for isolating the parsing of a text run, like the <span style="color: #333399;">tag_attrs</span> step, where highlighting of name/value pairs happens only in the context of tag attributes</li>
</ol>
<h5>Module paths</h5>
<p>A module path is an expression that identifies a Chili 2.0 module. A path has three components (though some can be hidden) separated by a / (forward slash), each with a specific meaning: recipe / block / step. (white space added for clarity)</p>
<p>Here is a list of all the combinations in a module path:</p>
<ul>
<li>recipe<br />
a module path like <strong><span style="color: #333399;">css</span></strong> refers to the entire <span style="color: #333399;">css</span> recipe</li>
<li>recipe / block<br />
a module path like <strong><span style="color: #333399;">css/definition</span></strong> refers to the <span style="color: #333399;">definition</span> block of the <span style="color: #333399;">css</span> recipe</li>
<li>recipe / block / step<br />
a module path like <strong><span style="color: #333399;">css/definition/property</span></strong> refers to the <span style="color: #333399;">property</span> step of the <span style="color: #333399;">definition</span> block of the <span style="color: #333399;">css</span> recipe</li>
<li>/ block<br />
a module path like <strong><span style="color: #333399;">/definition</span></strong> refers to the <span style="color: #333399;">definition</span> block of the current recipe</li>
<li>/ block / step<br />
a module path like <strong><span style="color: #333399;">/definition/property</span></strong> refers to the <span style="color: #333399;">property</span> step of the <span style="color: #333399;">definition</span> block of the current recipe</li>
<li>/ / step<br />
a module path like <strong><span style="color: #333399;">//property</span></strong> refers to the <span style="color: #333399;">property</span> step of the current block of the current recipe</li>
</ul>
<p>As you see, leading slashes have a meaning.</p>
<h5>Remember</h5>
<ul>
<li>a recipe module invocation tries to match all the steps of the _main block</li>
<li>a block module invocation tries to match all its steps</li>
<li>a step module invocation tries to match just itself</li>
</ul>
<h4>Help request</h4>
<p>I think that Chili 2.0 is pretty good at highlighting, but it needs more fine recipes to succeed. For this release I&#8217;ve rewritten some from scratch, and converted some others. I&#8217;m not a good programmer in languages other than the ones for which I rewrote a recipe. But if you are and have time and will, then you could write a Chili 2.0 recipe for your favorite language, together with a couple of working samples, and send all to me. I&#8217;d be very happy to add your contributed recipes to the project as soon as they are available.</p>
<h5>Rewritten</h5>
<ul>
<li>CSS</li>
<li>HTML</li>
<li>JavaScript</li>
<li>PHP</li>
</ul>
<h5>Converted</h5>
<ul>
<li>C++</li>
<li>C#</li>
<li>Delphi</li>
<li>Java</li>
<li>LotusScript</li>
<li>MySQL</li>
</ul>
<h4>Setup and Examples</h4>
<p>Here is the <a href="http://noteslog.com/personal/projects/chili/2.0/" target="_blank">start page for Chili 2.0</a> where you&#8217;ll find setup instructions and some examples.</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/chili-20-released-today/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to load JavaScript in WordPress plugins</title>
		<link>http://noteslog.com/post/how-to-load-javascript-in-wordpress-plugins/</link>
		<comments>http://noteslog.com/post/how-to-load-javascript-in-wordpress-plugins/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 20:43:39 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[other]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=205</guid>
		<description><![CDATA[If you want to load some JavaScript files from your WordPress plugin you have at least two options.
Head hooks
When building up a page, just before the closing tag of the head element, a theme should call actions hooked on wp-head. Those actions only need to output what they want to include into the head element, [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to load some JavaScript files from your WordPress plugin you have at least two options.</p>
<h4>Head hooks</h4>
<p>When building up a page, just before the closing tag of the head element, a theme should call actions hooked on <span style="color: #333399;">wp-head</span>. Those actions only need to output what they want to include into the head element, like script files.</p>
<p>What if a theme does not do that? Well, I&#8217;d include it into the so called &#8220;known issues&#8221;. For example, my last WordPress plugin, won&#8217;t work in this case. I think it&#8217;s better not to find a workaround, so that theme authors understand that they must follow WordPress standards.</p>
<p>On the other hand, there is also an <span style="color: #333399;">admin-head</span> hook, which is the <span style="color: #333399;">wp-head</span> hook counterpart when building up admin pages.  For example, you could use the following function.</p>
<p><pre><code class="html">&lt;?php</code><code class="php">

function load_into_head() { 
	$ADMIN_VIEW = &quot;alert( 'Hello Admin!' );&quot;;
	$USERS_VIEW = &quot;alert( 'Hello World!' );&quot;;
	</code><code class="html">?&gt;
&lt;script type=&quot;text/javascript&quot;&gt;</code><code class="javascript">
	</code><code class="html">&lt;?php</code><code class="php">
		if( is_admin() ) { echo $ADMIN_VIEW; }
		else             { echo $USERS_VIEW; } 
	</code><code class="html">?&gt;</code><code class="javascript">
</code><code class="html">&lt;/script&gt;
	&lt;?php </code><code class="php">
}

add_action( is_admin() ? 'admin_head' : 'wp_head', 'load_into_head' );

</code><code class="html">?&gt;</code></pre>


</p>
<h4>Script API</h4>
<p>WordPress provides also a good Script API that will let you do anything you want with script files, following WordPress standards. These are the main functions:</p>
<ol>
<li><span style="color: #333399;">wp_deregister_script</span></li>
<li><span style="color: #333399;">wp_register_script</span></li>
<li><span style="color: #333399;">wp_enqueue_script</span></li>
<li><span style="color: #333399;">wp_print_scripts</span> (action hook)</li>
<li><span style="color: #333399;">print_scripts_array</span> (filter hook)</li>
</ol>
<p>The general idea is that you write a function for loading your scripts using <span style="color: #333399;">wp_deregister_script</span>, <span style="color: #333399;">wp_register_script</span>, and <span style="color: #333399;">wp_enqueue_script</span>, and hook it on <span style="color: #333399;">wp_print_scripts</span>. If you also need to fine tune the order in which files are loaded or if they have to be loaded at all, then you can write another function and hook it on <span style="color: #333399;">print_scripts_array</span>.</p>
<h5>deregister, register, and enqueue</h5>
<p><span style="color: #333399;">wp_register_script</span> let&#8217;s you create an alias and define dependencies for each script file. If a script file with the same alias was already registered, then your registration is ignored. This is a policy for conflict resolution (the first registration wins) that may help you, if you know it.</p>
<p><span style="color: #333399;">wp_deregister_script</span> let&#8217;s you remove an alias. If the alias you give doesn&#8217;t exist, nothing happens. Tipically you use this function for forcing a new registration of an already registered alias: first you deregister and then register again.</p>
<p><span style="color: #333399;">wp_enqueue_script</span> prepares the loading of a script. If the script was registered with some dependencies, this function automatically prepares their loading too, recursively, making sure each script will be loaded only once and before any script depending on it.</p>
<p>For example, jQuery 1.2.3 is registered by WordPress 2.5, but let&#8217;s say that you want to always download the latest version. You could use the following function.</p>
<p><pre><code class="html">&lt;?php</code><code class="php">

function load_with_api() {
	wp_deregister_script( 'jquery' );
	wp_register_script( 'jquery', 'http://code.jquery.com/jquery-latest.pack.js', false, '' );

	//keep jQuery and Prototype compatible
	$url = get_bloginfo('wpurl').'/wp-content/plugins/my-plugin';
	wp_register_script( 'jquery_no_conflict', $url . '/jquery_no_conflict.js', array( 'jquery' ), '' );	
	wp_enqueue_script( 'jquery_no_conflict' );
}

add_action( 'wp_print_scripts', 'myOwnTheme_init' );

</code><code class="html">?&gt;</code></pre>


</p>
<p>Keeping jQuery and Prototype compatible is a needed functionality, because WordPress uses both and they both use <span style="color: #333399;">$</span> as a global symbol. In fact, the jQuery file packed with WordPress includes the compatibility setting.</p>
<h5>Fine tuning</h5>
<p>If you want your scripts to be loaded in a particular order, with one script before or after another, maybe with respect to one that was registered by WordPress itself, or by other plugins, then you can write a function for the <span style="color: #333399;">print_scripts_array</span> filter.</p>
<p>For example, to load the <span style="color: #333399;">jquery_no_conflict</span> file just after the <span style="color: #333399;">jquery</span> file, you can use the following function.</p>
<p><pre><code class="html">&lt;?php</code><code class="php">

function jquery_no_conflict_follows_jquery( $js_array ) {
	if ( false === $jquery = array_search( 'jquery', $js_array ) )
		return $js_array;

	if ( false === $jquery_no_conflict = array_search( 'jquery_no_conflict', $js_array ) )
		return $js_array;

	if ( $jquery_no_conflict == $jquery + 1 )
		return $js_array;

	array_splice( $js_array, $jquery + 1, 0, 'jquery_no_conflict' );

	unset($js_array[$jquery_no_conflict + ($jquery_no_conflict &lt; $jquery ? 0 : 1)]);

	return $js_array;
}

add_filter( 'print_scripts_array', 'jquery_no_conflict_follows_jquery' );

</code><code class="html">?&gt;</code></pre>


</p>
<h4>My Own Theme</h4>
<p>If you want to see all this in action, you can install the <a href="http://wordpress.org/extend/plugins/my-own-theme/" target="_blank">My Own Theme</a> plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/how-to-load-javascript-in-wordpress-plugins/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to force jQuery.extend deep recursion</title>
		<link>http://noteslog.com/post/how-to-force-jqueryextend-deep-recursion/</link>
		<comments>http://noteslog.com/post/how-to-force-jqueryextend-deep-recursion/#comments</comments>
		<pubDate>Sun, 30 Mar 2008 13:13:14 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[other]]></category>

		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://noteslog.com/?p=204</guid>
		<description><![CDATA[jQuery.extend extends a target object with properties from other objects and it&#8217;s widely used in every piece of jQuery code.
Really it&#8217;s very useful and simple to undestand and use for flat properties.
jQuery.extend( 
  { a:1, b:'2' }, 
  { a:'1', c:3 } 
) == 
  { a:'1', b:'2', c:3 }
On the contrary, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://docs.jquery.com/Utilities/jQuery.extend#targetobject1objectN" target="_blank">jQuery.extend</a> extends a target object with properties from other objects and it&#8217;s widely used in every piece of jQuery code.</p>
<p>Really it&#8217;s very useful and simple to undestand and use for flat properties.</p>
<p><pre><code class="javascript">jQuery.extend( 
  { a:1, b:'2' }, 
  { a:'1', c:3 } 
) == 
  { a:'1', b:'2', c:3 }</code></pre></p>
<p>On the contrary, if the involved objects have object properties, jQuery.extend is less intuitive and less useful too.</p>
<p><pre><code class="javascript">jQuery.extend( 
  { a:{ x:1 }, b:'2' }, 
  { a:{ y:'1' }, c:3 } 
) == 
  { a:{ y:'1' }, b:'2', c:3 }</code></pre></p>
<p>Luckily, an undocumented feature (<span style="text-decoration: underline;">deep</span>) makes jQuery.extend recurr object properties.</p>
<p><pre><code class="javascript">jQuery.extend( true, 
  { a:{ x:1 }, b:'2' }, 
  { a:{ y:'1' }, c:3 } 
) == 
  { a:{ x:1, y:'1' }, b:'2', c:3 }</code></pre></p>
<p>Unluckily, <span style="text-decoration: underline;">deep</span> only works for the first level. (not really a <a href="http://dev.jquery.com/ticket/2447" target="_blank">&#8216;bug&#8217;</a>)</p>
<p><pre><code class="javascript">jQuery.extend( true, 
  { a:{ x:1, z:{ m: '' } }, b:'2' }, 
  { a:{ y:'1', z:{ n: 0 } }, c:3 } 
) == 
  { a:{ x:1, y:'1', z:{ n:0 } }, b:'2', c:3 }</code></pre></p>
<p>If you need deep recursion use jQuery.extend_deep instead.<a href="http://dev.jquery.com/ticket/2447" target="_blank"></a></p>
<p><pre><code class="javascript">jQuery.extend_deep( true, 
  { a:{ x:1, z:{ m: '' } }, b:'2' }, 
  { a:{ y:'1', z:{ n: 0 } }, c:3 } 
) == 
  { a:{ x:1, y:'1', z:{ m:'', n:0 } }, b:'2', c:3 }</code></pre></p>
<p>Here is the jQuery.extend_deep plugin:</p>
<p><pre><code class="javascript">/**
 * Implement deep object extension 
 * by replacing the line 599 of jQuery-1.2.3.js
 * (commented out in this function)
 */
jQuery.extend_deep = function() {
	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

	if ( target.constructor == Boolean ) {
		deep = target;
		target = arguments[1] || {};
		i = 2;
	}

	if ( typeof target != &quot;object&quot; &amp;&amp; typeof target != &quot;function&quot; )
		target = {};

	if ( length == 1 ) {
		target = this;
		i = 0;
	}

	for ( ; i &lt; length; i++ )
		if ( (options = arguments[ i ]) != null )
			for ( var name in options ) {
				if ( target === options[ name ] )
					continue;

				if ( deep &amp;&amp; options[ name ] &amp;&amp; typeof options[ name ] == &quot;object&quot; &amp;&amp; target[ name ] &amp;&amp; !options[ name ].nodeType )
//					target[ name ] = jQuery.extend( target[ name ], options[ name ] );
					target[ name ] = jQuery.extend_deep( true, target[ name ], options[ name ] );

				else if ( options[ name ] != undefined )
					target[ name ] = options[ name ];

			}

	return target;
};</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/how-to-force-jqueryextend-deep-recursion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Metaobjects 1.5 Released</title>
		<link>http://noteslog.com/post/metaobjects-15-released/</link>
		<comments>http://noteslog.com/post/metaobjects-15-released/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 22:10:23 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Metaobjects]]></category>

		<category><![CDATA[HTML]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://noteslog.com/post/metaobjects-15-released/</guid>
		<description><![CDATA[Changes

Added support for easy namespacing
Added support for jQuery 1.2.3 cache
Rewritten the manual from scratch

Download
You can download metaobjects from Google Code
]]></description>
			<content:encoded><![CDATA[<h5>Changes</h5>
<ul>
<li>Added support for easy namespacing</li>
<li>Added support for jQuery 1.2.3 cache</li>
<li>Rewritten the <a href="metaobjects">manual</a> from scratch</li>
</ul>
<h5>Download</h5>
<p>You can <a href="http://code.google.com/p/jquery-metaobjects-js/" target="_blank">download metaobjects</a> from Google Code</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/metaobjects-15-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to highlight code in WordPress</title>
		<link>http://noteslog.com/post/how-to-highlight-code-in-wordpress/</link>
		<comments>http://noteslog.com/post/how-to-highlight-code-in-wordpress/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 00:48:47 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Chili]]></category>

		<category><![CDATA[Enzymes]]></category>

		<guid isPermaLink="false">http://noteslog.com/post/how-to-highlight-code-in-wordpress/</guid>
		<description><![CDATA[
Although it&#8217;s easy to use WP Chili out of the box, WordPress does have some limitations, like the following:

you need to change to the Code editor before adding a snippet to your post
you need to make your snippet postable yourself, escaping all HTML entities
even if snippets are very short, they are intermingled with their explanations [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://noteslog.com/blog/wp-content/uploads/2008/03/visual-code.png" alt="WordPress Editing Tabs" /></p>
<p>Although it&#8217;s easy to use <a href="http://noteslog.com/chili/wp-chili/">WP Chili</a> out of the box, WordPress does have some limitations, like the following:</p>
<ul>
<li>you need to change to the <u>Code</u> editor before adding a snippet to your post</li>
<li>you need to make your snippet <a href="http://noteslog.com/personal/projects/postable/">postable</a> yourself, escaping all HTML entities</li>
<li>even if snippets are very short, they are intermingled with their explanations and it&#8217;s tricky to concentrate on writing the best post with so many distractions in between</li>
</ul>
<h4>Using WP Chili &amp; Enzymes</h4>
<p>Now I&#8217;ll show you a better approach by using together <a href="http://wordpress.org/extend/plugins/wp-chili/" target="_blank">WP Chili</a> 1.0 and <a href="http://wordpress.org/extend/plugins/enzymes/" target="_blank">Enzymes</a> 2.2.<br />
All you need to be up and running is the classical roundtrip: download, unzip, upload, and activate.</p>
<h5>How to highlight code snippets</h5>
<p>You can start by writing a simple enzyme for automating things, like the following <u>hilite</u> custom field: <pre><code class="php">return 
'&lt;pre&gt;&lt;code class=&quot;' . $this-&gt;substrate . '&quot;&gt;'
. htmlspecialchars( $this-&gt;pathway ) 
. '&lt;/code&gt;&lt;/pre&gt;';</code></pre></p>
<p><u>hilite</u> can be used with the following patterns:</p>
<ol>
<li><u>{[ =snippet= | .hilite( =language= ) ]}</u></li>
<li><u>{[ .snippet | .hilite( =language= ) ]}</u></li>
</ol>
<p>The first pattern comes in handy when you want to highlight some very short and naive snippet<br />
<u>{[ =echo htmlentities( $name );= | .hilite( =php= ) ]}</u> renders <pre><code class="php">echo htmlentities( $name );</code></pre></p>
<p>So far, so good, but if the snippet has a character that WP texturizes, then <u>hilite</u> seems to fail. In fact<br />
<u>{[ =$welcome \= &#8220;Hello &#8220;.$name;= | .hilite( =php= ) ]}</u> renders <pre><code class="php">$welcome = &amp;#8220;Hello &amp;#8220;.$name;</code></pre></p>
<p>The above issue is not a <u>hilite</u>&#8217;s bug but it could be fixed by adding new code to it, or with new enzymes along the pathway, like the following <u>requote</u> custom field: <pre><code class="php">$from = array( '&amp;#8216;', '&amp;#8217;', '&amp;#8220;', '&amp;#8221;' );
$to = array( &quot;'&quot;, &quot;'&quot;, '&quot;', '&quot;' );
return str_replace( $from, $to, $this-&gt;pathway );</code></pre></p>
<p>which makes that <u><br />
{[ =$welcome \= &#8220;Hello &#8220;.$name;= | .requote() | .hilite( =php= ) ]}</u> renders <pre><code class="php">$welcome = &quot;Hello &quot;.$name;</code></pre></p>
<p><strong>The best option</strong> is to add another custom field for hosting your snippet and use the second pattern: in fact <u>hilite</u>&#8217;s snippet has been rendered by <u>{[ .hilite | .hilite( =php= ) ]}</u> and <u>requote</u>&#8217;s one by <u>{[ .requote | .hilite( =php= ) ]}</u>.</p>
<h5>How to highlight code files</h5>
<p>Sometimes you have a file that you want to show in its entirety, and having to copy it into a custom field is annoying or maybe not an option, if the file is <em>alive</em>, for example.</p>
<p>In such cases you can use an enzyme like the following <u>file</u> custom field: <pre><code class="php">return file_get_contents( $this-&gt;substrate );</code></pre></p>
<p>It&#8217;s use is again very simple and very similar to the above patterns:<br />
<u>{[ .file( =blog/wp-content/plugins/hello.php= ) | .hilite( =php= ) ]}</u> renders <pre><code class="php">&lt;?php
/*
Plugin Name: Hello Dolly
Plugin URI: http://wordpress.org/#
Description: This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from &lt;cite&gt;Hello, Dolly&lt;/cite&gt; in the upper right of your admin screen on every page.
Author: Matt Mullenweg
Version: 1.5
Author URI: http://photomatt.net/
*/

// These are the lyrics to Hello Dolly
$lyrics = &quot;Hello, Dolly
Well, hello, Dolly
It's so nice to have you back where you belong
You're lookin' swell, Dolly
I can tell, Dolly
You're still glowin', you're still crowin'
You're still goin' strong
We feel the room swayin'
While the band's playin'
One of your old favourite songs from way back when
So, take her wrap, fellas
Find her an empty lap, fellas
Dolly'll never go away again
Hello, Dolly
Well, hello, Dolly
It's so nice to have you back where you belong
You're lookin' swell, Dolly
I can tell, Dolly
You're still glowin', you're still crowin'
You're still goin' strong
We feel the room swayin'
While the band's playin'
One of your old favourite songs from way back when
Golly, gee, fellas
Find her a vacant knee, fellas
Dolly'll never go away
Dolly'll never go away
Dolly'll never go away again&quot;;

// Here we split it into lines
$lyrics = explode(&quot;\n&quot;, $lyrics);
// And then randomly choose a line
$chosen = wptexturize( $lyrics[ mt_rand(0, count($lyrics) - 1) ] );

// This just echoes the chosen line, we'll position it later
function hello_dolly() {
	global $chosen;
	echo &quot;&lt;p id='dolly'&gt;$chosen&lt;/p&gt;&quot;;
}

// Now we set that function up to execute when the admin_footer action is called
add_action('admin_footer', 'hello_dolly');

// We need some CSS to position the paragraph
function dolly_css() {
	echo &quot;
	&lt;style type='text/css'&gt;
	#dolly {
		position: absolute;
		top: 2.3em;
		margin: 0;
		padding: 0;
		right: 10px;
		font-size: 16px;
		color: #d54e21;
	}
	&lt;/style&gt;
	&quot;;
}

add_action('admin_head', 'dolly_css');

?&gt;</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/how-to-highlight-code-in-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WP Chili Released</title>
		<link>http://noteslog.com/post/wp-chili-released/</link>
		<comments>http://noteslog.com/post/wp-chili-released/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 22:04:20 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Chili]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://noteslog.com/post/wp-chili-released/</guid>
		<description><![CDATA[A couple of days ago I released WP Chili, a simple WordPress plugin that installs Chili into WordPress and let&#8217;s you add client-side code highlighting to your posts, with extreme simplicity.
After activating WP Chili, it&#8217;s just a matter of wrapping your snippets into code or pre-code elements, with the programming language of the snippet as [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago I released <a href="http://noteslog.com/chili/wp-chili/">WP Chili</a>, a simple WordPress plugin that installs <a href="http://noteslog.com/chili/">Chili</a> into WordPress and let&#8217;s you add client-side code highlighting to your posts, with extreme simplicity.</p>
<p>After activating WP Chili, it&#8217;s just a matter of wrapping your snippets into <u>code</u> or <u>pre-code</u> elements, with the programming language of the snippet as a class, like in the following example:</p>
<p><pre><code class="html">&lt;pre&gt;&lt;code class=&quot;php&quot;&gt;
echo &amp;quot;Hello $name&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;</code></pre></p>
<p>When the post reaches your readers, the snippet is unescaped by their browser and highlighted by Chili 1.9 (downloaded from your server). Your readers will see the example rendered as:</p>
<p><pre><code class="php">echo &quot;Hello $name&quot;;</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/wp-chili-released/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Enzymes 2.2 Released Today</title>
		<link>http://noteslog.com/post/enzymes-22-released-today/</link>
		<comments>http://noteslog.com/post/enzymes-22-released-today/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 14:59:46 +0000</pubDate>
		<dc:creator>Andrea Ercolino</dc:creator>
		
		<category><![CDATA[Enzymes]]></category>

		<guid isPermaLink="false">http://noteslog.com/post/enzymes-22-released-today/</guid>
		<description><![CDATA[Changes

Added the new feature for transcluding a value, rather than a post/key reference to it (which is still available). This comes in handy when you have a &#8220;normal&#8221; value and it&#8217;s a bit annoying to define a custom field just for that.

For example, let&#8217;s say that you have a template called mark-template.php with the following [...]]]></description>
			<content:encoded><![CDATA[<h5>Changes</h5>
<ul>
<li>Added the new feature for transcluding a value, rather than a post/key reference to it (which is still available). This comes in handy when you have a &#8220;normal&#8221; value and it&#8217;s a bit annoying to define a custom field just for that.</li>
</ul>
<p>For example, let&#8217;s say that you have a template called <u>mark-template.php</u> with the following code:</p>
<p><pre><code class="html">&lt;span style=&quot;background-color:&lt;?php </code><code class="php">echo $this-&gt;enzyme; </code><code class="html">?&gt;;&quot;&gt;
	&lt;?php </code><code class="php">
		echo $this-&gt;pathway; 
		$this-&gt;pathway = ''; 
	</code><code class="html">?&gt;
&lt;/span&gt;</code></pre>


</p>
<p>Then you could use it <u>{[ =like this= | =cyan= \mark-template.php ]}</u> to get something 
<span style="background-color:cyan;">
	like this</span>
</p>
<h5>Download</h5>
<p>This version is available for <a href="http://wordpress.org/extend/plugins/enzymes/">download</a> from wordpress.org</p>
]]></content:encoded>
			<wfw:commentRss>http://noteslog.com/post/enzymes-22-released-today/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
