<?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-7151587301081387201</id><updated>2011-11-27T18:24:35.586-05:00</updated><title type='text'>Ramblings of a zuble</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7151587301081387201.post-8275536691100766827</id><published>2007-11-03T12:33:00.001-05:00</published><updated>2008-12-11T15:51:06.563-05:00</updated><title type='text'>Memcache Necessities</title><content type='html'>While helping a fellow facebook developer get memcache setup, I ran across a few problems getting memcache running. Luckily I found the solution at http://louzell.wordpress.com/2007/10/11/how-to-install-memcached/&lt;br /&gt;&lt;br /&gt;First install libevent:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#curl -O http://monkey.org/~provos/libevent-1.3e.tar.gz&lt;br /&gt;#tar xzvf libevent-1.3e.tar.gz&lt;br /&gt;#cd libevent-1.3e&lt;br /&gt;#./configure --prefix=/usr/local&lt;br /&gt;#make&lt;br /&gt;#make install&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And then finally memcache:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#curl -O http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz&lt;br /&gt;#tar xzvf memcached-1.2.2.tar.gz&lt;br /&gt;#cd memcached-1.2.2.tar.gz&lt;br /&gt;#LDFLAGS='-Wl,--rpath /usr/local/lib' ./configure --prefix=/usr/local&lt;br /&gt;#make&lt;br /&gt;#make install&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Update: For the latest 1.2.6 i used&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#LDFLAGS='-Wl,--rpath /usr/local/lib' ./configure --prefix=/usr/local --enable-64bit --enable-threads&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-8275536691100766827?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/8275536691100766827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=8275536691100766827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/8275536691100766827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/8275536691100766827'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/11/memcache-necessities.html' title='Memcache Necessities'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-5225764980386097393</id><published>2007-04-20T11:47:00.000-05:00</published><updated>2007-04-20T12:43:19.323-05:00</updated><title type='text'>MacBook Pro separation anxiety</title><content type='html'>It would seem that not having a laptop would cause more withdrawal for me than it has at this point. I dropped off my MBP at the local Apple Retail Store this past Sunday so that they could take repair/replace the loose hinge that causes the lid to fall closed under it's own weight. They called me Sunday night saying that they needed to order a part for it since the hinge had to be replaced instead of adjusted.&lt;br /&gt;&lt;br /&gt;What really confused me is that I brought the MBP in Friday night for them to look at and they said they needed to order a part for it, so they let me take my portable home with me until they got the part in. They then called me Saturday saying they had the part in, thus I brought it back in on Sunday.Now I could have gone back to the Apple Store and picked it up until they got the new part in again, but I figured that if I did that, it would take an "additional" 7-10 days for them to have it fixed once I brought the MBP back in again and I'm not in the mood to play games with them on this. I figure I'll give them their 7-10 days from Sunday and bitch and complain loudly if it ain't fixed by then.&lt;br /&gt;&lt;br /&gt;Blah. enough of my rant. They really have me pissed off. I want my portable back and I want it now. I paid $2500 for a laptop and I expect nothing less than perfection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-5225764980386097393?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/5225764980386097393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=5225764980386097393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/5225764980386097393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/5225764980386097393'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/04/macbook-pro-seperation-anxiety.html' title='MacBook Pro separation anxiety'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-2505164786101458148</id><published>2007-03-23T01:11:00.000-05:00</published><updated>2007-03-23T01:45:18.583-05:00</updated><title type='text'>mencoder goodness for TivoDecode Manager</title><content type='html'>As a follow up to &lt;a href="http://zuble.blogspot.com/2007/03/simple-performance-boost-for-tivodecode.html"&gt;yesterday's entry&lt;/a&gt;, I have finally managed to compile a custom Mac Intel Core 2 Duo build of mencoder that provides drop in functionality to &lt;a href="http://tdm.sourceforge.net/"&gt;TivoDecode Manager&lt;/a&gt; (TDM) while cutting encoding times in half. 7 hours of sleepless night-time later I present to you the new &amp;amp; improved &lt;a href="http://s3.zuble.com/intel-optimized-build/current/mencoder"&gt;Mac Intel-optimized mencoder binary&lt;/a&gt; (7.5MB).&lt;br /&gt;&lt;br /&gt;Here are the benchmarks I have so far:&lt;br /&gt;TDM's provided mencoder binary&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ time /Applications/TiVoDecode\ Manager.app/Contents/Resources/mencoder -af volume=13:1 -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -demuxer lavf -lavfdopts probesize=128 -oac lavc -ovc lavc -lavcopts keyint=15:aglobal=1:vglobal=1:coder=1:vcodec=mpeg4:acodec=aac:vbitrate=1800:abitrate=128 -vf pp=lb,scale=640:480,harddup -o ~/Desktop/clip.tdm.mp4 ~/Desktop/clip.mpg&lt;br /&gt;&lt;br /&gt;real    1m9.518s&lt;br /&gt;user    1m7.768s&lt;br /&gt;sys     0m0.847s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Mac Intel-optimized mencoder binary&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ time ./mencoder -af volume=13:1 -of lavf -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -demuxer lavf -lavfdopts probesize=128 -oac lavc -ovc lavc -lavcopts keyint=15:aglobal=1:vglobal=1:coder=1:vcodec=mpeg4:acodec=aac:vbitrate=1800:abitrate=128 -vf pp=lb,scale=640:480,harddup -o ~/Desktop/clip.custom.mp4 ~/Desktop/clip.mpg&lt;br /&gt;&lt;br /&gt;real    0m29.061s&lt;br /&gt;user    0m27.210s&lt;br /&gt;sys     0m0.743s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and here are the file sizes&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ ls -ltr clip.*&lt;br /&gt;-rw-r--r--   1 xxx  xxx  12654193 Mar 22 01:59 clip.mpg&lt;br /&gt;-rw-r--r--   1 xxx  xxx  20839638 Mar 23 01:50 clip.tdm.mp4&lt;br /&gt;-rw-r--r--   1 xxx  xxx  20859165 Mar 23 01:51 clip.custom.mp4&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and just for fun, I lowered the bitrate down to 600kbs so that it actually does compression and here are the times and filesizes.&lt;br /&gt;&lt;br /&gt;TDM:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;real    1m7.573s&lt;br /&gt;user    0m59.340s&lt;br /&gt;sys     0m0.904s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Intel-optimized&lt;br /&gt;&lt;code&gt;&lt;br /&gt;real    0m31.287s&lt;br /&gt;user    0m25.143s&lt;br /&gt;sys     0m0.787s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ ls -ltr clip*&lt;br /&gt;-rw-r--r--   1 xxx  xxx  12654193 Mar 22 01:59 clip.mpg&lt;br /&gt;-rw-r--r--   1 xxx  xxx   8135459 Mar 23 02:26 clip.custom.mp4&lt;br /&gt;-rw-r--r--   1 xxx  xxx   8131077 Mar 23 02:27 clip.tdm.mp4&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And well if you've managed to wade through all that I guess I'll leave you with some installation instructions for the mencoder binary.&lt;br /&gt;1. &lt;a href="http://s3.zuble.com/intel-optimized-build/current/mencoder"&gt;Download&lt;/a&gt;&lt;br /&gt;2. Backup old mencoder binary&lt;br /&gt;&lt;nobr&gt;&lt;blockquote&gt;mv /Applications/TiVoDecode\ Manager.app/Contents/Resources/mencoder /Applications/TiVoDecode\ Manager.app/Contents/Resources/mencoder.old&lt;/blockquote&gt;&lt;/nobr&gt;&lt;br /&gt;3. Copy in new mencoder binary&lt;br /&gt;&lt;nobr&gt;&lt;blockquote&gt;cp mencoder /Applications/TiVoDecode\ Manager.app/Contents/Resources/mencoder&lt;/blockquote&gt;&lt;/nobr&gt;&lt;br /&gt;4. Enjoy (Did I mention this &lt;em&gt;probably&lt;/em&gt; only works for the Core2Duo??)&lt;br /&gt;5. &lt;a href="http://digg.com/apple/Mac_Intel_optimized_mencoder_for_TivoDecode_Manager_halves_encoding_time"&gt;Digg this&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-2505164786101458148?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/2505164786101458148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=2505164786101458148' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/2505164786101458148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/2505164786101458148'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/03/mencoder-goodness.html' title='mencoder goodness for TivoDecode Manager'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-4306352516531569882</id><published>2007-03-22T08:45:00.000-05:00</published><updated>2007-03-23T00:46:32.412-05:00</updated><title type='text'>Simple performance boost for TivoDecode Manager</title><content type='html'>With the release of AppleTV I started playing around with the TivoDecode Manager again tonight and started converting content from my Tivo. While playing around with the latest version of TDM (2.1), I noticed that the version of mencoder bundled with TDM was completely unoptimized. Here is the output from their build of mencoder&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ /Applications/TiVoDecode\ Manager.app/Contents/Resources/mencoder&lt;br /&gt;MEncoder dev-SVN-r21629-4.0.1 (C) 2000-2006 MPlayer Team&lt;br /&gt;CPU: Intel(R) Core(TM)2 CPU         T7600  @ 2.33GHz (Family: 6, Model: 15, Stepping: 6)&lt;br /&gt;MMX supported but disabled&lt;br /&gt;MMX2 supported but disabled&lt;br /&gt;SSE supported but disabled&lt;br /&gt;SSE2 supported but disabled&lt;br /&gt;CPUflags: Type: 6 MMX: 0 MMX2: 0 3DNow: 0 3DNow2: 0 SSE: 0 SSE2: 0&lt;br /&gt;Compiled for x86 CPU with extensions:&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now compare this output to the version recommended by ffmpegX from the &lt;a href="http://prdownloads.sourceforge.net/mplayerosx/ffmpegXbinaries20060307.zip"&gt;sourceforge build &lt;/a&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$  /Applications/ffmpegX.app/Contents/Resources/mencoder &lt;br /&gt;MEncoder dev-CVS-060307-04:23-4.0.1 (C) 2000-2006 MPlayer Team&lt;br /&gt;Mac OSX static build for ffmpegX&lt;br /&gt;CPU: Intel  (Family: 6, Stepping: 6)&lt;br /&gt;FIXME:Hardenabling SSE and SSE2 without detection&lt;br /&gt;CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1&lt;br /&gt;Compiled for x86 CPU with extensions: MMX MMX2 SSE SSE2&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Notice anything missing? Yeah. TDM is completely ignoring the MMX and SSE registers!&lt;br /&gt;&lt;br /&gt;So a quick timing on a 87 second video clip yielded the following with TDM's mencoder&lt;br /&gt;&lt;code&gt;&lt;br /&gt;real    1m10.966s&lt;br /&gt;user    1m8.981s&lt;br /&gt;sys     0m0.565s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The same timing with identical options on ffmpeg's mencoder yielded a result of&lt;br /&gt;&lt;code&gt;&lt;br /&gt;real    0m24.834s&lt;br /&gt;user    0m23.379s&lt;br /&gt;sys     0m0.443s&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;That's about a 50% reduction in encoding time!&lt;br /&gt;&lt;br /&gt;Of course the -lavfdopts probesize=128 -lavcopts aglobal:1:acodec:aac options did not work and had to be stripped or changed to compatible options in both, but the data is somewhat clear that TDM needs to recompile their mencoder with SSE and MMX extensions enabled.&lt;br /&gt;&lt;br /&gt;So last night I decided to undertake the task of doing all that and BLEH. It's harder than it sounds. Apparently I'm missing the faac library among other things and compiling the libfaac on the Mac isn't the most straight-forward task. It looks like I'll be pushing this task to another day, but the findings so far are interesting to say the least.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-4306352516531569882?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/4306352516531569882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=4306352516531569882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/4306352516531569882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/4306352516531569882'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/03/simple-performance-boost-for-tivodecode.html' title='Simple performance boost for TivoDecode Manager'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-7946125871627259001</id><published>2007-03-21T09:52:00.000-05:00</published><updated>2007-03-21T10:18:18.974-05:00</updated><title type='text'>The Apple TV debate continues</title><content type='html'>Well, if you haven't read &lt;a href="http://online.wsj.com/public/article/SB117443716237743525-AC8bUe8X978hZmC7A85mAccsld8_20080320.html"&gt;Walt Mossberg's review of AppleTV&lt;/a&gt; yet, this is a good place to start. Of course many people will argue that the AppleTV is a niche product, or has limited content, or doesn't have DVR functionality or this or that. Personally, I've already come up with a great use for the AppleTV that fits my needs and possibly the needs of millions of people. &lt;br /&gt;&lt;br /&gt;Tivo. But wait a second, AppleTV isn't a DVR. That's not my point. My focus is the subset of people out there who have a Mac, already have Tivo service, and have two or more TVs, but have only one Tivo. Now Tivo is great, but is made better by &lt;a href="http://tdm.sourceforge.net/"&gt;TivoDecode Manager&lt;/a&gt;(TDM) for the Mac. For most TV owners, the TV content is stuck on your Tivo and one TV unless of course you don't mind watching your TV shows on your computer. But that is exactly what AppleTV is here to solve. Moving content away from your computer and to your TV. &lt;br /&gt;&lt;br /&gt;With TDM I can batch queue all the new shows on my Tivo to have them converted to an iTunes compatible TV show or movie while I am asleep or at work, ready to be watched in a different room at my leisure. Now I don't have to fight over what's on the Tivo and be limited to watching it on the one TV that it is hooked up to. Of course I could always take the plunge and purchase another Tivo and record even more shows, but in reality, there aren't enough TV shows to keep a &lt;a href="http://www.tivo.com/2.0.boxdetails.asp?box=series2180hrDTDVR"&gt;Dual-Tuner Tivo&lt;/a&gt; busy. Plus, by the time I purchase another Tivo and then the monthly service, I've already sunk another $350 into Tivo.&lt;br /&gt;&lt;br /&gt;Of course there are plenty of other ways to use the new AppleTV, and everyone will find a way to make it work for them, but as always, this is just my $0.02.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-7946125871627259001?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/7946125871627259001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=7946125871627259001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/7946125871627259001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/7946125871627259001'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/03/apple-tv-debate-continues.html' title='The Apple TV debate continues'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-3047237992572903687</id><published>2007-02-21T13:10:00.000-05:00</published><updated>2007-02-21T13:17:38.262-05:00</updated><title type='text'>Prototype Array fun</title><content type='html'>I must say, I love prototype and I love cliches. Prototype is the best thing since sliced bread. Okay, maybe not the absolute best thing, but it's close. For example, I was pretty mad that javascript doesn't have a function to check if an array key exists like &lt;a href="http://php.net/array_key_exists"&gt;PHP's array_key_exists function&lt;/a&gt;, but with prototype, I can come pretty close.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;Array.prototype.keyExists = function(key) {&lt;br /&gt; for (var i in this) {&lt;br /&gt;   if (i==key) return true;&lt;br /&gt; }&lt;br /&gt; return false;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Hopefully this is self explanatory as I'm being lazy and I'm not in the mood to write out detailed examples of how to use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-3047237992572903687?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/3047237992572903687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=3047237992572903687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/3047237992572903687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/3047237992572903687'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/02/prototype-array-fun.html' title='Prototype Array fun'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-4113382817259936586</id><published>2007-02-19T23:25:00.000-05:00</published><updated>2008-12-10T17:46:08.187-05:00</updated><title type='text'>Apple Leaks Novatel V740 ExpressCard?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_W8SefNA5w5c/Rdp4XucaixI/AAAAAAAAAAQ/8AVcJi14bYA/s1600-h/applev740.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_W8SefNA5w5c/Rdp4XucaixI/AAAAAAAAAAQ/8AVcJi14bYA/s320/applev740.png" alt="" id="BLOGGER_PHOTO_ID_5033467882539485970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If anyone has been careful enough to scrutinize the latest &lt;a href="http://www.apple.com/support/downloads/wwansupportupdate10.html"&gt;Apple Software Update for WWAN devices&lt;/a&gt;, you may have noticed a mysterious Verizon Novatel V740 ExpressCard EVDO Rev A. Now as it seems now, Sprint just started shipping there Rev A devices today according to the folks over at &lt;a href="http://www.evdoinfo.com/"&gt;EVDO Info&lt;/a&gt;, but there has been no real word about a Rev A ExpressCard solution from Verizon. Hopefully, there is more news about this new device in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-4113382817259936586?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/4113382817259936586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=4113382817259936586' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/4113382817259936586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/4113382817259936586'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/02/apple-leaks-novatel-v740-expresscard.html' title='Apple Leaks Novatel V740 ExpressCard?'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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/_W8SefNA5w5c/Rdp4XucaixI/AAAAAAAAAAQ/8AVcJi14bYA/s72-c/applev740.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7151587301081387201.post-1867498987531887450</id><published>2007-02-19T12:05:00.000-05:00</published><updated>2007-02-19T12:22:55.935-05:00</updated><title type='text'>Compressed JS and mod_rewrite</title><content type='html'>Thanks to Joseph Scott's &lt;a href="http://joseph.randomnetworks.com/archives/2006/07/13/compressed-javascript/"&gt;Compressed Javascript article&lt;/a&gt; and comments, I've managed to make some headway on making a solution that degrades nicely for browsers that don't support gzipped JS well at this point. Basically, by sticking to &lt;br /&gt;&lt;blockquote&gt;&lt;pre class="codeblock"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="js/prototype.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;and then letting apache serve up the gzipped file works best for me so far. By adding the following to my .htaccess file in my js directory&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="codeblock"&gt;&lt;br /&gt;&amp;lt;FilesMatch "\\.js.gz$"&amp;gt;&lt;br /&gt;  ForceType text/javascript&lt;br /&gt;  Header set Content-Encoding: gzip&lt;br /&gt;&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;&amp;lt;FilesMatch "\\.js$"&amp;gt;&lt;br /&gt;  RewriteEngine On&lt;br /&gt;  RewriteCond %{HTTP_USER_AGENT} !".*Safari.*"&lt;br /&gt;  RewriteCond %{HTTP:Accept-Encoding} gzip&lt;br /&gt;  RewriteCond %{REQUEST_FILENAME}.gz -f&lt;br /&gt;  RewriteRule (.*)\.js$ $1\.js.gz [L]&lt;br /&gt;  ForceType text/javascript&lt;br /&gt;&amp;lt;/FilesMatch&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;I am able to push the correct headers to the browser as well as determine whether to serve up the js or js.gz version.&lt;br /&gt;&lt;br /&gt;This also relies on the fact that a static precompressed gzipped version of the js file is created so there is little overhead required to gzip the file on every request. If the gzipped version of the file doesn't exist, it simply serves up the uncompressed file.&lt;br /&gt;&lt;br /&gt;Of course there are a couple of caveats to this as if you change the JS file, you should update the gz file too or you will wonder why your changes aren't showing up.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-1867498987531887450?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/1867498987531887450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=1867498987531887450' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/1867498987531887450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/1867498987531887450'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/02/compressed-js-and-modrewrite.html' title='Compressed JS and mod_rewrite'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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-7151587301081387201.post-3335991839946395972</id><published>2007-02-19T10:12:00.000-05:00</published><updated>2007-02-19T11:11:42.167-05:00</updated><title type='text'>New stomping grounds</title><content type='html'>I've decided to start a new blog for my misadventures and ideas. Hopefully something here will inspire you, if not leave you in awestruck. A few warning for those of you who may read this.&lt;br /&gt;&lt;br /&gt;  I'm not the most politically correct person.&lt;br /&gt;  I will offend SOMEBODY at SOME POINT.&lt;br /&gt;  I suck with grammar, so don't expect half of my posts to make sense. That's why this is a rambling.&lt;br /&gt;&lt;br /&gt;Okay, back to work. Until then...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7151587301081387201-3335991839946395972?l=zuble.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zuble.blogspot.com/feeds/3335991839946395972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7151587301081387201&amp;postID=3335991839946395972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/3335991839946395972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7151587301081387201/posts/default/3335991839946395972'/><link rel='alternate' type='text/html' href='http://zuble.blogspot.com/2007/02/new-stomping-grounds.html' title='New stomping grounds'/><author><name>Wing</name><uri>http://www.blogger.com/profile/02947569595687506777</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>
