<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Jack of All Trades Web Development</title><description>Marc Grabanski's web development adventures.</description><link>http://marcgrabanski.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/allTrades" type="application/rss+xml" /><feedburner:emailServiceId>allTrades</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>Cheap User Testing with Amazon Turk</title><link>http://feedproxy.google.com/~r/allTrades/~3/cW840_tJk7c/user-testing-with-amazon-turk</link><category><![CDATA[Testing]]></category><description>&lt;p&gt;Category: &lt;a href="/category/usability-testing" base="1"&gt;Usability &amp;amp; Testing&lt;/a&gt; Tags: &lt;a href="/tag/testing"&gt;Testing&lt;/a&gt;&lt;/p&gt;&lt;p&gt;After writing clean, cross-browser code and testing it in all browsers.. what if issues show up on others' computers and not yours? Recently this happened to me and I was baffled.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img height="195" width="565" alt="" src="http://marcgrabanski.com/img/broken-wall.jpg" /&gt;&lt;/p&gt;
&lt;h3&gt;Cross-Browser Testing&lt;/h3&gt;
&lt;p&gt;Upon testing my code in IE6+ through a virtual machine, Firefox, Safari and Chrome.. it all worked. Yet when I handed off the code to the client, they replied, &amp;quot;the submit button isn't working&amp;quot;. So I went back to doing further testing.&lt;/p&gt;
&lt;h3&gt;Friend Testing&lt;/h3&gt;
&lt;p&gt;Friends tested the website and &lt;em&gt;it worked for them&lt;/em&gt;. Yet, the client still could not submit the form on their computer. I was now infuriated at this mystery.&lt;/p&gt;
&lt;p&gt;After some changes, I revamping my code and making sure every &amp;quot;t&amp;quot; is crossed and &amp;quot;i&amp;quot; dotted. The markup was now perfect and &lt;a href="http://validator.w3.org/"&gt;validated with w3c&lt;/a&gt;. Still, after sending it through to the client it still didn't work for them! &amp;quot;Wow?!&amp;quot; I thought, &amp;quot;what do I do now?&amp;quot;&lt;/p&gt;
&lt;h3&gt;The Problem Still Exists. &amp;quot;What Now?&amp;quot;&lt;/h3&gt;
&lt;p&gt;At this point I was mad, not at the client but at the fact that I had no idea what was causing the issue. I then said these words to the client:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If I could have 100 PC computers from all around the world to test your website to find the issue, I would pay for it. I am riled up about this and want to fix the issue at all costs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;The Amazon Turk, &amp;quot;Testbed&amp;quot;&lt;/h3&gt;
&lt;p&gt;To my complete amazement, I &lt;em&gt;actually found out a way to have 100 PC computers from all around the world testing my website&lt;/em&gt;! &lt;strong&gt;Welcome to the world of &lt;/strong&gt;&lt;a href="https://www.mturk.com/mturk/welcome"&gt;&lt;strong&gt;Amazon Turk&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt; For a total of $5, I had just about 80 users go through my tests and give me feedback.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img height="106" width="515" alt="" src="http://marcgrabanski.com/img/world-map-orange.jpg" /&gt;&lt;/p&gt;
&lt;h3&gt;My Process of Testing Through Amazon Turk&lt;/h3&gt;
&lt;p&gt;I came up with a process that made it easy to report back to the client with findings and numbers&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img height="186" width="537" alt="" src="http://marcgrabanski.com/img/recycle-trash.jpg" /&gt;&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Setup a test to gather feedback on using the website. Be sure to isolate the code so that you only have the code on it that you think might be causing an issue. Save each file used in the test for future reference.&lt;/li&gt;
    &lt;li&gt;Register and pre-pay around $5 on Amazon Turk.&lt;/li&gt;
    &lt;li&gt;Created a HIT (Human Intelligence Tasks) on Amazon Turk that details the test. Use the default template and make sure you have a textarea on the HIT for them to report their findings.&lt;/li&gt;
    &lt;li&gt;After getting results back, summarize the findings into a paragraph that pinpoint reported issues.&lt;/li&gt;
    &lt;li&gt;Based on the summary, create an action item in order to develop a solution.&lt;/li&gt;
    &lt;li&gt;Based on the action item, create a new test with the solution.&lt;/li&gt;
    &lt;li&gt;Post the new HIT / test on Amazon Turk until your desired results are achieved.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Failing at First&lt;/h3&gt;
