<?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-4897352451201344470</id><updated>2011-08-22T05:48:05.055-07:00</updated><category term='PHP'/><category term='ui'/><category term='visualization'/><category term='Firebug'/><category term='javascript'/><category term='iframe'/><category term='AJAX'/><category term='can i haz?'/><category term='SVG'/><category term='Blender3D'/><category term='Terminal'/><category term='ubuntu'/><category term='processing.js'/><category term='Blogger'/><category term='opera'/><category term='google'/><title type='text'>Hyper-Metrix </title><subtitle type='html'>BLOGZ ON HAX</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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><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-4897352451201344470.post-5306633975045570676</id><published>2009-09-30T08:26:00.000-07:00</published><updated>2009-09-30T08:28:08.928-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><title type='text'>Diff List with Files Names Only</title><content type='html'>diff -r -q directory1/ directory2/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-5306633975045570676?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/5306633975045570676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/diff-list-with-files-names-only.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5306633975045570676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5306633975045570676'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/diff-list-with-files-names-only.html' title='Diff List with Files Names Only'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-5729363612367684305</id><published>2009-09-30T01:25:00.001-07:00</published><updated>2009-09-30T01:25:44.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><title type='text'>List Files by Time</title><content type='html'>ls -lt -c -R&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-5729363612367684305?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/5729363612367684305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/list-files-by-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5729363612367684305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5729363612367684305'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/list-files-by-time.html' title='List Files by Time'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-7096717709933273877</id><published>2009-09-30T00:33:00.000-07:00</published><updated>2009-09-30T00:37:18.756-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><title type='text'>Compress / Extract Directories to Tar.bz2</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Compress&lt;/span&gt;&lt;br /&gt;tar -jcvf filename.tar.bz2  directory/ -R&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Extract&lt;/span&gt;&lt;br /&gt;tar jxvf filename.tar.bz2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-7096717709933273877?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/7096717709933273877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/compressing-directories-to-tarbz2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/7096717709933273877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/7096717709933273877'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/compressing-directories-to-tarbz2.html' title='Compress / Extract Directories to Tar.bz2'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-5723465597066142716</id><published>2009-09-30T00:31:00.000-07:00</published><updated>2009-09-30T00:32:49.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><title type='text'>Secure Copy Files with SSH</title><content type='html'>scp -r /pathtofolder/ name@host:/targethetfolder/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-5723465597066142716?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/5723465597066142716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/secure-copy-files-with-ssh.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5723465597066142716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5723465597066142716'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/secure-copy-files-with-ssh.html' title='Secure Copy Files with SSH'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-2273808036668813523</id><published>2009-09-16T13:53:00.001-07:00</published><updated>2009-09-16T14:11:35.530-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>OnMouseMove Timer Granularity</title><content type='html'>A function to measure the average delay between one mouse move capture event in the window. If you move your mouse really, really fast, you'll discover the limits at which you can capture mouse events in your browser (OS + hardware should be factored into your results of course).&lt;br /&gt;&lt;br /&gt;I get 2.17 ms on Ubuntu Jaunty (9.0.4) with Firefox 3.5.2.&lt;br /&gt;I get 2.37 ms on Ubuntu Jaunty (9.0.4) with Opera 10.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;(function(){&lt;br /&gt;&lt;br /&gt;  var bufferLimit = 1000;&lt;br /&gt;  var buffer = [];&lt;br /&gt;  var moved = function(){&lt;br /&gt;    buffer[ buffer.length ] = new Date().getTime();&lt;br /&gt;    buffer.length &gt; bufferLimit ? (function(){&lt;br /&gt;      //document.removeEventListener( 'mousemove', moved, false );&lt;br /&gt;      //console.log( buffer );&lt;br /&gt;      &lt;br /&gt;      var diff = 0;&lt;br /&gt;      var len = buffer.length - 1;&lt;br /&gt;      &lt;br /&gt;      for( var i = 0; i &lt; len; i++ ){&lt;br /&gt;        diff += buffer[ i+1 ] - buffer[ i ];&lt;br /&gt;      }&lt;br /&gt;      &lt;br /&gt;      var meanAvg = diff / len;&lt;br /&gt;      &lt;br /&gt;      document.getElementsByTagName( 'body')[ 0 ].innerHTML += 'Captured "onmousemove": ' + bufferLimit + ' times. Average delay between events: ' + meanAvg + ' ms. &lt;br / &gt;';&lt;br /&gt;      &lt;br /&gt;      buffer.length = 0;&lt;br /&gt;          &lt;br /&gt;    })() : 0 ;&lt;br /&gt;  }&lt;br /&gt;  document.addEventListener( 'mousemove', moved, false );&lt;br /&gt;&lt;br /&gt;})();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-2273808036668813523?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/2273808036668813523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/onmousemove-timer-granularity.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2273808036668813523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2273808036668813523'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/09/onmousemove-timer-granularity.html' title='OnMouseMove Timer Granularity'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-4447236410972727645</id><published>2009-08-14T07:22:00.000-07:00</published><updated>2009-08-14T07:24:39.041-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='can i haz?'/><title type='text'>Can I haz?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_How4ExjCow4/SoVzWmq5EbI/AAAAAAAAABI/lK1lWs_EvMI/s1600-h/BOTEPILLEZ.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_How4ExjCow4/SoVzWmq5EbI/AAAAAAAAABI/lK1lWs_EvMI/s400/BOTEPILLEZ.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5369824962883948978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-4447236410972727645?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/4447236410972727645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/can-i-haz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/4447236410972727645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/4447236410972727645'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/can-i-haz.html' title='Can I haz?'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_How4ExjCow4/SoVzWmq5EbI/AAAAAAAAABI/lK1lWs_EvMI/s72-c/BOTEPILLEZ.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-2569050558577819316</id><published>2009-08-12T22:42:00.001-07:00</published><updated>2009-08-14T22:40:13.725-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Would the Real Prototype Please Stand Up?</title><content type='html'>There are a ton of examples out there of how to Prototype with Javascript. The examples I have seen appear too complex, verbose or just plain wrong. I started OO in Java and found the switch to Javascript incredibly difficult because of some bad descriptions of what was a Prototype was actually used for.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Constructors&lt;/b&gt;&lt;br /&gt;Prototypes are NOT blueprints of an object. They are just links to objects you want to inherit member variables from. But it is not any use knowing what a Prototype is, unless you first know what a Constructor is. So lets jump right in and define a Constructor.&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre name="code" language="javascript"&gt;// A constructor&lt;br /&gt;God = function God(){&lt;br /&gt;this.myName = 'YHWH';&lt;br /&gt;this.thinks = true;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A Constructor is simply a function. The Constructor function has member variables. In this case the member variables are 'myName' and 'thinks'. Using 'new' Now we are able to make copies of Gods.&lt;br /&gt;&lt;pre name="code" language="javascript"&gt;// Create some Gods&lt;br /&gt;Father = new God;&lt;br /&gt;Son = new God;&lt;br /&gt;Spirit = new God;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Thus we have created 3 new Gods. Each of these Gods has their own name and their own thoughts. Important: they have NOT 'inherited' the member variables from the God constructor. The member varibles are new, as each new instance of God is... 'new'. IE: God does not inherit anything from God, when God is at the top of the chain.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Prototypes&lt;/b&gt;&lt;br /&gt;Once you understand that a Constructor is just a function used to create a 'new' instance and set new member variables within that instance... you will find it easy to comprehend what a Prototype is.&lt;br /&gt;&lt;br /&gt;Prototypes are not 'created', that's the Constructor's job. Prototypes are linked. Lets say that God wanted to create Man. First God would need a constructor function by which to make the man. So lets code one...&lt;br /&gt;&lt;pre name="code" language="javascript"&gt; // Define Man's Constructor&lt;br /&gt;Man = function Man( name ){&lt;br /&gt;this.myName = name;&lt;br /&gt;this.dna = 'ACGT';&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now you can create a new Man like this...&lt;br /&gt;&lt;pre name="code" language="javascript"&gt; Adam = new Man( 'Adam' );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here we set the name-space 'Adam' to store a new instance of Man. When we invoke 'new Man', we want to pass Adam his name, so: 'new Man( 'adam' )'. Thus the Man construtor is run and Adam's member variables are set. But in this case... we have created a dead man (Adam can not think).&lt;br /&gt;&lt;br /&gt;God can think but Adam can't. Wouldn't it be nice if Adam could inherit his thinking ability from his Creator? It would, and he can. This is where Prototype is used. Let's append the Man object...&lt;br /&gt;&lt;pre name="code" language="javascript"&gt; // Define Man's Constructor&lt;br /&gt;Man = function Man( name ){&lt;br /&gt;this.myName = name;&lt;br /&gt;this.dna = 'ACGT';&lt;br /&gt;}&lt;br /&gt;// Define Man's Prototype&lt;br /&gt;Man.prototype = new God;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahha! Now when ever a new Man is created, the new man gains the ability to think from his creator. Pointing Man's prototype to 'new God' creates a link that copies the member variables from the God constructor to the new instance of Man.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Prototypes are Links&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Taking things to their logical conclusion: now that Man can think, he can realize that he is alone and needs a new Woman. Now we define the constructor function for Woman.&lt;br /&gt;&lt;pre name="code" language="javascript"&gt; Woman = function Woman( name ){&lt;br /&gt;this.myName = name;&lt;br /&gt;this.womb = true;&lt;br /&gt;}&lt;br /&gt;Woman.prototype = new Man;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Notice that Woman's prototype is Man. This means that any new Woman will inherit the Man constructor's member variables. Thus the Woman inherits DNA from the Man. Woman additionally gains a member variable called 'womb', which Man and God do not have.&lt;br /&gt;&lt;br /&gt;So here is where the beauty really comes in: Woman can think, even though Man has no thinking ability in his constructor. This is because prototypes are links. And what do links form? Chains!&lt;br /&gt;&lt;br /&gt;As you chained Woman to Man, every time you create a new instance of Woman, she inherits her member variables from new Man, who inherits his member variables from new God. Thus we have a chain of inheritance, and anything you set at the top level will filter down to the bottom unless you explicitly stop or redirect the flow of information.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;All the Code&lt;/b&gt;&lt;br /&gt;Lets put it all together and see what we get.&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;   // God constructor&lt;br /&gt;God = function God(){&lt;br /&gt;    this.myName = 'YHWH';&lt;br /&gt;    this.thinks = true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Man constructor&lt;br /&gt;Man = function Man( name ){&lt;br /&gt;    this.myName = name;&lt;br /&gt;    this.dna = 'ACGT';&lt;br /&gt;}&lt;br /&gt;// Man's Prototype is God's constructor&lt;br /&gt;Man.prototype = new God;&lt;br /&gt;&lt;br /&gt;//Woman constructor&lt;br /&gt;Woman = function Woman( name ){&lt;br /&gt;    this.womb = true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Woman's Prototype is Mans's constructor &amp;amp; Man's prototype&lt;br /&gt;Woman.prototype = new Man;&lt;br /&gt;&lt;br /&gt;// Run the Man constructor against the new Woman object ( so Woman gets a name )&lt;br /&gt;Woman.prototype.constructor = Man;&lt;br /&gt;&lt;br /&gt;// A method to see inside the object&lt;br /&gt;function inspect( being ){&lt;br /&gt;    var arr = {};&lt;br /&gt;    for( var i in being ){&lt;br /&gt;        arr[ i ] = being[ i ];&lt;br /&gt;    }&lt;br /&gt;    console.log( being.name || being.myName, arr );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Make an Adam &amp;amp; Eve from Woman &amp;amp; Man constructors...&lt;br /&gt;...inheriting members from their prototypes links */&lt;br /&gt;Adam = new Man( 'Adam' );&lt;br /&gt;( Eve = new Woman ).constructor( 'Eve' );&lt;br /&gt;&lt;br /&gt;// Console log for clarity&lt;br /&gt;inspect( God );&lt;br /&gt;inspect( Man );&lt;br /&gt;inspect( Woman );&lt;br /&gt;inspect( Adam );&lt;br /&gt;inspect( Eve );&lt;br /&gt;&lt;br /&gt;// constructor properties get added first&lt;br /&gt;// then prototyped properties get inherited second&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Results:&lt;/b&gt;&lt;br /&gt;&lt;div style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color#:000; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;br /&gt;God &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Object prototype=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;Object&lt;/span&gt;&lt;br /&gt;Man &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Object prototype=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;Object&lt;/span&gt;&lt;br /&gt;Woman &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Object prototype=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;Object&lt;/span&gt;&lt;br /&gt;Adam &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Object myName=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;Adam&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;dna=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;ACGT&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;thinks=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;true&lt;/span&gt;&lt;br /&gt;Eve &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Object myName=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;Eve&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;womb=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;true&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;dna=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;ACGT&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;thinks=&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;true&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Conclusion:&lt;/b&gt;&lt;br /&gt;Pretty much everyone knows the account of Genesis, so we all know the fundamental differences between God, Man and Woman. Hopefully this has helped make Prototypes easier to understand for someone out there.&lt;br /&gt;&lt;br /&gt;Prototypes are really very simple, but the terminology can be pretty confusing when you look at all the examples out there, especially if you are just beginning to learn Object Oriented patterns. I started learning OO in Java which was much easier to understand than JS. But now that I have been using Prototypal behavior in Javascript for a while, I have to say... I prefer it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-2569050558577819316?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/2569050558577819316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/would-real-prototype-please-stand-up.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2569050558577819316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2569050558577819316'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/would-real-prototype-please-stand-up.html' title='Would the Real Prototype Please Stand Up?'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-3817388882785658600</id><published>2009-08-11T12:52:00.000-07:00</published><updated>2009-08-12T06:42:54.195-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Switch vs. Array Index</title><content type='html'>At the last &lt;a href="http://javascript.meetup.com/2/"&gt;Javascript Meetup Cambridge&lt;/a&gt; I was showing off a Javascript Web Worker Network I have been working on for visualizing search queries. I showed the code to &lt;a href="http://twitter.com/geowa4"&gt;@geowa4&lt;/a&gt;, &lt;a href="http://twitter.com/AlbertoPL"&gt;@AlbertoPL&lt;/a&gt; and another guy who's name I forget. @geowa4 pointed out that I could use look up the function directly from the object (which I had avoided thinking switch was faster), and someone else chimed in that the switch I was already using would be faster... and I was like... "yeah, get back in your place student n00b!"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Obviously... this had to be tested!&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var obj = [];&lt;br /&gt;var len = 10;&lt;br /&gt;for( var i = 0; i &amp;lt; len; i++ ){&lt;br /&gt;obj[i] = function(){ return 1 };&lt;br /&gt;}&lt;br /&gt;obj[ 10 ] = function( mn, inc ){&lt;br /&gt;time = new Date().getTime() - time;&lt;br /&gt;console.log( 'Method #' + mn + ': ' + time + 'ms, Check: ' + ( inc == 20000000 ) );&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var time;&lt;br /&gt;var times = 2000000;&lt;br /&gt;&lt;br /&gt;function method1(){&lt;br /&gt;time = new Date().getTime();&lt;br /&gt;var inc = 0;&lt;br /&gt;for( var t = 0; t &amp;lt; times; t++ ){&lt;br /&gt; for( var i = 0; i &amp;lt; len; i++ ){&lt;br /&gt;   inc += obj[ i ]();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;obj[ 10 ]( 1, inc ) ;&lt;br /&gt;&lt;br /&gt;// run next method&lt;br /&gt;method2();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function method2(){&lt;br /&gt;time = new Date().getTime();&lt;br /&gt;var inc = 0;&lt;br /&gt;for( var t = 0; t &amp;lt; times; t++ ){&lt;br /&gt; for( var i = 0; i &amp;lt; len; i++ ){&lt;br /&gt;   switch( i ){&lt;br /&gt;     case 0: inc += obj[0](); break;&lt;br /&gt;     case 1: inc += obj[1](); break;&lt;br /&gt;     case 2: inc += obj[2](); break;&lt;br /&gt;     case 3: inc += obj[3](); break;&lt;br /&gt;     case 4: inc += obj[4](); break;&lt;br /&gt;     case 5: inc += obj[5](); break;&lt;br /&gt;     case 6: inc += obj[6](); break;&lt;br /&gt;     case 7: inc += obj[7](); break;&lt;br /&gt;     case 8: inc += obj[8](); break;&lt;br /&gt;     case 9: inc += obj[9](); break;&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;obj[ 10 ]( 2, inc );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;method1();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The results:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 255, 51);"&gt;ARRAY --&gt;  Method #1: 257ms, Check: true&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;SWITCH --&gt; Method #2: 7344ms, Check: true&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Congratulations &lt;a href="http://twitter.com/geowa4"&gt;@geowa4&lt;/a&gt; wins! IOU 1 beer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt;&lt;br /&gt;Never under-estimate the student n00b. Even if they don't know what they're talking about... they're probably still right. XD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-3817388882785658600?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/3817388882785658600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/switch-vs-array-index.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/3817388882785658600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/3817388882785658600'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/switch-vs-array-index.html' title='Switch vs. Array Index'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-5910084869717920690</id><published>2009-08-10T13:56:00.001-07:00</published><updated>2009-08-11T19:29:38.904-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Literal Object vs. Constructor Instances</title><content type='html'>At work today we were discussing memory management with Javascript objects in regards to speeding up the front-end of the search engine. The two methods being considered were using Prototypes vs. Literal objects to store a set of data. I knocked out a quick test to see what Firefox would make of these two methods and pretty much got the results we were expecting.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;b&gt;Method #1 - Constructor&lt;/b&gt;&lt;span style="color: rgb(51, 204, 0);"&gt; - 1,515,056k (1.5Gb of Ram)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;function blank(){&lt;br /&gt;this.DOM = document.createElement( 'div' );&lt;br /&gt;this.DOM.innerHTML = "Lorem ipsum dolor sit amet...   ...posuere cubilia Curae.";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var stacked = [];&lt;br /&gt;&lt;br /&gt;var amount = 1000000;&lt;br /&gt;for( var i = 0; i &amp;lt; amount; i++ ){&lt;br /&gt;stacked[i] = new blank;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(200, 0, 0);"&gt;&lt;b&gt;Method #2 - Literal&lt;/b&gt; - 1,800,000k+ CRASH! (1.8Gb of Ram)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;blank = {&lt;br /&gt; gen: function(){&lt;br /&gt;   var DOM = document.createElement( 'div' );&lt;br /&gt;   DOM.innerHTML = "Lorem ipsum dolor sit amet...   ...posuere cubilia Curae.";&lt;br /&gt;   return DOM;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;var stacked = [];&lt;br /&gt;var amount = 1000000;&lt;br /&gt;for( var i = 0; i &lt; amount; i++ ){&lt;br /&gt; stacked[i] = blank.gen();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(255, 255, 255);"&gt;NOTE:&lt;/b&gt;&lt;br /&gt;The Literal Method did not finish running. It crashed, so the memory is not truly comparable. However, the speed at which the script ran was extremely slow. The Prototype Method pumped up the memory space like a flat tire, The Literal Method crawled so slowly it felt more like trying to pour hot lead into a straw basket.&lt;br /&gt;&lt;br /&gt;&lt;b style="color: rgb(255, 255, 255);"&gt;CONCLUSION:&lt;/b&gt;&lt;br /&gt;Careful what you use those literals for!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-5910084869717920690?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/5910084869717920690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/literal-instances-vs-prototyped.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5910084869717920690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5910084869717920690'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/literal-instances-vs-prototyped.html' title='Literal Object vs. Constructor Instances'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-7689289010495350789</id><published>2009-08-09T11:11:00.000-07:00</published><updated>2009-08-11T17:37:07.838-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='processing.js'/><title type='text'>Testing Processing.js in Blogger...</title><content type='html'>&lt;script type="application/processing"&gt;/* &lt;br /&gt;  PROCESSINGJS.COM - BASIC EXAMPLE  &lt;br /&gt;  Delayed Mouse Tracking&lt;br /&gt;  MIT License - Hyper-Metrix.com/F1LT3R&lt;br /&gt;  Native Processing compatible &lt;br /&gt;*/  &lt;br /&gt;&lt;br /&gt;// Global variables&lt;br /&gt;float radius = 50.0;&lt;br /&gt;int X, Y;&lt;br /&gt;int nX, nY;&lt;br /&gt;int delay = 16;&lt;br /&gt;&lt;br /&gt;// Setup the Processing Canvas&lt;br /&gt;void setup(){&lt;br /&gt;  size( 200, 200 );&lt;br /&gt;  strokeWeight( 10 );&lt;br /&gt;  frameRate( 15 );&lt;br /&gt;  X = width / 2;&lt;br /&gt;  Y = width / 2;&lt;br /&gt;  nX = X;&lt;br /&gt;  nY = Y;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Main draw loop&lt;br /&gt;void draw(){&lt;br /&gt;  &lt;br /&gt;  radius = radius + sin( frameCount / 4 );&lt;br /&gt;  &lt;br /&gt;  // Track circle to new destination&lt;br /&gt;  X+=(nX-X)/delay;&lt;br /&gt;  Y+=(nY-Y)/delay;&lt;br /&gt;  &lt;br /&gt;  // Fill canvas grey&lt;br /&gt;  background( 100 );&lt;br /&gt;  &lt;br /&gt;  // Set fill-color to blue&lt;br /&gt;  fill( 0, 121, 184 );&lt;br /&gt;  &lt;br /&gt;  // Set stroke-color white&lt;br /&gt;  stroke(255); &lt;br /&gt;  &lt;br /&gt;  // Draw circle&lt;br /&gt;  ellipse( X, Y, radius, radius );                  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Set circle's next destination&lt;br /&gt;void mouseMoved(){&lt;br /&gt;  nX = mouseX;&lt;br /&gt;  nY = mouseY;  &lt;br /&gt;}&lt;br /&gt;&lt;/script&gt;&lt;canvas width="320" height="240"&gt;&lt;/canvas&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-7689289010495350789?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/7689289010495350789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/testing-processingjs-in-blogger.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/7689289010495350789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/7689289010495350789'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/testing-processingjs-in-blogger.html' title='Testing Processing.js in Blogger...'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-2739353954269471134</id><published>2009-08-08T20:44:00.000-07:00</published><updated>2009-08-12T06:38:47.684-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Firebug'/><title type='text'>Console log for Safari &amp; Firefox</title><content type='html'>&lt;pre name="code" class="javascript"&gt;&lt;br /&gt; var Console={&lt;br /&gt;  log: function( message ){&lt;br /&gt;   try { window.opera.postError( message ); }&lt;br /&gt;     catch(e) { console.log( message ); }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-2739353954269471134?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/2739353954269471134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/console-log-for-safari-firefox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2739353954269471134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2739353954269471134'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/console-log-for-safari-firefox.html' title='Console log for Safari &amp; Firefox'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-667485834578409553</id><published>2009-08-03T18:34:00.000-07:00</published><updated>2009-08-11T17:36:19.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><title type='text'>Mercartor SVG Map Added to Wikipedia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://commons.wikimedia.org/wiki/File:World_map_-_low_resolution.svg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 131px;" src="http://2.bp.blogspot.com/_How4ExjCow4/SneRAMn4aEI/AAAAAAAAAAs/6orGplwckP8/s400/200px-World_map_-_low_resolution.svg.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5365916913609762882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just received confirmation that my Mercartor SVG World map has been added to Wikipedia. I actually made this while creating the &lt;b&gt;&lt;a href="http://downloadstats.mozilla.com/"&gt;Mozilla Download Stats Visualization&lt;/a&gt;&lt;/b&gt;, using a bunch of different maps as the source. Actually the final map for Mozilla was created using Inkscape to trace a specularity map from Nasa.&lt;br /&gt;&lt;br /&gt;The map is now ShareALike Creative Commons, so mash away!&lt;br /&gt;&lt;a href="http://commons.wikimedia.org/wiki/File:World_map_-_low_resolution.svg"&gt;http://commons.wikimedia.org/wiki/File:World_map_-_low_resolution.svg&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-667485834578409553?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/667485834578409553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/mercartor-svg-map-added-to-wikipedia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/667485834578409553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/667485834578409553'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/mercartor-svg-map-added-to-wikipedia.html' title='Mercartor SVG Map Added to Wikipedia'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_How4ExjCow4/SneRAMn4aEI/AAAAAAAAAAs/6orGplwckP8/s72-c/200px-World_map_-_low_resolution.svg.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-8187921775652100113</id><published>2009-08-03T17:47:00.000-07:00</published><updated>2009-08-11T17:36:49.828-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='processing.js'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><title type='text'>HTML5 Canvas and Audio Experiment</title><content type='html'>&lt;a href="http://9elements.com/io/projects/html5/canvas/"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 340px;" src="http://4.bp.blogspot.com/_How4ExjCow4/SneGARMxe0I/AAAAAAAAAAk/Etgyu34lcDs/s400/html5+processing+visualization.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5365904820210334530" /&gt;&lt;br /&gt;HTML5 Canvas and Audio Experiment&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Wow, wow, wow, how awesome is this?! &lt;/span&gt; Got sent this really cool HTML5 Twitter visualization today. I was simply blown away by the depth of this visualization. And the music is perfect.... great work guys!&lt;br /&gt;&lt;br /&gt;If you want to create visualizations on the HTML5 Canvas, &lt;a href="http://processingjs.org"&gt;Processing.js&lt;/a&gt; is a great library to get you started. &lt;b&gt;&lt;a href="http://processingjs.org"&gt;ProcessingJS.org&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-8187921775652100113?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/8187921775652100113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/html5-canvas-and-audio-experiment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/8187921775652100113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/8187921775652100113'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/08/html5-canvas-and-audio-experiment.html' title='HTML5 Canvas and Audio Experiment'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_How4ExjCow4/SneGARMxe0I/AAAAAAAAAAk/Etgyu34lcDs/s72-c/html5+processing+visualization.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-3290348477357818942</id><published>2009-07-31T10:20:00.000-07:00</published><updated>2009-08-12T06:37:40.958-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='Firebug'/><title type='text'>Firebug AJAX Reading...</title><content type='html'>Want to read an async AJAX request in FireBug console?&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;AJAX=new XMLHttpRequest();&lt;br /&gt;AJAX.open( 'POST', 'www.YourUrl.com', true );&lt;br /&gt;AJAX.send( 'postKey=postVal' );&lt;br /&gt;AJAX.onreadystatechange = function(){ console.log( AJAX ); }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This prints &lt;b&gt;everything&lt;/b&gt;, not just a successful response. Very useful for learning about the XMLHttpRequest object and reading POST responses inside an authenticated session without any cross-domain trickery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-3290348477357818942?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/3290348477357818942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/firebug-ajax-reading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/3290348477357818942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/3290348477357818942'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/firebug-ajax-reading.html' title='Firebug AJAX Reading...'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-5587956082998498388</id><published>2009-07-15T19:35:00.000-07:00</published><updated>2009-08-11T17:38:00.966-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Terminal'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu Read line from file</title><content type='html'>Cool command of the week... &lt;span style="font-weight: bold;"&gt;"head"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Head reads part of a file, this an be done by lines, or by bytes. It's faster by bytes, for obvious  disk IO reasons, but line numbers will probably be more useful in most cases anyway.&lt;br /&gt;&lt;br /&gt;Here's a sample....&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;head -n 99000000 mozdl.tsv | tail -n 1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-n 99000000&lt;/span&gt;    tells the machine to read from the 99 millionth line of mozdl.tsv&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;| tail -n 1&lt;/span&gt;    tells the machine how many lines to output from where it began... one&lt;br /&gt;&lt;br /&gt;I find myself using this command a lot, especially with bytes to jump around a file to sample data without having to expend cycles processing \n characters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-5587956082998498388?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/5587956082998498388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/ubuntu-read-line-from-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5587956082998498388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/5587956082998498388'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/ubuntu-read-line-from-file.html' title='Ubuntu Read line from file'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-2046993904127766819</id><published>2009-07-15T18:54:00.000-07:00</published><updated>2009-08-11T17:38:21.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blender3D'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Moving from Vista to Linux</title><content type='html'>I decided to install Ubuntu Jaunty on my main dev machine to see what the 3D Compiz desktop was like compared to my laptop. Before this I have only run Linux as a firewall (Smooth Linux), as a server (Ununtu Server) and Ubuntu on my Laptops to read emails and listen to the radio while out on contracts.&lt;br /&gt;&lt;br /&gt;Well... it's been almost a week now, and I have not booted into Windows since. Why not? Well... as it turns out... all the software I frequent (Blender3D, Processing, Apache Server) run faster, crash less and use the memory FAR more efficiently.&lt;br /&gt;&lt;br /&gt;This was not what I expected, but none-the-less, a pleasant surprise.&lt;br /&gt;&lt;br /&gt;An added bonus is the command-line interface, which has rich functionality like email, curl, grep, regex right at your finger tips. In Windows I have to install software to complete these tasks.&lt;br /&gt;&lt;br /&gt;I find myself using the command line all the time, which is great, because my poor arm is sore in the evenings from using the mouse all day. Oh... and the circular 3D desktop is awesome!!! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-2046993904127766819?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/2046993904127766819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/moving-from-vista-to-linux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2046993904127766819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/2046993904127766819'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/moving-from-vista-to-linux.html' title='Moving from Vista to Linux'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-1878663378996627176</id><published>2009-07-15T06:43:00.000-07:00</published><updated>2009-08-11T17:38:42.343-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='Blender3D'/><title type='text'>Perfecting my "Earth"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_How4ExjCow4/Sl3eByCOScI/AAAAAAAAAAU/BlGIYpudKt4/s1600-h/blue_marble_4.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_How4ExjCow4/Sl3eByCOScI/AAAAAAAAAAU/BlGIYpudKt4/s400/blue_marble_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5358683253833091522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Over the last couple of days I have been perfecting my Earth rendering in Blender 3D for a visualization I have planning to release in a couple of weeks. Thought it might be fun to post some screen shots.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_How4ExjCow4/Sl3eBqLsHFI/AAAAAAAAAAM/zraPlSuE2y8/s1600-h/blue_marble.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_How4ExjCow4/Sl3eBqLsHFI/AAAAAAAAAAM/zraPlSuE2y8/s400/blue_marble.jpg" alt="" id="BLOGGER_PHOTO_ID_5358683251725311058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Getting close, but still needs some work on the volumetric atmosphere rendering and sub-surface scattering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-1878663378996627176?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/1878663378996627176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/perfecting-my-earth.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/1878663378996627176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/1878663378996627176'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/perfecting-my-earth.html' title='Perfecting my &quot;Earth&quot;'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_How4ExjCow4/Sl3eByCOScI/AAAAAAAAAAU/BlGIYpudKt4/s72-c/blue_marble_4.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-1137174362276082427</id><published>2009-07-11T01:10:00.000-07:00</published><updated>2009-08-11T17:38:52.840-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Counting the Lines in a LARGE File with PHP</title><content type='html'>Firstly, I am no PHP Guru, so if someone has a better method, I would love to have it explained so I can post it here (credit attributed of course).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem&lt;/span&gt;:&lt;br /&gt;So I wanted to count the lines in a 4GB text file, and all the examples on line showed me how to lead the file into an array, and get the count(); Well that's great if your file is small, but trying to load a 4GB file into an array on a machine with 2GB is not going to be pretty.&lt;br /&gt;&lt;br /&gt;I tried anyway and quickly ran into PHP's script limit. Something I had not come across before. I updated my php.ini to allow for 1.5GB memory usage per script and up to 6 days before execution would time-out. Obviously this was not going to work anyway, but was fun to discover.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;Also very obvious, but worth documenting as someone will want to know how to do this, I can read a file line-by-line, incrementing a variable until the end-of-file has been reached.&lt;br /&gt;&lt;br /&gt;I know-I know! There's a WAAAAAY better method to do this somewhere, but time did not permit me to discover it. Perhaps you have the answer, perhaps you are looking for an answer. If you're looking... you can try this code below, which took about 3 minutes to run on my machine.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// Set your filename&lt;br /&gt;$file="ffdls.tsv";&lt;br /&gt;&lt;br /&gt;// Open the file for reading&lt;br /&gt;$handle = fopen($file, "r");&lt;br /&gt;&lt;br /&gt;// Loop through the file until you reach the last line&lt;br /&gt;while(!feof($handle)){&lt;br /&gt;&lt;br /&gt;// Read a line&lt;br /&gt;$line = fgets($handle);&lt;br /&gt;&lt;br /&gt;// Increment the counter&lt;br /&gt;$lineCount++;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Release the file for access&lt;br /&gt;fclose($handle);&lt;br /&gt;&lt;br /&gt;// Display number of lines&lt;br /&gt;echo "Line count: $lineCount";&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-1137174362276082427?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/1137174362276082427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/counting-lines-in-file-with-php.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/1137174362276082427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/1137174362276082427'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/counting-lines-in-file-with-php.html' title='Counting the Lines in a LARGE File with PHP'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4897352451201344470.post-8070838921686128134</id><published>2009-07-07T20:34:00.001-07:00</published><updated>2009-08-11T17:39:18.624-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iframe'/><category scheme='http://www.blogger.com/atom/ns#' term='opera'/><title type='text'>Opera iFrame File 'src' Sucks!</title><content type='html'>Ok, I really need to rant right now. I've been trying for two evenings to convince Opera that it should automatically download a Zip file when I change the iFrame's source. I have tried so many things you wouldn't believe it.&lt;br /&gt;&lt;br /&gt;Php headers, Meta refreshes, location.reload()'s, but apparently Opera is not iFrame savvy. I have searched the Wubble-u all over for a solution to this problem, but have not found anything that works, so... I've  submitted a couple of bug reports to Opera's development team to try and get this super-annoying behavior some development time.&lt;br /&gt;&lt;br /&gt;In every other browser, this code starts a download:&lt;br /&gt;&lt;pre&gt;&amp;lt;iframe src="archive.zip"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/pre&gt;I have a bad feeling that the behavior is some kind of security feature.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;Bugs submitted: DSK-258356, DSK-258357&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-8070838921686128134?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/8070838921686128134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/opera-iframe-file-src-sucks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/8070838921686128134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/8070838921686128134'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/07/opera-iframe-file-src-sucks.html' title='Opera iFrame File &apos;src&apos; Sucks!'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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-4897352451201344470.post-822217900371521669</id><published>2009-06-14T07:54:00.000-07:00</published><updated>2009-08-11T17:39:35.403-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ui'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Video.Google's Strange Scrollbar Behavior</title><content type='html'>&lt;div&gt;While on a front-end web contract with a search engine, the UX Designer showed me something strange he came across that he felt broke the UX for Google Videos. I have to say, I totally agree with him.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-4579f17195f7cf68" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v20.nonxt5.googlevideo.com/videoplayback?id%3D4579f17195f7cf68%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331180273%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D823E7AF0BADAFB17A04BF3342614ADB4B44B26C6.6246F5D42F6E28ADF711FF161F8DB22A27115FC5%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D4579f17195f7cf68%26offsetms%3D5000%26itag%3Dw160%26sigh%3DNm74tisT4mz_c1DJWSE7A5AElMU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v20.nonxt5.googlevideo.com/videoplayback?id%3D4579f17195f7cf68%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1331180273%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D823E7AF0BADAFB17A04BF3342614ADB4B44B26C6.6246F5D42F6E28ADF711FF161F8DB22A27115FC5%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D4579f17195f7cf68%26offsetms%3D5000%26itag%3Dw160%26sigh%3DNm74tisT4mz_c1DJWSE7A5AElMU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;User Interfaces have standard elements. Some times these visually reflect UI elements of the Operating System, sometimes they reflect UI elements of the User-Agent (browser). When you utilize standard elements, your users will expect them to behave in the learned behavior. When they behave otherwise, you break the user-experience. For less tech savvy users, you may stop them coming back to your service period.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now the case of the Video.Google Search Scrollbar is not too bad. It does not break the UI, but it does degrade the UX.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Recreate the experience:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Go to http://video.google.com&lt;/li&gt;&lt;li&gt;Search for a video&lt;/li&gt;&lt;li&gt;Click on a video to play it&lt;/li&gt;&lt;li&gt;Use the window scroll bar on the right&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;Score: 1&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Maintains OS functionality&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;Fail&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Does not move all window content&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Maintains UA functionality&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;Fail&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Does not move all window content&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Maintains visual connection with view layer&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;Fail&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Connection only apparent after use&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Improves visual quality of experience&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span"  style="color:#FF0000;"&gt;Fail&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Too jerky&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Enhances usability of application&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span"  style="color:#33CC00;"&gt;Pass&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Makes sense in the context of a search&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4897352451201344470-822217900371521669?l=hyper-metrix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=4579f17195f7cf68&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://hyper-metrix.blogspot.com/feeds/822217900371521669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://hyper-metrix.blogspot.com/2009/06/videogoogles-strange-scrollbar-behavior.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/822217900371521669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4897352451201344470/posts/default/822217900371521669'/><link rel='alternate' type='text/html' href='http://hyper-metrix.blogspot.com/2009/06/videogoogles-strange-scrollbar-behavior.html' title='Video.Google&apos;s Strange Scrollbar Behavior'/><author><name>F1LT3R</name><uri>http://www.blogger.com/profile/01364494804574819943</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></feed>
