<?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>Food for thought from TheHuey &#187; Technical Musings</title>
	<atom:link href="http://www.thehuey.com/blog/category/technical-musings/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thehuey.com/blog</link>
	<description>News and other posts for friends and family</description>
	<lastBuildDate>Wed, 14 Apr 2010 02:05:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Open source Ipad app</title>
		<link>http://www.thehuey.com/blog/2010/04/13/open-source-ipad-app/</link>
		<comments>http://www.thehuey.com/blog/2010/04/13/open-source-ipad-app/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 02:05:20 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/2010/04/13/open-source-ipad-app/</guid>
		<description><![CDATA[Having played with my new iPad for over a week, I have come to the conclusion that while it may not yet replace the laptop, it creates a new category of tech devices.
The large format screen and familiar iPhone OS were easy to get acquainted with. The touch interface and keyboard is much easier to [...]]]></description>
			<content:encoded><![CDATA[<p>Having played with my new iPad for over a week, I have come to the conclusion that while it may not yet replace the laptop, it creates a new category of tech devices.</p>
<p>The large format screen and familiar iPhone OS were easy to get acquainted with. The touch interface and keyboard is much easier to thumb type with. The A4 CPU feels much faster and scrolling is quite smooth.  I am still trying out different apps to find what works well for my needs but so far the redesigned mail application is truly an experience.</p>
<p>Netflix has a free application for the iPad and iPhone that allows subscribers to watch their instant watch library via the app.  It is a great way to watch movies on the go or without turning on a computer. The built in Youtube app is also great for those who like independent content.</p>
<p>Drawing programs are another breed of fun applications. There are many to choose from, but a good price to feature app is ArtStudio. The $0.99 price belies the advanced features found on this app.  With layer support (up to 3 layers), brushes and image import/export, you can save to your photos or email them to others.</p>
<p>News readers are another really excellent group of apps.  Many newspapers have free apps allowing easy access to their content.  I haven&#8217;t gotten a chance to check out most of them, but the WSJ app is pretty nice. The interface takes a little getting used to, but once you get the hang of it, it is far superior to searching thru the printed version.  SkyGrid is another news aggregator and allows searching multiple sources for recent news.</p>
<p>Back to the post topic.  Wordpress is a popular blogging software (which powers this blog), and this post is being written on their iPad app.  The app is open source as well, so if you are interested in developing iPhone/iPad apps, you can start by checking out the code.  My complaint about this app is the save feature is a little broken.  This is my third attempt at writing this post.  When you click the home button, it seems to recover your changes, but when you hit save, it reverts to the older version. So hit Save before you go play a tune.</p>
<p>-Huey</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2010/04/13/open-source-ipad-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gallery2 Media Rss Patch for CoolIris Embed Wall</title>
		<link>http://www.thehuey.com/blog/2009/03/08/gallery2-media-rss-patch-for-cooliris-embed-wall/</link>
		<comments>http://www.thehuey.com/blog/2009/03/08/gallery2-media-rss-patch-for-cooliris-embed-wall/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 21:23:14 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>
		<category><![CDATA[cooliris]]></category>
		<category><![CDATA[gallery2]]></category>
		<category><![CDATA[media rss]]></category>
		<category><![CDATA[php programming]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/?p=52</guid>
		<description><![CDATA[Use Cooliris to show your photos using Gallery2.  The quickest and coolest way to showcase your photos.  Follow the patches and you can too!]]></description>
			<content:encoded><![CDATA[<p>I was recently looking at different opportunities and saw a quite a few great companies doing wonderful things.  Among them is Cooliris, previously known as PicLens.  Their flagship product is a browser plugin which allows a very enticing scrolling view of media files.  Images, videos, and music scroll by on the screen in an endless wall.  Clicking on an image will zoom in to a higher resolution photo and a video file will zoom in and start playing.  Needless to say this is a pretty cool little tool, but it&#8217;s a plugin which means the download stops a lot of potential users.  But wait, they have a flash embed file which allows any website to embed the same experience on any web page!  Let&#8217;s see how we can use this to <a href="http://www.thehuey.com/cooliris/index.html">show off our photos</a>. <span id="more-52"></span></p>
<p>Wanting to use it for my own photos, I couldn&#8217;t wait to get started.  Since I already have a bunch of my own photos hosted using Gallery2, I decided to see if I could hook up an RSS feed and get it running quickly.  Unfortunately the default installation of the RSS plugin with Gallery2 didn&#8217;t support media rss.  My plugin version was a bit outdated so first I had to upgrade it.</p>
<p>Being new to Gallery2 development, I had to take a little bit and familiarize myself with the code.  The code structure is very well done and was pretty easy to start seeing what needed to be done.  I wanted to stick with the existing convention and not break anything unintentionally, so I made copies where needed and was careful about what I changed in shared files.</p>
<p>The code is located mostly under the /modules directory.  The /core sub-directory contains the Gallery core files.  What we&#8217;re interested in lies in /rss.  Makes sense right?  First thing I did was to make a examine the existing usage.  When viewing an album via a browser, the RSS feed link shows that the resource is accessed via g2_view=rss.SimpleRender.  So I made a copy of /rss/SimpleRender.inc to /rss/MediaRss.inc. My original version of the RSS plugin did not have any support for the media rss format, but the latest update does.  That helps make my task a LOT easier, but there is still more to do.  </p>
<ol>
<li>Add the &#8216;useMedia&#8217; parameter and the page variable to the params array.<br />
<code><br />
      $params['useCloud'] = false;<br />
      $params['useMedia'] = true;</p>
<p>      $params['page'] = GalleryUtilities::getRequestVariables('page');<br />
      $ret = $this->continueRender($params);<br />
</code>
</li>
</ol>
<p>Next, we need to examine the other classes that are used to support the feed generation.  Looking under the /classes directory (/modules/rss/classes), we see two that catch the eye immediately.  RssHelper.class and RssGenerator.class.</p>
<p>RssHelper.class generates the SQL which is used to find items to show in the feed.  One of the main things missing here is the ability to paginate results.  So let&#8217;s add it!  In the getFeed function, find the function call for fetchAlbumTree and make the following change:<br />
<strong>From</strong><br />
<code>RssHelper::fetchAlbumTree(<br />
   $entity->getId(),<br />
   $param['count'],<br />
   $newOnly,<br />
   $param['feedType'] != 'album',<br />
   $param['feedType'] == 'photosRecursive' ? $param['photosRecursiveLimit'] : 0,<br />
   $param['feedType'] == 'photosRandomRecursive');<br />
</code><br />
<strong>To</strong><br />
<code>RssHelper::fetchAlbumTree(<br />
   $entity->getId(),<br />
   array('count' => $param['count'], 'offset' => $param['offset']),<br />
   $newOnly,<br />
   $param['feedType'] != 'album',<br />
   $param['feedType'] == 'photosRecursive' ? $param['photosRecursiveLimit'] : 0,<br />
   $param['feedType'] == 'photosRandomRecursive');<br />
</code></p>
<p>We&#8217;ll put in the calculations for the offset in a bit.  First we worry about how to make sure it&#8217;s used.  In the &#8216;fetchAlbumTree&#8217; function, we need to check the $limit parameter and use it to set the offset.<br />
<code><br />
if (isset($limit)) {<br />
  $params['limit'] = array('count' => $limit);<br />
}<br />
</code><br />
<strong>Becomes</strong><br />
<code><br />
if (isset($limit)) {<br />
  if (is_array($limit)) $params['limit'] = $limit;<br />
  else $params['limit'] = array('count' => $limit);<br />
  }<br />
}<br />
</code><br />
The offset parameter is now used in the $gallery->search call.  Now, I thought I was all done, but when reviewing the response, I noticed the media:thumbnail url was set the same as the description.  This resulted in Cooliris not being able to pull in the thumbnails for the wall.  The bug is in the RssHelper.class code, function addPhotoOrAlbum.  Here is the change:<br />
<code><br />
          $itemSettings['thumbnail']['url'] = $url;<br />
SHOULD BE<br />
          $itemSettings['thumbnail']['url'] = $imageUrl;<br />
</code></p>
<p>RssGenerator.class does just that.  Depending on the version of RSS and whether you are &#8216;useMedia&#8217;, it generates the correct response XML document for feed readers.  There are a few changes here.</p>
<ol>
<li>Add a &#8216;default&#8217; statement to function generate() so we use 2.0 by default<br />
<code><br />
  case '2.0':<br />
  default:<br />
    return $this->generate200();<br />
    break;<br />
</code>
</li>
<li>Because we want pagination of our results, for the infinite wall experience in cooliris, we need to determine the next and previous feed URLs.  We will use an Apache rewrite rule for a pretty URL, so here&#8217;s the code to generate the links based on the current URL.<br />
<code>
<pre>
     $platform =&#038; $gallery->getPlatform();
      $lf = $platform->getLineEnding();

      if (isset($this->_properties['useMedia']) &#038;&#038; $this->_properties['useMedia'] == 1) {
        $generator = $gallery->getUrlGenerator();
        //GalleryUtilities::putRequestVariable('page', 4);
        $current = $generator->getCurrentRequestUri();
        $matches = array();
        if (preg_match("#media(\d*).rss$#", $current, $matches)) {
          $curPage = $matches[1];
          if (intval($curPage) < 1) {
            $curPage = 1;
          }
          $nextPage = $generator->makeUrl($current);
          $nextPage = preg_replace("#media\d*.rss#", "media" . ($curPage + 1) . ".rss", $nextPage);
          if ($curPage > 1) {
            $prevPage = $generator->makeUrl($current);
            $prevPage = preg_replace("#media\d*.rss#", "media" . ($curPage - 1) . ".rss", $prevPage);
          }
        }

        $multiPage = &lt;&lt;&lt;MULTIPAGE
    &lt;atom:link rel="previous" href="$prevPage" /&gt;
    &lt;atom:link rel="next" href="$nextPage" /&gt;
MULTIPAGE;
      }</pre>
<p></code>
</li>
<li>Since we&#8217;re using ATOM, we need to tell setup the XML namespace in our response.<br />
<code><br />
  if (isset($this->_properties['useMedia']) &#038;&#038; $this->_properties['useMedia'] == 1) {<br />
    $data = '<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom">';<br />
  }<br />
</code>
</li>
<li>Finally, we add the links into the response right after the link tag.<br />
<code><br />
         '
<link>' . $this->_properties['link'] . '</link>' . $lf .<br />
          $multiPage . $lf .<br />
          '<description>' .<br />
</code></p>
<li>All this, but we&#8217;re not handling the pages correctly during the request.  What we&#8217;re missing is the ability to control where the slice happens.  Open up Render.inc in the /modules/rss/ directory and find where <code>$generator->sliceItems($count);</code> is being called.  We have already changed RssHelper::getFeed to handle the SQL offset, all we need is to set the &#8216;offset&#8217; variable.<br />
<code>
<pre>
    if (isset($params['page']) &#038;&#038; $params['page'] > 1) {
        $start = ($params['page'] - 1) * $count;
    } else {
        $start = 0;
    }
    $params['count'] = $count;
    $params['offset'] = $start;

    $generator = new RssGenerator();
</pre>
<p></code>
</li>
</ol>
<h2>Pretty SEO URLs</h2>
<p>We want to present easy to understand URLs to any spider.  Instead of /main.php?g2_view=rss.MediaRss&#038;g2_itemId=xxxx&#8230;.., let&#8217;s do something like the /v/album1/subAlbum/ style URL.  Of course, the Cooliris embed wall only seems to like urls that end in .rss which means we MUST do this step.</p>
<p>If we take a look at the existing rewrite rule for Paths, we can just modify their scheme to fit our needs.<br />
<code><br />
        RewriteCond %{THE_REQUEST} /gallery/v/([^?]+)(\?.|\ .)<br />
        RewriteCond %{REQUEST_URI} !/gallery/main\.php$<br />
        RewriteRule .   /gallery/main.php?g2_path=%1   [QSA,L]<br />
</code><br />
Now it look simply like everything after /gallery/v/ and before query parameters is dumped into a g2_path variable.  We need the same thing except we must also check the page that we are on.  I settled on a URL like:<br />
<code>/gallery/m/album_path_info/media2.rss</code><br />
Here, we use the same path method that View does and we have additional page information after media.  Our rewrite rule would look something like:<br />
<code><br />
        RewriteCond %{REQUEST_URI} /gallery/m/([^?]+)/media(\d*).rss<br />
        RewriteRule .   /gallery/main.php?g2_view=rss.MediaRss&#038;g2_path=%1&#038;g2_page=%2   [QSA,L]<br />
</code></p>
<p>That&#8217;s pretty much it.  We can now access any of our albums with a media.rss feed that allows pagination and viewing in Cooliris&#8217;s Embed Wall.</p>
<p>For future enhancements, it should be possible to hook up the album navigation thru Javascript and have a seamless interface suitable for a Gallery2 Theme.</p>
<p>Maybe I&#8217;ll do that for fun next weekend.<br />
-Huey</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2009/03/08/gallery2-media-rss-patch-for-cooliris-embed-wall/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Zend Layout and Navigation</title>
		<link>http://www.thehuey.com/blog/2008/04/01/zend-layout-and-navigation/</link>
		<comments>http://www.thehuey.com/blog/2008/04/01/zend-layout-and-navigation/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 06:56:20 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/archives/44</guid>
		<description><![CDATA[I&#8217;m not sure how everyone else is using Zend_Layout, but I&#8217;m doing the following to render my navigation and footer links.  It&#8217;s not the most DRY code, but works until I learn more about the framework.
In my Action file, I add actions to the stack for nav, footer, etc.

class IndexController extends ....
{
  function [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure how everyone else is using Zend_Layout, but I&#8217;m doing the following to render my navigation and footer links.  It&#8217;s not the most DRY code, but works until I learn more about the framework.</p>
<p>In my Action file, I add actions to the stack for nav, footer, <span id="more-44"></span>etc.<br />
<code><br />
class IndexController extends ....<br />
{<br />
  function indexAction()<br />
  {<br />
      $this->_helper->actionStack('main', 'nav', 'default');<br />
      $this->_helper->actionStack('footer', 'nav', 'default');<br />
      $this->_helper->actionStack('right', 'nav', 'default');<br />
     /* other stuff */<br />
  }<br />
}<br />
</code></p>
<p>Then I have a NavController that simply calls setResponseSegment or renderScript to set the named variables.</p>
<p><code><br />
class NavController ..<br />
{<br />
  function footerAction()<br />
  {<br />
     /* Stuff to display */<br />
    $this->renderScript('nav/footer.phtml', 'nav');<br />
    // Or I could use<br />
    // $this->_helper->viewRenderer->setResponseSegment('nav');<br />
  }<br />
}<br />
</code></p>
<p>This allows me to finally use the nav variable in my layout file<br />
layout/default.phtml<br />
<code><br />
echo $this->layout()->nav;<br />
</code><br />
Simple eh?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2008/04/01/zend-layout-and-navigation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.5.1 and my Models code</title>
		<link>http://www.thehuey.com/blog/2008/04/01/zend-framework-151-and-my-models-code/</link>
		<comments>http://www.thehuey.com/blog/2008/04/01/zend-framework-151-and-my-models-code/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 22:25:02 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/archives/43</guid>
		<description><![CDATA[Someone asked how I get a db connection in my models using ZF1.5.1
Basically I have a ConfigDB singleton pattern that gets one db connection, then sets the default adapter so when I extend the Zend_DB_Table_Abstract class, the default connection gets carried around.
class ConfigDB {
  static private $instance;
  private function __construct() {
  }
 [...]]]></description>
			<content:encoded><![CDATA[<p>Someone asked how I get a db connection in my models using ZF1.5.1</p>
<p>Basically I have a ConfigDB singleton pattern that gets one db connection, then sets the default adapter so when I extend the Zend_DB_Table_Abstract class, the default connection gets carried around.</p>
<p><code>class ConfigDB {<br />
  static private $instance;<br />
  private function __construct() {<br />
  }<br />
  public static function getInstance() {<br />
    if (!ConfigDB::$instance) {<br />
      $params = array(<br />
/* redacted */<br />
      );<br />
      ConfigDB::$instance = Zend_Db::factory('Mysqli', $params);<br />
      Zend_Db_Table_Abstract::setDefaultAdapter(ConfigDB::$instance);<br />
    }<br />
    return ConfigDB::$instance;<br />
  }<br />
  public static function selectDb($db) {<br />
    return ConfigDB::$instance->getConnection()->select_db($db);<br />
  }<br />
}<br />
ConfigDB::getInstance();<br />
</code><br />
That grabs the connection and sets the default adapter.  So in my model class I can do:<br />
<code>class Country extends Zend_Db_Table_Abstract {<br />
 protected $_name = 'countries';<br />
 protected $_primary = 'country_id';<br />
 function __construct($country = 1, $abbr = '')<br />
 {<br />
  parent::__construct();<br />
 }<br />
}</code></p>
<p>That&#8217;s it</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2008/04/01/zend-framework-151-and-my-models-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monkey see, Monkey want, Monkey get spaceball.gif</title>
		<link>http://www.thehuey.com/blog/2007/06/11/monkey-see-monkey-want-monket-get-spaceballgif/</link>
		<comments>http://www.thehuey.com/blog/2007/06/11/monkey-see-monkey-want-monket-get-spaceballgif/#comments</comments>
		<pubDate>Mon, 11 Jun 2007 19:54:11 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/archives/35</guid>
		<description><![CDATA[Monkey See. I was poking around Flickr recently and was amazed at the amount of &#8216;Interesting Photos&#8217; that users have tagged.  Some of the sunsets and scenery photos are absolutely stunning.  Naturally, I wanted to fetch and use it as my desktop background.  However, (understandably) Flickr doesn&#8217;t like people downloading (or referring [...]]]></description>
			<content:encoded><![CDATA[<p>Monkey See. I was poking around Flickr recently and was amazed at the amount of &#8216;Interesting Photos&#8217; that users have tagged.  Some of the sunsets and scenery photos are absolutely stunning.  Naturally, I wanted to fetch and use it as my desktop background.  However, (understandably) Flickr doesn&#8217;t like people downloading (or referring directly to the images) so they have gone to some lengths to obfuscate and hide the actual image url.  If you try to right-click and copy image source, you get an annoying little image called spaceball.gif.  How does Monkey get around this?</p>
<p>Monkey Do. Having recently downloaded and installed the GreaseMonkey plugin for FireFox, I searched and couldn&#8217;t find a suitable userscript to handle the situation.  Being the obsessive type, I went ahead and wrote two quick scripts to help me get at the actual image urls.  One, &#8216;<a href="http://userscripts.org/scripts/show/9796">Flickr Img Src Exposer</a>&#8216;, exposes the image url on an individual photo.  It adds a link &#8216;IMG LINK&#8217; underneath the image allowing for easy copying.  The second script, &#8216;<a href="http://userscripts.org/scripts/show/9797">Flickr Download Links</a>&#8216;, works when you are exploring the last 7 days&#8217; interesting photos.  I got tired of clicking on each photo and then saving the image, so I put a &#8216;LINK&#8217; under each photo in the page.  Clicking on the link takes you to a gallery of all the available image sizes.  You can click on the download link to get the image downloaded or copy the images source from the image displayed.  The largest size may not be available and you&#8217;ll find out if so after clicking on it.  I chose not to display the largest image size to save Flickr some bandwidth.</p>
<p>Monkey no get spaceball.gif.  This has proved somewhat useful for me and I thought I&#8217;d share it with others.  You can find the scripts on &#8216;<a href="http://userscripts.org">http://userscripts.org</a>&#8216;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2007/06/11/monkey-see-monkey-want-monket-get-spaceballgif/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apr 28th Hack day at work!</title>
		<link>http://www.thehuey.com/blog/2006/04/30/apr-28th-hack-day-at-work/</link>
		<comments>http://www.thehuey.com/blog/2006/04/30/apr-28th-hack-day-at-work/#comments</comments>
		<pubDate>Sun, 30 Apr 2006 21:02:07 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/archives/16</guid>
		<description><![CDATA[A preliminary demo for my hack is already installed on this site.  My hack was to take any text selections a user makes and allow them to search Y! Shopping for related products.  You can see it at work by selecting any word or words on this page and then by clicking the [...]]]></description>
			<content:encoded><![CDATA[<p>A preliminary demo for my hack is already installed on this site.  My hack was to take any text selections a user makes and allow them to search Y! Shopping for related products.  You can see it at work by selecting any word or words on this page and then by clicking the little blue box that comes up next to it.  Although you might find an obvious shopping term such as <b>nikon digital cameras</b> much more relavant.</p>
<p>This can be improved very easily.  For example, instead of only searching Y! Shopping, the initial box can be a drop down menu populated with results from a text analysis tool.  Then the user can perform a web/news/product search by following the corresponding links.</p>
<p>A key benefit to this implementation, any web publisher only needs to include a single (two at the moment) javascript reference in their header to receive this functionality.  They don&#8217;t have to link terms by hand, or do any backend work to support this.  They get better user experience and a richer webpage essentially for free.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2006/04/30/apr-28th-hack-day-at-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My First WordPress Plugin</title>
		<link>http://www.thehuey.com/blog/2006/04/26/my-first-wordpress-plugin/</link>
		<comments>http://www.thehuey.com/blog/2006/04/26/my-first-wordpress-plugin/#comments</comments>
		<pubDate>Wed, 26 Apr 2006 23:25:33 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/archives/13</guid>
		<description><![CDATA[Here&#8217;s a plugin for people wishing to link to products within their blog.  It&#8217;s simple to install and use and will allow you to add product titles and more by simply including &#60;asin&#62;1580420818&#60;/asin&#62; in your posts or pages.  I had written an earlier post but it was deleted accidentally.  Here&#8217;s the shortened [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a plugin for people wishing to link to products within their blog.  It&#8217;s simple to install and use and will allow you to add product titles and more by simply including <code>&lt;asin&gt;1580420818&lt;/asin&gt;</code> in your posts or pages.  I had written an earlier post but it was deleted accidentally.  Here&#8217;s the shortened version.<br />
<span id="more-13"></span></p>
<h3>Downloading the plugin</h3>
<p>You can download the latest version on my plugin <a href="http://www.thehuey.com/repo/plugins/amazon/amazonLinker.tar.gz">amazonLinker.tar.gz</a>.  I will be adding a version number as soon as I put it in my CVS respository.</p>
<h3>Installation</h3>
<ol>
<li>uncompress the package and copy the results to <code>&lt;WordPress Directory&gt;/wp-content/plugins/</code>. You should end up with the following file <code>&lt;WordPress Directory&gt;/wp-content/plugins/amazon/amazon-price.php</code></li>
<li>Login to your admin dashboard, click on Plugins and Activate the Amazon Product Linker</li>
<li>You&#8217;re done!</li>
</ol>
<h3>Usage</h3>
<p>Simply add something like <code>&lt;asin&gt;1580420818&lt;/asin&gt;</code> in your posts or pages and you will see the title and even prices being brought into your page.  Here is what the above code looks like <asin>1580420818</asin>.  Currently, only Books gets special treatment but I will enhance the tool in the future to allow different displays for different product groups.  Everything else just gets a title currently.</p>
<p>Happy Word Pressing!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2006/04/26/my-first-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A first jab at a javascript Sudoku puzzle solver</title>
		<link>http://www.thehuey.com/blog/2006/04/12/a-first-jab-at-a-javascript-sudoku-puzzle-solver/</link>
		<comments>http://www.thehuey.com/blog/2006/04/12/a-first-jab-at-a-javascript-sudoku-puzzle-solver/#comments</comments>
		<pubDate>Thu, 13 Apr 2006 00:42:11 +0000</pubDate>
		<dc:creator>huey</dc:creator>
				<category><![CDATA[Technical Musings]]></category>

		<guid isPermaLink="false">http://www.thehuey.com/blog/?p=4</guid>
		<description><![CDATA[Okay, so it doesn&#8217;t completely solve the puzzle yet. Using javascript to remove possible values from each block, the user can plug in hard values from the puzzle they are working on. The solver will try and arrive at a solution but you will be require to guess at some points. Improvements like a save [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, so it doesn&#8217;t completely solve the puzzle yet. Using javascript to remove possible values from each block, the user can plug in hard values from the puzzle they are working on. The solver will try and arrive at a solution but you will be require to guess at some points. Improvements like a save point creation will be very helpful. Another improvement is to have the solver auto create a save point and branch until it gets to the final answer(s).</p>
<p>If you don&#8217;t know what <a href="http://www.numbercrazy.com">sudoku puzzles</a> are, check out <a href="http://www.numbercrazy.com/">sudoku</a></p>
<p>Here is my javascript <a href="http://www.thehuey.com/repo/sudoku-solver/">solution to sudoku puzzles</a></p>
<p>Update: I&#8217;ve modified my sudoku solver to be a generic sudoku puzzle.  You can play it for free at <a href="http://www.numbercrazy.com">www.numbercrazy.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thehuey.com/blog/2006/04/12/a-first-jab-at-a-javascript-sudoku-puzzle-solver/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
