<?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>digitalize.ca &#187; Web Development</title>
	<atom:link href="http://digitalize.ca/cat/portfolio/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://digitalize.ca</link>
	<description>Owned, operated, and obliterated by Mohammad Jangda</description>
	<lastBuildDate>Tue, 27 Dec 2011 17:17:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta3-20574</generator>
		<item>
		<title>PHP Utility Functions: get_value_or_default</title>
		<link>http://digitalize.ca/2011/05/php-utility-functions-get_value_or_default/</link>
		<comments>http://digitalize.ca/2011/05/php-utility-functions-get_value_or_default/#comments</comments>
		<pubDate>Mon, 02 May 2011 17:07:42 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[notices]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[request]]></category>
		<category><![CDATA[utility functions]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1553</guid>
		<description><![CDATA[Some handy functions I use to grab values from arrays and objects (especially $_REQUEST and friends), without having to constantly run isset or !empty checks everywhere (to avoid undefined index notices). You can specify a default value if the index doesn&#8217;t exist in the array or object. Also lets you sanitize the value(s) using a [...]]]></description>
			<content:encoded><![CDATA[<p>Some <a href="https://gist.github.com/947919">handy functions</a> I use to grab values from arrays and objects (especially $_REQUEST and friends), without having to constantly run <em>isset</em> or <em>!empty</em> checks everywhere (to avoid undefined index notices). You can specify a default value if the index doesn&#8217;t exist in the array or object. Also lets you sanitize the value(s) using a callback before returning them.</p>
<p><strong>Note:</strong> No amount of helper functions will protect you from Bad Things. Always <a href="http://codex.wordpress.org/Data_Validation">validate/sanitize untrusted data</a>.</p>
<p><script src="https://gist.github.com/947919.js?file=get-value-or-default.php"></script><br />
<noscript></p>
<pre>
<?php

function get_value_or_default( $var, $object, $default = '', $sanitize_callback = '' ) {
	if( is_object( $object ) )
		$value = ! empty( $object->$var ) ? $object->$var : $default;
	elseif( is_array( $object ) )
		$value = ! empty( $object[$var] ) ? $object[$var] : $default;
	else
		$value = $default;

	if( is_callable( $sanitize_callback ) ) {
		if( is_array( $value ) )
			$value = array_map( $sanitize_callback, $value );
		else
			$value = call_user_func( $sanitize_callback, $value );
	}

	return $value;
}

function get_request_var( $var, $default = '', $sanitize_callback = '' ) {
	return get_value_or_default( $var, $_REQUEST, $default, $sanitize_callback );
}
function get_get_var( $var, $default = '', $sanitize_callback = '' ) {
	return get_value_or_default( $var, $_GET, $default, $sanitize_callback );
}
function get_post_var( $var, $default = '', $sanitize_callback = '' ) {
	return get_value_or_default( $var, $_POST, $default, $sanitize_callback );
}
</pre>
<p></noscript><br/><br/><a class="geolocation-link" href="#" id="geolocation1553" name="43.548599,-79.62642700000004" onclick="return false;">Posted from Mississauga, Ontario, Canada.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2011/05/php-utility-functions-get_value_or_default/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin: Introducing Custom Metadata Manager</title>
		<link>http://digitalize.ca/2010/11/wordpress-plugin-introducing-custom-metadata-manager/</link>
		<comments>http://digitalize.ca/2010/11/wordpress-plugin-introducing-custom-metadata-manager/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 17:31:51 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Plugin Update]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[comment meta]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[custom metadata]]></category>
		<category><![CDATA[metdata]]></category>
		<category><![CDATA[post meta]]></category>
		<category><![CDATA[user meta]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1255</guid>
		<description><![CDATA[With the custom post type enhancements introduced in WordPress 3, site builders and plugins developers now have access to what you could call &#8220;dynamic scaffolding&#8221;. With a couple of lines of code, you can easily generate the necessary UIs to help users easily manage and create new types of content. You can add new post [...]]]></description>
			<content:encoded><![CDATA[<p>With the <a href="http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/">custom post type enhancements</a> introduced in WordPress 3, site builders and plugins developers now have access to what you could call &#8220;dynamic scaffolding&#8221;. With a couple of lines of code, you can easily generate the necessary UIs to help users easily manage and create new types of content. </p>
<p>You can <a href="http://codex.wordpress.org/Function_Reference/register_post_type">add new post types</a> (e.g. Movies, Reviews, Products, Projects, etc.) and specify the features each should support (e.g. title, body, authors, revisions, etc.) . Beyond that, you can add use the ever-flexible hook and filter system to add your own features. Combine that with custom fields and you can add your own fields (so a &#8220;movie&#8221; post type can have new fields to add things like &#8220;release date&#8221;, &#8220;rating&#8221;, and so on) . </p>
<p>However the code involved in adding those additional fields can get cumbersome, especially when you start looking at lots of content types with numerous fields. Add in other object types like users and comments and you&#8217;re now looking at a huge code base that needs to be maintained, updated and so on.</p>
<p>Well, I&#8217;m making it easier.</p>
<h3>Overview</h3>
<p><a href="http://wordpress.org/extend/plugins/custom-metadata/">Custom Metadata Manager</a> introduces a very WordPress-like way of adding additional fields to your object types. The goal is to help you rapidly build familiar, intuitive interfaces for your users.</p>
<p>Consider this:</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-simple.php"></script><br />
<noscript>
<pre><?php x_add_metadata_field( 'field-1', 'post' ); ?></pre>
<p></noscript></p>
<p>That one line of code kicks into gear some of that &#8220;dynamic scaffolding&#8221; magic I mentioned earlier. The Edit Post page now has a metabox with a text field. The plugin handles all the heavy-lifting for you behind-the-scenes, so that you can focus on more on building out and connecting your data rather than all the minor details. Checkit:</p>
<div id="attachment_1276" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-single-field.png"><img src="http://digitalize.ca/media/custom-metadata-single-field-300x42.png" alt="A magical new field with one line of code!" title="A magical new field with one line of code!" width="300" height="42" class="size-medium wp-image-1276" /></a><p class="wp-caption-text">A magical new field with one line of code!</p></div>
<p>The API is similar to that used for registering custom post types and taxonomies so it should be familiar territory.</p>
<h3>Object Types</h3>
<p>But let&#8217;s not stop there. Let&#8217;s say I want comments and users to all have this magical new field. Let&#8217;s try something like this:</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-simple-all-objects.php"></script><br />
<noscript>
<pre><?php x_add_metadata_field( 'field-1', array( 'post', 'comment', 'user' ) ); ?></pre>
<p></noscript></p>
<p>And we get the same field added for users and comments!</p>
<div id="attachment_1277" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-single-field-user.png"><img src="http://digitalize.ca/media/custom-metadata-single-field-user-300x52.png" alt="A magical new field for users with one line of code!" title="A magical new field for users with one line of code!" width="300" height="52" class="size-medium wp-image-1277" /></a><p class="wp-caption-text">A magical new field for users with one line of code!</p></div>
<p><small><strong>Note:</strong> I&#8217;ve omitted a screenshot for comments since it looks exactly the same as the posts screen.</small></p>
<p>Custom Metadata Manager supports fields for:</p>
<ul>
<li>posts (built-in and any custom post types)</li>
<li>comments</li>
<li>users</li>
</ul>
<p>If/when links and taxonomies get metadata support, I&#8217;ll add support for them as well.</p>
<h3>Labels and Descriptions!</h3>
<p>Avoid cryptic slug-like names and make it easy for users by assigning friendly labels and descriptions!</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-labels.php"></script><br />
<noscript></p>
<pre>
<?php
x_add_metadata_field( 'field-1', 'post', array(
	'label' => 'Field Label',
	'description' => 'This is a friendly description for the field to help you enter your data.'
) );
?>
</pre>
<p></noscript></p>
<h3>Groups</h3>
<p>To avoid clutter on the Edit Post page, you can group sets of fields together.</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-group.php"></script><br />
<noscript></p>
<pre>
<?php
x_add_metadata_group( 'group-1', 'post', array(
	'label' => 'Group'
) );

x_add_metadata_field( 'field-1', 'post', array(
	'group' => 'group-1'
) );

x_add_metadata_field( 'field-2', 'post', array(
	'group' => 'group-1'
) );
?>
</pre>
<p></noscript></p>
<h3>Field Types</h3>
<p>Text fields can get boring, so I&#8217;ve cooked in a number of different field types (just specify the field_type in the $args parameter and go!):</p>
<div id="attachment_1278" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-field-types.png"><img src="http://digitalize.ca/media/custom-metadata-field-types-300x161.png" alt="All sorts of different field types" title="All sorts of different field types" width="300" height="161" class="size-medium wp-image-1278" /></a><p class="wp-caption-text">All sorts of different field types</p></div>
<h3>Custom Callbacks</h3>
<p>Notice that last one in the screenshot above? That&#8217;s using a custom display callback! You can override a bunch of different things (display callback, sanitize callback, etc.) to get even more control over the fields you add. That means you can do cool stuff like this:</p>
<div id="attachment_1279" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-custom-display.png"><img src="http://digitalize.ca/media/custom-metadata-custom-display-300x93.png" alt="Custom callbacks make custom fields even more fun!" title="Custom callbacks make custom fields even more fun!" width="300" height="93" class="size-medium wp-image-1279" /></a><p class="wp-caption-text">Custom callbacks make custom fields even more fun!</p></div>
<h3>Columns</h3>
<p>We&#8217;ll throw in an easy way to add your fields to the Manage Post/User/Comments pages as well (in your $args, just set display_column to true). By default, the column will just the value of the field, but if you&#8217;ve got something complex going on, you can just as easily include a display_column_callback.</p>
<div id="attachment_1281" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-columns.png"><img src="http://digitalize.ca/media/custom-metadata-columns-300x211.png" alt="Columns made easy!" title="Columns made easy!" width="300" height="211" class="size-medium wp-image-1281" /></a><p class="wp-caption-text">Columns made easy!</p></div>
<h3>Example Code</h3>
<p>I&#8217;ve included fairly <a href="http://wordpress.org/extend/plugins/custom-metadata/other_notes/">detailed docs on Extend</a> and for kicks, I&#8217;ve thrown in <a href="http://svn.wp-plugins.org/custom-metadata/trunk/custom_metadata_examples.php">example code</a> along with the plugin. (To see it in action, turn on WP_DEBUG.)</p>
<h3>Why this plugin?</h3>
<p>Don&#8217;t get me wrong: this isn&#8217;t anything revolutionary. <a href="http://wordpress.org/extend/plugins/custom-field-template/">Lots</a> and <a href="http://wordpress.org/extend/plugins/verve-meta-boxes/">lots</a> and <a href="http://www.wpeasyposttypes.com/">lots</a> and <a href="http://podscms.org/">lots</a> have come before me. But my approach is probably the most &#8220;WordPress-like&#8221; there is (Bonus points to <a href="http://wordpress.org/extend/plugins/easy-custom-fields/">Easy Custom Fields</a> which uses a code-based and very object-oriented approach).</p>
<p>The API is simple, intuitive and very flexible, providing lots of overrides if you don&#8217;t like the default functionality (or have specific use cases).</p>
<p>The plugin doesn&#8217;t use extra tables and stores all data in a WordPress native way, so you can use the standard get_metadata function to retrieve your custom data. That way you also don&#8217;t have to worry about losing your data should you choose to stop using this plugin.</p>
<p>(I have already deployed and used the plugin across a number of production sites and it&#8217;s working great and saving me significant amounts of time and code!)</p>
<h3>Why a code-based approach instead of a UI?</h3>
<p>Because most of the plugins I mentioned above do the UI thing (and some it really well!) and it&#8217;d be lame to just copy them. The code-based approach, though, more closely aligns with the existing WordPress approach of registering new types of content (post types, taxonomies, etc.).</p>
<p>This is also a developer feature, aimed towards site builders. And real developers don&#8217;t need UIs ;)</p>
<h3>TODOs</h3>
<p>What stuff am I cooking up for future versions?</p>
<ul>
<li>Improved styling of rendered fields</li>
<li>Ability Pass in attributes for built-in fields (e.g. class, data-*, etc.)</li>
<li>Additional field types</li>
<li>Limit or exclude groups and fields for specific ids (e.g. show only on post id = 145)</li>
<li>Autosave support for fields on post types</li>
<li>Option to enqueue scripts and styles</li>
<li>Client- and server-side validation support</li>
<li>Add groups and fields to Quick Edit</li>
</ul>
<p>&#8212;-</p>
<h3>Download</h3>
<p>Grab it from the <a href="http://wordpress.org/extend/plugins/custom-metadata/">WordPress Plugin Directory</a> or just search for &#8220;Custom Metadata Manager&#8221; from the Plugin Manager within your WordPress install.</p>
<p>If you&#8217;ve read all the way through, thanks! Like what you see? Want more field types and features added? Just want say hi? <a href="mailto:batmoo@gmail.com">Get in touch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/11/wordpress-plugin-introducing-custom-metadata-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP Magic: Building a static countdown clock using PHP and GD</title>
		<link>http://digitalize.ca/2010/03/php-magic-building-a-static-countdown-clock-using-php-and-gd/</link>
		<comments>http://digitalize.ca/2010/03/php-magic-building-a-static-countdown-clock-using-php-and-gd/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 21:17:11 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[countdown]]></category>
		<category><![CDATA[gd]]></category>
		<category><![CDATA[glee]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=616</guid>
		<description><![CDATA[Update (2010-04-20): These Gleeks are crazy. Since being released, the clock has been viewed over 200,000 times. Insane. If you like Glee, you&#8217;ll like this. If you like image processing using PHP, you&#8217;ll like this even more. Using PHP and the GD image library*, it&#8217;s pretty easy to create a static, image-based countdown clock, which [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update (2010-04-20):</strong> These Gleeks are crazy. Since being released, the clock has been viewed over 200,000 times. Insane.</p>
<p>If you like Glee, you&#8217;ll like this. If you like image processing using PHP, you&#8217;ll like this even more.</p>
<p>Using PHP and the GD image library*, it&#8217;s pretty easy to create a static, image-based countdown clock, which is useful for situations where javascript cannot be used (think <a href="http://wordpress.com">WordPress.com</a>/<a href="http://blogger.com">Blogger</a>). A new image is automatically generated server-side for every minute (assuming a request is made for the clock for that minute), and all images are cached to avoid killing the server processor. Check it out in action on <a href="http://gleeksunited.wordpress.com/2010/03/02/42-days-until-glee/">Gleeks United</a> or after the jump.</p>
<p>Don&#8217;t have code yet, but I&#8217;ll post it when I get a chance.</p>
<p><span id="more-616"></span></p>
<p><span style="display:block;text-align:center;"><br />
<strong>Vertical version:</strong><br />
<img src="http://digitalize.ca/glee/countdown.php" alt="Glee Countdown!"><br />
<span style="display:block;text-align:center;font-size:10px;">Powered by <a href="http://gleeksunited.wordpress.com" target="_blank">Gleeks United</a></span><br />
</span></p>
<p><strong>Horizontal version:</strong><br />
<img src="http://digitalize.ca/glee/countdown-h.php" alt="Glee Countdown!"><br />
<span style="display:block;text-align:center;font-size:10px;">Powered by <a href="http://gleeksunited.wordpress.com" target="_blank">Gleeks United</a></span></p>
<p><small>* Yes, ImageMagick could work too, but it&#8217;s too much of a pain to install.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/03/php-magic-building-a-static-countdown-clock-using-php-and-gd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mockingbird: wireframing made awesome</title>
		<link>http://digitalize.ca/2009/11/mockingbird-wireframing-made-awesome/</link>
		<comments>http://digitalize.ca/2009/11/mockingbird-wireframing-made-awesome/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 02:11:36 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Edit Flow]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=425</guid>
		<description><![CDATA[Wireframing is awesome! Using Mockingbird, a recently launched Cappuccino-based wireframing tool, I was able to whip up some quick UI concepts I&#8217;ve been thinking of for the next iteration of Edit Flow. Though obviously not as fast as a hand-drawn sketch, it&#8217;s far more convenient when you&#8217;re working with other people since you don&#8217;t have [...]]]></description>
			<content:encoded><![CDATA[<p>Wireframing is awesome!</p>
<p>Using <a href="http://gomockingbird.com/">Mockingbird</a>, a recently launched <a href="http://cappuccino.org/">Cappuccino</a>-based wireframing tool, I was able to whip up some quick UI concepts I&#8217;ve been thinking of for the next iteration of <a href="http://wordpress.org/extend/plugins/edit-flow/">Edit Flow</a>. Though obviously not as fast as a hand-drawn sketch, it&#8217;s far more convenient when you&#8217;re working with other people since you don&#8217;t have to get cameras and/or scanners involved.</p>
<p>Mockingbird has a fairly intuitive interface, and most functionality you&#8217;d expect from a wireframing/diagramming tool. Best part: no Flash! Check out the result below. It&#8217;ll be updated as I make changes to the diagram.</p>
<p><span id="more-425"></span></p>
<p>See the wireframes in <a href="http://gomockingbird.com/mockingbird/index.html?project=9d906f2c9929a4ff4c1d1b839af40e87b89bb3aa">full screen mode</a>.</p>
<p>[iframe <a href="http://gomockingbird.com/mockingbird/index.html?project=9d906f2c9929a4ff4c1d1b839af40e87b89bb3aa" rel="nofollow">http://gomockingbird.com/mockingbird/index.html?project=9d906f2c9929a4ff4c1d1b839af40e87b89bb3aa</a> 500 500]</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2009/11/mockingbird-wireframing-made-awesome/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin: Plugin Notes</title>
		<link>http://digitalize.ca/2009/10/wordpress-plugin-plugin-notes/</link>
		<comments>http://digitalize.ca/2009/10/wordpress-plugin-plugin-notes/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 00:17:47 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=391</guid>
		<description><![CDATA[This is the outcome of a couple of hours of Friday night coding after an open call by Chris Coyier over at Digging into WordPress. Here&#8217;s what Chris asked for: Ever look through your list of plugins and forget just exactly what one of them does? I know they have descriptions next to them, but [...]]]></description>
			<content:encoded><![CDATA[<p>This is the outcome of a couple of hours of Friday night coding after an <a href="http://digwp.com/2009/10/ideas-for-plugins/">open call by Chris Coyier</a> over at <a href="http://digwp.com">Digging into WordPress</a>. Here&#8217;s what Chris asked for:</p>
<blockquote><p>Ever look through your list of plugins and forget just exactly what one of them does? I know they have descriptions next to them, but that doesn‚Äôt always speak to <strong>exactly what <em>you</em> are using it for</strong> and why. This plugin would just put a text field in each plugin field you could type some notes in there, theoretically to keep information about why and how you are using this plugin.</p></blockquote>
<p>And since I was bored (and thought this was a pretty useful idea), I delivered. <a href="http://wordpress.org/extend/plugins/plugin-notes/">Plugin Notes</a> is exactly what it sounds like.</p>
<p>Once you install and activate, the plugin adds a link &#8220;Add plugin note&#8221; that lets you add in a little note next to each plugin. It&#8217;s totally ajaxified and full of cool goodness. (Unfortunately, I was a bad programmer and didn&#8217;t make plugin gracefully degrade when javascript is turned off. Sorry, folks. Maybe next time.)</p>
<div id="attachment_394" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/screenshot-1.png"><img class="size-medium wp-image-394" title="WordPress plugin: Plugin Notes - adding a note" src="http://digitalize.ca/media/screenshot-1-300x160.png" alt="Plugin Notes: adding a note is easier than milking a cow." width="300" height="160" /></a><p class="wp-caption-text">Plugin Notes: adding a note is easier than milking a cow.</p></div>
<p>When a note is added, it shows up inside a little blue box and includes the name of the user that added the note as well as the date and time when the note was added. You also get handy dandy options to &#8220;Edit&#8221; or &#8220;Delete&#8221; notes.</p>
<div id="attachment_395" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/screenshot-2.png"><img class="size-medium wp-image-395" title="WordPress plugin: Plugin Notes - blue boxes make things look pretty." src="http://digitalize.ca/media/screenshot-2-300x198.png" alt="WordPress plugin: Plugin Notes - blue boxes make things look pretty." width="300" height="198" /></a><p class="wp-caption-text">WordPress plugin: Plugin Notes - blue boxes make things look pretty.</p></div>
<p>Each plugin can only have one note. I can imagine there would be cases where multiple notes may come in handy, but those would be rare so I&#8217;m passing on that functionality.</p>
<p>The plugin is pretty simplistic, and unlikely to see any future feature additions (unless someone really, really wants one). I&#8217;ll keep a watch for compatibility with future versions of WordPress though, so rest easy.</p>
<p>Excited, enough? Grab <a href="http://wordpress.org/extend/plugins/plugin-notes/">Plugin Notes</a> (from the WordPress Plugin Directory) or download it from within WordPress.</p>
<p><strong>Note: </strong>you&#8217;ll need PHP5 and a javascript-enabled browser for the plugin to work.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2009/10/wordpress-plugin-plugin-notes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Digital Design Project: theboar.ca</title>
		<link>http://digitalize.ca/2009/03/theboarca/</link>
		<comments>http://digitalize.ca/2009/03/theboarca/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 06:34:55 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Digital Design]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[dac]]></category>
		<category><![CDATA[digital edition]]></category>
		<category><![CDATA[magazines]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[trends]]></category>
		<category><![CDATA[uw]]></category>
		<category><![CDATA[waterloo]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=214</guid>
		<description><![CDATA[My independent digital design project (DAC 400) completed as part of my Digital Arts Communication specialization explored the push by magazines into the online and technology spaces. The goal of the project was to explore viable technologies to use as a platform for developing an online presence for The Boar, an arts and literary magazine [...]]]></description>
			<content:encoded><![CDATA[<p>My independent digital design project (DAC 400) completed as part of my Digital Arts Communication specialization explored the push by magazines into the online and technology spaces. The goal of the project was to explore viable technologies to use as a platform for developing an online presence for The Boar, an arts and literary magazine produced by and for the students in the Faculty of Arts at the University of Waterloo. I explored the traditional online website format but looked further by designing a prototype of an up-and-coming Flash-based technology known as the &#8220;digital edition.&#8221; This &#8220;new technology&#8221; is being adopted industry-wide like wildfire (see <a href="http://issuu.com/batmoo/docs/the-boar-online_technology-research-for-magazines" target="_blank">Issuu</a>, <a href="http://scribd.com" target="_blank">Scribd</a>, <a href="http://zinio.com" target="_blank">Zinio</a>, etc.). It takes a traditional PDF and converts it into an interactive magazine-like object on a webpage that can be used and manipulated much like a physical magazine. My prototype (although not entirely functional) took a step further and explored the possibilities of creating greater ties between a magazine&#8217;s website and their digital edition via a synchronization of comments, bookmarking, and other social networking type tools.</p>
<p>As supplementary materials, I have attached 3 documents that I completed as part of my project:</p>
<ul>
<li><a href="http://issuu.com/batmoo/docs/the-boar-online_technology-research-for-magazines" target="_blank">Technology Research</a>: exploration of various technologies in use by the magazine industry and what movements the trends were indicating.</li>
<li><a href="http://issuu.com/batmoo/docs/the-boar-online_-_strategy_scope_structure" target="_blank">Strategy, Scope &amp; Structure</a>: Documentation outlining requirements for the online presence and drill down into specifics, as well as a high-level architectural diagram.</li>
<li><a href="http://issuu.com/batmoo/docs/the-boar-online_final-project-analysis" target="_blank">Final Analysis</a>: Analysis of the end result of my project, including rationale for technical and design choices as well as possible enhancements for the future.</li>
</ul>
<p>Also included is a somewhat-working version of the <a href="/media/digitaledition/theboarv1.1.html" target="_blank">digital edition prototype</a>.</p>
<p>The website in its current state, which has deviated slightly from the original design, can be found here: <a href="http://theboar.ca" target="_blank">http://theboar.ca</a></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2009/03/theboarca/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web App prototype: eCard Builder</title>
		<link>http://digitalize.ca/2008/05/kiwishake/</link>
		<comments>http://digitalize.ca/2008/05/kiwishake/#comments</comments>
		<pubDate>Fri, 23 May 2008 08:54:59 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://batmoo.com/a/?p=43</guid>
		<description><![CDATA[KiwiShake was a prototype Facebook application. The idea was to provide users with the ability to create eCards that could be customized with photos, videos, etc. It&#8217;s not even close to completion and it pretty terrible overall, but there&#8217;s a lot of potential. I programmed the interface of the application, which involved lots of JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p><a class="thickbox" href="http://batmoo.com/media/kiwi.png"><img class="alignnone size-full wp-image-58" title="KiwiShake" src="http://batmoo.com/media/kiwi.png" alt="" /></a></p>
<p>KiwiShake was a prototype Facebook application. The idea was to provide users with the ability to create eCards that could be customized with photos, videos, etc. It&#8217;s not even close to completion and it pretty terrible overall, but there&#8217;s a lot of potential.</p>
<p>I programmed the interface of the application, which involved lots of JavaScript and some AJAX work.</p>
<p>See a somewhat functioning prototype here: <a href="/media/kiwi/kiwi.html" target="_blank">http://digitalize.ca/media/kiwi/kiwi.html</a></p>
<hr /><strong>Tools used: </strong>JavaScript, Aptana IDE, YouTube API, various JavaScript libraries</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2008/05/kiwishake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Development: Imprint Online &#8211; Web Publishing System</title>
		<link>http://digitalize.ca/2008/05/imprint-online-web-publishing-system/</link>
		<comments>http://digitalize.ca/2008/05/imprint-online-web-publishing-system/#comments</comments>
		<pubDate>Fri, 23 May 2008 03:22:27 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://batmoo.com/a/?p=15</guid>
		<description><![CDATA[What do you get when you marry the Adobe Scripting Engine with the magic of XML Parsing? Well, one thing you can come out with is a web publishing system that automates the process of publishing the online version of a weekly newspaper. This is exactly what I did for Imprint. Online publishing for Imprint [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/media/imprint_publishing.png"><img class="alignnone size-full wp-image-75" title="Imprint Publishing" src="/media/imprint_publishing.png" alt="Imprint Publishing" /></a></p>
<p>What do you get when you marry the Adobe Scripting Engine with the magic of XML Parsing? Well, one thing you can come out with is a web publishing system that automates the process of publishing the online version of a weekly newspaper.</p>
<p>This is exactly what I did for Imprint. Online publishing for Imprint was always seen as a chore and took forever to do. I searched for a solution, but could not find anything substantial. So it was time to hack something together.</p>
<p>Using the powerful Adobe Scripting Engine and some <a href="http://digitalize.ca/2008/05/adobe-indesign-script-createmyxml/">cleverly crafted JavaScript</a>, I was able to turn an (almost) semantically dead laid out newspaper page (in Adobe InDesign) into a meaningful XML file. (I have to note that some user input was involved; the Web Editor had to appropriately label related Text Boxes within InDesign to associate story elements together). This XML file could then be pumped into a custom administration component for the <a href="http://mambo-foundation.org/">Mambo </a>CMS, that would parse through the XML and create the appropriate database entries and automagically publish the newspaper online (I should also note here, that some user input was involved; Users were walked through the list of articles extracted from the XML file and had to indicate the Section and Category each belonged to). Goodbye copy-pasting!</p>
<p>Clever, no?</p>
<hr /><strong>Tools used:</strong> JavaScript, Adobe Scripting Engine, Adobe InDesign, XML, PHP, MySQL, DOMIT XML Parser, Mambo, and hours of rigorous testing</p>
<p>&nbsp;</p>
<p style="padding-left: 30px;"><code> </code></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2008/05/imprint-online-web-publishing-system/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Development: Imprint Archives</title>
		<link>http://digitalize.ca/2008/05/imprint-online-archives/</link>
		<comments>http://digitalize.ca/2008/05/imprint-online-archives/#comments</comments>
		<pubDate>Fri, 16 May 2008 16:10:29 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://batmoo.com/a/?p=14</guid>
		<description><![CDATA[In conjunction with the 50 years of campus journalism celebration at the University of Waterloo, Imprint took made a push to make available online, all 50 years worth of its archives. I took the lead on this as I managing the Imprint website at the time. We received scanned copies of all the archives in [...]]]></description>
			<content:encoded><![CDATA[<p><a class="thickbox" href="/media/imprint-archiving.png"><img title="Imprint Archiving" src="/media/imprint-archiving.png" alt="Imprint Archiving" width="543" height="244" /></a></p>
<p style="text-align: left;">In conjunction with the 50 years of campus journalism celebration at the University of Waterloo, Imprint took made a push to make available online, all 50 years worth of its archives. I took the lead on this as I managing the Imprint website at the time.</p>
<p style="text-align: left;">We received scanned copies of all the archives in PDF format. To incorporate the archives into our existing system, and to make them easy to browse through, we needed certain pieces of information, such as the volume, issue number, etc. The files were all named with a certain convention and contained all the required pieces except for a key component: the date. Getting the date would be hard; there was no easy solution other than simply opening each PDF file and recording the date manually. The downside to this was that 50 years worth of archives meant that a lot of PDF files needed to be sifted through.</p>
<p style="text-align: left;">Given the access to a healthy and willing volunteer base, I decided to use &#8220;community&#8221; power to streamline the process. I set up a quick PHP script that extracted volume and issue information from the file name, and on top of that, threw a quick streamlined interface that asked the user to enter the date information for the PDF file presented. With volunteers working at the task in their spare time, we managed to codify 50 years worth of archives (1,000+ issues in less than a week), whereas, my going at it alone would have taken easily over a month.</p>
<p style="text-align: left;">Take a walk down history lane here: <a href="http://imprint.uwaterloo.ca/archives" target="_blank">Imprint Archives</a></p>
<p style="text-align: left;"><strong>Update (2008-06-04): </strong>I recently upgraded the archives to make use of the <a href="http://www.scribd.com" target="_blank">Scribd</a> API to generate on-the-fly &#8220;iPaper&#8221; versions of PDFs in the archives. The main benefits of this are savings in bandwidth usage (since some of the PDFs are ~100MB) and a faster, enriched user experience.</p>
<hr />Tools used: Healthy and willing volunteers, PHP, MySQL, Regular Expressions</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2008/05/imprint-online-archives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Development: Imprint Online</title>
		<link>http://digitalize.ca/2008/05/imprint-online/</link>
		<comments>http://digitalize.ca/2008/05/imprint-online/#comments</comments>
		<pubDate>Fri, 16 May 2008 16:10:14 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://batmoo.com/a/?p=13</guid>
		<description><![CDATA[After several years in the online game, Imprint, the University of Waterloo&#8217;s official student newspaper, decided that it needed a fresh new website to adapt to the changing trends in the Internet news industry. I modified the core code of the Mambo content management system to meet the unique needs of a newspaper&#8217;s online counterpart, [...]]]></description>
			<content:encoded><![CDATA[<p><a class="thickbox" rel="imprintonline" href="/media/imprint.jpg"><img class="alignnone size-medium wp-image-67" title="Imprint Online" src="/media/imprint-300x180.jpg" alt="Imprint Online" /></a> <a class="thickbox" rel="imprintonline" href="/media/imprint_admin.png"><img class="alignnone size-medium wp-image-74" title="Imprint Online Administration" src="/media/imprint_admin-300x172.png" alt="Imprint Online Administration" /></a><br />
After several years in the online game, Imprint, the University of Waterloo&#8217;s official student newspaper, decided that it needed a fresh new website to adapt to the changing trends in the Internet news industry.</p>
<p>I modified the core code of the Mambo content management system to meet the unique needs of a newspaper&#8217;s online counterpart, such as having an issue-based publishing system, among others. This involved modifications to both front- and back-end code+interfaces. Beyond this, I investigated add-ons provide additional functionality such as a commenting system and integrated those into the website. If add-ons were not readily available or were not up-to-standard in terms of quality, I wrote them from scratch. A great example is the <a href="http://imprint.uwaterloo.ca/archives">PDF Archive</a>.</p>
<hr /><strong>Tools used:</strong> Mambo CMS, lots and lots of coffee (for all the late nights spent analyzing and writing code)</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2008/05/imprint-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