&lt;p&gt;My first HIT test didn't go well, 75% of the users failed. But, I got great feedback and found a solution based on the feedback.&lt;/p&gt;
&lt;h3&gt;Resolving Infrequent Problems&lt;/h3&gt;
&lt;p&gt;In test rounds 2 and 3, I found infrequent problems based on specific cases with users. I made my error messages very specific so that users could copy and paste the results into the Amazon Turk results so that I could easily resolve the issue. These issues normally wouldn't surface in the testing process unless the website was launched for a while and someone told us about it. Even then, it would have shown up so infrequently that I'm not sure we would have bothered.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Make your error messages specific, so users can report exactly what happened.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;From 25% Completion, Up to 96% Completion!&lt;/h3&gt;
&lt;p style="text-align: center;"&gt;&lt;img height="204" width="527" alt="" src="http://marcgrabanski.com/img/wall-brick.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;After 4 rounds of tests, the completion results went up to 96% completion rate! During one of the tests, the user said the page didn't show up. So the website must have temporarily been down and I'm not worried about that one failed test out of so many succesful test.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=cW840_tJk7c:R9yjLpHqozY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=cW840_tJk7c:R9yjLpHqozY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=cW840_tJk7c:R9yjLpHqozY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?i=cW840_tJk7c:R9yjLpHqozY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><author>m@marcgrabanski.com (Marc Grabanski)</author><pubDate>Tue, 23 Jun 2009 10:08:31 -0700</pubDate><guid isPermaLink="false">http://marcgrabanski.com/article/user-testing-with-amazon-turk</guid><feedburner:origLink>http://marcgrabanski.com/article/user-testing-with-amazon-turk</feedburner:origLink></item><item><title>Emailing through Google Apps / Gmail on CakePHP  </title><link>http://feedproxy.google.com/~r/allTrades/~3/pgEA_YnMLv4/cakephp-email-google-apps-gmail</link><category><![CDATA[Email]]></category><category><![CDATA[PHP]]></category><category><![CDATA[CakePHP]]></category><description>&lt;p&gt;Category: &lt;a href="/category/php-cakephp" base="1"&gt;PHP &amp;amp; CakePHP&lt;/a&gt; Tags: &lt;a href="/tag/email"&gt;Email&lt;/a&gt;, &lt;a href="/tag/php"&gt;PHP&lt;/a&gt;, &lt;a href="/tag/cakephp"&gt;CakePHP&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img width="176" height="177" src="http://marcgrabanski.com/img/logo-cakephp.gif" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;When launching new websites and web applications, it is difficult to get on trusted email lists of Hotmail, Yahoo and Etc. Aside from having &lt;a href="http://marcgrabanski.com/article/hotmail-email-filtering-and-spf"&gt;proper SPF records&lt;/a&gt;, a great way to avoid this sysadmin problem is to use Gmail / Google Apps to offload your domain's email to their servers. By doing this, your domain gets an instant trust factor with receiving mail servers that a new server simply cannot do in a short period of time.&lt;/p&gt;
&lt;p&gt;To email with Google Apps / Gmail with CakePHP, I've had recent success using the &lt;a href="http://bakery.cakephp.org/articles/view/updated-swiftmailer-4-xx-component-with-attachments-and-plugins"&gt;SwiftMailer CakePHP component&lt;/a&gt;. It is easy to use and leverages the &lt;a href="http://swiftmailer.org/"&gt;PHP SwiftMailer library&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Configuring SwiftMailer CakePHP Component with Gmail&lt;/h3&gt;
&lt;p&gt;This is pulled off the component article's example, but I posted it here as well for your reference.&lt;/p&gt;
&lt;pre class="php"&gt;
$this-&amp;gt;SwiftMailer-&amp;gt;smtpType = 'tls';
$this-&amp;gt;SwiftMailer-&amp;gt;smtpHost = 'smtp.gmail.com';
$this-&amp;gt;SwiftMailer-&amp;gt;smtpPort = 465;
$this-&amp;gt;SwiftMailer-&amp;gt;smtpUsername = 'name@domain.com';
$this-&amp;gt;SwiftMailer-&amp;gt;smtpPassword = 'your_password';

