<?xml version="1.0"?><feed xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:idx="urn:atom-extension:indexing" xmlns="http://www.w3.org/2005/Atom" idx:index="no" gr:dir="ltr"><!--
Content-type: Preventing XSRF in IE.

--><generator uri="http://www.google.com/reader">Google Reader</generator><id>tag:google.com,2005:reader/user/10099673323686801007/state/com.google/broadcast</id><link rel="hub" href="http://pubsubhubbub.appspot.com/"/><title>Wei's shared items in Google Reader</title><gr:continuation>COzwoL_y7qUC</gr:continuation><link rel="self" href="http://www.google.com/reader/public/atom/user%2F10099673323686801007%2Fstate%2Fcom.google%2Fbroadcast"/><author><name>Wei</name></author><updated>2011-04-08T07:38:40Z</updated><entry gr:crawl-timestamp-msec="1302248320948"><id gr:original-id="6961">tag:google.com,2005:reader/item/e33d03e619759533</id><category term="Announcements"/><title type="html">Announcements: Just-In-Time Business Cards</title><published>2011-04-07T18:00:00Z</published><updated>2011-04-07T18:00:00Z</updated><link rel="alternate" href="http://thedailywtf.com/Articles/JustInTime-Business-Cards.aspx" type="text/html"/><summary xml:base="http://thedailywtf.com/" type="html">&lt;p&gt;As you may have noticed, &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-Now-with-TDWTF-Buttons!.aspx"&gt;I&lt;/a&gt; &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-Salmiak-Attack.aspx"&gt;am&lt;/a&gt; &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-Surprise!.aspx"&gt;a&lt;/a&gt; &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-The-Cookout.aspx"&gt;big&lt;/a&gt; &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-Meal-Ready-to-Eat.aspx"&gt;fan&lt;/a&gt; of souvenirs, trinkets, and tchotchkes. And I know I'm not alone. Whenever I go to a conference, at least half of my fellow attendees join me in the pursuit for as much free stuff as possible.&lt;/p&gt;
&lt;p&gt;Of course, it doesn't matter that I already have enough logoed pens and pads to write the entire contents of Wikipedia, twice over. Or that I have enough tee-shirts to wear a new one every day for the rest of my life (and that's assuming I live to be a hundred and fifty). No, this epic quest for swag is about something different. Something grander... and perhaps, even primal.&lt;/p&gt;
&lt;p&gt;While swag and raffles may be free, you do have to give up something in return: a business card. This de-facto convention currency is a must-have if you want any serious loot. And there-in presents the problem. Not everyone has business cards.&lt;/p&gt;
&lt;p&gt;Fortunately, I've got a solution to this problem. Well... actually, my &lt;em&gt;employer&lt;/em&gt; does, but I'm pretty sure that I provided some of the inspiration for the idea.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201104/jitcards.jpg"&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That's right, &lt;i&gt;meta&lt;/i&gt;-swag! &lt;a href="http://inedo.com/"&gt;Inedo&lt;/a&gt; has been giving these out for a little while now, and I've heard some pretty good feedback at the conferences I've attended. Well, except from the vendors who ended up with fishbowls full of them.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201104/jitcards-3.png"&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They're perfect for scoring swag at conferences, entering random fishbowl drawings, and even scoring some pity points from the opposite sex. If you'd like your own &lt;i&gt;Just-In-Time Business Cards&lt;/i&gt;, you can get them for free: &lt;a href="http://inedo.com/jit-bizcards"&gt;http://inedo.com/jit-bizcards&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;iframe src="http://feedads.g.doubleclick.net/~ah/f/iboioueglnmiqal0k0nsmcvarc/300/250?ca=1&amp;amp;fh=280#http%3A%2F%2Fthedailywtf.com%2FArticles%2FJustInTime-Business-Cards.aspx" width="100%" height="280" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=-gerCEtMQMA:zoRFXwT_jXk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/-gerCEtMQMA" height="1" width="1"&gt;</summary><author><name>Alex Papadimoulis</name></author><source gr:stream-id="feed/http://syndication.thedailywtf.com/TheDailyWtf"><id>tag:google.com,2005:reader/feed/http://syndication.thedailywtf.com/TheDailyWtf</id><title type="html">The Daily WTF</title><link rel="alternate" href="http://thedailywtf.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1302247824334"><id gr:original-id="http://solidot.org.feedsportal.com/c/33236/f/556826/s/14041215/l/0Lscience0Bsolidot0Borg0Carticle0Bpl0Dsid0F110C0A40C0A80C0A5532570Gamp0Pfrom0Frss/story01.htm">tag:google.com,2005:reader/item/1e9b283a9452a4a7</id><category term="science"/><title type="html">费米实验室科学家可能发现新粒子</title><published>2011-04-08T05:32:00Z</published><updated>2011-04-08T05:32:00Z</updated><link rel="alternate" href="http://solidot.org.feedsportal.com/c/33236/f/556826/s/14041215/l/0Lscience0Bsolidot0Borg0Carticle0Bpl0Dsid0F110C0A40C0A80C0A5532570Gamp0Pfrom0Frss/story01.htm" type="text/html"/><summary xml:base="http://solidot.org/" type="html">《纽约时报》报导，费米实验室的物理学家或发现了一种此前闻所未闻的奇特粒子。费米实验室CDF粒子探测器联合发言人Robert Roser笑称，NYT当天一定没大新闻报导了。他认为科学家可能发现了一种新粒子。报告发表在arXiv上。 CDF分析了对撞机数十亿次质子和反质子对撞。根据爱因斯坦相对论，能量等于质量，因此高能粒子对撞能产生日常世界看不到亚原子粒子，物理学家通过研究熟悉粒子的衰变识别出新粒子。在最新实验中，研究人员寻找质量约等于质子88倍的W玻色子，结果却发现了质量约等于质子160倍的新粒子。&lt;img width="1" height="1" src="http://solidot.org.feedsportal.com/c/33236/f/556826/s/14041215/mf.gif" border="0"&gt;&lt;div&gt;&lt;table border="0"&gt;&lt;tr&gt;&lt;td valign="middle"&gt;&lt;a href="http://res.feedsportal.com/viral/sendemail2.html?title=%E8%B4%B9%E7%B1%B3%E5%AE%9E%E9%AA%8C%E5%AE%A4%E7%A7%91%E5%AD%A6%E5%AE%B6%E5%8F%AF%E8%83%BD%E5%8F%91%E7%8E%B0%E6%96%B0%E7%B2%92%E5%AD%90&amp;amp;link=http%3A%2F%2Fscience.solidot.org%2Farticle.pl%3Fsid%3D11%2F04%2F08%2F0553257%26amp%3Bfrom%3Drss"&gt;&lt;img src="http://res3.feedsportal.com/images/emailthis2.gif" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;td valign="middle"&gt;&lt;a href="http://res.feedsportal.com/viral/bookmark.cfm?title=%E8%B4%B9%E7%B1%B3%E5%AE%9E%E9%AA%8C%E5%AE%A4%E7%A7%91%E5%AD%A6%E5%AE%B6%E5%8F%AF%E8%83%BD%E5%8F%91%E7%8E%B0%E6%96%B0%E7%B2%92%E5%AD%90&amp;amp;link=http%3A%2F%2Fscience.solidot.org%2Farticle.pl%3Fsid%3D11%2F04%2F08%2F0553257%26amp%3Bfrom%3Drss"&gt;&lt;img src="http://res3.feedsportal.com/images/bookmark.gif" border="0"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://da.feedsportal.com/r/98747910432/u/49/f/556826/c/33236/s/14041215/a2.htm"&gt;&lt;img src="http://da.feedsportal.com/r/98747910432/u/49/f/556826/c/33236/s/14041215/a2.img" border="0"&gt;&lt;/a&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/solidot?a=aXX8A5th9W8:XyVSxhxkyLI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/solidot?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/solidot?a=aXX8A5th9W8:XyVSxhxkyLI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/solidot?d=7Q72WNTAKBA" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;</summary><author><name>blackhat</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/solidot"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/solidot</id><title type="html">Solidot</title><link rel="alternate" href="http://solidot.org/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1302143537925"><id gr:original-id="">tag:google.com,2005:reader/item/702a15a9c46e89a8</id><title type="html">clvv/scriptbroadcast - GitHub</title><published>2011-04-07T02:32:17Z</published><updated>2011-04-07T02:32:17Z</updated><link rel="alternate" href="https://github.com/clvv/scriptbroadcast" type="text/html"/><link rel="related" href="https://github.com/" title="github.com"/><content xml:base="https://github.com/clvv/scriptbroadcast" type="html">scriptbroadcast: a tool that broadcasts recorded typescripts(shell sessions).</content><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="user/10099673323686801007/source/com.google/link"><id>tag:google.com,2005:reader/user/10099673323686801007/source/com.google/link</id><title type="html">github.com</title><link rel="alternate" href="https://github.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1302065005615"><id gr:original-id="http://royal.pingdom.com/?p=8901">tag:google.com,2005:reader/item/ea4b0d557199ffdf</id><category term="Main"/><category term="data"/><category term="google"/><category term="internet"/><category term="numbers"/><category term="stats"/><title type="html">How big is Google, really?</title><published>2011-04-05T16:29:22Z</published><updated>2011-04-05T16:29:22Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/RoyalPingdom/~3/EDcY4C_dhN8/" type="text/html"/><content xml:base="http://royal.pingdom.com/" type="html">&lt;p&gt;&lt;img alt="Google" src="http://farm6.static.flickr.com/5220/5489408576_78dd4bc55c_o.png" title="Google" width="150" height="53"&gt;There’s been a lot of talk about how big Facebook has become, and with its &lt;a href="http://www.businessinsider.com/facebook-has-more-than-600-million-users-goldman-tells-clients-2011-1"&gt;600 million users&lt;/a&gt; (!) it has certainly become a force to be reckoned with. But there is still one player out there that dwarfs Facebook, and that is &lt;a href="http://google.com/"&gt;Google&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The problem is that it’s extremely difficult to estimate just how big Google actually is. But we’re going to try anyway.&lt;/p&gt;
&lt;p&gt;Since Facebook uses a single website, it’s relatively easy to keep track of its size (with size, we mean the number of people who use it). With Google, we don’t have that luxury, because it is way more than just the Google.com website.&lt;/p&gt;
&lt;p&gt;To give you an idea, here are Google-owned websites ranked in the worldwide top 100:&lt;/p&gt;
&lt;table&gt;
&lt;caption&gt;Google sites in the Alexa top 100 (top sites in terms of traffic)&lt;/caption&gt;
&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.com&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Youtube.com&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;YouTube&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Blogger.com&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Blogger&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.co.in&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google India&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.com.hk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Hong Kong&lt;/td&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.de&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Germany&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.co.uk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google UK&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.co.jp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Japan&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.fr&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google France&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.com.br&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Brazil&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.it&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Italy&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.es&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Spain&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.ru&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Russia&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.ca&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Canada&lt;/td&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.co.id&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Indonesia&lt;/td&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.com.mx&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Mexico&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.com.tr&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Turkey&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.com.au&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Australia&lt;/td&gt;
&lt;td&gt;85&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orkut.com.br&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Orkut Brazil&lt;/td&gt;
&lt;td&gt;86&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Google.pl&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Poland&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Orkut.com&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Orkut&lt;/td&gt;
&lt;td&gt;92&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Now let’s see now if we can at least estimate a ballpark figure of how big Google is.&lt;/p&gt;
&lt;h3&gt;Google Search&lt;/h3&gt;
&lt;p&gt;First, let’s consider Google Search. We have, of course, Google.com, the world’s most visited website according to Alexa.&lt;/p&gt;
&lt;p&gt;However, just focusing on Google.com would not be fair to Google. The company has localized Google Search for virtually every country out there. There are 180+ localized versions of Google, all with their own domain.&lt;/p&gt;
&lt;p&gt;As you can see in the table we included above, those localized versions of Google Search are popular. There are 16 of them among the top 100 sites worldwide, not counting Google.com.&lt;/p&gt;
&lt;p&gt;And let’s not forget all those subsections to Google’s Web Search, like Google News, Google Finance, Image Search, etc. All of those are part of Google Search.&lt;/p&gt;
&lt;p&gt;Overall, Google has &lt;a href="http://gs.statcounter.com/#search_engine-ww-monthly-201003-201103"&gt;90% of the search engine market&lt;/a&gt; on the desktop according to StatCounter.&lt;/p&gt;
&lt;p&gt;Then we have mobile search, where Google dominates completely. It’s the default search engine for most smartphones, including Apple’s iPhone and Google’s own Android. Google’s market share here is a whopping &lt;a href="http://gs.statcounter.com/#mobile_search_engine-ww-monthly-201003-201103"&gt;97%&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;How many users does Google Search as a whole have?&lt;/p&gt;
&lt;p&gt;There are about &lt;a href="http://internetworldstats.com/stats.htm"&gt;2 billion Internet users&lt;/a&gt; in total, more than 1.5 billion even if you subtract China, which Google currently has a somewhat rocky relationship with. Would it be unrealistic to say that Google Search has at least a billion users if you count the entire Internet? We don’t think so.&lt;/p&gt;
&lt;p&gt;But Google is more than search.&lt;/p&gt;
&lt;h3&gt;The size of Google’s other properties&lt;/h3&gt;
&lt;p&gt;Although hard numbers can be hard to come by, here are some of Google’s major services and&lt;/p&gt;
&lt;h4&gt;YouTube&lt;/h4&gt;
&lt;p&gt;The world’s largest online video service. The YouTube website alone has &lt;a href="https://www.google.com/adplanner/planning/site_profile?hl=en#siteDetails?identifier=youtube.com&amp;amp;lp=true"&gt;500 million visitors per month&lt;/a&gt;. Also, 82% of all embedded videos on blogs are YouTube videos (although that last number is from &lt;a href="http://www.sysomos.com/reports/video/"&gt;a couple of years ago&lt;/a&gt;).&lt;/p&gt;
&lt;h4&gt;Blogger&lt;/h4&gt;
&lt;p&gt;Blogger is one of the world’s largest blogging platforms. Its blogs collectively had more than &lt;a href="http://buzz.blogger.com/2011/03/whats-new-with-blogger.html"&gt;400 million readers in 2010&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Orkut&lt;/h4&gt;
&lt;p&gt;Orkut was Google’s first foray into social networks, and still its most successful. It has more than &lt;a href="http://en.wikipedia.org/wiki/Orkut"&gt;100 million&lt;/a&gt; active users worldwide. Actually, if you count daily visitors to the website, Orkut is second only to Facebook (&lt;a href="http://royal.pingdom.com/2011/03/25/social-networks-one-million-visitors-per-day/"&gt;although a far second&lt;/a&gt;), largely thanks to Orkut’s very active user base in Brazil and India.&lt;/p&gt;
&lt;h4&gt;Google Maps&lt;/h4&gt;
&lt;p&gt;Aside from being the most widely used map service on the Web and incorporated with a ton of different web services, it’s also the dominating map service used on smartphones. Apple uses Google Maps for iOS, and Android is heavily integrated with Google’s products in general, including maps.&lt;/p&gt;
&lt;h4&gt;Gmail&lt;/h4&gt;
&lt;p&gt;Google’s email service is estimated to have around 200 million users.&lt;/p&gt;
&lt;h4&gt;Google Apps&lt;/h4&gt;
&lt;p&gt;Google Docs, Spreadsheets, Calendar, and the other web apps under the Google Apps umbrella (which also includes Gmail) are increasingly popular. We haven’t seen any user numbers, but they are bound to be significant.&lt;/p&gt;
&lt;h4&gt;Android&lt;/h4&gt;
&lt;p&gt;Google’s Android OS is the world’s &lt;a href="http://www.canalys.com/pr/2011/r2011013.html"&gt;fastest-growing smartphone platform&lt;/a&gt; with &lt;a href="http://phandroid.com/2011/02/15/350000-activations-per-day-says-schmidt/"&gt;350,000&lt;/a&gt; new devices activated per day (over 10 million per month). Android very much acts as a platform for Google’s other properties, like maps, email, search, etc.&lt;/p&gt;
&lt;h4&gt;Chrome&lt;/h4&gt;
&lt;p&gt;Google’s web browser is gaining market share rapidly in spite of having been available just a few years. According to StatCounter, it currently has &lt;a href="http://gs.statcounter.com/"&gt;17% of the web browser market&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Other intangibles&lt;/h3&gt;
&lt;p&gt;Google has so many different services that it’s hard to get a grip on them all. To the ones we’ve already listed, we’d like to quickly add a few more:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Feedburner&lt;/strong&gt;, the world’s largest RSS feed service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Reader&lt;/strong&gt;, the world’s most popular RSS reader.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google Analytics&lt;/strong&gt;, the world’s most widely used website analytics product&lt;/li&gt;
&lt;li&gt;And all those ad products: Adsense, Adwords, DoubleClick, Admob, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;So, how big is Google?&lt;/h3&gt;
&lt;p&gt;Finally, let’s try to estimate how many people use Google’s products and services. &lt;/p&gt;
&lt;p&gt;As we already mentioned, we suspect that the user base of Google Search alone is at least a billion. However, since Google is so much more than just search, the company’s products might very well end up touching a majority of the Internet users out there. Really, how long have you been able to use the Internet yourself without using a Google product of some sort? &lt;/p&gt;
&lt;p&gt;Even if you subtract China, which again might not be entirely fair to Google, that would put the user base close to 1.5 billion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So, in short: Google’s entire user base should be somewhere between 1 and 1.5 billion, depending on how conservative you want to be.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is of course just speculation on our end. There is bound to be a lot of overlap between the user bases for Google’s various products, but we have no way of knowing how much.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Google.com alone would be impressive. Add to it all the other web properties we’ve listed in this article and it quickly becomes obvious that Google is still very much the king of the Internet. They may be having some trouble in social, at least compared with Facebook, but let’s not forget all the other things they do, and do well.&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;em&gt;This was a post from the guys at Pingdom, a site monitoring service that makes sure you're the first to know when your site is down. &lt;a href="http://www.pingdom.com/free/?utm_source=Royal&amp;amp;utm_medium=Feed&amp;amp;utm_content=Free%2Btext&amp;amp;utm_campaign=Free"&gt;Check it out for free.&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/RoyalPingdom/~4/EDcY4C_dhN8" height="1" width="1"&gt;</content><author><name>Pingdom</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/RoyalPingdom"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/RoyalPingdom</id><title type="html">Royal Pingdom</title><link rel="alternate" href="http://royal.pingdom.com" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1298778493525"><id gr:original-id="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c19">tag:google.com,2005:reader/item/c6e231a87d802fd8</id><title type="html">Man with ALS writes patch for Gnome using morse code (with touching story)</title><published>2011-02-27T03:48:13Z</published><updated>2011-02-27T03:48:13Z</updated><link rel="alternate" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c19" type="text/html"/><summary xml:base="http://news.ycombinator.com/" type="html">&lt;div&gt;&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c0" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c0"&gt;Description&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Jens Finke&lt;/span&gt; &lt;span&gt;[reporter]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2002-04-12 12:50:41 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
It would be nice to have a copy menuitem in the edit dialog to transfer the
current loaded image into the clipboard.
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c1" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c1"&gt;Comment 1&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Jens Finke&lt;/span&gt; &lt;span&gt;[reporter]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2002-04-12 12:51:41 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Of course I mean a copy menuitem in the edit _menu_.
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c2" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c2"&gt;Comment 2&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Federico Mena Quintero&lt;/span&gt; &lt;span&gt;[developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2002-04-25 21:12:32 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
What selection type would we use?
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c3" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c3"&gt;Comment 3&lt;/a&gt;&lt;/span&gt; &lt;span&gt;Gregory Merchan&lt;/span&gt; &lt;span&gt;2002-06-16 12:19:45 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Support as many targets as you can.
All of these seem to make sense (assuming you want to handle the
encodings):
 ADOBE_PORTABLE_DOCUMENT_FORMAT
 APPLE_PICT
 BITMAP
 ENCAPSULATED_POSTSCRIPT
 ENCAPSULATED_POSTSCRIPT_INTERCHANGE
 FILE_NAME
 PIXMAP
 POSTSCRIPT

The mime-type targets of XDnD would be good too.
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c4" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c4"&gt;Comment 4&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Federico Mena Quintero&lt;/span&gt; &lt;span&gt;[developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2002-07-29 21:02:42 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
But would it be useful at all?  E.g. which applications will take a Paste?
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c5" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c5"&gt;Comment 5&lt;/a&gt;&lt;/span&gt; &lt;span&gt;Alan Horkan&lt;/span&gt; &lt;span&gt;2003-07-24 20:01:16 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
This would be useful, someone has got to be the first to post stuff to
the clipboard then we can kick ass and tell other applications to wake
up and paste it.  

I almost always Cut rather than Copy, particularly using the keyboard
shortcut Ctrl+X it would be very helpful if Ctrl+X could also work
even if all does is to Copy.  

Any chance of getting this for Gnome 2.6?  
Optimistically added the Target milestone of 2.x
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c6" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c6"&gt;Comment 6&lt;/a&gt;&lt;/span&gt; &lt;span&gt;Alan Horkan&lt;/span&gt; &lt;span&gt;2004-08-31 14:39:54 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
&lt;span&gt;&amp;gt; which applications will take a Paste?&lt;/span&gt;

gimp and abiword have made progress at cut and paste between applications
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c7" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c7"&gt;Comment 7&lt;/a&gt;&lt;/span&gt; &lt;span&gt;Muthiah Annamalai&lt;/span&gt; &lt;span&gt;2005-03-12 22:06:13 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Lets see if I can do something. Im taking this case.. ;-|
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c8" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c8"&gt;Comment 8&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Jens Finke&lt;/span&gt; &lt;span&gt;[reporter]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2005-04-07 10:37:32 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
*** &lt;span&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=172917" title="RESOLVED DUPLICATE - Clipboard not supported"&gt;Bug 172917&lt;/a&gt;&lt;/span&gt; has been marked as a duplicate of this bug. ***
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c9" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c9"&gt;Comment 9&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Jens Finke&lt;/span&gt; &lt;span&gt;[reporter]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2005-04-21 06:39:04 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
*** &lt;span&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=301367" title="RESOLVED DUPLICATE - eye of gnome should support copy/paste of images"&gt;Bug 301367&lt;/a&gt;&lt;/span&gt; has been marked as a duplicate of this bug. ***
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c10" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c10"&gt;Comment 10&lt;/a&gt;&lt;/span&gt; &lt;span&gt;Emmanuel Touzery&lt;/span&gt; &lt;span&gt;2005-04-21 06:56:17 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
#301367 has been marked duplicate of this, but I asked more for a PASTE item
than copy in #301367, giving the test-case of pictures embedded in a openoffice
document, that can only be gotten out of the document by copying them in the
clipboard (and then i only found gimp to paste them, which is not handy for
beginners IMHO).
that action is not impossible today, but due to gimp, too hard, I thought.
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c11" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c11"&gt;Comment 11&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Lucas Rocha&lt;/span&gt; &lt;span&gt;[developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2005-10-30 02:12:03 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Updating version to development series 2.13.x.
&lt;/pre&gt;&lt;/div&gt;

&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c13" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c13"&gt;Comment 13&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Felix Riemann&lt;/span&gt; &lt;span&gt;[eog developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2010-09-07 20:32:02 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
*** &lt;span&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=628979" title="RESOLVED DUPLICATE - Feature Request: Allow Edit &amp;gt;&amp;gt; Copy"&gt;Bug 628979&lt;/a&gt;&lt;/span&gt; has been marked as a duplicate of this bug. ***
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;

&lt;pre&gt;
In the time since this bug was created (sorry for the dupe), many applications
will accept a paste.  Pastes from EOG to Evolution and OpenOffice would be used
heavily by our users.
&lt;/pre&gt;&lt;/div&gt;

&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c16" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c16"&gt;Comment 16&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Felix Riemann&lt;/span&gt; &lt;span&gt;[eog developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2010-12-31 13:31:30 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
&lt;a href="https://bugzilla.gnome.org/review?bug=78514&amp;amp;attachment=177268"&gt;Review&lt;/a&gt; of &lt;span&gt;&lt;a href="https://bugzilla.gnome.org/attachment.cgi?id=177268" name="attach_177268" title="mod to add 2 new menu items: copy image (to clipboard) and copy path. added both to both the Edit menu and the right-click menu. patch -p 2"&gt;attachment 177268&lt;/a&gt; &lt;a href="https://bugzilla.gnome.org/attachment.cgi?id=177268&amp;amp;action=edit" title="mod to add 2 new menu items: copy image (to clipboard) and copy path. added both to both the Edit menu and the right-click menu. patch -p 2"&gt;[details]&lt;/a&gt;&lt;/span&gt;:

Are you sure the patch is complete? There seems to be a cut-off chunk at the
end of your submitted patch.

In general the patch seems to be okay and I am thinking about committing it to
our code repository.
Yet I'd like to explore the possibility of having a single "Copy" menu entry
first.

::: BUILD/eog-2.32.0.orig/src/eog-window.c
@@ +3642,3 @@
+    g_return_if_fail (EOG_IS_IMAGE (image));
+
+    pix = eog_image_get_pixbuf(image);

There's a little race condition here. eog_image_get_pixbuf() doesn't guarantee
that the image is actually loaded and available (a problem we have in other
occassions as well). So while the image is loading (which it likely is since it
is the first selected one) _get_pixbuf can return NULL.

I'm not sure how to get around this nicely right now, though.

@@ +4068,3 @@
+    { "CopyImage", NULL, N_("Copy _Pats"), NULL,
+      N_("Copy the image to the clipboard"),
+      G_CALLBACK (eog_window_cmd_copy_image) },

I think these actions are not needed if you have the EditCopy* actions already.
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c17" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c17"&gt;Comment 17&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Felix Riemann&lt;/span&gt; &lt;span&gt;[eog developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2010-12-31 17:42:06 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Okay, I extended your patch to work with a single menu entry. Thanks, Adrian.
The race condition is not really workaroundable at the moment and needs a
rework in the job system. The extended code simply copies to the clipboard what
is available (if the pixbuf is not available yet it&amp;#39;s just the URI).

Have a nice new year, folks!

commit 031908baeeac94a398e44e53253ee8454f834242
Author: Felix Riemann &amp;lt;&amp;gt;
Date:   Fri Dec 31 18:30:12 2010 +0100

    Unite copy to clipboard functions in a single menu entry

    Also assign a shortcut and icon to it.

commit dcb56b03e9c9282138b9da94eddcedfc401ab750
Author: Felix Riemann &amp;lt;&amp;gt;
Date:   Fri Dec 31 18:21:45 2010 +0100

    Allow handling multiple clipboard data formats from one menu entry

    The new class &amp;quot;snapshots&amp;quot; the required data from the given EogImage
    and keeps it around for clipboard usage until the clipboard gets reset.

commit 0b209b1ff16e863e60a1d86413aa57c5fbde76b0
Author: Adrian Hands &amp;lt;&amp;gt;
Date:   Fri Dec 31 14:34:58 2010 +0100

    Add Copy Image and Copy Path to clipboard functionality

    Fixes &lt;span&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=78514" title="RESOLVED FIXED - copy item in edit menu"&gt;bug 78514&lt;/a&gt;&lt;/span&gt;.

This problem has been fixed in the development version. The fix will be
available in the next major software release. Thank you for your bug report.
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c18" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c18"&gt;Comment 18&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Claudio Saavedra&lt;/span&gt; &lt;span&gt;[eog developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2010-12-31 18:03:58 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Great work guys, thank you a lot!
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;

&lt;pre&gt;
I would like to extend my thanks to the gnome team/community for a great last
moment with my dad.

Adrian Hands (my father) wrote the patch above to improve the usability of
gnome for himself and others. You see my dad was suffering from ALS and his
hands were so crippled he could no longer use a keyboard. Thus we used a Darci
usb morse code keyboard emulator to help him type. Even the morse code device
was a struggle as the sensitivity adjustment and positioning of the nice two
paddled key would fall out of whack. I rigged up a pvc cage that wrapped around
his knee and fixed remote switches to the cage so that he could use the
remaining strength in his legs to operate the Darci morse code device. He used
this last bit of body movement to write this patch.

Here is a photo of him using it:
&lt;a href="https://picasaweb.google.com/HandsAdrian/ShotwellConnect#5549467460761802914"&gt;https://picasaweb.google.com/HandsAdrian/ShotwellConnect#5549467460761802914&lt;/a&gt;

My father passed away yesterday. I went back through my email to find our last
correspondence (he was in India for treatment, and I live in Raleigh). I would
like to share the email with you.
&amp;lt;email&amp;gt;
On Sun, Jan 30, 2011 at 12:16 PM, Adrian Hands &amp;lt;&lt;a href="mailto:handsadrian@gmail.com"&gt;handsadrian@gmail.com&lt;/a&gt;&amp;gt; wrote:
&lt;span&gt;&amp;gt; ACCEPTed
&amp;gt; COMMITed
&amp;gt; RESOLVEd
&amp;gt; BOO-YAH!&lt;/span&gt;
&amp;gt;
&lt;span&gt;&amp;gt; commit 0b209b1ff16e863e60a1d86413aa57c5fbde76b0
&amp;gt; Author: Adrian Hands &amp;lt;&lt;a href="mailto:handsadrian@gmail.com"&gt;handsadrian@gmail.com&lt;/a&gt;&amp;gt;
&amp;gt; Date:   Fri Dec 31 14:34:58 2010 +0100&lt;/span&gt;
&amp;gt;
&lt;span&gt;&amp;gt;    Add Copy Image and Copy Path to clipboard functionality&lt;/span&gt;
&amp;gt;
&lt;span&gt;&amp;gt;    Fixes &lt;span&gt;&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=78514" title="RESOLVED FIXED - copy item in edit menu"&gt;bug 78514&lt;/a&gt;&lt;/span&gt;.&lt;/span&gt;
&amp;gt;
&lt;span&gt;&amp;gt;  data/eog-ui.xml  |    9 +++++++
&amp;gt;  src/eog-window.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
&amp;gt;  2 files changed, 72 insertions(+), 0 deletions(-)&lt;/span&gt;

I have the coolest Dad in the world!
&amp;lt;/email&amp;gt;

I am so glad that my last comment to my Dad was something like this.

Adrian Hands loved free software / open source. I do as well.

Thanks so much for the great software, and a new great memory.
-Ian Page Hands
&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;a name="c20" href="https://bugzilla.gnome.org/show_bug.cgi?id=78514#c20"&gt;Comment 20&lt;/a&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;Claudio Saavedra&lt;/span&gt; &lt;span&gt;[eog developer]&lt;/span&gt;&lt;/span&gt; &lt;span&gt;2011-02-26 17:11:00 UTC&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;
Ian, I am really touched to hear your father's story and at the same time
honored to know that he gave us this wonderful contribution. Please know that
we are more than grateful to your father and that his contribution and memory
will live with this project, forever.

My sympathies,

Claudio (eog maintainer)
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20"><id>tag:google.com,2005:reader/feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20</id><title type="html">Hacker News</title><link rel="alternate" href="http://news.ycombinator.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1297644175320"><id gr:original-id="http://xkcd.com/859/">tag:google.com,2005:reader/item/2ca96454842f1fee</id><title type="html">(</title><published>2011-02-11T05:00:00Z</published><updated>2011-02-11T05:00:00Z</updated><link rel="alternate" href="http://xkcd.com/859/" type="text/html"/><summary xml:base="http://xkcd.com/" type="html">&lt;img src="http://imgs.xkcd.com/comics/(.png" title="Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or \;;&amp;quot;\&amp;#39;&amp;#39;{\&amp;lt;&amp;lt;[&amp;#39; this mouseover text.&amp;quot;" alt="Brains aside, I wonder how many poorly-written xkcd.com-parsing scripts will break on this title (or \;;&amp;quot;\&amp;#39;&amp;#39;{\&amp;lt;&amp;lt;[&amp;#39; this mouseover text.&amp;quot;"&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://xkcd.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://xkcd.com/rss.xml</id><title type="html">xkcd.com</title><link rel="alternate" href="http://xkcd.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1295256824468"><id gr:original-id="http://www.matrix67.com/blog/?p=4071">tag:google.com,2005:reader/item/4241fd9173202699</id><category term="Brain Storm"/><category term="解谜"/><category term="文字游戏"/><title type="html">不用怀疑了，我已经写程序验证过了</title><published>2011-01-16T23:01:29Z</published><updated>2011-01-16T23:01:29Z</updated><link rel="alternate" href="http://www.matrix67.com/blog/archives/4071" type="text/html"/><content xml:base="http://www.matrix67.com/blog" type="html">&lt;p&gt;    先邀请大家完成一个非常欢乐的智力测试。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;How Smart Are You?&lt;/strong&gt;&lt;br&gt;
 &lt;br&gt;
1. You're participating in a race. You finally overtake the second person. What position are you in?&lt;br&gt;
 &lt;br&gt;
2. And if you just overtook the last person, then you are...?&lt;br&gt;
 &lt;br&gt;
3. Some very puzzling arithmetic! This must be calculated in your head only. Don't use a calculator or even paper and pencil for this. Add 40 to 1000. Now add 1000. Add 30 more. Add 1000. Now add 20 more. Add another 1000. Add 10 more. What is the total?&lt;br&gt;
 &lt;br&gt;
4. Mary's father had five lovely daughters: 1. Nana, 2. Nene, 3. Nini, 4. Nono... What's the name of the fifth daughter?&lt;br&gt;
 &lt;br&gt;
5. A mute person goes into some shop to buy himself a toothbrush. By imitating the action of brushing his teeth, he successfully expresses himself to the shopkeeper and manages to buy it. Then a blind man comes into the shop and wants to buy a pair of sunglasses; how would HE indicate what he wants?&lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
Answers to the quiz:&lt;br&gt;
 &lt;br&gt;
1. If you answered that you're first, then you're absolutely WRONG! If you overtake the second person and you take his place, YOU'RE in second place.&lt;br&gt;
 &lt;br&gt;
2. If you answered you're second to last, then you're WRONG again. How can you overtake the LAST person?!&lt;br&gt;
 &lt;br&gt;
3. Did you get 5000? It's not very accurate... The correct answer is actually 4100.&lt;br&gt;
 &lt;br&gt;
4. Did you Answer Nunu? No! Of course it's incorrect. Her name is Mary. Read this question again!&lt;br&gt;
 &lt;br&gt;
5. It's very simple, really: He opens his mouth and ask for it... &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;br&gt;
    俗话说，智商测试就是看自己到底笨到了什么地步。下面邀请大家做一个更加欢乐的脑残测试。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;How Stupid Are You? &lt;/strong&gt;&lt;br&gt;
 &lt;br&gt;
Choose an answer for each question, then add up the numbers to determine your stupidity level:&lt;br&gt;
 &lt;br&gt;
The capital of Greece is...&lt;br&gt;
 &lt;br&gt;
1. Dwindling.&lt;br&gt;
2. Athens.&lt;br&gt;
3. G.&lt;br&gt;
4. "Saturday Night Fever" is a lot more fun.&lt;br&gt;
 &lt;br&gt;
What's the opposite of Apathy?&lt;br&gt;
 &lt;br&gt;
1. I don't care.&lt;br&gt;
2. Interest.&lt;br&gt;
3. Cherokee.&lt;br&gt;
4. A-dead-end-y?&lt;br&gt;
 &lt;br&gt;
Who's known as the discoverer of America?&lt;br&gt;
 &lt;br&gt;
1. ┉Neanderthals.&lt;br&gt;
2. ┉Christopher Columbus.&lt;br&gt;
3. Americus Gazpacho.&lt;br&gt;
4. Captain Crunch.&lt;br&gt;
 &lt;br&gt;
Who's buried in Grant's Tomb?&lt;br&gt;
 &lt;br&gt;
1. The man who invented this "joke", hopefully.&lt;br&gt;
2. Ulysses S. Grant.&lt;br&gt;
3. I need more information.&lt;br&gt;
4. Which one of them?&lt;br&gt;
 &lt;br&gt;
Let's say I wed your cousin and I have a cousin too; then he is...&lt;br&gt;
 &lt;br&gt;
1. Not wanted on Thanksgiving.&lt;br&gt;
2. My cousin-in-law's cousin.&lt;br&gt;
3. A next of kin of sorts.&lt;br&gt;
4. We can't both be married to my cousin!&lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
Let's add up your points:&lt;br&gt;
 &lt;br&gt;
5-7: You possess a negative amount of stupidity. You're a constant smartass who has no energy to try this unneeded test. Go read Kafka or something.&lt;br&gt;
 &lt;br&gt;
8-12: You have zero stupidity and answered almost every question in the test correctly. Well done, you are duller than a fourth grade history teacher. You are the person that often tells everyone when 'whom' should be used.&lt;br&gt;
 &lt;br&gt;
13-19: You maintain a healthy amount of stupidity. You are a failure, fall down a lot and are a real hazard to yourself and to others. You are probably a pet psychic.&lt;br&gt;
 &lt;br&gt;
20: You are Sarah Palin. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt; &lt;br&gt;
留给大家的问题：这两套测试题有什么牛 B 的地方（牛 B 到了我足以单独发一篇日志的地步）？&lt;/p&gt;
&lt;p&gt; &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;
 &lt;/p&gt;
&lt;p&gt;答案：这两套测试互为 &lt;a href="http://www.matrix67.com/blog/archives/289"&gt;Anagram&lt;/a&gt; ，换句话说上面两个文字框里包含的每种字母的个数都完全相同！&lt;/p&gt;
&lt;p&gt;来源：&lt;a href="http://www.anagrammy.com/archives/2010/anag-201006.html"&gt;http://www.anagrammy.com/archives/2010/anag-201006.html&lt;/a&gt;&lt;br&gt;
 &lt;/p&gt;&lt;img src="http://www1.feedsky.com/t1/474012094/matrix67/feedsky/s.gif?r=http://www.matrix67.com/blog/archives/4071" border="0" height="0" width="0"&gt;&lt;p&gt;&lt;a href="http://www1.feedsky.com/r/l/feedsky/matrix67/474012094/art01.html"&gt;&lt;img border="0" ismap src="http://www1.feedsky.com/r/i/feedsky/matrix67/474012094/art01.gif"&gt;&lt;/a&gt;&lt;/p&gt;</content><author><name>Matrix67</name></author><source gr:stream-id="feed/http://www.matrix67.com/blog/feed.asp"><id>tag:google.com,2005:reader/feed/http://www.matrix67.com/blog/feed.asp</id><title type="html">Matrix67: My Blog</title><link rel="alternate" href="http://www.matrix67.com/blog" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1294770296931"><id gr:original-id="http://blog.ksplice.com/?p=2800">tag:google.com,2005:reader/item/322964131b32e616</id><category term="System administration"/><category term="code"/><category term="linux"/><category term="system administration"/><title type="html">Solving problems with proc</title><published>2011-01-11T05:00:50Z</published><updated>2011-01-11T05:00:50Z</updated><link rel="alternate" href="http://blog.ksplice.com/2011/01/solving-problems-with-proc/" type="text/html"/><content xml:base="http://blog.ksplice.com/" type="html">&lt;div&gt;
&lt;p&gt;The Linux kernel exposes a wealth of information through the &lt;code&gt;proc&lt;/code&gt; special filesystem. It's not hard to find an &lt;a href="http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html"&gt;encyclopedic reference&lt;/a&gt; about &lt;code&gt;proc&lt;/code&gt;. In this article I'll take a different approach: we'll see how &lt;code&gt;proc&lt;/code&gt; tricks can solve a number of real-world problems. All of these tricks should work on a recent Linux kernel, though some will fail on older systems like RHEL version 4.&lt;/p&gt;&lt;p&gt;Almost all Linux systems will have the &lt;code&gt;proc&lt;/code&gt; filesystem mounted at &lt;code&gt;/proc&lt;/code&gt;. If you look inside this directory you'll see a ton of stuff:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;mount | grep ^proc&lt;/span&gt;
proc on /proc type proc (rw,noexec,nosuid,nodev)
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;ls /proc&lt;/span&gt;
1      13     23     29672  462        cmdline      kcore         self
10411  13112  23842  29813  5          cpuinfo      keys          slabinfo
...
12934  15260  26317  4      bus        irq          partitions    zoneinfo
12938  15262  26349  413    cgroups    kallsyms     sched_debug
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;These directories and files don't exist anywhere on disk. Rather, the kernel generates the contents of &lt;code&gt;/proc&lt;/code&gt; as you read it. &lt;code&gt;proc&lt;/code&gt; is a great example of the UNIX &amp;quot;everything is a file&amp;quot; philosophy. Since the Linux kernel exposes its internal state as a set of ordinary files, you can build tools using basic shell scripting, or any other programming environment you like. You can also change kernel behavior by writing to certain files in &lt;code&gt;/proc&lt;/code&gt;, though we won't discuss this further.&lt;/p&gt;&lt;p&gt;Each process has a directory in &lt;code&gt;/proc&lt;/code&gt;, named by its numerical process identifier (PID). So for example, information about &lt;code&gt;init&lt;/code&gt; (PID 1) is stored in &lt;code&gt;/proc/1&lt;/code&gt;. There's also a symlink &lt;code&gt;/proc/self&lt;/code&gt;, which each process sees as pointing to its own directory:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;ls -l /proc/self&lt;/span&gt;
lrwxrwxrwx 1 root root 64 Jan 6 13:22 /proc/self -&amp;gt; 13833
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here we see that 13833 was the PID of the &lt;code&gt;ls&lt;/code&gt; process. Since &lt;code&gt;ls&lt;/code&gt; has exited, the directory &lt;code&gt;/proc/13883&lt;/code&gt; will have already vanished, unless your system reused the PID for another process. The contents of &lt;code&gt;/proc&lt;/code&gt; are constantly changing, even in response to your queries!&lt;/p&gt;&lt;div&gt;&lt;h3&gt;Back from the dead&lt;/h3&gt;&lt;p&gt;It's happened to all of us. You hit the up-arrow one too many times and accidentally wiped out that &lt;em&gt;really&lt;/em&gt; important disk image.&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;rm hda.img&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Time to think fast! Luckily you were still computing its checksum in another terminal. And UNIX systems won&amp;#39;t actually delete a file on disk while the file is in use. Let&amp;#39;s make sure our file stays &amp;quot;in use&amp;quot; by suspending &lt;code&gt;md5sum&lt;/code&gt; with control-Z:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;md5sum hda.img&lt;/span&gt;
^Z
[1]+  Stopped                 md5sum hda.img
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;proc&lt;/code&gt; filesystem contains links to a process's open files, under the &lt;code&gt;fd&lt;/code&gt; subdirectory. We'll get the PID of &lt;code&gt;md5sum&lt;/code&gt; and try to recover our file:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;jobs -l&lt;/span&gt;
[1]+ 14595 Stopped                 md5sum hda.img
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;ls -l /proc/14595/fd/&lt;/span&gt;
total 0
lrwx------ 1 keegan keegan 64 Jan 6 15:05 0 -&amp;gt; /dev/pts/18
lrwx------ 1 keegan keegan 64 Jan 6 15:05 1 -&amp;gt; /dev/pts/18
lrwx------ 1 keegan keegan 64 Jan 6 15:05 2 -&amp;gt; /dev/pts/18
lr-x------ 1 keegan keegan 64 Jan 6 15:05 3 -&amp;gt; /home/keegan/hda.img (deleted)
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cp /proc/14595/fd/3 saved.img&lt;/span&gt;
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;du -h saved.img&lt;/span&gt;
320G    saved.img
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Disaster averted, thanks to &lt;code&gt;proc&lt;/code&gt;. There's one big caveat: making a full byte-for-byte copy of the file could require a lot of time and free disk space. In theory this isn't necessary; the file still exists on disk, and we just need to make a new name for it (a hardlink). But the &lt;code&gt;ln&lt;/code&gt; command and associated system calls have no way to name a deleted file. On FreeBSD we could use &lt;a href="http://nixdoc.net/man-pages/FreeBSD/man8/fsdb.8.html"&gt;&lt;code&gt;fsdb&lt;/code&gt;&lt;/a&gt;, but I'm not aware of a similar tool for Linux. Suggestions are welcome!&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Redirect harder&lt;/h3&gt;&lt;p&gt;Most UNIX tools can read from standard input, either by default or with a specified filename of &amp;quot;&lt;code&gt;-&lt;/code&gt;&amp;quot;. But sometimes we have to use a program which requires an explicitly named file. &lt;code&gt;proc&lt;/code&gt; provides an elegant workaround for this flaw.&lt;/p&gt;&lt;p&gt;A UNIX process refers to its open files using integers called &lt;em&gt;file descriptors&lt;/em&gt;. When we say &amp;quot;standard input&amp;quot;, we really mean &amp;quot;file descriptor 0&amp;quot;. So we can use &lt;code&gt;/proc/self/fd/0&lt;/code&gt; as an explicit name for standard input:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat crap-prog.py &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;&lt;br&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;echo hello | python crap-prog.py &lt;/span&gt;
IndexError: list index out of range
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;echo hello | python crap-prog.py -&lt;/span&gt;
IOError: [Errno 2] No such file or directory: '-'
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;echo hello | python crap-prog.py /proc/self/fd/0&lt;/span&gt;
hello
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This also works for standard output and standard error, on file descriptors 1 and 2 respectively. This trick is useful enough that many distributions provide symlinks at &lt;code&gt;/dev/stdin&lt;/code&gt;, etc.&lt;/p&gt;&lt;p&gt;There are a lot of possibilities for where &lt;code&gt;/proc/self/fd/0&lt;/code&gt; might point:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;ls -l /proc/self/fd/0&lt;/span&gt;
lrwx------ 1 keegan keegan 64 Jan  6 16:00 /proc/self/fd/0 -&amp;gt; /dev/pts/6
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;ls -l /proc/self/fd/0 &amp;lt; /dev/null&lt;/span&gt;
lr-x------ 1 keegan keegan 64 Jan  6 16:00 /proc/self/fd/0 -&amp;gt; /dev/null
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;echo | ls -l /proc/self/fd/0&lt;/span&gt;
lr-x------ 1 keegan keegan 64 Jan  6 16:00 /proc/self/fd/0 -&amp;gt; pipe:[9159930]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the first case, stdin is the pseudo-terminal created by my &lt;a href="http://www.gnu.org/software/screen/"&gt;&lt;code&gt;screen&lt;/code&gt;&lt;/a&gt; session. In the second case it's redirected from a different file. In the third case, stdin is an anonymous pipe. The symlink target isn't a real filename, but &lt;code&gt;proc&lt;/code&gt; provides the appropriate magic so that we can read the file anyway. The filesystem nodes for anonymous pipes live in the &lt;a href="http://lxr.linux.no/linux+v2.6.37/fs/pipe.c"&gt;&lt;code&gt;pipefs&lt;/code&gt;&lt;/a&gt; special filesystem — specialer than &lt;code&gt;proc&lt;/code&gt;, because it can't even be mounted.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;The phantom progress bar&lt;/h3&gt;&lt;p&gt;Say we have some program which is slowly working its way through an input file. We'd like a progress bar, but we already launched the program, so it's too late for &lt;a href="http://www.ivarch.com/programs/pv.shtml"&gt;&lt;code&gt;pv&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Alongside &lt;code&gt;/proc/$PID/fd&lt;/code&gt; we have &lt;code&gt;/proc/$PID/fdinfo&lt;/code&gt;, which will tell us (among other things) a process's current position within an open file. Let's use this to make a little script that will attach a progress bar to an existing process:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat phantom-progress.bash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;br&gt;&lt;span&gt;fd=&lt;/span&gt;&lt;span&gt;/proc/&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;/fd/&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;br&gt;&lt;span&gt;fdinfo=&lt;/span&gt;&lt;span&gt;/proc/&lt;/span&gt;&lt;span&gt;$1&lt;/span&gt;&lt;span&gt;/fdinfo/&lt;/span&gt;&lt;span&gt;$2&lt;/span&gt;&lt;br&gt;&lt;span&gt;name=$(&lt;/span&gt;&lt;span&gt;readlink&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$fd)&lt;/span&gt;&lt;br&gt;&lt;span&gt;size=$(&lt;/span&gt;&lt;span&gt;wc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-c&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$fd&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'{print $1}'&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-e&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$fd&lt;/span&gt;&lt;span&gt; ]&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;progress=$(&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$fdinfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; ^pos &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;awk&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'{print $2}'&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;echo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$((&lt;/span&gt;&lt;span&gt;100*&lt;/span&gt;&lt;span&gt;$progress&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$size))&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt; 1&lt;/span&gt;&lt;br&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; dialog &lt;/span&gt;&lt;span&gt;--gauge&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;Progress reading &lt;/span&gt;&lt;span&gt;$name&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; 7 100&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We pass the PID and a file descriptor as arguments. Let's test it:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat slow-reader.py &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;&lt;br&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;br&gt;&lt;span&gt;f &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;], &lt;/span&gt;&lt;span&gt;'r'&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; f.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1024&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0.01&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;python slow-reader.py bigfile &amp;amp;&lt;/span&gt;
[1] 18589
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;ls -l /proc/18589/fd&lt;/span&gt;
total 0
lrwx------ 1 keegan keegan 64 Jan  6 16:40 0 -&amp;gt; /dev/pts/16
lrwx------ 1 keegan keegan 64 Jan  6 16:40 1 -&amp;gt; /dev/pts/16
lrwx------ 1 keegan keegan 64 Jan  6 16:40 2 -&amp;gt; /dev/pts/16
lr-x------ 1 keegan keegan 64 Jan  6 16:40 3 -&amp;gt; /home/keegan/bigfile
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;./phantom-progress.bash 18589 3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And you should see a nice &lt;code&gt;curses&lt;/code&gt; progress bar, courtesy of &lt;a href="http://packages.debian.org/squeeze/dialog"&gt;&lt;code&gt;dialog&lt;/code&gt;&lt;/a&gt;. Or replace &lt;code&gt;dialog&lt;/code&gt; with &lt;a href="http://packages.debian.org/squeeze/zenity"&gt;&lt;code&gt;gdialog&lt;/code&gt;&lt;/a&gt; and you'll get a GTK+ window.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Chasing plugins&lt;/h3&gt;&lt;p&gt;A user comes to you with a problem: every so often, their instance of Enterprise FooServer will crash and burn. You read up on Enterprise FooServer and discover that it's a plugin-riddled behemoth, loading dozens of shared libraries at startup. Loading the wrong library could very well cause mysterious crashing.&lt;/p&gt;&lt;p&gt;The exact set of libraries loaded will depend on the user's config files, as well as environment variables like &lt;a href="http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html"&gt;&lt;code&gt;LD_PRELOAD&lt;/code&gt; and &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;&lt;/a&gt;. So you ask the user to start &lt;code&gt;fooserver&lt;/code&gt; exactly as they normally do. You get the process's PID and dump its memory map:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat /proc/21637/maps&lt;/span&gt;
00400000-00401000 r-xp 00000000 fe:02 475918             /usr/bin/fooserver
00600000-00601000 rw-p 00000000 fe:02 475918             /usr/bin/fooserver
02519000-0253a000 rw-p 00000000 00:00 0                  [heap]
7ffa5d3c5000-7ffa5d3c6000 r-xp 00000000 fe:02 1286241    /usr/lib/foo-1.2/libplugin-bar.so
7ffa5d3c6000-7ffa5d5c5000 ---p 00001000 fe:02 1286241    /usr/lib/foo-1.2/libplugin-bar.so
7ffa5d5c5000-7ffa5d5c6000 rw-p 00000000 fe:02 1286241    /usr/lib/foo-1.2/libplugin-bar.so
7ffa5d5c6000-7ffa5d5c7000 r-xp 00000000 fe:02 1286243    /usr/lib/foo-1.3/libplugin-quux.so
7ffa5d5c7000-7ffa5d7c6000 ---p 00001000 fe:02 1286243    /usr/lib/foo-1.3/libplugin-quux.so
7ffa5d7c6000-7ffa5d7c7000 rw-p 00000000 fe:02 1286243    /usr/lib/foo-1.3/libplugin-quux.so
7ffa5d7c7000-7ffa5d91f000 r-xp 00000000 fe:02 4055115    /lib/libc-2.11.2.so
7ffa5d91f000-7ffa5db1e000 ---p 00158000 fe:02 4055115    /lib/libc-2.11.2.so
7ffa5db1e000-7ffa5db22000 r--p 00157000 fe:02 4055115    /lib/libc-2.11.2.so
7ffa5db22000-7ffa5db23000 rw-p 0015b000 fe:02 4055115    /lib/libc-2.11.2.so
7ffa5db23000-7ffa5db28000 rw-p 00000000 00:00 0 
7ffa5db28000-7ffa5db2a000 r-xp 00000000 fe:02 4055114    /lib/libdl-2.11.2.so
7ffa5db2a000-7ffa5dd2a000 ---p 00002000 fe:02 4055114    /lib/libdl-2.11.2.so
7ffa5dd2a000-7ffa5dd2b000 r--p 00002000 fe:02 4055114    /lib/libdl-2.11.2.so
7ffa5dd2b000-7ffa5dd2c000 rw-p 00003000 fe:02 4055114    /lib/libdl-2.11.2.so
7ffa5dd2c000-7ffa5dd4a000 r-xp 00000000 fe:02 4055128    /lib/ld-2.11.2.so
7ffa5df26000-7ffa5df29000 rw-p 00000000 00:00 0 
7ffa5df46000-7ffa5df49000 rw-p 00000000 00:00 0 
7ffa5df49000-7ffa5df4a000 r--p 0001d000 fe:02 4055128    /lib/ld-2.11.2.so
7ffa5df4a000-7ffa5df4b000 rw-p 0001e000 fe:02 4055128    /lib/ld-2.11.2.so
7ffa5df4b000-7ffa5df4c000 rw-p 00000000 00:00 0 
7fffedc07000-7fffedc1c000 rw-p 00000000 00:00 0          [stack]
7fffedcdd000-7fffedcde000 r-xp 00000000 00:00 0          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0  [vsyscall]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's a serious red flag: &lt;code&gt;fooserver&lt;/code&gt; is loading the &lt;code&gt;bar&lt;/code&gt; plugin from FooServer version 1.2 and the &lt;code&gt;quux&lt;/code&gt; plugin from FooServer version 1.3. If the versions aren't binary-compatible, that might explain the mysterious crashes. You can now hassle the user for their config files and try to &lt;a href="http://blog.ksplice.com/2010/09/debugging-shared-library-problems-a-real-world-example/"&gt;fix the problem&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Just for fun, let's take a closer look at what the memory map means. Right away, we can recognize a memory address range (first column), a filename (last column), and file-like permission bits &lt;code&gt;rwx&lt;/code&gt;. So each line indicates that the contents of a particular file are available to the process at a particular range of addresses with a particular set of permissions. For more details, see the &lt;a href="http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html"&gt;&lt;code&gt;proc&lt;/code&gt; manpage&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The executable itself is mapped twice: once for executing code, and once for reading and writing data. The same is true of the shared libraries. The flag &lt;code&gt;p&lt;/code&gt; indicates a private mapping: changes to this memory area will not be shared with other processes, or saved to disk. We certainly don't want the global variables in a shared library to be shared by every process which loads that library. If you're wondering, as I was, why some library mappings have no access permissions, see &lt;a href="http://www.google.com/codesearch/p?hl=en#xy1xtVWIKOQ/pub/glibc/snapshots/glibc-2.3.91.tar.bz2%7C8nWZ2BCikBY/glibc-2.3.91/elf/dl-load.c&amp;amp;q=dl-load.c&amp;amp;d=2&amp;amp;l=1167"&gt;this &lt;code&gt;glibc&lt;/code&gt; source comment&lt;/a&gt;. There are also a number of &amp;quot;anonymous&amp;quot; mappings lacking filenames; these exist in memory only. An allocator like &lt;code&gt;malloc&lt;/code&gt; can ask the kernel for such a mapping, then parcel out this storage as the application requests it.&lt;/p&gt;&lt;p&gt;The last two entries are special creatures which aim to reduce system call overhead. At boot time, the kernel will determine the fastest way to make a system call on your particular CPU model. It builds this instruction sequence into a little shared library in memory, and provides this &lt;a href="http://www.trilithium.com/johan/2005/08/linux-gate/"&gt;virtual dynamic shared object&lt;/a&gt; (named &lt;code&gt;vdso&lt;/code&gt;) for use by userspace code. Even so, the overhead of switching to the kernel context should be avoided when possible. Certain system calls such as &lt;code&gt;gettimeofday&lt;/code&gt; are merely reading information maintained by the kernel. The kernel will store this information in the public &lt;a href="http://transnum.blogspot.com/2009/01/linuxs-vsyscall.html"&gt;virtual system call&lt;/a&gt; page (named &lt;code&gt;vsyscall&lt;/code&gt;), so that these &amp;quot;system calls&amp;quot; can be implemented entirely in userspace.&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Counting interruptions&lt;/h3&gt;&lt;p&gt;We have a process which is taking a long time to run. How can we tell if it's CPU-bound or IO-bound?&lt;/p&gt;&lt;p&gt;When a process makes a system call, the kernel might let a different process run for a while before servicing the request. This &lt;em&gt;voluntary&lt;/em&gt; context switch is especially likely if the system call requires waiting for some resource or event. If a process is only doing pure computation, it's not making any system calls. In that case, the kernel uses a hardware timer interrupt to eventually perform a &lt;em&gt;nonvoluntary&lt;/em&gt; context switch.&lt;/p&gt;&lt;p&gt;The file &lt;code&gt;/proc/$PID/status&lt;/code&gt; has fields labeled &lt;code&gt;voluntary_ctxt_switches&lt;/code&gt; and &lt;code&gt;nonvoluntary_ctxt_switches&lt;/code&gt; showing how many of each event have occurred. Let's try our slow reader process from before:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;python slow-reader.py bigfile &amp;amp;&lt;/span&gt;
[1] 15264
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;watch -d -n 1 'cat /proc/15264/status | grep ctxt_switches'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You should see mostly voluntary context switches. Our program calls into the kernel in order to read or sleep, and the kernel can decide to let another process run for a while. We could use &lt;a href="http://blog.ksplice.com/2010/08/strace-the-sysadmins-microscope/"&gt;&lt;code&gt;strace&lt;/code&gt;&lt;/a&gt; to see the individual calls. Now let's try a tight computational loop:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat tightloop.c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;br&gt;&lt;span&gt;}&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;gcc -Wall -o tightloop tightloop.c&lt;/span&gt;
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;./tightloop &amp;amp;&lt;/span&gt;
[1] 30086
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;watch -d -n 1 'cat /proc/30086/status | grep ctxt_switches'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You'll see exclusively nonvoluntary context switches. This program isn't making system calls; it just spins the CPU until the kernel decides to let someone else have a turn. Don't forget to kill this useless process!&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Staying ahead of the OOM killer&lt;/h3&gt;&lt;p&gt;The Linux memory subsystem has a nasty habit of making promises it can't keep. A userspace program can successfully allocate as much memory as it likes. The kernel will only look for free space in physical memory once the program actually writes to the addresses it allocated. And if the kernel can't find enough space, a component called the OOM killer will use an &lt;a href="http://lxr.linux.no/linux+v2.6.37/mm/oom_kill.c#L144"&gt;ad-hoc heuristic&lt;/a&gt; to choose a victim process and unceremoniously kill it.&lt;/p&gt;&lt;p&gt;Needless to say, this feature is &lt;a href="http://www.google.com/#q=oom+site:lwn.net"&gt;controversial&lt;/a&gt;. The kernel has no reliable idea of who's actually responsible for consuming the machine's memory. The victim process may be totally innocent. You can &lt;a href="http://lwn.net/Articles/104179/"&gt;disable memory overcommitting&lt;/a&gt; on your own machine, but there's inherent risk in breaking assumptions that processes make — even when those assumptions are harmful.&lt;/p&gt;&lt;p&gt;As a less drastic step, let&amp;#39;s keep an eye on the OOM killer so we can predict where it might strike next. The victim process will be the process with the highest &amp;quot;OOM score&amp;quot;, which we can read from &lt;code&gt;/proc/$PID/oom_score&lt;/code&gt;:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat oom-scores.bash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt;&lt;br&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; procdir &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/proc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-maxdepth&lt;/span&gt;&lt;span&gt; 1 &lt;/span&gt;&lt;span&gt;-regex&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'/proc/[0-9]+'&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;printf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;%10d %6d %s\n&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$procdir&lt;/span&gt;&lt;span&gt;/oom_score&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;basename&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$procdir)&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;\&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$procdir&lt;/span&gt;&lt;span&gt;/cmdline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;'\0'&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;' '&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-c&lt;/span&gt;&lt;span&gt; 100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;br&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&amp;gt;&lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sort&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-nr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;head&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-n&lt;/span&gt;&lt;span&gt; 20&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For each process we print the OOM score, the PID (obtained from the directory name) and the process's command line. &lt;code&gt;proc&lt;/code&gt; provides string arrays in &lt;code&gt;NULL&lt;/code&gt;-delimited format, which we convert using &lt;code&gt;tr&lt;/code&gt;. It's important to suppress error output using &lt;code&gt;2&amp;gt;/dev/null&lt;/code&gt; because some of the processes found by &lt;code&gt;find&lt;/code&gt; (including &lt;code&gt;find&lt;/code&gt; itself) will no longer exist within the loop. Let's see the results:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;./oom-scores.bash &lt;/span&gt;
  13647872  15439 /usr/lib/chromium-browser/chromium-browser --type=plugin
   1516288  15430 /usr/lib/chromium-browser/chromium-browser --type=gpu-process
   1006592  13204 /usr/lib/nspluginwrapper/i386/linux/npviewer.bin --plugin
    687581  15264 /usr/lib/chromium-browser/chromium-browser --type=zygote
    445352  14323 /usr/lib/chromium-browser/chromium-browser --type=renderer
    444930  11255 /usr/lib/chromium-browser/chromium-browser --type=renderer
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Unsurprisingly, my web browser and Flash plugin are prime targets for the OOM killer. But the rankings might change if some runaway process caused an actual out-of-memory condition. Let's (carefully!) run a program that will (slowly!) eat 500 MB of RAM:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;cat oomnomnom.c&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;#include &lt;/span&gt;&lt;span&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;#include &lt;/span&gt;&lt;span&gt;&amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;#include &lt;/span&gt;&lt;span&gt;&amp;lt;sys/mman.h&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span&gt;#define SIZE (10*1024*1024)&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; i&lt;/span&gt;&lt;span&gt;++)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;br&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;m &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; mmap&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;NULL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; SIZE&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; PROT_WRITE&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;br&gt;&lt;span&gt;      MAP_PRIVATE &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; MAP_ANONYMOUS&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;    memset&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0x80&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; SIZE&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;    sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;br&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;br&gt;&lt;span&gt;}&lt;/span&gt;&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On each loop iteration, we ask for 10 megabytes of memory as a private, anonymous (non-file-backed) mapping. We then write to this region, so that the kernel will have to allocate some physical RAM. Now we'll watch OOM scores and free memory as this program runs:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;gcc -Wall -o oomnomnom oomnomnom.c&lt;/span&gt;
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;./oomnomnom &amp;amp;&lt;/span&gt;
[1] 19697
&lt;span&gt;keegan@lyle$&lt;/span&gt; &lt;span&gt;watch -d -n 1 './oom-scores.bash; echo; free -m'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You'll see &lt;code&gt;oomnomnom&lt;/code&gt; climb to the top of the list.&lt;/p&gt;&lt;p&gt;So we've seen a few ways that &lt;code&gt;proc&lt;/code&gt; can help us solve problems. Actually, we've only scratched the surface. Inside each process's directory you'll find information about resource limits, chroots, CPU affinity, page faults, and much more. What are your favorite &lt;code&gt;proc&lt;/code&gt; tricks? Let us know in the comments!&lt;/p&gt;&lt;div&gt; 
&lt;h3&gt;Maintain your hard-earned &lt;code&gt;/proc/uptime&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;With &lt;a href="http://www.ksplice.com/"&gt;Ksplice Uptrack&lt;/a&gt;, you can apply all of your Linux vendor’s important security and bugfix updates without rebooting, saving you time and money and keeping your systems instantly up to date and secure.&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Ksplice/~4/T8y4L8Sk7dA" height="1" width="1"&gt;</content><author><name>keegan</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/Ksplice"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/Ksplice</id><title type="html">Ksplice</title><link rel="alternate" href="http://blog.ksplice.com" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1294219892126"><id gr:original-id="http://xkcd.com/843/">tag:google.com,2005:reader/item/3a99c86e5810f52e</id><title type="html">Misconceptions</title><published>2011-01-05T05:00:00Z</published><updated>2011-01-05T05:00:00Z</updated><link rel="alternate" href="http://xkcd.com/843/" type="text/html"/><summary xml:base="http://xkcd.com/" type="html">&lt;img src="http://imgs.xkcd.com/comics/misconceptions.png" title="&amp;#39;Grandpa, what was it like in the Before time?&amp;#39; &amp;#39;It was hell. People went around saying glass was a slow-flowing liquid. You folks these days don&amp;#39;t know how good you have it.&amp;#39;" alt="&amp;#39;Grandpa, what was it like in the Before time?&amp;#39; &amp;#39;It was hell. People went around saying glass was a slow-flowing liquid. You folks these days don&amp;#39;t know how good you have it.&amp;#39;"&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://xkcd.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://xkcd.com/rss.xml</id><title type="html">xkcd.com</title><link rel="alternate" href="http://xkcd.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293532290684"><id gr:original-id="http://www.charleshooper.net/blog/how-i-made-money-spamming-twitter-with-contextual-book-suggestions/">tag:google.com,2005:reader/item/bc15f53ae3b542b4</id><title type="html">How I Made Money Spamming Twitter with Contextual Book Suggestions</title><published>2010-12-28T10:31:30Z</published><updated>2010-12-28T10:31:30Z</updated><link rel="alternate" href="http://www.charleshooper.net/blog/how-i-made-money-spamming-twitter-with-contextual-book-suggestions/" type="text/html"/><summary xml:base="http://news.ycombinator.com/" type="html">&lt;div&gt;
								&lt;p&gt;Two winters ago I left a position as a system administrator that was  paying pretty well and moved cross-country to a region with less jobs  than where I moved from. Three months later, I was still unemployed,  broke, and bored. I was talking to my good friend &lt;a href="http://japherwocky.posterous.com/"&gt;Japhy&lt;/a&gt; on IRC one day and he was explaining to me how the &lt;a href="http://en.wikipedia.org/wiki/Tf%E2%80%93idf"&gt;tf-idf algorithm&lt;/a&gt; works. For reasons involving boredom more than any other reason, I  dreamed up an idea: &lt;strong&gt;I would write software that would take a  given document and generate book suggestions based on its content.&lt;/strong&gt;
&lt;/p&gt; I think that most programmers would agree with me that we put in  longer hours on code when we’re not working for anybody. We don’t stop  learning, either. To us, &lt;em&gt;unemployment is a brief sprint of academia&lt;/em&gt; spent in our home office, the local coffee shop, or our parent’s house.
 My imagination dreamed up this fairly straightforward process:
&lt;ol&gt;&lt;li&gt;Take a given document and calculate tf-idf scores on all terms&lt;/li&gt;
&lt;li&gt;Select X number of the highest scoring terms&lt;/li&gt;
&lt;li&gt;Pass these high-scoring terms to an Amazon ItemSearch query&lt;/li&gt;
&lt;li&gt;Receive a list of recommended books (with URLs) from Amazon&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I  had already written multiple Twitter bots by this time so I decided to just use some of my existing code to poll Twitter’s search API.  Essentially, the “documents” I mentioned above were actually tweets  containing the terms “book” or “books.” Two and a half days later I had a  working prototype that could generate a book recommendation from a  given tweet. It was at this time that I added steps 5 and 6:&lt;/p&gt;
&lt;p&gt;Tag URLs returned from Amazon’s ItemSearch with an affiliate ID; and&lt;br&gt;Reply to the tweeting user with their new book suggestion&lt;/p&gt;
&lt;p&gt;Four months later and &lt;strong&gt;I had generated over $7,000 in sales for Amazon with over $400 commission for myself&lt;/strong&gt;.  Obviously, the commission I was making wasn’t livable but it was a nice  addition to my then-depleting savings. Had I decided to scale out my  operation, I could have made much more. My benchmark is at four months  because that’s how long I went before being &lt;em&gt;suspended&lt;/em&gt;. My conversion rate? &lt;strong&gt;0.13%&lt;/strong&gt;! While seemingly low, this number is very high when compared to email spam. However, it’s important to note that email spam is subject to various filtering technologies.
&lt;/p&gt; &lt;img title="twitter-spam-earnings.png" src="http://cdn.subversity.net/blog_imgs/twitter-spam-earnings.png" alt="twitter-spam-earnings.png"&gt;A  fair amount of the time I share this story, people are more impressed  with the fact that I went 4 months before getting suspended. The truth  is, I had a lot of throttling built into my spam bot. The factors I  think are important to point out are:
&lt;ol&gt;&lt;li&gt;Twitter’s Terms of Service at that time basically only outlawed  “unsolicited replies,” nothing that really attacked targeted spam.&lt;/li&gt;
&lt;li&gt;Twitter’s  anti-spam stance did exist in writing (only in the help site,) but I do  not think they were actively enforcing their policies.&lt;/li&gt;
&lt;li&gt;My recommendations were contextual and, unless you looked at my  bot’s timeline and tweet count, looked legitimate (most of the time.)  In other words, I was tweeting &lt;em&gt;book suggestions&lt;/em&gt; to people who were already talking about &lt;em&gt;books&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;I recorded the usernames of everyone I sent recommendations to and would only @mention them once.&lt;/li&gt;
&lt;li&gt;I  built in a “chattiness” rate limiting function. This was to  distribute my spam throughout a whole hour (due to Twitter’s rate  limiting) more than anything.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;img title="twitter-suspended.png" src="http://cdn.subversity.net/blog_imgs/twitter-suspended.png" alt="twitter-suspended.png"&gt;&lt;/p&gt;  While it only lasted a short while, I had alot of fun and made a little bit of money spamming Twitter.
  The second re-incarnation of this project turned into &lt;a href="http://www.charleshooper.net/twitter/"&gt;BookSuggest, a website for recommending books based on a person’s Twitter feed&lt;/a&gt;.  I haven’t put alot of effort into promoting it, but my conversion rate  is much lower now that I’m not pushing the links in anyone’s face.
  Try it out and comment here – what did BookSuggest tell YOU to read?



											&lt;/div&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20"><id>tag:google.com,2005:reader/feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20</id><title type="html">Hacker News</title><link rel="alternate" href="http://news.ycombinator.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293517936313"><id gr:original-id="http://m.theatlantic.com/magazine/archive/2003/03/caring-for-your-introvert/2696/">tag:google.com,2005:reader/item/762498a4a47d51a7</id><title type="html">Caring for your introvert</title><published>2010-12-28T06:32:16Z</published><updated>2010-12-28T06:32:16Z</updated><link rel="alternate" href="http://m.theatlantic.com/magazine/archive/2003/03/caring-for-your-introvert/2696/" type="text/html"/><summary xml:base="http://news.ycombinator.com/" type="html">&lt;div&gt;

	
    

&lt;p&gt;&#xd;
&lt;span&gt;&lt;b&gt;From &lt;i&gt;Atlantic Unbound&lt;/i&gt;:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://m.theatlantic.com/doc/200602u/introverts"&gt;Interviews: "Introverts of the World, Unite!"&lt;/a&gt; (February 14, 2006)&lt;br&gt;&#xd;
A conversation with Jonathan Rauch, the author who—thanks to an astonishingly popular essay in the March 2003 &lt;i&gt;Atlantic&lt;/i&gt;—may have unwittingly touched off an Introverts' Rights revolution. &lt;/p&gt;&lt;p&gt;&lt;a href="http://m.theatlantic.com/doc/200604u/introversy"&gt;Follow-up: The Introversy Continues&lt;/a&gt; &lt;br&gt;&#xd;
Jonathan Rauch comments on reader feedback about introvert dating—and poses a new question&#xd;
&#xd;
&#xd;
&lt;/p&gt;

&lt;p&gt;Do you know someone who needs hours alone every day? Who loves quiet conversations about feelings or ideas, and can give a dynamite presentation to a big audience, but seems awkward in groups and maladroit at small talk? Who has to be dragged to parties and then needs the rest of the day to recuperate? Who growls or scowls or grunts or winces when accosted with pleasantries by people who are just trying to be nice?&lt;/p&gt;

&lt;p&gt;If so, do you tell this person he is "too serious," or ask if he is okay? Regard him as aloof, arrogant, rude? Redouble your efforts to draw him out?&lt;/p&gt;



&lt;p&gt;If you answered yes to these questions, chances are that you have an introvert on your hands—and that you aren't caring for him properly. Science has learned a good deal in recent years about the habits and requirements of introverts. It has even learned, by means of brain scans, that introverts process information differently from other people (I am not making this up). If you are behind the curve on this important matter, be reassured that you are not alone. Introverts may be common, but they are also among the most misunderstood and aggrieved groups in America, possibly the world.&lt;/p&gt;

&lt;p&gt;I know. My name is Jonathan, and I am an introvert.&lt;/p&gt;

&lt;p&gt;Oh, for years I denied it. After all, I have good social skills. I am not morose or misanthropic. Usually. I am far from shy. I love long conversations that explore intimate thoughts or passionate interests. But at last I have self-identified and come out to my friends and colleagues. In doing so, I have found myself liberated from any number of damaging misconceptions and stereotypes. Now I am here to tell you what you need to know in order to respond sensitively and supportively to your own introverted family members, friends, and colleagues. Remember, someone you know, respect, and interact with every day is an introvert, and you are probably driving this person nuts. It pays to learn the warning signs.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;What is introversion?&lt;/b&gt; In its modern sense, the concept goes back to the 1920s and the psychologist Carl Jung. Today it is a mainstay of personality tests, including the widely used Myers-Briggs Type Indicator. Introverts are not necessarily shy. Shy people are anxious or frightened or self-excoriating in social settings; introverts generally are not. Introverts are also not misanthropic, though some of us do go along with Sartre as far as to say "Hell is other people at breakfast." Rather, introverts are people who find other people tiring.&lt;/p&gt;

&lt;p&gt;Extroverts are energized by people, and wilt or fade when alone. They often seem bored by themselves, in both senses of the expression. Leave an extrovert alone for two minutes and he will reach for his cell phone. In contrast, after an hour or two of being socially "on," we introverts need to turn off and recharge. My own formula is roughly two hours alone for every hour of socializing. This isn't antisocial. It isn't a sign of depression. It does not call for medication. For introverts, to be alone with our thoughts is as restorative as sleeping, as nourishing as eating. Our motto: "I'm okay, you're okay—in small doses."&lt;/p&gt;

&lt;p&gt;&lt;b&gt;How many people are introverts?&lt;/b&gt; I performed exhaustive research on this question, in the form of a quick Google search. The answer: About 25 percent. Or: Just under half. Or—my favorite—"a minority in the regular population but a majority in the gifted population."&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Are introverts misunderstood?&lt;/b&gt; Wildly. That, it appears, is our lot in life. "It is very difficult for an extrovert to understand an introvert," write the education experts Jill D. Burruss and Lisa Kaenzig. (They are also the source of the quotation in the previous paragraph.) Extroverts are easy for introverts to understand, because extroverts spend so much of their time working out who they are in voluble, and frequently inescapable, interaction with other people. They are as inscrutable as puppy dogs. But the street does not run both ways. Extroverts have little or no grasp of introversion. They assume that company, especially their own, is always welcome. They cannot imagine why someone would need to be alone; indeed, they often take umbrage at the suggestion. As often as I have tried to explain the matter to extroverts, I have never sensed that any of them really understood. They listen for a moment and then go back to barking and yipping.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Are introverts oppressed?&lt;/b&gt; I would have to say so. For one thing, extroverts are overrepresented in politics, a profession in which only the garrulous are really comfortable. Look at George W. Bush. Look at Bill Clinton. They seem to come fully to life only around other people. To think of the few introverts who did rise to the top in politics—Calvin Coolidge, Richard Nixon—is merely to drive home the point. With the possible exception of Ronald Reagan, whose fabled aloofness and privateness were probably signs of a deep introverted streak (many actors, I've read, are introverts, and many introverts, when socializing, feel like actors), introverts are not considered "naturals" in politics.&lt;/p&gt;

&lt;p&gt;Extroverts therefore dominate public life. This is a pity. If we introverts ran the world, it would no doubt be a calmer, saner, more peaceful sort of place. As Coolidge is supposed to have said, "Don't you know that four fifths of all our troubles in this life would disappear if we would just sit down and keep still?" (He is also supposed to have said, "If you don't say anything, you won't be called on to repeat it." The only thing a true introvert dislikes more than talking about himself is repeating himself.)&lt;/p&gt;

&lt;p&gt;With their endless appetite for talk and attention, extroverts also dominate social life, so they tend to set expectations. In our extrovertist society, being outgoing is considered normal and therefore desirable, a mark of happiness, confidence, leadership. Extroverts are seen as bighearted, vibrant, warm, empathic. "People person" is a compliment. Introverts are described with words like "guarded," "loner," "reserved," "taciturn," "self-contained," "private"—narrow, ungenerous words, words that suggest emotional parsimony and smallness of personality. Female introverts, I suspect, must suffer especially. In certain circles, particularly in the Midwest, a man can still sometimes get away with being what they used to call a strong and silent type; introverted women, lacking that alternative, are even more likely than men to be perceived as timid, withdrawn, haughty.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Are introverts arrogant?&lt;/b&gt; Hardly. I suppose this common misconception has to do with our being more intelligent, more reflective, more independent, more level-headed, more refined, and more sensitive than extroverts. Also, it is probably due to our lack of small talk, a lack that extroverts often mistake for disdain. We tend to think before talking, whereas extroverts tend to think &lt;i&gt;by&lt;/i&gt; talking, which is why their meetings never last less than six hours. "Introverts," writes a perceptive fellow named Thomas P. Crouser, in an online review of a recent book called &lt;i&gt;&lt;a href="http://www.amazon.com/exec/obidos/ISBN=0809228165/theatlanticmonthA/"&gt;Why Should Extroverts Make All the Money?&lt;/a&gt;&lt;/i&gt; (I'm not making &lt;i&gt;that&lt;/i&gt; up, either), "are driven to distraction by the semi-internal dialogue extroverts tend to conduct. Introverts don't outwardly complain, instead roll their eyes and silently curse the darkness." Just so.&lt;/p&gt;

&lt;p&gt;The worst of it is that extroverts have no idea of the torment they put us through. Sometimes, as we gasp for air amid the fog of their 98-percent-content-free talk, we wonder if extroverts even bother to listen to themselves. Still, we endure stoically, because the etiquette books—written, no doubt, by extroverts—regard declining to banter as rude and gaps in conversation as awkward. We can only dream that someday, when our condition is more widely understood, when perhaps an Introverts' Rights movement has blossomed and borne fruit, it will not be impolite to say "I'm an introvert. You are a wonderful person and I like you. But now please shush."&lt;/p&gt;

&lt;p&gt;&lt;b&gt;How can I let the introvert in my life know that I support him and respect his choice?&lt;/b&gt; First, recognize that it's not a choice. It's not a lifestyle. It's an &lt;i&gt;orientation&lt;/i&gt;.&lt;/p&gt;

&lt;p&gt;Second, when you see an introvert lost in thought, don't say "What's the matter?" or "Are you all right?"&lt;/p&gt;

&lt;p&gt;Third, don't say anything else, either.  &lt;/p&gt;

&lt;/div&gt;&lt;p&gt;
After you comment, click Post. If you’re not already logged in you will be asked to log in or register.
&lt;/p&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20"><id>tag:google.com,2005:reader/feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20</id><title type="html">Hacker News</title><link rel="alternate" href="http://news.ycombinator.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293485940290"><id gr:original-id="http://www.eaglefantasy.com/?p=974">tag:google.com,2005:reader/item/ef9b36e7d89f659b</id><category term="Ideas"/><category term="玩"/><category term="原子弹"/><category term="搞笑"/><title type="html">如何在家中制造核爆</title><published>2010-12-27T03:48:53Z</published><updated>2010-12-27T03:48:53Z</updated><link rel="alternate" href="http://item.feedsky.com/~feedsky/eaglefantasy/~8062055/490089602/4862299/1/item.html" type="text/html"/><content xml:base="http://www.eaglefantasy.com/" type="html">&lt;p&gt;警告：本文将用图片的形式，生动形象地教你如何在家中制作原子弹爆炸的景象，并且如何安全拍摄。效果如图：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eaglefantasy.com/wp-content/uploads/bomb1.png"&gt;&lt;img title="bomb1" src="http://www.eaglefantasy.com/wp-content/uploads/bomb1-300x174.png" alt="" width="500" height="290"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是我们近代物理课上老师教给我们的方法，现在泄密给大家，保证大家跟着本文看下去一定可以学会，其实并非大家想象的那么困难...&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;.&lt;/p&gt;
&lt;p&gt;第一步：从市场上买足量的菜花回家...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eaglefantasy.com/wp-content/uploads/bomb2.png"&gt;&lt;img title="bomb2" src="http://www.eaglefantasy.com/wp-content/uploads/bomb2-260x300.png" alt="" width="500" height="577"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;中间是一个无色透明的塑料瓶子，在里面塞满小灯泡，然后把菜花都粘在塑料瓶的外面，切记，要粘的密一些不要从外面看到塑料瓶...&lt;/p&gt;
&lt;p&gt;第二步：从市场上买足量的棉花...&lt;/p&gt;
&lt;p&gt;然后搞一根铁丝，把铁丝弯成一个圆形，然后把适量棉花绕在上面，见下图：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eaglefantasy.com/wp-content/uploads/bomb3.png"&gt;&lt;img title="bomb3" src="http://www.eaglefantasy.com/wp-content/uploads/bomb3-300x167.png" alt="" width="500" height="278"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;想办法把棉花绕着的铁丝固定到菜花塑料瓶上方的适当位置...&lt;/p&gt;
&lt;p&gt;第三步：教你如何拍摄...&lt;/p&gt;
&lt;p&gt;把房间里的其他光源全都关掉，只留下塑料瓶里小灯泡的光，就搞定了...效果如图：&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eaglefantasy.com/wp-content/uploads/bomb4.png"&gt;&lt;img title="bomb4" src="http://www.eaglefantasy.com/wp-content/uploads/bomb4-300x217.png" alt="" width="500" height="362"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;现在，你也可以自己在家拍摄原子弹爆炸的照片了~~~&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" border="0" width="100%" style="clear:both"&gt;
    
    &lt;tr&gt;
        &lt;td&gt;&lt;b&gt;&lt;font size="-1" style="display:block!important;padding:20px 0 5px!important"&gt;我猜您也喜欢：&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;
    &lt;/tr&gt;
    
            &lt;tr&gt;
                &lt;td style="margin:0!important;padding:0!important;line-height:20px!important"&gt;
                    &lt;img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif"&gt;
                    &lt;a style="text-decoration:none!important" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F811&amp;amp;from=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F974"&gt;
                        &lt;font size="-1" style="line-height:1.65em;font-size:12px!important"&gt;xkcd上的一些搞笑geek漫画&lt;/font&gt;
                    &lt;/a&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td style="margin:0!important;padding:0!important;line-height:20px!important"&gt;
                    &lt;img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif"&gt;
                    &lt;a style="text-decoration:none!important" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F884&amp;amp;from=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F974"&gt;
                        &lt;font size="-1" style="line-height:1.65em;font-size:12px!important"&gt;Gomboc到手~&lt;/font&gt;
                    &lt;/a&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td style="margin:0!important;padding:0!important;line-height:20px!important"&gt;
                    &lt;img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif"&gt;
                    &lt;a style="text-decoration:none!important" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F299&amp;amp;from=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F974"&gt;
                        &lt;font size="-1" style="line-height:1.65em;font-size:12px!important"&gt;高中最后的运动会&lt;/font&gt;
                    &lt;/a&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td style="margin:0!important;padding:0!important;line-height:20px!important"&gt;
                    &lt;img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif"&gt;
                    &lt;a style="text-decoration:none!important" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F1039&amp;amp;from=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F974"&gt;
                        &lt;font size="-1" style="line-height:1.65em;font-size:12px!important"&gt;再次转载我的人人网状态&lt;/font&gt;
                    &lt;/a&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr&gt;
                &lt;td style="margin:0!important;padding:0!important;line-height:20px!important"&gt;
                    &lt;img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif"&gt;
                    &lt;a style="text-decoration:none!important" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F896&amp;amp;from=http%3A%2F%2Fwww.eaglefantasy.com%2Farchives%2F974"&gt;
                        &lt;font size="-1" style="line-height:1.65em;font-size:12px!important"&gt;几个突发奇想&lt;/font&gt;
                    &lt;/a&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
    
    &lt;tr&gt;
        &lt;td align="right"&gt;
            &lt;a style="text-decoration:none!important" href="http://www.wumii.com/widget/relatedItems.htm" title="无觅相关文章插件"&gt;
                &lt;font size="-1" color="#bbbbbb" style="display:block!important;font-family:arial!important;padding:5px 0!important;font-size:12px!important;color:#bbb!important"&gt;无觅&lt;/font&gt;
            &lt;/a&gt;
        &lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;&lt;img src="http://www1.feedsky.com/t1/490089602/eaglefantasy/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/eaglefantasy/~8062055/490089602/4862299/1/item.html" border="0" height="0" width="0"&gt;&lt;p&gt;&lt;a href="http://www1.feedsky.com/r/l/feedsky/eaglefantasy/490089602/art01.html"&gt;&lt;img border="0" ismap src="http://www1.feedsky.com/r/i/feedsky/eaglefantasy/490089602/art01.gif"&gt;&lt;/a&gt;&lt;/p&gt;</content><author><name>Eagle Fantasy</name></author><source gr:stream-id="feed/http://feed.feedsky.com/eaglefantasy"><id>tag:google.com,2005:reader/feed/http://feed.feedsky.com/eaglefantasy</id><title type="html">宇宙的心弦</title><link rel="alternate" href="http://www.eaglefantasy.com" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293344895762"><id gr:original-id="http://www.oualline.com/practical.programmer/cpm.html">tag:google.com,2005:reader/item/7753ea76562a62e5</id><title type="html">Windows-NT vs. CP/M</title><published>2010-12-26T06:28:15Z</published><updated>2010-12-26T06:28:15Z</updated><link rel="alternate" href="http://www.oualline.com/practical.programmer/cpm.html" type="text/html"/><summary xml:base="http://news.ycombinator.com/" type="html">&lt;div&gt;
	

	&lt;p&gt;
	Microsoft has come out with a number of benchmarks
	and comparison papers championing the fact that
	Windows-NT is much better than Linux.  I find such
	comparisons fascinating, but rather than rehash
	this argument, I've decided to create my own 
	comparison.  Not of Windows-NT vs. Linux, that's been
	done.  But of Windows-NT vs. CP/M.

	&lt;/p&gt;&lt;p&gt;
	CP/M for those of you who don't remember was one of the
	first portable operating systems.  It ran on 8 bit 8080 
	class hardware, and was a single user, floppy based system.
	(Later versions actually could access a hard drive.)

	&lt;/p&gt;&lt;p&gt;
	Two systems were selected for this comparison.  The CP/M
	system is a Kaypro-II running a 2MHZ Z80, with 64K of
	memory and dual 360K 5-1/4 floppies.  The Windows-NT system
	runs quad 500 MHZ Pentium Processors, with 2GB of memory
	and 1TB of disk space.  This particular configuration
	was chosen because Microsoft seems to like to use 
	a system like this for all its benchmark comparisons.

	&lt;/p&gt;

	&lt;p&gt;
	Performance is one key issue in any comparison.  I do
	a lot of writing, so word processing performance is
	extremely important to me.  The CP/M system with Word*
	and after a 15 second boot Word*
	let me write documents as fast as I could type.  
	In my two minute test, I could enter about 210 words.

	&lt;/p&gt;&lt;p&gt;
	The Windows-NT system running Microsoft Word also 
	could accept input as fast as I could type, but it
	took a whole minute to boot up.  Thus I could enter
	only 120 words in my test.  So we can conclude that
	CM/P is 75% faster than Windows-NT for word processing.

	&lt;/p&gt;&lt;p&gt;
	Let's talk about spreadsheet performance.  CP/M with
	Calc* will balance my checkbook just as fast as I can
	input the data.  Counting the boot time, that means
	that I can enter about 17 transaction in a two minute
	test.   With Windows-NT with Excel, I get only 10 transactions
	a second.  
	So as far as spreadsheet performance goes, CP/M is
	70% faster than Windows-NT.

	&lt;/p&gt;&lt;p&gt;&lt;i&gt;Conclusion: CP/M provides superior overall performance
	    for common office applications.&lt;/i&gt;

	&lt;/p&gt;

	&lt;p&gt;
	CP/M is an extremely secure system.  It relies on the physical
	security methodology.  You store the operating systems, programs,
	and private date on 5-1/4" floppies.  You want to use them, 
	put them in the machine.  No one can get to your data from the
	outside through a network because CP/M has no network.  You want
	to secure your data, take the floppies out and lock them up.
	Want to share data, hand the floppies to another person.  
	Note: This security method allows the user a wide variety 
	of personal authentication schemes such as drivers license,
	passport, or personal friend know to you.

	&lt;/p&gt;&lt;p&gt;
	What's even better since we are running on a two floppy system,
	we can put our software on one floppy and the data on the other.
	The software floppy can be write protected, and nothing we 
	do can change any of those files.

	&lt;/p&gt;&lt;p&gt;
	Windows-NT relies on file system security and passwords.
	There have been lots of studies about the weaknesses of 
	passwords.  Any system that relies passwords in insecure.
	In addition Windows-NT contains a tremendous security
	hole called the Administrator account.  Anyone logged in 
	to this account can easily read and write all your files.

	&lt;/p&gt;&lt;p&gt;
	Add to that that Windows-NT connects to a network and allows
	remote access and you have big security problems.  There have
	been hundreds of reported security problems reported for
	Windows-NT such as viruses, E-Mail viruses, break ins,
	denial of service attacks, and many others.  None of these
	problems have affected CP/M.

	&lt;/p&gt;&lt;p&gt;
	Plus Microsoft relies on operating system file protection to 
	keep you from modifying system files.  This means that you must know
	what files to protect and rely on software to provide your protection.
	Hardware protection is much easier to configure and provides much more
	reliable protection.  Windows-NT makes no use of hardware protection for
	system files.

	&lt;/p&gt;&lt;p&gt;
	Microsoft likes to trumpet the fact that Windows-NT is 
	certified by the government for C3 security.  What they 
	leave out is that that was only for a certain version
	of Windows-NT (which they no longer support) and a 
	certain hardware configuration (which had no network
	card.)  In the real world, a typical Windows-NT 
	installation would never come close to getting C3
	certification.

	&lt;/p&gt;&lt;p&gt;
	CP/M however could easily be certified.  It has 
	a very secure network because it has no network
	capability.  It also has set of keys that you can
	press that return you to the "secure command server".
	(It's called the reset button.)  These are the big
	features of C3 security and CP/M has them.  The reason
	that it does not have C3 certification is that no one
	wants to pay the big bucks to get it certified.

	&lt;/p&gt;&lt;p&gt;&lt;i&gt;Conclusion: The security of CP/M is vastly superior
	    to Windows-NT.&lt;/i&gt;

	&lt;/p&gt;

	&lt;p&gt;
	As far as I know the CP/M system for my Kaypro has
	not needed an upgrade or patch for the past ten years.
	Also the operating system has no reported bugs that 
	can crash it.  It is small, simple and very stable.

	&lt;/p&gt;&lt;p&gt;
	During that time Microsoft has two major release of 
	Window-NT, at least 5 service packs and is planning on
	replacing the system with a new version next year.
	In addition to this there are a large number of bugs 
	out there that Microsoft has yet to fix.  Many companies
	reboot their Windows-NT systems weekly to avoid 
	system crashes that come when you leave Windows-NT running
	for too long.

	&lt;/p&gt;&lt;p&gt;&lt;i&gt;Conclusion: CP/M is much more stable than
	    Windows-NT.&lt;/i&gt;


	&lt;/p&gt;

	&lt;p&gt;
	You can probably pick up a Kaypro-II with CP/M, Word* and Calc*
	at a garage sale for about $10.  Or you can go to an auction site
	and pick one up for about $100-$200.  

	&lt;/p&gt;&lt;p&gt;
	On the other hand a Window-NT system in the configuration
	that Microsoft likes to use for benchmarking will probably
	cost you about $100,000.  This includes the price of the
	hardware, software, and the cost of hiring a team
	of Microsoft Engineers for three months to tune your system
	for optimal performance.

	&lt;/p&gt;&lt;p&gt;
	&lt;i&gt;Conclusion: The cost of ownership of CP/M is much, much
	    lower than Windows-NT.&lt;/i&gt;

	&lt;/p&gt;

	&lt;p&gt;
	But let's talk about real world experience.  CP/M has hundreds
	of customer testimonials all describing how useful and easy
	to use this operating system is, while Microsoft Windows-NT
	is only able to provide anecdotal evidence.  

	&lt;/p&gt;&lt;p&gt;
	Note: We are
	use the definition of these terms as defined by Microsoft
	Marketing.
	&lt;/p&gt;&lt;blockquote&gt;
	    &lt;table&gt;&lt;tr&gt;&lt;td&gt;Customer Testimonials&lt;/td&gt;&lt;td&gt;
			Stories about how well the operating system works for the 
			operating system you like.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Anecdotal Evidence&lt;/td&gt;&lt;td&gt;
			Stories about how well the operating system works for the 
			operating system you don't like.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;

	&lt;p&gt;
	&lt;i&gt;Conclusion:
	    Since CP/M has Customer Testimonials and Windows-NT has only
	    Anecdotal Evidence, we must conclude that CP/M is vastly better.
	&lt;/i&gt;

	&lt;/p&gt;
	&lt;p&gt;
	These results show that in every comparison category that CP/M
	is at least as good as Windows-NT and frequently outperform
	the Microsoft operating system.

	&lt;/p&gt;&lt;p&gt;
	Another conclusion we can draw from this is that if you come 
	up with the answer, a good writer can come up with a question
	that produces the desired result.  Comparisons like this one
	should always be scrutinized for relevance and bias before
	you put any faith into them.

	&lt;/p&gt;&lt;p&gt;
	Coming soon, we will compare a Windows-NT system vs. a brick.
	I'm not going to give away the ending, but I'm going to bet
	that the brick will win.
&lt;/p&gt;&lt;/div&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20"><id>tag:google.com,2005:reader/feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20</id><title type="html">Hacker News</title><link rel="alternate" href="http://news.ycombinator.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293229746883"><id gr:original-id="http://www.smashingmagazine.com/2010/12/23/free-icon-set-for-web-developers-coded/">tag:google.com,2005:reader/item/69294085504b15f9</id><title type="html">Free Icon Set for Web Developers: Coded</title><published>2010-12-24T22:29:06Z</published><updated>2010-12-24T22:29:06Z</updated><link rel="alternate" href="http://www.smashingmagazine.com/2010/12/23/free-icon-set-for-web-developers-coded/" type="text/html"/><summary xml:base="http://news.ycombinator.com/" type="html">&lt;div&gt;&lt;p&gt;Today we’re excited to present you a new icon set called &lt;strong&gt;Coded&lt;/strong&gt;. Designed with web developers in mind, &lt;em&gt;Coded&lt;/em&gt; features 25 high-quality icons ranging from 512×512px to 32×32px. Designed by Thomas McGee of &lt;a href="http://www.winepressofwords.com/"&gt;WinePress of Words&lt;/a&gt;, this set has been released exclusively for Smashing Magazine and its readers.&lt;/p&gt;&lt;p&gt;&lt;a href="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/12/coded_complete_list.jpg"&gt;&lt;img src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/12/coded_display.jpg" alt="Coded Display in Free Icon Set for Web Developers: Coded" width="500" height="501"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The &lt;em&gt;Coded Icon Set&lt;/em&gt; makes an excellent addition to any website, especially those inspired by the trade of web development. Perfect for your next client’s site or for showcasing your own web development — these icons are useful for every coder.&lt;/p&gt;&lt;h4&gt;Download the Icon Set for Free!&lt;/h4&gt;&lt;p&gt;You can use the set for all of your projects for free and without any restrictions. You can freely use it for both your private and commercial projects, including software, online services, templates and themes. The set may not be resold, sub-licensed or rented. Please &lt;strong&gt;link to this article&lt;/strong&gt; if you want to spread the word.&lt;/p&gt;&lt;p&gt;&lt;a href="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/12/coded_complete_list.jpg"&gt;&lt;img src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/12/coded_complete_list.jpg" alt="Coded Complete List in Free Icon Set for Web Developers: Coded" width="500" height="875"&gt;&lt;/a&gt;&lt;/p&gt;&lt;h4&gt;Behind the Design&lt;/h4&gt;&lt;p&gt;Here are some insights from the designer:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“Coders and developers have unique responsibilities throughout each work week. From implementing client ideas, to expanding and coding personal endeavors, there’s much work to do at any walk of a web developer’s career. With this, there are tools a developer uses and trusts through these daily challenges. Inspired by such tools and the tasks they help tackle, this set has been crafted to fit the commonly used files, formats, and resources coders of any kind have come to rely. Whether used on your next client’s site, or for accenting your own coding ventures, we’re confident this free icon set will make an excellent addition to your library. Enjoy!”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Thanks, Thomas! We truly appreciate and respect your time and your efforts!&lt;/p&gt;&lt;p&gt;&lt;img src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/12/coded-large-view.jpg" alt="Coded-large-view in Free Icon Set for Web Developers: Coded" width="500" height="593"&gt;&lt;/p&gt;&lt;a href="http://twitter.com/share?count=horizontal&amp;amp;url=http%3A%2F%2Fwww.smashingmagazine.com%2F2010%2F12%2F23%2Ffree-icon-set-for-web-developers-coded%2F&amp;amp;via=smashingmag&amp;amp;text=Free%20Icon%20Set%20for%20Web%20Developers%3A%20Coded"&gt;Tweet&lt;/a&gt;&lt;br&gt;&lt;/div&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20"><id>tag:google.com,2005:reader/feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20</id><title type="html">Hacker News</title><link rel="alternate" href="http://news.ycombinator.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293229725730"><id gr:original-id="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms">tag:google.com,2005:reader/item/4e33da5cf5b154e9</id><title type="html">Pixel Art Scaling Algorithms</title><published>2010-12-24T22:28:45Z</published><updated>2010-12-24T22:28:45Z</updated><link rel="alternate" href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms" type="text/html"/><summary xml:base="http://news.ycombinator.com/" type="html">&lt;div&gt;
				
				&lt;p&gt;From Wikipedia, the free encyclopedia&lt;/p&gt;
				
				
				
				
																
				
				
								
				&lt;div&gt;
&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/File:2xsai_example.png"&gt;&lt;img alt="" src="http://upload.wikimedia.org/wikipedia/commons/e/e9/2xsai_example.png" width="256" height="128"&gt;&lt;/a&gt;
&lt;p&gt;An image scaled with nearest-neighbor scaling (left) and 2×SaI scaling (right).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Pixel art scaling algorithms&lt;/b&gt; are &lt;a href="http://en.wikipedia.org/wiki/Image_scaling" title="Image scaling"&gt;image scaling&lt;/a&gt; algorithms specifically designed to &lt;a href="http://en.wikipedia.org/wiki/Upsample" title="Upsample"&gt;upsample&lt;/a&gt; (enlarge) low-resolution &lt;a href="http://en.wikipedia.org/wiki/Pixel_art" title="Pixel art"&gt;pixel&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Line_art" title="Line art"&gt;line art&lt;/a&gt; that contains thin lines, solid areas of colour rather than gradient fills or shading, and has not been &lt;a href="http://en.wikipedia.org/wiki/Anti-aliasing" title="Anti-aliasing"&gt;anti-aliased&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=1" title="Edit section: Motivation"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Motivation&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Two standard scaling algorithms are &lt;a href="http://en.wikipedia.org/wiki/Bilinear_filtering" title="Bilinear filtering"&gt;bilinear&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Bicubic_interpolation" title="Bicubic interpolation"&gt;bicubic interpolation&lt;/a&gt;. Since they work by interpolating pixel colour values, and usually set each pixel to a value interpolated between four input pixel values, they introduce some blur into the output (a form of &lt;a href="http://en.wikipedia.org/wiki/Box_blur" title="Box blur"&gt;box blur&lt;/a&gt;). Although this is acceptable for continuous-tone images, it destroys &lt;a href="http://en.wikipedia.org/wiki/Display_contrast" title="Display contrast"&gt;contrast&lt;/a&gt; (sharp edges) and is often seen as ruining the appearance of line art.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation" title="Nearest-neighbor interpolation"&gt;Nearest-neighbor interpolation&lt;/a&gt; preserves these sharp edges, but it introduces &lt;a href="http://en.wikipedia.org/wiki/Aliasing" title="Aliasing"&gt;aliasing&lt;/a&gt; (or &lt;a href="http://en.wikipedia.org/wiki/Jaggies" title="Jaggies"&gt;jaggies&lt;/a&gt;; where diagonal lines and curves appear pixelated). Thus, the ideal algorithm for enlarging line art would be one that would interpolate areas of continuous tone, preserve the sharpness of orthogonal lines and smooth (ideally with anti-aliasing) diagonal lines and curves. Several attempts have been made to accomplish this.&lt;/p&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=2" title="Edit section: Efficiency"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Efficiency&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Since a typical application of this technology is improving the appearance of &lt;a href="http://en.wikipedia.org/wiki/History_of_video_game_consoles_(fourth_generation)" title="History of video game consoles (fourth generation)"&gt;fourth-generation&lt;/a&gt; and earlier &lt;a href="http://en.wikipedia.org/wiki/Video_game" title="Video game"&gt;video games&lt;/a&gt; on &lt;a href="http://en.wikipedia.org/wiki/Arcade_emulator" title="Arcade emulator"&gt;arcade&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Console_emulator" title="Console emulator"&gt;console emulators&lt;/a&gt;, many are designed to run in real time for sufficiently small input images.&lt;/p&gt;
&lt;p&gt;Many work only on specific scale factors: 2× is the most common, with 3× and 4× also present.&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=3" title="Edit section: Algorithms"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Algorithms&lt;/span&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=4" title="Edit section: EPX/Scale2×/AdvMAME2×"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;EPX/Scale2×/AdvMAME2×&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Eric's Pixel Expansion (EPX) is an algorithm developed by Eric Johnston at &lt;a href="http://en.wikipedia.org/wiki/LucasArts" title="LucasArts"&gt;LucasArts&lt;/a&gt; around 1992&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-epx_screenshot-0"&gt;&lt;span&gt;[&lt;/span&gt;1&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;, when porting the &lt;a href="http://en.wikipedia.org/wiki/SCUMM" title="SCUMM"&gt;SCUMM&lt;/a&gt; engine games from the IBM PC (which ran at 320×200×256 colors) to the early color Macintosh computers, which ran at more or less double that resolution.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-mactech-1"&gt;&lt;span&gt;[&lt;/span&gt;2&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; The algorithm works as follows:&lt;/p&gt;
&lt;pre&gt;
  A    --\ 1 2
C P B  --/ 3 4
  D 
 IF C==A =&amp;gt; 1=A
 IF A==B =&amp;gt; 2=B
 IF B==D =&amp;gt; 4=D
 IF D==C =&amp;gt; 3=C
 IF of A, B, C, D, 3 or more are identical: 1=2=3=4=P
&lt;/pre&gt;
&lt;p&gt;Later implementations of this same algorithm (as AdvMAME2× and Scale2×, developed around 2001) have a slightly more efficient but functionally identical implementation:&lt;/p&gt;
&lt;pre&gt;
  A    --\ 1 2
C P B  --/ 3 4
  D 
 1=P; 2=P; 3=P; 4=P;
 IF C==A AND C!=D AND A!=B =&amp;gt; 1=A
 IF A==B AND A!=C AND B!=D =&amp;gt; 2=B
 IF B==D AND B!=A AND D!=C =&amp;gt; 4=D
 IF D==C AND D!=B AND C!=A =&amp;gt; 3=C
&lt;/pre&gt;
&lt;p&gt;The AdvMAME4×/Scale4× algorithm is just EPX applied twice to get 4× resolution.&lt;/p&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=5" title="Edit section: Scale3×/AdvMAME3×"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Scale3×/AdvMAME3×&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;The AdvMAME3×/Scale3× algorithm is not the same as EPX, but is similar in a mathematical sense.&lt;/p&gt;
&lt;pre&gt;
A B C --\  1 2 3
D E F    &amp;gt; 4 5 6
G H I --/  7 8 9
 1=E; 2=E; 3=E; 4=E; 5=E; 6=E; 7=E; 8=E; 9=E;
 IF D==B AND D!=H AND B!=F =&amp;gt; 1=D
 IF (D==B AND D!=H AND B!=F AND E!=C) OR (B==F AND B!=D AND F!=H AND E!=A) =&amp;gt; 2=B
 IF B==F AND B!=D AND F!=H =&amp;gt; 3=F
 IF (H==D AND H!=F AND D!=B AND E!=A) OR (D==B AND D!=H AND B!=F AND E!=G) =&amp;gt; 4=D
 5=E
 IF (B==F AND B!=D AND F!=H AND E!=I) OR (F==H AND F!=B AND H!=D AND E!=C) =&amp;gt; 6=F
 IF H==D AND H!=F AND D!=B =&amp;gt; 7=D
 IF (F==H AND F!=B AND H!=D AND E!=G) OR (H==D AND H!=F AND D!=B AND E!=I) =&amp;gt; 8=H
 IF F==H AND F!=B AND H!=D =&amp;gt; 9=F
&lt;/pre&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=6" title="Edit section: Eagle"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Eagle&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;div&gt;Eagle works as follows: for every in pixel we will generate 4 out pixels, first, set all 4 to the colour of the in pixel we are currently scaling (like nearest-neighbor), next lets look at the pixels up and to the left, if they are the same colour as each other set the top left pixel to that colour, continue doing the same for all four pixels, and then move to the next one.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-2"&gt;&lt;span&gt;[&lt;/span&gt;3&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;p&gt;Assume an input matrix of 3×3 pixels where the center most pixel is the pixel to be scaled, and an output matrix of 2×2 pixels (i.e., the scaled pixel)&lt;/p&gt;
&lt;pre&gt;
first:        |Then 
. . . --\ CC  |S T U  --\ 1 2
. C . --/ CC  |V C W  --/ 3 4
. . .         |X Y Z
              | IF V==S==T =&amp;gt; 1=S
              | IF T==U==W =&amp;gt; 2=U
              | IF V==X==Y =&amp;gt; 3=X
              | IF W==Z==Y =&amp;gt; 4=Z
&lt;/pre&gt;
&lt;p&gt;Thus if we have a black pixel on a white background it will vanish. This is a bug in the Eagle algorithm, but is solved by its successors such as 2xSaI and HQ3x.&lt;/p&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=7" title="Edit section: 2×SaI"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;2×SaI&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;2×SaI, short for 2× Scale and Interpolation engine, was inspired by Eagle. It was designed by Derek Liauw Kie Fa, also known as Kreed, primarily for use in console and computer &lt;a href="http://en.wikipedia.org/wiki/Emulator" title="Emulator"&gt;emulators&lt;/a&gt;, and it has remained fairly popular in this niche. Many of the most popular emulators, including &lt;a href="http://en.wikipedia.org/wiki/ZSNES" title="ZSNES"&gt;ZSNES&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/VisualBoyAdvance" title="VisualBoyAdvance"&gt;VisualBoyAdvance&lt;/a&gt;, offer this scaling algorithm as a feature.&lt;/p&gt;
&lt;p&gt;Since Kreed released&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-3"&gt;&lt;span&gt;[&lt;/span&gt;4&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt; the source code under the &lt;a href="http://en.wikipedia.org/wiki/GNU_General_Public_License" title="GNU General Public License"&gt;GNU General Public License&lt;/a&gt;, it is freely available to anyone wishing to utilize it in a project released under that license. Developers wishing to use it in a non-GPL project would be required to rewrite the algorithm without using any of Kreed's existing code.&lt;/p&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=8" title="Edit section: Super 2×SaI and Super Eagle"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Super 2×SaI and Super Eagle&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Super2xSaI-matrix.svg"&gt;&lt;img alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/33/Super2xSaI-matrix.svg/129px-Super2xSaI-matrix.svg.png" width="129" height="129"&gt;&lt;/a&gt;
&lt;p&gt;The matrix of surrounding pixels that Super2xSaI uses to scale a single pixel.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Several slightly different versions of the scaling algorithm are available, and these are often referred to as &lt;i&gt;Super 2×SaI&lt;/i&gt;, &lt;i&gt;2×SaI&lt;/i&gt;, and &lt;i&gt;Super Eagle&lt;/i&gt;. Super Eagle which is also written by Kreed, is similar to the 2×SaI engine, but does more blending. Super 2×SaI which is also written by Kreed is a filter which smooths the graphics, but it blends more than the Super Eagle engine.&lt;/p&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=9" title="Edit section: hqnx family"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;hq&lt;i&gt;n&lt;/i&gt;x family&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;Maxim Stepin's hq2x, hq3x and hq4x are for scale factors of 2:1, 3:1 and 4:1 respectively. Each works by comparing the colour value of each pixel to those of its eight immediate neighbours, marking the neighbours as close or distant, and using a pregenerated lookup table to find the proper proportion of input pixels' values for each of the 4, 9 or 16 corresponding output pixels. The hq3x family will perfectly smooth any diagonal line whose slope is ±0.5, ±1, or ±2 and which is not anti-aliased in the input; one with any other slope will alternate between two slopes in the output. It will also smooth very tight curves. Unlike 2xSaI, it anti-aliases the output.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-4"&gt;&lt;span&gt;[&lt;/span&gt;5&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;



&lt;p&gt;hq&lt;i&gt;n&lt;/i&gt;x was initially created for the Super Nintendo emulator &lt;a href="http://en.wikipedia.org/wiki/ZSNES" title="ZSNES"&gt;ZSNES&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=10" title="Edit section: RotSprite"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;RotSprite&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;RotSprite is a scaling and rotation algorithm for sprites developed by Xenowhirl. It produces far fewer artifacts than nearest-neighbor rotation algorithms, and does not interpolate or anti-alias, so it does not introduce new colors into the image.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-5"&gt;&lt;span&gt;[&lt;/span&gt;6&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The algorithm first scales the image to 8 times its original size with a modified Scale2x algorithm which treats similar (rather than identical) pixels as matches. It then calculates what rotation offset to use by favoring sampled points which are not boundary pixels. Next, the rotated image is created with a nearest-neighbor scaling and rotation algorithm that simultaneously shrinks the big image back to its original size and rotates the image. Finally, overlooked single-pixel details are restored if the corresponding pixel in the source image is different and the destination pixel has three identical neighbors.&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Pixel_art_scaling_algorithms#cite_note-6"&gt;&lt;span&gt;[&lt;/span&gt;7&lt;span&gt;]&lt;/span&gt;&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=11" title="Edit section: Applications to arcade and console emulators"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;Applications to arcade and console emulators&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;On sufficiently fast hardware, these algorithms are suitable for gaming and other real-time image processing software. These highly optimized algorithms provide sharp, crisp graphics while minimizing blur. Scaling art algorithms have been implemented in a wide range of emulators, 2D &lt;a href="http://en.wikipedia.org/wiki/Game_engine" title="Game engine"&gt;game engines&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Game_engine_recreation" title="Game engine recreation"&gt;game engine recreations&lt;/a&gt; like &lt;a href="http://en.wikipedia.org/wiki/AdvanceMAME" title="AdvanceMAME"&gt;AdvanceMAME&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/DOSBox" title="DOSBox"&gt;DOSBox&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/ScummVM" title="ScummVM"&gt;ScummVM&lt;/a&gt;. They have gained wide recognition with gamers, with whom these technologies have encouraged a revival of '80s and '90s gaming experiences.&lt;/p&gt;
&lt;p&gt;Such filters are currently used in commercial emulators on &lt;a href="http://en.wikipedia.org/wiki/Xbox_Live" title="Xbox Live"&gt;Xbox Live&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Virtual_Console" title="Virtual Console"&gt;Virtual Console&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/PlayStation_Network" title="PlayStation Network"&gt;PSN&lt;/a&gt; to allow classic low resolution games to be more visually appealing on modern &lt;a href="http://en.wikipedia.org/wiki/High-definition_video" title="High-definition video"&gt;HD&lt;/a&gt; displays. Recently released games that incorporate these filters include &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Sonic%27s_Ultimate_Genesis_Collection" title="Sonic&amp;#39;s Ultimate Genesis Collection"&gt;Sonic's Ultimate Genesis Collection&lt;/a&gt;&lt;/i&gt;, &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Castlevania:_The_Dracula_X_Chronicles" title="Castlevania: The Dracula X Chronicles"&gt;Castlevania: The Dracula X Chronicles&lt;/a&gt;&lt;/i&gt;, &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Castlevania:_Symphony_of_the_Night" title="Castlevania: Symphony of the Night"&gt;Castlevania: Symphony of the Night&lt;/a&gt;&lt;/i&gt;, and &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Akumaj%C5%8D_Dracula_X_Chi_no_Rondo" title="Akumajō Dracula X Chi no Rondo"&gt;Akumajō Dracula X Chi no Rondo&lt;/a&gt;&lt;/i&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=12" title="Edit section: References"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;References&lt;/span&gt;&lt;/h2&gt;

&lt;h2&gt;&lt;span&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Pixel_art_scaling_algorithms&amp;amp;action=edit&amp;amp;section=13" title="Edit section: External links"&gt;edit&lt;/a&gt;]&lt;/span&gt; &lt;span&gt;External links&lt;/span&gt;&lt;/h2&gt;

				
								
								
												
			&lt;/div&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20"><id>tag:google.com,2005:reader/feed/http://rss.rookee.net/makefulltextfeed.php?url=http://news.ycombinator.com/rss&amp;max=20</id><title type="html">Hacker News</title><link rel="alternate" href="http://news.ycombinator.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293229589455"><id gr:original-id="tag:blogger.com,1999:blog-6309946718175890735.post-2461572930652552957">tag:google.com,2005:reader/item/d28516955c6d2c66</id><title type="html">Merry Quine-mas 2010</title><published>2010-12-23T10:04:00Z</published><updated>2010-12-24T14:42:45Z</updated><link rel="alternate" href="http://mamememo.blogspot.com/2010/12/merry-quine-mas-2010.html" type="text/html"/><link rel="replies" href="http://mamememo.blogspot.com/feeds/2461572930652552957/comments/default" title="Post Comments" type="application/atom+xml"/><link rel="replies" href="http://mamememo.blogspot.com/2010/12/merry-quine-mas-2010.html#comment-form" title="2 Comments" type="text/html"/><content xml:base="http://mamememo.blogspot.com/" type="html">&lt;p&gt;Tonight is the eve of the anniversary of &lt;a href="http://en.wikipedia.org/wiki/W._V._Quine"&gt;W. V. Quine&lt;/a&gt;'s death. (in Japanese time zone :-)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; %;&amp;#39;;;X=   %q(x=1;                                                     z=&amp;quot;%c&amp;quot;%
 32;eval   %w(w=N=                   Merry                             =128;r=
 z*79+$/; ;p=open&amp;quot;                  /                                  dev/dsp
  &amp;quot;,&amp;quot;w&amp;quot;rescue$_;/                  /                                   ;eval&amp;quot;s
   rand(%s)&amp;quot;%$*[    d=0];a=[];s=(r+z+%    (%;&amp;#39;;;X=#{z*    3}%q(#{X});e val(X))
     +r*=23).l      ines.map{|l|l.chop+  r};t=proc{|y|s  [y][x-1,w].sca n(/\S
   /){s[y+1][m=x    -1+$`  .size  ,1]==           z&amp;amp;&amp;amp;a&amp;lt;  &amp;lt;[$&amp;amp;,m,        y,s[y
  ][m]=$/]};y};t[   23];f  =(0..  1071)   .map{|i|c,x,y   =a.shuffle!.  pop;s
 [y][x]=z ;[794-46  .03*i  **0.4  +y/k=  (3+ra    nd*w=          3)/9,[t
 [t[y]-1   ],x,c],  (0..y  /k).m  ap{[y  -=k,0.5+x+=k*r  and*2-k,?*]}]} ;&amp;quot;|ii
 xCG40_|   CK8&amp;amp;d9B  ix0,B  J?B?G  ^K9CG   CJ|ii&amp;gt;Ci?9CV;   =*-*.sEA.2gA  w&amp;gt;dc=
  :     `:z:J&amp;gt;      s      9QvA:&amp;gt;      J      taaA&amp;gt;`      :      @AP;Fa     c
  y   =Anm|?Bdqr    h    ?&amp;lt;CDJCD&amp;lt;IU    &amp;lt;    DuCJ&amp;gt;:d_C?    h    ?&amp;lt;CWC:&amp;#39;.&amp;#39;+   r
  9  A.*. &amp;#39;&amp;gt;| =*-   *   .:9i 9A&amp;gt; :JC   s   :Q&amp;gt; :&amp;gt;9 CJA=   g   `;C i9A &amp;gt;M&amp;quot;.  b
 yt  es{|c|a+=([%  [+.  5$2-&amp;#39;30&amp;amp;)&amp;quot;/:  (7%  !*][c%19].or  d]*  [47,23,11][4  -c
 /1   9]&amp;lt;     &amp;lt;3   3).   *c/     95   +1}   ;$     &amp;gt;&amp;lt;&amp;lt;   (T=   &amp;quot;%     q\x   7e
  &amp;#39;    #{e=&amp;quot;\x1    b [    &amp;quot;}H#{e}J    # {    e}?25&amp;quot;)+    &amp;quot; l    &amp;quot;;863.do    w
   n to(0){|i|b=r +   [ &amp;quot;&amp;#39;&amp;quot;*25]*2*&amp;quot;_ (   c )_2010_@mame t   t er,@hirekoke &amp;quot;
    ;f.map{ |j,x,v     |i&amp;lt;j&amp;amp;&amp;amp;( y,x,c=     v.pop| |x;x&amp;lt;0|     |x&amp;gt;78| |b[x+y.
   to_i*80]=0&amp;lt;i&amp;amp;&amp;amp;i&amp;lt;   40??#:c)};($&amp;gt;&amp;lt;&amp;lt;(   i&amp;gt;0?e+&amp;quot;H&amp;quot;:T+&amp;quot;h&amp;quot;)   +b).flush;(p)?4.
   times{N. times{v   =8;4.tim es{|l|t   =a[l*N* 9+d/N%11   52];t&amp;gt;3 3&amp;amp;&amp;amp;v+=(d
    *0.11*4**(t/24     .0-l%3))%8&amp;lt;=&amp;gt;4     };d+=1;p&amp;lt;&amp;lt;[16*     v].pack(&amp;quot;C*&amp;quot;)}
      ;p.flush}:         sleep(0.1)         };puts)*&amp;quot;&amp;quot;         ;);eval(X)
&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;_(c)_2010_@mametter,@hirekoke&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Save the code as "quinemas2010.rb" and run it under an terminal bigger than 80 x 24.  You can use cygwin if you're a windows user.  You may need to use "aoss" or "padsp" if you're using Un*x.  I tested it with ruby 1.8.7p299 and 1.9.2p0.&lt;/p&gt;

&lt;p&gt;A screencast for you guys who are lazy:&lt;/p&gt;

&lt;p&gt;&lt;iframe src="http://reader.googleusercontent.com/reader/embediframe?src=http://www.youtube.com/v/r0eaf9iLKxg?fs%3D1%26hl%3Dja_JP&amp;amp;width=480&amp;amp;height=385" width="480" height="385"&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;h2&gt;FAQ&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Q. Is this a &lt;em&gt;pseudo&lt;/em&gt;-Quine because its output is not strictly equal to the code?
&lt;ul&gt;&lt;li&gt;A. Yes.  This is a Quine generator.  Run it as follows.  You'll find tmp1.rb is certainly a Quine.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;$ ruby quinemas2010.rb 0 &amp;gt; tmp1.rb
$ ruby tmp1.rb 0 &amp;gt; tmp2.rb
$ diff tmp1.rb tmp2.rb&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Q. What does the command line argument mean?&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;A. A random seed which affects how to snow.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Q. How does it animate?&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;A. It just prints each frame with the aid of escape sequence.  Because it uses only &lt;a href="http://en.wikipedia.org/wiki/ANSI_escape_code"&gt;ANSI escape code&lt;/a&gt;, it works on almost all terminal emulator (but not cmd.exe).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Q. How does it play a sound?&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;A. It writes a sound wave directly to /dev/dsp (see &lt;a href="http://en.wikipedia.org/wiki/Open_Sound_System"&gt;Open Sound System&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;translated from &lt;a href="http://d.hatena.ne.jp/ku-ma-me/20101224/p1"&gt;mamememo in Japanese (2010-12-24)&lt;/a&gt;.&lt;/p&gt;

&lt;div&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/6309946718175890735-2461572930652552957?l=mamememo.blogspot.com" alt=""&gt;&lt;/div&gt;</content><author><name>Yusuke Endoh</name></author><source gr:stream-id="feed/http://mamememo.blogspot.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://mamememo.blogspot.com/feeds/posts/default</id><title type="html">mamememo</title><link rel="alternate" href="http://mamememo.blogspot.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1293190514643"><id gr:original-id="http://xkcd.com/838/">tag:google.com,2005:reader/item/347cdad00b0c622e</id><title type="html">Incident</title><published>2010-12-24T05:00:00Z</published><updated>2010-12-24T05:00:00Z</updated><link rel="alternate" href="http://xkcd.com/838/" type="text/html"/><summary xml:base="http://xkcd.com/" type="html">&lt;img src="http://imgs.xkcd.com/comics/incident.png" title="He sees you when you&amp;#39;re sleeping, he knows when you&amp;#39;re awake, he&amp;#39;s copied on /var/spool/mail/root, so be good for goodness&amp;#39; sake." alt="He sees you when you&amp;#39;re sleeping, he knows when you&amp;#39;re awake, he&amp;#39;s copied on /var/spool/mail/root, so be good for goodness&amp;#39; sake."&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://xkcd.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://xkcd.com/rss.xml</id><title type="html">xkcd.com</title><link rel="alternate" href="http://xkcd.com/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1292988182302"><id gr:original-id="http://royal.pingdom.com/?p=8189">tag:google.com,2005:reader/item/5117bf28e361bbab</id><category term="Main"/><category term="china"/><category term="downtime"/><category term="facebook"/><category term="Foursquare"/><category term="gmail"/><category term="internet"/><category term="networking"/><category term="outage"/><category term="paypal"/><category term="Tumblr"/><category term="twitter"/><category term="website"/><category term="Wikileaks"/><category term="wikipedia"/><category term="wordpress.com"/><title type="html">The major incidents on the Internet in 2010</title><published>2010-12-21T18:41:11Z</published><updated>2010-12-21T18:41:11Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/RoyalPingdom/~3/YWOYzVm5FWw/" type="text/html"/><content xml:base="http://royal.pingdom.com/" type="html">&lt;p&gt;&lt;img alt="Internet Incidents" src="http://farm6.static.flickr.com/5168/5280320877_f91da8a281_o.jpg" title="Internet Incidents" width="580" height="111"&gt;&lt;/p&gt;
&lt;p&gt;In what has become something of a yearly tradition, it’s now time for us to present 10 of the most noteworthy incidents on the Internet from this past year. As you’ll see, 2010 has been very interesting.&lt;/p&gt;
&lt;p&gt;Just like previous years, we have included problems ranging from website outages and service issues to large-scale network interruptions. If you’re an avid Web user, you are bound to recognize several of them. &lt;/p&gt;
&lt;p&gt;Let’s get started! The major incidents on the Internet in 2010 were…&lt;/p&gt;
&lt;h3&gt;Wikipedia’s failover fail&lt;/h3&gt;
&lt;p&gt;Wikipedia has become so ubiquitous that it can’t go down for a minute without people noticing. According to &lt;a href="http://trends.google.com/websites?q=wikipedia.org"&gt;Google Trends for Websites&lt;/a&gt;, the site has roughly 50 million visitors per day.&lt;/p&gt;
&lt;p&gt;In March, when servers in Wikimedia’s European data center overheated and shut down, the service was supposed to fail over to a US data center. Unfortunately, the failover mechanism didn’t work properly and &lt;a href="http://techblog.wikimedia.org/2010/03/global-outage-cooling-failure-and-dns/"&gt;broke the DNS lookups for all of Wikipedia&lt;/a&gt;. This effectively rendered the site unreachable worldwide. It took several hours before everyone could access the site again.&lt;/p&gt;
&lt;h3&gt;WordPress.com’s big-blog crash&lt;/h3&gt;
&lt;p&gt;WordPress.com got a pretty bad start this year when &lt;a href="http://en.blog.wordpress.com/2010/02/19/wp-com-downtime-summary/"&gt;a network issue&lt;/a&gt; caused the biggest outage the service had seen in four years. The outage became extra noticeable not just because of the sheer number of blogs it hosts (at the time 10 million, now many more), but also because so many high-profile blogs use it. The WordPress.com outage took down blogs such as TechCrunch, GigaOM and the Wired blogs for almost two hours in February.&lt;/p&gt;
&lt;h3&gt;Gmail’s multiple outages&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;Gmail is one of the world’s most popular email services, and is an integral part of Google Apps. Unfortunately, it’s had several notable outages this year. These issues haven’t always affected Gmail’s entire user base, but enough of it to make headlines in the news.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;In February, a routine maintenance caused a disruption that &lt;a href="http://gmailblog.blogspot.com/2009/02/update-on-todays-gmail-outage.html"&gt;cascaded from data center to data center&lt;/a&gt;, knocking out Gmail worldwide for about 2.5 hours. In March, Gmail had an issue that lasted as much as &lt;a href="http://www.pcworld.com/businesscenter/article/161024/gmail_down_outage_could_last_36_hours_for_some_people.html"&gt;36 hours for some users&lt;/a&gt;. Another incident happened early in September, when &lt;a href="http://www.pcworld.com/businesscenter/article/171288/gmail_outage_caused_by_overloaded_servers.html"&gt;overloaded routers&lt;/a&gt; made the service completely unavailable for almost two hours.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correction: It turns out these Gmail incidents were in 2009 and managed to slip through here due to a mistake on our end. Terribly sorry about that.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;China reroutes the Internet&lt;/h3&gt;
&lt;p&gt;In April, China Telecom spread incorrect traffic routes to the rest of the Internet. In this specific case it meant that during 18 minutes, potentially as much as 15% of the traffic on the Internet was sent via China because routers believed it was the most effective route to take.&lt;/p&gt;
&lt;p&gt;Similar incidents have happened before, for example when &lt;a href="http://www.datacenterknowledge.com/archives/2008/Feb/24/youtube_offline_pakistan_telecom_blamed.html"&gt;YouTube was hijacked&lt;/a&gt; globally by a small Pakistani ISP two years ago. Normally this results in a crash since the ISP can’t handle the traffic. However, China Telecom was able to handle the traffic, so most people never noticed this. At most they noticed increased latency as traffic to the affected networks took a very long and awkward route across the Internet (via China).&lt;/p&gt;
&lt;p&gt;Even though no serious outage happened as a result of this, we think it’s such a fascinating disruption of the traffic flow that we felt it was worth including here. This is an inherent weakness of today’s Internet infrastructure, which largely relies on the honor system. Renesys has a more &lt;a href="http://www.renesys.com/blog/2010/11/chinas-18-minute-mystery.shtml"&gt;in-depth explanation&lt;/a&gt; of this incident and how it could happen. We should state that it wasn’t necessarily an intentional hijacking.&lt;/p&gt;
&lt;h3&gt;Twitter’s World Cup woes&lt;/h3&gt;
&lt;p&gt;Twitter seemed like the ideal companion to the World Cup (soccer to you Americans, football to the rest of the world, &lt;a href="http://www.youtube.com/watch?v=2sD_8prYOxo"&gt;John Cleese explains it best&lt;/a&gt;). Tweeting about the World Cup proved so popular that it &lt;a href="http://www.reuters.com/article/idUS386947192720100616"&gt;slowed down or broke Twitter several times&lt;/a&gt; during the weeks of the event. The upside is that this effectively load tested Twitter’s infrastructure, revealing potential weaknesses. As a result, Twitter’s service today is most likely more stable than it might otherwise have been.&lt;/p&gt;
&lt;h3&gt;Facebook’s feedback loop&lt;/h3&gt;
&lt;p&gt;Facebook has become a true juggernaut with more than 500 million users. That hasn’t changed its development philosophy, “don’t be afraid to break things.” This aggressive approach to speedy development has been key to Facebook’s success, but, well, sometimes it &lt;em&gt;will&lt;/em&gt; break things.&lt;/p&gt;
&lt;p&gt;Facebook’s &lt;a href="http://articles.cnn.com/2010-09-24/tech/facebook.outage_1_outage-half-billion-users-social-networking?_s=PM:TECH"&gt;worst outage in four years&lt;/a&gt; came in September when a seemingly innocent update to Facebook’s backend code caused &lt;a href="http://www.facebook.com/note.php?note_id=431441338919"&gt;a feedback loop that completely overloaded its databases&lt;/a&gt;. The only way for Facebook to recover was to take down the entire site and remove the bad code before taking the site back online. Facebook was offline for approximately 2.5 hours.&lt;/p&gt;
&lt;h3&gt;Foursquare’s double whammy&lt;/h3&gt;
&lt;p&gt;Foursquare’s location-based social network has been a resounding success and has in little time gathered a following of millions, so when the service went down &lt;a href="http://blog.foursquare.com/2010/10/05/so-that-was-a-bummer/"&gt;for roughly 11 hours&lt;/a&gt; early in October, people of course noticed. The culprit was an overloaded database. And as if to add insult to injury, almost exactly the same thing &lt;a href="http://blog.foursquare.com/2010/10/06/quite-the-way-to-celebrate-our-200-millionth-check-in/"&gt;happened the day after&lt;/a&gt;, taking the site down for an additional six hours.&lt;/p&gt;
&lt;h3&gt;Paypal’s payment problems&lt;/h3&gt;
&lt;p&gt;When Paypal stumbles, so do the many thousands of merchants that rely on Paypal to handle payments, not to mention the millions of regular consumers who use Paypal for their online payments. You can imagine the effect, and sales lost, if Paypal stops working for hours on end. Which was &lt;a href="http://www.computerworld.com/s/article/9194059/PayPal_recovers_from_widespread_outage"&gt;exactly what happened&lt;/a&gt; in October when &lt;a href="http://www.computerworld.com/s/article/9194743/PayPal_outage_leads_to_concern_frustration"&gt;a problem with Paypal’s network equipment&lt;/a&gt; crippled the service for as much as 4.5 hours. At its peak the issue affected all of Paypal’s members worldwide for 1.5 hours.&lt;/p&gt;
&lt;h3&gt;Tumblr’s tumble&lt;/h3&gt;
&lt;p&gt;Tumblr was (and still is) one of the great social media successes of 2010, but with rapid growth comes scalability challenges. This has become &lt;a href="http://royal.pingdom.com/2010/12/17/the-most-reliable-and-unreliable-blogging-services-2/"&gt;increasingly noticeable&lt;/a&gt;, and culminated with &lt;a href="http://staff.tumblr.com/post/2127872280/downtime"&gt;a 24-hour outage early in December&lt;/a&gt; when all of Tumblr’s 11 million blogs were offline due to a broken database cluster.&lt;/p&gt;
&lt;h3&gt;The Wikileaks drama&lt;/h3&gt;
&lt;p&gt;If you’ve missed this you must have been hiding under a rock, which in turn was buried below a mountain of rocks. The &lt;a href="http://www.renesys.com/blog/2010/12/wikileaks-moving-target.shtml"&gt;site issues that Wikileaks experienced&lt;/a&gt; during the so-called &lt;a href="http://en.wikipedia.org/wiki/Cablegate"&gt;Cablegate&lt;/a&gt; were significant. First the site was the victim of a large-scale distributed denial-of-service attack which forced Wikileaks to switch to a different web host. After Wikileaks moved to Amazon EC2 to better handle the increased traffic, Amazon soon shut them down. In addition to this, several countries blocked access to the Wikileaks site. And then the possibly largest blow came when the DNS provider for the official Wikileaks.org domain, EveryDNS, shut down the domain itself.&lt;/p&gt;
&lt;p&gt;Without a working domain name in place, Wikileaks could for a time only be reached by its IP address. Since then, Wikileaks has spread itself out, mirroring the content over hundreds of sites and different domain names, including a new main site at Wikileaks.ch.&lt;/p&gt;
&lt;p&gt;As if this wasn’t enough drama, you have to add the reactions from some of Wikileaks’ supporters (not from Wikileaks itself). The services that cut off Wikileaks in various ways (Paypal, VISA, Mastercard, Amazon, EveryDNS, etc.) were subjected to distributed denial-of-service attacks from upset supporters across the world, which resulted in even more downtime. There was also collateral damage, when some attackers mistook the DNS provider EasyDNS for EveryDNS, aiming their attacks at the wrong target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Wikileaks drama is without a doubt the Internet incident of the year.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Final words&lt;/h3&gt;
&lt;p&gt;The events we have listed here above really are just a small sample of everything that has happened in 2010. Even without Wikileaks, it’s been a very eventful year on the Internet. That said, this is something we find ourselves saying every year. The truth is that the Internet is not quite as stable and solid as most of us would like to believe. It’s a complex system, like a living organism, and things do break from time to time. Sometimes it’s small-scale enough that nobody notices, and sometimes hundreds of millions of people are affected.&lt;/p&gt;
&lt;p&gt;Hopefully 2011 will be a less eventful year, but we wouldn’t count on it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you feel we missed something major, please let us know in the comments!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Previous years:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://royal.pingdom.com/2007/12/27/the-major-incidents-on-the-internet-in-2007/"&gt;Internet incidents in 2007&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://royal.pingdom.com/2008/12/18/the-major-incidents-on-the-internet-in-2008/"&gt;Internet incidents in 2008&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://royal.pingdom.com/2009/12/18/worst-internet-disasters-of-the-decade/"&gt;Internet incidents of the decade, 2000-2009&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/RoyalPingdom/~4/YWOYzVm5FWw" height="1" width="1"&gt;</content><author><name>Pingdom</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/RoyalPingdom"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/RoyalPingdom</id><title type="html">Royal Pingdom</title><link rel="alternate" href="http://royal.pingdom.com" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1292838396617"><id gr:original-id="">tag:google.com,2005:reader/item/55c584eb7a530622</id><title type="html">Mandelbrot flythrough</title><published>2010-12-20T09:46:36Z</published><updated>2010-12-20T09:46:36Z</updated><link rel="alternate" href="http://www.perlmonks.org/?node_id=329492" type="text/html"/><link rel="related" href="http://www.perlmonks.org/" title="www.perlmonks.org"/><content xml:base="http://www.perlmonks.org/?node_id=329492" type="html">&lt;blockquote&gt;Shared by  Wei 
&lt;br&gt;
Awesome stuff!!&lt;/blockquote&gt;
#!/usr/bin/perl
 $r=25; $c=80;
                                              $xr=6;$yr=3;$xc=-0.5;$dw=$z=-4/
                                              100;local$&amp;quot;;while($q=$dr=rand()
                                             /7){$w+=$dw;$_=join$/,map{$Y=$_*
                                             $yr/$r;
  join&amp;quot;&amp;quot;                                    ,map{$                  x=$_*$
 xr/$c;($                                   x,$y)=                 ($xc+$x
  *cos($                                   w)-$Y*               sin$w,$yc+
                                           $x*sin              ($w)+$Y*cos
  $w);$                                   e=-1;$                    a=$b=0
;($a,$b)   =($u-$v+$x,2*$a*               $b+$y)                    while(
$ u=$a*$   a)+($v=$b*$b)&amp;lt;4.5  &amp;amp;&amp;amp;++$e     &amp;lt;15;if                     (($e&amp;gt;$
  q&amp;amp;&amp;amp;$e&amp;lt;   15)||($e==$q and   rand()     &amp;lt;$dr))  {$q=$e;($d0,$d1)   =($x,$
  y); }                        chr(+(   32,96,+  46,45,43,58,73,37  ,36,64
 ,32)[$                        e/1.5]   );}(-$   c/2)..($c/2)-1;}   (-$r/2
 )..($     r/2)-1;select$&amp;quot;,     $&amp;quot;,$&amp;quot;, 0.015;                       system
$^O=~m     ~[wW]in~x?&amp;quot;cls&amp;quot;:     &amp;quot;clear&amp;quot;;print                       ;$xc=(
$d0+15     *$xc)/16;$yc=($       d1+15*$yc)/                        16;$_*=
1+$z for                         $xr,$yr;$dw                     *=-1 if rand
()&amp;lt;0.02;                          (++$i%110                      )||($z*=-1)}
</content><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:annotation><content type="html">Awesome stuff!!</content><author gr:user-id="10099673323686801007" gr:profile-id="108833141822311553030"><name>Wei</name></author></gr:annotation><source gr:stream-id="user/10099673323686801007/source/com.google/link"><id>tag:google.com,2005:reader/user/10099673323686801007/source/com.google/link</id><title type="html">www.perlmonks.org</title><link rel="alternate" href="http://www.perlmonks.org/" type="text/html"/></source></entry><entry gr:crawl-timestamp-msec="1292459447595"><id gr:original-id="http://www.lowendbox.com/?p=1519">tag:google.com,2005:reader/item/d66f8552364b738b</id><category term="Low End Virtual"/><category term="burst.net"/><category term="exclusive"/><category term="los angeles"/><category term="openvz"/><title type="html">BurstNet – $4.46 512MB OpenVZ VPS Exclusive Offer</title><published>2010-12-15T15:06:46Z</published><updated>2010-12-15T15:06:46Z</updated><link rel="alternate" href="http://www.lowendbox.com/blog/burstnet-4-46-512mb-openvz-vps-exclusive-offer/" type="text/html"/><content xml:base="http://www.lowendbox.com/" type="html">&lt;p&gt;&lt;a href="http://burst.net/"&gt;&lt;img src="http://www.lowendbox.com/media/images/burst.jpg" alt="BurstNet"&gt;&lt;/a&gt; Hey guys! I am still alive and I am &lt;em&gt;supposed&lt;/em&gt; to be on holidays still. Trip over here (Taiwan) has been pretty much endless eating, and I guess I might need to put in more effort in trimming the waistline fat rather than trimming the memory-bloated VPS after I get back. Due to the accommodation arrangement the hotels that I’ve stayed over the past week actually don’t have broadband connection to the room, and free wifi has been scarce. Anyway, I did manage to get some connectivity to approve comments and post this update.&lt;/p&gt;
&lt;p&gt;And kudos to the president and CEO of &lt;a href="http://burst.net/"&gt;&lt;b&gt;BurstNet&lt;/b&gt;&lt;/a&gt; who sent me an exclusive offer a few days ago, regarding to their &lt;em&gt;expansion to Los Angeles&lt;/em&gt;. Use promo code &lt;b&gt;LOWENDLAVPS&lt;/b&gt; to get &lt;b&gt;25% off recurring discount&lt;/b&gt; (expiry 31&lt;sup&gt;st&lt;/sup&gt; of December 2010), which brings their Unmanaged Linux VPS #1 down to &lt;b&gt;$4.46/month&lt;/b&gt;. &lt;a href="http://www.burst.net/vps.shtml?c=143&amp;amp;kw=lowendbox_vps_la"&gt;Here is the link&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;512MB memory&lt;/li&gt;
&lt;li&gt;20GB storage&lt;/li&gt;
&lt;li&gt;1000GB/month data transfer&lt;/li&gt;
&lt;li&gt;2 IP addresses&lt;/li&gt;
&lt;li&gt;OpenVZ/vePortal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes BurstNet’s OpenVZ/vePortal product available in either Los Angeles CA, Scranton PA or UK. It’s not the first 512MB VPS under $5/month. However what makes BurstNet different is probably its size, and how many other so-called “VPS providers” are actually just resellers of BurstNet’s products (or using their infrastructure). 177ms to LA from here in Taiwan (comparing to 247ms to Scranton) so it’s sweet for the Asian users.&lt;/p&gt;
&lt;p&gt;That’s it for the update. I’ve got a few other offers emailed to me last week although nothing extraordinary — will get them posted after I get back.&lt;/p&gt;</content><author><name>LowEndAdmin</name></author><source gr:stream-id="feed/http://www.lowendbox.com/feed/"><id>tag:google.com,2005:reader/feed/http://www.lowendbox.com/feed/</id><title type="html">Low End Box</title><link rel="alternate" href="http://www.lowendbox.com" type="text/html"/></source></entry></feed>
