<?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-9182309753824387217</id><updated>2012-02-16T02:41:43.042-08:00</updated><title type='text'>Cobbling &amp; Evangelizing Technology</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-518872983860620165</id><published>2011-12-25T22:57:00.000-08:00</published><updated>2011-12-25T23:24:37.593-08:00</updated><title type='text'>Windows vs. Mac OS X (It comes down to font rendering)</title><content type='html'>When it comes to which operating system someone likes, it's very much  based on what biases that person brings to the table. So no shock that  people who have been on Windows for years have numerous complaints about  Mac OS X or vice versa.&lt;br /&gt;&lt;br /&gt;However, there are differences that have nothing to do with user  interface design choices such as toolbars (or lack thereof), keyboard shortcuts, etc., etc.  One of the biggest differences between the two platforms is fonts, but more specifically, &lt;b&gt;font rendering&lt;/b&gt;. If you've used Windows for years, one of the first things you'll notice as you start using Mac OS X is that things, e.g., web pages, look &lt;span style="font-style: italic;"&gt;different&lt;/span&gt; and indeed it's not just your imagination. It turns  out how Apple renders fonts is different than how Microsoft does it on  Windows:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/items/2007/06/12.html" target="_blank"&gt;http://www.joelonsoftware.com/&lt;wbr&gt;items/2007/06/12.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I became acutely aware of the latter back in 2007 on account of noticing that the Windows version of Apple's &lt;a href="http://www.apple.com/safari/"&gt;Safari browser&lt;/a&gt;  made pages look different than what I had been accustomed to while  browsing with Firefox and IE (before I stopped using it years prior).&lt;br /&gt;&lt;br /&gt;Turns out, now that I've had a Mac for the past year, I've reached a  point where I prefer browsing on my Macintosh vs. my Windows system because of this  font rendering difference (how pages look).&lt;br /&gt;&lt;br /&gt;While I would agree with Spolsky that Windows' fonts are easier to  read, the difference isn't stunning. Text is clear on the Mac. It's just  that Windows uses less anti-aliasing and the pixel contrast, i.e. the  individual pixels that make up a single letter, is more pronounced on  account of &lt;a href="http://en.wikipedia.org/wiki/Jaggies"&gt;&lt;i&gt;the jaggies&lt;/i&gt;&lt;/a&gt;. Spolsky also writes:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;you'll find that most people don't really know what to choose, and will opt for the one that seems most familiar.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Iterating,  after actively using Mac OS X for a year, I now prefer browsing on my  Mac. It's created a bias that I would have to say, if I bought a laptop today,  it would be an Apple Macbook. (&lt;span style="font-weight: bold;"&gt;Aside&lt;/span&gt;: The Mac I got 12 months ago is a &lt;a href="http://www.apple.com/macmini/"&gt;Mac Mini&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;While font rendering is subtle, since it is visual and vision is  people's primary sense, it's a major anchor for ensconcing people into a  comfort zone. And since people are wont to resist change, it's very  hard to pry them away from said comfort zone once they gravitate to it. This all means that  people dropping Windows in favor of Macintoshes aren't likely to come  back anytime soon. As a bad portent for Microsoft, check out the following  &lt;span style="font-weight: bold;"&gt;AppleInsider&lt;/span&gt; article that came out last month (Nov. 2011):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.appleinsider.com/articles/11/11/14/mac_sales_surge_despite_slipping_european_pc_market.html" target="_blank"&gt;http://www.appleinsider.com/&lt;wbr&gt;articles/11/11/14/mac_sales_&lt;wbr&gt;surge_despite_slipping_&lt;wbr&gt;european_pc_market.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In summary, PC sales dropped double digits in both the UK &amp;amp;  Germany and close to 10% in France. But if companies selling PCs  in Europe are blaming the global recession, the Macintosh market for Apple in  Western Europe &lt;span style="font-weight: bold;"&gt;grew just shy of 20% year over year&lt;/span&gt;. I'll also remind the reader that Apple charges a premium for its hardware.&lt;br /&gt;&lt;br /&gt;In closing, while I very much still use Windows 7 on account of &lt;a href="http://windows.microsoft.com/en-US/windows/products/windows-media-center"&gt;Windows Media Center&lt;/a&gt; and my XBox360 &lt;a href="http://revision3.com/hdnation/top-5-christmas-blu-rays"&gt;acting as my DVR&lt;/a&gt; (check out the latter video link), nowadays if I'm browsing the web, more than likely it's on an Apple device (my Mac, iPad 2 or iPhone).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-518872983860620165?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/518872983860620165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=518872983860620165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/518872983860620165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/518872983860620165'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2011/12/windows-vs-mac-os-x-it-comes-down-to.html' title='Windows vs. Mac OS X (It comes down to font rendering)'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-23475209947397750</id><published>2011-09-27T21:08:00.000-07:00</published><updated>2011-11-07T09:29:27.993-08:00</updated><title type='text'>No, Google's Chrome Browser isn't the fastest browser by leaps and bounds (anymore)</title><content type='html'>Tech people (like the rest of the homosapiens) are experts at  mixing facts with opinion, a.k.a. &lt;span style="font-style: italic;"&gt;bias&lt;/span&gt;. In my view Firefox by and large caught up to  Chrome with release 4.0. Since then it has continued to make great  strides...&lt;br /&gt;&lt;br /&gt;Yet, I've noticed many people saying "Firefox is bloated, slow, blah,  blah, blah, blah, blah". One of them (who I don't know personally) is ZDNet blogger &lt;b&gt;Steven J. Vaughan-Nichols&lt;/b&gt;. In short, Steven trashes Firefox with every major release but worships Chrome's every release.  Merely juxtapose what he wrote not even one month ago about Firefox 6 when it was  released (the Mozilla team this year adopted a fast release cycle like  Google's for Chrome):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zdnet.com/blog/networking/firefox-6-a-firefox-too-far-review/1380"&gt;http://www.zdnet.com/blog/networking/firefox-6-a-firefox-too-far-review/1380&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Now compare that with what he wrote about Chrome 14 which came out a few days ago:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zdnet.com/blog/networking/chrome-14-the-best-web-browser-keeps-getting-better-review/1469?tag=search-results-rivers;item3"&gt;http://www.zdnet.com/blog/networking/chrome-14-the-best-web-browser-keeps-getting-better-review/1469?tag=search-results-rivers;item3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's opinion, "Firefox is bloated", then there's reality, Lifehacker just juxtaposed Firefox 7 with other major browsers:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lifehacker.com/5844150/browser-speed-tests-firefox-7-chrome-14-internet-explorer-9-and-more" target="_blank"&gt;http://lifehacker.com/5844150/&lt;wbr&gt;browser-speed-tests-firefox-7-&lt;wbr&gt;chrome-14-internet-explorer-9-&lt;wbr&gt;and-more&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Going back not even a month ago &lt;span style="font-weight: bold;"&gt;Tom's Hardware&lt;/span&gt; did JavaScript performance tests comparing the major browsers:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.tomshardware.com/reviews/web-browser-performance-standard-html5,3013-9.html"&gt;http://www.tomshardware.com/reviews/web-browser-performance-standard-html5,3013-9.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In terms of JavaScript performance, Firefox 6 beat Chrome 13 in 4 of 5 tests. And today Firefox 7 was released. In closing, if your frame of reference of Firefox is anchored in the distant past, you should look again. Beyond that, if the plugins you've used under Firefox have memory leaks, crash Firefox, etc., etc., that's not the Mozilla team's fault.&lt;br /&gt;&lt;br /&gt;I should also point out that Firefox for many years has supported &lt;a href="http://en.wikipedia.org/wiki/HTTP_pipelining"&gt;HTTP Pipelining&lt;/a&gt;. Chrome to this day does not support HTTP Pipelining which is part of the HTTP 1.1 specification that came out 10+ years ago. Chrome does feature an alternative called &lt;a href="http://www.chromium.org/spdy/spdy-whitepaper"&gt;SPDY&lt;/a&gt; however this is not part of the HTTP specification and you will only benefit from this if you are visiting Google web properties. The only &lt;span style="font-weight: bold;"&gt;popular&lt;/span&gt; browser that readily supports HTTP Pipelining is Firefox. One notable benefit is that as your connection latency goes up, e.g., 3G aircard, tethering on your laptop or God forbid, dialup, performance improves. If you find yourself browsing a lot on a 3G connection then Firefox with HTTP Pipelining is for you. Performance also goes up as the number of  distinct elements that need to be fetched goes up, e.g., lots of images  (which translate to that many more HTTP requests).&lt;br /&gt;&lt;br /&gt;HTTP Pipelining is the first thing I enable when I have a new Firefox profile. In the address bar simply type "about:config", search for "pipe" then set &lt;b&gt;network.http.&lt;span class="il"&gt;pipelining&lt;/span&gt;&lt;/b&gt; to &lt;b&gt;true&lt;/b&gt;. I also change &lt;b&gt;network.http.&lt;span class="il"&gt;pipelining&lt;/span&gt;.&lt;wbr&gt;maxrequests&lt;/b&gt; to 7.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-23475209947397750?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/23475209947397750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=23475209947397750' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/23475209947397750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/23475209947397750'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2011/09/no-chrome-isnt-fastest-browser-by-leaps.html' title='No, Google&apos;s Chrome Browser isn&apos;t the fastest browser by leaps and bounds (anymore)'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-7629773684401757921</id><published>2010-09-12T18:40:00.000-07:00</published><updated>2010-09-13T00:44:49.767-07:00</updated><title type='text'>Microsoft's Enhanced Mitigation Experience Toolkit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qeCrCZZbvYs/TI2B_Sao19I/AAAAAAAAAEI/Vg4KgRSQYt8/s1600/FirefoxWithEMET.png"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px; height: 251px;" src="http://1.bp.blogspot.com/_qeCrCZZbvYs/TI2B_Sao19I/AAAAAAAAAEI/Vg4KgRSQYt8/s320/FirefoxWithEMET.png" alt="" id="BLOGGER_PHOTO_ID_5516208042874034130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;A week ago Microsoft released version 2.0 of &lt;b&gt;EMET&lt;/b&gt; (Enhanced Mitigation Experience Toolkit):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c6f0a6ee-05ac-4eb6-acd0-362559fd2f04&amp;amp;displayLang=en" target="_blank"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c6f0a6ee-05ac-4eb6-acd0-362559fd2f04&amp;amp;displayLang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Don't know what EMET is? I highly suggest you use it to launch applications that talk on the Net, in  particular your browser. Here's a very technical video from Microsoft that talks about EMET:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/security/ff859539.aspx" target="_blank"&gt;http://technet.microsoft.com/en-us/security/ff859539.aspx&lt;/a&gt;&lt;span style="color: rgb(136, 136, 136);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Let  me give you a sample scenario. You visit a legitimate site that you've used for ages which  unbeknownst to you, ads being served up are coming from a compromised ad  server (&lt;a href="http://www.scmagazineus.com/vulnerable-ad-servers-exploited-to-compromise-sites/article/169700/"&gt;a scenario which by the way has happened many times&lt;/a&gt;). The malware then  attempts to leverage an &lt;a href="http://en.wikipedia.org/wiki/Arbitrary_code_execution" target="_blank"&gt;arbitrary code execution&lt;/a&gt;  flaw. Unfortunately for you, you're not very diligent about keeping your system up to date or you've ignored updating your system because well, "I'll do it later." Malware sent your way succeeds in leveraging an arbitrary code execution flaw that &lt;a href="http://en.wikipedia.org/wiki/Zero-day_attack" target="_blank"&gt;just surfaced with your browser of choice two days ago&lt;/a&gt; installing a backdoor and thus gaining complete control of your computer at which point the remote attacker can take whatever files they please, use your computer as part of a &lt;a href="http://searchexchange.techtarget.com/sDefinition/0,,sid43_gci896167,00.html"&gt;spam network&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Denial-of-service_attack"&gt;denial of service network&lt;/a&gt;, etc, etc. In short, your system is completely at someone else's mercy and you don't even know it. Let's take a more optimistic scenario. You're on a fully patched Windows 7 system with &lt;a href="http://windows.microsoft.com/en-US/windows7/products/features/user-account-control"&gt;UAC&lt;/a&gt; enabled so  you're safe (usually) from getting your machine taken over but malware comes in through your browser which isn't patched. You don't have the latest browser revision because you've put it off, turned off auto-updates or worse, there's no patch for an exploit that has surfaced. You're then unfortunate enough to visit a site with malware and a recent exploit is leveraged introducing rogue code into your system. That code is at the very least capable of reading and modifying files you use day to day. Whether they be explicit documents (such as MS Word) or implicit documents (the cookies in your browser). Unfortunately, your browser doesn't prevent the malicious code from reading any file(s) belonging to  you, in particular, browser cookies. After which,  someone starts going into your various online accounts with your active  cookies (which were conveniently sent to them over the Net) to see what they can  find.&lt;br /&gt;&lt;br /&gt;So how do you use EMET?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1&lt;/span&gt;) Go to the first link I provided - download and install EMET&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2&lt;/span&gt;) After launching EMET hit the &lt;b&gt;Configure Apps&lt;/b&gt; button in the lower right&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3&lt;/span&gt;) Hit the &lt;b&gt;Add&lt;/b&gt; button on the dialog box that comes up and specify the path to an executable you would like to protect, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;C:\Program Files (x86)\Mozilla Firefox\firefox.exe&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4&lt;/span&gt;) Hit the &lt;b&gt;Open&lt;/b&gt; button on the file browsing dialog (aka &lt;b&gt;OK&lt;/b&gt;).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5&lt;/span&gt;) Restart the application in question, in this example, &lt;i&gt;Firefox&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;(Look at blog post image)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;Firefox is now protected from a variety of attack vectors often used in &lt;b&gt;arbitrary code execution&lt;/b&gt;. The video elaborates on them quite well.&lt;br /&gt;&lt;br /&gt;Whereas &lt;a href="http://download.cnet.com/RemoveAdmin/3000-2381_4-10824971.html?tag=mncol"&gt;RemoveAdmin&lt;/a&gt; (a security tool that I authored) is all about leveraging OS level security, Microsoft's &lt;b&gt;EMET&lt;/b&gt;  is about maintaining the integrity of processes and thus, at the very  least, providing application level security, e.g., your browser cookies.  At worst, if you have an unpatched system (the OS) you could find  yourself with a system that's been botted, has had a keyboard logger  installed, etc., etc.&lt;br /&gt;&lt;br /&gt;In my particular case, I not only have added the browsers I use day to day to EMET (Chrome, Firefox), I've added all applications I regularly use that talk on the Internet. In particular, &lt;a href="http://www.zdnet.com/blog/security/apple-patches-13-itunes-security-holes/7252?tag=must-read"&gt;iTunes&lt;/a&gt;, &lt;a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-3137"&gt;WinAmp&lt;/a&gt;, &lt;a href="http://www.zdnet.com/blog/security/ms-outlook-flaw-adds-new-twist-to-uri-handling-saga/577"&gt;Outlook&lt;/a&gt;, Adobe's &lt;a href="http://www.zdnet.com/blog/security/adobe-ships-critical-pdf-reader-patch/7193?tag=content;search-results-rivers"&gt;PDF reader&lt;/a&gt;, &lt;a href="http://secunia.com/advisories/8742/"&gt;Windows' Media Player&lt;/a&gt; and Apple's &lt;a href="http://threatpost.com/en_us/blogs/new-remote-flaw-apple-quicktime-bypasses-aslr-and-dep-083010"&gt;QuickTime player&lt;/a&gt;. &lt;span style="font-weight: bold;"&gt;The links I've provided in the previous sentence point to security advisories for each of these applications they are not links to the products' respective web pages&lt;/span&gt;.  If you have doubts about what I'm saying, just visits those links. Yes, as hard as it for a lay person to comprehend, &lt;a href="http://www.zdnet.com/blog/security/critical-apple-quicktime-flaw-dings-windows-os/7141?tag=content;search-results-river"&gt;you can have your system compromised by watching a video&lt;/a&gt; pulled off a web site. This is why you should start using EMET today. &lt;b&gt;In short, I will never launch my browser from here on out without this tool&lt;/b&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;u&gt;Finally the following article surfaced after my initial blog post&lt;/u&gt;. Here's a scenario where an exploit of Adobe's PDF reader has surfaced, Adobe itself doesn't yet have a patch but through the use of EMET the exploit is short-circuited:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://news.cnet.com/8301-1009_3-20016161-83.html?tag=topTechContentWrap;editorPicks"&gt;http://news.cnet.com/8301-1009_3-20016161-83.html?tag=topTechContentWrap;editorPicks&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-7629773684401757921?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/7629773684401757921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=7629773684401757921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7629773684401757921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7629773684401757921'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/09/microsofts-enhanced-mitigation.html' title='Microsoft&apos;s Enhanced Mitigation Experience Toolkit'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/TI2B_Sao19I/AAAAAAAAAEI/Vg4KgRSQYt8/s72-c/FirefoxWithEMET.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-8125400768468089218</id><published>2010-07-22T11:30:00.000-07:00</published><updated>2010-08-06T13:46:01.326-07:00</updated><title type='text'>The Rise, Rise and RISE of Apple</title><content type='html'>Is the news at this point surprising?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nytimes.com/2010/07/21/technology/21apple.html?ref=technology"&gt;Apple's Profit Rises 78% on Appeal of New Devices&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apple's position is further cemented by one simple fact. The &lt;a href="http://www.apple.com/iphone/"&gt;iPhone&lt;/a&gt; has  fundamentally changed the way people operate, i.e. not only the things I can do on a day  to day basis while I'm on the move but also when I'm sitting at home. In contrast neither Windows or Mac OS X have fundamentally altered how I've interacted with personal computers for years. While in some cases they do provide interesting back end services such as Windows' &lt;a href="http://www.microsoft.com/windows/windows-media-center/get-started/default.aspx"&gt;Media Center&lt;/a&gt;, Netflix's streaming service is the primary manner in which I consume video and I don't need a personal computer for that.&lt;br /&gt;&lt;br /&gt;With Apple's latest firmware &lt;a href="http://arstechnica.com/apple/reviews/2010/06/ars-reviews-ios-4-whats-new-and-notable.ars"&gt;iOS 4&lt;/a&gt; I leave &lt;a href="http://www.skype.com/intl/en-us/get-skype/on-your-mobile/download/iphone-for-skype/"&gt;Skype&lt;/a&gt; running on the iPhone in the background all the time. I can make and receive various voice calls and bypass AT&amp;amp;T completely. At the same time &lt;a href="http://www.pandora.com/"&gt;Pandora&lt;/a&gt; runs in the background streaming music based on previous feedback I've given it. This all the while relaxing on the couch and web surfing. If Pandora isn't doing it for me, I can fire up &lt;a href="http://www.peepleware.com/index.php?product=remotex"&gt;RemoteX&lt;/a&gt; and control &lt;a href="http://www.winamp.com/"&gt;WinAmp&lt;/a&gt; to start streaming music from various different sites that are in my default playlist. The music then starts over the &lt;a href="http://www.klipsch.com/na-en/"&gt;Klipsch&lt;/a&gt; 5.1 speaker system on the PC.  If the music streams aren't doing it for me either, I can fire Apple's remote app, search through my entire &lt;a href="http://www.apple.com/itunes/"&gt;iTunes&lt;/a&gt; music library for a specific musician/song and start playing it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.apple.com/itunes/remote/"&gt;http://www.apple.com/itunes/remote/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then again maybe later in the day I decide that I'd rather watch some video content. I can fire up &lt;a href="http://www.boxee.tv/"&gt;Boxee&lt;/a&gt; on the PC, display it on my HDTV &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;and control the experience through my iPhone:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.boxee.tv/2009/03/15/boxee-iphone-remote-app-available-on-the-app-store/"&gt;http://blog.boxee.tv/2009/03/15/boxee-iphone-remote-app-available-on-the-app-store/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(&lt;span style="font-weight: bold;"&gt;Aside&lt;/span&gt;: If you haven't tried the latest &lt;span style="font-weight: bold;"&gt;Boxee&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;beta&lt;/span&gt; you're doing yourself a disservice, check it out)&lt;br /&gt;&lt;br /&gt;You see it's about choice, choice and even more choice.&lt;br /&gt;&lt;br /&gt;This is the fundamental difference between the Apple of old and the  Microsoft of old. Many years (+15?) ago Bill Gates used to talk about "information at your  fingertips" but his vision was very desktop centric and  predated the rise of the World Wide Web which was spearheaded by forces not aligned with Gates' visions and Microsoft's fortes. We've reached a point where it's about &lt;span style="font-style: italic; font-weight: bold;"&gt;consumption at your fingertips&lt;/span&gt;. Nowhere is this better showcased than what happened to &lt;a href="http://www.flipboard.com/"&gt;Flipboard&lt;/a&gt; recently:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bits.blogs.nytimes.com/2010/08/04/flipboard-stumbles-in-its-first-days/"&gt;http://bits.blogs.nytimes.com/2010/08/04/flipboard-stumbles-in-its-first-days/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Excerpt&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Flipboard, which uses Amazon Web Services, &lt;span style="font-weight: bold;"&gt;has been doubling its server  capacity each day&lt;/span&gt;. The company would not reveal how many people have  signed up for the service, but said it is a good percentage of iPad  owners, of which there are more than 3.3 million.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Personal computers have been as much about &lt;span style="font-weight: bold; font-style: italic;"&gt;content creation&lt;/span&gt; as content  consumption which is why a desktop centric approach placed on a  small device in the palm of your hand doesn't work and helps explain the &lt;a href="http://www.engadget.com/2010/06/22/apple-has-sold-three-million-ipads-in-80-days/"&gt;runaway success of the iPad&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One other fundamental change Apple has elicited from consumers is they've opened up their wallets. While the sales of software to corporations has been par for the course for decades, consumers became extremely frugal quite some time ago getting very used to the idea of FREE. For example, I can recall the days when you had to pay for anti-virus software for your home computer, there's &lt;a href="http://www.microsoft.com/security_essentials/"&gt;no reason anyone should pay for anti-virus software today&lt;/a&gt;. No doubt this is one factor why &lt;a href="http://www.pcworld.com/article/140419/compusa_closing_up_shop.html"&gt;CompUSA exited the brick &amp;amp; mortar retail space&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Specifically, the rise of micro-transactions  and digital distribution has put an end to the walled garden of various middle men relegating them to the dust bin. With many applications either free or 99 cents, Apple's App Store has ushered a new age where people buy software with no significant concern for the money they spend or the value they derive. After all, if it's a lemon, the most they're out of is 99 cents. Yes, &lt;a href="http://www.scientificamerican.com/article.cfm?id=why-things-cost-1995"&gt;no more $9.95 and $19.95 software specials thank you very much&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As middle men's leverage disappears with new digital distribution, it allows people that actually create products to achieve independent wealth:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bits.blogs.nytimes.com/2010/06/25/doodle-jump-reaches-five-million-downloads/"&gt;http://bits.blogs.nytimes.com/2010/06/25/doodle-jump-reaches-five-million-downloads/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The creators  of &lt;b&gt;Doodle Jump&lt;/b&gt; have sold millions of units. And the  math is quite simple, app developers get 70% of the sale which means Doodle Jump's creators are now collectively millionaires and no surprise they quit their day jobs to focus on their new entertainment software business.&lt;br /&gt;&lt;br /&gt;This is the kind of story that would never have happened 5 years ago if you were talking mobile applications.  It's no surprise that because of stories like this along with the  iPhone's market/mindshare, developers have flocked to Apple's platform.  It also means that Microsoft, Google, &lt;a href="http://www.nokia.com/"&gt;Nokia&lt;/a&gt; and &lt;a href="http://www.rim.com/"&gt;RIM (Blackberry)&lt;/a&gt; have their work  cut out for them trying to establish similar mobile software ecosystems.&lt;br /&gt;&lt;br /&gt;While Google has made lots of progress with its Android platform, I have to point out that all of the things I mentioned that I did at home with my iPhone (examples I gave earlier of controlling my PC) have absolutely no reliance on the telephone network (AT&amp;amp;T). Everything I talked about can be done with an &lt;span style="font-weight: bold;"&gt;iPod Touch&lt;/span&gt; or an &lt;span style="font-weight: bold;"&gt;iPad&lt;/span&gt; (via Wifi). Meaning the same software that works on the iPhone works on the latter Apple devices and such a dynamic or complementary ecosystem doesn't exist for other vendors. While there is movement in the Android space with respect to tablets, I'm talking about the here and now.&lt;br /&gt;&lt;br /&gt;Which precisely leads into my key point. The reason why Windows has had a vise grip on the desktop is  because of its &lt;span style="font-weight: bold; font-style: italic;"&gt;ecosystem of choices&lt;/span&gt;. Whether its software drivers to drive an old laser printer to DVD creation software to photo imaging  software, you name it, a turnkey solution for the consumer on Windows is probably there.&lt;br /&gt;&lt;br /&gt;Switching to the mobile market, until the iPhone came along, there was no such equivalent &lt;span style="font-style: italic;"&gt;ecosystem of choices&lt;/span&gt;. The telephone companies with their  typical lack of vision did not make installing applications easy nor did they pioneer the smart phone category with a partner. Apple created the category and AT&amp;amp;T was willing to go along for the ride. With the introduction of the Apple &lt;a href="http://www.apple.com/iphone/apps-for-iphone/"&gt;App Store&lt;/a&gt;, seemingly overnight an explosion of choices for consumers became an &lt;span style="font-style: italic; font-weight: bold;"&gt;ecosystem of choices&lt;/span&gt;. Which means the &lt;span style="font-weight: bold;"&gt;average&lt;/span&gt; consumer (jailbreakers, hackers, idealists, open source zealots need not apply) stands to lose more peripheral consumption capabilities than gain if they leave Apple's platform. Not being able to do many things you're used to becomes an extremely powerful dissuading force and people are very much creatures of habit further reducing the chances of them jumping ship.&lt;br /&gt;&lt;br /&gt;As  Microsoft, Google, RIM and Nokia will find, unseating such an ecosystem of choices is not easy. The peripheral advantages often outweigh enticements like "FREE". This is why &lt;a href="http://www.openoffice.org/"&gt;OpenOffice&lt;/a&gt; hasn't suddenly supplanted  &lt;a href="http://office.microsoft.com/en-us/"&gt;Microsoft Office&lt;/a&gt; despite being "FREE". Or why LINUX desktops haven't supplanted Windows desktops despite, again, being "FREE".&lt;br /&gt;&lt;br /&gt;It boils down to the &lt;span style="font-style: italic;"&gt;ecosystem of choices&lt;/span&gt; and the side effect of having lots of choice (vs. few or no  choices).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-8125400768468089218?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/8125400768468089218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=8125400768468089218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/8125400768468089218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/8125400768468089218'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/07/rise-rise-and-rise-of-apple.html' title='The Rise, Rise and RISE of Apple'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-4691150867067743561</id><published>2010-06-20T12:12:00.000-07:00</published><updated>2010-06-20T12:22:42.249-07:00</updated><title type='text'>Microsoft Security Essentials</title><content type='html'>&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;div&gt;This weekend I moved away from the &lt;a href="http://free.avg.com/us-en/homepage"&gt;freebie AVG&lt;/a&gt; as my antivirus software to &lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;a href="http://www.microsoft.com/security_essentials/"&gt;Microsoft Security Essentials&lt;/a&gt;&lt;/span&gt; &lt;/b&gt;(MSE). This &lt;a href="http://lifehacker.com/"&gt;Lifehacker&lt;/a&gt; article clinched the deal for me:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;a href="http://lifehacker.com/5559102/microsoft-security-essentials-finds-unknown-malware-but-avoids-false-positives" target="_blank" style="color: rgb(119, 153, 187); "&gt;http://lifehacker.com/5559102/&lt;span style="background-color: rgb(255, 255, 204); "&gt;&lt;wbr&gt;microsoft&lt;/span&gt;-&lt;span style="background-color: rgb(255, 255, 204); "&gt;security&lt;/span&gt;-&lt;span style="background-color: rgb(255, 255, 204); "&gt;essentials&lt;/span&gt;-&lt;wbr&gt;finds-unknown-malware-but-&lt;wbr&gt;avoids-false-positives&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However it was this &lt;a href="http://arstechnica.com/"&gt;Arstechnica&lt;/a&gt; article that elevated MSE enough in my mind and started me on the road to this decision. Basically a new attack vector was concocted in the wild that bypasses practically all antivirus software, except for MSE:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://arstechnica.com/microsoft/news/2010/05/microsoft-mse-safe-from-windows-kernel-hook-attack.ars" target="_blank" style="color: rgb(119, 153, 187); "&gt;http://arstechnica.com/&lt;span style="background-color: rgb(255, 255, 204); "&gt;microso&lt;wbr&gt;ft&lt;/span&gt;/news/2010/05/&lt;span style="background-color: rgb(255, 255, 204); "&gt;microsoft&lt;/span&gt;-mse-&lt;wbr&gt;safe-from-windows-kernel-hook-&lt;wbr&gt;attack.ars&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is an article covering the technical details on this new attack vector:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://arstechnica.com/security/news/2010/05/multicore-cpus-move-attack-from-theoretical-to-practical.ars" target="_blank" style="color: rgb(119, 153, 187); "&gt;http://arstechnica.com/&lt;wbr&gt;security/news/2010/05/&lt;wbr&gt;multicore-cpus-move-attack-&lt;wbr&gt;from-theoretical-to-practical.&lt;wbr&gt;ars&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Given that Microsoft Security Essentials has better detection of malware than AVG (according to the information presented by Lifehacker, which I trust), fewer false positives, is not vulnerable to kernel hook attacks and last but not least is &lt;b&gt;FREE&lt;/b&gt;, I was sold.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;MSE is available for Windows XP, Windows Vista and Windows 7.&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-4691150867067743561?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/4691150867067743561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=4691150867067743561' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/4691150867067743561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/4691150867067743561'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/06/microsoft-security-essentials.html' title='Microsoft Security Essentials'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-6577941818965912196</id><published>2010-06-10T10:32:00.000-07:00</published><updated>2010-06-20T15:05:38.764-07:00</updated><title type='text'>"Safari 5 tested: Chrome, Opera still have JavaScript edge"</title><content type='html'>I was pretty sure it wasn't my imagination when I opined that  Apple's just released &lt;a href="http://www.apple.com/safari/"&gt;Safari 5&lt;/a&gt; felt significantly faster than Safari 4 on Windows (note the closing  paragraph):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://arstechnica.com/apple/news/2010/06/safari-5-tested-chrome-opera-still-have-javascript-edge.ars"&gt;http://arstechnica.com/apple/news/2010/06/safari-5-tested-chrome-opera-still-have-javascript-edge.ars&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Make note of the &lt;a href="http://www2.webkit.org/perf/sunspider-0.9/sunspider.html"&gt;Sunspider&lt;/a&gt; graph, namely IE 8's performance (or lack  thereof). &lt;a href="http://www.webmonkey.com/2010/05/new-ie9-preview-features-more-speed-standards-support/"&gt;IE 9&lt;/a&gt; however seems like it might be worthwhile to use. Yes,  necessity or rather, loss of market share in Microsoft's case, is the mother of invention (swift kick in the pants). Just look at the trend for IE on this chart:&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Usage_share_of_web_browsers_%28Source_Net_Applications%29.svg"&gt;&lt;br /&gt;http://en.wikipedia.org/wiki/File:Usage_share_of_web_browsers_%28Source_Net_Applications%29.svg&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-6577941818965912196?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/6577941818965912196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=6577941818965912196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6577941818965912196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6577941818965912196'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/06/safari-5-tested-chrome-opera-still-have.html' title='&quot;Safari 5 tested: Chrome, Opera still have JavaScript edge&quot;'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-2238788970183485071</id><published>2010-06-07T18:34:00.001-07:00</published><updated>2010-06-07T23:01:34.422-07:00</updated><title type='text'>Apple Releases Safari 5 Today</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;As part of all the noise at the &lt;a href="http://developer.apple.com/wwdc/"&gt;World Wide Developer's Conference&lt;/a&gt; today, Apple released the next major version (5.x) of their Safari web browser for the Macintosh and Windows platforms. Safari 5 is now available from Apple's web site:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:small;"  &gt;&lt;a href="http://www.apple.com/safari/download/"&gt;http://www.apple.com/safari/download/&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After some initial empirical testing, Safari 5 (on the PC) feels much faster than Safari 4. It seems Apple made a real attempt at polishing the Windows version of Safari whereas in the past it seemed Apple was releasing a tool so web developers &amp;amp; testers could see how things &lt;b&gt;&lt;i&gt;might&lt;/i&gt;&lt;/b&gt; look on Mac OS X (the premise being it wasn't readily available). It feels snappy as I write this entry on &lt;a href="http://www.blogger.com/"&gt;Blogger.com&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Here's Lifehacker's writeup on Safari 5:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://lifehacker.com/5557731/first-look-at-whats-new-in-safari-5"&gt;http://lifehacker.com/5557731/first-look-at-whats-new-in-safari-5&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Finally, the question of whether to make Safari or any other particular browser my default is irrelevant for me since I use the most excellent &lt;b&gt;Browser Chooser&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://lifehacker.com/5352193/browser-chooser-asks-you-which-browser-to-open-new-links-in"&gt;http://lifehacker.com/5352193/browser-chooser-asks-you-which-browser-to-open-new-links-in&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-2238788970183485071?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/2238788970183485071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=2238788970183485071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/2238788970183485071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/2238788970183485071'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/06/apple-releases-safari-5-today.html' title='Apple Releases Safari 5 Today'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-6384608314429010829</id><published>2010-06-02T08:17:00.001-07:00</published><updated>2010-06-02T09:00:04.112-07:00</updated><title type='text'>Pioneer's Kuro Elite: Best flat-panel HDTV ever</title><content type='html'>The subject of this blog post is a quote from CNET:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.cnet.com/8301-17938_105-10054347-1.html"&gt;http://news.cnet.com/8301-17938_105-10054347-1.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;A couple of weeks ago my Sony CRT HDTV died. The &lt;a href="http://reviews.cnet.com/direct-view-tvs-crt/sony-wega-kv-36xbr800/1707-6481_7-9453440.html"&gt;particular model I had&lt;/a&gt; it turns out was extremely prone to failure. Visiting forums, I found them littered with people with issues. In some cases within two or three years after the TV was purchased in the early 2000's. As I did my research I weighed the pros and cons of trying to get the damn thing fixed. It turns an electronics repair place happened to be literally one block away from where I lived and they were well acquainted with the Sony model and its failure problems (a bad sign). They told me it would likely be $350 &lt;span style="font-weight: bold; font-style: italic;"&gt;if&lt;/span&gt; it was fixable.&lt;br /&gt;&lt;br /&gt;The "if" caught my attention and started me on the path of moving to a flat panel. It was a difficult decision for me since the video fidelity of the CRT was unmatched by flat panels. Even so, based on the reading I did on various forums the CRT could be a lost cause and I didn't want to sink any money on a 250 lb. dead weight.&lt;br /&gt;&lt;br /&gt;So two days after its death I visited both &lt;span style="font-style: italic;"&gt;Fry's Electronics&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;Best Buy&lt;/span&gt; and I was &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; impressed with the flat panel HDTVs I saw. Then on the same day on a whim I decided to visit &lt;a href="http://www.magnoliaav.com/"&gt;Magnolia Hi-Fi&lt;/a&gt; in Seattle. When a salesman approached me I immediately commented that all the HDTVs I had seen that day were mediocre and that I was there hoping to be wowed by an HDTV but that I wasn't holding my breath. Before not too long he asked, "Are you familiar with Pioneer's &lt;span style="font-style: italic;"&gt;Elite&lt;/span&gt; line?" I nodded. He then said something that immediately raised an eyebrow, "Are you familiar with the Kuro line of displays?" I responded with an affirmative but I also knew Pioneer was no longer making the Kuro line and that that even used they were expensive. Pioneer's Kuro line were reference displays and they blew everything else out of the water when it came to &lt;a href="http://en.wikipedia.org/wiki/1080p"&gt;1080p&lt;/a&gt; video fidelity. But as my luck would have it, Magnolia's manager actively tries to find Kuros for 'finicky' people like myself (aka videophiles). I had already seen BluRay playback over HDMI on a 50" Kuro in early 2009 and was utterly and thoroughly impressed (up until then no flat panel had impressed me).&lt;br /&gt;&lt;br /&gt;I didn't need to be sold on the Kuro line. I didn't act back then because my Sony CRT was still working and I was extremely content with it given it didn't exhibit the graininess of flat panels when playing non-HD content (there's still a &lt;span style="font-weight: bold;"&gt;lot &lt;/span&gt;of non-HD content out there, e.g., streaming &lt;a href="http://www.hulu.com/"&gt;Hulu&lt;/a&gt;). I had been hoping the CRT would last me until 2015 when perhaps 50" &lt;a href="http://en.wikipedia.org/wiki/Organic_LED"&gt;OLED&lt;/a&gt; flat panels were available en masse but that wasn't meant to be.&lt;br /&gt;&lt;br /&gt;When the salesman told me they had a brand new 50" Kuro in house, there was nothing else for him to say, I laid down the plastic. Magnolia didn't have a stand for it in stock so I picked it up two weeks later (back ordered). As I made small talk with my sales person I asked him if he still had the other Kuro in stock (they had 2 when I picked mine up) and he said, "I'm not sure but now you have me curious." He dug around in his inventory system and not only was the other one gone but there were 20 individuals who had laid down money at Magnolia stores across the US to get their hands on a Kuro when and if they became available.&lt;br /&gt;&lt;br /&gt;The other small detail is that the CNET review is for the Kuro with the TV tuner, the Kuro I purchased doesn't have a built in tuner:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pioneerelectronics.com/PUSA/Products/HomeEntertainment/PlasmaTVs+Monitors/EliteMonitors/ci.PRO-101FD.Kuro"&gt;http://www.pioneerelectronics.com/PUSA/Products/HomeEntertainment/PlasmaTVs+Monitors/EliteMonitors/ci.PRO-101FD.Kuro&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;I'm using the &lt;a href="http://www.amazon.com/Samsung-DTBH260F-HDTV-Terrestrial-Receiver/dp/B000JV6TQY"&gt;Samsung HD tuner&lt;/a&gt; I had been using on the Sony CRT. I pointed out the &lt;a href="http://www.cnet.com/"&gt;CNET&lt;/a&gt; review since they're a third party singing the praises of the Kuro. It's not uncommon for CNET to make a comparison to the Kuro displays when reviewing a higher end HDTV. However, up to this day, no one has surpassed the Kuro line.&lt;br /&gt;&lt;br /&gt;All I can say is, I lucked out and I'm extremely pleased with the Kuro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-6384608314429010829?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/6384608314429010829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=6384608314429010829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6384608314429010829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6384608314429010829'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/06/pioneers-kuro-elite-best-flat-panel.html' title='Pioneer&apos;s Kuro Elite: Best flat-panel HDTV ever'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-6856372957598092626</id><published>2010-04-02T00:10:00.001-07:00</published><updated>2010-06-02T08:09:14.163-07:00</updated><title type='text'>A Tale of Two iPads</title><content type='html'>This NYTimes review sums up the two sentiments that are behind the iPad. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.nytimes.com/2010/04/01/technology/personaltech/01pogue.html?ref=technology"&gt;http://www.nytimes.com/2010/04/01/technology/personaltech/01pogue.html?ref=technology&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In short, many tech people convince themselves of the lack of the iPad's utility due to comparisons with traditional computers. I might point out that some people privy to the early Internet believed it should not be made readily available to the masses. The reasons were varied but I assure you, the root of some of it was mere technical snobbery.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I completely agree with the New York Times reviewer's assessment, if you are not a tech person, Apple has created &lt;i&gt;&lt;b&gt;the computer for the rest of us&lt;/b&gt;&lt;/i&gt;. Funny thing is, I decided to do some googling to try to find references to that old Apple slogan but instead I found someone saying exactly what I'm saying here:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.theroot.com/views/techies-are-wrong-about-ipad"&gt;http://www.theroot.com/views/techies-are-wrong-about-ipad&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The iPad is not even out yet (2 more days) and when you view the applications that are being released for it, it is truly impressive (the Netflix one took me by surprise):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://gizmodo.com/5507569/gizmodos-essential-ipad-apps?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed:+gizmodo/full+%28Gizmodo%29&amp;amp;utm_content=Google+Reader"&gt;http://gizmodo.com/5507569/gizmodos-essential-ipad-apps&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I ask you one simple question - when was the last time you saw such a movement for any other device?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-6856372957598092626?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/6856372957598092626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=6856372957598092626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6856372957598092626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6856372957598092626'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/04/tale-of-two-ipads.html' title='A Tale of Two iPads'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-9100381951104704396</id><published>2010-03-21T10:34:00.000-07:00</published><updated>2010-03-21T11:13:47.313-07:00</updated><title type='text'>Ha! We beat Apple! (Dream on)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qeCrCZZbvYs/S6ZfCcmaXEI/AAAAAAAAADw/X1VcujOC72s/s1600-h/TabletBoy.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_qeCrCZZbvYs/S6ZfCcmaXEI/AAAAAAAAADw/X1VcujOC72s/s320/TabletBoy.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5451148894620245058" /&gt;&lt;/a&gt;&lt;br /&gt;The nay sayers lined up when Apple announced the iPad but arguments such as "I'll get a general tablet so  I can run whatever I want" miss the point. The point being these same critics aren't running off to buy a competing device like the &lt;a href="http://www.engadget.com/2010/01/06/the-hp-slate/"&gt;HP slate gizmo&lt;/a&gt; announced roughly two months prior. In short, the Apple iPad isn't intended for them (barring &lt;i&gt;hot air&lt;/i&gt;). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I read an excellent article on &lt;a href="http://www.tomshardware.com/"&gt;Tom'sHardware&lt;/a&gt; entitled &lt;a href="http://www.tomshardware.com/news/tablet-islate-ipad-netbook-notebook,9929.html"&gt;5 Reasons Tablets Suck And You Won't Buy One&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Point number 4 is key. It should have been number 1, underlined and accentuated with a headline tag &amp;lt;H&gt;. &lt;b&gt;&lt;i&gt;Interface&lt;/i&gt;&lt;/b&gt; is why previous tablet offerings have been relegated to niche status. Is there a particular reason for this? Yes, Rob Enderle sums it up nicely:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://technologizer.com/2010/03/08/future-windows/3/"&gt;http://technologizer.com/2010/03/08/future-windows/3/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;Excerpt&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Now the most successful company as measured by profitability is Apple–who appears to be still locked into the proprietary hardware and software model that proceeded Windows’ success. &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;The problem with the PC model and the even more complex cell phone OS model was that no one person owned the customer experience. As a result, with the exception of Apple, PC vendors started doing stupid things like not assuring the service experience or putting software that reduced reliability (crapware) on the systems they were selling. In addition, complexity and an excessive focus on cost reductions got out of hand, significantly reducing the perceived quality of the system.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When the iPad's sales numbers are announced in a year (with unit sales in the millions), the usual will happen. Microsoft will feel the need to duplicate Apple's success and will assemble a &lt;i&gt;crack team&lt;/i&gt; to provide a competitive offering. Haven't we been here before? Yes. &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Zune"&gt;Zune&lt;/a&gt; trying to take on the iPod. This after Microsoft's first response to the iPod &lt;a href="http://en.wikipedia.org/wiki/Microsoft_PlaysForSure"&gt;Plays for Sure&lt;/a&gt; completely fell on its face. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do you see a pattern here? Continual reaction to Apple's market success stories. This all underscores my strong opinion that Microsoft's leadership lacks vision. Steve Jobs despite his warts (he's not the nicest person if rumors are true) is a tech visionary.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Up until now, Microsoft has simply told hardware vendors to slap plain jane Windows on a keyboardless computer. Once again, complacency and myopia hold Microsoft back.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-9100381951104704396?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/9100381951104704396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=9100381951104704396' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/9100381951104704396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/9100381951104704396'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/03/ha-we-beat-apple-dream-on.html' title='Ha! We beat Apple! (Dream on)'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/S6ZfCcmaXEI/AAAAAAAAADw/X1VcujOC72s/s72-c/TabletBoy.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-3568849631597745791</id><published>2010-02-26T22:32:00.000-08:00</published><updated>2010-02-26T23:55:15.075-08:00</updated><title type='text'>How Microsoft Lost the Platform War</title><content type='html'>&lt;p&gt;I'm a big fan of Joel Spolsky's blog:&lt;/p&gt;&lt;p&gt;&lt;a href="http://joelonsoftware.com/"&gt;http://joelonsoftware.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Joel Spolsky has a lot of software development experience. While having worked at Microsoft in the 90's it is clear from his writing that his talents are mutually exclusive from those days. Microsoft was just another employer on the road of life. Today he runs &lt;a href="http://www.fogcreek.com/"&gt;FogCreek Software&lt;/a&gt; in New York City. One of my favorite postings from Joel was entitled &lt;a href="http://joelonsoftware.com/articles/APIWar.html"&gt;How Microsoft Lost the API War&lt;/a&gt; written back on June 13, 2004. In technological terms this is now ancient history. However, what Joel wrote back then is still relevant in terms of how Microsoft lost the hearts and minds of software developers. While writing that column Joel took a tangent:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why Apple and Sun Can't Sell Computers&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;Well, of course, that's a little bit silly: of course Apple and Sun can sell computers, but not to the two most lucrative markets for computers, namely, the corporate desktop and the home computer. Apple is still down there in the very low single digits of market share and the only people with Suns on their desktops are at Sun. (Please understand that I'm talking about large trends here, and therefore when I say things like "nobody" I really mean "fewer than 10,000,000 people," and so on and so forth.)&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I wrote to Joel Spolsky in the past year and mused how those words no longer hold true (about Apple anyway). I pointed out that half of my team members at work were operating with Apple Macbooks.  &lt;/p&gt;&lt;p&gt;Then today I caught this on the New York Times:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.nytimes.com/external/venturebeat/2010/02/26/26venturebeat-os-x-share-up-29-in-past-year-slowly-chipping-1524.html"&gt;OS X Share Up 29% in Past Year, Slowly Chipping Away at Microsoft&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Excerpt&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;&lt;em&gt;Apple’s relative share has grown by 29.4% in the past year, while Windows lost 3.8%. Mobile increased the most in the past year, more than doubling its share of web consumption.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Adding fuel to the fire is another potential paradigm shift - tablet/slate computing. While there will be various Windows 7 based tablet products on the market, I have a very high degree of confidence Apple's sales of the &lt;a href="http://www.apple.com/ipad/"&gt;iPad&lt;/a&gt; will likely marginalize these offerings. This is an opinion I immediately formed when the iPad was announced and it is write ups like that of Brian X. Chen from &lt;a href="http://www.wired.com/"&gt;Wired&lt;/a&gt; that reinforce this, i.e. he didn't write "What the &lt;a href="http://www.engadget.com/2010/01/06/the-hp-slate/"&gt;HP slate&lt;/a&gt; Means for the Future of Computing."&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.wired.com/gadgetlab/2010/02/ipad-future/"&gt;What the iPad Means for the Future of Computing&lt;/a&gt;&lt;/p&gt;&lt;p&gt;At this point you're guessing I'm writing this on a Macintosh. Nope. I use Windows 7 day to day. However, I'm not an ostrich with its head buried in the sand. I see reality. Microsoft &lt;a href="http://www.zdnet.com/"&gt;ZDNet&lt;/a&gt; blogger Ed Bott seems to be on the same wavelength:&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.zdnet.com/Bott/?p=1740&amp;amp;tag=wrapper;col1"&gt;Like I said, apps matter.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;So why is Microsoft incapable of responding appropriately? Read the words of a former Microsoft Vice President:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.nytimes.com/2010/02/04/opinion/04brass.html?pagewanted=1&amp;amp;ref=opinion"&gt;Microsoft’s Creative Destruction&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In short, Microsoft is severely hobbled by a Balkinzation stemming from differing agendas among its product groups, a &lt;strong&gt;lack of vision&lt;/strong&gt; (Ballmer at best is a Chief Operating Officer, he has no vision whatsoever and the longer he stays the more Microsoft is damaged) and the usual myopia found at a large company wanting to protect cash cows originating in the distant past (Office, Windows).&lt;/p&gt;&lt;p&gt;Until Microsoft has a &lt;em&gt;come to Jesus&lt;/em&gt; moment (often precipitated by lots of layoffs &amp;amp; loss of market share) nothing will change. Except by then, it could very well be too late...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-3568849631597745791?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/3568849631597745791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=3568849631597745791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3568849631597745791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3568849631597745791'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/02/how-microsoft-lost-platform-war.html' title='How Microsoft Lost the Platform War'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-3248816561380308527</id><published>2010-02-04T02:37:00.000-08:00</published><updated>2010-02-26T23:58:33.207-08:00</updated><title type='text'>Adobe's Flash R.I.P.?</title><content type='html'>&lt;div&gt;Adobe is frustrated at Steve Jobs as Apple's mobile devices increasingly become a bigger player in the Internet experience. The iPhone platform which was released three years ago still does not have Flash and that does not seem like it will change anytime soon. But it's not entirely Apple's fault. Adobe's Flash platform isn't conducive to long battery usage. Simple as that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The recently announced &lt;a href="http://www.apple.com/ipad/"&gt;Apple iPad&lt;/a&gt; along with advances in &lt;a href="http://en.wikipedia.org/wiki/HTML5"&gt;HTML5&lt;/a&gt; will only accelerate the trend of companies rebuking Adobe's Flash platform over the long term. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It turns out, Adobe's frustrations are well grounded (in fear). If content creators start considering the growing Apple userbase and stop leveraging Flash because they'd rather not alienate Apple device users, it means a long and slow death spiral for Adobe's platform. &lt;b&gt;Fact&lt;/b&gt;: Adobe makes a LOT of money selling content creation software, Adobe doesn't make any money on people downloading the Flash plugin. Adobe is one of the largest software vendors for the Windows platform outside of Microsoft itself, e.g., &lt;a href="http://en.wikipedia.org/wiki/Adobe_Photoshop"&gt;Photoshop&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Adobe_Dreamweaver"&gt;Dreamweaver&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Portable_Document_Format"&gt;PDF&lt;/a&gt; software, etc., etc. In short, Adobe makes a large portion of its revenue selling content creation tools. If one of its major formats dies, i.e. Flash, that's a serious blow to Adobe.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Case in point, remember when &lt;a href="http://en.wikipedia.org/wiki/RealNetworks"&gt;Real Networks&lt;/a&gt; blazed trails with respect to streaming audio/video over the Internet? Well, look where they are now. I can't remember the last time I installed any of Real's software and given the fact that practically no one puts out content in Real's format anymore, that won't be changing anytime soon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://mastercobbler.blogspot.com/2010/01/chrome-40-html-5-video-playback.html"&gt;I wrote about HTML5 a few days ago&lt;/a&gt; which shimmys itself in a position that essentially starts loosening Flash's vice grip on video playback. It seems I'm not the only one with this opinion:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"HTML vs. Flash: Can a turf war be avoided?"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://news.cnet.com/8301-30685_3-20000037-264.html?tag=newsLeadStoriesArea.1"&gt;http://news.cnet.com/8301-30685_3-20000037-264.html?tag=newsLeadStoriesArea.1&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's an excerpt:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;Bruce Lawson, Web standards evangelist for browser maker Opera Software, believes HTML and the other technologies inevitably will replace Flash and already collectively are "very close" to reproducing today's Flash abilities. &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;"The Web (including video, games, animation) is too vital a platform for business, communication, and society to be in the hands of any single vendor," Lawson said. "But it'll be a while; there is a huge body of existing content that uses Flash."&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Both Lawson and I have come to the same conclusion - the long term future for Adobe's Flash platform is not bright (pun intended).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-3248816561380308527?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/3248816561380308527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=3248816561380308527' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3248816561380308527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3248816561380308527'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/02/adobes-flash-rip.html' title='Adobe&apos;s Flash R.I.P.?'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-4060725873206512878</id><published>2010-01-28T00:15:00.000-08:00</published><updated>2010-02-27T00:01:43.507-08:00</updated><title type='text'>The (Internet) World In Two Hands</title><content type='html'>David Morgenstern a blogger from &lt;a href="http://www.zdnet.com/"&gt;ZDNet&lt;/a&gt; cuts to the heart of the matter as far as what Apple's newly &lt;a href="http://www.engadget.com/2010/01/27/apple-ipad-first-hands-on/"&gt;iPad&lt;/a&gt; announced represents, "The iPhone is a device that puts the world into one hand; the iPad, two  hands." Read on if you like:&lt;br /&gt;&lt;a href="http://blogs.zdnet.com/Apple/?p=5890&amp;amp;tag=wrapper;col1"&gt;&lt;br /&gt;http://blogs.zdnet.com/Apple/?p=5890&amp;amp;tag=wrapper;col1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I could not agree more. A consistent behavior I've seen of naysayers is a continual comparison of the newly announced iPad vs. laptops.&lt;br /&gt;&lt;br /&gt;Here's one scenario that I don't see any laptop or netbook taking on. &lt;a href="http://www.engadget.com/2009/01/07/vizio-connected-hdtv-directly-streams-netflix-movies/"&gt;Increasingly HDTVs are coming with Ethernet ports to stream content off the Net&lt;/a&gt;. But who says they have to act purely as clients? That is, reading information, e.g., movies off Netflix's video servers. Why can't the TV &lt;span style="font-style: italic;"&gt;be the server&lt;/span&gt;? Albeit a really simple server. Like the kind where instead of relying on infrared signals it abides by a well known command protocol coming through its Ethernet connection.&lt;br /&gt;&lt;br /&gt;So before too long the TV industry devises a standard (that would be &lt;span style="font-style: italic;"&gt;layer 7 application protocol &lt;/span&gt;for all the geeks) for controlling televisions via Ethernet interfaces. Then, before you know it, you'll see a remote control application for the iPad (or its posterity) where every living room device that has a remote will have its buttons represented as a &lt;span style="font-style: italic;"&gt;skin&lt;/span&gt; overlaid on the iPad's surface. This is one of many scenarios that comes to mind where a laptop or netbook simply does not make the grade and looking at the iPad strictly through such a lens falls short.&lt;br /&gt;&lt;br /&gt;Which is why I couldn't agree more with the title of Morgenstern's blog post "Dude, the iPad isn't a notebook - get over it!"&lt;br /&gt;&lt;br /&gt;If you have doubts about the enthusiasm the iPad generated, I can tell you empirically that as Steve Jobs unveiled Apple's latest creation, tech sites were being hammered with traffic. I found &lt;a href="http://www.engadget.com/"&gt;Engadget&lt;/a&gt; and ZDNet to be noticeably slow as the morning of the iPad's unveiling wore on. I was following the announcement through:&lt;div&gt;&lt;br /&gt;&lt;a href="http://live.gdgt.com/"&gt;http://live.gdgt.com/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I visited other tech sites since I was curious to see the buzz elsewhere - I found them to be very slow.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-4060725873206512878?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/4060725873206512878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=4060725873206512878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/4060725873206512878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/4060725873206512878'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/01/internet-world-in-two-hands.html' title='The (Internet) World In Two Hands'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-8553773607872941232</id><published>2010-01-26T23:58:00.000-08:00</published><updated>2010-02-04T02:36:16.736-08:00</updated><title type='text'>Chrome 4.0 / HTML 5 Video Playback</title><content type='html'>Google's just released the next major revision of its &lt;b&gt;Chrome&lt;/b&gt; browser, version 4.0, to the masses in the last day:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://lifehacker.com/5456369/chromes-new-stable-release-brings-extensions-bookmark-sync-to-the-masses?autoplay=true"&gt;http://lifehacker.com/5456369/chromes-new-stable-release-brings-extensions-bookmark-sync-to-the-masses?autoplay=true&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Previously Chrome 4.0 was only available to the initiated (development release). Updating to 4.0 for existing users is simply a matter of clicking on the wrench icon in the rightmost toolbar area and then selecting &lt;i&gt;About Google Chrome&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;DownloadSquad&lt;/b&gt; featured a variety of Chrome plugins in a November article (only useful at the time to folks with the development release):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.downloadsquad.com/2009/11/02/15-great-google-chrome-extensions/"&gt;http://www.downloadsquad.com/2009/11/02/15-great-google-chrome-extensions/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With 4.0's release Chrome's extensibility goes up dramatically and thus its utility.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;HTML 5&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Chrome's addition of extensions overshadow its in HTML 5. Among them, video playback. The ramifications of this while not immediately forthcoming are significant. For quite some time most web designers/developers have assumed their users to have Flash but it turns out Flash has its issues. For starters, Flash's performance under Mac OS X is very poor and something that many Mac fans continually scoff at.  The proof is in the pudding:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.engadget.com/2009/10/29/27-inch-imacs-having-performance-issues/"&gt;http://www.engadget.com/2009/10/29/27-inch-imacs-having-performance-issues/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For a variety of reasons including the fact that the HyperText Markup Language (HTML) originally was focusing on document publication and not rich multimedia experiences, &lt;a href="http://en.wikipedia.org/wiki/Adobe_Flash"&gt;Macromedia&lt;/a&gt; (a well known company later acquired by Adobe) entrenched itself with the novel idea of extending browsers with video playback. Before you knew it, its &lt;a href="http://www.adobe.com/products/flash/"&gt;Flash platform&lt;/a&gt; became the defacto standard for video playback. The fly in the ointment is that as the Macintosh user base has grown dramatically, they're increasingly a louder voice and unhappy with a second rate video playback platform. Rest assured, the number of Macintosh users is growing faster than Adobe (and Steve Ballmer) would like - Apple's recently announced &lt;a href="http://news.cnet.com/8301-31021_3-10440777-260.html"&gt;latest quarterly results&lt;/a&gt; were phenomenal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are two big issues with Flash. First, Adobe has struggled with &lt;a href="http://www.computerworld.com/s/article/9142223/Adobe_Flash_s_security_woes_How_to_protect_yourself"&gt;lots of security issues&lt;/a&gt; with both its Flash plugin and PDF reader. Secondly, as much as I've been a fan of Flash for blazing trails, I hate to say this but I'm liking the idea of not requiring it on my desktop. It turns out performance-wise, by today's standards its architecture poorly leverages my hardware. Despite Flash being pervasive for the better part of a decade Adobe only now has seen it fit to leverage &lt;a href="http://en.wikipedia.org/wiki/Graphics_processing_unit"&gt;GPUs&lt;/a&gt; during video playback. GPU acceleration within Flash is still in beta:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.engadget.com/2009/11/17/adobes-flash-player-10-1-beta-gpu-acceleration-tested-document/"&gt;http://www.engadget.com/2009/11/17/adobes-flash-player-10-1-beta-gpu-acceleration-tested-document/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In other words, Flash can be very CPU intensive while your computer' graphics subsystem and its computational prowess goes unused. It turns out &lt;a href="http://docs.google.com/viewer?a=v&amp;amp;q=cache:xDxX8n5NWh8J:udel.edu/~pengye/GPU_Final_report.pdf+GPU+discrete+cosine+transform&amp;amp;hl=en&amp;amp;gl=us&amp;amp;pid=bl&amp;amp;srcid=ADGEESgoW3fDiylJhNaOMAz_GTuK5e1U75xSlQE9wIrZStbpetz0MFEV2D-vBwA0AXDRRBFr0yEefnlDI2fgIr5q12amdi-TabUUq_g924VMJT6fkzhKL2pOoSXpW_IAqotm1CFB841p&amp;amp;sig=AHIEtbTXu1l13ClfjoH3i2vsERopU-yExg"&gt;decoding video is intrinsically a parallel computation&lt;/a&gt;, something GPUs excel at. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm willing to bet anyone with a laptop, even a powerful one, knows all too well what happens when you start playing lots of Flash content - the fan starts cranking.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll close with pointing out that if you are running Chrome 4.0, you can opt to use HTML 5 video playback by default on&lt;b&gt; YouTube&lt;/b&gt; instead of Flash by visiting the following page:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/html5"&gt;http://www.youtube.com/html5&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-8553773607872941232?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/8553773607872941232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=8553773607872941232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/8553773607872941232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/8553773607872941232'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2010/01/chrome-40-html-5-video-playback.html' title='Chrome 4.0 / HTML 5 Video Playback'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-3438305062907524435</id><published>2009-11-09T01:55:00.000-08:00</published><updated>2009-11-09T02:56:45.195-08:00</updated><title type='text'>New Toys</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qeCrCZZbvYs/Svfsogvn1iI/AAAAAAAAADk/1yDtqB22SyY/s1600-h/TweetDeck.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="http://3.bp.blogspot.com/_qeCrCZZbvYs/Svfsogvn1iI/AAAAAAAAADk/1yDtqB22SyY/s320/TweetDeck.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5402046458782799394" /&gt;&lt;/a&gt;&lt;br /&gt;The past week and a half has been a bit more tech filled than usual for me. I upgraded to &lt;a href="http://www.microsoft.com/windows/windows-7/compare/ultimate.aspx"&gt;Windows 7 Ultimate&lt;/a&gt;, I got ATI's latest über &lt;a href="http://en.wikipedia.org/wiki/DirectX#DirectX_11"&gt;DirectX 11&lt;/a&gt; compliant video card the &lt;a href="http://www.amd.com/us/products/desktop/graphics/ati-radeon-hd-5000/hd-5870/Pages/ati-radeon-hd-5870-overview.aspx"&gt;5870&lt;/a&gt; and I've become more active with &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt; on account of the slick &lt;a href="http://tweetdeck.com/beta/"&gt;TweetDeck&lt;/a&gt; client.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The combination of the 5870 and Windows 7 Ultimate has resulted in me essentially having a &lt;i&gt;&lt;b&gt;new&lt;/b&gt;&lt;/i&gt; system. Despite having a motherboard dating back to mid-2006 this is the second time I've wound up putting off a motherboard/CPU upgrade with a new video card (I'm waiting for ubiquitous &lt;a href="http://www.maximumpc.com/article/features/everything_you_need_know_about_usb_30_plus_first_spliced_cable_photos"&gt;USB 3.0&lt;/a&gt; and &lt;a href="http://www.engadget.com/2009/08/23/pci-express-3-0-specifications-formally-delayed-products-pushed/"&gt;PCI Express 3.0&lt;/a&gt; before I upgrade my motherboard). My previous video card, the &lt;a href="http://www.amd.com/us/products/desktop/graphics/ati-radeon-hd-4000/hd-4870/Pages/ati-radeon-hd-4870-overview.aspx"&gt;4870&lt;/a&gt; was an excellent performer but state of the art is a state of change. The 5870 is an amazing product and it definitely falls into the techno-&lt;a href="http://dictionary.reference.com/browse/sybarite"&gt;sybarite&lt;/a&gt; category. With gaming consoles providing an extremely compelling experience in the form very large communities (&lt;a href="http://www.xbox.com/en-US/LIVE/"&gt;XBox Live&lt;/a&gt;), large displays (HDTVs) and the ability to ensconce oneself on the sofa, it's not surprising many gamers have eschewed high end PCs for consoles. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The 5870 however proved its power when I pulled out my old &lt;a href="http://en.wikipedia.org/wiki/Crysis"&gt;Crysis&lt;/a&gt; disc. Crysis was a PC game that came out in 2007 receiving lots of press for a couple of reasons - amazing visuals and the fact that probably 99% of people did not have the kind of hardware needed to make Crysis a compelling experience. My guess is &lt;a href="http://www.crytek.com/"&gt;Crytek&lt;/a&gt;, the developer, had more in mind developing an engine that was capable of realizing the visions of game studios for several years into the future (a.k.a. &lt;a href="http://www.cryengine2.com/"&gt;licensing its engine&lt;/a&gt;) and the casualty was everyone that didn't have a PC of the future. I'm happy to say that the 5870 is capable of rendering Crysis @ 1920x1200 with &lt;a href="http://en.wikipedia.org/wiki/Anti-aliasing"&gt;Full Scene Anti-Aliasing&lt;/a&gt; (FSAA) and &lt;i&gt;Very High&lt;/i&gt; settings. I &lt;i&gt;cheated&lt;/i&gt; with my 4870 by playing Crysis on an old 21" CRT I had (since given away) and thus I didn't need to enable FSAA. You see, a graphics card expends &lt;b&gt;quite a bit&lt;/b&gt; more cycles applying FSAA. Nowadays I use Dell's excellent 24"&lt;a href="http://www.dell.com/us/en/dfo/peripherals/monitor_2408wfp/pd.aspx?refid=monitor_2408wfp&amp;amp;s=dfo"&gt;2408WFP&lt;/a&gt; LCD and my initial reaction to seeing Crysis running on it smoothly was a bit of dissonance as Crysis has had a long standing reputation of bringing hardware to its knees.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Moving along, check out the TweetDeck client, either you get Twitter or hopefully you will realize its utility at some point. I must confess I wasn't blazing trails with Twitter but my coworkers (I wrote about the &lt;i&gt;light bulb&lt;/i&gt; going off in a prior post) made me realize how effective it was to ferret out information on a topic that while impromptu was also suddenly very important even if only ephemerally. I will close with an article from the NYTimes I just read that echoes my recent post on Twitter:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.nytimes.com/2009/11/09/business/09link.html?ref=technology"&gt;http://www.nytimes.com/2009/11/09/business/09link.html?ref=technology&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-3438305062907524435?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/3438305062907524435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=3438305062907524435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3438305062907524435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3438305062907524435'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/11/new-toys.html' title='New Toys'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/Svfsogvn1iI/AAAAAAAAADk/1yDtqB22SyY/s72-c/TweetDeck.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-7981501878474593431</id><published>2009-11-05T02:24:00.000-08:00</published><updated>2009-11-05T02:51:01.609-08:00</updated><title type='text'>OpenDNS - Your Robust Internet "Phone Directory"</title><content type='html'>On this late night (2AM) Comcast's Seattle DNS servers appear to be offline. For the layperson, &lt;a href="http://en.wikipedia.org/wiki/Domain_Name_System"&gt;DNS&lt;/a&gt; (Domain Name System) is the magic that happens when you type &lt;i&gt;www.google.com&lt;/i&gt; and you're &lt;i&gt;automagically&lt;/i&gt; routed to a numeric address (208.69.36.230 - in my case). Every device in your home or office ultimately talks to far off servers through such numbers and not with the text you're used to typing at your browser.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While writing this I received some IMs leading me to believe I've been offline for a couple of hours. Initially I thought it was perhaps hiccups I've seen in the past where power cycling the cable modem clears things up. That wasn't the case this time. I went into my router's dashboard and released my &lt;a href="http://en.wikipedia.org/wiki/TCP/IP"&gt;TCP/IP&lt;/a&gt; address and asked for a new one by way of &lt;a href="http://en.wikipedia.org/wiki/DHCP"&gt;DHCP&lt;/a&gt;. With each attempt (since I still wasn't getting anywhere) I promptly received the same IP address which gave me a hunch basic network connectivity was available. I then pinged Comcast's DNS server and promptly got a response&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Pinging 68.87.69.150 with 32 bytes of data:&lt;/div&gt;&lt;div&gt;Reply from 68.87.69.150: bytes=32 time=55ms TTL=105&lt;/div&gt;&lt;div&gt;Reply from 68.87.69.150: bytes=32 time=54ms TTL=105&lt;/div&gt;&lt;div&gt;Reply from 68.87.69.150: bytes=32 time=57ms TTL=105&lt;/div&gt;&lt;div&gt;Reply from 68.87.69.150: bytes=32 time=54ms TTL=105&lt;/div&gt;&lt;div&gt;&lt;/code&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Armed with that knowledge I setup &lt;a href="http://www.opendns.com/solutions/overview/"&gt;OpenDNS&lt;/a&gt;. I had actually been running with OpenDNS under Windows XP for quite a while but I moved to Windows 7 last week and hadn't yet bothered. Well, suffice to say, the only reason I can even post this at this hour is because of &lt;b&gt;OpenDNS&lt;/b&gt;. In short, OpenDNS rocks, use it.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-7981501878474593431?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/7981501878474593431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=7981501878474593431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7981501878474593431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7981501878474593431'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/11/opendns-your-robust-internet-phone.html' title='OpenDNS - Your Robust Internet &quot;Phone Directory&quot;'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-6088987493340166088</id><published>2009-11-01T22:52:00.000-08:00</published><updated>2009-11-01T23:12:19.573-08:00</updated><title type='text'>Why Twitter Is Much More Useful Than You Think</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_qeCrCZZbvYs/Su6FJSH1HJI/AAAAAAAAADc/9A3szugmfM8/s1600-h/SteamServersTooBusy.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 272px;" src="http://3.bp.blogspot.com/_qeCrCZZbvYs/Su6FJSH1HJI/AAAAAAAAADc/9A3szugmfM8/s320/SteamServersTooBusy.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5399399397793799314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;Even if you could care less about micro-blogging, Twitter is an excellent tool for finding out what is happening in the world as it may immediately pertain to you. It is an observation/technique I picked up from one of the network engineers at work. We were observing what appeared to be a lower transaction rate in England. So a conference call was setup to find out what was going on and yet no one could find anything wrong within the network or backend services servicing England. Then, one of the network engineers searched on Twitter for &lt;b&gt;&lt;i&gt;Broadband England&lt;/i&gt;&lt;/b&gt; and found many people complaining that they had spotty broadband access by way of one of the equivalents of Comcast over there, i.e. a major ISP. The implications were immediately obvious - we stood a reasonable chance of seeing our transactions affected, i.e. a lower transactions/minute.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So at that point we knew to stop trying to find something wrong within the network as the problem lay externally.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Likewise this evening I was trying to load a game (I recently moved to Windows 7 so I've had to re-download titles) and the &lt;a href="http://store.steampowered.com/" target="_blank" style="color: rgb(66, 99, 171); "&gt;Valve Steam&lt;/a&gt; client was complaining that the Steam servers were too busy to service my request. This has been the case for a while this evening so I did a Twitter search. And sure enough, I'm not the only one. Click on the image above.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The point being that Twitter can be an excellent tool to feel the pulse of whatever topic you have immediately in mind&lt;/b&gt;.&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-6088987493340166088?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/6088987493340166088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=6088987493340166088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6088987493340166088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6088987493340166088'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/11/why-twitter-is-much-more-useful-than.html' title='Why Twitter Is Much More Useful Than You Think'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/Su6FJSH1HJI/AAAAAAAAADc/9A3szugmfM8/s72-c/SteamServersTooBusy.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-5386077216233439415</id><published>2009-10-24T15:51:00.001-07:00</published><updated>2009-10-24T16:09:10.050-07:00</updated><title type='text'>Yeah, There's An App For That</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;So how many times have you heard a song on the radio, or a TV commercial (this happened last night) or even a video game (about 20 minutes ago for me) and you think to yourself, “That sounds really good, I think I'd like to own that.”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;&lt;o:p&gt;Well there's an&lt;/o:p&gt; iPhone application called &lt;b style=""&gt;Shazam&lt;/b&gt; that has been out for a while but I’ve had occasion to use it this past week across all the situations I just gave as examples:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;&lt;a href="http://www.shazam.com/music/web/pages/iphone.html"&gt;http://www.shazam.com/music/web/pages/iphone.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;Just hold up the iPhone to the music source (speakers), hit the “Tag” button on the Shazam app, let it sample the music for about 10 seconds and using the power of analysis (some far off servers across the Internet) it tells you what the answer is. In my case (just now it was):&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;&lt;a href="http://www.amazon.com/gp/product/B001W1UY0W/ref=dm_dp_trk8?ie=UTF8&amp;amp;qid=1256422919&amp;amp;sr=301-1"&gt;http://www.amazon.com/gp/product/B001W1UY0W/ref=dm_dp_trk8?ie=UTF8&amp;amp;qid=1256422919&amp;amp;sr=301-1&lt;/a&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;Pjanoo&lt;/span&gt;&lt;/b&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt; (name of song). You can hit the &lt;span style="font-style: italic;"&gt;Preview&lt;/span&gt; button on the latter Amazon page and listen in. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;This song was featured in the latest trailer the latest &lt;b style=""&gt;Grand Theft Auto 4&lt;/b&gt; expansion. I also heard it some weeks ago during my gym class - the instructor was playing it off her iPod during the cycling class. I heard it yet again in the GTA4 trailer and it crossed my mind “You know, I bet Shazam can help me figure out what that song is.” Indeed it did.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;As for the song I heard last night during the TV commercial:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;&lt;a href="http://www.amazon.com/Walking-On-A-Dream/dp/B0026BI3OQ/ref=dm_ap_trk1"&gt;http://www.amazon.com/Walking-On-A-Dream/dp/B0026BI3OQ/ref=dm_ap_trk1&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;Walking On A Dream&lt;/span&gt;&lt;/b&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt; by &lt;span style="font-weight: bold;"&gt;Empire of the Sun&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;Bill Gates used to say “Information at your fingertips” eluding to the notion of über powerful desktops (powered by Microsoft of course) housing gobs of information. While some would argue that indeed Microsoft Windows powers many a computer that fetches information off the Net (the host OS for a browser) considering that the HTTP protocol and implications of the greater &lt;span style="font-weight: bold;"&gt;World Wide Web&lt;/span&gt; were not envisioned or spearheaded by MS in any way, shape or form (even after the fact, e.g., cloud computing, no, MS isn't a vanguard there either) and that the iPhone from Apple has seen that dream, imho, take form for people living on the edge of the cloud, i.e., &lt;b style=""&gt;information at your fingertips&lt;/b&gt; (in a very, very compelling way), Gates’ vision while materializing isn't being lead by Microsoft.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;As for “host OS for a browser” – &lt;a href="http://gizmodo.com/5385183/apple-crushes-recession-by-selling-more-macs-and-iphones-than-ever-before"&gt;in light of Apple’s latest quarterly results&lt;/a&gt; (best quarter ever; most Macs sold in a quarter), even that could significantly change over the long haul. Case in point, there’s 8 people on my team at work - 5 use Macbooks, 3 of us use Windows (2 XP users, 1 &lt;/span&gt;&lt;st1:place&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;Vista&lt;/span&gt;&lt;/st1:place&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt; user).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-family:Arial;font-size:10pt;"  &gt;Yeah, there’s an app for that.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-5386077216233439415?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/5386077216233439415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=5386077216233439415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/5386077216233439415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/5386077216233439415'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/10/yeah-theres-app-for-that.html' title='Yeah, There&apos;s An App For That'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-7710631773640728764</id><published>2009-10-11T10:39:00.001-07:00</published><updated>2009-10-24T16:32:06.283-07:00</updated><title type='text'>Rainy (Computing) Clouds At Microsoft</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qeCrCZZbvYs/StIgp_q29pI/AAAAAAAAADU/iQ7el_W6-74/s1600-h/rain_cloud.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 132px; height: 128px;" src="http://2.bp.blogspot.com/_qeCrCZZbvYs/StIgp_q29pI/AAAAAAAAADU/iQ7el_W6-74/s320/rain_cloud.jpeg" alt="" id="BLOGGER_PHOTO_ID_5391407609753826962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Microsoft experienced an event that is not likely to embolden potential customers of its forthcoming &lt;a href="http://en.wikipedia.org/wiki/Azure_Services_Platform"&gt;Azure&lt;/a&gt; cloud computing platform:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.appleinsider.com/articles/09/10/11/microsofts_danger_sidekick_data_loss_casts_dark_on_cloud_computing.html"&gt;http://www.appleinsider.com/articles/09/10/11/microsofts_danger_sidekick_data_loss_casts_dark_on_cloud_computing.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In summary, if you had  Sidekick device through T-Mobile, you have my condolences. Living and working in Seattle I'm aware of some of Microsoft's operations practices. Microsoft's desktop roots, i.e. affinity for shrink wrapped software, has seemingly induced a myopia in how it sees operations. Namely, the belief that if they toss things over the wall, aka &lt;strong&gt;contracting&lt;/strong&gt;, things will get done. The failure of a robust backup process, a.k.a. &lt;strong&gt;operations 101&lt;/strong&gt;, means Microsoft does not take operations seriously (which feeds into things I've heard here in Seattle). This embarrassing turn of events is not likely to instill confidence in Microsoft's forthcoming cloud computing efforts.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-7710631773640728764?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/7710631773640728764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=7710631773640728764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7710631773640728764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7710631773640728764'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/10/rainy-computing-clouds-at-microsoft.html' title='Rainy (Computing) Clouds At Microsoft'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/StIgp_q29pI/AAAAAAAAADU/iQ7el_W6-74/s72-c/rain_cloud.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-7392200637851098793</id><published>2009-10-09T22:17:00.000-07:00</published><updated>2009-10-09T22:53:02.922-07:00</updated><title type='text'>All Work &amp; No Play Make Jack A Dull Boy</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qeCrCZZbvYs/StAekGN-FbI/AAAAAAAAADE/Bn5y1yPRKDA/s1600-h/SFV_With_Arcade_Stick.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 178px; height: 320px;" src="http://1.bp.blogspot.com/_qeCrCZZbvYs/StAekGN-FbI/AAAAAAAAADE/Bn5y1yPRKDA/s320/SFV_With_Arcade_Stick.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5390842359455815090" /&gt;&lt;/a&gt;&lt;br /&gt;Today I went to &lt;a href="http://en.wikipedia.org/wiki/Fry's_Electronics"&gt;Fry's Electronics&lt;/a&gt; to pickup an &lt;a href="http://gizmodo.com/5161299/mad-catz-street-fighter-iv-fightsticks-review"&gt;Arcade Fight Stick&lt;/a&gt; put out by &lt;a href="http://en.wikipedia.org/wiki/Capcom"&gt;Capcom&lt;/a&gt; when it introduced &lt;a href="http://en.wikipedia.org/wiki/Street_Fighter_IV"&gt;Street Fighter IV&lt;/a&gt; earlier this year. The link I've provided to the &lt;b&gt;Arcade Fight Stick&lt;/b&gt; shows excellent pictures and is a review. I picked up the smaller one for the &lt;a href="http://en.wikipedia.org/wiki/Xbox_360"&gt;XBox360&lt;/a&gt;.&lt;b&gt;What some folks may not know&lt;/b&gt; is the XBox360 corded controller is a standard &lt;a href="http://gizmodo.com/5161299/mad-catz-street-fighter-iv-fightsticks-review"&gt;USB&lt;/a&gt; device and &lt;b&gt;Microsoft readily provides drivers for Windows PCs&lt;/b&gt;. More useful still is that game studios have assumed an XBox360 controller when providing joystick support to contemporary games on the &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Windows"&gt;Microsoft Windows&lt;/a&gt; platform. More specifically games falling under the &lt;a href="http://www.microsoft.com/games/en-US/index.aspx"&gt;Games for Windows Live&lt;/a&gt; banner. Gone are the days when there was no joystick/joypad standard, de facto or otherwise.  A device from one manufacturer might have 4 buttons while another might have 6 and developers often went with the least common denominator making for a less than polished experience. Some games would be released supporting a mouse and keyboard only which is a combination that doesn't always work well. A particular title might afford better visuals on the PC but comes crippled out of the gate having been designed with a game controller in mind due to initially debuting on a gaming console platform. Thankfully those days are over. I had occasion to pick up &lt;b&gt;Street Fighter IV&lt;/b&gt; during a weekend "50% off" promotion on &lt;a href="http://store.steampowered.com/app/21660/"&gt;Steam&lt;/a&gt; some weeks ago. Check out the picture associated with this blog post, I joined a a couple of pics I took with my &lt;a href="http://www.apple.com/iphone/iphone-3gs/"&gt;iPhone 3Gs&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-7392200637851098793?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/7392200637851098793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=7392200637851098793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7392200637851098793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7392200637851098793'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/10/all-work-no-play-make-jack-dull-boy.html' title='All Work &amp; No Play Make Jack A Dull Boy'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/StAekGN-FbI/AAAAAAAAADE/Bn5y1yPRKDA/s72-c/SFV_With_Arcade_Stick.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-1592960828763303710</id><published>2009-10-02T08:05:00.000-07:00</published><updated>2009-10-02T08:54:29.862-07:00</updated><title type='text'>"Duct tape" in six minutes vs. "Beauty" in six months</title><content type='html'>&lt;p&gt;I've read &lt;a href="http://joelonsoftware.com/"&gt;Joel Spolsky's blog&lt;/a&gt; over the years and his latest post resonates with me in a big way, it's entitled &lt;strong&gt;The Duct Tape Programmer&lt;/strong&gt;:&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://joelonsoftware.com/items/2009/09/23.html"&gt;http://joelonsoftware.com/items/2009/09/23.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In short Joel says over-engineering dooms software projects and some individuals have a knack for avoiding this pitfall by leveraging disparate technologies, even if it appears to others as a mish mash.&lt;/p&gt;&lt;p&gt;I could not agree more. &lt;/p&gt;&lt;p&gt;I have my share of anecdotes over the years but one of the best ones and most telling was when a coworker with a significant affinity toward &lt;a href="http://en.wikipedia.org/wiki/Java_(programming_language)"&gt;Java&lt;/a&gt; who had been knee deep in &lt;a href="http://java.sun.com/applets/"&gt;applets&lt;/a&gt; for quite some time was asked to write a simple utility to show the differences between two files and send the output to a browser. This is a &lt;a href="http://perldoc.perl.org/CGI.html"&gt;CGI&lt;/a&gt; that would take a duct tape programmer a few minutes to write levering the very common  &lt;a href="http://ss64.com/bash/diff.html"&gt;diff&lt;/a&gt; utility. However the Java afficionado wanted to build this from scratch, i.e. read two files from Java, write all the logic in Java to compare them. No doubt he would have made a naive tack and his first iteration would likely have shown the first difference in two files not realizing that &lt;em&gt;diff&lt;/em&gt; does a very good job of showing other information, not just the first difference. Then he would have spent a considerable amount of time trying to duplicate what the &lt;em&gt;diff&lt;/em&gt; utility had already been doing for decades. &lt;/p&gt;&lt;p&gt;Isaac Newton, the father of physics said it best, "If I have been able to see farther, it is because I have stood on the shoulders of giants." Knowing when to leverage the work of others is an important skill in my view. All too often software developers, particularly early in their career have a propensity to see everything as a nail when they wield their hammer (favorite programming language, tool, etc., etc.).&lt;/p&gt;&lt;p&gt;Joel's missive in &lt;strong&gt;The Duct Tape Programmer&lt;/strong&gt; also strikes a cord with me since it eludes to the reason I named this blog &lt;strong&gt;MasterCobbler&lt;/strong&gt;. Specifically the fusion of what initially would seem disparate technologies to some higher end. As a simple example my bringing up &lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt; in a previous post to provide one large virtual desktop when having one Windows XP system and a Mac OS X system is at a basic level a very good example of what I'm talking about. The whole is greater than the sum of its parts.&lt;/p&gt;&lt;p&gt;As for some of the examples Joel gave, some contemporary examples are in order. He and I share one thing - we both spent time at Microsoft. I can tell you beyond Microsoft's walls, virtually no one cares about &lt;a href="http://en.wikipedia.org/wiki/Component_Object_Model"&gt;COM&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Component_Object_Model"&gt;DCOM&lt;/a&gt; and that has been the case for quite some time. Once I left Microsoft, the general market had very few people who had zeal for the subject matter and with the passage of (D)COM's hey day, the examples are that much more likely to fall on deaf ears.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-1592960828763303710?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/1592960828763303710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=1592960828763303710' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1592960828763303710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1592960828763303710'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/10/duct-tape-in-six-minutes-vs-beauty-in.html' title='&quot;Duct tape&quot; in six minutes vs. &quot;Beauty&quot; in six months'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-1285673082502020657</id><published>2009-09-30T08:16:00.000-07:00</published><updated>2009-09-30T08:24:31.034-07:00</updated><title type='text'>Apple Tablet, Windows OS X, Mac OS X</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_qeCrCZZbvYs/SsN4Jxh1A-I/AAAAAAAAAC8/hv11nvIDe14/s1600-h/WindowsOSX.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_qeCrCZZbvYs/SsN4Jxh1A-I/AAAAAAAAAC8/hv11nvIDe14/s320/WindowsOSX.PNG" border="0" alt="" id="BLOGGER_PHOTO_ID_5387281688574624738" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="Section1"&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Apple’s &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Tablet&lt;/span&gt;&lt;/b&gt; is not out yet, but here’s more  talk:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;&lt;a href="http://gizmodo.com/5370252/apple-tablet-aiming-to-redefine-newspapers-textbooks-and-magazines"&gt;http://gizmodo.com/5370252/apple-tablet-aiming-to-redefine-newspapers-textbooks-and-magazines&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Given my experience with the iPhone  3Gs, very specifically, I’ve enjoyed having the ability to lay down flat on my  back and read web pages, if the Apple Tablet is sufficiently light weight such  that I can hold it like a book, there’s a very good chance I’ll wind up buying  it when it’s out.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;On another note, I was at someone’s &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Vista&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt; machine last night  trying to diagnose some issues for them. While I like the idea of having an underlying 64  bit Windows OS, more contemporary icons and Windows Media Center (for  connectivity to the XBox360), I’ve gotten so accustomed to the appearance of what I've dubbed &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Windows OS X &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;(see image) at home I don’t like  the default appearance of Vista at all. Thankfully &lt;a href="http://www.stardock.com/"&gt;Stardock&lt;/a&gt;, the company that makes the  customization possible, &lt;a href="http://www.stardock.com/products/windowblinds/"&gt;already has a beta of  their software running on Windows 7&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;I also happen to be in the market  for a used Mac Mini, specifically the current high end model:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;&lt;a href="http://store.apple.com/us/browse/home/shop_mac/family/mac_mini"&gt;http://store.apple.com/us/browse/home/shop_mac/family/mac_mini&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Except I am &lt;b&gt;&lt;span style="FONT-WEIGHT: bold"&gt;not&lt;/span&gt;&lt;/b&gt; paying $800 for commodity hardware  (the parts would probably cost me $350). &lt;a href="http://gizmodo.com/5156903/how-to-hackintosh-a-dell-mini-9-into-the-ultimate-os-x-netbook"&gt;Lots of people build Hackintoshes&lt;/a&gt; but I  don’t want to go that route since I’ve read people having issues when a new  version of Mac OS X is released, i.e. Apple doing things to dissuade the use of  Mac OS X on non-Apple hardware. I don’t need such hassles. I am hoping to find a  2+ GHz Mac Mini on &lt;a href="http://seattle.craigslist.org/"&gt;Craigslist&lt;/a&gt; at some point, i.e., let someone else bear the  cost of lining Mr. Jobs’ pockets with green. So far I have not seen one listed  as the current models are relatively new (only a few months  old).&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;If I got a Mac Mini I would setup  &lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt; and have Windows and Mac OS X be one large virtual desktop across two  displays.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-1285673082502020657?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/1285673082502020657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=1285673082502020657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1285673082502020657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1285673082502020657'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/09/apple-tablet-windows-os-x-mac-os-x.html' title='Apple Tablet, Windows OS X, Mac OS X'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/SsN4Jxh1A-I/AAAAAAAAAC8/hv11nvIDe14/s72-c/WindowsOSX.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-7421863581150019048</id><published>2009-09-27T13:32:00.000-07:00</published><updated>2009-10-11T11:11:57.709-07:00</updated><title type='text'>The Brewing Storm for Microsoft</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qeCrCZZbvYs/StIf4mLl8eI/AAAAAAAAADM/WrWaELECXLU/s1600-h/180px-Zonbu_box.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 180px; height: 129px;" src="http://4.bp.blogspot.com/_qeCrCZZbvYs/StIf4mLl8eI/AAAAAAAAADM/WrWaELECXLU/s320/180px-Zonbu_box.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5391406761098211810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Apparently this &lt;span style="font-style: italic; font-weight: bold;"&gt;nettop&lt;/span&gt; (netbook+desktop) from Acer is out now and readily available  at Newegg for $200:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;&lt;a href="http://gizmodo.com/5368829/acer-aspirerevo-nvidia-ion-le-variant-hits-us-shores-for-200"&gt;http://gizmodo.com/5368829/acer-aspirerevo-nvidia-ion-le-variant-hits-us-shores-for-200&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Here’s a more detailed article about the &lt;span style="font-weight: bold;"&gt;Acer AspireRevo&lt;/span&gt; from six months ago on Gizmodo:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;&lt;a href="http://gizmodo.com/5204432/acer-revo-and-nvidia-ion-hands-on-flawless-blu+ray-playback-changes-cheap-computers-forever"&gt;http://gizmodo.com/5204432/acer-revo-and-nvidia-ion-hands-on-flawless-blu+ray-playback-changes-cheap-computers-forever&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;If this kind of hardware becomes  crazy pervasive, it could be a big problem for Microsoft in the long term, i.e. the  cost of &lt;b&gt;&lt;span style="font-weight: bold;"&gt;Windows&lt;/span&gt;&lt;/b&gt; and &lt;b&gt;&lt;span style="font-weight: bold;"&gt;Office&lt;/span&gt;&lt;/b&gt; would be significantly more than the cost of hardware. &lt;a href="http://www.cringely.com/"&gt;Robert X. Cringely&lt;/a&gt; predicted this would  eventually become a big problem for Microsoft and it seems with hardware being scaled  down so much this is a portent of things to come.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;Which is why I have often said  that Microsoft made a brilliant move with getting into the gaming console market. Today the &lt;a href="http://www.xbox.com/en-US/"&gt;XBox360&lt;/a&gt;  is a low cost hardware platform whose storage makes it capable of running different  programs and in my view Microsoft's entry into the gaming console market was a hedge against this transition. At least I would hope someone inside of Microsoft was sufficiently prescient and saw the potential problem of home PCs being displaced once HDTVs truly became pervasive. Simply because, the top three computing activities in the home are browsing, email and gaming. If you've had occasion to see the web browser that runs on the Playstation 3, it is functional on many web sites. Again, a portent of things to come. Unfortunately for Microsoft every shipped XBox shipped means no license for Windows and Office going alongside it. And Windows and Office accounts for approximately two thirds of Microsoft's revenues.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;While the HD playback on the Acer  AspireRevo is an issue, things are brewing to remedy this problem:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;&lt;a href="http://gizmodo.com/5363223/via-pico+itx-motherboard-runs-1080p-video-like-a-champ"&gt;http://gizmodo.com/5363223/via-pico+itx-motherboard-runs-1080p-video-like-a-champ&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style=" ;font-family:Arial;font-size:10pt;"&gt;While this VIA daughterboard currently  is too big to fit into the Acer AspireRevo it happens to be perfect for Netbooks. Now  imagine when this VIA PICO hardware winds up being just a single die (chip). Then  you are talking about having a $200 PC for your living room capable of delivering content off the Net that does not have the  usual hassle factors – cost (the upfront cost and your utility bill going up because of your new &lt;span style="font-style: italic;"&gt;space heater&lt;/span&gt;), noise (fans) and size (bulk).&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-7421863581150019048?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/7421863581150019048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=7421863581150019048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7421863581150019048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/7421863581150019048'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2009/09/brewing-storm-for-microsoft.html' title='The Brewing Storm for Microsoft'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/StIf4mLl8eI/AAAAAAAAADM/WrWaELECXLU/s72-c/180px-Zonbu_box.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-6278360510061963940</id><published>2008-09-07T16:12:00.000-07:00</published><updated>2008-09-07T21:10:42.371-07:00</updated><title type='text'>It's New &amp; Shiny</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qeCrCZZbvYs/SMRi0YaUryI/AAAAAAAAABc/Q_rFcurT0d8/s1600-h/PrivSeparation.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_qeCrCZZbvYs/SMRi0YaUryI/AAAAAAAAABc/Q_rFcurT0d8/s320/PrivSeparation.jpg" alt="" id="BLOGGER_PHOTO_ID_5243424518211677986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This week I did an initial analysis of the security architecture of Google's new &lt;a href="http://www.google.com/chrome"&gt;Chrome browser&lt;/a&gt; from an operating system standpoint, i.e. how Chrome leveraged Windows to apply the &lt;a href="http://en.wikipedia.org/wiki/Least_privilege"&gt;principle of least privilege&lt;/a&gt;. This immediately came to mind when I saw page 26 of Google's &lt;a href="http://www.google.com/googlebooks/chrome/index.html#"&gt;online presentation&lt;/a&gt; of their new Chrome browser.&lt;br /&gt;&lt;br /&gt;It also turns out the software architecture in Google's new browser uses an approach that is much more common when writing back end network services. A technique known as &lt;a href="http://en.wikipedia.org/wiki/Least_privilege"&gt;privilege separation&lt;/a&gt; which page 26 also eluded to.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Privilege separation&lt;/span&gt; is merely a technique where the &lt;span&gt;principle of least privilege&lt;/span&gt; is applied.&lt;br /&gt;&lt;br /&gt;The crux of privilege separation is to create copies of yourself (an .EXE) and strip administrative rights as you do so. It is then those copies then handle inbound requests. So in the case of a web server, the initial instance of the executable (master copy) creates copies and it is those copies that do the actual work of handling inbound &lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol"&gt;HTTP&lt;/a&gt; requests. The master copy (the parent of all the children) is simply an orchestrator and never directly interfaces with the outside world where HTTP requests originate. Other network services that follow this model include the venerable &lt;a href="http://openssh.org/"&gt;OpenSSH&lt;/a&gt; server (see image).&lt;br /&gt;&lt;br /&gt;The advantage of privilege separation is that if malicious input is fed into a copy handling a request, it becomes much harder to compromise a system since copies have had their administrative privileges stripped. Malicious input's goal is to proxy through whatever is handling a request (copy of an .EXE) to in many cases modify operating system files and directories to nefarious ends. If a copy does in fact serve that end, that would constitute a system breach and what you now have is a serious flaw in the software system. Over the years many &lt;a href="http://en.wikipedia.org/wiki/Buffer_overflow"&gt;buffer overflow&lt;/a&gt; exploits in sundry network services have been significantly more severe simply because the technique of privilege separation was not employed. The difference can easily be a system that is compromised and falls into someone else's remote control vs. a much more likely &lt;a href="http://en.wikipedia.org/wiki/Denial-of-service_attack"&gt;denial of service&lt;/a&gt; scenario. Given the choice, I'll take the latter.&lt;br /&gt;&lt;br /&gt;Not to say that privilege separation is a panacea. It is not. The technique simply makes a system much harder to breach. And being a technique, nothing says it can't be used on the client side of the equation (a web browser). So while all other web browsers have a single process (.EXE) that manages all browser windows and the tabs within them, Google's Chrome browser creates one copy of itself for each tab where HTML will be rendered and JavaScript executed. As those copies are made, &lt;span style="font-weight: bold;"&gt;their administrative rights are stripped&lt;/span&gt; making it much harder for malicious web content to compromise the computer system where Chrome is executing. Thus Google's Chrome browser applies the technique of privilege separation and immediately affords a level of insulation and resiliency to malware that heretofore hadn't existed in any other browser under Windows XP with its default security settings.&lt;br /&gt;&lt;br /&gt;The principle of least privilege in action. Hallelujah.&lt;br /&gt;&lt;br /&gt;This is not as big a deal for Windows Vista users but it is a very big deal for Windows XP users. That's because Windows Vista by default does not give users administrative privileges. Under Vista, when you want to do something like install a new application, you're prompted for an administrative password.&lt;br /&gt;&lt;br /&gt;Windows XP on the other hand gives full reign (administrative rights) to users &lt;span style="font-style: italic;"&gt;out of the box&lt;/span&gt; and this is precisely &lt;span style="font-weight: bold;"&gt;*why*&lt;/span&gt; malware has been such a large problem there (much to the delight of anti-virus vendors). Namely, people's browsers acting as proxies for the installation of malware as they promiscuously connect to foreign computer systems on the Internet with administrative privileges. Unfortunately, very few people understand the ramifications of operating in this manner and this extends to most people who make their living with technology.&lt;br /&gt;&lt;br /&gt;Google's Chrome browser takes advantage of the Win32 security programmatic interfaces and strips administrative rights as it launches each copy of itself to handle each tab. The magic that allows this under Windows XP is the &lt;a href="http://msdn.microsoft.com/en-us/library/aa446583.aspx"&gt;CreateRestrictedToken&lt;/a&gt; system call. The net result is that Chrome under Windows XP makes it much harder for your computer system to be compromised, irrespective of stop gaps measures like anti-virus software.&lt;br /&gt;&lt;br /&gt;The level of  mitigation is big. How big? Well, the reason &lt;a href="http://en.wikipedia.org/wiki/Mac_OS_X"&gt;Mac OS X&lt;/a&gt; has such little malware written for it is because Macintosh users do not run with administrative privileges making the economics of writing malware for Mac OS X a completely different propostion. Malware authors go for the low hanging fruit that are Windows XP users of which there are still plenty. Naysayers often claim, "Mac OS X doesn't have the same market" but that is simply not true. In August of 2007 Apple's &lt;a href="http://www.macworld.com/article/59616/2007/08/appleshare.html"&gt;market share&lt;/a&gt; of laptops hit 17.6% (20% is likely not far off). Apple is now the third biggest seller of laptops behind HP and Dell.&lt;br /&gt;&lt;br /&gt;By applying the &lt;span style="font-weight: bold;"&gt;principle of least privilege&lt;/span&gt; Google with its Chrome browser severely mitigates the chances you will contract something like a keyboard logger while innocently visiting your favorite site. Therein lies the danger, increasingly sophisticated and organized criminal groups are &lt;a href="http://www.pcworld.com/article/141358/10000_web_sites_rigged_with_advanced_hack_attack.html"&gt;breaching the web servers of legitimate businesses to serve up malicious content&lt;/a&gt; to unsuspecting users. In many of these cases, malware often comes in the form of keyboard loggers where once installed, absolutely everything you type is transmitted elsewhere in the hope you'll eventually use an online financial account. At which time you unwittingly divulge your username and password despite connecting to a legitimate financial institution (no, this is not &lt;a href="http://en.wikipedia.org/wiki/Phishing"&gt;phishing&lt;/a&gt;). &lt;a href="http://www.nytimes.com/2008/08/30/business/yourmoney/30theft.html?_r=2&amp;amp;ref=business&amp;amp;oref=slogin&amp;amp;oref=slogin"&gt;Eventually Electronic Fund Transfers ensue&lt;/a&gt;.  It's akin to &lt;span style="font-style: italic;"&gt;poisoning the water well&lt;/span&gt; since as people visit their favorite &lt;span style="font-style: italic;"&gt;watering hole&lt;/span&gt; (a legitimate web site) they are served up far more than water. As a play on phishing, the term &lt;a href="http://en.wikipedia.org/wiki/Pharming"&gt;pharming&lt;/a&gt; was coined to describe these types of scenarios.&lt;br /&gt;&lt;br /&gt;In closing, kudos to Google for leveraging a programmatic mechanism (&lt;span style="font-weight: bold;"&gt;CreateRestrictedToken&lt;/span&gt;) that has been in place for many years. To this day I still do not understand why Microsoft never exposed the power of &lt;span style="font-weight: bold;"&gt;CreateRestrictedToken&lt;/span&gt; with a mass market end user tool or simply embellishing the way desktop shortcuts are created by providing end users with the ability to strip administrative rights in the form of a simple check box. That's because &lt;span style="font-weight: bold;"&gt;CreateRestrictedToken&lt;/span&gt; has been in every copy of Windows since Windows 2000 was released. As I said, &lt;span style="font-style: italic;"&gt;many years&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-6278360510061963940?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/6278360510061963940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=6278360510061963940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6278360510061963940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/6278360510061963940'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/09/its-shiny.html' title='It&apos;s New &amp; Shiny'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/SMRi0YaUryI/AAAAAAAAABc/Q_rFcurT0d8/s72-c/PrivSeparation.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-3935463045696723363</id><published>2008-09-07T12:57:00.000-07:00</published><updated>2008-09-07T14:58:00.450-07:00</updated><title type='text'>Why 9 &gt; 10</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qeCrCZZbvYs/SMRMMItVZBI/AAAAAAAAABU/mv1CpVbp85E/s1600-h/DirectX.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_qeCrCZZbvYs/SMRMMItVZBI/AAAAAAAAABU/mv1CpVbp85E/s320/DirectX.jpg" alt="" id="BLOGGER_PHOTO_ID_5243399637545870354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So I've been resistant to upgrade to Microsoft's &lt;a href="http://en.wikipedia.org/wiki/Windows_Vista"&gt;Windows Vista&lt;/a&gt; for a number of reasons but probably the biggest is consistently observing Windows XP yielding higher Frames Per Second (FPS) with many &lt;a href="http://en.wikipedia.org/wiki/DirectX"&gt;DirectX&lt;/a&gt; titles. Windows Vista introduced DirectX 10 to the world and &lt;a href="http://en.wikipedia.org/wiki/Windows_XP"&gt;Windows XP&lt;/a&gt; users have had to be content with the older DirectX 9. I had read that Microsoft changed the video driver model for Vista to mitigate the infamous &lt;span style="font-weight: bold;"&gt;B&lt;/span&gt;lue &lt;span style="font-weight: bold;"&gt;S&lt;/span&gt;creen &lt;span style="font-weight: bold;"&gt;O&lt;/span&gt;f &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;eath (&lt;a href="http://en.wikipedia.org/wiki/Blue_Screen_of_Death"&gt;BSOD&lt;/a&gt;) that has been the butt of jokes for many years but did not investigate further since my plans are to stay on Windows XP for quite some more time.&lt;br /&gt;&lt;br /&gt;Here is a shining example of Microsoft being canon fodder on account of BSOD issues, it's a very old &lt;a href="http://www.sun.com/"&gt;Sun Microsystems&lt;/a&gt; commercial from yesteryear (before Windows 2000) and pays homage to the late &lt;a href="http://en.wikipedia.org/wiki/Jacques-Yves_Cousteau"&gt;Jacques-Yves Cousteau&lt;/a&gt; (the narration). It's quite good!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=eNqPTOb31S8"&gt;http://www.youtube.com/watch?v=eNqPTOb31S8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's also testimony to a long standing problem on Microsoft's operating systems based on the Windows NT kernel introduced in the early 90's. In Microsoft's defense, it can't control how video drivers are written by third parties, but nevertheless, less than perfect video drivers have been one of the leading causes of the infamous BSOD.&lt;br /&gt;&lt;br /&gt;So curiosity finally got the best of me as I was talking about DirectX performance with a friend and I decided to investigate why seemingly Vista always loses to XP in sundry benchmarks I've seen in online articles and the &lt;a href="http://www.maximumpc.com/"&gt;printed word&lt;/a&gt;. I started with the following Wikipedia article about the &lt;span style="font-style: italic;"&gt;Windows Display Drive Model&lt;/span&gt; introduced in Windows Vista:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Windows_Display_Driver_Model"&gt;http://en.wikipedia.org/wiki/Windows_Display_Driver_Model&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When the &lt;a href="http://en.wikipedia.org/wiki/Main_Page"&gt;Wikipedia&lt;/a&gt; article mentioned that part of a Vista display driver lives in &lt;span style="font-weight: bold; font-style: italic;"&gt;userland&lt;/span&gt; the light bulb went on.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/User_space"&gt;User space&lt;/a&gt; (aka &lt;span style="font-style: italic;"&gt;userland&lt;/span&gt;) is where applications live, e.g., your web browser, your email client, your IM client, etc., etc. &lt;a href="http://www.bellevuelinux.org/kernel_space.html"&gt;Kernel space&lt;/a&gt; is where the code that makes up the OS lives. Both of these terms are commonly used in systems programming.&lt;br /&gt;&lt;br /&gt;So the question that beckons, when an application asks the &lt;a href="http://en.wikipedia.org/wiki/Operating_system"&gt;OS&lt;/a&gt; (operating system) to do something on its behalf and execution transitions from your application to the OS, &lt;span style="font-weight: bold;"&gt;how does the operating system protect the stability of the system&lt;/span&gt;? After all, you as an application programmer might have just passed some errant arguments that could potentially bring down the system… or on the more sinister side, malicious code could have slipped in through your browser and is making system calls under the hood.&lt;br /&gt;&lt;br /&gt;The answer is… with hardware!&lt;br /&gt;&lt;br /&gt;The Intel architecture has a notion of “rings” when it comes to executing code (other processor architectures I’m sure have the same semantics, the nomenclature may vary). More on this in a second.&lt;br /&gt;&lt;br /&gt;It turns out when executing code, more bits are at play than the usual &lt;a href="http://en.wikipedia.org/wiki/32_bit"&gt;32 bits&lt;/a&gt; you sometimes hear about, i.e., &lt;span style="font-style: italic;"&gt;I’m running 32 bit code&lt;/span&gt; versus &lt;span style="font-style: italic;"&gt;I’m running 64 bit code&lt;/span&gt;. On the x86 architecture memory access is implicitly qualified with additional registers. These registers are called &lt;a href="http://en.wikipedia.org/wiki/Segment_register"&gt;selectors&lt;/a&gt; and they happen to be 16 bits. The first 13 bits of a selector are an index into what’s called a &lt;span style="font-style: italic;"&gt;Descriptor Table&lt;/span&gt;. 2 to the 32nd power is roughly 4 billion so it would seem a 32 bit Intel processor is incapable of seeing more. Such a statement is not accurate of what really is going on. You see, &lt;span style="font-style: italic;"&gt;32 bits&lt;/span&gt; refers to the context of a single application, the limits of its addressibility, not that of the processor's.&lt;br /&gt;&lt;br /&gt;This means by varying the first 13 bits in a x86 selector register you jump from &lt;span style="font-style: italic;"&gt;only having 4 billion memory addresses&lt;/span&gt; to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;2^13 (8192) * 2^32 (4 billion) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Which calculates to:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;18,446,744,100,000,000,000&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;But wait, there’s more. The next bit (just one) says whether to go to the &lt;a href="http://en.wikipedia.org/wiki/Local_Descriptor_Table"&gt;Local Descriptor Table&lt;/a&gt; or the &lt;a href="http://en.wikipedia.org/wiki/Global_Descriptor_Table"&gt;Global Descriptor Table&lt;/a&gt;. So that means you can now double this figure. So you see, the “32 bits” people speak of does not really reflect the mount of memory x86 processors are really capable of managing.&lt;br /&gt;&lt;br /&gt;Back to those &lt;span style="font-weight: bold;"&gt;rings&lt;/span&gt;. The last 2 bits in a selector register has to do with &lt;a href="http://en.wikipedia.org/wiki/Supervisor_mode#Supervisor_mode"&gt;rings&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Applications (your browser) run in ring 3 a.k.a. &lt;span style="font-weight: bold;"&gt;user space&lt;/span&gt;. When an application asks the OS to do something, the OS changes last two bits of a selector register and transitions from a higher privileged ring to a lower privileged ring, e.g., from ring 0 (&lt;span style="font-weight: bold;"&gt;kernel space&lt;/span&gt;) to ring 3 (&lt;span style="font-weight: bold;"&gt;user space&lt;/span&gt;). Code running in a lower privileged ring cannot manipulate a selector register to transition back to a higher privileged ring. That’s by design since the OS cannot trust arguments passed to it. From a security standpoint this is sound. You maintain the integrity of the system continuing to provide basic services to other applications and you make malice hard at this particular layer. And there are so many layers… this is why the term &lt;span style="font-style: italic;"&gt;computer security&lt;/span&gt; is such an overloaded term, has become hackneyed and means different things to different people.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But it turns out these ring transitions have an impact on performance!&lt;/span&gt; Any time you have boundary checks, whether they are metaphorical or literal (customs at the US border), things are slower than if you just let things through.&lt;br /&gt;&lt;br /&gt;And with Vista’s display drivers partially living in ring 3 (user space), there are likely more ring transitions than the driver model found under Windows XP and its predecessors, hence the 10% to 15% drops (or worse) in performance under Vista.&lt;br /&gt;&lt;br /&gt;So while Windows Vista is more stable and mitigates the blue screen of death problems of its predecessors, you get less bang for your buck as far as that screaming new video card goes (at least versus the guy who has Windows XP).&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:85%;"  &gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-3935463045696723363?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/3935463045696723363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=3935463045696723363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3935463045696723363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3935463045696723363'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/09/why-9-10.html' title='Why 9 &gt; 10'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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/_qeCrCZZbvYs/SMRMMItVZBI/AAAAAAAAABU/mv1CpVbp85E/s72-c/DirectX.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-867342237501868851</id><published>2008-05-12T06:10:00.000-07:00</published><updated>2008-05-12T07:15:38.407-07:00</updated><title type='text'>Practical *Extraction* and Report Language</title><content type='html'>Since its debut in the 80's PERL entrenched itself in many computer systems as its power found many uses. The advent of the web applications in the 90's saw PERL spread beyond its roots as the nascent web development community used it to write &lt;a href="http://en.wikipedia.org/wiki/CGI_script"&gt;CGI scripts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nevertheless PERL's forte is clearly communicated in its acronym. Perhaps you're after the &lt;span style="font-style: italic;"&gt;extraction&lt;/span&gt; of information from a large data set based on some arbitrary criteria. Perhaps the only thing you need is to generate a &lt;a href="http://en.wikipedia.org/wiki/Comma-separated_values"&gt;CSV file&lt;/a&gt; that will be fed to Microsoft Excel to generate a chart, a form of a &lt;span style="font-style: italic;"&gt;report&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The former was the case when a coworker brought me a log file with thousands of lines. He specifically wanted to filter lines in a log file where the criteria was an email address, here's a sample:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;./app.comp.log:2008-05-01 08:35:53,288 [WorkExecutorWorkerThread-3] ERROR com.mycompany.events.bo.ejb.NewsSubMDBean  - onMessage: Failed: &amp;lt;root&amp;gt;&amp;lt;com.ftd.events.core.NewsEventVO Status="UNSUBSCRIBE" OriginAppName="BOUNCE" &lt;b&gt;EmailAddress&lt;/b&gt;="anemail@nowhere.com" CompanyId="123" OperatorId="HARD BOUNCE" OriginTimestamp="1209600000000"/&amp;gt;&amp;lt;/root&amp;gt;&lt;br /&gt;&lt;br /&gt;./app.comp.log:2008-05-01 08:35:53,221 [WorkExecutorWorkerThread-3] ERROR com.mycompany.events.bo.ejb.NewsSubMDBean  - onMessage: Failed: &amp;lt;root&amp;gt;&amp;lt;com.ftd.events.core.NewsEventVO Status="UNSUBSCRIBE" OriginAppName="BOUNCE" &lt;b&gt;EmailAddress&lt;/b&gt;="anemail@nowhere.com" CompanyId="XYZ" OperatorId="HARD BOUNCE" OriginTimestamp="1209600000000"/&amp;gt;&amp;lt;/root&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In these two lines the email address is the same, so the second line and any other lines that followed would be disregarded.&lt;br /&gt;&lt;br /&gt;If the goal was to simply extract unique email addresses then the ubiquitous &lt;a href="http://www.gnu.org/manual/gawk/html_node/Cut-Program.html"&gt;cut&lt;/a&gt;, &lt;a href="http://www.delorie.com/gnu/docs/textutils/coreutils_28.html"&gt;sort&lt;/a&gt; and &lt;a href="http://www.gnu.org/software/coreutils/manual/html_node/uniq-invocation.html"&gt;uniq &lt;/a&gt;text utilities on *NIX platforms could trivially solve the problem. Except the goal was not to extract email addresses, the information around the email address needed preservation. This meant I couldn't apply a cut/sort/uniq solution.&lt;br /&gt;&lt;br /&gt;The solution was to employ PERL to save state. I was able to do this in a one-liner:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;cat unfiltered.txt |&lt;br /&gt;perl -lane ' m/EmailAddress=\"(.*)\"\sCompanyId/; if ( $have{$1} ) { ++$noise; } else { $have{$1} = 'yes'; print $_} ' &gt; filtered.txt&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-lane&lt;/span&gt; is one of my favorite command line switch combinations in PERL. &lt;span style="font-weight: bold;"&gt;a&lt;/span&gt; puts every line of input into the anonymous variable, &lt;span style="font-weight: bold;"&gt;$_&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;n&lt;/span&gt; gives you an implicit while loop to traverse input coming from &lt;a href="http://en.wikipedia.org/wiki/Standard_streams"&gt;stdin&lt;/a&gt;, &lt;span style="font-weight: bold;"&gt;l &lt;/span&gt;allows you to print information with an implicit newline to help shorten the length of your one liner when sending information back out. &lt;span style="font-weight: bold;"&gt;e&lt;/span&gt; simply is evaluate the expression (code) that follows.&lt;br /&gt;&lt;br /&gt;Using a regular expression and a hash allows me to keep track of which email addresses I've already seen. By not printing a line when an email address is already in the hash, I wind up with unique email addresses with surrounding context.&lt;br /&gt;&lt;br /&gt;Easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-867342237501868851?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/867342237501868851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=867342237501868851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/867342237501868851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/867342237501868851'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/05/practical-extraction-and-report.html' title='Practical *Extraction* and Report Language'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-1677863315840936543</id><published>2008-04-08T17:56:00.000-07:00</published><updated>2010-09-25T17:18:08.042-07:00</updated><title type='text'>Ultramon-itoring the Crysis</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qeCrCZZbvYs/SBc_7S1xcsI/AAAAAAAAABM/tXVEmrNc4n4/s1600-h/256px-Crysis_Boxart_Final.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_qeCrCZZbvYs/SBc_7S1xcsI/AAAAAAAAABM/tXVEmrNc4n4/s320/256px-Crysis_Boxart_Final.jpg" alt="" id="BLOGGER_PHOTO_ID_5194690983097365186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Several years ago I upgraded one of my &lt;a href="http://en.wikipedia.org/wiki/Cathode_Ray_Tube"&gt;CRT&lt;/a&gt;s to an &lt;a href="http://en.wikipedia.org/wiki/Liquid_crystal_display"&gt;LCD&lt;/a&gt;. The primary benefit of an LCD over a CRT is simply its increased clarity when working with text. Spend a short time on an LCD  looking over text and going back to a  CRT is painful (on the eyes).&lt;br /&gt;&lt;br /&gt;But my CRT has continued seeing use for &lt;span style="font-weight: bold;"&gt;one&lt;/span&gt; specific reason.&lt;br /&gt;&lt;br /&gt;If you've ever played a game that has panoramic views, e.g., first person shooters, a CRT has one big benefit over an LCD - fuzziness. "What's that?" you ask. It turns out that the great ability of LCDs to show razor sharp content isn't so great with real time generated panoramic views - the geometry of a scene is filled with noticeable stair step edges of polygons that make up the models that appear in the view.&lt;br /&gt;&lt;br /&gt;To combat this problem, over the years &lt;a href="http://en.wikipedia.org/wiki/Graphics_processing_unit"&gt;Graphics Processing Units&lt;/a&gt; (GPUs) from mainstream companies like &lt;a href="http://www.nvidia.com/page/home.html"&gt;nVidia&lt;/a&gt; and &lt;a href="http://ati.amd.com/products/home-office.html"&gt;ATI&lt;/a&gt; have become much more powerful. With that power, GPUs have increasingly been tasked with performing &lt;a href="http://en.wikipedia.org/wiki/Anti-aliasing"&gt;anti-aliasing&lt;/a&gt; to smoothen the edges of an image. The catch in this equation is that your GPU expends far more cycles computationally eliminating &lt;span style="font-style: italic;"&gt;the jaggies&lt;/span&gt; and this impacts the maximum frame rate you can achieve. It can turn a playable game on a CRT (with no anti-aliasing) into a sloth (unplayble) on an LCD (with anti-aliasing).&lt;br /&gt;&lt;br /&gt;A CRT's inability to show razor sharp text lends itself quite nicely to panoramic views that fill the entire screen vs. a small area where your focus is fixated on a &lt;span style="font-style: italic;"&gt;word&lt;/span&gt; (like the one I just italicized). By turning off full scene anti-aliasing while using a CRT, you spare a GPU a tremendous amount of work. It so happens a CRT’s lack of sharpness for text is great for wide vistas - the natural perspective of first person shooters.&lt;br /&gt;&lt;br /&gt;Only thing is, when I've wanted to use my old CRT for gaming, I've had the hassle of &lt;span style="font-style: italic;"&gt;making like a monkey &lt;/span&gt;and going through GUI motions - right clicking on the Windows desktop, selecting &lt;span style="font-style: italic;"&gt;Properties&lt;/span&gt; then making the CRT the main display. Then when I'm done, go through this all over again except this time making the LCD the main display.&lt;br /&gt;&lt;br /&gt;Yes GUIs are great but not when you need to perform a task &lt;span style="font-weight: bold;"&gt;repeatedly&lt;/span&gt;. Go through this enough times, which I have, and it gets old. Very old. There have been times I don’t even bother firing up a game on account of the hassle factor (but there’s another hassle factor that I’ll get to in a moment, it has to do with the position of application windows on the Windows desktop).&lt;br /&gt;&lt;br /&gt;But because of &lt;a href="http://en.wikipedia.org/wiki/Crysis"&gt;Crysis&lt;/a&gt; I’ve been going through the motions as annoying as they are. The game is simply that good. The visuals and realism are stunning. It really ups the ante for first person shooters in a big way.&lt;br /&gt;&lt;br /&gt;Before I go further I should point out that I use a very nice little utility program called Ultramon:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://realtimesoft.com/ultramon/overview/"&gt;http://realtimesoft.com/ultramon/overview/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One of the benefits of Ultramon is a task bar for every extra display you have. Applications sitting in other displays will fill the task bar found on &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; display versus the task bar of your primary display. This nice touch keeps the task bar on the primary display from getting cluttered. If you work with multiple displays, once you get used to Ultramon in this regard, it's hard living without it.&lt;br /&gt;&lt;br /&gt;Another nice Ultramon feature is the ability to set independent wallpapers for each display. Windows XP by default uses the same image on every display when you set your desktop background.&lt;br /&gt;&lt;br /&gt;Ultramon also happens to provide an icon in the task bar area that when navigated allows you to quickly set which display is the primary as well as disabling the secondary display. So firing up a game on my CRT, I would use Ultramon’s icon in the task bar to make my CRT the primary display then quickly disable the LCD. Why disable the LCD? Some games like &lt;a href="http://www.quake4game.com/"&gt;Quake 4&lt;/a&gt; consume a &lt;span style="font-weight: bold;"&gt;lot&lt;/span&gt; of video memory for &lt;a href="http://en.wikipedia.org/wiki/Texture_mapping"&gt;textures&lt;/a&gt;. I found that unless I disabled my secondary display, I could not run it at its maximum display settings (&lt;span style="font-style: italic;"&gt;Ultra&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;While using Ultramon is faster than right clicking on the Windows desktop and going through the usual motions, even so, the GUI (monkey) way still got old. Very old. Reverting was even even more work - I’ll get to that in a moment.&lt;br /&gt;&lt;br /&gt;Then I had some inspiration, I had a recollection that Ultramon provided COM objects with &lt;a href="http://en.wikipedia.org/wiki/OLE_Automation"&gt;OLE Automation&lt;/a&gt; support. This meant I could probably write some &lt;a href="http://en.wikipedia.org/wiki/VBscript"&gt;VBScript&lt;/a&gt; code to automate switching displays and setting things back to the way they were. After reading Ultramon's documentation I came up with these two scripts.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;gameCRT.vbs&lt;/b&gt;&lt;br /&gt;------&lt;br /&gt;&lt;br /&gt;Const POS_ALL = &amp;amp;H7&lt;br /&gt;&lt;br /&gt;Set sys = CreateObject("UltraMon.System")&lt;br /&gt;Set Sony = sys.Monitors("2")&lt;br /&gt;Set ViewSonic = sys.Monitors("1")&lt;br /&gt;&lt;br /&gt;sys.SavePositions POS_ALL&lt;br /&gt;Sony.Primary = True&lt;br /&gt;sys.ApplyMonitorChanges&lt;br /&gt;sys.SecondaryDisable&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;b&gt;enableLCD.vbs&lt;/b&gt;&lt;br /&gt;-------&lt;br /&gt;&lt;br /&gt;Const POS_ALL = &amp;amp;H7&lt;br /&gt;Set sys = CreateObject("UltraMon.System")&lt;br /&gt;&lt;br /&gt;sys.SecondaryEnable&lt;br /&gt;sys.ApplyMonitorChanges&lt;br /&gt;Set ViewSonic = sys.Monitors("1")&lt;br /&gt;&lt;br /&gt;ViewSonic.Primary = True&lt;br /&gt;&lt;br /&gt;sys.ApplyMonitorChanges&lt;br /&gt;sys.SecondaryDisable&lt;br /&gt;sys.SecondaryEnable&lt;br /&gt;sys.RestorePositions POS_ALL&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So the start of &lt;code&gt;gameCRT.vbs&lt;/code&gt; makes my Sony CRT the primary display, I apply this new state then I disable the secondary display which implicitly means my ViewSonic LCD. This bears some qualification. I expected to be able to set properties on my two displays then finish with a call to &lt;code&gt;ApplyMonitorChanges&lt;/code&gt; but that caused a very annoying problem, at least with a couple of permutations I came up with. Namely, when I re-enabled the LCD later… the positions of the monitors had become inverted so if I moused off the left edge of my LCD (the left display), the mouse pointer would appear on the monitor to the right (the CRT).&lt;br /&gt;&lt;br /&gt;Getting around this problem by playing with Ultramon’s object model consumed more time than anything else.&lt;br /&gt;&lt;br /&gt;The second script &lt;code&gt;enableLCD.vbs&lt;/code&gt; starts off with enabling the secondary display, which is my ViewSonic display on account of the first script implicitly making it the secondary. Then I set the &lt;span style="font-weight: bold;"&gt;Primary&lt;/span&gt; property making the Viewsonic LCD the primary display and again apply my changes with an invocation to &lt;code&gt;ApplyMonitorChanges&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;At this point in the script you would expect to be done but it turns out the Windows start menu is still displayed on the CRT even though the CRT is now the secondary display. You would think the Windows Start menu would naturally move itself to the primary display but that wasn't happening. As it turns out, this is not a new problem - I was experiencing the exact same behavior when I would do things interactively.&lt;br /&gt;&lt;br /&gt;To solve this problem I disable the secondary display (the CRT now) at which points Windows’ &lt;span style="font-style: italic;"&gt;Start Menu&lt;/span&gt; gravitates to the LCD (where it was before I decided to fire up a game). Finally, I re-enable the secondary display (the CRT). So reverting things takes additional steps whether you do it interactively or via my VBScript, the steps are logically the same.&lt;br /&gt;&lt;br /&gt;That’s why the script has:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sys.SecondaryDisable&lt;br /&gt;sys.SecondaryEnable&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It's not immediately obvious why I would disable the secondary display and then enable it immediately afterward but now you know.&lt;br /&gt;&lt;br /&gt;Back to back after the &lt;code&gt;ApplyMonitorChanges&lt;/code&gt; call.&lt;br /&gt;&lt;br /&gt;Ultramon can also keep track of the positions of the windows of applications as you flip flop. Notice this statement in the first script:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sys.SavePositions POS_ALL&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And the following statement in the second script:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sys.RestorePositions POS_ALL&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.winamp.com/"&gt;WinAmp&lt;/a&gt; is very, Very, VERY annoying when you change which display is the primary. The lower half of WinAmp, the playlist, detaches itself from the top half of WinAmp and the two windows get tossed to random positions on the desktop. Meaning WinAmp winds up in an altogether different location than where it was running. Then you have to spend time re-juxtaposing WinAmp's windows. Like I said, &lt;span style="font-weight: bold;"&gt;extremely annoying&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I also happen to run my CRT at a lower resolution than my LCD. This means when the secondary (LCD) is disabled after making the CRT the primary, applications like Firefox snap to the new smaller dimension of my Windows XP desktop. Unfortunately when I re-enable the LCD and make it the primary, applications do not snap back to their original size and location. Which means you wind up having to resize and re-situate all your applications.&lt;br /&gt;&lt;br /&gt;It shouldn't be surprising that there are times you don't even bother firing up a game on account of all this. But with scripting and Ultramon being able to save state, all these hassles are eliminated.&lt;br /&gt;&lt;br /&gt;Lastly I created two batch files, &lt;span style="font-style: italic;"&gt;gameCRT&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;lcd&lt;/span&gt; which simply map to:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cscript /nologo gameCRT.vbs&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cscript /nologo enableLCD.vbs&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I have to give kudos to Microsoft for having architected Windows in such a way that it facilitates the development of scriptable objects by third party vendors. Considering the hassles eliminated, I really didn't care what scripting language was at play - VBScript, PERL, Python, etc., etc. In the end I automated the swapping of displays to more easily get my game on with the CRT whenever I saw fit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-1677863315840936543?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/1677863315840936543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=1677863315840936543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1677863315840936543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1677863315840936543'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/04/ultramon-itoring-crysis.html' title='Ultramon-itoring the Crysis'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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://bp3.blogger.com/_qeCrCZZbvYs/SBc_7S1xcsI/AAAAAAAAABM/tXVEmrNc4n4/s72-c/256px-Crysis_Boxart_Final.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-5828344936144406819</id><published>2008-04-02T16:11:00.000-07:00</published><updated>2008-04-02T16:34:02.347-07:00</updated><title type='text'>Are You A god? Probably. You Just Don't Know It.</title><content type='html'>What could I possibly be talking about with a subject like that? Readers will find out soon enough. I've been working on a project. Something for Windows XP/2000 and to a lesser degree Windows Vista.&lt;br /&gt;&lt;br /&gt;I submitted the program (with an installer) to &lt;a href="http://www.download.com/"&gt;Download.com&lt;/a&gt; and was given a public availability date of April 11th.&lt;br /&gt;&lt;br /&gt;Yes, with this blog entry I'm not writing a  "small book". What I created goes beyond catering to a technical readership. It has application to anyone who uses a web browser, including your uncle John who may have gotten his first computer last week because it seems some of his coworkers at the factory got one. Or your aunt Mary because she's into cooking and her best friend Sally whom she bowls with every Friday has gotten tons of recipes off the Internet. Now your aunt Mary wants to dive headlong into the Internet and she's been bugging you to go to &lt;a href="http://www.bestbuy.com/"&gt;Best Buy&lt;/a&gt; with her to pick a computer. Or, your grandmother, if she's a vanguard for her age group. But, most importantly, &lt;span style="font-weight: bold;"&gt;you&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've been trying to think of a catchy domain. More to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-5828344936144406819?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/5828344936144406819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=5828344936144406819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/5828344936144406819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/5828344936144406819'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/04/are-you-god-probably-you-just-dont-know.html' title='Are You A god? Probably. You Just Don&apos;t Know It.'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-8214715455362903442</id><published>2008-03-24T11:14:00.000-07:00</published><updated>2008-05-12T08:45:16.255-07:00</updated><title type='text'>Just A Bad Memory</title><content type='html'>Java &lt;a href="http://en.wikipedia.org/wiki/Application_server"&gt;application servers&lt;/a&gt; have become pervasive in the last decade as web based applications have replaced &lt;span&gt;old school&lt;/span&gt; &lt;a href="http://en.wikipedia.org/wiki/Visual_Basic"&gt;Visual Basic&lt;/a&gt; (VB) applications. Nowadays many corporate web applications are written using Java where the code ultimately runs on a &lt;a href="http://en.wikipedia.org/wiki/J2EE"&gt;J2EE &lt;/a&gt;application server. Java's pedigree is C++ and much to &lt;a href="http://joelonsoftware.com/"&gt;Joel Spolsky's&lt;/a&gt; chagrin, Java makes things &lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;much easier&lt;/a&gt; on developers in one area, &lt;a href="http://en.wikipedia.org/wiki/Dynamic_memory_allocation"&gt;memory allocation&lt;/a&gt;. In C/C++ a programmer is completely responsible for allocating and deallocating memory. Because of this, bugs at every level, from drivers to operating systems to applications, have found life in C and C++ codebases since the inception of those programming languages in the 70's and 80's, respectively.&lt;br /&gt;&lt;br /&gt;Java does away with this onus by completely managing memory. Developers are free to use memory liberally with nary a care. Memory is reclaimed by the Java runtime through &lt;a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29"&gt;garbage collection&lt;/a&gt; in the background.&lt;br /&gt;&lt;br /&gt;But garbage collection has issues of its own. The biggest is that applications can appear to hang as the Java runtime expends more time trying to reclaim memory than executing code. If you have a time sensitive situation, it can result in outright application failure.&lt;br /&gt;&lt;br /&gt;Such was the case when some applications at my employer running under Oracle's application server would die after running an extended period of time. Application failure in the logs was indicated by successive log entries in a short period of time indicating full garbage collection, e.g.:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;2624761.994: [Full GC ... 13.5346127  secs]&lt;br /&gt;2624787.633: [Full GC ... 13.4446663  secs]&lt;br /&gt;2624824.282: [Full GC ... 13.4713927  secs]&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The indicator here is &lt;span style="font-style: italic;"&gt;Full GC&lt;/span&gt;. This example indicates full garbage collection had taken place three times in less than a minute. I was asked if successive garbage collection could be monitored, sending an alert if in fact that was the case.&lt;br /&gt;&lt;br /&gt;Monitoring a single file is easy, a quick PERL hack would be:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;open FH, "tail -f log_file |"&lt;br /&gt;while( &amp;lt;FH&amp;gt; ) {&lt;br /&gt;if ( m/some_string/ ) {&lt;br /&gt;  # Do something when I've seen "some_string"&lt;br /&gt;  # Like send an email&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;You could &lt;a href="http://en.wikipedia.org/wiki/Nohup"&gt;nohup&lt;/a&gt; such a script and leave it running indefinitely in the background.&lt;br /&gt;&lt;br /&gt;The problem with such an approach is an application server tends to house lots of J2EE applications. You would need a script for each application.&lt;br /&gt;&lt;br /&gt;This simple solution does not get around the fact that log files are typically rotated away in the middle of the night. In other words, after a day the log file that is being monitored is no longer reflecting transactions on account of having been renamed with a date extension and moved elsewhere. A new log file is created and the monitor would not be attached to this new file.&lt;br /&gt;&lt;br /&gt;Such a solution would also be maintenance prone since a monitoring script would be needed for each application. Therefore with new applications, a script would have to follow in tow and over time the monitoring system may not reflect what is actually running inside a J2EE application server. This shouldn't be surprising since it's quite common for people who write monitors to be separate from application developers.&lt;br /&gt;&lt;br /&gt;Furthermore different servers have different applications so now you have a set of monitoring scripts that varies depending on what server you're situated at.&lt;br /&gt;&lt;br /&gt;Taking all this into consideration I devised a &lt;a href="http://en.wikipedia.org/wiki/Fork_%28operating_system%29"&gt;forking&lt;/a&gt; PERL script that gets around all these problems. Forking is not something that surfaces often when writing PERL scripts but its use can greatly simplify some problems. The solution I devised was to have a parent process spawn one child for every log file (associated with an application). The log files are enumerated through a regular expression and the file list is then fed into the PERL script. This way I do not need to keep a list of what applications are running where. In the case of Oracle's application server it prefixes application logs with &lt;span style="font-style: italic;"&gt;OC4J~OC4J_&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;ls | egrep "OC4J~OC4J_[A-Z]+" | egrep -v ":[0-9]+$" |&lt;br /&gt;nohup perl monitorGC.pl &amp;amp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And finally the PERL script itself:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;$SIG{CHLD} = 'IGNORE';&lt;br /&gt;&lt;br /&gt;# Variable a bit of a misnomer at this point, length of time&lt;br /&gt;# for parent to sleep.&lt;br /&gt;$logRotationInterval = 3600; #seconds&lt;br /&gt;&lt;br /&gt;# If we see full garbage collection happening more than once in this&lt;br /&gt;# interval, send an alert.&lt;br /&gt;$interval = 60; # seconds&lt;br /&gt;&lt;br /&gt;@files = &lt;&gt;;&lt;br /&gt;chomp(@files);&lt;br /&gt;&lt;br /&gt;# Process IDs of children;&lt;br /&gt;@pids;&lt;br /&gt;&lt;br /&gt;while ( true ) {&lt;br /&gt;    # Loop forever. After one day spawned children will quit since log&lt;br /&gt;    # files are rotated once a day. This main loop will then spawn new&lt;br /&gt;    # children (see comments below).&lt;br /&gt;&lt;br /&gt;    for ( $index=0; $index&lt;=$#files; ++$index ) {&lt;br /&gt;        my $pid = fork();&lt;br /&gt;        $pids[$index] = $pid;&lt;br /&gt;        if ( $pid == 0 ) {&lt;br /&gt;            $last = 0;&lt;br /&gt;&lt;br /&gt;            open FH, "tail -f $files[$index]|";&lt;br /&gt;            while( &lt;fh&gt; ) {&lt;br /&gt;                if ( m/\[Full GC/ ) {&lt;br /&gt;                    if  ( m/([0-9]+\.[0-9]+) secs]/ ){&lt;br /&gt;                        if ( $1 &gt; 2 ) { # If Full GC is Over 2 seconds&lt;br /&gt;                            m/^([0-9]+\.[0-9]+):/;&lt;br /&gt;                            open LOGENTRY, "&gt;/tmp/monitorGCevent.txt";&lt;br /&gt;                            print LOGENTRY $files[$index]."\n\n";&lt;br /&gt;                            print LOGENTRY $_;&lt;br /&gt;                            close LOGENTRY;&lt;br /&gt;                            if ( $1 - $last &lt; $interval ) {&lt;br /&gt;                                `./sendGCMail.sh $files[$index]`;&lt;br /&gt;                            }&lt;br /&gt;                            $last = $1;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    # Sleep while children do their work&lt;br /&gt;    sleep $logRotationInterval;&lt;br /&gt;&lt;br /&gt;    # Kill children there's no reliable way to have them exit&lt;br /&gt;    for ( $index=0; $index&lt;=$#files; ++$index ) {&lt;br /&gt;       `kill -9 $pids[$index]`;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    # Kill the tail processes that were spawned&lt;br /&gt;    `killTails.sh`;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So there you have it. A PERL script that is application agnostic that monitors successive garbage collection events and sends out an email when such an event is detected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-8214715455362903442?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/8214715455362903442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=8214715455362903442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/8214715455362903442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/8214715455362903442'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/03/just-bad-memory.html' title='Just A Bad Memory'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-9005745153532032718</id><published>2008-03-13T19:53:00.000-07:00</published><updated>2008-03-17T15:00:45.972-07:00</updated><title type='text'>GotoMySshPC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_qeCrCZZbvYs/R97Ce6LcgcI/AAAAAAAAAAk/NJnFjHxoqRk/s1600-h/SSHonWindows.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp3.blogger.com/_qeCrCZZbvYs/R97Ce6LcgcI/AAAAAAAAAAk/NJnFjHxoqRk/s320/SSHonWindows.PNG" alt="" id="BLOGGER_PHOTO_ID_5178790457791775170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;One question that surfaces sporadically when managing Internet facing IT systems is &lt;span style="font-style: italic;"&gt;What does the rest of the world see?&lt;/span&gt; Occasionally after a systems deployment Internet traffic cannot reach some or all of the systems deployed.&lt;br /&gt;&lt;br /&gt;This past week for the Nth time in my career this question surfaced. Everyone uses email but few understand the mechanism by which email delivery actually happens. MX records are the key; more on the topic in a moment.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Domain_name_system"&gt;Domain Name Servers (DNS)&lt;/a&gt; translate easily read and memorized host names such as &lt;span style="font-style: italic;"&gt;www.google.com&lt;/span&gt; into TCP/IP addresses, that are not so easy to remember. For example, my Windows XP desktop currently would try to hit one of the following TCP/IP addresses if I were to browse &lt;a href="http://www.google.com/"&gt;www.google.com&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;64.233.167.99&lt;br /&gt;72.14.207.99&lt;br /&gt;64.233.187.99&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Quick! Look away! Can you recall any of those IP addresses? If you're like most people, probably not. This particular information was retrieved from my ISP's DNS server. A DNS server therefore is not much different than a phone book.&lt;br /&gt;&lt;br /&gt;DNS servers also play the crucial role of facilitating mail delivery. They store different types of information and the type used for facilitating the delivery of mail is the &lt;a href="http://en.wikipedia.org/wiki/MX_record"&gt;MX record&lt;/a&gt;. MX is short &lt;span style="font-style: italic;"&gt;Mail eXchange&lt;/span&gt;r. When using an email client such as Outlook to send an email, your ISP's mail server which Outlook happens to be chatting with, ultimately has to talk to another computer to deliver the email you just wrote. What computer your ISP's mail server talks to, to deliver that email, is answered by MX records.&lt;br /&gt;&lt;br /&gt;One morning mail delivery for a particular domain of my employer was failing and I was called to investigate. On a hunch I did an MX record query for the domain in question and noticed the MX records for the domain had disappeared. This meant that mail delivery to that domain would fail. After further investigation it seems a typo in a DNS configuration file associated with a publish the day prior caused the problem. The resolution was to correct the typo, republish our DNS information and have it propagate across the Internet.&lt;br /&gt;&lt;br /&gt;DNS is a hierarchical system. If your local DNS server does not have information that is requested, e.g., &lt;span style="font-style: italic;"&gt;what does www.crazydeals.com resolve to?&lt;/span&gt;, the request propagates upwards ultimately reaching the top of the hierarchy reaching the root DNS servers of the Internet. The top of the hierarchy is then responsible for disseminating changes is has become privy to, changes that have often occurred at the bottom of the hierarchy. As news of a local change reaches the top, queries from DNS servers at the bottom of the hierarchy percolate to the top reaching the authoritative servers who then pass that information back down about the change that was made in another part of the tree.  This information exchange among DNS servers is constantly happening. It usually takes several hours for DNS changes one makes locally to spread across the Internet, sometimes longer.&lt;br /&gt;&lt;br /&gt;As the day wore on, I was in the office and wanted to check what my home system saw, i.e., was the DNS change that was made to correct the typo making its way across the Internet.&lt;br /&gt;&lt;br /&gt;Thus the age old problem of wanting to conveniently reach my home computer while at the office to check what it was seeing on the public Internet had reared its head again. Once while doing contract work I overheard an individual in a cubicle next to me call his wife to ask her to browse pages to see if they were publicly available. Suffice to say, this problem surfaces on a semi-regular basis over the course of one's career.&lt;br /&gt;&lt;br /&gt;Several years ago I had setup a LINUX box that I would reach via &lt;a href="http://en.wikipedia.org/wiki/Secure_Shell"&gt;SSH&lt;/a&gt;. SSH (Secure Shell) is a cryptographic protocol that provides a mechanism to allow issuing commands to a remote computer system. While most people are used to GUI desktops, most back end computer systems are controlled through command line interfaces. If you think the monolithic bank that houses your money along with that of hundreds of thousands other people manages it all by clicking on icons with a mouse, think again. SSH is commonly the substrate by which remote control/management of many large IT systems happens.&lt;br /&gt;&lt;br /&gt;One particular command line program that can be used to query DNS servers is &lt;a href="http://en.wikipedia.org/wiki/Nslookup"&gt;nslookup&lt;/a&gt; and it comes with any contemporary operating system that connects to the Internet. Every single eye-candy laden Windows and Macintosh system ships with this command line tool. Thus if I could reach my Windows XP desktop, I could use this tool to gauge how far along our change had propagated. At least one vantage point anyway, that of my ISP's DNS servers. Not all DNS servers are public facing, which is why I wanted to see what my home system saw. I wanted to see if the change had &lt;span style="font-style: italic;"&gt;trickled down&lt;/span&gt; to the private portions of the DNS hierarchy.&lt;br /&gt;&lt;br /&gt;There are commercial services that allow one to readily reach one's home computer. One of the better known services is &lt;a href="http://www.gotomypc.com/"&gt;GotoMyPC&lt;/a&gt;. My primary issue with GotoMyPC  is cost. It runs about $180 for one PC and it is a service, which means count on paying $180 every year.&lt;br /&gt;&lt;br /&gt;Another option would be to have the desktop you find yourself at become part of your home network. This is a more general scenario than what GotoMyPC does and is the reverse of what most people do when &lt;span style="font-style: italic;"&gt;working remotely&lt;/span&gt;. So instead of you connecting to your office via a &lt;a href="http://en.wikipedia.org/wiki/VPN"&gt;VPN&lt;/a&gt; client, where by though the powers of indirection, you suddenly join your office's network allowing you to &lt;span style="font-style: italic;"&gt;work remotely&lt;/span&gt;, you would do the same except in the reverse. Your office desktop becomes an extension of your home network. To this end there is an excellent piece of open source software called &lt;a href="http://openvpn.net/index.php"&gt;OpenVPN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;However a VPN solution to the home has two problems. One is that almost all home TCP/IP addresses are part of a &lt;a href="http://en.wikipedia.org/wiki/DHCP"&gt;DHCP&lt;/a&gt; pool so your TCP/IP address changes when the DSL/cable modem sitting in your home has to renegotiate its connection if for any reason connectivity is interrupted, however brief the interruption may be. So if you were to take note of your TCP/IP address, you may find that the next time you were inclined to connect to your home PC,  your home network's TCP/IP address is no longer the same. You would be completely out of luck.&lt;br /&gt;&lt;br /&gt;A solution to this particular problem exists in the form of an organization known as &lt;a href="http://www.dyndns.com/"&gt;DynDNS&lt;/a&gt;. They allow you to associate your home TCP/IP address with a world wide hostname/domain. This means after registering a domain and using DynDNS to provide DNS services for said domain, you could use something like &lt;span style="font-style: italic;"&gt;mypc.mydomain.com&lt;/span&gt; when telling OpenVPN to connect to your home network while you are sitting at the office.&lt;br /&gt;&lt;br /&gt;Since DynDNS and OpenVPN are free, they are a much more attractive scenario than the pricey yearly cost of GotoMyPC. However you still need to register a domain with a &lt;a href="http://en.wikipedia.org/wiki/Domain_name_registrar"&gt;registrar&lt;/a&gt; before &lt;span style="font-style: italic;"&gt;mypc.mydomain.com&lt;/span&gt; (whatever it really happens to be) takes on life. The cost of registering a domain is nominal and about an order of magnitude less per year (vs. GotoMyPC's yearly cost) if you shop around.&lt;br /&gt;&lt;br /&gt;There is still one issue that GotoMyPC readily gets around that the OpenVPN/DynDNS solution does not. If your home connectivity is lost and a new IP address is issued, when this information reaches DynDNS' servers it can take several hours before this information (the new IP address) propagates across the Internet. But &lt;a href="http://en.wikipedia.org/wiki/Murphy%27s_Law"&gt;Murphy's Law&lt;/a&gt; may be in full force on a day you really are inclined to reach your home network. If per chance your DSL/cable modem did receive a new TCP/IP address, DNS propagation means it will be several hours before you can connect.&lt;br /&gt;&lt;br /&gt;GotoMyPC gets around this by having agent software that chats with their own centralized servers. The agent communicates your home network's current TCP/IP address to centralized servers so DNS is not even involved when trying to reach your home desktop through their service.&lt;br /&gt;&lt;br /&gt;If you do go down the DynDNS/OpenVPN route, then like any real business you better remember to renew the domain otherwise you will find your convenient hostname &lt;span style="font-style: italic;"&gt;mypc.mydomain.com&lt;/span&gt; one day no longer works. It is actually a common problem and various companies including the likes of &lt;a href="http://www.doublewide.net/"&gt;Microsoft&lt;/a&gt; have readily &lt;a href="http://www.theregister.co.uk/2003/11/06/microsoft_forgets_to_renew_hotmail/"&gt;forgetten to do this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Stepping back for a moment, this all boils down to having information readily in hand, i.e. what's the current TCP/IP address affiliated with my DSL/cable modem's connection to the Internet.&lt;br /&gt;&lt;br /&gt;So after this past week I decided to solve this problem once and for all so I could always readily reach my home network, without cost and without hassles. No GotoMyPC, no OpenVPN/DynDNS, no registrars, no accounts with anyone.&lt;br /&gt;&lt;br /&gt;Earlier I mentioned that I used to have a LINUX box with SSH running. The primary detractor in continued use was the fact that the TCP/IP address into my home network would change. Eventually I simply abandoned its use. Neither OpenVPN or DynDNS existed at the time.&lt;br /&gt;&lt;br /&gt;Once again I would leverage SSH, specifically &lt;a href="http://openssh.org/"&gt;OpenSSH&lt;/a&gt;. While most IT administrators are used to using SSH with *NIX systems or network devices, it turns out OpenSSH can readily be configured to run as a service on a Windows XP/Vista/200x systems, thereby affording remote control/issuance of commands. OpenSSH can be downloaded as part of Cygwin:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cygwin.com/"&gt;www.cygwin.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cygwin is a layer of software that makes a Windows system appear *NIX-like. This means, among other things, various open source applications such as Apache's web server (1.3.x) can be compiled and run on a Cygwin equipped system with no changes to the *NIX source code whatsoever. But outside of providing programmatic similarities it also provides ports of back end services such as SSH (OpenSSH). Rather than dive into the gory details of setting up SSH on Windows, go &lt;a href="http://ist.uwaterloo.ca/%7Ekscully/CygwinSSHD_W2K3.html"&gt;here&lt;/a&gt; for an excellent &lt;span style="font-style: italic;"&gt;how-to&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Cygwin provides all the command line utilities commonly used in *NIX. People often collectively call a software system &lt;span style="font-style: italic;"&gt;LINUX&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;UNIX&lt;/span&gt;, etc. but many of the tools employed in those environments have no intrinsic functionality that ties them to any single operating system. For example, many of the GNU command line utilities &lt;a href="http://unxutils.sourceforge.net/"&gt;have been ported to Windows&lt;/a&gt;. The executables are stand alone and run on Windows without any dependencies. When installing Cygwin, all of these tools are available, including &lt;a href="http://en.wikipedia.org/wiki/Command_interpreter"&gt;command interpreters&lt;/a&gt; such as the &lt;a href="http://en.wikipedia.org/wiki/Bash_shell"&gt;bash shell&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;All this means I should be able to write a script that allows me to retrieve the world wide TCP/IP address associated with my home network. This information however is not stored on any single machine inside of my home network. Like most people I have a home router fronting my network connections. Using my home router's web interface I can readily see what my outside TCP/IP address happens to be so the task is getting this information through a script.&lt;br /&gt;&lt;br /&gt;Most people use their web browsers to fetch web pages but the HTTP protocol is very simple and command line utilities exist to do the same. They often form the basis of "heart beating" web applications, i.e., if I can fetch a web page, the web application is still up, if not, send out an email alert. But they have other uses such as this one. I simply want to log into the router, hit the web page that contains my outside TCP/IP address information then finally do something with that information. Easy enough:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/bash&lt;br /&gt;&lt;br /&gt;while [ true ]; do&lt;br /&gt;sleep 600&lt;br /&gt;wget --http-user=user --http-password=passwd&lt;br /&gt; http://192.168.1.1/Status.htm&lt;br /&gt;cat Status.htm | cut -c3967-3981 |&lt;br /&gt; perl -lane 'm/([0-9.]+)/; print $1' &gt; currentIP&lt;br /&gt;diff currentIP lastIP&lt;br /&gt;if [ $? -ne "0" ]; then&lt;br /&gt;# Send mail about IP change&lt;br /&gt;cscript sendIPAddressViaMail.vbs&lt;br /&gt;cp currentIP lastIP&lt;br /&gt;fi&lt;br /&gt;rm Status.htm&lt;br /&gt;done&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My home router performs &lt;a href="http://en.wikipedia.org/wiki/Basic_access_authentication"&gt;basic access authentication&lt;/a&gt; and I can pass the requisite username/password through command line arguments to the &lt;a href="http://en.wikipedia.org/wiki/Wget"&gt;wget&lt;/a&gt; utility program when I retrieve the web page that contains the TCP/IP address my DSL modem negotiated. In the case of my LinkSys router that happens to be:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;http://192.168.1.1/Status.htm&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Initially I used wget in an ad hoc manner and it by default it stores the page fetched in a file. I noticed the page that had been returned from the router had no line breaks so I fired up EMACS and navigated to the column where the TCP/IP address affiliated with my outside connection starts. Noting the column offset I scripted &lt;a href="http://en.wikipedia.org/wiki/Cut_%28Unix%29"&gt;cut&lt;/a&gt; to pluck 15 characters (max possible TCP/IP address string length). Finally  I filter the string through PERL so that only characters making up a TCP/IP address would be in the final string that I output to the console.&lt;br /&gt;&lt;br /&gt;I store the extracted TCP/IP address in a file named &lt;span style="font-style: italic;"&gt;currentIP&lt;/span&gt; and compare it with the &lt;a href="http://en.wikipedia.org/wiki/Diff"&gt;diff&lt;/a&gt; command to the last IP address (&lt;span style="font-style: italic;"&gt;lastIP&lt;/span&gt; is initially setup by hand). If there are no differences in the files (determined by checking diff's exit code), this indicates my TCP/IP address has not changed so the script goes to sleep for another ten minutes (600 seconds).&lt;br /&gt;&lt;br /&gt;If the files are different then things get a bit more interesting. How do I communicate this information? Most *NIX administrators use the &lt;a href="http://en.wikipedia.org/wiki/Mailx"&gt;mailx&lt;/a&gt; utility to send email via their scripts. The problem with mailx is that it assumes there is a local mail server running and running your own mail server is a can of worms onto itself. And honestly I'm not inclined to run a mail server on my Windows desktop. Rather than dive into such issues, I leverage Microsoft Outlook. Knowing that the Microsoft Office applications can be automated with VBScript, I concocted the following script that is executed through the Windows command line tool &lt;a href="http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/wsh/htm/wsRunCscript.asp"&gt;cscript&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;ESubject = "IP Address change"&lt;br /&gt;SendTo = "mymail@someWebMailAccount.com"&lt;br /&gt;Ebody = "IP Address change"&lt;br /&gt;NewFileName = "D:\cygwin\home\mariop\currentIP"&lt;br /&gt;&lt;br /&gt;Set App = CreateObject("Outlook.Application")&lt;br /&gt;Set Itm = App.CreateItem(0)&lt;br /&gt;With Itm&lt;br /&gt;.Subject = ESubject&lt;br /&gt;.To = SendTo&lt;br /&gt;.Body = Ebody&lt;br /&gt;.Attachments.Add (NewFileName)&lt;br /&gt;.send&lt;br /&gt;End With&lt;br /&gt;Set App = Nothing&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The script sends a text file that contains the TCP/IP address my DSL modem last negotiated as an attachment to my web based email account. This way I can always just browse my web mail to find out my home network's current TCP/IP address. If my TCP/IP address changes, an email will be sent out within ten minutes.&lt;br /&gt;&lt;br /&gt;There was one last hurdle to this solution. In 2002 given the prevalence of VBScript based worms in years prior, Microsoft changed Outlook such that automating the sending of emails was not possible without confirming email sends. Outlook will now issue a pop up asking whether or not to allow email being sent through a script. This a major fly in the ointment since I need this to be unattended since after all I'm not at my home PC. After some googling I came up some freeware:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.contextmagic.com/express-clickyes/"&gt;http://www.contextmagic.com/express-clickyes/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The latter page shows the pop up that surfaces if email is sent via VBScript.&lt;br /&gt;&lt;br /&gt;There you have it, with all this in place I'm assured of always being able to reach my home desktop. No GotoMyPC, no OpenVPN/DynDNS, no registrars, no accounts with anyone.&lt;br /&gt;&lt;br /&gt;It turns out the solution I employ can be used in conjunction with OpenVPN eliminating the need for DynDNS and having to register your own domain. However I prefer SSHing since this allows the computer I'm working on to maintain its local context. I can readily switch between what I'm doing at work and what I might want to do at home. Namely, the machine I'm working at doesn't become part of my home network and suddenly local/work resources are unavailable to me.&lt;br /&gt;&lt;br /&gt;If you're at all familiar with SSH's abilities you can tunnel various application protocols such as &lt;a href="http://en.wikipedia.org/wiki/Remote_Desktop_Protocol"&gt;Microsoft's Remote Desktop&lt;/a&gt;. This means I can reach my graphical Windows XP desktop as the need arises. Which is exactly what GotoMyPC provides. Except in my case, without the $180 yearly cost.&lt;br /&gt;&lt;br /&gt;When I establish an SSH connection to my home system, I do something like this using the SSH binary that is part of Cygwin on my work machine:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ssh -L 3390:localhost:3389 my_home_ip_address&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;After I've logged onto my home system instead of giving a machine name to Microsoft's Remote Desktop client while I'm sitting at the office, I simply specify:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;localhost:3390&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And before too long I get a login to my home Windows XP desktop while sitting at the office. The entire &lt;span style="font-style: italic;"&gt;conversation&lt;/span&gt; between work and home computers is encrypted.&lt;br /&gt;&lt;br /&gt;GotoMySshPC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-9005745153532032718?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/9005745153532032718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=9005745153532032718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/9005745153532032718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/9005745153532032718'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2008/03/gotomysshpc.html' title='GotoMySshPC'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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://bp3.blogger.com/_qeCrCZZbvYs/R97Ce6LcgcI/AAAAAAAAAAk/NJnFjHxoqRk/s72-c/SSHonWindows.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9182309753824387217.post-4037640961241855503</id><published>2007-12-18T06:28:00.000-08:00</published><updated>2007-12-24T11:14:18.910-08:00</updated><title type='text'>Mod-direction</title><content type='html'>If levels of indirection in our lives were as prevalent as those found in information technology, life would be pretty tedious and it would be an awful lot of work to get even small things done. Yet levels of indirection are par for the course in technology. The abstractions they engender form a patchwork that give us the applications we are accustomed to using. Everything from desktop applications to the &lt;a href="http://en.wikipedia.org/wiki/World_Wide_Web"&gt;World Wide Web&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For example we speak of &lt;a href="http://en.wikipedia.org/wiki/32-bit"&gt;32 bit&lt;/a&gt; processors and increasingly &lt;a href="http://en.wikipedia.org/wiki/64_bit"&gt;64 bit&lt;/a&gt; processors and it is mostly understood by those in technology that this delimits addressable memory. Which means that in the case of your 32 bit system (probably; at the time this was written) it can address 2^32 bytes of memory or more specifically 4 gigabytes in the context of a single application. In the case of a 64 processor this rises to 1.84467441 × 10^19 bytes. That's:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;18,446,744,100,000,000,000&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So a 4.6 billion times increase over what a 32 bit processor can address.&lt;br /&gt;&lt;br /&gt;But it turns out that other "bits" dictate the bytes that make up the data and code associated with our applications. The Intel x86 architecture for example has registers called &lt;a href="http://en.wikipedia.org/wiki/Memory_segment"&gt;selectors &lt;/a&gt;which comprise 16 bits. The first 13 bits are actually an index into a table the processor keeps, the next bit dictates which table to do a lookup against. A single bit has two states, 0 or 1, which means that there's two tables. These happen to be called &lt;a href="http://en.wikipedia.org/wiki/Global_descriptor_table"&gt;Global Descriptor Table&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Local_Descriptor_Table"&gt;Local Descriptor Table&lt;/a&gt;. 2^13 means 8192 possibilities which means there's at least 16,384 initial paths before the 32 or 64 bits that people typically speak of start to take context - in the form of either code to be executed or data to manipulate. To make things very lucid for a 64 bit processor this means:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;18,446,744,100,000,000,000 x 16,384&lt;/code&gt; logical paths to code and data&lt;br /&gt;&lt;br /&gt;To quote Sir Isaac Newton, "If I have been able to see further it is because I have stood on the shoulders of giants."&lt;br /&gt;&lt;br /&gt;Much of we take for granted in our every day lives is attributable to "behind the scenes" machinations seemingly akin to caricatures of  of mouse trap contraptions that have played themselves out in pop culture from cartoons to &lt;a href="http://en.wikipedia.org/wiki/Mouse_Trap_%28board_game%29"&gt;board games&lt;/a&gt;.  From the power grid system to water flowing through our lavatories to the Internet there is much ado with the conveniences we are accustomed to with the flick of a finger.&lt;br /&gt;&lt;br /&gt;A router in a home masks the fact that a user has several machines behind a single TCP/IP address. This many to one relationship is a level of indirection. This indirection, redirection or in the case of malice, misdirection (think &lt;a href="http://en.wikipedia.org/wiki/Botnet"&gt;botnets&lt;/a&gt;), happens at a level that both endpoints are oblivious to, e.g., a web browser and a web server.&lt;br /&gt;&lt;br /&gt;Things get interesting when decision making (indirection) happens at the the initial stage of browsing a web site,  which is mutually exclusive of the indirection happening at your home router. It may turn out that the initial chatter your web browser conducts when going against your favorite web site is really against a load balancing device that makes decisions based on the URLs you are requesting. So when you hit &lt;span style="font-weight: bold;"&gt;www.my-favorite-site.com/&lt;span style="font-style: italic;"&gt;search&lt;/span&gt;/query.jsp&lt;/span&gt;, the device keys off of &lt;span style="font-style: italic;"&gt;search&lt;/span&gt; in the URL and always sends these page requests to one or more web servers dedicated to searching the knowledge space of that site. To this end, products from &lt;a href="http://www.f5.com/products/big-ip/"&gt;f5&lt;/a&gt; are well known in the industry. This is often known as &lt;a href="http://en.wikipedia.org/wiki/OSI_model"&gt;layer 7&lt;/a&gt; load balancing. Layer 7 is the top most layer  of the &lt;a href="http://en.wikipedia.org/wiki/OSI_model"&gt;OSI model&lt;/a&gt; of networking and is called the &lt;span style="font-style: italic;"&gt;application&lt;/span&gt; layer since that layer is closest to the abstractions that make up an application, in the example given, the request to a search page for information.&lt;br /&gt;&lt;br /&gt;A home router works at layer 3. All these layers are levels of indirection that build on top of each other to facilitate the applications that are familiar to any contemporary Net user, from IM to web browsers to Bittorrent clients.&lt;br /&gt;&lt;br /&gt;Another potential decision point for web servers is the kind of &lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods"&gt;HTTP method&lt;/a&gt; a client is making. The HTTP protocol allows a client, such as a web browser to make different types of requests to a web server. An overwhelming majority of requests made against sites are usually GET requests by web browsers and it means what it insinuates &lt;span style="font-style: italic;"&gt;get me a page&lt;/span&gt;. The second most common HTTP method is the POST method. This method is usually used with forms, so anytime you've entered your name, address and credit card and hit the &lt;span style="font-style: italic;"&gt;Buy&lt;/span&gt; button, odds are overwhelming that an HTTP POST method was at work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E7%94%BB%E5%83%8F:First_Web_Server.jpg"&gt;When the HTTP protocol was designed&lt;/a&gt; in 1989 the world was a simpler place, the issues of &lt;a href="http://en.wikipedia.org/wiki/Phishing"&gt;phishing&lt;/a&gt;, email spam and other rogue forms of misdirection were yet to surface. In 1999 with revision 1.1 of the HTTP protocol the HTTP TRACE method was added. Having done software development in the past, the motivation is clear, it was designed as a debugging tool. The method simply has the web server echo a request that was sent to it. Sounds benign enough except that if your web browser has cookies associated with the path sent to the HTTP TRACE method, the web server will readily echo the cookie values. Again this sounds benign enough except in the contemporary world of rogue JavaScript (embedded in a malicious HTML email that happens to be spam), the HTTP TRACE method in conjunction with the &lt;a href="http://www.w3.org/TR/XMLHttpRequest/"&gt;XMLHttpRequest&lt;/a&gt; object can be used to read cookie values and then send them off to someone who just might then go into your bank account and relieve you of your finances. This forms the basis of a &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;Cross Site Scripting&lt;/a&gt; attack.&lt;br /&gt;&lt;br /&gt;The XMLHttpRequest object in JavaScript forms the basis of Web 2.0 applications, i.e., applications that are very dynamic in nature and feel like a local desktop application. You could turn off JavaScript but you will find out soon enough that it is a lost cause. Most sites rely on JavaScript to provide the experience that end users are accustomed to.&lt;br /&gt;&lt;br /&gt;One problem in the management of IT infrastructure and the applications that live on that infrastructure is time. In time, every computer system that is deployed will degrade and become a &lt;a href="http://en.wikipedia.org/wiki/Legacy_system"&gt;legacy system&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Any computer system has two factors working against it.&lt;br /&gt;&lt;br /&gt;The hardware technologies employed will become antiquated and may not be up to the ask with the growth of an organization. If the system is up to the task other factors over time readily contribute such as replacement parts or in some cases, the vendor of the original hardware ceasing support or going out of business. Some systems are labeled legacy systems but very much still form the crux of what is happening in the here and now. The Internal Revenue Service grapples with the problem of having a &lt;a href="http://www.news.com/2100-1028_3-6175657.html"&gt;well entrenched legacy system&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;With the software residing on a system, a wide range of factors contribute it moving to legacy status. Everything from employee attrition (waning knowledge base) to business requirements not being met with the software initially deployed to finding people with skill sets that can make changes to the system.&lt;br /&gt;&lt;br /&gt;The factors and their weight will vary widely but just as time weighs down on our knees, time will weigh down any computer system from both the hardware side and the software side making continued use a questionable business proposition. Either in terms of the opportunity cost of lost business or the prohibitive cost of the status quo. In the case of the IRS, the government being what it is, it has resources (your tax dollar) that the private sector could not muster, a.k.a. bankruptcy.&lt;br /&gt;&lt;br /&gt;This past week I ran into one of these legacy systems. An Internet facing application server employing &lt;a href="http://www.jboss.com/index.html"&gt;JBoss&lt;/a&gt;. JBoss is intended to run Java code that makes up web applications. &lt;a href="http://www.news.com/2100-7344_3-6059293.html"&gt;RedHat acquired JBoss in April of 2006 for $350 million&lt;/a&gt;. RedHat is well ensconced in the IT industry and JBoss is still well supported so what made this system a legacy system? The version of JBoss running on the server in question was dated to March of 2003 and staff that put it into use where no longer with the organization. More to the point there was little documentation. This is classic case of attrition making a system difficult to support and why managers should be big fans of knowledge transparency in the forms of &lt;a href="http://en.wikipedia.org/wiki/Wiki"&gt;wikis&lt;/a&gt; and allocating time up front to document systems. My role in this case was strictly that of system administrator of the underlying LINUX OS.&lt;br /&gt;&lt;br /&gt;This Internet facing application was flagged by auditors for a Cross Site Scripting vulnerability on account of the web server servicing the HTTP TRACE method. I was tasked with seeing if the system could be reconfigured to turn off servicing HTTP TRACE requests.&lt;br /&gt;&lt;br /&gt;As I performed a discovery process I learned that the first tier that responds to HTTP requests is a complementary piece of open source software to JBoss called &lt;a href="http://www.mortbay.org/"&gt;Jetty&lt;/a&gt;, an open source web server written entirely in Java. After I ferreted out where Jetty's configuration file lived, through online investigations I discovered that the version of Jetty included with the version of JBoss found on the production system did not have the facility of turning off the HTTP TRACE method. In fact, the version of Jetty employed was one minor revision number off from having the ability to turn off HTTP TRACE.&lt;br /&gt;&lt;br /&gt;A quick initial assessment of the situation purely as a function of the application served up as well as the application server itself (JBoss/Jetty) seems to leave only difficult choices. If the application server software is updated, it could very well break the underlying application. As alluded to earlier, part of the problem with legacy systems is knowledge transfer, or lack thereof. Outside of a cursory inspection of this Internet facing web application such as logging on to check base functionality, little was documented, such as a regression test plan or even the tools to carry out such a regression. Perhaps an upgrade of the underlying application server would go well initially (software starts) but application functionality will break (what end user's perceive). Rewriting the application is not realistic either. The application's entry point was flagged during an audit so more than likely remediation is expected sooner rather than later. In addition, asking managers to expend resources to rewrite applications impromptu is not likely to garner support (think budgets), especially if the scope of the application is large. &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Nor is it likely to thrill tech people who may be on time lines with other projects&lt;/a&gt; (see point 8).&lt;br /&gt;&lt;br /&gt;Indeed this seems like a very thorny problem with choices that entail lots of risk. Unless that is, you happen to be familiar with the various levels of indirection and their layers and how they play among themselves but even more importantly the tools to manipulate them.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt; web server is an amazing piece of software. Despite years of Microsoft giving &lt;a href="http://en.wikipedia.org/wiki/Internet_Information_Services"&gt;Internet Information Server&lt;/a&gt; (IIS) away for free and Steve Ballmer's hot air of calling one operating system that popularly runs Apache a &lt;a href="http://www.theregister.co.uk/2001/06/02/ballmer_linux_is_a_cancer/"&gt;cancer&lt;/a&gt;, i.e. LINUX, it still remains the most popular web server in use on the Internet today. Rather than take my work for it (or not), visit &lt;a href="http://news.netcraft.com/"&gt;Netcraft&lt;/a&gt; which offers a &lt;a href="http://uptime.netcraft.com/up/today/requested.html"&gt;tool&lt;/a&gt; that allows you to see what web server your favorite web site is using. The link provided shows the web server platforms behind sites that people were curious about the most - observe that Microsoft's platform is barely on the radar (12/2007).&lt;br /&gt;&lt;br /&gt;This is no coincidence. One of Larry Wall's mantras for his popular &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;PERL&lt;/a&gt; programming language when he designed it was &lt;span style="font-style: italic;"&gt;make the easy things easy while making the difficult things possible&lt;/span&gt;. It is a philosophy that shows up consistently with the proponents of open source technologies. It is one thing to be the end user of a site, say &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;, that may be a complex heterogenous mix of computing platforms, ignorance as they say is bliss, but it is quite another if you must administer the platforms that comprise such a site. The more degrees of freedom that exist to make the system pliable, the greater the ability to adapt to situations as they arise, planned or unplanned... such as when an auditor is complaining.&lt;br /&gt;&lt;br /&gt;What makes Apache so powerful specifically are all the &lt;a href="http://httpd.apache.org/docs/1.3/mod/"&gt;modules&lt;/a&gt; of extensibility that come with the system 'out of the box'. They are often called &lt;span style="font-style: italic;"&gt;mods&lt;/span&gt; for short. Being part of the open source community the Apache web server has engendered an active developer community that affords administrators great flexibility with configurations but also in the &lt;span style="font-style: italic;"&gt;manipulation of HTTP traffic&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Manipulation of HTTP traffic is one powerful use case for Apache. In this capacity, an Apache web server instance never actually hosts any web pages but is used as a traffic cop to redirect HTTP traffic based on rule sets giving the illusion to the end user of a cohesive web site but in actuality the site may be an amalgam of different web servers.&lt;br /&gt;&lt;br /&gt;The Apache modules &lt;a href="http://httpd.apache.org/docs/1.3/mod/mod_proxy.html"&gt;mod_proxy&lt;/a&gt; and &lt;a href="http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html"&gt;mod_rewrite&lt;/a&gt; provide these facilities and extensive use cases and the minutiae of the semantics of the rule sets are beyond this write up. Suffice to say they can be used to solve the thorny problem of turning off the HTTP TRACE method.&lt;br /&gt;&lt;br /&gt;The solution is simply to have the original web server that fronts the offending application to &lt;a href="http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers"&gt;listen on a non-standard TCP port&lt;/a&gt; such as 8080, which is not visible to the outside world on account of a firewall,  have Apache listen on the well known port (80) then with a mod_proxy/mod_rewrite rule set direct traffic based on the HTTP method. If a request in the form of HTTP TRACE method comes in, simply deny it.&lt;br /&gt;&lt;br /&gt;This is easily done through:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;RewriteEngine on&lt;br /&gt;RewriteCond %{REQUEST_METHOD} ^TRACE&lt;br /&gt;RewriteRule .* - [F]&lt;br /&gt;&lt;br /&gt;RewriteRule ^/(.*)  http://localhost:8080/$1 [R,P]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The &lt;code&gt;RewriteCond&lt;/code&gt; statement looks for the TRACE method and the &lt;code&gt;RewriteRule&lt;/code&gt; after it causes Apache to return a &lt;code&gt;403 Forbidden&lt;/code&gt; page. The second &lt;code&gt;RewriteRule&lt;/code&gt; is a catch all that simply has Apache delegate all other HTTP traffic to the server listening on port 8080 on the same system Apache resides, which in this case is the offending JBoss/Jetty server that will gladly service HTTP TRACE requests. However Apache configured as such will filter these TRACE requests so all that the auditor sees is a result that nullifies the previous observation that this particular Internet facing web application services the HTTP TRACE method. And thus with a deploy of the Apache web server and the addition of four statements in its configuration file, no blown budgets, no interrupting developers.&lt;br /&gt;&lt;br /&gt;In the interest of a balanced viewpoint it turns out that if you have a contemporary application load balancing device such as those from f5 &lt;a href="http://devcentral.f5.com/Default.aspx?tabid=63&amp;amp;articleType=ArticleView&amp;amp;articleId=95"&gt;the filtering of the HTTP TRACE method can happen there&lt;/a&gt;. But it turns out in this case the application was not fronted by such a device. If such a device does exist, the politics at play within an organization may make it more work to involve other teams to make network changes rather than to reconfigure software on a single server that ultimately receives the offending requests.&lt;br /&gt;&lt;br /&gt;A better decision point however is the &lt;span style="font-style: italic;"&gt;number of points of potential change&lt;/span&gt;. It is more cost effective to manage access control from a central location such as an f5 device than visiting multitudes of boxes to make configuration changes if the Internet application is backed by an entire web server farm. Since that was not the case here, an Apache solution was employed.&lt;br /&gt;&lt;br /&gt;To quote Arthur C. Clarke, "Any sufficiently advanced technology is indistinguishable from magic." If these tiers of indirection are not on your radar, yep, magic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-4037640961241855503?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/4037640961241855503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=4037640961241855503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/4037640961241855503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/4037640961241855503'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2007/12/mod-direction.html' title='Mod-direction'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-3815543755670207910</id><published>2007-08-09T07:48:00.001-07:00</published><updated>2008-05-13T08:20:02.707-07:00</updated><title type='text'>As easy as -p -i -e</title><content type='html'>Before the advent of the &lt;a href="http://en.wikipedia.org/wiki/World_Wide_Web"&gt;World Wide Web&lt;/a&gt; and the &lt;a href="http://www.bioperl.org/wiki/How_Perl_saved_human_genome"&gt;decoding of the human genome&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/PERL"&gt;PERL&lt;/a&gt; had already ensconced itself in the IT world amongst *NIX system administrators almost ten years prior. For good reason. PERL provides a more complete feature set than the &lt;a href="http://en.wikipedia.org/wiki/Bourne_Shell"&gt;Bourne Shell&lt;/a&gt; and/or &lt;a href="http://en.wikipedia.org/wiki/Sed"&gt;sed&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/AWK_%28programming_language%29"&gt;awk&lt;/a&gt;. Then and now, all of these tools are commonly used by system administrators to automate repetitive tasks.&lt;br /&gt;&lt;br /&gt;One of my favorite invocations of PERL is with the command line options &lt;span style="font-style: italic;"&gt;-p -i -e&lt;/span&gt;. This particular combination allows for the in place editing of files, namely searching for one string and replacing it with another. Like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;perl -p -i -e 's/original_text/replacement_text/' configuration_file&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You can even qualify the &lt;span style="font-style: italic;"&gt;-i&lt;/span&gt; parameter to back up the file being modified:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;perl -p -i.bak -e 's/original_text/replacement_text/' configuration_file&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The original file will continue to live on as &lt;span style="font-style: italic;"&gt;configuration_file.bak&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Recently, a coworker was faced with changing a configuration file to point from one database to another on six production instances of &lt;a href="http://www.oracle.com/appserver/index.html"&gt;Oracle's Application Server&lt;/a&gt;. Each instance in turn housed ten applications. This meant he would need to go edit sixty configuration files &lt;span style="font-style: italic;"&gt;or&lt;/span&gt; use Oracle's web based administration tool and drill into it sixty times. Irrespective of which of these methods you employ, the process is tedious and error prone.&lt;br /&gt;&lt;br /&gt;Armed with such knowledge, cobbling a solution for my coworker's plight did not take long. Logging into any number of machines via a script is one reason the &lt;a href="http://openssh.org/"&gt;Secure Shell(ssh)&lt;/a&gt; exists. Since I administer the boxes the changes needed to be done on, I had the requisite private cryptographic key to log into all of them without being prompted for a password.&lt;br /&gt;&lt;br /&gt;This problem beckoned for automation since I could readily traverse all of the machines from a central point and invoke commands. In summary, I wanted to log into each machine, find the configuration files of interest, do an in place substitution to point to a different database.&lt;br /&gt;&lt;br /&gt;Here is the solution for saving my coworker from firing up &lt;a href="http://en.wikipedia.org/wiki/Vi"&gt;vi&lt;/a&gt; sixty times across six machines:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;for i in `echo "mach1 mach2 mach3 mach4 mach5 mach6"`; do&lt;br /&gt;ssh $i 'cd /oracle/10gR3; find . -name "data-sources.xml" | xargs perl -p -i.bak -e "s/oracle/microsoft/" ';&lt;br /&gt;done &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;for&lt;/span&gt; loop is a shell construct executed on the system that serves as my jumping point to reach each system where I employed &lt;a href="http://www.openbsd.org/cgi-bin/man.cgi?query=ssh-agent"&gt;ssh-agent&lt;/a&gt; to avoid password prompting. Ultimately the heart of what I am doing on each machine is this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd /oracle/10gR3&lt;br /&gt;find . -name "data-sources.xml" | xargs perl -p -i.bak -e "s/oracle/microsoft/"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I situate myself in the base directory of the Oracle application server, find all the copies of the configuration file in question, &lt;span style="font-style: italic;"&gt;data-sources.xml&lt;/span&gt;, then use &lt;a href="http://en.wikipedia.org/wiki/Xargs"&gt;xargs&lt;/a&gt; to invoke PERL to do in place substitution against each and every instance of said configuration file. Using &lt;a href="http://www.linuxcommand.org/man_pages/find1.html"&gt;find&lt;/a&gt; with the &lt;span style="font-style: italic;"&gt;-exec&lt;/span&gt; option and removing the intermediate &lt;span style="font-style: italic;"&gt;xargs&lt;/span&gt; invocation works equally well.&lt;br /&gt;&lt;br /&gt;So now, instead of wasting an hour (or more) editing sixty files, we both can hit the golf course an hour early.&lt;br /&gt;&lt;br /&gt;This experience underscores the potency of using several seemingly disparate tools to solve a problem - very much the *NIX way of doing things. Now if only I could do these kinds of things "out of the box" under Windows...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-3815543755670207910?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/3815543755670207910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=3815543755670207910' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3815543755670207910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/3815543755670207910'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2007/08/as-easy-as-p-i-e.html' title='As easy as -p -i -e'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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-9182309753824387217.post-1986485786893203800</id><published>2007-08-07T11:57:00.000-07:00</published><updated>2007-08-07T16:41:22.968-07:00</updated><title type='text'>An impromptu GUI for strace when monitoring a forking server</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_qeCrCZZbvYs/RrjdSft-sRI/AAAAAAAAAAM/P11_U5NtmG8/s1600-h/trussXterms.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp1.blogger.com/_qeCrCZZbvYs/RrjdSft-sRI/AAAAAAAAAAM/P11_U5NtmG8/s320/trussXterms.PNG" alt="" id="BLOGGER_PHOTO_ID_5096066288191451410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I used to have a coworker named Tom where it was joked among us that he had only two possible answers to any technical hurdle posed to him - &lt;a href="http://en.wikipedia.org/wiki/Strace"&gt;strace&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Tcpdump"&gt;tcpdump&lt;/a&gt;. As it turns out, more often than not, he was right.&lt;br /&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;strace&lt;/span&gt; gives visibility into OS system calls made by a running process. &lt;span style="font-style: italic;"&gt;tcpdump&lt;/span&gt; allows sniffing of network traffic and is often used to ferret out networking issues. For monitoring an application as it interfaces with a host OS and/or its interactions over a &lt;a href="http://en.wikipedia.org/wiki/TCP/IP"&gt;TCP/IP&lt;/a&gt; network, these two tools are indispensable.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I once deployed a web application that during startup failed on account of a missing file. As best as I could tell, the file in question was present. Count on strace to get to the bottom of things. It turned out to be a simple misconfiguration - the file lay situated in a parent directory of the code instead of a local directory. This was easily divulged when I ran &lt;span style="font-style: italic;"&gt;strace&lt;/span&gt; and could readily see all  &lt;span class="Apple-style-span" style="font-style: italic;"&gt;file open&lt;/span&gt; operations during the start up phase. What I was able to readily infer from its output was much more meaningful to me than Java code complaining that it could not open a file and then immediately terminating (but not divulging the path of the file it was trying to open).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;Strace&lt;/span&gt; is powerful but its output can be quite &lt;span class="Apple-style-span" style="font-style: italic;"&gt;noisy&lt;/span&gt; if the application being monitored has a high level of activity. If per chance monitoring a &lt;a href="http://en.wikipedia.org/wiki/Fork_%28operating_system%29"&gt;forking&lt;/a&gt; server such as &lt;a href="http://en.wikipedia.org/wiki/Apache_http"&gt;Apache&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Postfix_%28software%29"&gt;Postfix&lt;/a&gt; is desired then &lt;span style="font-style: italic;"&gt;strace&lt;/span&gt; &lt;span class="Apple-style-span"&gt;really&lt;/span&gt; gets noisy. Making sense of the "spaghetti" that is returned back from system calls associated with a parent/child process tree is not fun. While it is possible to have strace latch onto a specific child process, errant behavior that is occurring may not be happening in the process being monitored but instead a non-monitored sibling process.  Therefore using &lt;span style="font-style: italic;"&gt;strace&lt;/span&gt; to have complete visibility into a forking server where the output is readily digestable is problematic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I found myself precisely in this boat as I wanted to monitor the file activity of a &lt;span style="font-style: italic;"&gt;Postfix&lt;/span&gt; instance running under &lt;a href="http://en.wikipedia.org/wiki/Solaris_%28operating_system%29"&gt;Solaris&lt;/a&gt;. In &lt;span style="font-style: italic;"&gt;Solaris&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;strace&lt;/span&gt;'s equivalent is &lt;span class="Apple-style-span" style="font-style: italic;"&gt;truss&lt;/span&gt;. After not too long here is the solution I devised:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;code&gt;&lt;br /&gt;lsof |&lt;br /&gt;grep TCP |&lt;br /&gt;grep smtpd |&lt;br /&gt;awk '{print $2}' |&lt;br /&gt;sort |&lt;br /&gt;uniq |&lt;br /&gt;perl -lane ' system("/usr/X/bin/xterm \"-sb\" \"-sl\" \"1000\" \"-e\" \"/usr/bin/truss\" \"-p\" \"$_\" &amp;") '&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Lsof"&gt;lsof&lt;/a&gt; is a tool that will list all open file handles on the operating system, including network file handles. I specifically was looking for processes that had &lt;span style="font-style: italic;"&gt;TCP/IP&lt;/span&gt; network connections (first filter). Then I looked for &lt;span style="font-style: italic;"&gt;smtpd&lt;/span&gt; which is the name by which Postfix is listed in the process table (second filter). After which I used &lt;a href="http://en.wikipedia.org/wiki/Awk"&gt;awk&lt;/a&gt; to pluck all the Postfix process ids which are in the second column of lsof's output (third filter). I sorted these (fourth filter) and removed any duplicates (fifth filter). Finally, this list of process ids was fed into a &lt;a href="http://en.wikipedia.org/wiki/PERL"&gt;PERL&lt;/a&gt; one liner (sixth filter) that spawns &lt;a href="http://en.wikipedia.org/wiki/Xterm"&gt;xterms&lt;/a&gt; with the &lt;span style="font-style: italic;"&gt;-e&lt;/span&gt; option.  This option launches an application inside of an &lt;span style="font-style: italic;"&gt;xterm&lt;/span&gt;, in this case &lt;span style="font-style: italic;"&gt;truss&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Employing &lt;a href="http://x.cygwin.com/"&gt;Cygwin's&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/X_window_system"&gt;X Server&lt;/a&gt; port on my Windows XP desktop, an &lt;span style="font-style: italic;"&gt;xterm&lt;/span&gt; appeared for each &lt;span style="font-style: italic;"&gt;Postfix &lt;/span&gt;process running under &lt;span style="font-style: italic;"&gt;Solaris&lt;/span&gt; (see image above), with &lt;span style="font-style: italic;"&gt;truss&lt;/span&gt; showing me all the system calls for each of them in real time. Outside of the fact that this approach yields information that is readily consumable for spur of the moment diagnostics, another advantage is that when a process terminates, the corresponding &lt;span style="font-style: italic;"&gt;xterm&lt;/span&gt; housing &lt;span style="font-style: italic;"&gt;truss&lt;/span&gt; monitoring that process disappears off the desktop. Which is good visual feedback for taking action depending on the context of the situation.&lt;br /&gt;&lt;br /&gt;For &lt;span style="font-style: italic;"&gt;PERL&lt;/span&gt; to correctly interpret my intentions, I had to escape the double quotes. Furthermore when &lt;span style="font-style: italic;"&gt;xterm&lt;/span&gt; is launched in this fashion, double quotes are necessary to delimit the command line arguments. So the sample code is harder to read than if one were to interactively fire off an xterm interactively against each and every process like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;xterm -sb -sl 1000 -e truss -p process_id_in_question&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This statement says to fire up &lt;span style="font-style: italic;"&gt;truss&lt;/span&gt; inside of an &lt;span style="font-style: italic;"&gt;xterm&lt;/span&gt; against the process id specified after the &lt;span style="font-style: italic;"&gt;-p&lt;/span&gt; argument with a scroll bar (-sb) and with a 1000 line scroll back buffer (-sl 1000).&lt;br /&gt;&lt;br /&gt;Canonically, child processes of forking servers are ephemeral. That is, a child process on a forking server will handle a given number of requests and then terminate. This design philosophy insures that one child cannot live long enough to consume all available system resources, either by accident or malice (serving as a proxy for &lt;a href="http://en.wikipedia.org/wiki/Denial_of_Service"&gt;Denial of Service&lt;/a&gt; attacks).&lt;br /&gt;&lt;br /&gt;Therefore coming up with a script that hard codes process ids is pointless as their number and ids will always vary over time. Whereas this technique fetches process ids on the fly and couples this with the ability of an &lt;span style="font-style: italic;"&gt;xterm&lt;/span&gt; to house an application (&lt;span style="font-style: italic;"&gt;truss&lt;/span&gt; in this case), the end result being an ad hoc GUI for &lt;span style="font-style: italic;"&gt;stracing&lt;/span&gt;/&lt;span style="font-style: italic;"&gt;trussing&lt;/span&gt; a forking server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9182309753824387217-1986485786893203800?l=mastercobbler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mastercobbler.blogspot.com/feeds/1986485786893203800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9182309753824387217&amp;postID=1986485786893203800' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1986485786893203800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9182309753824387217/posts/default/1986485786893203800'/><link rel='alternate' type='text/html' href='http://mastercobbler.blogspot.com/2007/08/impromptu-gui-for-strace-when.html' title='An impromptu GUI for strace when monitoring a forking server'/><author><name>Mario</name><uri>http://www.blogger.com/profile/03112122743695375756</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://bp1.blogger.com/_qeCrCZZbvYs/RrjdSft-sRI/AAAAAAAAAAM/P11_U5NtmG8/s72-c/trussXterms.PNG' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