$this-&amp;gt;SwiftMailer-&amp;gt;sendAs = 'both';
$this-&amp;gt;SwiftMailer-&amp;gt;from = 'name@domain.com';
$this-&amp;gt;SwiftMailer-&amp;gt;fromName = 'Full Name';
$this-&amp;gt;SwiftMailer-&amp;gt;to = 'to_name@domain.com';
$this-&amp;gt;SwiftMailer-&amp;gt;template = 'your_action';
$this-&amp;gt;SwiftMailer-&amp;gt;subject = 'your_subject'&lt;/pre&gt;
&lt;p&gt;I added two custom attributes here, template and subject because I find I like to set that as a variable instead of putting it in the send function (in the next step).&lt;/p&gt;
&lt;h3&gt;Emailing with SwiftMailer CakePHP Component&lt;/h3&gt;
&lt;p&gt;The send function has 3 parameters, but we are only concerned with the first two since we've already configured our settings in the step above. The first is the template found in /views/elements/email, the second is the subject.&lt;/p&gt;
&lt;pre class="php"&gt;
try {
    if(!$this-&amp;gt;SwiftMailer-&amp;gt;send($this-&amp;gt;SwiftMailer-&amp;gt;template, $this-&amp;gt;SwiftMailer-&amp;gt;subject)){
        $this-&amp;gt;log(&amp;quot;Error sending email&amp;quot;);
    }
} catch(Exception $e) {
	$this-&amp;gt;log(&amp;quot;Failed to send email: &amp;quot;.$e-&amp;gt;getMessage());
}&lt;/pre&gt;
&lt;p&gt;You will also notice here that we are wrapping the send function in a try/catch block. This allows us to output whatever caused the function to fail through an exception (and fail silently), rather having the component either kill the client to output the message, or simply return false with no explanation like a lot of things in CakePHP-land. Try/catch blocks work great in non-mission critical things like sending an email, conturary to the core library which should simply fail and exit the application.&lt;/p&gt;
&lt;p&gt;I had one error on my local computer with TLS not being installed into PHP. So I added the following line to my PHP compile to add TLS support:&lt;/p&gt;
&lt;pre class="bash"&gt;
--with-openssl&lt;/pre&gt;
&lt;p&gt;My entire PHP compile looks like this...&lt;/p&gt;
&lt;pre class="bash"&gt;
sudo make clean &amp;amp;&amp;amp; sudo ./configure --prefix=/usr/local/php5  --with-pear --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-mysql=/usr/local/mysql --without-iconv --with-apxs2=/opt/local/apache2/bin/apxs --with-zlib-dir=../zlib-1.2.3/ --with-jpeg-dir=../jpeg-6b --with-openssl --with-gd --with-freetype2=/Developer/SDKs/MacOSX10.5.sdk/usr/X11/include/freetype2/freetype &amp;amp;&amp;amp; sudo make &amp;amp;&amp;amp; sudo make install&lt;/pre&gt;
&lt;p&gt;As an alternative to SwiftMailer, I was pointed to joshua's solution on the mailing list to use the built-in &lt;a href="http://groups.google.com/group/cake-php/browse_thread/thread/8573140b2e72d1aa/839b6f576077ed18?lnk=raot"&gt;CakePHP email component with Gmail&lt;/a&gt;. Apparently he got it to work, but I couldn't for whatever reason.&lt;/p&gt;
&lt;p&gt;Enjoy having mail go through to your users without fail!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=pgEA_YnMLv4:ymajPikQmmg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=pgEA_YnMLv4:ymajPikQmmg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=pgEA_YnMLv4:ymajPikQmmg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?i=pgEA_YnMLv4:ymajPikQmmg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><author>m@marcgrabanski.com (Marc Grabanski)</author><pubDate>Sun, 07 Jun 2009 18:20:21 -0700</pubDate><guid isPermaLink="false">http://marcgrabanski.com/article/cakephp-email-google-apps-gmail</guid><feedburner:origLink>http://marcgrabanski.com/article/cakephp-email-google-apps-gmail</feedburner:origLink></item><item><title>jQuery Tools vs jQuery UI</title><link>http://feedproxy.google.com/~r/allTrades/~3/TnPtdBjcfqQ/jquery-tools-vs-jquery-ui</link><category><![CDATA[jQuery]]></category><category><![CDATA[jQuery UI]]></category><description>&lt;p&gt;Category: &lt;a href="/category/javascript-jquery" base="1"&gt;JavaScript &amp;amp; jQuery&lt;/a&gt; Tags: &lt;a href="/tag/jquery"&gt;jQuery&lt;/a&gt;, &lt;a href="/tag/jquery-ui"&gt;jQuery UI&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img width="459" height="170" alt="" src="http://marcgrabanski.com/img/jquery-tools.jpg" /&gt; VS &lt;img width="260" height="73" alt="" src="http://marcgrabanski.com/img/logo-jqueryui.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;A new library has come out called, &amp;quot;&lt;a href="http://flowplayer.org/tools/"&gt;jQuery Tools&lt;/a&gt;&amp;quot; that is packed with some visually appealing plugins built on top of jQuery. Here is their opening line to grab your interest:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let's face it: do you really need drag-and-drop, resizables, selectables or sortable tables in your web applications? Websites are not desktop applications. They are different.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is obviously a jab at&lt;a href="http://jqueryui.com/"&gt; jQuery UI&lt;/a&gt;, but before we dismiss what they have to say let's read on...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What you really need are tabs, tooltips, accordions, overlays, smooth navigation, great visual effects and all those &amp;quot;web 2.0&amp;quot; goodies that you have seen on your favourite websites.&lt;/p&gt;
&lt;p&gt;This library contains six of the most useful JavaScript tools available for today's website. The beauty of this library is that all of these tools can be used together, extended, configured and styled. In the end, you can have hundreds of different widgets and new personal ways of using the library.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;While there is some truth to the fact that you don't need each component that jQuery UI provides in most websites. You still have to keep in mind that jQuery UI's focus is to bring a set of components to the table that you can pick and chose from.&lt;/p&gt;
&lt;p&gt;I agree with what the jQuery Tools author in saying that everybody needs overlays and visual effects that this library provides. I just don't understand the arrogance of attacking jQuery UI right off the bat, instead of augmenting the library and working together with them.&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: the author says he isn't attacking the jQuery UI library (in comments). But I think he should still be looking for ways to add the good parts of his plugins onto jQuery UI.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From an outside perspective, this library shines and has great potential. However as I dig deeper into the &lt;a href="http://flowplayer.org/tools/using.html#api"&gt;API&lt;/a&gt; and intensions it just looks bad.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: Tero from jQuery Tools has updated the API to fix this issue I'm pointing out here. You can see the result of the update in the &lt;a href="http://flowplayer.org/tools/release-notes.html"&gt;jQuery Tools release notes&lt;/a&gt;. This type of thing should be sorted out behind the scenes from now on, but it was a good learning experience for me personally about where the public / private line should be.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Tooltip&lt;/h3&gt;
&lt;p&gt;Demo (hover over box):&lt;/p&gt;
&lt;div id="pride"&gt;Definition of Pride&lt;/div&gt;
&lt;div id="tooltip" style="display: none;"&gt;unreasonable and inordinate self-esteem (personified as one of the deadly sins)&lt;/div&gt;
&lt;script src="http://cdn.jquerytools.org/1.0.0/jquery.tools.min.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt;
$('#tooltip').tooltip();
&lt;/script&gt;
&lt;p&gt;&lt;style type="text/css"&gt;
/* tooltip styling. uses a background image (a black box with an arrow) */
#pride { 
	width: 100px; text-transform:uppercase; font-size:16px;
	height: 50px;
	background:#333; padding:20px; color:#fff;
}
div.tooltip {
	background:#000;
	font-size:14px;
	height:153px;
	padding:30px;
	width:310px;
	font-size:14px;
	display:none;
	color:#fff;
}

