<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-22560494</id><updated>2012-02-15T22:20:51.075-08:00</updated><category term='apache'/><category term='3.1'/><category term='facebook'/><category term='RedirectMatch'/><category term='live'/><category term='bug'/><category term='UI design'/><category term='development'/><category term='single page'/><category term='web development'/><category term='API'/><category term='Editorials'/><category term='Code'/><category term='authorize.net'/><category term='social networking'/><category term='redirection'/><category term='paper prototypes'/><category term='custom drupal module'/><category term='fantasy'/><category term='sports'/><category term='drupal'/><category term='launch'/><category term='regular expressions'/><category term='taxonomy module'/><category term='redirect'/><category term='failure'/><category term='mod_alias'/><category term='error'/><category term='cusom drupal development'/><title type='text'>Metal Toad Blog</title><subtitle type='html'>One leap ahead.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-22560494.post-7489071916604117383</id><published>2008-06-11T10:41:00.000-07:00</published><updated>2008-06-11T10:54:54.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cusom drupal development'/><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy module'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='custom drupal module'/><title type='text'>The virtues of the Drupal Taxonomy module</title><content type='html'>In developing custom Drupal modules, a good understanding of the &lt;a href="http://drupal.org/handbook/modules/taxonomy"&gt;Drupal Taxonomy module&lt;/a&gt; is very important.  Not just used for tagging, Taxonomy is the basis of categories for the Forum module and a number of other modules including the indispensable &lt;a href="http://drupal.org/project/views"&gt;Views module&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Any time in custom Drupal development calls for some type of categorization whether free form or a rigid hierarchy it's a good idea to look to the Taxonomy module before trying to build any sort of custom system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-7489071916604117383?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/7489071916604117383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=7489071916604117383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/7489071916604117383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/7489071916604117383'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/06/virtues-of-drupal-taxonomy-module.html' title='The virtues of the Drupal Taxonomy module'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-5342891948124265114</id><published>2008-06-04T09:50:00.001-07:00</published><updated>2008-06-04T10:31:19.634-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>Facebook as a social network</title><content type='html'>A lot of companies these days are looking to increase their visibility on the web through social networking.  Many look to get involved by creating a social network that revolves around their business.  While this may work for some, your business may not have the resources or user base to want to commit to this kind of web development.&lt;br /&gt;&lt;br /&gt;If you find yourself in this situation, Facebook offers a great intro into the social networking space.  It is a vibrant (and pre-existing) community, which allows businesses to create a presence through Groups or Pages.  If a Group created in Facebook can garner a lot of attention this may be a signal that it's ready for it's own social networking community and the channels on Facebook will help to get it started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-5342891948124265114?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/5342891948124265114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=5342891948124265114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/5342891948124265114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/5342891948124265114'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/06/facebook-as-social-network.html' title='Facebook as a social network'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-7610491454321961559</id><published>2008-05-30T17:59:00.000-07:00</published><updated>2008-05-30T18:10:52.509-07:00</updated><title type='text'>Keep in touch after the event</title><content type='html'>I attending the 2008 AIGA leadership retreat in Omaha, Nebraska (I'm starting in July as the new Web Chair for AIGA Portland). There were some great opportunities to talk about Web Development and get inspired about this great organization.&lt;br /&gt;&lt;br /&gt;It's been a while since my last big networking event and there have been a lot of advancements in online networking tools, so I've taken a moment to recheck my process for getting new contacts into my address.&lt;br /&gt;&lt;br /&gt;My new process involves two great online tools: Plaxo and LinkedIn.  If you haven't signed up for them, do yourself a favor and check them out.  They are both free, but offer premium membership.  Plaxo is great because it allows you enter in contact information and notes, and they offer tools to get them into whatever local contact system you are using.  I happen to be on a Mac and using Thunderbird and there are downloadable applications that sync up with them both.&lt;br /&gt;&lt;br /&gt;Linked in allows my to connect with the people I've met in a business friendly way, and because most of the people I have met already have accounts it's as simple as looking them up and having their email handy.  Because Plaxo allows you to import data from LinkedIn, some people may opt to add their connections there and THEN import them but I feel its important to get the contacts in so you can make notes while your mind is still fresh.&lt;br /&gt;&lt;br /&gt;While Plaxo and Linked seem very similar (and do many of the same things) each excels in an area the other is weak in.  Plaxo to disseminate to my local address books and linkedIn to maintain my connection.  That's how I do it - how about you?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-7610491454321961559?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/7610491454321961559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=7610491454321961559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/7610491454321961559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/7610491454321961559'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/05/keep-in-touch-after-event.html' title='Keep in touch after the event'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-4752643968953318920</id><published>2008-05-28T10:38:00.000-07:00</published><updated>2008-06-11T14:10:50.087-07:00</updated><title type='text'>Top 12 Drupal Modules</title><content type='html'>I just got back from Webvisions here in Portland.  There were a number of interesting presentations and conferences are always good to get revitalized.  One presentation that was of particular interest to me was by &lt;a href="http://www.linkedin.com/pub/4/909/b36"&gt;Sean Larkin&lt;/a&gt; of &lt;a href="http://www.opensourcery.com/"&gt;OpenSourcery&lt;/a&gt;, where he covered Drupal as a development platform.&lt;br /&gt;&lt;br /&gt;Here's a quick summary of their top Drupal modules (please forgive me if I've made any errors):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/cck"&gt;CCK (Content Construction Kit)&lt;/a&gt; - allows you to add different field types&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/views"&gt;Views&lt;/a&gt; - allows custom queries&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/contemplate"&gt;Contemplates&lt;/a&gt; - allows editing of presentation&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/themesettingsapi"&gt;Theme API Module&lt;/a&gt; - allows editing the header and footer w/o a Node&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/imagecache"&gt;ImageCache&lt;/a&gt; - upload high quality images and create lower resolution versions; also allows adding borders, backgrounds, etc.&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/tinymce"&gt;TincyMCE&lt;/a&gt; - best WYSIWYG editor&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/imce"&gt;IMCE&lt;/a&gt; - a file manager that works with TinyMCE&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/gmap"&gt;Gmap&lt;/a&gt; - module for Google Maps mashup&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/pathauto"&gt;PathAuto&lt;/a&gt; - module allows you preserve older URLs&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/customerror"&gt;CustomError&lt;/a&gt; - custom 403 &amp; 404 errors without needing to create nodes for them&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/ecommerce"&gt;Ecommerce&lt;/a&gt; or Ubercart - robust ecommerce modules&lt;br /&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/devel"&gt;Devel Module&lt;/a&gt; - helpful for developers; grab arrays and see what's in them&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;For theming the you can find custom themes in the &lt;a href="http://themegarden.org/drupal6/"&gt;Theme Garden&lt;/a&gt; or start from the &lt;a href="http://drupal.org/project/zen"&gt;Zen theme&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-4752643968953318920?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/4752643968953318920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=4752643968953318920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/4752643968953318920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/4752643968953318920'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/05/top-drupal-modules.html' title='Top 12 Drupal Modules'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-6984991096809485924</id><published>2008-04-01T22:34:00.000-07:00</published><updated>2008-04-01T22:46:57.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='paper prototypes'/><category scheme='http://www.blogger.com/atom/ns#' term='UI design'/><title type='text'>Paper Prototypes</title><content type='html'>When it comes to planning a technology application, you can't beat low tech.  Given that I run a web technology company clients are often surprised that I rarely use my computer when planning a user interface.  Instead I opt to create paper prototypes using a pen, paper, scissors and scotch tape.  There are a number of reasons why this just works better.&lt;br /&gt;&lt;br /&gt;First and foremost, there's nothing faster than sketching things out.  While some people may agree that it's fast, they may say it's less efficient because you have to get everything right the first time - however with scissors and scotch tape you can pick and choose what you want, adding and combining elements easily. NOTE: previously I just used scissors and left elements floating so that I could share them between pages, however after a lot of experimenting I've found it's better to fix things in place.&lt;br /&gt;&lt;br /&gt;Outside of speed, very few things are more visceral and easier for a client  (or co-worker) to relate to than a paper prototype.  Using a pen and paper, you take several things out of the equation that often hang people up.  Color is not an issue and neither is font treatment.  People who might otherwise feel they can't participate can start weighing in, making them feel like they are more part of the process and helping to gain buy in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-6984991096809485924?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/6984991096809485924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=6984991096809485924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/6984991096809485924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/6984991096809485924'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/04/paper-prototypes.html' title='Paper Prototypes'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-4933387836651356920</id><published>2008-03-31T23:59:00.000-07:00</published><updated>2008-04-01T00:28:49.321-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redirection'/><category scheme='http://www.blogger.com/atom/ns#' term='RedirectMatch'/><category scheme='http://www.blogger.com/atom/ns#' term='regular expressions'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='redirect'/><category scheme='http://www.blogger.com/atom/ns#' term='single page'/><category scheme='http://www.blogger.com/atom/ns#' term='mod_alias'/><title type='text'>Apache redirect to single page</title><content type='html'>When moving things around on a server, sometimes you need to take the server down.  However rather than throwing a 404 or just timing out, it's nice to serve a single page to the user that says something along the lines of "we'll be right back".&lt;br /&gt;&lt;br /&gt;The best way that I've found to do this on the Apache web server is through a little creative use of the RedirectMatch function in the mod_alias module.  Since I'm running my server as virtual hosts this can get a little tricky.&lt;br /&gt;&lt;br /&gt;The first step is creating an html page and then putting it in your document root (whatever the webserver displays).  Then the next step is to modify the Apache config like so (the addition is in bold):&lt;br /&gt;&lt;br /&gt;Here's an example:&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt; ServerName www.mydomain.com&lt;br /&gt; ServerAlias mydomain.com&lt;br /&gt; &lt;span style="font-weight:bold;"&gt;RedirectMatch /[^t](.)*\.html http://www.mydomain.com/downmessage.html&lt;/span&gt;&lt;br /&gt; ...&lt;br /&gt; Other stuff goes in here&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;The RedirectMatch does a little regular expression match to find all the html pages that don't start with the letter "t".  This keeps us from getting trapped in a recursive loop that causes the server to timeout.  By keeping it html page (or whatever extension you're using: php, asp, etc) you allow the webserver to continue serving images, css.&lt;br /&gt;&lt;br /&gt;Definitely keep in mind that this is a simple regular expression and won't pickup URLs that are in subdirectories.  For more information checkout the documentation on &lt;a href="http://httpd.apache.org/docs/1.3/mod/mod_alias.html"&gt;mod_alias&lt;/a&gt; or &lt;a href="http://www.regular-expressions.info/"&gt;regular expressions&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-4933387836651356920?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/4933387836651356920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=4933387836651356920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/4933387836651356920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/4933387836651356920'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/03/apache-redirect-to-single-page.html' title='Apache redirect to single page'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-3626213723972485522</id><published>2008-03-31T16:41:00.000-07:00</published><updated>2008-03-31T16:53:23.188-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='authorize.net'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='failure'/><category scheme='http://www.blogger.com/atom/ns#' term='3.1'/><title type='text'>New Authorize.net Test URL</title><content type='html'>It came as a surprise to me, when without making any changes to my Authorize.net class (using API 3.1) began to fail silently without returning any error information.  This started around March 31, 2008.  First being suspicious that someone had modified the code I went through my svn repository and I was unable to find anything that might have changed.&lt;br /&gt;&lt;br /&gt;After digging around for several hours and verifying that it wasn't limited to a single site, one of my developers, Tom Wheeler managed to find the problem: after four years the test URL that we had is no longer valid.  Fortunately the fix (once we found it) was rather simple - just update the URL:&lt;br /&gt;&lt;br /&gt;old URL:  https://certification.authorize.net/gateway/transact.dll&lt;br /&gt;new one: https://test.authorize.net/gateway/transact.dll&lt;br /&gt;&lt;br /&gt;After making the change, everything is working as it should be.  Thank goodness Authorize keeps all of developers up-to-date with their API changes... :-P&lt;br /&gt;&lt;br /&gt;In case you need more you can see the development sample php code &lt;a href="http://developer.authorize.net/samplecode/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-3626213723972485522?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/3626213723972485522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=3626213723972485522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/3626213723972485522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/3626213723972485522'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/03/new-authorizenet-test-url.html' title='New Authorize.net Test URL'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-2416718999362843148</id><published>2008-01-03T12:04:00.000-08:00</published><updated>2008-01-03T12:32:07.594-08:00</updated><title type='text'>Online Tax Landscape Changing</title><content type='html'>The internet has long been a place of refuge for people looking to avoid paying sales tax (but who are willing to pay shipping!).  For years sales tax on internet purchases has worked like so: a merchant charges sales tax only on purchases made within a state where they have a physical presence.  The tax paid is per the merchant's location within the state including all city and county taxes (if any). Any purchases made outside the state are not charged tax, with the understanding that the individual is responsible to pay whatever sales tax would be due.&lt;br /&gt;&lt;br /&gt;You don't have to be a rocket scientist to realize that almost nobody pays these taxes, so as growth of out of state internet sales has increased, state sales tax income overall has decreased.  That may be changing however.&lt;br /&gt;&lt;br /&gt;A project called the Streamline Sales Tax Project (SSTP), is gathering states who are interested in collecting sales tax from online transactions based on the shipping destination.  This means a merchant in California can and should collect Washington sales tax for all purchases made from buyers in Washington.  In order to make this extra overhead more appealing to merchants, the SSTP offers a single registration point for all participating states (which currently number 22).&lt;br /&gt;&lt;br /&gt;Long term (if this catches on) this will be good news for residents in Alaska, Delaware, Montana, New Hampshire and Oregon as it would mean they wouldn't need to pay sales tax on any online purchases, regardless of where they are made.  However as it is there is still a long way to go and little incentive for merchants.  Membership is currently voluntary in member states and completely irrelevant for merchants in non-member states.  &lt;br /&gt;&lt;br /&gt;That said, online merchants should keep an eye out for this one as compliance could potentially require an overhaul of every online cart in the United States.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-2416718999362843148?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/2416718999362843148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=2416718999362843148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/2416718999362843148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/2416718999362843148'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2008/01/online-tax-landscape-changing.html' title='Online Tax Landscape Changing'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-8513360309551153443</id><published>2007-06-29T17:18:00.000-07:00</published><updated>2007-06-29T18:01:01.111-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='launch'/><category scheme='http://www.blogger.com/atom/ns#' term='sports'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='fantasy'/><category scheme='http://www.blogger.com/atom/ns#' term='live'/><title type='text'>Congratulations to FantasySportsLive.com!!</title><content type='html'>Being wrapped up with development and the demands of a growing business has made it that much  harder to keep up with our posts.  But we've just crossed the finish line with our latest project, so it seemed like a perfect opportunity to post up and let you know where we've been.&lt;br /&gt;&lt;br /&gt;So what have we been working on so furiously for the past 3 months?&lt;br /&gt;Ladies and gentleman, boys and girls, sports fans of all ages . . . please welcome &lt;a href="http:www.fantasysportslive.com"&gt;FantasySportsLive.com &lt;/a&gt;to the crossroads of sports and the internet.  As they say, they're "rewriting the rules of fantasy sports."  And they are well on their way to creating a revolution in how fantasy sports games are played.&lt;br /&gt;&lt;br /&gt;How does one go about creating a revolution in the massive arena of fantasy sports that's currently controlled by every major media outlet (Yahoo, ESPN, et. al) you can think of?  Like so many of the projects that have caused a revolution among internet users, all it takes is one good idea. Take something that millions of people are involved in and point that focus in a new direction.&lt;br /&gt;&lt;br /&gt;Let's face it.  Unless you're a statistical junkie, putting together a fantasy team for the course of a professional season can be way too much work.  Not to mention, if you don't land a couple of superstars, then you get to spend the season in the cellar.  With FSL, you get to manage a team for a day instead of the season.  You make some bad draft choices?  There's always tomorrow.  Your star player pulls a hammy?  Dump him and pick up that kid who's headed for Rookie of the Year honors.&lt;br /&gt;&lt;br /&gt;It's always an exciting time when you get help a client bring their vision to life.  This time, we got to talk about sports while we were working.&lt;/ahref="http:&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-8513360309551153443?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/8513360309551153443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=8513360309551153443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/8513360309551153443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/8513360309551153443'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2007/06/congratulations-to-fantasysportslivecom.html' title='Congratulations to FantasySportsLive.com!!'/><author><name>SamL</name><uri>http://www.blogger.com/profile/06067826739490558393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-7175408844517512708</id><published>2007-03-16T15:54:00.000-07:00</published><updated>2007-03-16T16:05:22.488-07:00</updated><title type='text'>Yurth.com</title><content type='html'>A lot of buzz is going around about video on the web.  Now that watching video on your computer is an everyday occurrence the real question is how do you get to it.  There is a ton of original content that is uploaded to YouTube everyday, but with the exception of a few videos that take off most of that video just sits around collecting virtual dust.&lt;br /&gt;&lt;br /&gt;Enter &lt;a href="http://www.yurth.com"&gt;Yurth.com&lt;/a&gt;.  Yurth is a very simple concept - it takes video uploaded to it's servers and let's people browse the video via a map.  This simple (but brilliant concept) suddenly takes video that might have otherwise fallen through the cracks  and immediately makes it relevant to the thousands of people in the area where the video was shot.  Local homegrown video suddenly has a home AND a cool way to browse it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-7175408844517512708?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/7175408844517512708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=7175408844517512708' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/7175408844517512708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/7175408844517512708'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2007/03/yurthcom.html' title='Yurth.com'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-6222346680731694884</id><published>2007-02-15T10:32:00.000-08:00</published><updated>2007-02-15T12:42:56.936-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editorials'/><title type='text'>The Web Development Cupcake</title><content type='html'>At a recent user interface conference I took &lt;a href="http://www.uie.com/events/web_app_summit/2007/tutorials/merholz_schauer/"&gt;a day-long seminar&lt;/a&gt; that focused on project planning.  Among other things, a reoccurring theme was the scarcity of resources on any development project.  Even in a situation with limitless money and people (a little imagination is required here), time is always a critical factor.  Given these limits the question arises, what should the development effort focus on?&lt;br /&gt;&lt;br /&gt;The most typical answer is to build the all the features first and then focus on the really unique stuff in later phases.  If you are creating a MySpace clone, the first thing you need to build is the user login and the ability to customize pages.  If you are building a YouTube competitor, you focus on the video player and easy sharing of video.  While this sounds sensible, it is actually a recipe for failure.&lt;br /&gt;&lt;br /&gt;The thought process with this sort of phased development follows a house building mentality, where you pour the foundation, then put up the walls, then lay down the roof, etc.  The trouble with using this metaphor is that nobody is actually living in the house while it is being built.  This makes it a bad one for web development and software development in general.  Baking (as 37signals has shown us) is a much better metaphor.&lt;br /&gt;&lt;br /&gt;Using a baking metaphor, the phased development approach that I mentioned above is like baking a cake and releasing it without any filing or icing.  Later phases may distinguish the project by adding interesting "non-core" features, but who is going to want to use an application that offers nothing unique?  Who is going to buy a cake with no icing?&lt;br /&gt;&lt;br /&gt;A better approach then, is to aim for a complete desire able application starting with the first phase.  But how to do this when as we've established resources are limited?  The answer is to identify the project cupcake.  The offering that provides enough of the cake (the core) and enough of the icing (interesting stuff) to provide an appetizing morsel.  Once the cupcake is identified it not only provides a focus for limited resources, but also serves to deliver a viable product offering faster than is otherwise possible.  That means getting user particpation, establishing brand presence and possibly generating revenue - faster.  No matter what your resources, it's easier to bake a cupcake than a wedding cake.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-6222346680731694884?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/6222346680731694884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=6222346680731694884' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/6222346680731694884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/6222346680731694884'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2007/02/web-development-cupcake.html' title='The Web Development Cupcake'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-117044918756558063</id><published>2007-02-02T12:40:00.000-08:00</published><updated>2007-05-03T17:56:09.440-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Toggling checkboxes using a master</title><content type='html'>Have you ever seen a list where you could toggle all of the checkboxes by hitting a master switch?  I sure have.  And I've had a devil of a time writing a clean script to do that when ever I needed one.  I just recently came up with a nifty little JavaScript function that does just that:&lt;br /&gt;&lt;pre&gt;function toggleCheckboxes(check)&lt;br /&gt;{&lt;br /&gt; targetForm = document.getElementById("tableBody");&lt;br /&gt; inputs = targetForm.getElementsByTagName("input");&lt;br /&gt; for( var i=0;i&amp;lt;inputs.length;i++ )&lt;br /&gt; {&lt;br /&gt;  if( inputs[i].type == "checkbox" )&lt;br /&gt;  {&lt;br /&gt;   inputs[i].checked = check;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;The code for the master checkbox would look something like this:&lt;br /&gt;&lt;pre&gt;&amp;#60;input onclick="toggleCheckboxes(this.checked)" type="checkbox" /&amp;#62;&lt;br /&gt;&lt;/pre&gt;This code means you don't have to put in special classes for each of the check boxes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-117044918756558063?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/117044918756558063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=117044918756558063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/117044918756558063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/117044918756558063'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2007/02/toggling-checkboxes-using-master.html' title='Toggling checkboxes using a master'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-117010851267392394</id><published>2007-01-29T14:08:00.000-08:00</published><updated>2007-02-15T11:44:11.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editorials'/><title type='text'>UIE Web Summit</title><content type='html'>Despite it's long awkward title (or perhaps because of it) the &lt;a href="http://www.uie.com/events/web_app_summit/2007/"&gt;User Interface Engineering Web Application Summit&lt;/a&gt; of this year packed quite a punch.  While I had originally hoped it would be a productive networking event (and it was) I also came away with a great deal of additional knowledge gathered from the many informative sessions.&lt;br /&gt;&lt;br /&gt;Some of the better speakers were &lt;a href="http://www.adaptivepath.com/aboutus/peterme.php"&gt;Peter Merholz&lt;/a&gt; of Adaptive Path and &lt;a href="http://www.lukew.com/"&gt;Luke Wroblewski&lt;/a&gt; from Yahoo(!). Peter focused primarily on planning, direction and concept as core focuses for any web application.  He preached advanced planning and provided tools that helped to make that part of any developers project.  Luke focused on form usability and web page hierarchy; critical to the success of any web application.  And while his subject matter seemed obvious, his crystalline presentation of the material and proper technique made for spectacular sessions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-117010851267392394?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/117010851267392394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=117010851267392394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/117010851267392394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/117010851267392394'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2007/01/uie-web-summit.html' title='UIE Web Summit'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-116906488253559978</id><published>2007-01-17T12:13:00.000-08:00</published><updated>2007-01-17T12:14:42.546-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editorials'/><title type='text'>Getting Thunderbird contacts into my BlackBerry Pearl</title><content type='html'>I recently purchased the much talked about BlackBerry Pearl from T-Mobile.  The Pearl is the first web enabled phone I have gotten and I must say I am really enjoying all the features.  The one thing I don't like about the BlackBerry is its lack of support with syncing to Thunderbird.  I also have to say I'm not crazy about Thunderbird's Address Book, but that's another article. Needless to say I was to happy about the idea of having to install Outlook (or Outlook Express) just to be able to sync to the Pearl, so I started playing around with the import/export contacts on the Pearl.  What I found was that I could export my contacts from Thunderbird into an ASCII format and fake a header that is compatible with the Pearl by creating an Address Book entry with the proper Pearl labels (if anyone who is interested in trying this, just ask me and I'll include a list of the field translations).&lt;br /&gt;&lt;br /&gt;There are a few downsides to this method.  First, it's sort of a pain to setup.  Although certain fields (like First Name) are common fields that are called one thing in Thunderbird (like Work Address1) are called something else on the BlackBerry (Address1).  The second major flaw is that this is only a one way transfer.  Not only would you need to translate the fields back if you wanted to send them back to Thunderbird, but the ASCII sync is only one way - you can either import them to the Pearl or create a list from the contacts you already have on there.&lt;br /&gt;&lt;br /&gt;Obviously the best way to correct this issue is for BlackBerry (and their sync software partner Intellisync) to get off their laurels and start supporting Thunderbird.  Until that happens I'll probably keep using the ASCII sync method they've included and buy a new phone at some point.  Despite how much I love my new phone, I don't love it enough to go back to being a Microsoft user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-116906488253559978?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/116906488253559978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=116906488253559978' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/116906488253559978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/116906488253559978'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2007/01/getting-thunderbird-contacts-into-my.html' title='Getting Thunderbird contacts into my BlackBerry Pearl'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-116680976266465082</id><published>2006-12-22T09:48:00.000-08:00</published><updated>2006-12-22T09:49:22.676-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editorials'/><title type='text'>Portland Pretension</title><content type='html'>Having lived in Southern California all my life, I've seen my share of pretentious people.  In Los Angeles, people flaunt their wealth and their casual non-chalance about celebrity.  In San Diego, they display their wealth in different ways.  It's in the way people where shorts and Hawaiian shirts while driving convertible cars all year round.  They flaunt the weather.  &lt;br /&gt;&lt;br /&gt;In Portland you still find pretension, but if you're not careful you might miss it.  Urbanites dress more freely, sporting button down oxford shirts or a T-shirt paired with a goatee and numerous piercings.  To look at them mingling, you might think that in Portland people don't try to one-up one another in displays of wealth.  It's true that dress code is more lax here and luxury cars and convertibles are not as common, but there's something underneath the surface.&lt;br /&gt;&lt;br /&gt;It crystalized for me when I entered a Whole Foods market in downtown Portland.  Portlanders display their wealth in their urban lifestyle and pricey organic foods.  The tag line of Whole Foods sums it up nicely: "Whole Foods. Whole People.  Whole Planet" (printed on recylced, brown paper and trademarked).  It's as if the people of Portland think that by buying expensive, organic food, they are making the entire world a better place.  Sure, their lifestyle allows small family farms to exist, but only in the sheltered harbor of the Willamette Valley.  And even then only the farmers who have "gone organic" and paid for expensive logos.&lt;br /&gt;&lt;br /&gt;It's all there in that Whole Foods.  The tatoos, the ties, the designer jeans, the distain for the suburbs...  Like it or not, the people of Portland have voted with their pocket books.  It's hip to care about the world, but only when it's packaged the right way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-116680976266465082?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/116680976266465082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=116680976266465082' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/116680976266465082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/116680976266465082'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2006/12/portland-pretension.html' title='Portland Pretension'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-116112446236153119</id><published>2006-10-17T15:29:00.000-07:00</published><updated>2006-10-17T15:56:17.563-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Simple JavaScript email match</title><content type='html'>The following JavaScript will pull out emails from a string and store them in array:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var emailArray = theString.match(/([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4})/gi);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here's a sample with a string and an alert to echo out the results:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;var theString = "me@domain.com, you@domain.com";&lt;br /&gt;var results = "";&lt;br /&gt;var emailArray = theString.match(/([a-z0-9._-]+@[a-z0-9._-]+.[a-z]+)/gi) ;&lt;br /&gt;for( var i=0;i&amp;lt;emailArray.length;i++ )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;results += emailArray[i];&lt;br /&gt;&amp;nbsp;alert(results);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Even though we are looping through "theString", we could just as easily loop through a posted field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-116112446236153119?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/116112446236153119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=116112446236153119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/116112446236153119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/116112446236153119'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2006/10/simple-javascript-email-match.html' title='Simple JavaScript email match'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-115714226750482477</id><published>2006-09-01T13:22:00.000-07:00</published><updated>2006-09-01T13:24:27.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>Flash str_replace function</title><content type='html'>&lt;p&gt;This Flash function duplicates the behavior of the php &lt;a href="http://us3.php.net/str_replace"&gt;str_replace&lt;/a&gt; function.&lt;/p&gt;&lt;code&gt;function str_replace( search, replace, string )&lt;br /&gt;{&lt;br /&gt; var array = string.split(search);&lt;br /&gt; return array.join(replace);&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-115714226750482477?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/115714226750482477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=115714226750482477' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115714226750482477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115714226750482477'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2006/09/flash-strreplace-function.html' title='Flash str_replace function'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-115713739925048865</id><published>2006-09-01T12:03:00.000-07:00</published><updated>2006-09-01T12:03:19.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Code'/><title type='text'>PHP File upload on bug Safari</title><content type='html'>&lt;p&gt;Anybody who's tried to troubleshoot a PHP upload form on a Mac, may have run into this bug: in Safari version 1.0.3  (and possibly earlier) the $_FILES variable is not populated by the browser, causing any type of file upload to fail.  This bug is specific to the Safari browser &lt;strong&gt;and&lt;/strong&gt; PHP; upload scripts written in PERL (and possibly ASP)  &lt;strong&gt;do not&lt;/strong&gt; have this issue.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The resulting output for a file upload when running into this bug is a totally empty $_FILES array.  One of the fixes we tried was referencing the alternative $HTTP_POST_FILES reference instead of $_FILES.  Unfortunately that one was empty too.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There is no known work around that we've been able to find, but in theory creating an upload form in Flash should sidestep this problem as the Flash plugin would be doing the upload.  Later version of Safari no longer have this issue, so this is only an issue when supporting older versions of the browser.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-115713739925048865?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/115713739925048865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=115713739925048865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115713739925048865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115713739925048865'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2006/09/php-file-upload-on-bug-safari.html' title='PHP File upload on bug Safari'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-115622562097438098</id><published>2006-08-21T22:38:00.000-07:00</published><updated>2006-08-21T22:47:00.976-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editorials'/><title type='text'>Good Design</title><content type='html'>As a designer, I often wonder what makes good design.  Bad design is easy to spot, but good design especially when it is your own work can be tricky.  In art, they say that beauty is in the eye of the beholder, but design is a different sort of beast.  You must present things (data and images) in a way that is not only beautiful, but in a way that expands on the message already being presented.  It's a tricky business, but apparently there are gurus who can sort out the good from the bad.&lt;br /&gt;&lt;br /&gt;I'm curious to know &lt;a href="http://www.npr.org/templates/story/story.php?storyId=5673332"&gt;what Edward Tufte knows about design&lt;/a&gt;.  There seems to be a general consensus that he knows what he's talking about.  As for me, I'm always up for learning something new.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-115622562097438098?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/115622562097438098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=115622562097438098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115622562097438098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115622562097438098'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2006/08/good-design.html' title='Good Design'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-22560494.post-115622462915778534</id><published>2006-08-21T22:24:00.000-07:00</published><updated>2006-08-21T22:35:37.373-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Editorials'/><title type='text'>My New House</title><content type='html'>A just recently purchased a new house in Hillsboro, Oregon.  I was initially looking in Beaverton, but my wife and I came accross this house and we couldn't resist.  There was already an offer on the house, but we loved the neighborhood and the way the place looked from outside, so when we found out the first offer had fallen through, I flew up the next day just to see it.  The interior was also great, so we finalized an offer the next day.&lt;br /&gt;&lt;br /&gt;Since moving up here from San Diego, we've been blessed with obsolutely gorgeous weather.  I love my house, and I the only thing I miss about San Diego are our friends.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/22560494-115622462915778534?l=metaltoad.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://metaltoad.blogspot.com/feeds/115622462915778534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=22560494&amp;postID=115622462915778534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115622462915778534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/22560494/posts/default/115622462915778534'/><link rel='alternate' type='text/html' href='http://metaltoad.blogspot.com/2006/08/my-new-house.html' title='My New House'/><author><name>metaltoad</name><uri>http://www.blogger.com/profile/01903628310573373295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_714D8y3MzLc/TJeoHORRk7I/AAAAAAAAAB4/YLuNxtI550Q/S220/joaquin_100.jpg'/></author><thr:total>0</thr:total></entry></feed>