/* tooltip title element (h3) */
div.tooltip h3 {
	margin:0;
	font-size:18px;
	color:#fff;
}
&lt;/style&gt;&lt;/p&gt;
&lt;h4&gt;Tooltip Implimentation&lt;/h4&gt;
&lt;pre class="html"&gt;
&amp;lt;!-- trigger element --&amp;gt; 
&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;trigger&amp;quot;&amp;gt; 
    Move the mouse over this box to see the tooltip in action. 
&amp;lt;/a&amp;gt; 
 
&amp;lt;!-- tooltip element --&amp;gt; 
&amp;lt;div class=&amp;quot;tooltip&amp;quot;&amp;gt; 
    &amp;lt;h3&amp;gt;The Tooltip&amp;lt;/h3&amp;gt; 
 
    &amp;lt;p&amp;gt; 
        &amp;lt;strong&amp;gt;A great tool for designing better layouts and more intuitive user-interfaces.&amp;lt;/strong&amp;gt; 
    &amp;lt;/p&amp;gt; 
 
    &amp;lt;p&amp;gt; 
        Tooltips can contain any HTML such as links, images, forms and tables. 
        This tooltip is vertically centered on the top edge of the trigger element. 
    &amp;lt;/p&amp;gt; 
&amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;pre class="javascript"&gt;
$('#tooltip').tooltip();
&lt;/pre&gt;
&lt;p&gt;It doesn't make sense within the context of jQuery.&lt;/p&gt;
&lt;p&gt;So apparently, you have to grab the tooltip div, then turn it into a tooltip? Um... what? How do I get multiple tooltips on the page?&lt;/p&gt;
&lt;p&gt;Quick, here is the philosophy behind jQuery:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
    &lt;li&gt;Find element(s) on the page&lt;/li&gt;
    &lt;li&gt;Do something to them&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;Is the tooltip on the page? nope, not yet. Ok, failed #1. Where do we go from here? Typically you would grab elements on the page and then attach the tooltips to them. This is just common jQuery sense.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: After reading this article, the author of jQuery Tools updated his tooltip API.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As I dive into more examples of the tooltip, it continues to make no sense. The form example have no way to target inputs that you desire with custom classes or ids. You have to modify the markup before page load to change tooltips. After you load up the tooltips, you are stuck and cannot ditch tooltips, or make new ones from within the JavaScript.&lt;/p&gt;
&lt;p&gt;Please, just use the &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/"&gt;jQuery Tooltip&lt;/a&gt; plugin or &lt;a href="http://plugins.learningjquery.com/cluetip/"&gt;ClueTip&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Non-jQuery API&lt;/h3&gt;
&lt;p&gt;So now look at the &lt;a href="http://flowplayer.org/tools/using.html#api"&gt;API&lt;/a&gt; where it talks about returning the API instead of a jQuery object by passing &lt;code&gt;api: true&lt;/code&gt; .... WHAT?! We are now forced to exit out of jQuery into a seperate jQuery Tools API by passing a variable?&lt;/p&gt;
&lt;pre class="javascript"&gt;
var api = $(&amp;quot;#myDiv&amp;quot;).scrollable({size: 3, api: true});
api.onClick = function(){ ...
&lt;/pre&gt;
&lt;p&gt;Contrast this to using jQuery UI, you can stay within' jQuery and modify all settings.&lt;/p&gt;
&lt;pre class="javascript"&gt;
var $myDiv = $(&amp;quot;#myDiv&amp;quot;).accordion({ 'header': 'h3' });&lt;/pre&gt;
&lt;p&gt;Then if later we want to change an option we can use that same div jQuery object.&lt;/p&gt;
&lt;pre class="javascript"&gt;
$myDiv.accordion('option', 'changestart', function(){ ... });&lt;/pre&gt;
&lt;p&gt;With jQuery UI, all the plugins work with jQuery and it's philosophy. Working with John Resig's supervision and incite. Working together. Returning a seperate API has some potential, but not the way it is implimented here.&lt;/p&gt;
&lt;h3&gt;jQuery Tools flying solo&lt;/h3&gt;
&lt;p&gt;All this means (from what I've seen) is that the author did not take the time to learn the &lt;em&gt;why&lt;/em&gt; behind jQuery and decided to go his own route, then flame jQuery UI and give you some shiny effects. The effects have potential, but the author needs to open up the code and start collaborating instead of going it solo.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: discussion has been opened up between jQuery UI and jQuery Tools teams.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Keep it real, y'all&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=TnPtdBjcfqQ:Ek0ess6spHk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=TnPtdBjcfqQ:Ek0ess6spHk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=TnPtdBjcfqQ:Ek0ess6spHk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?i=TnPtdBjcfqQ:Ek0ess6spHk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><author>m@marcgrabanski.com (Marc Grabanski)</author><pubDate>Fri, 05 Jun 2009 00:09:13 -0700</pubDate><guid isPermaLink="false">http://marcgrabanski.com/article/jquery-tools-vs-jquery-ui</guid><feedburner:origLink>http://marcgrabanski.com/article/jquery-tools-vs-jquery-ui</feedburner:origLink></item><item><title>First Look at Google Maps API v3</title><link>http://feedproxy.google.com/~r/allTrades/~3/onVxB276ZbA/google-maps-api-3</link><category><![CDATA[Google Maps]]></category><category><![CDATA[JavaScript]]></category><description>&lt;p&gt;Category: &lt;a href="/category/javascript-jquery" base="1"&gt;JavaScript &amp;amp; jQuery&lt;/a&gt; Tags: &lt;a href="/tag/google-maps"&gt;Google Maps&lt;/a&gt;, &lt;a href="/tag/javascript"&gt;JavaScript&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img width="150" height="55" alt="" src="http://marcgrabanski.com/img/logo-googlemaps.png" /&gt;&lt;/p&gt;
&lt;p&gt;Google &lt;a href="http://googlegeodevelopers.blogspot.com/2009/05/announcing-google-maps-api-v3.html"&gt;announced version 3&lt;/a&gt; of the google maps API.&lt;/p&gt;
&lt;p&gt;Some things I noticed right away:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;no API key required! before you had to sign up for an API key, but now you can shed your API key woes (I know I had them) and not have to sign up for one again.&lt;/li&gt;
    &lt;li&gt;mobile browser support (iphone and android)&lt;br /&gt;
    &lt;img width="309" height="271" alt="" src="http://marcgrabanski.com/img/android-iphone-google-maps-v3.jpg" /&gt;&lt;/li&gt;
    &lt;li&gt;You now have to specifiy the sensor variable in your include of google maps&lt;br /&gt;
    &lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://maps.google.com/maps/api/js?&lt;strong&gt;sensor=true&lt;/strong&gt;&amp;quot;&amp;gt;&lt;/code&gt;&lt;br /&gt;
    the sensor is for detecting user's location with mobile sensors like GPS&lt;/li&gt;
    &lt;li&gt;No more polluting the global namespace with tons of variables. Google is moving over to their google namespace. so instead of &lt;code&gt;new GMap2&lt;/code&gt; you do &lt;code&gt;new google.maps.map&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;&lt;code&gt;New &lt;a href="http://code.google.com/apis/maps/documentation/v3/reference.html#Mouse%20event"&gt;mouse event&lt;/a&gt; object.&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;Default UI so that as Google maps updates their UI, you get to enjoy the new interface without updating code.&lt;/li&gt;
    &lt;li&gt;it is like 3AM now so that is enough changes to see before I go to bed. =P&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The only thing I couldn't figure out is where is the directions object? A lot of my maps applications use driving directions, so I'll be holding off on migrating over until I figure that out with the new API.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=onVxB276ZbA:UZBOSwOBDJs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=onVxB276ZbA:UZBOSwOBDJs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=onVxB276ZbA:UZBOSwOBDJs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?i=onVxB276ZbA:UZBOSwOBDJs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><author>m@marcgrabanski.com (Marc Grabanski)</author><pubDate>Thu, 28 May 2009 01:06:58 -0700</pubDate><guid isPermaLink="false">http://marcgrabanski.com/article/google-maps-api-3</guid><feedburner:origLink>http://marcgrabanski.com/article/google-maps-api-3</feedburner:origLink></item><item><title>Twitter Invented a New Type of Phone</title><link>http://feedproxy.google.com/~r/allTrades/~3/WZjuC9yjLBA/twitter-invention-of-new-telephone</link><category><![CDATA[Twitter]]></category><category><![CDATA[Communication]]></category><description>&lt;p&gt;Category: &lt;a href="/category/reading-communication" base="1"&gt;Communication &amp;amp; Reading&lt;/a&gt; Tags: &lt;a href="/tag/twitter"&gt;Twitter&lt;/a&gt;, &lt;a href="/tag/communication"&gt;Communication&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img width="566" height="277" src="http://marcgrabanski.com/img/twitter-invention.png" alt="Invention of Twitter" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;I'm shifting from RSS to the live-web [Twitter]&amp;quot; - &lt;a href="http://minnov8.com/2009/05/09/m8-gang-podcast-episode-36/"&gt;Minnov8 podcast: episode 36&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Another person on the podcast even quoted:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;The internet seems to be shifting to the live-web instead of blogging&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This comment fired me up a bit to tell you that &lt;strong&gt;Twitter is simply a new form of communication. New methods of communication encourage the others, not destroy them.&lt;/strong&gt; Finding out about Twitter is like when people found out about the telephone. Telephony is a method of communication that bridges the gap between actually physically having to be in the same location. Overall people are able to meet up by talking on the phone first, expanding their communication. In this same way, Twitter bridges another gap of instantaneous communication between blogging and emailing.&lt;/p&gt;
&lt;h3&gt;Blogging and (e)Books are Here to Stay&lt;/h3&gt;
&lt;p&gt;Other types of communication are not going away. Blogging, books and e-books, major publications, etc are all forms of communication that will more than likely actually increase with the advent of micro-blogging.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Major publications will always exist because we, as humans need an &amp;quot;authority&amp;quot; to trust in each topic. Someone who really knows their stuff in the midst of the sea.&lt;/li&gt;
    &lt;li&gt;Personal blogging will continue because we need a place to gather our thoughts into a (semi)thought-out format that is publicly consumable.&lt;/li&gt;
    &lt;li&gt;Books will stay because we need deep, thorough and comprehensive content covering various topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Twitter's Invention, Micro-Blogging&lt;/h3&gt;
&lt;p&gt;In late 1800's, &amp;quot;What is the Telephone?&amp;quot; was the question. After the invention of the telephone, more communication actually took place. As the internet continues to grow, we are learning new forms of communication with each other and asking similar questions, &amp;quot;What is blogging?&amp;quot; &amp;quot;What is Twitter?&amp;quot;&lt;/p&gt;
&lt;p&gt;Instead of what is twitter, the real question should be,&amp;quot;What is micro-blogging&amp;quot;. Twitter was the one to captivate the majority of people using micro-blogging, so this becomes the saying, &amp;quot;Kleenex&amp;quot; instead of saying what it is, facial tissue. Twitter's underlying principle is actually &lt;a href="http://en.wikipedia.org/wiki/Micro-blogging"&gt;micro-blogging&lt;/a&gt;. Micro-blogging is obviously a short version of blogging limited to a set amount of characters (140 because of SMS capabilities).&lt;/p&gt;
&lt;h3&gt;Hyping the New Telephone&lt;/h3&gt;
&lt;p&gt;The current hype of Twitter is a result of people finding out about this new form of communication. It encourages them to get involved with a low barrier to entry. This is exactly the same as when the hype of blogging was going on. The only difference between this and the hype of blogging is that blogging was not tied to a single service leader -- there were many (Blogspot, Blogger, Typepaself-hosted, etc). With micro-blogging people have a single source to direct their attention to, hence the major hype on Twitter with the only occasional mention of &lt;strong&gt;the real invention, micro-blogging. &lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=WZjuC9yjLBA:dBWhld5rJo8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=WZjuC9yjLBA:dBWhld5rJo8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/allTrades?a=WZjuC9yjLBA:dBWhld5rJo8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/allTrades?i=WZjuC9yjLBA:dBWhld5rJo8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><author>m@marcgrabanski.com (Marc Grabanski)</author><pubDate>Sun, 10 May 2009 01:31:27 -0700</pubDate><guid isPermaLink="false">http://marcgrabanski.com/article/twitter-invention-of-new-telephone</guid><feedburner:origLink>http://marcgrabanski.com/article/twitter-invention-of-new-telephone</feedburner:origLink></item></channel></rss>
