<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.mekk.waw.pl/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:idx="urn:atom-extension:indexing" xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" 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/04686467480557924617/state/com.google/broadcast</id><title type="text">Wyłowione z czytnika</title><gr:continuation>CMun5OWxkaMC</gr:continuation><author><name>Mekk</name></author><updated>2010-09-02T16:27:27Z</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.mekk.waw.pl/WylowioneZCzytnika" /><feedburner:info uri="wylowionezczytnika" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><subtitle type="html">Artykuły które mnie czegoś nauczyły, sprowokowały do zastanowienia albo po prostu zaciekawiły - to, co było najciekawsze w moim czytniku RSS.</subtitle><entry gr:crawl-timestamp-msec="1283444847003"><id gr:original-id="http://theoatmeal.com/blog/apps">tag:google.com,2005:reader/item/720a427807f7ae41</id><title type="html">This is how I feel about buying apps</title><published>2010-08-30T13:19:03Z</published><updated>2010-08-30T13:19:03Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/131VU8NOOfs/apps" type="text/html" /><author><name>Matthew Inman</name></author><gr:likingUser>14952908826852504230</gr:likingUser><gr:likingUser>02177799354841141670</gr:likingUser><gr:likingUser>08282209597592113736</gr:likingUser><gr:likingUser>09879977286868249236</gr:likingUser><gr:likingUser>07586355695765764598</gr:likingUser><gr:likingUser>16555522281066470607</gr:likingUser><gr:likingUser>06102668585479396420</gr:likingUser><gr:likingUser>07337777275175527608</gr:likingUser><gr:likingUser>16084468165368903529</gr:likingUser><gr:likingUser>07965357033533778499</gr:likingUser><gr:likingUser>10966394620400685301</gr:likingUser><gr:likingUser>11110394820393394401</gr:likingUser><gr:likingUser>13220093879107065712</gr:likingUser><gr:likingUser>10086437684734402049</gr:likingUser><gr:likingUser>12630234872622555531</gr:likingUser><gr:likingUser>05540450001301599868</gr:likingUser><gr:likingUser>11264168710409777136</gr:likingUser><gr:likingUser>03806104345436081794</gr:likingUser><gr:likingUser>07435859236420158806</gr:likingUser><gr:likingUser>09481742023704258490</gr:likingUser><gr:likingUser>01263432395139784699</gr:likingUser><gr:likingUser>11554845031832679269</gr:likingUser><gr:likingUser>15081453189892109507</gr:likingUser><gr:likingUser>07258016108636189321</gr:likingUser><gr:likingUser>10089440068052914215</gr:likingUser><gr:likingUser>13751860612408734725</gr:likingUser><gr:likingUser>08270047540933657720</gr:likingUser><gr:likingUser>07949560136460988653</gr:likingUser><gr:likingUser>12222794316909479531</gr:likingUser><gr:likingUser>00558288576970018204</gr:likingUser><gr:likingUser>07165352447193851289</gr:likingUser><gr:likingUser>05064935562983837727</gr:likingUser><gr:likingUser>07479658336631452424</gr:likingUser><gr:likingUser>18226261586001665281</gr:likingUser><gr:likingUser>03088239999159987891</gr:likingUser><gr:likingUser>02155682904010988878</gr:likingUser><gr:likingUser>05079869127914741231</gr:likingUser><gr:likingUser>14029414566273321584</gr:likingUser><gr:likingUser>01489610755568655849</gr:likingUser><gr:likingUser>10294251302290779238</gr:likingUser><gr:likingUser>01058726096188651751</gr:likingUser><gr:likingUser>06715572903698865996</gr:likingUser><gr:likingUser>14756540878451524320</gr:likingUser><gr:likingUser>07407124866287746311</gr:likingUser><gr:likingUser>03035223867491405321</gr:likingUser><gr:likingUser>15769044376205554912</gr:likingUser><gr:likingUser>08106817290465149326</gr:likingUser><gr:likingUser>05577982054081162737</gr:likingUser><gr:likingUser>13144252359224418991</gr:likingUser><gr:likingUser>11184493670863076338</gr:likingUser><gr:likingUser>16887050174614262997</gr:likingUser><gr:likingUser>12099862560882432052</gr:likingUser><gr:likingUser>09793834110043651422</gr:likingUser><gr:likingUser>02062317429011171208</gr:likingUser><gr:likingUser>02586712948486705261</gr:likingUser><gr:likingUser>04061746464382871799</gr:likingUser><gr:likingUser>09611770290059079280</gr:likingUser><gr:likingUser>16098525651311966633</gr:likingUser><gr:likingUser>03285257443185929989</gr:likingUser><gr:likingUser>14072178322358936223</gr:likingUser><gr:likingUser>13095412481562945788</gr:likingUser><gr:likingUser>16039527976128033686</gr:likingUser><gr:likingUser>17386283792902437440</gr:likingUser><gr:likingUser>18319592925048585294</gr:likingUser><gr:likingUser>10719351734994582371</gr:likingUser><gr:likingUser>17894008890967114118</gr:likingUser><gr:likingUser>00853386840831953650</gr:likingUser><gr:likingUser>10980177190922755084</gr:likingUser><gr:likingUser>16183674332700375666</gr:likingUser><gr:likingUser>00765529308799451661</gr:likingUser><gr:likingUser>05450183350407630342</gr:likingUser><gr:likingUser>14162968168887648468</gr:likingUser><gr:likingUser>02002460122511786721</gr:likingUser><gr:likingUser>05066804048808940094</gr:likingUser><gr:likingUser>09134242665379798817</gr:likingUser><gr:likingUser>02742442046563321534</gr:likingUser><gr:likingUser>04468187917238055908</gr:likingUser><gr:likingUser>03125083724929461925</gr:likingUser><gr:likingUser>12953360243211055664</gr:likingUser><gr:likingUser>02104814651024490745</gr:likingUser><gr:likingUser>16117191087986684888</gr:likingUser><gr:likingUser>00713241108788518660</gr:likingUser><gr:likingUser>09705644064548346711</gr:likingUser><gr:likingUser>01649972735008805796</gr:likingUser><gr:likingUser>15079153998666041726</gr:likingUser><gr:likingUser>00281889190751764118</gr:likingUser><gr:likingUser>13671481334605973111</gr:likingUser><gr:likingUser>16124079332823773647</gr:likingUser><gr:likingUser>08451352140543018244</gr:likingUser><gr:likingUser>17365284859316475862</gr:likingUser><gr:likingUser>02835618283006179728</gr:likingUser><gr:likingUser>17590763312537175464</gr:likingUser><gr:likingUser>15492530959564594861</gr:likingUser><gr:likingUser>12578158132310349112</gr:likingUser><gr:likingUser>09872450681344848054</gr:likingUser><gr:likingUser>15668170205003973874</gr:likingUser><gr:likingUser>16029785009448206688</gr:likingUser><gr:likingUser>12996006324666661986</gr:likingUser><gr:likingUser>11416774856592708171</gr:likingUser><gr:likingUser>06826615947997243337</gr:likingUser><source gr:stream-id="feed/http://theoatmeal.com/feed/rss"><id>tag:google.com,2005:reader/feed/http://theoatmeal.com/feed/rss</id><title type="html">The Oatmeal - Comics, Quizzes, &amp;amp; Stories</title><link rel="alternate" href="http://theoatmeal.com/" type="text/html" /></source><content type="html">&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=131VU8NOOfs:zSWaHnklu74:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=131VU8NOOfs:zSWaHnklu74:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=131VU8NOOfs:zSWaHnklu74:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/131VU8NOOfs" height="1" width="1"/&gt;</content><feedburner:origLink>http://theoatmeal.com/blog/apps</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1283442930106"><id gr:original-id="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=0cd1fcc6-b156-4bdb-810b-688c01c9dd9b">tag:google.com,2005:reader/item/49b1a2a098c2d963</id><category term="Life in the B0rg Cube" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Life+in+the+B0rg+Cube" label="Life in the B0rg Cube" /><category term="Technology" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Technology" label="Technology" /><title type="html">Lessons from Google Wave and REST vs. SOAP: Fighting Complexity of our own Choosing</title><published>2010-08-27T14:30:17Z</published><updated>2010-08-29T02:47:56Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/9UKpv7cZ9-c/LessonsFromGoogleWaveAndRESTVsSOAPFightingComplexityOfOurOwnChoosing.aspx" type="text/html" /><link rel="replies" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=0cd1fcc6-b156-4bdb-810b-688c01c9dd9b" type="application/atom+xml" /><link rel="replies" href="http://www.25hoursaday.com/weblog/CommentView.aspx?guid=0cd1fcc6-b156-4bdb-810b-688c01c9dd9b" title="12 Comments" type="text/html" /><content xml:base="http://www.25hoursaday.com/weblog/" xml:lang="en-US" type="html">&lt;p&gt;
Software companies love hiring people that like solving hard technical problems. On
the surface this seems like a good idea, unfortunately it can lead to situations where
you have people building a product where they focus more on the interesting technical
challenges they can solve as opposed to whether their product is actually solving
problems for their customers. 
&lt;/p&gt;
&lt;p&gt;
I started being reminded of this after reading an answer to a question on Quora about &lt;a href="http://www.quora.com/Which-is-better-to-work-for-Google-or-Facebook"&gt;the
difference between working at Google versus Facebook&lt;/a&gt; where &lt;strike&gt;Edmond Lau&lt;/strike&gt; David
Braginsky wrote 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;&lt;b&gt;Culture: 
&lt;br&gt;
&lt;/b&gt;Google is like grad-school. People value working on hard problems, and doing them
right. Things are pretty polished, the code is usually solid, and the systems are
designed for scale from the very beginning. There are many experts around and review
processes set up for systems designs. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Facebook is more like undergrad. Something needs to be done, and people do it.
Most of the time they don't read the literature on the subject, or consult experts
about the "right way" to do it, they just sit down, write the code, and make things
work. Sometimes the way they do it is naive, and a lot of time it may cause bugs or
break as it goes into production. And when that happens, they fix their problems,
replace bottlenecks with scalable components, and (in most cases) move on to the next
thing. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Google tends to value technology. Things are often done because they are technically
hard or impressive. On most projects, the engineers make the calls. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Facebook values products and user experience, and designers tend to have a much
larger impact. Zuck spends a lot of time looking at product mocks, and is involved
pretty deeply with the site's look and feel.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
It should be noted that Google deserves credit for succeeding where other large software
have mostly failed in putting a bunch of throwing a bunch of Ph.Ds at a problem at
actually having them create products that impacts hundreds of millions people as opposed
to research papers that impress hundreds of their colleagues. That said, it is easy
to see the impact of complexophiles (props to &lt;a href="http://addysanto.com/"&gt;Addy
Santo&lt;/a&gt;) in recent products like Google Wave. 
&lt;/p&gt;
&lt;p&gt;
If you go back and read the &lt;a href="http://googleblog.blogspot.com/2009/05/went-walkabout-brought-back-google-wave.html"&gt;Google
Wave announcement blog post&lt;/a&gt; it is interesting to note the focus on combining features
from disparate use cases and the diversity of all of the technical challenges involved
at once including 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
“Google Wave is just as well suited for quick messages as for persistent content —
it allows for both collaboration and communication” 
&lt;/li&gt;
&lt;li&gt;
“It's an HTML 5 app, built on &lt;a href="http://code.google.com/webtoolkit/"&gt;Google
Web Toolkit&lt;/a&gt;. It includes a rich text editor and other functions like desktop drag-and-drop” 
&lt;/li&gt;
&lt;li&gt;
“The Google Wave protocol is the underlying format for storing and the means of sharing
waves, and includes the ‘live’ concurrency control, which allows edits to be reflected
instantly across users and services” 
&lt;/li&gt;
&lt;li&gt;
“The protocol is designed for open federation, such that anyone's Wave services can
interoperate with each other and with the Google Wave service” 
&lt;/li&gt;
&lt;li&gt;
“Google Wave can also be considered a platform with a rich set of open APIs that allow
developers to embed waves in other web services” 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The product announcement read more like a technology showcase than an announcement
for a product that is actually meant to help people communicate, collaborate or make
their lives better in any way. This is an example of a product where smart people
spent a lot of time working on hard problems but at the end of the day they &lt;a href="http://www.techmeme.com/100804/p57#a100804p57"&gt;didn't
see the adoption they would have liked&lt;/a&gt; because they they spent more time focusing
on technical challenges than ensuring they were building the right product.
&lt;/p&gt;
&lt;p&gt;
It is interesting to think about all the internal discussions and time spent implementing
features like character-by-character typing without anyone bothering to ask whether
that feature actually makes sense for a product that is billed as a replacement to
email. I often write emails where I write a snarky comment then edit it out when I
reconsider the wisdom of sending that out to a broad audience. It’s not a feature
that anyone wants for people to actually see that authoring process. 
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
Some of you may remember that there was a time when I was &lt;a href="http://web.archive.org/web/20040715004553/msdn.microsoft.com/xml/default.aspx"&gt;literally
the face of XML at Microsoft&lt;/a&gt; (i.e. going to &lt;a href="http://www.microsoft.com/xml"&gt;http://www.microsoft.com/xml&lt;/a&gt; took
you to a page with my face on it &lt;img alt="Smile" src="http://shared.live.com/5oeCPTazLAJxhccDO!c5Cg/emoticons/smile_regular.gif"&gt;).
In those days I spent a lot of time using phrases like the XML&amp;lt;-&amp;gt;
objects impedance mismatch to describe the fact that the dominate type system for
the dominant protocol for web services at the time (aka &lt;a href="http://www.w3.org/TR/soap/"&gt;SOAP&lt;/a&gt;)
actually had lots of constructs that you don’t map well to a traditional object oriented
programming language like C# or Java. This was caused by the fact that XML had grown
to serve conflicting masters. There were people who used it as a basis for document
formats such as &lt;a href="http://www.docbook.org/"&gt;DocBook&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/XHTML"&gt;XHTML&lt;/a&gt;.
Then there were the people who saw it as a replacement to for the binary protocols
used in interoperable remote procedure call technologies such as &lt;a href="http://en.wikipedia.org/wiki/CORBA"&gt;CORBA&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Java_remote_method_invocation"&gt;Java
RMI&lt;/a&gt;. The W3C decided to solve this problem by getting a bunch of really smart
people in a room and asking them to create some amalgam type system that would solve
both sets of completely different requirements. The output of this activity was &lt;a href="http://www.w3.org/XML/Schema"&gt;XML
Schema&lt;/a&gt; which became the type system for SOAP, WSDL and the WS-* family of technologies.
This meant that people who simply wanted a way to define how to serialize a C# object
in a way that it could be consumed by a Java method call ended up with a type system
that was also meant to be able to describe the structural rules of the HTML in this
blog post. 
&lt;/p&gt;
&lt;p&gt;
Thousands of man years of effort was spent across companies like Sun Microsystems,
Oracle, Microsoft, IBM and BEA to develop toolkits on top of a protocol stack that
had this fundamental technical challenge baked into it. Of course, everyone had a
different way of trying to address this “XML&amp;lt;-&amp;gt;
object impedance mismatch which led to interoperability issues in what was meant to
be a protocol stack that guaranteed interoperability. Eventually customers started
telling their horror stories in actually using these technologies to interoperate
such as Nelson Minar’s &lt;a href="http://www.25hoursaday.com/weblog/2005/03/17/ETech2005TripReportBuildingANewWebServiceAtGoogle.aspx"&gt;ETech
2005 Talk - Building a New Web Service at Google&lt;/a&gt; and movement around the usage
of building web services using &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;Representational
State Transfer (REST)&lt;/a&gt; was born. In tandem, web developers realized that if your
problem is moving programming language objects around, then perhaps a data format
that was designed for that is the preferred choice. Today, it is hard to find any
recently broadly deployed web service that doesn’t utilize on &lt;a href="http://json.org/"&gt;Javascript
Object Notation (JSON)&lt;/a&gt; as opposed to SOAP. 
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
The moral of both of these stories is that a lot of the time in software it is easy
to get lost in the weeds solving hard technical problems that are due to complexity
we’ve imposed on ourselves due to some well meaning design decision instead of actually
solving customer problems. The trick is being able to detect when you’re in that situation
and seeing if altering some of your base assumptions doesn’t lead to a lot of simplification
of your problem space then frees you up to actually spend time solving real customer
problems and delighting your users. More people need to ask themselves questions like
do I really need to use the same type system and data format for business documents
AND serialized objects from programming languages?
&lt;/p&gt;
&lt;p&gt;
&lt;img title="Note" alt="Note" src="http://www.25hoursaday.com/weblog/images/music_note.gif"&gt; Now
Playing: &lt;a href="http://www.amazon.com/gp/search/ref=sr_adv_m_pop/?search-alias=popular&amp;amp;unfiltered=1&amp;amp;field-keywords=&amp;amp;field-artist=Travie+McCoy&amp;amp;field-title=Billionaire&amp;amp;field-label=&amp;amp;field-binding=&amp;amp;sort=relevancerank&amp;amp;Adv-Srch-Music-Album-Submit.x=19&amp;amp;Adv-Srch-Music-Album-Submit.y=6"&gt;Travie
McCoy&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=Travie+McCoy+Billionaire&amp;amp;x=0&amp;amp;y=0"&gt;Billionaire
(featuring Bruno Mars)&lt;/a&gt; &lt;img title="Note" alt="Note" src="http://www.25hoursaday.com/weblog/images/music_note.gif"&gt;
&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=9UKpv7cZ9-c:Y0wbNHqAkrs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=9UKpv7cZ9-c:Y0wbNHqAkrs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=9UKpv7cZ9-c:Y0wbNHqAkrs:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=9UKpv7cZ9-c:Y0wbNHqAkrs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=9UKpv7cZ9-c:Y0wbNHqAkrs:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=9UKpv7cZ9-c:Y0wbNHqAkrs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=9UKpv7cZ9-c:Y0wbNHqAkrs:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=9UKpv7cZ9-c:Y0wbNHqAkrs:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=9UKpv7cZ9-c:Y0wbNHqAkrs:D7DqB2pKExk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/9UKpv7cZ9-c" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=9UKpv7cZ9-c:sawM5PCnixQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=9UKpv7cZ9-c:sawM5PCnixQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=9UKpv7cZ9-c:sawM5PCnixQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/9UKpv7cZ9-c" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>02774332704717529568</gr:likingUser><gr:likingUser>02438731866835478013</gr:likingUser><gr:likingUser>01378362922825043920</gr:likingUser><gr:likingUser>08537932877058015386</gr:likingUser><gr:likingUser>02873707360093523494</gr:likingUser><gr:likingUser>09759310690909091102</gr:likingUser><gr:likingUser>00812770177734510747</gr:likingUser><gr:likingUser>13241171391132064795</gr:likingUser><gr:likingUser>08040482264665158617</gr:likingUser><gr:likingUser>16092704656904227521</gr:likingUser><gr:likingUser>16918493420106846864</gr:likingUser><gr:likingUser>13884324738875150380</gr:likingUser><gr:likingUser>00935087814609132313</gr:likingUser><gr:likingUser>00269385245896912809</gr:likingUser><gr:likingUser>07355717207596287962</gr:likingUser><gr:likingUser>03850496947340237631</gr:likingUser><gr:likingUser>00109946945841338007</gr:likingUser><gr:likingUser>07629152116638731921</gr:likingUser><gr:likingUser>00907783891347362261</gr:likingUser><gr:likingUser>01170741198654019275</gr:likingUser><gr:likingUser>02395318870018782319</gr:likingUser><gr:likingUser>17168730985191149394</gr:likingUser><gr:likingUser>01014446539998601099</gr:likingUser><gr:likingUser>00129879510092795126</gr:likingUser><gr:likingUser>17930131873740303556</gr:likingUser><gr:likingUser>02193447919425749287</gr:likingUser><gr:likingUser>02889849770554178297</gr:likingUser><gr:likingUser>08860681721528066350</gr:likingUser><gr:likingUser>11067853532291698348</gr:likingUser><gr:likingUser>15335287170639515947</gr:likingUser><gr:likingUser>03647295969831490601</gr:likingUser><gr:likingUser>13940536751471068482</gr:likingUser><gr:likingUser>11261171537580430336</gr:likingUser><source gr:stream-id="feed/http://feeds.feedburner.com/Carnage4Life"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/Carnage4Life</id><title type="html">Dare Obasanjo aka Carnage4Life</title><link rel="alternate" href="http://www.25hoursaday.com/weblog/" type="text/html" /></source><feedburner:origLink>http://www.25hoursaday.com/weblog/2010/08/27/LessonsFromGoogleWaveAndRESTVsSOAPFightingComplexityOfOurOwnChoosing.aspx</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1283428510409"><id gr:original-id="http://osblog.pl/?p=174572">tag:google.com,2005:reader/item/f6dc071ed1b89ad4</id><category term="Internet" /><category term="ciekawostki" /><category term="Facebook" /><category term="Google" /><category term="Nasza-klasa" /><category term="prywatność" /><category term="Social Media" /><category term="web20" /><title type="html">5 sekretów, których nie zdradzam nieznajomym</title><published>2010-08-22T09:54:00Z</published><updated>2010-08-22T09:54:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/rPHza_j-quc/" type="text/html" /><author><name>Marcin Kosedowski</name></author><source gr:stream-id="feed/http://feeds.feedburner.com/OSblogpl"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/OSblogpl</id><title type="html">OSblog.pl</title><link rel="alternate" href="http://osblog.pl" type="text/html" /></source><content type="html" xml:base="http://osblog.pl/">Nawet jeśli nie masz paranoi na punkcie prywatności, musisz poznać mało znane funkcje serwisów społecznościowych, które zdradzają twoje dane. I najważniejszą zasadę Internetu.

Na wstępie zaznaczę, że ONI mnie nie śledzą. Amerykańskie satelity nie zaglądają mi przez okno, żeby zobaczyć jaką gazetę czytam. Nie zmieniam co miesiąc numeru telefonu. Uważam, że karty kredytowe to jeden z [...]&lt;img src="http://feeds.feedburner.com/~r/OSblogpl/~4/dfzwUgVr8PQ" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=rPHza_j-quc:07k6IuCzbLs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=rPHza_j-quc:07k6IuCzbLs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=rPHza_j-quc:07k6IuCzbLs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/rPHza_j-quc" height="1" width="1"/&gt;</content><feedburner:origLink>http://feedproxy.google.com/~r/OSblogpl/~3/dfzwUgVr8PQ/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1282833311784"><id gr:original-id="http://chetkowski.blog.polityka.pl/?p=1078">tag:google.com,2005:reader/item/9a990d2bd294497c</id><category term="BelferBlog" /><title type="html">Lepiej kształci się akwizytorów niż nauczycieli</title><published>2010-08-11T16:51:15Z</published><updated>2010-08-11T16:51:15Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/CiXH1F7iJQg/" type="text/html" /><content xml:base="http://chetkowski.blog.polityka.pl/" type="html">&lt;p&gt;Przyszli nauczyciele nie są przygotowywani do pracy w szkole. Już o wiele lepiej kształci się akwizytorów. Porównania tego użył Dariusz Kulma, Nauczyciel Roku 2008, w rozmowie z “Głosem Nauczycielskim” (&lt;a href="http://www.glos.pl/node/933"&gt;zob. tekst&lt;/a&gt;). Nie chodzi o braki w zakresie wiedzy merytorycznej, lecz o nieznajomość technik uczenia, motywowania uczniów, podstaw psychologii, zasad komunikowania się z ludźmi itp.&lt;/p&gt;
&lt;p&gt;Kto miałby tego nauczyć studentów, skoro pracownicy uczelni traktują szkoły jak skupiska trędowatych? Zwyczajnie boją się uczniów. Najprawdopodobniej sami nie potrafią motywować do nauki. Mam nadzieję, że sytuacja się zmieniła, ale mój rocznik był motywowany słowami: “Połowa studentów nie zaliczy pierwszego roku” (uwagi do mężczyzn) albo “Mówią, że studiujecie, aby łatwiej znaleźć męża” (uwagi do kobiet). Gdy zaś poinformowałem jednego z profesorów, do którego czułem sympatię, że idę pracować w szkole, życzył mi, aby to nie trwało długo i żebym szybko znalazł coś lepszego. Pracownicy uczelni nie ukrywali, że dla nich szkoła to syf. Czy to się zmieniło?&lt;/p&gt;
&lt;p&gt;Na uczelni nauczyłem się podstaw historii metodyki, historii pedagogiki i historii psychologii. Praktyki zaś było tyle, co kot napłakał, mimo że już na pierwszym roku studiów do indeksu wbito mi pieczątkę “specjalizacja pedagogiczna”. Całe szczęście, że pracowałem w handlu. Sztuki komunikowania uczyłem się, sprzedając kasety magnetofonowe i płyty CD. Wzbudzanie motywacji praktykowałem, wciskając ludziom materiały pirotechniczne. A praktyki metodyczne odrabiałem, prowadząc zajęcia dla pielęgniarek z konstrukcji kapci (zajmowałem się marketingiem w firmie produkującej kapcie, sprzedawaliśmy je głównie w szpitalach). Parę lat pracy w handlu uczyniły ze mnie profesjonalnego belfra. Niestety, jeżeli ktoś podczas studiów nie popracuje w handlu, to nie ma szans nauczyć się, jak być sprawnym nauczycielem. Musi uczyć się na własnych błędach z uczniami, a te bywają bolesne&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=CiXH1F7iJQg:aHL4jALk9yw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=CiXH1F7iJQg:aHL4jALk9yw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=CiXH1F7iJQg:aHL4jALk9yw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/CiXH1F7iJQg" height="1" width="1"/&gt;</content><author><name>Dariusz Chętkowski</name></author><source gr:stream-id="feed/http://chetkowski.blog.polityka.pl/?feed=rss2"><id>tag:google.com,2005:reader/feed/http://chetkowski.blog.polityka.pl/?feed=rss2</id><title type="html">BelferBlog</title><link rel="alternate" href="http://chetkowski.blog.polityka.pl" type="text/html" /></source><feedburner:origLink>http://chetkowski.blog.polityka.pl/?p=1078</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281703320027"><id gr:original-id="426227:4867632:8440738">tag:google.com,2005:reader/item/9b94e83064396d2e</id><category term="Paper" /><title type="html">Dremel: Interactive Analysis of Web-Scale Datasets - Data as a Programming Paradigm</title><published>2010-08-04T14:04:55Z</published><updated>2010-08-04T14:04:55Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/bF9Y6Wk36Js/dremel-interactive-analysis-of-web-scale-datasets-data-as-a.html" type="text/html" /><author><name>Todd Hoff</name></author><gr:likingUser>02216285535781255821</gr:likingUser><gr:likingUser>02574487182442888253</gr:likingUser><gr:likingUser>11986012805061343048</gr:likingUser><gr:likingUser>11894735318327475980</gr:likingUser><gr:likingUser>11524393737263604555</gr:likingUser><gr:likingUser>08133868910152869345</gr:likingUser><gr:likingUser>14201568053905836313</gr:likingUser><gr:likingUser>03064497087513375588</gr:likingUser><gr:likingUser>02240698951620832195</gr:likingUser><gr:likingUser>15747938113636203749</gr:likingUser><gr:likingUser>13023156506078712324</gr:likingUser><gr:likingUser>13744471098376332171</gr:likingUser><gr:likingUser>13966815185838102704</gr:likingUser><gr:likingUser>18265828512888486593</gr:likingUser><gr:likingUser>05875385289110195900</gr:likingUser><gr:likingUser>14396658607529880750</gr:likingUser><gr:likingUser>09578559031324263990</gr:likingUser><gr:likingUser>06749872122016415796</gr:likingUser><gr:likingUser>17566174261369447865</gr:likingUser><gr:likingUser>10712027128841155131</gr:likingUser><gr:likingUser>15829881511940927542</gr:likingUser><gr:likingUser>12174246823526583268</gr:likingUser><gr:likingUser>14237529447171936435</gr:likingUser><gr:likingUser>04743817793341216309</gr:likingUser><gr:likingUser>15595003703676954649</gr:likingUser><gr:likingUser>03772304150713683009</gr:likingUser><gr:likingUser>03390246114199286652</gr:likingUser><gr:likingUser>08752474928067666524</gr:likingUser><gr:likingUser>02042938872454209198</gr:likingUser><gr:likingUser>08786162349995558285</gr:likingUser><gr:likingUser>03440358504978440795</gr:likingUser><gr:likingUser>07180297575475698830</gr:likingUser><source gr:stream-id="feed/http://highscalability.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://highscalability.com/rss.xml</id><title type="html">High Scalability</title><link rel="alternate" href="http://highscalability.com/blog/" type="text/html" /></source><content type="html" xml:base="http://highscalability.com/blog/">&lt;p&gt;&lt;img src="http://farm5.static.flickr.com/4135/4858857091_cd5ac3fea8_m.jpg" alt="" align="right"&gt;&lt;/p&gt;
&lt;p&gt;If Google was a boxer then MapReduce would be a probing right hand that sets up the massive left hook that is &lt;a href="http://sergey.melnix.com/pub/melnik_VLDB10.pdf"&gt;Dremel&lt;/a&gt;, Google&amp;#39;s—scalable (thousands of CPUs, petabytes of data, trillions of rows), SQL based, columnar, interactive (results returned in seconds), ad-hoc—analytics system. If Google was a magician then MapReduce would be the shiny thing that distracts the mind while the trick goes unnoticed. I say that because even though Dremel has been around internally at Google since 2006, we have not heard a whisper about it. All we&amp;#39;ve heard about is MapReduce, clones of which have inspired entire new industries. &lt;a href="http://en.wikipedia.org/wiki/Rope-a-dope"&gt;Tricky&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Dremel, according to Brian Bershad, Director of Engineering at Google, is targeted at solving &lt;a href="http://googleresearch.blogspot.com/2010/08/google-north-american-faculty-summit.html"&gt;BigData class problems&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While we all know that systems are huge and will get even huger, the implications of this size on programmability, manageability, power, etc. is hard to comprehend. Alfred noted that the Internet is predicted to be carrying a zetta-byte (10&lt;span style="vertical-align:super"&gt;21&lt;/span&gt; bytes) per year in just a few years. And growth in the number of processing elements per chip may give rise to warehouse computers of having 10&lt;span style="vertical-align:super"&gt;10&lt;/span&gt; or more processing elements. To use systems at this scale, we need new solutions for storage and computation.&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=bF9Y6Wk36Js:DiDR82D1Fls:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=bF9Y6Wk36Js:DiDR82D1Fls:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=bF9Y6Wk36Js:DiDR82D1Fls:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/bF9Y6Wk36Js" height="1" width="1"/&gt;</content><feedburner:origLink>http://highscalability.com/blog/2010/8/4/dremel-interactive-analysis-of-web-scale-datasets-data-as-a.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281687060659"><id gr:original-id="http://rjlipton.wordpress.com/?p=5260">tag:google.com,2005:reader/item/5cf85d82bd436ab7</id><category term="P=NP" /><category term="People" /><category term="Proofs" /><category term="Proof" /><category term="P≠NP" /><category term="flaws" /><category term="Immerman" /><category term="finite model theory" /><title type="html">Fatal Flaws in Deolalikar’s Proof?</title><published>2010-08-13T04:15:21Z</published><updated>2010-08-13T04:15:21Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/TrUkzAB_I7Y/" type="text/html" /><media:group><media:content url="http://0.gravatar.com/avatar/afaa664a052777146630095c596117b2?s=96&amp;d=identicon&amp;r=G" /><media:content url="http://rjlipton.files.wordpress.com/2010/08/immerman.jpg" /></media:group><content xml:base="http://rjlipton.wordpress.com/" type="html">&lt;p&gt;&lt;font color="”#0066cc?"&gt;&lt;br&gt;
&lt;em&gt; Possible fatal flaws in the finite model part of Deolalikar’s proof &lt;/em&gt;&lt;br&gt;
&lt;font color="”#000000?"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rjlipton.files.wordpress.com/2010/08/immerman.jpg"&gt;&lt;img src="http://rjlipton.files.wordpress.com/2010/08/immerman.jpg?w=120" alt="" title="immerman" width="120"&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;
Neil Immerman is one of the world’s experts on Finite Model Theory. He used insights from this area to co-discover the great &lt;a href="http://rjlipton.wordpress.com/2009/02/19/we-all-guessed-wrong/"&gt;result&lt;/a&gt; that &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cmathsf%7BNLOG%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\mathsf{NLOG}}" title="{\mathsf{NLOG}}"&gt; is closed under complement.&lt;/p&gt;
&lt;p&gt;
Today I had planned not to discuss the proof, but I just received a note from Neil on Vinay Deolalikar “proof” that P&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cneq%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\neq}" title="{\neq}"&gt;NP. Neil points out two flaws in the finite model part that sound extremely damaging to me. He has already shared them with Vinay, and suggested that I highlight them here. The comments from Neil are in the next section—I have only edited it slightly to make it “compile.”&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; Two Flaws? &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Dear Vinay Deolalikar,&lt;/p&gt;
&lt;p&gt;
Thank you very much for sharing your paper with me. I find your approach and your ideas fascinating, but I am afraid that there is currently a serious hole in your paper as I now describe. For page numbers, I refer to the 102 page, 12 pt. version of your paper.&lt;/p&gt;
&lt;p&gt;
Your main idea for the lower bound is to show that FO(LFP) is not powerful enough to express SAT, by using Hanf-Gaifman locality to limit the connectivity of the graphs you consider at successive stages of the fixed point computation. As you point out, if a total ordering is given as part of the input structure, then the Gaifman graph has diameter one, so locality is meaningless. Thus you restrict to a successor relation and as you point out, it is still true that FO(LFP) is equal to P in the presence of a successor relation. However, you make two assertions that are not true.&lt;/p&gt;
&lt;p&gt;
You use the relation &lt;img src="http://l.wordpress.com/latex.php?latex=%7BR_E%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{R_E}" title="{R_E}"&gt; as your successor relation. On page 67 you write, “The reason for the relation &lt;img src="http://l.wordpress.com/latex.php?latex=%7BR_E%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{R_E}" title="{R_E}"&gt; that creates the chain is that on such structures, polynomial time queries are captured by FO(LFP) [EF06, S11.2].” This is a technicality. Recall that an order on the structure enables the LFP computation (or the Turing machine the runs this computation) to represent tuples in a lexicographical ordering. In our problem &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt;-SAT, it plays no further role. Specifically, the assignments to the variables that are computed by the LFP have nothing to do with their order. They depend only on the relation &lt;img src="http://l.wordpress.com/latex.php?latex=%7BR_C%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{R_C}" title="{R_C}"&gt; which encodes the clauses and the relation &lt;img src="http://l.wordpress.com/latex.php?latex=%7BR_P%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{R_P}" title="{R_P}"&gt; that holds the initial partial assignment that we are going to ask the LFP to extend. In other words, each stage of the LFP is order invariant. It is known that the class of order invariant queries is also Gaifman local [GS00].&lt;/p&gt;
&lt;p&gt;
Unfortunately, it is not true that each stage of the fixed point must be order invariant. In particular, consider the definition of ordering from successor, easily defined by a least fixed point and thus the reason that successor suffices to capture P. The ordering is defined by taking the transitive closure of the successor relation. At each stage, the successor distance is doubled, so in &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Clog+n%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\log n}" title="{\log n}"&gt; stages we have the whole ordering. Note that all these stages contain the order dependent information that is part of the original successor relation. It is true that the final aim of your computation is the SAT property which is order independent. But that definitely does not imply that each stage of the induction is order independent. &lt;/p&gt;
&lt;p&gt;
The other problem is that you restrict your attention to monadic fixed points. You write, &lt;/p&gt;
&lt;p&gt;
“Remark 7.4. The relation being constructed is monadic, and so it does not introduce new edges into the Gaifman graph at each stage of the LFP computation. When we compute a &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt;-ary LFP, we can encode it into a monadic LFP over a polynomially (&lt;img src="http://l.wordpress.com/latex.php?latex=%7Bn%5Ek%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{n^k}" title="{n^k}"&gt;) larger product space, as is done in the canonical structure, for instance, but with the linear order replaced by a weaker successor type relation. Therefore, we can always chose to deal with monadic LFP. This is really a restatement of the transitivity principle for inductive definitions that says that if one can write an inductive definition in terms of other inductively defined relations over a structure, then one can write it directly in terms of the original relations that existed in the structure [Mos74, p. 16].”&lt;/p&gt;
&lt;p&gt;
It is not the case that you can freely assume that your fixed points are monadic. If you actually work on the canonical structure, then you require the multiple arity relations that can take us from a tuple to its individual elements and back again. These would again make the diameter of the whole graph bounded. However, in your proof you do not include these relations. Thus, your restriction to only have successor and to restrict to monadic fixed points is fundamental. In this domain—only monadic fixed points and successor—FO(LFP) does not express all of P! &lt;/p&gt;
&lt;p&gt;
Currently, as I see it, the strongest tool we have in descriptive complexity — rather than the locality theorems — is the Håstad Switching Lemma. Paul Beame and Johan Håstad used this to shown that Mike Sipser’s hierarchy theorem extends all the way to FO[&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Clog+n%2F%5Clog+%5Clog+n%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\log n/\log \log n}" title="{\log n/\log \log n}"&gt;]. As you know, FO(LFP) is the same thing as FO[&lt;img src="http://l.wordpress.com/latex.php?latex=%7Bn%5E%7BO%281%29%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{n^{O(1)}}" title="{n^{O(1)}}"&gt;]—properties expressible by the polynomial iteration of a fixed block of restricted quantifiers. We know that &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cmathsf%7BNC%5E1%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\mathsf{NC^1}}" title="{\mathsf{NC^1}}"&gt; is contained in FO[&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Clog+n%2F%5Clog+%5Clog+n%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\log n/\log \log n}" title="{\log n/\log \log n}"&gt;] and this is tight. Furthermore, L and NL are contained in &lt;img src="http://l.wordpress.com/latex.php?latex=%7BAC%5E1+%3D+FO%5B%5Clog+n%5D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{AC^1 = FO[\log n]}" title="{AC^1 = FO[\log n]}"&gt;, and it remains open whether &lt;img src="http://l.wordpress.com/latex.php?latex=%7BNC%5E1%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{NC^1}" title="{NC^1}"&gt; is equal to NP. A state of the art paper that I very much recommend is Ben Rossman’s result that expressing the existence of a &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt; clique requires &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%2F4%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k/4}" title="{k/4}"&gt; variables in FO, and even in FO[&lt;img src="http://l.wordpress.com/latex.php?latex=%7Bc%5Clog+n%2F%5Clog+%5Clog+n%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{c\log n/\log \log n}" title="{c\log n/\log \log n}"&gt;] for appropriate &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bc%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{c}" title="{c}"&gt;. (In Rossman’s result, as in all results that use the switching lemma, the lower bound is true in the presence not just of order, but of any numeric relations including addition and multiplication.)&lt;/p&gt;
&lt;p&gt;
—Neil&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; Open Problems &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Is Neil right? It seems that the most damaging statement of Neil is:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Thus, your restriction to only have successor and to restrict to monadic fixed points is fundamental. In this domain—only monadic fixed points and successor—FO(LFP) does not express all of P!
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Most of us have focused on the issues of 2-SAT and XOR-SAT compared to &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt;-SAT, but Neil’s comment points out serious flaws in the finite model part. It was the connection of this work with the random structure of &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt;-SAT that excited many of us in the first place. Unless Neil is wrong, it seems that his points are very serious.&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rjlipton.wordpress.com/5260/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rjlipton.wordpress.com/5260/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rjlipton.wordpress.com&amp;amp;blog=6472207&amp;amp;post=5260&amp;amp;subd=rjlipton&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=TrUkzAB_I7Y:CvOqqNTTDK8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=TrUkzAB_I7Y:CvOqqNTTDK8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=TrUkzAB_I7Y:CvOqqNTTDK8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/TrUkzAB_I7Y" height="1" width="1"/&gt;</content><author><name>rjlipton</name></author><gr:likingUser>15876073630747133581</gr:likingUser><gr:likingUser>02438731866835478013</gr:likingUser><gr:likingUser>11329025177477454108</gr:likingUser><gr:likingUser>01556345501933665742</gr:likingUser><gr:likingUser>02452958781060416073</gr:likingUser><gr:likingUser>14963687715837540182</gr:likingUser><gr:likingUser>09804882249682495241</gr:likingUser><gr:likingUser>02096950108266423469</gr:likingUser><gr:likingUser>17609737821761430588</gr:likingUser><gr:likingUser>12653237945694075404</gr:likingUser><source gr:stream-id="feed/http://rjlipton.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://rjlipton.wordpress.com/feed/</id><title type="html">Gödel&amp;#39;s Lost Letter and P=NP</title><link rel="alternate" href="http://rjlipton.wordpress.com" type="text/html" /></source><feedburner:origLink>http://rjlipton.wordpress.com/2010/08/12/fatal-flaws-in-deolalikars-proof/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281606620615"><id gr:original-id="http://rjlipton.wordpress.com/?p=5244">tag:google.com,2005:reader/item/1cbab19a466f8795</id><category term="News" /><category term="P=NP" /><category term="People" /><category term="2-SAT" /><category term="3-SAT" /><category term="P ≠ NP?" /><category term="Proof" /><title type="html">Deolalikar Responds To Issues About His P≠NP Proof</title><published>2010-08-12T02:14:13Z</published><updated>2010-08-12T02:14:13Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/jYbObGvRenw/" type="text/html" /><media:group><media:content url="http://0.gravatar.com/avatar/afaa664a052777146630095c596117b2?s=96&amp;d=identicon&amp;r=G" /><media:content url="http://rjlipton.files.wordpress.com/2010/08/screen-shot-2010-08-11-at-9-58-49-pm.png" /></media:group><content xml:base="http://rjlipton.wordpress.com/" type="html">&lt;p&gt; &lt;font color="”#0066cc?"&gt;&lt;br&gt;
&lt;em&gt; A principle for checking proofs with an application to the proof &lt;/em&gt;&lt;br&gt;
&lt;font color="”#000000?"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rjlipton.files.wordpress.com/2010/08/screen-shot-2010-08-11-at-9-58-49-pm.png"&gt;&lt;img src="http://rjlipton.files.wordpress.com/2010/08/screen-shot-2010-08-11-at-9-58-49-pm.png?w=114&amp;amp;h=118" alt="" title="Screen shot 2010-08-11 at 9.58.49 PM" width="114" height="118"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Vinay Deolalikar is standing by his &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cmathsf%7BP%7D+%5Cneq+%5Cmathsf%7BNP%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\mathsf{P} \neq \mathsf{NP}}" title="{\mathsf{P} \neq \mathsf{NP}}"&gt; claim and proof. He and I have been exchanging e-mails, and as noted in the several comments, he has updated his paper several times. The updates are trying to answer some of the questions raised here and elsewhere. However, the consensus seems to be best summarized by a recent comment here by Terence Tao:  &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
I think there are several levels to the basic question “Is the proof correct?”: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt; Does Deolalikar’s proof, after only minor changes, give a proof that P &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cneq%7D&amp;amp;bg=e8e8e8&amp;amp;fg=000000&amp;amp;s=0" alt="{\neq}" title="{\neq}"&gt; NP?
&lt;li&gt; Does Deolalikar’s proof, after major changes, give a proof that P &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cneq%7D&amp;amp;bg=e8e8e8&amp;amp;fg=000000&amp;amp;s=0" alt="{\neq}" title="{\neq}"&gt; NP?
&lt;li&gt; Does the general proof strategy of Deolalikar (exploiting independence properties in random &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=e8e8e8&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt;-SAT or similar structures) have any hope at all of establishing non-trivial complexity separation results?
&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;
After all the collective efforts seen here and elsewhere, it now appears (though it is perhaps still not absolutely definitive) that the answer to #1 is “No” (as seen for instance in the issues documented in the &lt;a href="http://michaelnielsen.org/polymath1/index.php?title=Deolalikar&amp;#39;s_P!=NP_paper"&gt;wiki&lt;/a&gt;), and the best answer to #2 we currently have is “Probably not, unless substantial new ideas are added.” But I think the question #3 is still not completely resolved, and still worth pursuing (though not at the hectic internet speed of the last few days.)
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
Today I wish to talk about something other than &lt;b&gt;the&lt;/b&gt; P&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cneq%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\neq}" title="{\neq}"&gt;NP proof. But it is hard to get back to other issues right now. I do agree with Tao that we need to move on to other topics, and let the proof checking continue at a more relaxed pace.&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
I would like to share a proof searching trick that I have always used; it must be well known, but I do not know a name for it. The method is quite relevant to the emerging biggest issue in the correctness of Vinay’s proof. &lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; The Principle &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Suppose that Alice is trying to prove &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X}" title="{X}"&gt;, some statement that Bob is interested in seeing proved. Alice is working hard trying to understand the problem: she reads the known literature, she talks to experts, she tries some examples, and she thinks hard about the problem.&lt;/p&gt;
&lt;p&gt;
Finally, after months of hard work, Alice has an outline of a proof. She has not checked all the details, but she is quite excited about the potential. She thinks she has her proof. Imagine that she is about to go to explain the proof to Bob.&lt;/p&gt;
&lt;p&gt;
Just before she does this, Alice notices the following. Let’s call her proof &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Ccal+P%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\cal P}" title="{\cal P}"&gt; of the statement &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X}" title="{X}"&gt;. She notices that the same proof—perhaps slightly changed—will also prove &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%27%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X&amp;#39;}" title="{X&amp;#39;}"&gt;. In a sense she sees that
&lt;p align="center"&gt;&lt;img src="http://l.wordpress.com/latex.php?latex=%5Cdisplaystyle++%5Cbegin%7Barray%7D%7Brcl%7D++%09%7B%5Ccal+P%7D+%26%5CRightarrow%26+X+%5C%5C+%09%7B%5Ccal+P%27%7D+%26%5CRightarrow%26+X%27+%5Cend%7Barray%7D+&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="\displaystyle  \begin{array}{rcl}  	{\cal P} &amp;amp;\Rightarrow&amp;amp; X \\ 	{\cal P&amp;#39;} &amp;amp;\Rightarrow&amp;amp; X&amp;#39; \end{array} " title="\displaystyle  \begin{array}{rcl}  	{\cal P} &amp;amp;\Rightarrow&amp;amp; X \\ 	{\cal P&amp;#39;} &amp;amp;\Rightarrow&amp;amp; X&amp;#39; \end{array} "&gt;&lt;/p&gt;
&lt;p&gt; where &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Ccal+P%27%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\cal P&amp;#39;}" title="{\cal P&amp;#39;}"&gt; is a slight variation of her proof &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Ccal+P%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\cal P}" title="{\cal P}"&gt;. &lt;/p&gt;
&lt;p&gt;
Here is the principle: this is &lt;b&gt;bad&lt;/b&gt;, very bad, if &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%27%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X&amp;#39;}" title="{X&amp;#39;}"&gt; is known to be false. Even if &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%27%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X&amp;#39;}" title="{X&amp;#39;}"&gt; is an open problem, then this &lt;i&gt;could&lt;/i&gt; be an issue. The reason is Alice felt she had a nice proof &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Ccal+P%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\cal P}" title="{\cal P}"&gt;, but did not think her method was powerful enough to solve the hard open problem &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%27%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X&amp;#39;}" title="{X&amp;#39;}"&gt;. &lt;/p&gt;
&lt;p&gt;
I use this principle—unfortunately all too often—to shoot down my own proof attempts. More than I care to admit, I find a clever “proof” of something, but then realize by the principle it will prove too much. It will either prove something dead-wrong or something that is way too hard for my weak method. &lt;/p&gt;
&lt;p&gt;
Here are two simple examples of this principle: one imaginary and one real.&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cbullet+%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\bullet }" title="{\bullet }"&gt; Suppose Alice is working on the Riemann Hypothesis. This famous problem says that all the &lt;i&gt;non-trivial&lt;/i&gt; zeroes of the zeta function &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Czeta%28z%29%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\zeta(z)}" title="{\zeta(z)}"&gt; must lie on the line &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5CRe%28z%29+%3D+1%2F2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\Re(z) = 1/2}" title="{\Re(z) = 1/2}"&gt;. The zeta function has so called trivial zeroes at
&lt;p align="center"&gt;&lt;img src="http://l.wordpress.com/latex.php?latex=%5Cdisplaystyle++-2%2C+-4%2C+-6%2C+%5Cdots+&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="\displaystyle  -2, -4, -6, \dots " title="\displaystyle  -2, -4, -6, \dots "&gt;&lt;/p&gt;
&lt;p&gt; She proves that all the non-trivial zeroes of the zeta function must have a left-to-right symmetry about the line &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5CRe%28z%29+%3D+1%2F2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\Re(z) = 1/2}" title="{\Re(z) = 1/2}"&gt;. She then uses this cool lemma to solve the Riemann Hypothesis. She is overjoyed. But after checking her argument she discovers that her cool lemma never used the fact that the zeroes were non-trivial. Clearly, this is a problem, since it would imply that the zeta function has zeroes with real part greater than &lt;img src="http://l.wordpress.com/latex.php?latex=%7B1%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{1}" title="{1}"&gt;. This is false and so her lemma has to be re-thought &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cdots%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\dots}" title="{\dots}"&gt;	&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cbullet+%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\bullet }" title="{\bullet }"&gt; I have worked on a much less important &lt;a href="http://rjlipton.wordpress.com/2009/07/18/graphs-permutations-characters-and-logspace/"&gt;problem&lt;/a&gt;, but one where the principle played a role. I had an idea for proving a certain complexity theorem—nothing like P&lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cneq%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\neq}" title="{\neq}"&gt;NP—but still an open problem. I had discovered a partial result based on a “trick” that I had discovered. I was pretty excited and quickly thought I could generalize my trick to solve the full problem. Alas, I saw that the principle applied here: if I could do what I planned, then my proof would yield a result that would violate a known complexity theorem. The problem I worked on is still open. Oh well.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; The Proof and The Principle &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
A number of researchers—including Avi Wigderson and Ryan Williams—have pointed out that Vinay’s proof could fall to the above principle. They do not state their concern in this way, but it is essentially a potential violation of the principle.&lt;/p&gt;
&lt;p&gt;
In particular their concern is how does the proof tell &lt;img src="http://l.wordpress.com/latex.php?latex=%7B2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{2}" title="{2}"&gt;-SAT from &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k}" title="{k}"&gt;-SAT? If Vinay’s “proof” would work as well on both these types of SAT problems, then there is a fundamental difficulty. Of course, &lt;img src="http://l.wordpress.com/latex.php?latex=%7B2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{2}" title="{2}"&gt;-SAT is long known to be in polynomial time, so if his proof does not have a critical step, lemma, or place where &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%3E2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k&amp;gt;2}" title="{k&amp;gt;2}"&gt; is used in an essential way, then it has problems. &lt;/p&gt;
&lt;p&gt;
I still do not know for sure what to conclude about this. But this issue is definitely one of the biggest ones that we have seen raised. It is not sufficient to rely on some results having been proved for &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%3E2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k&amp;gt;2}" title="{k&amp;gt;2}"&gt; or &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk+%5Cgeq+9%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k \geq 9}" title="{k \geq 9}"&gt;—the proof must show how this restriction is used in an essential manner. This may require ensuring that the proof strategy &lt;i&gt;can’t&lt;/i&gt; be adapted to properties &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%7B%5Ccal+P%27%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{{\cal P&amp;#39;}}" title="{{\cal P&amp;#39;}}"&gt; expressible in the same terms, which would prove an &lt;img src="http://l.wordpress.com/latex.php?latex=%7BX%27%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{X&amp;#39;}" title="{X&amp;#39;}"&gt; known to be false.&lt;/p&gt;
&lt;p&gt;
There is a longer discussion of this and related issues with his proof at the &lt;a href="http://michaelnielsen.org/polymath1/index.php?title=Deolalikar&amp;#39;s_P!%3DNP_paper#Issues_with_random_k-SAT"&gt;wiki page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt; Deolalikar’s Answer &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Vinay &lt;b&gt;has&lt;/b&gt; just responded directly to a number of us in an attempt to explain how his work does use &lt;img src="http://l.wordpress.com/latex.php?latex=%7Bk%3E2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{k&amp;gt;2}" title="{k&amp;gt;2}"&gt;. It is still a bit early to see if his explanation is sufficient, but he does state some technical differences between &lt;img src="http://l.wordpress.com/latex.php?latex=%7B2%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{2}" title="{2}"&gt;-SAT and &lt;img src="http://l.wordpress.com/latex.php?latex=%7B3%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{3}" title="{3}"&gt;-SAT that he claims to exploit. I have communicated directly with him to ask that he would allow his comments to be made available to the community. He has agreed. (I made slight edits to make the formulas compile into LaTeX.)&lt;/p&gt;
&lt;p&gt;&lt;p align="center"&gt;&lt;img src="http://l.wordpress.com/latex.php?latex=%5Cdisplaystyle+%5CS+&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="\displaystyle \S " title="\displaystyle \S "&gt;&lt;/p&gt;
&lt;p&gt;
Let me try to answer the question, which is “Why does my proof fail for 2-SAT, known to be in P.” The proof requires that the solution space of the CSP be “sufficiently hard to describe.” By that we mean, not possible to describe with fewer than &lt;img src="http://l.wordpress.com/latex.php?latex=%7BO%282%5E%7B%5Cmathsf%7Bpoly%7D+%5Clog+n%7D%29%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{O(2^{\mathsf{poly} \log n})}" title="{O(2^{\mathsf{poly} \log n})}"&gt; independent parameters. XORSAT does not violate this since its linearity allows simple specification. 2-SAT does not violate this since it does not enter the d1RSB phase. In contrast, 9-SAT onwards do enter the d1RSB phase, and in the absence of properties such as linearity, it is not possible to specify the joint distribution of the covariates in this phase with &lt;img src="http://l.wordpress.com/latex.php?latex=%7BO%282%5E%7B%5Cmathsf%7Bpoly%7D+%5Clog+n%7D%29%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{O(2^{\mathsf{poly} \log n})}" title="{O(2^{\mathsf{poly} \log n})}"&gt; independent parameters. However, both range and value limited interaction models that underlie LFP algorithms can only furnish &lt;img src="http://l.wordpress.com/latex.php?latex=%7BO%282%5E%7B%5Cmathsf%7Bpoly%7D+%5Clog+n%7D%29%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{O(2^{\mathsf{poly} \log n})}" title="{O(2^{\mathsf{poly} \log n})}"&gt; such independent parameters to describe their solution spaces. Hence the contradiction. I think this is really the major point. There are many details in the various chapters. I wrote Chapter 3 yesterday to discuss some of this. I discuss the significance of the poly &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Clog+n%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\log n}" title="{\log n}"&gt; quantity etc. &lt;/p&gt;
&lt;p&gt;&lt;p align="center"&gt;&lt;img src="http://l.wordpress.com/latex.php?latex=%5Cdisplaystyle++%5CS+&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="\displaystyle  \S " title="\displaystyle  \S "&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; Open Problems &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Of course the key questions remain: Is the proof correct? Or can it be fixed? &lt;/p&gt;
&lt;p&gt;
Perhaps the last question is what did we learn from the last few hectic days. I think I learned three things: First, that the community is extremely interested in our basic question, P=NP? I find this very positive. I was shocked at the tremendous interest that was generated.&lt;/p&gt;
&lt;p&gt;
Second, I like that the community reacted in a mostly positive and supportive manner. I think we owe Vinay a thanks, no matter what the final outcome is. He has raised some interesting connections that, as Tao says, may be useful in the future. He also showed how people can ask hard questions, and how the community can be helpful. Yes, there were some tough comments here and elsewhere, but for the most part I think the experience has been positive.&lt;/p&gt;
&lt;p&gt;
Finally, I realized that it is not possible to keep up the hectic pace of the last few days for much longer. I hope we helped, I hope we were always positive, and I hope the work here in trying to resolve this exciting event has been a positive contribution. I thank you all for your kind interest.&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rjlipton.wordpress.com/5244/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rjlipton.wordpress.com/5244/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rjlipton.wordpress.com&amp;amp;blog=6472207&amp;amp;post=5244&amp;amp;subd=rjlipton&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&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;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=jYbObGvRenw:4Fg_AuX5-PU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=jYbObGvRenw:4Fg_AuX5-PU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=jYbObGvRenw:4Fg_AuX5-PU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/jYbObGvRenw" height="1" width="1"/&gt;</content><author><name>rjlipton</name></author><gr:likingUser>15876073630747133581</gr:likingUser><gr:likingUser>02438731866835478013</gr:likingUser><gr:likingUser>11329025177477454108</gr:likingUser><gr:likingUser>15375386547155080234</gr:likingUser><gr:likingUser>07113779163834347012</gr:likingUser><gr:likingUser>06089555672262602987</gr:likingUser><gr:likingUser>11313715401375862926</gr:likingUser><gr:likingUser>03232723812782507964</gr:likingUser><gr:likingUser>14068746409181604749</gr:likingUser><gr:likingUser>11574988931733360109</gr:likingUser><gr:likingUser>15054667702006760960</gr:likingUser><gr:likingUser>01401665302629790652</gr:likingUser><gr:likingUser>00233066534072111766</gr:likingUser><gr:likingUser>09724709818223518488</gr:likingUser><gr:likingUser>14414652479633698351</gr:likingUser><gr:likingUser>17609737821761430588</gr:likingUser><gr:likingUser>14889001123443174992</gr:likingUser><gr:likingUser>11051691123993629533</gr:likingUser><gr:likingUser>16214422446141811781</gr:likingUser><source gr:stream-id="feed/http://rjlipton.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://rjlipton.wordpress.com/feed/</id><title type="html">Gödel&amp;#39;s Lost Letter and P=NP</title><link rel="alternate" href="http://rjlipton.wordpress.com" type="text/html" /></source><feedburner:origLink>http://rjlipton.wordpress.com/2010/08/11/deolalikar-responds-to-issues-about-his-p%e2%89%a0np-proof/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281440335999"><id gr:original-id="tag:typepad.com,2003:post-6a00d83451be8f69e20133f2cdf4b9970b">tag:google.com,2005:reader/item/17c0e37f75b7f44a</id><category term="EMC Viewpoint" scheme="http://www.sixapart.com/ns/types#category" /><category term="Private Clouds" scheme="http://www.sixapart.com/ns/types#category" /><category term="Technology Debates" scheme="http://www.sixapart.com/ns/types#category" /><title type="html">Of Mainframes And Clouds</title><published>2010-08-02T20:07:20Z</published><updated>2010-08-02T20:07:20Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/WK6nsicJMZk/of-mainframes-and-clouds.html" type="text/html" /><link rel="replies" href="http://chucksblog.emc.com/chucks_blog/2010/08/of-mainframes-and-clouds.html" type="text/html" /><content xml:base="http://chucksblog.emc.com/chucks_blog/" xml:lang="en-US" type="html">&lt;div&gt;When I speak in front of audiences, I usually try and push the boundaries a bit by being intentionally controversial.&lt;br&gt;&lt;br&gt;Today was no exception.  I spoke at a partner event (GreenPages) in front of about 100 people about the journey to the private cloud.  Some of my comments &lt;a href="http://www.crn.com/storage/226500084"&gt;even made it to CRN in real-time&lt;/a&gt; -- scary thought.&lt;br&gt;&lt;br&gt;At one point, I asked if anyone in the room had done &amp;quot;hard time on mainframes&amp;quot;.  And, as usual, a few hands went up.  &lt;br&gt;&lt;br&gt;For these people, the current move to cloud architectures is going to give many of them a strange sense of deja-vu ...

&lt;br&gt;&lt;br&gt;&lt;strong&gt;To Begin With&lt;/strong&gt;&lt;br&gt;&lt;br&gt;In &lt;strong&gt;&lt;em&gt;Chuck&amp;#39;s Oversimplified Technology Dictionary&lt;/em&gt;&lt;/strong&gt;, a &amp;quot;cloud&amp;quot; is any IT environment that&amp;#39;s (a) built differently (dynamic pools of shared resources) (b) operated differently (end-to-end service delivery vs. individual silos) and (c) consumed differently.&lt;br&gt;&lt;br&gt;Going a bit farther, a &amp;quot;private cloud&amp;quot; is a cloud that IT controls -- regardless of whether the resources run internally or externally.  &lt;br&gt;&lt;br&gt;However, this sort of definition doesn&amp;#39;t prescribe things like processor technologies (even though there&amp;#39;s a strong case to be made for x86) or hypervisor technology (ditto strong case for VMware) and so on.&lt;br&gt;&lt;br&gt;Simply put, any set of technologies that can get you there ought to qualify as &amp;quot;cloud&amp;quot;, right?  &lt;br&gt;&lt;br&gt;Indeed, I wrote a post a while back (&amp;quot;&lt;a href="http://chucksblog.emc.com/chucks_blog/2010/03/back-to-the-future.html"&gt;Back To The Future&lt;/a&gt;&amp;quot;) where I compared many aspects of our idealized cloud world with the legacy established by mainframes.  I drew some predictable fire for that one, but I still stand by my core assertions.&lt;br&gt;&lt;br&gt;Much of the cloud discussion rests on the choice of processor architecture -- as no one has been overly successful in combining multiple incompatible processor architectures into a single, homogeneous pool of virtualized resources.  &lt;br&gt;&lt;br&gt;Processors are one of the key areas that people are going to have to standardize on when they consider their next-gen environments. And right now, all signs point to two clear architectural winners going forward: &lt;em&gt;the x86 processor, and z/OS.&lt;/em&gt;  &lt;br&gt;&lt;br&gt;&lt;strong&gt;The Narrowing Of The Processor World&lt;/strong&gt;&lt;br&gt;&lt;br&gt;During the course of my career, I&amp;#39;ve been exposed to a dozen or so of processor technologies -- Motorola, MIPS, Alpha -- the list goes on and on.  &lt;br&gt;&lt;br&gt;No one talks seriously about &lt;a href="http://www.theregister.co.uk/2010/05/12/intel_xeon_server_forecast/"&gt;Itanium&lt;/a&gt; any more, &lt;a href="http://www.theregister.co.uk/2010/06/04/fujitsu_oracle_sparc_server/"&gt;SPARC&lt;/a&gt;&amp;#39;s role in Oracle&amp;#39;s grand plans is decidedly unclear at present, and -- yes -- IBM keeps swinging away at Power -- but you&amp;#39;ve got to wonder how long they&amp;#39;re going to keep that up -- especially with a wholesale migration of the IT ecosystem to x86 binaries.&lt;br&gt;&lt;br&gt;Some people just assume that all clouds will be built on x86 architectures, and that&amp;#39;s that.  &lt;em&gt;But I would beg to differ ...&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;strong&gt;So, What About Mainframes?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;Anyone who blithely proclaims &amp;quot;mainframes are dead&amp;quot; probably hasn&amp;#39;t spent much time in larger IT shops.  &lt;em&gt;The people who make those claims are more likely to be gone before the mainframes are ... :-)&lt;br&gt;&lt;/em&gt;&lt;br&gt;As far as I can see, people continue to use mainframes for three primary reasons: (1) they&amp;#39;re locked in by legacy applications, (2) they handle really scary workloads very well, and (3) run properly, they can be an incredibly efficient way of delivering IT services at scale.&lt;br&gt;&lt;br&gt;#1 is unfortunate, but we can&amp;#39;t do much about that.  However, #2 and #3 deserve a bit more discussion.&lt;br&gt;&lt;br&gt;So much of cloud is about scale-out -- relatively uniform workloads that are easily divisible into more manageable tasks.  Mainframes also provide scale-up -- the ability to run enormous single-threaded tasks -- at blinding performance.  &lt;br&gt;&lt;br&gt;Yes, many of those workloads could be re-architected to be more amenable to scale-out architectures, but that&amp;#39;s an expensive proposition in itself.  And, of course, x86 and associated technologies keep pushing the boundaries with every tick and tock.&lt;br&gt;&lt;br&gt;Where I think the mainframe approach clearly shines is in the maturity of the integration and associated operational processes.  And there are a lot of great lessons to be learned by newer cloud practitioners from their mainframe elders.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Thinking About Those Processes ...&lt;/strong&gt;&lt;br&gt;&lt;br&gt;Imagine a very modern mainframe, perhaps running thousands of Linux VMs.&lt;br&gt;&lt;br&gt;&lt;em&gt;Self-service provisioning for end users?  Integrated automation?  Monitoring end-to-end service delivery across multiple elements? &lt;/em&gt; Been around for years, thank you -- nothing new here.  &lt;br&gt;&lt;br&gt;&lt;em&gt;Sweating hardware and software assets to the n-th degree?  Extremely efficient cost-to-serve? &lt;/em&gt; Old hat, thank you.&lt;br&gt;&lt;br&gt;&lt;em&gt;Chargeback?  Oversubscription?  Aggregate capacity planning?  Integrated security and GRC?  Advanced backup and replication?&lt;/em&gt;  Plenty of real-world examples to choose from -- mainframe shops have been doing this for years.&lt;br&gt;&lt;br&gt;I clearly remember getting my first chargeback bill from a mainframe service provider way back in 1980.  One big number, followed by reams of overly precise usage detail on CPU/minutes, IOs, storage, memory, etc.  &lt;br&gt;&lt;br&gt;&lt;em&gt;Of course, it came to me on green-bar paper :-)&lt;/em&gt;&lt;br&gt;&lt;br&gt;Implementing a private cloud with a combination of internal and external resources?  Moving workloads around?  Mainframe shops have been doing this for many years, albeit with comparatively expensive technology.&lt;br&gt;&lt;br&gt;&lt;strong&gt;The New Economics&lt;/strong&gt;&lt;br&gt;&lt;br&gt;In many ways, the current private cloud discussion might be construed as a re-framing of mainframe concepts, only this time with a healthy helping of the new tech economics: commercial  hardware, plentiful bandwidth and open source application software.&lt;br&gt;&lt;br&gt;Maybe the supporting technology is rather new, but the underlying cloud operational processes that deliver all the magic &lt;em&gt;really aren&amp;#39;t all that new&lt;/em&gt; -- especially if you&amp;#39;ve been around in some the larger mainframe shops.&lt;br&gt;&lt;strong&gt;&lt;br&gt;So, Where Am I Going With All Of This?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;Glad you asked ...&lt;/em&gt;&lt;br&gt;&lt;br&gt;A rather innocuous press release from EMC announced &lt;a href="http://finance.yahoo.com/news/EMC-Announces-Support-for-New-prnews-3523464782.html?x=0&amp;amp;.v=1"&gt;several important capabilities&lt;/a&gt; we&amp;#39;ve added to our historical mainframe support.&lt;br&gt;&lt;br&gt;Things like full storage API access from Linux VMs under z/OS.  A spiffy new non-disruptive migration capability.  Dedupe for mainframe backup.  FICON enhancements.  And a bunch more.&lt;br&gt;&lt;br&gt;Much of the press release discusses the relationship between mainframes and private clouds.  You might be tempted to dismiss the prose as so much marketing fluff, but it&amp;#39;s not -- some of the most advanced private cloud implementations today are mainframes -- and this is likely to continue into the future.&lt;br&gt;&lt;br&gt;Indeed, EMC&amp;#39;s mainframe DNA impacts how we interpret terms like &amp;quot;non-disruptive&amp;quot; and &amp;quot;mission critical&amp;quot; and &amp;quot;high availability&amp;quot; and a lot else as well.  I think that one of the reasons so many shops depend on EMC for their most important apps is that we understand serious IT -- regardless of whether it&amp;#39;s z/OS, UNIX or an uber-large VMware farm on the floor.&lt;br&gt;&lt;br&gt;There&amp;#39;s another important message here as well: the cool things we continue to do for x86/hypervisor stacks, we also intend to do in the z/OS world.&lt;br&gt;&lt;br&gt;&lt;em&gt;Because mainframes aren&amp;#39;t going away any time soon ...&lt;br&gt;&lt;/em&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;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=WK6nsicJMZk:Ej4H2zMorQ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=WK6nsicJMZk:Ej4H2zMorQ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=WK6nsicJMZk:Ej4H2zMorQ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/WK6nsicJMZk" height="1" width="1"/&gt;</content><author><name>Chuck Hollis</name></author><source gr:stream-id="feed/http://chucksblog.emc.com/chucks_blog/atom.xml"><id>tag:google.com,2005:reader/feed/http://chucksblog.emc.com/chucks_blog/atom.xml</id><title type="html">Chuck&amp;#39;s Blog</title><link rel="alternate" href="http://chucksblog.emc.com/chucks_blog/" type="text/html" /></source><feedburner:origLink>http://chucksblog.emc.com/chucks_blog/2010/08/of-mainframes-and-clouds.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281395091509"><id gr:original-id="http://bartoszmilewski.wordpress.com/?p=1387">tag:google.com,2005:reader/item/829f3b2fa5781683</id><category term="Chapel" /><category term="Concurrency" /><category term="Fortress" /><category term="Multithreading" /><category term="Parallelism" /><category term="Programming" /><category term="X10" /><title type="html">Beyond Locks and Messages: The Future of Concurrent Programming</title><published>2010-08-02T19:02:43Z</published><updated>2010-08-02T19:02:43Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/5O11LSHjm2g/" type="text/html" /><media:group><media:content url="http://0.gravatar.com/avatar/c018f213204496b4bbf481e7c8e6c15c?s=96&amp;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif" /></media:group><content xml:base="http://bartoszmilewski.wordpress.com/" type="html">&lt;p&gt;Concurrent programming has been around for quite some time (almost half a century), but it was mostly accessible to the highest ranks of the programming priesthood. This changed when, in the 2000s, concurrency entered prime time, prodded by the ubiquity of multicore processors. The industry can no longer afford to pay for hand-crafted hand-debugged concurrent solutions. The search is on for programming paradigms that lead to high productivity and reliability. &lt;/p&gt;
&lt;p&gt;Recently DARPA created its HPCS, &lt;a href="http://www.highproductivity.org/"&gt;High Productivity Computing Systems&lt;/a&gt;, program (notice the stress on &lt;i&gt;productivity&lt;/i&gt;), and is funding research that lead to, among other things, the development of new programming languages that support concurrency. I had a peek at those languages and saw some very interesting developments which I’d like to share with you. But first let me give you some perspective on the current state of concurrency.&lt;/p&gt;
&lt;h1&gt;Latency vs. Parallel Performance&lt;/h1&gt;
&lt;p&gt;We are living in the world of multicores and our biggest challenge is to make use of parallelism to speed up the execution of programs. As Herb Sutter famously observed, we can no longer count on the speed of processors increasing exponentially. If we want our programs to run faster we have to find ways to take advantage of the exponential increase in the number of available processors. &lt;/p&gt;
&lt;p&gt;Even before multicores, concurrency had been widely used to reduce latencies and to take advantage of the parallelism of some peripherals (e.g., disks). Low latency is particularly important in server architectures, where you can’t wait for the completion of one request before you pick up the next one.&lt;/p&gt;
&lt;p&gt;Initially, the same approach that was used to reduce latency–creating threads and using message-passing to communicate between them–has been used to improve parallel performance. It worked, but it turned out to be extremely tedious as a programming paradigm. &lt;/p&gt;
&lt;p&gt;There will always be a niche for client/server architectures, which are traditionally based on direct use of threads and message passing. But in this post I will limit myself to strategies for maximizing program performance using parallelism. These strategies are becoming exponentially more important with time. &lt;/p&gt;
&lt;h1&gt;Threads? Who Needs Threads?&lt;/h1&gt;
&lt;p&gt;There are two extremes in multithreading. One is to make each thread execute different code–they all have different &lt;i&gt;thread functions&lt;/i&gt; (MPMD–Multiple Programs Multiple Data, or even MPSD–Multiple Programs Single Data). This approach doesn’t scale very well with the number of cores–after all there is a fixed number of thread functions in one program no matter how many cores it’s running on. &lt;/p&gt;
&lt;p&gt;The other extreme is to spawn many threads that essentially do the same thing (SPMD, Single Program Multiple Data). On the very extreme we have SIMD (Single Instruction Multiple Data), the approach taken, e.g., graphics accelerators. There, multiple cores execute the same instructions in lockstep. The trick is to start them with slightly different initial states and data sets (the MD part), so they all do independently useful work. With SPMD, you don’t have to write lots of different thread functions and you have a better chance at scaling with the number of cores.&lt;/p&gt;
&lt;p&gt;There are two kinds of SPMD. When you start with a large data set and split it into smaller chunks and create separate threads to process each chunk, it’s called &lt;i&gt;data-driven&lt;/i&gt; parallelism. If, on the other hand, you have a loop whose iterations don’t depend on each other (no data dependencies), and you create multiple threads to process individual iterations (or groups thereof), it’s called &lt;i&gt;control-driven&lt;/i&gt; parallelism. &lt;/p&gt;
&lt;p&gt;These types of parallelism become more and more important because they allow programs to be written independent of the number of available cores. And, more importantly, they can be partially automated (see my blog on &lt;a href="http://bartoszmilewski.wordpress.com/2010/05/11/parallel-programming-with-hints/"&gt;semi-implicit parallelism&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;In the past, to explore parallelism, you had to create your own thread pools, assign tasks to them, balance the loads, etc., &lt;i&gt;by hand&lt;/i&gt;. Having this capacity built into the language (or a library) takes your mind off the gory details. You gain productivity not by manipulating threads but by identifying the potential for parallelism and letting the compiler and the runtime take care of the details. &lt;/p&gt;
&lt;p&gt;In &lt;i&gt;task-driven&lt;/i&gt; parallelism, the programmer is free to pick arbitrary granularity for potential parallelizability, rather than being forced into the large-grain of system threads. As always, one more degree of indirection solves the problem. The runtime may chose to multiplex tasks between threads and implement work stealing queues, like it’s done in Haskell, &lt;a href="http://msdn.microsoft.com/en-us/library/dd460717.aspx"&gt;TPL&lt;/a&gt;, or &lt;a href="http://www.threadingbuildingblocks.org"&gt;TBB&lt;/a&gt;. Programming with tasks rather than threads is also less obtrusive, especially if it has direct support in the language. &lt;/p&gt;
&lt;h1&gt;Shared Memory or Message Passing?&lt;/h1&gt;
&lt;p&gt;Threads share memory, so it’s natural to use shared memory for communication between threads. It’s fast but, unfortunately, plagued with data races. To avoid races, access to shared (mutable) memory must be synchronized. Synchronization is usually done using locks (critical sections, semaphores, etc.). It’s up to the programmer to come up with locking protocols that eliminate races and don’t lead to deadlocks. This, unfortunately, is hard, very hard. It’s definitely not a high-productivity paradigm. &lt;/p&gt;
&lt;p&gt;One way to improve the situation is to hide the locking protocols inside message queues and switch to message passing (MP). The programmer no longer worries about data races or deadlocks. As a bonus, MP scales naturally to distributed, multi-computer, programming. Erlang is the prime example of a programming language that uses MP exclusively as its concurrency paradigm. So why isn’t everybody happy with just passing messages?&lt;/p&gt;
&lt;p&gt;Unfortunately not all problems lend themselves easily to MP solutions–in particular, data driven parallelism is notoriously hard to express using message passing. And then there is the elephant in the room–inversion of control. &lt;/p&gt;
&lt;p&gt;We think linearly and we write (and read) programs linearly–line by line. The more non-linear the program gets, the harder it is to design, code, and maintain it (gotos are notorious for delinearizing programs). We can pretty easily deal with some of the simpler MP protocols–like the synchronous one. You send a message and wait for the response. In fact object oriented programming is based on such a protocol–in the Smalltalk parlance you don’t “call” a method, you “send a message” to an object. Things get a little harder when you send an asynchronous message, then do some other work, and finally “force” the answer (that’s how &lt;a href="http://bartoszmilewski.wordpress.com/2009/03/03/broken-promises-c0x-futures/"&gt;futures&lt;/a&gt; work); although that’s still manageable. But if you send a message to one thread and set up a handler for the result in another, or have one big &lt;code&gt;receive&lt;/code&gt; or &lt;code&gt;select&lt;/code&gt; statement at the top to process heterogeneous messages from different sources, you are heading towards the land of spaghetti. If you’re not careful, your program turns into a collection of handlers that keep firing at random times. You are no longer controlling the flow of execution; it’s the flow of messages that’s controlling you. Again, programmer productivity suffers. (Some &lt;a href="http://hpcs.cs.umd.edu/fileadmin/papers/sc05hpscs.pdf"&gt;research&lt;/a&gt; shows that the total effort to write an MPI application is significantly higher than that required to write a shared-memory version of it.)&lt;/p&gt;
&lt;p&gt;Back to shared memory, this time without locks, but with transactional support. STM, or Software Transactional Memory, is a relatively new paradigm that’s been successfully implemented in Haskell, where the type system makes it virtually fool-proof. So far, implementations of STM in other languages haven’t been as successful, mostly because of problems with performance, isolation, and I/O. But that might change in the future–at least that’s the hope. &lt;/p&gt;
&lt;p&gt;What is great about STM is the ease of use and reliability. You access shared memory, either for reading of writing, within &lt;i&gt;atomic&lt;/i&gt; blocks. All code inside an atomic block executes as if there were no other threads, so there’s no need for locking. And, unlike lock-based programming, STM scales well. &lt;/p&gt;
&lt;p&gt;There is a classic STM example in which, within a single atomic block, money is transferred between two bank accounts that are concurrently accessed by other threads. This is very hard to do with traditional locks, since you must lock both accounts &lt;i&gt;before&lt;/i&gt; you do the transfer. That forces you not only to expose those locks but also puts you in risk of deadlocks. &lt;/p&gt;
&lt;p&gt;As far as programmer productivity goes, STM is a keeper.&lt;/p&gt;
&lt;h1&gt;Three HPCS Languages&lt;/h1&gt;
&lt;p&gt;Yesterday’s supercomputers are today’s desktops and tomorrow’s phones. So it makes sense to look at the leading edge in supercomputer research for hints about the future. As I mentioned in the introduction, there is a well-funded DARPA program, HPCS, to develop concurrent systems. There were three companies in stage 2 of this program, and each of them decided to develop a new language:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cray: &lt;a href="http://chapel.cray.com/"&gt;Chapel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IBM: &lt;a href="http://x10-lang.org/"&gt;X10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sun: &lt;a href="http://projectfortress.sun.com/Projects/Community"&gt;Fortress&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(Sun didn’t get to the third stage, but Fortress is still under development.) &lt;/p&gt;
&lt;p&gt;I looked at all three languages and was surprised at how similar they were. Three independent teams came up with very similar solutions–that can’t be a coincidence. For instance, all three adopted the shared address space abstraction. Mind you, those languages are supposed to cover a large area: from single-computer multicore programming (in some cases even on an SIMD graphics processor) to distributed programming over huge server farms. You’d think they’d be using message passing, which scales reasonably well between the two extremes. And indeed they do, but without exposing it to the programmer. Message passing is a hidden implementation detail. It’s considered too low-level to bother the programmer with. &lt;/p&gt;
&lt;h2&gt;Running on PGAS&lt;/h2&gt;
&lt;p&gt;All three HPCS languages support the shared address space abstraction through some form of PGAS, Partitioned Global Address Space. PGAS provides a unified way of addressing memory across machines in a cluster of computers. The global address space is partitioned into various &lt;i&gt;locales&lt;/i&gt; (&lt;i&gt;places&lt;/i&gt; in X10 and &lt;i&gt;regions&lt;/i&gt; in Fortress) corresponding to local address spaces of processes and computers. If a thread tries to access a memory location within its own locale, the access is direct and shared between threads of the same locale. If, on the other hand, it tries to access a location in a different locale, messages are exchanged behind the scenes. Those could be inter-process messages on the same machine, or network messages between computers. Obviously, there are big differences in performance between local and remote accesses. Still, they may look the same from the programmer’s perspective. It’s just one happy address space. &lt;/p&gt;
&lt;p&gt;By now you must be thinking: “What? I have no control over performance?” That would be a bad idea indeed. Don’t worry, the control is there, either explicit (locales are addressable) or in the form of &lt;i&gt;locality awareness&lt;/i&gt; (affinity of code and data) or through distributing your data in data-driven parallelism. &lt;/p&gt;
&lt;p&gt;Let’s talk about data parallelism. Suppose you have to process a big 2-D array and have 8 machines in your cluster. You would probably split the array into 8 chunks and spread them between the 8 locales. Each locale would take care of its chunk (and possibly some marginal areas of overlap with other chunks). If you’re expecting your program to also run in other cluster configurations, you’d need more intelligent partitioning logic. In Chapel, there is a whole embedded language for partitioning &lt;i&gt;domains&lt;/i&gt; (index sets) and specifying their &lt;i&gt;distribution&lt;/i&gt; among locales.&lt;/p&gt;
&lt;p&gt;To make things more concrete, let’s say you want to distribute a (not so big) 4×8 matrix among currently available locales by splitting it into blocks and mapping each block to a locale. First you want to define a distribution–the prescription of how to distribute a block of data between locales. Here’s the relevant code in Chapel:&lt;/p&gt;
&lt;pre&gt;const &lt;span&gt;Dist&lt;/span&gt; = new &lt;span&gt;dmap&lt;/span&gt;(new Block(boundingBox=[1..4, 1..8]));&lt;/pre&gt;
&lt;p&gt;A &lt;code&gt;Block&lt;/code&gt; distribution is created with a bounding rectangle of dimension 4×8. This block is passed as an argument to the constructor of a domain map. If, for instance, the program is run on 8 locales, the block will be mapped into 8 2×2 regions, each assigned to a different locale. Libraries are supposed to provide many different distributions–block distribution being the simplest and the most useful of them.&lt;/p&gt;
&lt;p&gt;When you apply the above map to a domain, you get a &lt;em&gt;mapped domain&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;var Dom: domain(2) &lt;span&gt;dmapped Dist&lt;/span&gt; = [1..4, 1..8];&lt;/pre&gt;
&lt;p&gt;Here the variable &lt;code&gt;Dom&lt;/code&gt; is a 2-D domain (a set of indices) mapped using the distribution &lt;code&gt;Dist&lt;/code&gt; that was defined above. Compare this with a regular local domain–a set of indices &lt;code&gt;(i, j)&lt;/code&gt;, where &lt;code&gt;i&lt;/code&gt; is between 1 and 4 (inclusive) and &lt;code&gt;j&lt;/code&gt; is between 1 and 8.&lt;/p&gt;
&lt;pre&gt;var Dom: domain(2) = [1..4, 1..8];&lt;/pre&gt;
&lt;p&gt;Domains are used, for instance, for iteration. When you iterate over an unmapped domain, all calculations are done within the current locale (possibly in parallel, depending on the type of iteration). But if you do the same over a mapped domain, the calculations will automatically migrate to different locales.&lt;/p&gt;
&lt;p&gt;This model of programming is characterized by a very important property: separation of algorithm from implementation. You separately describe implementation details, such as the distribution of your data structure between threads and machines; but the actual calculation is coded as if it were local and performed over monolithic data structures. That’s a tremendous simplification and a clear productivity gain.&lt;/p&gt;
&lt;h2&gt;Task-Driven Parallelism&lt;/h2&gt;
&lt;p&gt;The processing of very large (potentially multi-dimensional) arrays is very useful, especially in scientific modeling and graphics. But there are also many opportunities for parallelism in control-driven programs. All three HPCS languages chose fine-grained tasks (&lt;i&gt;activities&lt;/i&gt; in X10, &lt;i&gt;implicit threads&lt;/i&gt; in Fortress), not threads, as their unit of parallel execution. A task may be mapped to a thread by the runtime system but, in general, this is not a strict requirement. Bunches of small tasks may be bundled for execution within a single system thread. Fortress went the furthest in making parallelism implicit–even the &lt;code&gt;for&lt;/code&gt; loop is by default parallel. &lt;/p&gt;
&lt;p&gt;From the programmer’s perspective, task-driven parallelism doesn’t expose threads (there is no need for a &lt;code&gt;fork&lt;/code&gt; statement or other ways of spawning threads). You simply start a potentially parallel computation. In Fortress you use a &lt;code&gt;for&lt;/code&gt; loop or put separate computations in a tuple (tuples are evaluated in parallel, by default). In Chapel, you use the &lt;code&gt;forall&lt;/code&gt; statement for loops or &lt;code&gt;begin&lt;/code&gt; to start a task. In X10 you use &lt;code&gt;async&lt;/code&gt; to mark parallelizable code. &lt;/p&gt;
&lt;p&gt;What that means is that you don’t have to worry about how many threads to spawn, how to manage a thread pool, or how to balance the load. The system will spawn the threads for you, depending on the number of available cores, and it will distribute tasks between them and take care of load balancing, etc. In many cases it will do better than a hand-crafted thread-based solution. And in all cases the code will be simpler and easier to maintain. &lt;/p&gt;
&lt;h2&gt;Global View vs. Fragmented View&lt;/h2&gt;
&lt;p&gt;If you were to implemented parallel computation using traditional methods, for instance &lt;a href="http://www.mpi-forum.org/docs/"&gt;MPI&lt;/a&gt; (Message Passing Interface), instead of allocating a single array you’d allocate multiple chunks. Instead of writing an algorithm to operate on this array you’d write an algorithm that operates on chunks, with a lot of code managing boundary cases and communication. Similarly, to parallelize a loop you’d have to partially unroll it and, again, take care of such details as the uneven tail, etc. These approaches results in &lt;i&gt;fragmented view&lt;/i&gt; of the problem. &lt;/p&gt;
&lt;p&gt;What HPCS languages offer is &lt;i&gt;global view&lt;/i&gt; programming. You write your program in terms of data structures and control flows that are not chopped up into pieces according to where they will be executed. Global view approach results in clearer programs that are easier to write and maintain.&lt;/p&gt;
&lt;h2&gt;Synchronization&lt;/h2&gt;
&lt;div&gt;
&lt;h2&gt;No Synchronization?&lt;/h2&gt;
&lt;p&gt;A lot of data-driven algorithms don’t require much synchronization. Many scientific simulations use read-only arrays for input, and make only localized writes to output arrays. &lt;/p&gt;
&lt;p&gt;Consider for instance how you’d implement the famous &lt;a href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life"&gt;Game of Life&lt;/a&gt;. You’d probably use a read-only array for the previous snapshot and a writable array for the currently evaluated state. Both arrays would be partitioned in the same way between locales. The main loop would go over all array elements and concurrently calculate each one’s new state based on the previous state of its nearest neighbors. Notice that while the neighbors are sometimes read concurrently by multiple threads, the output is always stored once. The only synchronization needed is a thread barrier at the end of each cycle.&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;The current approach to synchronization in HPCS languages is the biggest disappointment to me. Data races are still possible and, since parallelism is often implicit, harder to spot. &lt;/p&gt;
&lt;p&gt;The biggest positive surprise was that all three endorsed transactional memory, at least syntactically, through the use of &lt;code&gt;atomic&lt;/code&gt; statements. They didn’t solve the subtleties of isolation, so safety is not guaranteed (if you promise not to access the same data outside of atomic transactions, the transactions are isolated from each other, but that’s all). &lt;/p&gt;
&lt;p&gt;The combination of STM and PGAS in Chapel necessitates the use of distributed STM, an area of active research (see, for instance, &lt;a href="http://llvm.cs.uiuc.edu/~bocchino/Publications_files/LargeScaleSTM-PPoPP2008.pdf"&gt;Software Transactional Memory for Large Scale Clusters&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;In Chapel, you not only have access to &lt;code&gt;atomic&lt;/code&gt; statements (which are still in the implementation phase) and barriers, but also to low level synchronization primitives such as &lt;code&gt;sync&lt;/code&gt; and &lt;code&gt;single&lt;/code&gt; variables–somewhat similar to locks and condition variables. The reasoning is that Chapel wants to provide multi-resolution concurrency support. The low level primitives let you implement concurrency in the traditional style, which might come in handy, for instance, in MPMD situations. The high level primitives enable global view programming that boosts programmer productivity.&lt;/p&gt;
&lt;p&gt;However, no matter what synchronization mechanism are used (including STM), if the language doesn’t enforce their use, programmers end up with data races–the bane of concurrent programming. The time spent debugging racy programs may significantly cut into, or even nullify, potential productivity gains. Fortress is the only language that attempted to keep track of which data is shared (and, therefore, requires synchronization), and which is local. None of the HPCS languages tried to tie sharing and synchronization to the type system in the way it is done, for instance, in the &lt;a&gt;D programming language&lt;/a&gt;  (see also my posts about &lt;a href="http://bartoszmilewski.wordpress.com/2009/05/26/race-free-multithreading/"&gt;race-free multithreading&lt;/a&gt;).&lt;/p&gt;
&lt;h1&gt;Conclusions&lt;/h1&gt;
&lt;p&gt;Here’s the tongue-in-cheek summary of the trends which, if you believe that the HPCS effort provides a glimpse of the future, will soon be entering the mainstream: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Threads are out (demoted to latency controlling status), tasks (and semi-implicit parallelism) are in.&lt;/li&gt;
&lt;li&gt;Message passing is out (demoted to implementation detail), shared address space is in.&lt;/li&gt;
&lt;li&gt;Locks are out (demoted to low-level status), transactional memory is in.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I think we’ve been seeing the twilight of thread-based parallelism for some time (see my previous post on &lt;a href="http://bartoszmilewski.wordpress.com/2010/05/11/parallel-programming-with-hints/"&gt;Parallel Programming with Hints&lt;/a&gt;. It’s just not the way to fully explore hardware concurrency. Traditionally, if you wanted to increase the performance of your program on multicore machines, you had to go into the low-level business of managing thread pools, splitting your work between processors, etc. This is now officially considered the assembly language of concurrency and has no place in high level programming languages.&lt;/p&gt;
&lt;p&gt;Message passing’s major flaw is the inversion of control–it is a moral equivalent of gotos in un-structured programming (it’s about time somebody said that message passing is considered harmful). MP still has its applications and, used in moderation, can be quite handy; but PGAS offers a much more straightforward programming model–its essence being the separation of implementation from algorithm. The Platonic ideal would be for the language to figure out the best parallel implementation for a particular algorithm. Since this is still a dream, the next best thing is getting rid of the interleaving of the two in the same piece of code. &lt;/p&gt;
&lt;p&gt;Software transactional memory has been around for more than a decade now and, despite some &lt;a href="http://www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx"&gt;negative experiences&lt;/a&gt;, is still alive and kicking. It’s by far the best paradigm for synchronizing shared memory access. It’s unobtrusive, deadlock-free, and scalable. If we could only get better performance out of it, it would be ideal. The hope though is in moving some of the burden of TM to &lt;a href="http://tcc.stanford.edu/publications/tcc_thesis_caominh.pdf"&gt;hardware&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sadly, the ease of writing parallel programs using those new paradigms does not go hand in hand with improving program correctness. My worry is that chasing concurrency bugs will eat into productivity gains. &lt;/p&gt;
&lt;p&gt;What are the chances that we’ll be writing programs for desktops in Chapel, X10, or Fortress? Probably slim. Good chances are though that the paradigms used in those languages will continue showing up in existing and future languages. You may have already seen task driven libraries sneaking into the mainstream (e.g., the .NET TPL). There is a PGAS extension of C called UPC (&lt;a href="http://upc.gwu.edu/"&gt;Unified Parallel C&lt;/a&gt;) and there are dialects of several languages like Java, C, C#, Scala, etc., that experiment with STM. Expect more in the future.&lt;/p&gt;
&lt;h1&gt;Acknowledgments&lt;/h1&gt;
&lt;p&gt;Special thanks go to Brad Chamberlain of the Cray Chapel team for his help and comments. As usual, a heated exchange with the Seattle Gang, especially Andrei Alexandrescu, lead to numerous improvements in this post.&lt;/p&gt;
&lt;h1&gt;Bibliography&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;DARPA’s &lt;a href="http://www.highproductivity.org/"&gt;High Productivity Computing Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cray &lt;a href="http://chapel.cray.com/"&gt;Chapel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IBM &lt;a href="http://x10-lang.org/"&gt;X10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sun &lt;a href="http://projectfortress.sun.com/Projects/Community"&gt;Fortress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report.pdf"&gt;Message Passing Interface&lt;/a&gt; specification&lt;/li&gt;
&lt;li&gt;&lt;a href="http://upc.gwu.edu/"&gt;Unified Parallel C&lt;/a&gt;, PGAS in C&lt;/li&gt;
&lt;li&gt;Microsoft &lt;a href="http://msdn.microsoft.com/en-us/library/dd460717.aspx"&gt;Task Parallel Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Intel &lt;a href="http://www.threadingbuildingblocks.org"&gt;Thread Building Blocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://hpcs.cs.umd.edu/fileadmin/papers/sc05hpscs.pdf"&gt;HPC Programmer Productivity:&lt;br&gt;
A Case Study of Novice HPC Programmers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://llvm.cs.uiuc.edu/~bocchino/Publications_files/LargeScaleSTM-PPoPP2008.pdf"&gt;Software Transactional Memory for Large Scale Clusters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ft.ornl.gov/pubs/?pubid=634&amp;amp;action=search"&gt;Scalable Software Transactional Memory for Global Address Space Architectures&lt;/a&gt;
&lt;li&gt;&lt;a href="http://www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx"&gt;A Brief Retrospective on Transactional Memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tcc.stanford.edu/publications/tcc_thesis_caominh.pdf"&gt;Designing an Effective&lt;br&gt;
Hybrid Transactional Memeory System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.informit.com/articles/printerfriendly.aspx?p=1609144"&gt;Concurrency in the D Programming Language&lt;/a&gt;&lt;/li&gt;
&lt;/li&gt;&lt;/ol&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/bartoszmilewski.wordpress.com/1387/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/bartoszmilewski.wordpress.com/1387/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=bartoszmilewski.wordpress.com&amp;amp;blog=3549518&amp;amp;post=1387&amp;amp;subd=bartoszmilewski&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=5O11LSHjm2g:h_gohoHSulU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=5O11LSHjm2g:h_gohoHSulU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=5O11LSHjm2g:h_gohoHSulU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/5O11LSHjm2g" height="1" width="1"/&gt;</content><author><name>Bartosz Milewski</name></author><gr:likingUser>01378362922825043920</gr:likingUser><gr:likingUser>15287009611748534585</gr:likingUser><gr:likingUser>02423865497841901879</gr:likingUser><gr:likingUser>15657609823634915395</gr:likingUser><gr:likingUser>09374010135523488524</gr:likingUser><gr:likingUser>11926479189361668900</gr:likingUser><gr:likingUser>08661725764511308868</gr:likingUser><gr:likingUser>17770539979454370677</gr:likingUser><gr:likingUser>02315483737372757172</gr:likingUser><gr:likingUser>05372765423909202132</gr:likingUser><gr:likingUser>15345706793241911370</gr:likingUser><gr:likingUser>05335506163807112021</gr:likingUser><gr:likingUser>03073681334046780948</gr:likingUser><gr:likingUser>05936860206359750597</gr:likingUser><gr:likingUser>08854659178715462472</gr:likingUser><gr:likingUser>11351917130099147780</gr:likingUser><gr:likingUser>14744093406023611083</gr:likingUser><gr:likingUser>02950009201776521097</gr:likingUser><gr:likingUser>16901100221473731266</gr:likingUser><gr:likingUser>01078909911975297443</gr:likingUser><gr:likingUser>16798125704060913183</gr:likingUser><gr:likingUser>03975535948745147250</gr:likingUser><source gr:stream-id="feed/http://bartoszmilewski.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://bartoszmilewski.wordpress.com/feed/</id><title type="html">  Bartosz Milewski&amp;#39;s Programming Cafe</title><link rel="alternate" href="http://bartoszmilewski.wordpress.com" type="text/html" /></source><feedburner:origLink>http://bartoszmilewski.wordpress.com/2010/08/02/beyond-locks-and-messages-the-future-of-concurrent-programming/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281392765751"><id gr:original-id="http://www.selenic.com/blog/?p=656">tag:google.com,2005:reader/item/37786bf4191cad3d</id><category term="Uncategorized" /><title type="html">Python optimization note: function calls are slow</title><published>2010-07-26T15:01:03Z</published><updated>2010-07-26T15:01:03Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/Gwk488BYFNg/" type="text/html" /><content xml:base="http://www.selenic.com/blog" type="html">&lt;p&gt;In Mercurial, we do a lot of gathering and filtering of long lists of things – filenames, revision numbers, etc. A typical pattern is something like this:&lt;/p&gt;
&lt;pre&gt;l = []
for f in files:
    if f.startswith(foo):
        l.append(f)
&lt;/pre&gt;
&lt;p&gt;Usually it’s more involved than that – there’s often multiple lists to track and several tests, so a simple comprehension won’t help. And usually performance of these loops is pretty critical. If we can shave 10% off a call to status when there are 50,000 files, we’ll do it. So one of the first things we do is:&lt;/p&gt;
&lt;pre&gt;l = []
la = l.append
for f in files:
    if f.startswith(foo):
        la(f)
&lt;/pre&gt;
&lt;p&gt;This saves a lookup in the inner loop, and that’s often a very measurable win. Another pattern is that sometimes one or more of the lists isn’t going to be needed, so we’ll avoid appending to it at all. So is it better to call a dummy function or stick an if statement in the inner loop? Let’s consider variations on this simple test:&lt;/p&gt;
&lt;pre&gt;a = []
f = False
aa = a.append
for x in xrange(1000000):
    if f:
        aa(x)
&lt;/pre&gt;
&lt;p&gt;Let’s explore some possibilities and time them with timeit (Python 2.6.5):&lt;/p&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;append function&lt;/td&gt;
&lt;td&gt;flag&lt;/td&gt;
&lt;td&gt;test&lt;/td&gt;
&lt;td&gt;time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;if f: a.append&lt;/td&gt;
&lt;td&gt;216 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;a.append&lt;/td&gt;
&lt;td&gt;197 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a.append&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;if f: la(x)&lt;/td&gt;
&lt;td&gt;133 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a.append&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;if f: la(x)&lt;/td&gt;
&lt;td&gt;63 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a.append&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;f and la(x)&lt;/td&gt;
&lt;td&gt;133 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a.append&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;f and la(x)&lt;/td&gt;
&lt;td&gt;65 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;a.append&lt;/td&gt;
&lt;td&gt;True&lt;/td&gt;
&lt;td&gt;la(x)&lt;/td&gt;
&lt;td&gt;113 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lambda x: None&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;la(x)&lt;/td&gt;
&lt;td&gt;239 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;id&lt;/td&gt;
&lt;td&gt;False&lt;/td&gt;
&lt;td&gt;la(x)&lt;/td&gt;
&lt;td&gt;110 msec&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The fastest way to add to a list (flag is True) is with a pre-looked-up list append function and no test.  But the fastest way to &lt;em&gt;not &lt;/em&gt;add to our list is with the if test. And both of these are significantly faster than the naive ‘if f: a.append(x)’ approach.&lt;/p&gt;
&lt;p&gt;Thus, if we expect to usually be adding to a given list, we should set la to a handy dummy function like the ‘id’ built-in when our flag tells us not to gather to a list. This is much faster than the obvious lambda function by virtue of being a trivial built-in, and gives us a ‘balanced’ 113/110 msec split between keep and discard. But if we usually &lt;em&gt;don’t&lt;/em&gt; want a list (for instance, Mercurial usually doesn’t report ‘clean’ files), then an if statement is best, with a 133/63 keep/discard split.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=Gwk488BYFNg:yIwjCjFGavI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=Gwk488BYFNg:yIwjCjFGavI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=Gwk488BYFNg:yIwjCjFGavI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/Gwk488BYFNg" height="1" width="1"/&gt;</content><author><name>mpm</name></author><source gr:stream-id="feed/http://www.selenic.com/blog/index.rss20"><id>tag:google.com,2005:reader/feed/http://www.selenic.com/blog/index.rss20</id><title type="html">internal fragmentation</title><link rel="alternate" href="http://www.selenic.com/blog" type="text/html" /></source><feedburner:origLink>http://www.selenic.com/blog/?p=656</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281389037049"><id gr:original-id="http://olgierd.bblog.pl/wpis,boli;mnie;w;krzyzu,44809.html">tag:google.com,2005:reader/item/14eb4a603693a720</id><title type="html">Boli mnie w krzyżu</title><published>2010-08-09T19:39:36Z</published><updated>2010-08-09T19:39:36Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/K9kt_LoTxCs/wpis,boli;mnie;w;krzyzu,44809.html" type="text/html" /><author><name>Olgierd Rudak</name></author><gr:likingUser>09177835216631559241</gr:likingUser><gr:likingUser>01916965600396156174</gr:likingUser><gr:likingUser>13818729232887425322</gr:likingUser><source gr:stream-id="feed/http://olgierd.bblog.pl/rss/rss20.xml"><id>tag:google.com,2005:reader/feed/http://olgierd.bblog.pl/rss/rss20.xml</id><title type="html">Lege Artis</title><link rel="alternate" href="http://olgierd.bblog.pl/" type="text/html" /></source><content type="html" xml:base="http://olgierd.bblog.pl/">W sprawie  krzyża spod pałacu  dostałem ostatnio kilka listeli z pytaniami &amp;quot;a co ja właściwie o tym myślę?&amp;quot; W zasadzie to nie rozumiem: nie czuję się jeszcze aż takim autorytetem moral&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=K9kt_LoTxCs:gSDO-4_9ooU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=K9kt_LoTxCs:gSDO-4_9ooU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=K9kt_LoTxCs:gSDO-4_9ooU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/K9kt_LoTxCs" height="1" width="1"/&gt;</content><feedburner:origLink>http://olgierd.bblog.pl/wpis,boli;mnie;w;krzyzu,44809.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281370770134"><id gr:original-id="tag:www.twistimage.com,2010://1.11028">tag:google.com,2005:reader/item/b833783bfa9a6b48</id><category term="attention" /><category term="blog" /><category term="brand" /><category term="complaint" /><category term="credibility" /><category term="customerservice" /><category term="digerati" /><category term="digitallegacy" /><category term="facebook" /><category term="newmedia" /><category term="onlinecommunity" /><category term="onlinegrandstanding" /><category term="socialmedia" /><category term="socialmediamonitoring" /><category term="troll" /><category term="twitter" /><category term="wikipedia" /><category term="yourcallisimportanttous" /><category term="zappos" /><title type="html">When Not Responding Online Is The Right Response</title><published>2010-08-09T11:54:20Z</published><updated>2010-08-09T11:54:20Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/OWz6E7zx58o/" type="text/html" /><author><name>Mitch Joel</name></author><gr:likingUser>15660017549148862171</gr:likingUser><source gr:stream-id="feed/http://feeds2.feedburner.com/twistimage"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/twistimage</id><title type="html">Six Pixels of Separation - Marketing and Communications Insights - By Mitch Joel at Twist Image</title><link rel="alternate" href="http://www.twistimage.com/" type="text/html" /></source><content type="html" xml:base="http://www.twistimage.com/">&lt;p&gt;&lt;strong&gt;The common online rhetoric is to respond to everything that is being said about your brand. That could be a mistake. &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With new Social Media monitoring tools - or just some careful snooping around - it has never been easier to figure out who are the people with a legitimate concern and who are the quacks just trying to feed their own need for attention. And yes, there are even those whose only goal is to push their own agenda forward by drawing attention to themselves. There's a known saying amongst the Digerati: &lt;em&gt;&amp;quot;don&amp;#39;t feed the Trolls.&amp;quot;&lt;/em&gt; The &lt;a href="http://en.wikipedia.org/wiki/Troll_(Internet)"&gt;Wikipedia definition of &amp;quot;troll&amp;quot;&lt;/a&gt; is &lt;em&gt;&amp;quot;someone who posts inflammatory, extraneous, or off-topic messages in an online community, such as an online discussion forum, chat room, or blog, with the primary intent of provoking other users into a desired emotional response or of otherwise disrupting normal on-topic discussion.&amp;quot;&lt;/em&gt; The point being, you're never going to make someone like this happy or get any level of customer service rectified. Even when/if you respond to their needs with an equitable resolution, you'll soon be trapped in a, &lt;em&gt;&amp;quot;give them an inch and they&amp;#39;ll take you a mile,&amp;quot;&lt;/em&gt; scenario where nothing you do will ever be enough (because their intent was never to get any form of resolution in the first place). &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simply don't respond. &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's going to sound very radical in a day and age where most new media pundits will tell you the opposite. This past week, someone commented in their &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt; feed about a brand and situation they were not happy with (translation: their personal cause/agenda was not highlighted and they felt like the company should pay more attention to their plight). When the company didn't respond, the known troll went after people who were mentioning the same brand in their tweets and asked for their opinion on the company's choice to not highlight their personal issue. Many of the people that this individual reached out to didn't engage or responded in a very succinct and finite way (the Social Media equivalent of crickets in the night). With nowhere to go, and no wind left in their sails, the troll continued to rally for their cause in their own &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; and Twitter stream, but there was little-to-no traction. With that, the grandstanding became nothing more than the online version of someone wandering the downtown streets blurting absurdities at the top of their lungs until the cops come by and politely ask them to, &lt;em&gt;&amp;quot;move on.&amp;quot;&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People know when you have a genuine complaint. People know when you're simply pushing your own agenda. &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A smart company is one that can respond with professionalism and resolution. A smart company is one that doesn't spend hours of time and resources trying to please the unappeasable. It's an important distinction, and now that we can see a semblance of maturity online when it comes to individual's and their digital legacies, it's easier to figure out the raisins from the nuts. At first, the ability to make this distinction will not be obvious, and brands (as we have seen) have been sucked into major back-and-forths that have never ended well. Ultimately, the troll is never satisfied and all the brand did was give that individual's actions a platform and some real credibility where none existed before. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's a delicate balance. &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.zappos.com/"&gt;Zappos&lt;/a&gt; is brilliantly kind to everyone. Others believe that &lt;em&gt;&amp;quot;your call is important to us&amp;quot;&lt;/em&gt; means that you will soon be treated like garbage. Not everyone online is a troll. Not everyone online is out to get a brand in a &lt;em&gt;&amp;quot;gotcha!&amp;quot; &lt;/em&gt;kind of way. In fact, the opposite is (mostly) true: Assume two percent of the population is evil. Assume a slightly larger percentage are trolls and take some level of pride in getting a brand to react to their irrational opinions. Beyond that, know why and how you're going to engage online, and when cornered by someone who will never be happy, change the venue: ask if you can give them a call on the phone to discuss or offer to bring them into your office for a meeting or a tour. More often than not they will scurry back to the comfort of their keyboard and the warm glow of their monitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A great question to ask yourself...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When thinking about these online shift disturbers, ask yourself: Who is this person? What do they do? Who works with them? Who are they connected to? What are the types of conversations that they have recently had? A bit of research goes a long way, and can easily highlight whether or not there is a semi-legitimate concern that needs to be addressed or if you're dealing with someone who is just looking for a one-sided fight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do you think it's acceptable not to respond to certain individuals online? Or are all gripes created equal? What's your take?&lt;/strong&gt;&lt;/p&gt;
        
		
		&lt;p&gt;
			&lt;strong&gt;Tags:&lt;/strong&gt;
			
			&lt;a href="http://www.technorati.com/tag/attention" rel="tag"&gt;attention&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/blog" rel="tag"&gt;blog&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/brand" rel="tag"&gt;brand&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/complaint" rel="tag"&gt;complaint&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/credibility" rel="tag"&gt;credibility&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/customer%20service" rel="tag"&gt;customer service&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/digerati" rel="tag"&gt;digerati&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/digital%20legacy" rel="tag"&gt;digital legacy&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/facebook" rel="tag"&gt;facebook&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/new%20media" rel="tag"&gt;new media&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/online%20community" rel="tag"&gt;online community&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/online%20grandstanding" rel="tag"&gt;online grandstanding&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/social%20media" rel="tag"&gt;social media&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/social%20media%20monitoring" rel="tag"&gt;social media monitoring&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/troll" rel="tag"&gt;troll&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/twitter" rel="tag"&gt;twitter&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/wikipedia" rel="tag"&gt;wikipedia&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/your%20call%20is%20important%20to%20us" rel="tag"&gt;your call is important to us&lt;/a&gt;
			
			&lt;a href="http://www.technorati.com/tag/zappos" rel="tag"&gt;zappos&lt;/a&gt;
			
		&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?d=dnMXMwOfBR0" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?i=JjEPtIL8WO0:SI7v54fUCq4:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?d=l6gmwiTKsz0" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?i=JjEPtIL8WO0:SI7v54fUCq4:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/TwistImage?a=JjEPtIL8WO0:SI7v54fUCq4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TwistImage?d=7Q72WNTAKBA" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TwistImage/~4/JjEPtIL8WO0" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=OWz6E7zx58o:rWkACwjqZcI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=OWz6E7zx58o:rWkACwjqZcI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=OWz6E7zx58o:rWkACwjqZcI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/OWz6E7zx58o" height="1" width="1"/&gt;</content><feedburner:origLink>http://feedproxy.google.com/~r/TwistImage/~3/JjEPtIL8WO0/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281359043839"><id gr:original-id="http://rjlipton.wordpress.com/?p=5195">tag:google.com,2005:reader/item/28ced5f7af1e84ab</id><category term="P=NP" /><category term="People" /><category term="Proofs" /><category term="Proof" /><title type="html">A Proof That P Is Not Equal To NP?</title><published>2010-08-09T01:11:24Z</published><updated>2010-08-09T01:11:24Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/xr7GUoHLhh8/" type="text/html" /><media:group><media:content url="http://0.gravatar.com/avatar/afaa664a052777146630095c596117b2?s=96&amp;d=identicon&amp;r=G" /><media:content url="http://rjlipton.files.wordpress.com/2010/08/vinaydeolalikar.jpg" /></media:group><content xml:base="http://rjlipton.wordpress.com/" type="html">&lt;p&gt; &lt;font color="”#0066cc?"&gt;&lt;br&gt;
&lt;em&gt; A serious proof that claims to have resolved the P=NP question. &lt;/em&gt;&lt;br&gt;
&lt;font color="”#000000?"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rjlipton.files.wordpress.com/2010/08/vinaydeolalikar.jpg"&gt;&lt;img src="http://rjlipton.files.wordpress.com/2010/08/vinaydeolalikar.jpg?w=120&amp;amp;h=180" alt="" title="VinayDeolalikar" width="120" height="180"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Vinay Deolalikar is a Principal Research Scientist at HP Labs who has done important research in various areas of networks. He also has worked on complexity theory, including previous work on &lt;a href="http://logcom.oxfordjournals.org/cgi/content/abstract/15/5/577"&gt;infinite&lt;/a&gt; versions of the P=NP question. He has just claimed that he has a proof that P is not equal to NP. That’s right: &lt;img src="http://l.wordpress.com/latex.php?latex=%7BP+%5Cneq+NP%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{P \neq NP}" title="{P \neq NP}"&gt;. No infinite version. The real deal. &lt;/p&gt;
&lt;p&gt;
Today I will talk about his paper. So far I have only had a chance to glance at the paper; I will look at it more carefully in the future. I do not know what to think right now, but I am certainly hopeful.&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; The Paper &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Deolalikar’s draft paper is &lt;a href="http://www.hpl.hp.com/personal/Vinay_Deolalikar/Papers/pnp12pt.pdf"&gt;here&lt;/a&gt;—he was kind enough to give me the pointer to his paper. For now please understand that this is a “preliminary version.” See the &lt;a href="http://gregbaker.ca/blog/author/greg/"&gt;discussion&lt;/a&gt; by Greg Baker, who first posted on his paper. &lt;/p&gt;
&lt;p&gt;
At first glance it is a long, well written paper, by a serious researcher. He clearly knows a great deal of complexity theory and mathematics. His Ph.D. thesis at USC is titled:  &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
On splitting places of degree one in extensions of algebraic function fields, towers of function fields meeting asymptotic bounds, and basis constructions for algebraic-geometric codes.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;
My first thought is who knows—perhaps this is &lt;b&gt;the&lt;/b&gt; solution we have all have been waiting for. If it is correct, the Clay list will drop down to five. I assume he would take the prize.&lt;/p&gt;
&lt;p&gt;
But first there is the small issue of correctness. Is his paper correct? &lt;/p&gt;
&lt;p&gt;
I suggest you look at his paper to see his own summary of his approach, and of course the details of his proof. At the highest level he is using the characterization of polynomial time via &lt;a href="http://en.wikipedia.org/wiki/Finite_model_theory"&gt;finite model theory&lt;/a&gt;. His proof uses the beautiful result of Moshe Vardi (1982) and Neil Immerman (1986): &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Theorem: &lt;/b&gt; &lt;em&gt; On ordered structures, a relation is defined by a first order formula plus the Least Fixed Point (LFP) operator if and only if it is computable in polynomial time. &lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;p&gt;
Then, he attacks SAT directly. He creates an ordered structure that encodes SAT. He then argues if P=NP, then by the above theorem it must follow that SAT has certain structural properties. These properties have to do with the structure of random SAT. This connection between finite model theory and random SAT models seems new to me. &lt;/p&gt;
&lt;p&gt;
The one thing that strikes me immediately is his use of finite model theory. This is one area of logic that has already led to at least one breakthrough before in complexity theory. I believe that Neil used insights from this area to discover his famous proof that &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cmathsf%7BNLOG%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\mathsf{NLOG}}" title="{\mathsf{NLOG}}"&gt; is closed under complement. It is interesting that the “final” &lt;a href="http://rjlipton.wordpress.com/2009/02/19/we-all-guessed-wrong/"&gt;proof&lt;/a&gt; does not directly use the machinery of finite model theory. Deolalikar’s connection between model theory and the structure of random SAT is interesting. I hope it works, or at least sheds new light on SAT.&lt;/p&gt;
&lt;p&gt;
An obvious worry about his proof, just from a quick look, is the issue of relativization. I believe that the LFP characterization, and similar first order arguments &lt;i&gt;do&lt;/i&gt; relativize in general. However, it is possible that his use of concretely encoded structures prevents his entire argument from relativizing. We will need to check carefully that his proof strategy evades this limitation. I am on record as not being a fan of oracle results, so if this is the problem for his proof, I will have to re-think my position. Oh well.&lt;/p&gt;
&lt;p&gt;
Deolalikar does cite both Baker-Gill-Solovay for relativization and Razborov-Rudich for the “Natural Proofs” obstacle. His proof strategy ostensibly evades the latter because it exploits a uniform characterization of P that may not extend to give lower bounds against circuits. In fact the paper does not state a concrete time lower bound for SAT, as the proof is by contradiction. Since the gap in the contradiction is between “&lt;img src="http://l.wordpress.com/latex.php?latex=%7Bpolylog%28n%29%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{polylog(n)}" title="{polylog(n)}"&gt;” and “&lt;img src="http://l.wordpress.com/latex.php?latex=%7BO%28n%29%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{O(n)}" title="{O(n)}"&gt;,” it is possible that a time lower bound of “&lt;img src="http://l.wordpress.com/latex.php?latex=%7B2%5E%7Bn%5E%7B%5Cepsilon%7D%7D%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{2^{n^{\epsilon}}}" title="{2^{n^{\epsilon}}}"&gt; for some &lt;img src="http://l.wordpress.com/latex.php?latex=%7B%5Cepsilon+%3E+0%7D&amp;amp;bg=ffffff&amp;amp;fg=000000&amp;amp;s=0" alt="{\epsilon &amp;gt; 0}" title="{\epsilon &amp;gt; 0}"&gt;” is implied. More will have to wait until there is time to examine all the threads of this long and complex paper closely. However, the author certainly shows awareness of the relevant obstacles and command of literature supporting his arguments—this is a serious effort.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;b&gt; Open Problems &lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;p&gt;
Is his paper correct? How does he avoid all the “barriers” that have been claimed to surround the P=NP question? Let’s hope it all checks out.&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rjlipton.wordpress.com/5195/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rjlipton.wordpress.com/5195/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rjlipton.wordpress.com&amp;amp;blog=6472207&amp;amp;post=5195&amp;amp;subd=rjlipton&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=xr7GUoHLhh8:tBg-HzYxQNY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=xr7GUoHLhh8:tBg-HzYxQNY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=xr7GUoHLhh8:tBg-HzYxQNY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/xr7GUoHLhh8" height="1" width="1"/&gt;</content><author><name>rjlipton</name></author><gr:likingUser>04504682921712414142</gr:likingUser><gr:likingUser>15876073630747133581</gr:likingUser><gr:likingUser>02297019047715817904</gr:likingUser><gr:likingUser>13852469867143295256</gr:likingUser><gr:likingUser>18195644824262745292</gr:likingUser><gr:likingUser>03648621083971937297</gr:likingUser><gr:likingUser>01790988896119327182</gr:likingUser><gr:likingUser>05864567617027494608</gr:likingUser><gr:likingUser>02438731866835478013</gr:likingUser><gr:likingUser>12340122682204351427</gr:likingUser><gr:likingUser>17252187327101606658</gr:likingUser><gr:likingUser>14274384500514150963</gr:likingUser><gr:likingUser>11302012128137707230</gr:likingUser><gr:likingUser>11990695002203717911</gr:likingUser><gr:likingUser>12162493830434179100</gr:likingUser><gr:likingUser>10566802604692742726</gr:likingUser><gr:likingUser>17802234163056344595</gr:likingUser><gr:likingUser>12376888086198282361</gr:likingUser><gr:likingUser>15248437908317989287</gr:likingUser><gr:likingUser>08930621760636788133</gr:likingUser><gr:likingUser>06577690561423049562</gr:likingUser><gr:likingUser>00982249066398531631</gr:likingUser><gr:likingUser>15091151789213103593</gr:likingUser><gr:likingUser>02493361864459897726</gr:likingUser><gr:likingUser>07930741327284705839</gr:likingUser><gr:likingUser>09187864250514038818</gr:likingUser><gr:likingUser>12206059721203578862</gr:likingUser><gr:likingUser>14704459895613450589</gr:likingUser><gr:likingUser>15600663592606912444</gr:likingUser><gr:likingUser>02461810815221007730</gr:likingUser><gr:likingUser>16963436792550405300</gr:likingUser><gr:likingUser>10444484858339419768</gr:likingUser><gr:likingUser>03623488591526805376</gr:likingUser><gr:likingUser>06916149270104428775</gr:likingUser><gr:likingUser>12605740158367721815</gr:likingUser><gr:likingUser>09645692396224119313</gr:likingUser><gr:likingUser>09103147185272536559</gr:likingUser><gr:likingUser>00728682554731035471</gr:likingUser><gr:likingUser>05814554731484303439</gr:likingUser><gr:likingUser>14072178322358936223</gr:likingUser><gr:likingUser>10452883752421848286</gr:likingUser><gr:likingUser>06925351185350905271</gr:likingUser><gr:likingUser>15776888323859189275</gr:likingUser><gr:likingUser>08010590935495778687</gr:likingUser><gr:likingUser>16919110027938882258</gr:likingUser><gr:likingUser>05216485266719962293</gr:likingUser><gr:likingUser>01745667565245335574</gr:likingUser><gr:likingUser>17854776969323205319</gr:likingUser><gr:likingUser>10636928972680512838</gr:likingUser><gr:likingUser>13056314599591515657</gr:likingUser><gr:likingUser>14845013079875280425</gr:likingUser><gr:likingUser>05450183350407630342</gr:likingUser><gr:likingUser>09232122918948113225</gr:likingUser><gr:likingUser>17170553431054091434</gr:likingUser><gr:likingUser>14388681953628474441</gr:likingUser><gr:likingUser>14468400439565969973</gr:likingUser><gr:likingUser>11172023351089479182</gr:likingUser><gr:likingUser>12343318497348373421</gr:likingUser><gr:likingUser>14376726185576411666</gr:likingUser><gr:likingUser>04051560986089910118</gr:likingUser><gr:likingUser>12414863809081439036</gr:likingUser><gr:likingUser>17358354603511616589</gr:likingUser><gr:likingUser>03750346217935291810</gr:likingUser><gr:likingUser>16637497732089400340</gr:likingUser><gr:likingUser>14030693160978014662</gr:likingUser><gr:likingUser>07449152665160950444</gr:likingUser><gr:likingUser>04310616551323032140</gr:likingUser><gr:likingUser>12014067453711815919</gr:likingUser><gr:likingUser>02934849137054876057</gr:likingUser><gr:likingUser>13664576344560508315</gr:likingUser><gr:likingUser>07023555409224841361</gr:likingUser><gr:likingUser>03949272474367471874</gr:likingUser><gr:likingUser>07891177143258814094</gr:likingUser><gr:likingUser>09004265449352502205</gr:likingUser><gr:likingUser>01055632693796307320</gr:likingUser><gr:likingUser>17304044890616982070</gr:likingUser><gr:likingUser>10247686741432321456</gr:likingUser><gr:likingUser>12206204384316943271</gr:likingUser><gr:likingUser>18323949366991568305</gr:likingUser><gr:likingUser>16787915520451954068</gr:likingUser><gr:likingUser>12245115284450297504</gr:likingUser><gr:likingUser>01073460329833738548</gr:likingUser><gr:likingUser>14332439349843955060</gr:likingUser><gr:likingUser>06242012703734460041</gr:likingUser><gr:likingUser>06275000236844292833</gr:likingUser><gr:likingUser>06833423477535643408</gr:likingUser><gr:likingUser>09003145557217221524</gr:likingUser><gr:likingUser>06089555672262602987</gr:likingUser><gr:likingUser>17655817665684659145</gr:likingUser><gr:likingUser>12290097851732544837</gr:likingUser><gr:likingUser>04439958504292871413</gr:likingUser><gr:likingUser>10759375542672973898</gr:likingUser><gr:likingUser>13362658950321142629</gr:likingUser><gr:likingUser>01059345005528369405</gr:likingUser><gr:likingUser>03232723812782507964</gr:likingUser><gr:likingUser>03418679600782697837</gr:likingUser><gr:likingUser>06256977080561701091</gr:likingUser><gr:likingUser>09082806347477312920</gr:likingUser><gr:likingUser>06036220077571947138</gr:likingUser><gr:likingUser>11405472182096210436</gr:likingUser><source gr:stream-id="feed/http://rjlipton.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://rjlipton.wordpress.com/feed/</id><title type="html">Gödel&amp;#39;s Lost Letter and P=NP</title><link rel="alternate" href="http://rjlipton.wordpress.com" type="text/html" /></source><feedburner:origLink>http://rjlipton.wordpress.com/2010/08/08/a-proof-that-p-is-not-equal-to-np/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1281090458929"><id gr:original-id="tag:blogger.com,1999:blog-3992530807750384868.post-176862637301615408">tag:google.com,2005:reader/item/767f7e5a4686030d</id><title type="html">Emacs-fu: some handy key bindings</title><published>2010-07-30T19:49:00Z</published><updated>2010-07-30T19:49:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/I8mfQq8EiqI/some-handy-key-bindings.html" type="text/html" /><content xml:base="http://planet.emacsen.org/" type="html">&lt;div&gt;
&lt;div&gt;


&lt;p&gt;
Emacs offers many handy key bindings; every now and then I come across a new
one, which has been hiding there somewhere for a decade or more… Here are
some of my favorites – I'm listing those that are (a) often useful, (b) might
not be known by everyone already (c) don't require any external packages or
setup. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;M-27 x&lt;/code&gt; gives you &lt;code&gt;xxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/code&gt;; and, believe it or not,
works also with different characters and numbers;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;M-m&lt;/code&gt; jumps to the first non-whitespace character on the current line;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;M-^&lt;/code&gt; joins two lines into one – like vi(m)'s &lt;code&gt;:join&lt;/code&gt;,
except that point must be on the second line, not the first;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;M-/&lt;/code&gt; auto-completes based on words in all your buffers; there are more
powerful alternatives, but this one does not require any setup;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C-h k&lt;/code&gt; followed by some key or key combination tells you what it does, &lt;code&gt;C-h     m&lt;/code&gt; describes the currently active modes, with their key bindings;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C-h f&lt;/code&gt; documents the current function, &lt;code&gt;C-h v&lt;/code&gt; does the same for
variables. &lt;code&gt;C-h a&lt;/code&gt; gives you information about commands - for example to get
&lt;code&gt;date&lt;/code&gt;-related commands, press &lt;code&gt;C-h a date&lt;/code&gt;. This will, however, also get
you commands related to &lt;code&gt;update&lt;/code&gt;; instead, you can use &lt;code&gt;C-h a \bdate&lt;/code&gt;
(because &lt;code&gt;C-h a&lt;/code&gt; accepts regular expressions);
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C-x C-o&lt;/code&gt; will delete all the empty lines around your current cursor
position, except for one;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;M-q&lt;/code&gt; re-aligns the current paragraph; I use it all the time when writing
e-mails etc. (you might want to check out &lt;a href="http://www.emacswiki.org/emacs/FillAdapt"&gt;filladapt&lt;/a&gt; for a version that gives
you a bit more smartness with indentations, lists etc.);
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C-x 8 RET&lt;/code&gt; in a recent emacs version gives you an auto-completable list of
special characters to insert. So if I need, say, the Yen-character, I type
&lt;code&gt;C-x 8 RET ye TAB&lt;/code&gt; and I get &lt;code&gt;YEN SIGN&lt;/code&gt;, which &lt;code&gt;RET&lt;/code&gt; will then insert:
¥. Note that the completion only works on the &lt;i&gt;start&lt;/i&gt; of the character name,
so if you'd want to include the α-character, you'd need to know that its
UCS-name is &lt;code&gt;GREEK SMALL LETTER ALPHA&lt;/code&gt;… (you can try &lt;code&gt;*alpha&lt;/code&gt; or TAB the
empty string, and search in the results buffer, but that's rather slow);
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;C-h l&lt;/code&gt; shows your last 300 key presses ('lossage'). Interesting to see, and
it might be useful when &lt;a href="http://emacs-fu.blogspot.com/2010/07/keyboard-macros.html"&gt;defining keyboard macros&lt;/a&gt;.

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What are your favorites? Please share them in the comments.
&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div&gt;&lt;img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/3992530807750384868-176862637301615408?l=emacs-fu.blogspot.com" width="1"&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=I8mfQq8EiqI:VaBBIIZRwrc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=I8mfQq8EiqI:VaBBIIZRwrc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=I8mfQq8EiqI:VaBBIIZRwrc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/I8mfQq8EiqI" height="1" width="1"/&gt;</content><author><name>djcb</name></author><gr:likingUser>15243314136188785514</gr:likingUser><gr:likingUser>17578390103906123513</gr:likingUser><gr:likingUser>09125326765591092140</gr:likingUser><gr:likingUser>15596853698718548450</gr:likingUser><gr:likingUser>09556248173354285592</gr:likingUser><gr:likingUser>00027928396749601136</gr:likingUser><gr:likingUser>15992187313248494725</gr:likingUser><gr:likingUser>12695983433199995996</gr:likingUser><gr:likingUser>07181802424063162221</gr:likingUser><gr:likingUser>16098776399547779062</gr:likingUser><gr:likingUser>08439936578291536243</gr:likingUser><gr:likingUser>15407546510013548101</gr:likingUser><gr:likingUser>02435068906721010659</gr:likingUser><gr:likingUser>02153586748108239595</gr:likingUser><gr:likingUser>07689877160750853107</gr:likingUser><gr:likingUser>10848261308082378532</gr:likingUser><source gr:stream-id="feed/http://planet.emacsen.org/atom.xml"><id>tag:google.com,2005:reader/feed/http://planet.emacsen.org/atom.xml</id><title type="html">Planet Emacsen</title><link rel="alternate" href="http://planet.emacsen.org/" type="text/html" /></source><feedburner:origLink>http://emacs-fu.blogspot.com/2010/07/some-handy-key-bindings.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1280764413576"><id gr:original-id="">tag:google.com,2005:reader/item/63dceb966e99ccf3</id><title type="html">07/30/10 PHD comic: 'Too due list'</title><published>2010-08-02T07:08:46Z</published><updated>2010-08-02T07:08:46Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/wEUTTNcqPas/comics.php" type="text/html" /><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>10662510442819755995</gr:likingUser><gr:likingUser>15682179161150592343</gr:likingUser><gr:likingUser>18168736886946991850</gr:likingUser><gr:likingUser>01303703998560993215</gr:likingUser><gr:likingUser>08104244785821989080</gr:likingUser><gr:likingUser>13615725639700755228</gr:likingUser><gr:likingUser>16084468165368903529</gr:likingUser><gr:likingUser>06484152174917594660</gr:likingUser><gr:likingUser>01492576864805107864</gr:likingUser><gr:likingUser>08610022088181315668</gr:likingUser><gr:likingUser>12200687245938808286</gr:likingUser><gr:likingUser>09584278934012369105</gr:likingUser><gr:likingUser>16447950332528562167</gr:likingUser><gr:likingUser>00927825423426572525</gr:likingUser><gr:likingUser>12451331404236109801</gr:likingUser><gr:likingUser>17176894402801146455</gr:likingUser><gr:likingUser>03372541892163028480</gr:likingUser><gr:likingUser>13840888542897309505</gr:likingUser><gr:likingUser>00823024573878888076</gr:likingUser><gr:likingUser>16481000617276610440</gr:likingUser><gr:likingUser>17903291247848331273</gr:likingUser><gr:likingUser>05453755222541483962</gr:likingUser><gr:likingUser>12575921012878112859</gr:likingUser><gr:likingUser>12732391993815626907</gr:likingUser><gr:likingUser>17722001012160051895</gr:likingUser><gr:likingUser>10566802604692742726</gr:likingUser><gr:likingUser>07779846220061687757</gr:likingUser><gr:likingUser>00354411882812290599</gr:likingUser><gr:likingUser>14858843266102361587</gr:likingUser><gr:likingUser>11124386223289574034</gr:likingUser><gr:likingUser>15455471085657642591</gr:likingUser><gr:likingUser>15661077098567780862</gr:likingUser><gr:likingUser>06015433773749243598</gr:likingUser><gr:likingUser>12959753871949506039</gr:likingUser><gr:likingUser>18201184497466960456</gr:likingUser><gr:likingUser>14211961639897652855</gr:likingUser><gr:likingUser>09999975555164918424</gr:likingUser><gr:likingUser>08043263421060802782</gr:likingUser><gr:likingUser>08270047540933657720</gr:likingUser><gr:likingUser>14170392673858700756</gr:likingUser><gr:likingUser>06807477187724584730</gr:likingUser><gr:likingUser>09595052722552781936</gr:likingUser><gr:likingUser>14913622653881746257</gr:likingUser><gr:likingUser>02694765917463662006</gr:likingUser><gr:likingUser>07396217180539527225</gr:likingUser><gr:likingUser>03113397960336045554</gr:likingUser><gr:likingUser>11408298155968596879</gr:likingUser><gr:likingUser>03422623644395655483</gr:likingUser><gr:likingUser>10831507523877317235</gr:likingUser><gr:likingUser>07474129550444660415</gr:likingUser><gr:likingUser>05608420699344380107</gr:likingUser><gr:likingUser>10550088905869121144</gr:likingUser><gr:likingUser>04696216716906185629</gr:likingUser><gr:likingUser>12259530002436129968</gr:likingUser><gr:likingUser>01058726096188651751</gr:likingUser><gr:likingUser>00703072936297244171</gr:likingUser><gr:likingUser>08255680523637625682</gr:likingUser><gr:likingUser>14811867049010538949</gr:likingUser><gr:likingUser>03802929004796329202</gr:likingUser><gr:likingUser>05362582277608111894</gr:likingUser><gr:likingUser>00955596640572167784</gr:likingUser><gr:likingUser>15413779348294399212</gr:likingUser><gr:likingUser>02670494502333895087</gr:likingUser><gr:likingUser>04465595735933027021</gr:likingUser><gr:likingUser>14691025954270277483</gr:likingUser><gr:likingUser>14134146641180233000</gr:likingUser><gr:likingUser>18445826052183007751</gr:likingUser><gr:likingUser>10183209974907279306</gr:likingUser><gr:likingUser>01273598705423026262</gr:likingUser><gr:likingUser>00597812614721248417</gr:likingUser><gr:likingUser>03560200052926293134</gr:likingUser><gr:likingUser>01909533921491808538</gr:likingUser><gr:likingUser>07379804834403585586</gr:likingUser><gr:likingUser>12798361392830019979</gr:likingUser><gr:likingUser>11719064779326256885</gr:likingUser><gr:likingUser>11041156761541819480</gr:likingUser><gr:likingUser>12083997577047400784</gr:likingUser><gr:likingUser>06410577858664421730</gr:likingUser><gr:likingUser>12688083273670491688</gr:likingUser><gr:likingUser>13162153752613139564</gr:likingUser><gr:likingUser>17033881352667246541</gr:likingUser><gr:likingUser>01483070410112237362</gr:likingUser><gr:likingUser>04942623837019034164</gr:likingUser><gr:likingUser>02749724135253771673</gr:likingUser><gr:likingUser>13123228877009095905</gr:likingUser><gr:likingUser>10683851530107673879</gr:likingUser><gr:likingUser>03824000399500706818</gr:likingUser><gr:likingUser>06342792048218249254</gr:likingUser><gr:likingUser>00011421756893159721</gr:likingUser><gr:likingUser>18087633705842818067</gr:likingUser><gr:likingUser>12362503648223431793</gr:likingUser><gr:likingUser>03178560037096537377</gr:likingUser><gr:likingUser>01499452825551485594</gr:likingUser><gr:likingUser>11296189712051064290</gr:likingUser><gr:likingUser>08611294489997791641</gr:likingUser><gr:likingUser>12642309471136851896</gr:likingUser><gr:likingUser>03193514697045874111</gr:likingUser><gr:likingUser>09705422190778722472</gr:likingUser><gr:likingUser>04449451277440239852</gr:likingUser><gr:likingUser>13933536606779865839</gr:likingUser><source gr:stream-id="feed/http://www.phdcomics.com/gradfeed.php"><id>tag:google.com,2005:reader/feed/http://www.phdcomics.com/gradfeed.php</id><title type="html">PHD Comics</title><link rel="alternate" href="http://www.phdcomics.com" type="text/html" /></source><content type="html" xml:base="http://www.phdcomics.com/">&lt;center&gt;
  &lt;table border="0" cellspacing="0" cellpadding="0" bgcolor="#ffffff"&gt;        
    &lt;tr&gt;
      &lt;td&gt;&lt;b&gt;&lt;font face="Arial, Helvetica, sans-serif" size="+1"&gt;Piled Higher
        &amp;amp; Deeper&lt;/font&gt;&lt;font face="Arial, Helvetica, sans-serif"&gt; &lt;i&gt; by Jorge
        Cham&lt;/i&gt;&lt;/font&gt;&lt;/b&gt;&lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;
        &lt;div align="right"&gt;&lt;b&gt;&lt;font face="Arial, Helvetica, 
sans-serif"&gt;www.phdcomics.com&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr align="center"&gt;
      &lt;td colspan="3"&gt;&lt;font face="Arial, Helvetica, sans-serif"&gt;&lt;img alt="Click on the title below to read the comic" src="http://www.phdcomics.com/comics/archive/phd073010s.gif" border="0" align="top"&gt;&lt;/font&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td colspan="3"&gt;
        &lt;div align="center"&gt;&lt;font size="-2" face="Arial, Helvetica, sans-serif"&gt;title:
          &amp;quot;&lt;a href="http://www.phdcomics.com/comics.php?f=1350"&gt;Too due list&lt;/a&gt;&amp;quot; - originally published 
7/30/2010  
        &lt;/font&gt;&lt;p&gt;&lt;font face="arial"&gt;&lt;a href="http://www.phdcomics.com/store/mojostore.php"&gt;&lt;img src="http://www.phdcomics.com/images/origin_onesie_ad_01.gif"&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
 
&lt;/div&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/center&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=wEUTTNcqPas:9CJ578K1gc4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=wEUTTNcqPas:9CJ578K1gc4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=wEUTTNcqPas:9CJ578K1gc4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/wEUTTNcqPas" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.phdcomics.com/comics.php?f=1350</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1280696031019"><id gr:original-id="">tag:google.com,2005:reader/item/cbbb6e85173fb1d6</id><title type="html">Is floating point math deterministic? - Shawn Hargreaves Blog - Site Home - MSDN Blogs</title><published>2010-08-01T20:53:51Z</published><updated>2010-08-01T20:53:51Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/sNaermR4Ix0/is-floating-point-math-deterministic.aspx" type="text/html" /><link rel="related" href="http://blogs.msdn.com/" title="blogs.msdn.com" /><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="user/04686467480557924617/source/com.google/link"><id>tag:google.com,2005:reader/user/04686467480557924617/source/com.google/link</id><title type="html">blogs.msdn.com</title><link rel="alternate" href="http://blogs.msdn.com/" type="text/html" /></source><content type="html">&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=sNaermR4Ix0:hgrYsDi06j8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=sNaermR4Ix0:hgrYsDi06j8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=sNaermR4Ix0:hgrYsDi06j8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/sNaermR4Ix0" height="1" width="1"/&gt;</content><feedburner:origLink>http://blogs.msdn.com/b/shawnhar/archive/2009/03/25/is-floating-point-math-deterministic.aspx</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1280502949983"><id gr:original-id="http://www.markshuttleworth.com/?p=439">tag:google.com,2005:reader/item/3bddcc86b8f0f6e8</id><category term="thoughts" /><category term="ubuntu" /><category term="tribalism" /><title type="html">Tribalism is the enemy within</title><published>2010-07-30T12:32:34Z</published><updated>2010-07-30T12:32:34Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/xLtBuxTmQiI/439" type="text/html" /><content xml:base="http://www.markshuttleworth.com/" type="html">&lt;p&gt;Tribalism is when one group of people start to think people from another group are “wrong by default”. It’s the great-granddaddy of racism and sexism. And the most dangerous kind of tribalism is completely invisible: it has nothing to do with someone’s “birth tribe” and everything to do with their affiliations: where they work, which sports team they support, which linux distribution they love.&lt;/p&gt;
&lt;p&gt;There are a couple of hallmarks of tribal argument:&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;1. “The other guys have never done anything useful”.&lt;/strong&gt; Well, let’s think about that. All of us wake up every day, with very similar ambitions and goals. I’ve travelled the world and I’ve never met a single company, or country, or church, where *everybody* there did *nothing* useful. So if you see someone saying “Microsoft is totally evil”, that’s a big red flag for tribal thinking. It’s just like someone saying “All black people are [name your prejudice]“. It’s offensive nonsense, and you would be advised to distance yourself from it, even if it feels like it would be fun to wave that pitchfork for a while.&lt;/p&gt;
&lt;p&gt; &lt;strong&gt;2. “Evidence contrary to my views doesn’t count.”&lt;/strong&gt; So, for example, when a woman makes it to the top of her game, “it’s because she slept her way there”. Offensive nonsense. And similarly, when you see someone saying “Canonical didn’t actually sponsor that work by that Canonical employee, that was done in their spare time”, you should realize that’s likely to be offensive nonsense too.&lt;/p&gt;
&lt;p&gt;Let’s be clear: &lt;strong&gt;tribalism makes you stupid&lt;/strong&gt;. Just like it would be stupid not to hire someone super-smart and qualified because they’re purple, or because they are female, it would be stupid to refuse to hear and credit someone with great work just because they happen to be associated with another tribe.&lt;/p&gt;
&lt;p&gt;The very uncool thing about being a fanboy (or fangirl) of a project is that you’re openly declaring both a tribal affiliation and a willingness to reject the work of others just because they belong to a different tribe.&lt;/p&gt;
&lt;p&gt;One of the key values we hold in the Ubuntu project is that we expect everyone associated with Ubuntu to treat people with respect. It’s part of our code of conduct – it’s probably the reason we *pioneered* the use of codes of conduct in open source. I and others who founded Ubuntu have seen how easily open source projects descend into nasty, horrible and unproductive flamewars when you don’t exercise strong leadership away from tribal thinking.&lt;/p&gt;
&lt;p&gt;Now, bad things happen everywhere. They happen in Ubuntu – and because we have a huge community, they are perhaps more likely to happen there than anywhere else. If we want to avoid human nature’s worst consequences, we have to work actively against them. That’s why we have strong leadership structures, which hopefully put people who are proven NOT to be tribal in nature into positions of responsibility. It takes hard work and commitment, but I’m grateful for the incredible efforts of all the moderators and council members and leaders in LoCo teams across this huge and wonderful project, for the leadership they exercise in keeping us focused on doing really good work.&lt;/p&gt;
&lt;p&gt;It’s hard, but sometimes we have to critique people who are associated with Ubuntu, because they have been tribal. Hell, sometimes I and others have to critique ME for small-minded and tribal thinking. When someone who calls herself “an Ubuntu fan” stands up and slates the work of another distro we quietly reach out to that person and point out that it’s not the Ubuntu way of doing things. We don’t spot them all, but it’s a consistent practice within the Ubuntu leadership team: our values are more important than winning or losing any given debate.&lt;/p&gt;
&lt;h3&gt;Do not be drawn into a tribal argument on Ubuntu’s behalf&lt;/h3&gt;
&lt;p&gt;Right now, for a number of reasons, there is a fever pitch of tribalism in plain sight in the free software world. It’s sad. It’s not constructive. It’s ultimately going to be embarrassing for the people involved, because the Internet doesn’t forget. It’s certainly not helping us lift free software to the forefront of public expectations of what software can be.&lt;/p&gt;
&lt;p&gt;I would like to say this to everyone who feels associated with Ubuntu: &lt;strong&gt;hold fast to what you know to be true&lt;/strong&gt;. You know your values. You know how hard you work. You know what an incredible difference your work has made. You know that you do it for a complex mix of love and money, some more the former, others the more latter, but fundamentally you are all part of Ubuntu because you think it’s the most profound and best way to spend your time. Be proud of that.&lt;/p&gt;
&lt;p&gt;There is no need to get into a playground squabble about your values, your ethics, your capabilities or your contribution. If you can do better, figure out how to do that, but do it because you are inspired by what makes Ubuntu wonderful: free software, delivered freely, in a way that demonstrates real care for the end user. Don’t do it because you feel intimidated or threatened or belittled.&lt;/p&gt;
&lt;p&gt;The Gregs are entitled to &lt;a href="http://gregdekspeaks.wordpress.com/2010/07/29/red-hat-16-canonical-1/"&gt;their opinions&lt;/a&gt;, and folks like &lt;a href="http://www.jonobacon.org/2010/07/30/red-hat-canonical-and-gnome-contributions/"&gt;Jono&lt;/a&gt; and &lt;a href="http://www.jonobacon.org/2010/07/30/red-hat-canonical-and-gnome-contributions/#comment-152322"&gt;Dylan&lt;/a&gt; have set an excellent example in how to rebut and move beyond them.&lt;/p&gt;
&lt;p&gt;I’ve been lucky to be part of many amazing things in life. Ubuntu is, far and away, the best of them. We can be proud of the way we are providing leadership: on how communities can be a central part of open source companies, on how communities can be organised and conduct themselves, on how the economics of free software can benefit more than just the winning distribution, on how a properly designed user experience combined with free software can beat the best proprietary interfaces any day. But remember: we do all of those things because we believe in them, not because we want to prove anybody else wrong.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=xLtBuxTmQiI:RlJGb4HdReA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=xLtBuxTmQiI:RlJGb4HdReA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=xLtBuxTmQiI:RlJGb4HdReA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/xLtBuxTmQiI" height="1" width="1"/&gt;</content><author><name>mark</name></author><gr:likingUser>07362398128256762527</gr:likingUser><gr:likingUser>17016344498793308992</gr:likingUser><gr:likingUser>00490252475335708998</gr:likingUser><gr:likingUser>15660557807216647562</gr:likingUser><gr:likingUser>08437708572706834369</gr:likingUser><gr:likingUser>16579272471674962940</gr:likingUser><gr:likingUser>12787649585366241547</gr:likingUser><gr:likingUser>02760940318859734550</gr:likingUser><gr:likingUser>03098909672570860465</gr:likingUser><gr:likingUser>15519149961856248210</gr:likingUser><gr:likingUser>12489330388166952912</gr:likingUser><gr:likingUser>11132471879089486045</gr:likingUser><gr:likingUser>15278627596207266723</gr:likingUser><gr:likingUser>00477020424214865999</gr:likingUser><gr:likingUser>08791314788423567417</gr:likingUser><gr:likingUser>02131321086495654450</gr:likingUser><gr:likingUser>18185817056983763472</gr:likingUser><gr:likingUser>12328353733743005996</gr:likingUser><gr:likingUser>03266624326157745832</gr:likingUser><gr:likingUser>17870038315373993618</gr:likingUser><gr:likingUser>00925828841303998485</gr:likingUser><gr:likingUser>03245461497447058252</gr:likingUser><gr:likingUser>12460076305139233523</gr:likingUser><gr:likingUser>09190927417572449918</gr:likingUser><gr:likingUser>04559740475149631237</gr:likingUser><gr:likingUser>02608678631567969186</gr:likingUser><gr:likingUser>14975396687936812332</gr:likingUser><gr:likingUser>00936356562887297948</gr:likingUser><gr:likingUser>06662581301956639239</gr:likingUser><gr:likingUser>06768863571570180443</gr:likingUser><gr:likingUser>17855270839655294679</gr:likingUser><gr:likingUser>14574443500394081927</gr:likingUser><gr:likingUser>10739865989194100877</gr:likingUser><gr:likingUser>16026351131770821930</gr:likingUser><gr:likingUser>17765290363804142997</gr:likingUser><gr:likingUser>15744440199187701369</gr:likingUser><gr:likingUser>09895619129522159640</gr:likingUser><gr:likingUser>17037988739403476485</gr:likingUser><gr:likingUser>13252242647130469733</gr:likingUser><gr:likingUser>15649229842083043406</gr:likingUser><gr:likingUser>09986713436382198282</gr:likingUser><gr:likingUser>05240241410073991353</gr:likingUser><gr:likingUser>03184097886433245960</gr:likingUser><gr:likingUser>02717672290667344264</gr:likingUser><gr:likingUser>04216442380766196469</gr:likingUser><gr:likingUser>15493505074370661985</gr:likingUser><gr:likingUser>13230917484875347976</gr:likingUser><gr:likingUser>09921442399289131377</gr:likingUser><gr:likingUser>08199572399632789366</gr:likingUser><gr:likingUser>07248679767405557161</gr:likingUser><gr:likingUser>10581445122257564006</gr:likingUser><gr:likingUser>00175335832574295455</gr:likingUser><gr:likingUser>15742132081285417927</gr:likingUser><gr:likingUser>12079463502038563750</gr:likingUser><gr:likingUser>11925728411213092747</gr:likingUser><gr:likingUser>11565182756697648631</gr:likingUser><gr:likingUser>05828697493602148168</gr:likingUser><gr:likingUser>02848039997193907980</gr:likingUser><gr:likingUser>04375267956080185769</gr:likingUser><gr:likingUser>17676198312516432294</gr:likingUser><gr:likingUser>04208530312896794780</gr:likingUser><gr:likingUser>01586114919072996733</gr:likingUser><gr:likingUser>09771073647006781554</gr:likingUser><gr:likingUser>08596059564940739521</gr:likingUser><gr:likingUser>13369212539995519864</gr:likingUser><gr:likingUser>14628600954066779668</gr:likingUser><gr:likingUser>09586550755293356238</gr:likingUser><gr:likingUser>02620425662677136617</gr:likingUser><gr:likingUser>12009045203635766320</gr:likingUser><gr:likingUser>07066529638660716102</gr:likingUser><gr:likingUser>08466331300465161171</gr:likingUser><gr:likingUser>10255252384802367657</gr:likingUser><gr:likingUser>16753500108975076347</gr:likingUser><gr:likingUser>06101770381301466285</gr:likingUser><gr:likingUser>11347331849723999972</gr:likingUser><gr:likingUser>06380130661194460607</gr:likingUser><gr:likingUser>11819407398318351548</gr:likingUser><gr:likingUser>13500482656136240539</gr:likingUser><gr:likingUser>06536178009752834268</gr:likingUser><gr:likingUser>10138433263925987767</gr:likingUser><gr:likingUser>05133266054034121972</gr:likingUser><gr:likingUser>15011880429856003445</gr:likingUser><gr:likingUser>17641198938037236446</gr:likingUser><gr:likingUser>13425444805440873947</gr:likingUser><gr:likingUser>07620241358013399210</gr:likingUser><gr:likingUser>18095177751647752007</gr:likingUser><gr:likingUser>03647295969831490601</gr:likingUser><gr:likingUser>18072588921090506790</gr:likingUser><gr:likingUser>16954621973778623505</gr:likingUser><gr:likingUser>12650014405301651903</gr:likingUser><gr:likingUser>09734789341357986384</gr:likingUser><gr:likingUser>08361381594309737207</gr:likingUser><gr:likingUser>14903493361895421619</gr:likingUser><gr:likingUser>04120259593999333476</gr:likingUser><gr:likingUser>01199346814222236619</gr:likingUser><gr:likingUser>11878844926734739848</gr:likingUser><gr:likingUser>05650439971478030852</gr:likingUser><gr:likingUser>10495040421174679638</gr:likingUser><gr:likingUser>16093049306942212175</gr:likingUser><source gr:stream-id="feed/http://www.markshuttleworth.com/feed"><id>tag:google.com,2005:reader/feed/http://www.markshuttleworth.com/feed</id><title type="html">Mark Shuttleworth</title><link rel="alternate" href="http://www.markshuttleworth.com" type="text/html" /></source><feedburner:origLink>http://www.markshuttleworth.com/archives/439</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1280502509052"><id gr:original-id="http://xkcd.com/773/">tag:google.com,2005:reader/item/92a34673ca3e2d20</id><title type="html">University Website</title><published>2010-07-30T04:00:00Z</published><updated>2010-07-30T04:00:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/KdpZTSduZAg/" type="text/html" /><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>07193039185375590755</gr:likingUser><gr:likingUser>13218258739392087168</gr:likingUser><gr:likingUser>11052097681303118596</gr:likingUser><gr:likingUser>11145654238088234617</gr:likingUser><gr:likingUser>12965438554951688392</gr:likingUser><gr:likingUser>12841122564543815065</gr:likingUser><gr:likingUser>04490822634844920982</gr:likingUser><gr:likingUser>01910183682347606294</gr:likingUser><gr:likingUser>05693012551531553580</gr:likingUser><gr:likingUser>00886715554605655256</gr:likingUser><gr:likingUser>16540709288732568309</gr:likingUser><gr:likingUser>15669207419561984275</gr:likingUser><gr:likingUser>12794760310119157594</gr:likingUser><gr:likingUser>09318803041777485931</gr:likingUser><gr:likingUser>13615725639700755228</gr:likingUser><gr:likingUser>05913473658732282257</gr:likingUser><gr:likingUser>08121124308156301452</gr:likingUser><gr:likingUser>18158899507117698729</gr:likingUser><gr:likingUser>08806013773390501768</gr:likingUser><gr:likingUser>02092008602426266671</gr:likingUser><gr:likingUser>12764570141789470170</gr:likingUser><gr:likingUser>05974199030467975388</gr:likingUser><gr:likingUser>13290560036789766615</gr:likingUser><gr:likingUser>09532858723748946978</gr:likingUser><gr:likingUser>09273765339304887311</gr:likingUser><gr:likingUser>09424217632690687569</gr:likingUser><gr:likingUser>15596294183970634125</gr:likingUser><gr:likingUser>16226520734191706836</gr:likingUser><gr:likingUser>04371732930938934576</gr:likingUser><gr:likingUser>13910321758014902851</gr:likingUser><gr:likingUser>11110394820393394401</gr:likingUser><gr:likingUser>16662309224370183512</gr:likingUser><gr:likingUser>09989627528573360919</gr:likingUser><gr:likingUser>11522851257513779119</gr:likingUser><gr:likingUser>09218959187938465366</gr:likingUser><gr:likingUser>13840888542897309505</gr:likingUser><gr:likingUser>03545105125305456229</gr:likingUser><gr:likingUser>01036023187951055034</gr:likingUser><gr:likingUser>02298036750451024374</gr:likingUser><gr:likingUser>08596733006041731888</gr:likingUser><gr:likingUser>09853637253408123133</gr:likingUser><gr:likingUser>18109995363073290088</gr:likingUser><gr:likingUser>15786002432837771342</gr:likingUser><gr:likingUser>14274384500514150963</gr:likingUser><gr:likingUser>04372573164077868612</gr:likingUser><gr:likingUser>02405714950456689815</gr:likingUser><gr:likingUser>11896428507470607942</gr:likingUser><gr:likingUser>11082554253683319041</gr:likingUser><gr:likingUser>08139390846253496893</gr:likingUser><gr:likingUser>09181768189879010212</gr:likingUser><gr:likingUser>10487160164665089744</gr:likingUser><gr:likingUser>05854973051161952108</gr:likingUser><gr:likingUser>08864701837724257101</gr:likingUser><gr:likingUser>12127596713801347555</gr:likingUser><gr:likingUser>03630863425742969347</gr:likingUser><gr:likingUser>02363776907090161247</gr:likingUser><gr:likingUser>17222199052894252914</gr:likingUser><gr:likingUser>06837487235294227261</gr:likingUser><gr:likingUser>09554302998379766172</gr:likingUser><gr:likingUser>10273929334715895644</gr:likingUser><gr:likingUser>14991225981489354866</gr:likingUser><gr:likingUser>04064545945255243440</gr:likingUser><gr:likingUser>15174420061528762965</gr:likingUser><gr:likingUser>09238302803927429176</gr:likingUser><gr:likingUser>00105603538427380608</gr:likingUser><gr:likingUser>06324698807234627756</gr:likingUser><gr:likingUser>04593974566063222634</gr:likingUser><gr:likingUser>13708479062711761522</gr:likingUser><gr:likingUser>06316859556315588556</gr:likingUser><gr:likingUser>11424318483849164397</gr:likingUser><gr:likingUser>01867880815236897424</gr:likingUser><gr:likingUser>14821396112990529865</gr:likingUser><gr:likingUser>05539381478853695187</gr:likingUser><gr:likingUser>12723532066723020765</gr:likingUser><gr:likingUser>16191316485586796414</gr:likingUser><gr:likingUser>09683643311329561622</gr:likingUser><gr:likingUser>17271646514192603908</gr:likingUser><gr:likingUser>16153142138042331536</gr:likingUser><gr:likingUser>13114894619953438432</gr:likingUser><gr:likingUser>01910434994262503412</gr:likingUser><gr:likingUser>18202901456794892477</gr:likingUser><gr:likingUser>15392332401892922781</gr:likingUser><gr:likingUser>05677727123844215755</gr:likingUser><gr:likingUser>07109736694047352419</gr:likingUser><gr:likingUser>03802367512788715448</gr:likingUser><gr:likingUser>13237787058884667286</gr:likingUser><gr:likingUser>14029414566273321584</gr:likingUser><gr:likingUser>03160231119300901110</gr:likingUser><gr:likingUser>04225478864853737585</gr:likingUser><gr:likingUser>00345656764611778199</gr:likingUser><gr:likingUser>01041114329109654120</gr:likingUser><gr:likingUser>01991244744811622355</gr:likingUser><gr:likingUser>03374477286298610371</gr:likingUser><gr:likingUser>12247592658024036435</gr:likingUser><gr:likingUser>09959093399740063540</gr:likingUser><gr:likingUser>03419909929097791205</gr:likingUser><gr:likingUser>06783357556678600708</gr:likingUser><gr:likingUser>00161236516342814933</gr:likingUser><gr:likingUser>16397708710238144934</gr:likingUser><gr:likingUser>15769044376205554912</gr:likingUser><source gr:stream-id="feed/http://www.xkcd.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://www.xkcd.com/rss.xml</id><title type="html">xkcd.com</title><link rel="alternate" href="http://xkcd.com/" type="text/html" /></source><content type="html" xml:base="http://xkcd.com/">&lt;img src="http://imgs.xkcd.com/comics/university_website.png" title="People go to the website because they can&amp;#39;t wait for the next alumni magazine, right? What do you mean, you want a campus map? One of our students made one as a CS class project back in &amp;#39;01!  You can click to zoom and everything!" alt="People go to the website because they can&amp;#39;t wait for the next alumni magazine, right? What do you mean, you want a campus map? One of our students made one as a CS class project back in &amp;#39;01!  You can click to zoom and everything!"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=KdpZTSduZAg:NpnT0qumGEU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=KdpZTSduZAg:NpnT0qumGEU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=KdpZTSduZAg:NpnT0qumGEU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/KdpZTSduZAg" height="1" width="1"/&gt;</content><feedburner:origLink>http://xkcd.com/773/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1280497306471"><id gr:original-id="http://julien.danjou.info/blog/index.html#Thoughts%20and%20rambling%20on%20the%20X%20protocol">tag:google.com,2005:reader/item/5b6a0971b8482ea6</id><title type="html">Thoughts and rambling on the X protocol</title><published>2010-07-30T13:41:46Z</published><updated>2010-07-30T13:41:46Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/FmL_zHh6-u4/index.html" type="text/html" /><author><name>Julien Danjou</name></author><gr:likingUser>00512208614355750044</gr:likingUser><gr:likingUser>03861461467171289721</gr:likingUser><gr:likingUser>14903493361895421619</gr:likingUser><source gr:stream-id="feed/http://julien.danjou.info/blog/index.xml"><id>tag:google.com,2005:reader/feed/http://julien.danjou.info/blog/index.xml</id><title type="html">jd:/dev/blog</title><link rel="alternate" href="http://julien.danjou.info/blog/index.html" type="text/html" /></source><content type="html" xml:base="http://julien.danjou.info/blog/index.html">&lt;p&gt;Two years ago, while working on &lt;a href="http://awesome.naquadah.org"&gt;awesome&lt;/a&gt;, I joined the &lt;a href="http://www.freedesktop.org"&gt;Freedesktop&lt;/a&gt; initiative
to work on &lt;a href="http://xcb.freedesktop.org"&gt;XCB&lt;/a&gt;. I had to learn the arcane of the X11 protocol and all the
mysterious and old world that goes with it.&lt;/p&gt;

&lt;p&gt;Now that I've swum all this months in this mud, I just feel like I need to
share my thoughts about what become a mess over the decades.&lt;/p&gt;

&lt;h3&gt;When I was unborn…&lt;/h3&gt;

&lt;p&gt;…the &lt;a href="http://en.wikipedia.org/wiki/Toto_(band)"&gt;Toto&lt;/a&gt; band were releasing their &lt;a href="http://en.wikipedia.org/wiki/Africa_(Toto_song)"&gt;song &amp;quot;Africa&amp;quot;&lt;/a&gt; and some smart guys were
working on a windowing system: the X Window System (this is its full name)
which therefore has a (too) long history. The latest version of its
protocol, the 11th one, has been designed in the 80's. You can learn more
about the history in the &lt;a href="http://en.wikipedia.org/wiki/X_Window_System"&gt;Wikipedia article about X&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In 2010, we still listen disco music and we still use various protocols
designed in the 80's and even before X. Music have evolved, protocols have
evolved, and so did X11.&lt;/p&gt;

&lt;p&gt;The problem is that X11 did not evolve that well. The guys at MIT-and-some
other-places-with-very-smart-people-in-it created X version 1 in 1984, and
updated it until X version 11 (the one we're still using) in 1987. Eleven
version in 3 years, that was following the "release early, release often"
model.  But I don't know why, it just stopped to happen for the last 23
years&lt;sup&gt;&lt;a name="fnr.1" href="http://julien.danjou.info/blog/index.html#fn.1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;I don't know what changes have been made in the first 11 major versions of
the X protocol, but I'm rather sure we should have deserve a couple of major
version updates this last 2 decades.&lt;/p&gt;

&lt;p&gt;In my humble opinion, X11 was not designed to live 23 years. But hey, I'm
not blaming anyone here: I was 4 years old and playing Lego ® when they
released this latest version of the X protocol, so there is little chance
I'd have done something better.&lt;/p&gt;

&lt;p&gt;&lt;a name="fn.1" href="http://julien.danjou.info/blog/index.html#fnr.1"&gt;1.&lt;/a&gt; That's not totally true: they added (and then deprecated) many
extensions.&lt;/p&gt;


&lt;h3&gt;We won't fix. We'll work-around.&lt;/h3&gt;

&lt;p&gt;That is probably one of the guideline of the X protocol for the last
years. And don't misread me: I'm not bashing anyone thereafter.&lt;/p&gt;

&lt;p&gt;Since the X11 protocol was aging, the X guys started to add &lt;a href="http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture#Extensions"&gt;extensions&lt;/a&gt;. They
added tons of them over the years. This, in application of one of
&lt;a href="http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture#Design_principles"&gt;the early principles of X&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It is as important to decide what a system is not as to decide what it
is. Do not serve all the world's needs; rather, make the system extensible
so that additional needs can be met in an upwardly compatible fashion.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All of them with no exception were added because, bad luck, the X11 protocol
did not anticipated the things that happened in the last 23 years, like
video, OpenGL, multiple monitors, or the pleasure to draw oval windows. Some
of this extensions are still in use, while some of them have been dropped.&lt;/p&gt;

&lt;p&gt;While this is not a bad thing to extends the protocol, it seems like a bad
thing to try to fix the protocol with for example the &lt;a href="http://en.wikipedia.org/wiki/XFixes"&gt;XFixes extension&lt;/a&gt;, even
with all the good intentions Keith Packard might have in his greatness.&lt;/p&gt;


&lt;h3&gt;Actually it's even worst than you think&lt;/h3&gt;

&lt;p&gt;The X11 protocol (without extensions) defines about 120 types of requests:
create a window, move a window, etc.&lt;/p&gt;

&lt;p&gt;Nowadays, there's at least 25 % of them which are useless: usage of
server-side font, or the drawing of squares and polygon, are unused by any
modern application or toolkit. All of this is superseded by requests from
extensions, like the &lt;a href="http://en.wikipedia.org/wiki/XRender"&gt;XRender&lt;/a&gt; one.&lt;/p&gt;

&lt;p&gt;The handling of multiple monitors displays has totally been screwed up. X11
has been designed to work in &lt;a href="http://en.wikipedia.org/wiki/Zaphod_Beeblebrox#Cultural_references"&gt;Zaphod&lt;/a&gt; mode (independent monitors). But
&lt;a href="http://en.wikipedia.org/wiki/Xinerama"&gt;Xinerama&lt;/a&gt;, and nowadays &lt;a href="http://en.wikipedia.org/wiki/XRandR"&gt;XRandR&lt;/a&gt; have replaced it up: recent X servers
(released after ~2007) does not support Zaphod mode anymore, even if it's a
core piece of the X11 protocol.&lt;/p&gt;

&lt;p&gt;Worst: on many requests, there's limitation or design flaws, like described
in this document: &lt;a href="http://www.std.org/~msm/common/protocol.pdf"&gt;Why X Is Not Our Ideal Window System&lt;/a&gt; by DEC researchers.&lt;/p&gt;


&lt;h3&gt;We'll add more broken standard on top of that&lt;/h3&gt;

&lt;p&gt;Following &lt;a href="http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture#Design_principles"&gt;its early principle&lt;/a&gt;, X does not define policies but only
mechanisms, which seems like a good thing,&lt;/p&gt;

&lt;p&gt;Consequently, people started writing specifications to determine a number of
stuff and dogmas: &lt;a href="http://en.wikipedia.org/wiki/ICCCM"&gt;ICCCM&lt;/a&gt;. That was 22 years ago in 1988. It's useless to add
that many things in this specification are now obsolete, useless, or that it
misses many modern stuff.&lt;/p&gt;

&lt;p&gt;I was not the only one to think that. The people from what will be the major
desktop environments, &lt;a href="http://www.kde.org"&gt;KDE&lt;/a&gt; and &lt;a href="http://www.gnome.org"&gt;GNOME&lt;/a&gt;, saw that too in the 90's while I was
learning to count. So they wrote &lt;a href="http://en.wikipedia.org/wiki/Extended_Window_Manager_Hints"&gt;EWMH&lt;/a&gt;, another standard that comes on top of
ICCCM and extends it with nifty features like maximization, full screen
mode, etc.&lt;/p&gt;

&lt;p&gt;The problem is that this standard has also been written by narrow-minded
people who at that time, were working on GNOME or KDE (and maybe
others). This desktop environments were having and still have some strong
concepts of how should work a desktop: "it should have work-spaces", "a
window is only on one workspace", "we only see a workspace at a time", "you
do not have multiple screens", etc.&lt;/p&gt;


&lt;h3&gt;Dude, we don't care: we have toolkits!&lt;/h3&gt;

&lt;p&gt;This vision of how the desktop should work have now been written in marble
in all applications and libraries implementing EWMH, like &lt;a href="http://www.gtk.org"&gt;GTK+&lt;/a&gt; or &lt;a href="http://qt.nokia.com"&gt;Qt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Nowadays, everybody forgot about all of this standards. Toolkits have
implemented this, circumvented the X11 protocol limitation and flaws, and
nobody wants to look back.&lt;/p&gt;

&lt;p&gt;Like all standards, obviously some people implemented them badly. This had
some side effects, like &lt;a href="http://julien.danjou.info/blog/2009.html#OpenOffice%20is%20better%20as%20a%20pager%20than%20as%20a%20text%20processor"&gt;OpenOffice acting like a pager&lt;/a&gt;.&lt;/p&gt;


&lt;h3&gt;We don't look back? Worst, we forgot where we came from!&lt;/h3&gt;

&lt;p&gt;With all these layers of bad designed standards, the desktop continued to
evolve for more than a decade. They continued to add more standard, the more
recent ones being based on D-Bus like the &lt;a href="http://www.galago-project.org/specs/notification/"&gt;Desktop Notification Specification&lt;/a&gt;
or the latest &lt;a href="http://www.notmart.org/misc/statusnotifieritem/index.html"&gt;Status Notifier Specification&lt;/a&gt; developed by KDE.&lt;/p&gt;

&lt;p&gt;The Status Notifier is a new implementation of the good old system tray
based on &lt;a href="http://en.wikipedia.org/wiki/XEmbed"&gt;XEmbed&lt;/a&gt;, using &lt;a href="http://en.wikipedia.org/wiki/D-Bus"&gt;D-Bus&lt;/a&gt; instead of the X11 mechanisms, and adding the
possibility to show the system tray with something else than icons.&lt;/p&gt;

&lt;p&gt;This specification draft saw an important issue and design flaw raised by
Wolfgang Draxinger in &lt;a href="http://lists.freedesktop.org/archives/xdg/2010-May/011516.html"&gt;this thread on the XDG mailing-list&lt;/a&gt;. What Wolfgang
points out, is that X is network-oriented, and D-Bus is not. Therefore,
making the Status Notifier specification to use D-Bus to pass system tray
messages around is a bad idea, since running a X application from host A on
host B will draw the system tray on the wrong host!&lt;/p&gt;

&lt;p&gt;Apparently, reading the thread, this &lt;a href="http://lists.freedesktop.org/archives/xdg/2010-May/011531.html"&gt;does not fear some of the KDE people&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;of course this is a bizarre corner case not worth much thought. at least
that's what you'll think until you actually run into it yourself (be it
because you are testing something or because you are setting up some
weird kiosk environment).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What Oswald describes as a corner case is an actual common use case for many
of us. Of course, YMMV.&lt;/p&gt;

&lt;p&gt;From my point of view, this is a step back in the wrong direction. But we
can conclude that the network part of X is now worthless, to at least KDE.&lt;/p&gt;


&lt;h3&gt;I used to believe in XCB&lt;/h3&gt;

&lt;p&gt;When I joined Freedesktop, it was to work on XCB, the X C Binding. XCB is a
nice, clean, 21st century technology based API to play with the X11
protocol. Its code is auto generated based on XML file describing the
protocol.&lt;/p&gt;

&lt;p&gt;In comparison, Xlib is 80's obfuscated code with almost no comments and
hard-coded things. Only a few people can understand some of its corner like
its i18n or XKB implementations. And all its code is &lt;em&gt;synchronous&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For people not knowing it yet, X is a network protocol where you send
request (like a GET in HTTP) and then get a response. Xlib forces the
application to wait for the reply to its request, so the application is
blocked until the X server sends the reply to the request. XCB on the other
hand does not block and allows the application to send a batch of requests,
do some other stuff in the mean time, and then gets the replies.&lt;/p&gt;

&lt;p&gt;It's like your Web browser would send one request at a time to a Web server,
and would wait until you downloaded all the images one by one to display the
page.&lt;/p&gt;

&lt;p&gt;In cases where X and all its clients are on the same host, the latency is
small and not really visible, therefore the gain for XCB to be asynchronous
is small. On slow network however, the gain can be huge, as proved in the
&lt;a href="http://bugs.freedesktop.org/show_bug.cgi?id=4232"&gt;rewrite of xlsclients with XCB by Peter Harris&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of the long standing goal of the XCB folks is to kick-out Xlib, to
increase speed and hides latency in X11 applications. That requires to port
many libraries, because almost none of them (&lt;a href="http://www.cairographics.org"&gt;Cairo&lt;/a&gt; being an exception)
supports XCB.&lt;/p&gt;

&lt;p&gt;From where I stand, I don't really see if the work is worth it now. The
desktop world is trusted by GNOME and KDE, meaning GTK+ and Qt. It seems
none of this toolkits are interested to work on XCB, neither on the X
protocol. They probably put hard effort in bypassing X limitation and flaws,
and they now sit on top of crap of workarounds and broken-by-design-standard
implementation. It seems to me they don't want to go back in the layers and
improves things.&lt;/p&gt;

&lt;p&gt;They're too high to go back down and they don't see what the gain would be.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.enlightenment.org/"&gt;Enlightenment&lt;/a&gt; with its &lt;a href="http://www.enlightenment.org/p.php?p=about&amp;amp;l=en"&gt;EFL&lt;/a&gt; was the first toolkit to have an XCB back-end
with the work of Vincent Torri. Unfortunately, the back-end is not
maintained and nobody cares about it. Last time I tried it, it did not
compile at all.&lt;/p&gt;


&lt;h3&gt;X12 ?&lt;/h3&gt;

&lt;p&gt;There's a page called &lt;a href="http://www.x.org/wiki/Development/X12"&gt;X12&lt;/a&gt; on the Freedesktop wiki, listing all the things
that should be fixed some days. Unfortunately, the list continues to grow up
an no one talks about working on X12.&lt;/p&gt;

&lt;p&gt;On the other hand, there's a handset of people trying to work when they will
have time on &lt;a href="http://www.freedesktop.org/wiki/Software/XKeyboardConfig/XKB2Dreams"&gt;XKB2&lt;/a&gt;, the second version of the "let's-try-to-fix-up-the
keyboard-part-of-the-protocol-we-wrote-23-years-ago-a-second-time"
extension.&lt;/p&gt;

&lt;p&gt;To me, it does not seem X12 will happen in the next decade neither.&lt;/p&gt;


&lt;h3&gt;Alternative ?&lt;/h3&gt;

&lt;p&gt;Do we got alternative to X ? There's &lt;a href="http://en.wikipedia.org/wiki/Wayland_(display_server)"&gt;Wayland&lt;/a&gt;, but it's far from being
usable. There's &lt;a href="http://www.directfb.org/"&gt;DirectFB&lt;/a&gt;, but that's not very portable. None seems candidate
to replace X some days to me.&lt;/p&gt;

&lt;p&gt;Anyhow, none of the main toolkits around support this alternative. GTK+
once supported DirectFB, but as far as I know, it is not supported nor works
nowadays, as stated by &lt;a href="http://np237.livejournal.com/27459.html"&gt;Josselin Mouette&lt;/a&gt;. This is why recent versions of the
Debian installer have migrated to X for the graphic part, thanks to Cyril
Brulebois work.&lt;/p&gt;


&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;XCB has been around for more than half-a-decade, and very few people showed
interested in it. As far as I can see, nobody is interested to use the X
protocol and everybody tries to encapsulate it in some higher-level API as
soon as possible to stop seeing it. This leads to poorly written application
and toolkits, with a lot of ugly hack.&lt;/p&gt;

&lt;p&gt;All of that also means that starting to write applications and graphical
toolkits based on XCB would be a very interesting project, but that would
lead to spend too much time learning to circumvent the X protocol flaws,
things that have been done in years by predecessors like Qt and GTK+.&lt;/p&gt;

&lt;p&gt;Major toolkits implementations have almost nothing to win in going back in
the dark water of X. I guess most of their folks prefer to work on shiny 3D
effects based on your GPS location, rather than redefining better basis for
everyone.&lt;/p&gt;

&lt;p&gt;The manpower available in the X world is very small. Debian lacking of X
maintainers is just the summit of that. There is very smart and very
competent and skilled guys in the X world, as you can see by simply reading
blog posts on &lt;a href="http://planet.freedesktop.org"&gt;Planet Freedesktop&lt;/a&gt; for example (me excluded). Unfortunately,
there's not enough of them to cover all the things involved in X: input
devices, graphics devices, new protocol extension specification and so
on. The X server is really late, and it seems most of the developers prefers
to work on the server itself than on the protocol behalf. Which is
understandable.&lt;/p&gt;

&lt;p&gt;I'm curious to see where all of that will lead in the upcoming years. I've
been walking in the X world hallways for about 3 years now, and I feel
desktop alternatives to KDE and GNOME will all die sooner or later. The time
were you could choose between a dozen "modern" window managers has passed
away.&lt;/p&gt;

&lt;p&gt;After all, maybe that is simply Darwinism applied to computer software.&lt;/p&gt;




&lt;a href="http://flattr.com/thing/47923/Julien-Danjous-blog"&gt;
&lt;img src="http://api.flattr.com/button/button-compact-static-100x17.png" alt="Flattr this" title="Flattr this" border="0"&gt;&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=FmL_zHh6-u4:oC94UYfiP1E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=FmL_zHh6-u4:oC94UYfiP1E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=FmL_zHh6-u4:oC94UYfiP1E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/FmL_zHh6-u4" height="1" width="1"/&gt;</content><feedburner:origLink>http://julien.danjou.info/blog/index.html#Thoughts%20and%20rambling%20on%20the%20X%20protocol</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1280497291208"><id gr:original-id="http://julien.danjou.info/blog/index.html#Announcing%20rainbow%2Dmode">tag:google.com,2005:reader/item/935faa9ea07fb0e0</id><title type="html">Announcing rainbow-mode</title><published>2010-07-30T13:41:31Z</published><updated>2010-07-30T13:41:31Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/aL6jyogLLaQ/index.html" type="text/html" /><author><name>Julien Danjou</name></author><gr:likingUser>01976246363751522272</gr:likingUser><gr:likingUser>10085918754342587906</gr:likingUser><gr:likingUser>03861461467171289721</gr:likingUser><gr:likingUser>10558337186149084692</gr:likingUser><source gr:stream-id="feed/http://julien.danjou.info/blog/index.xml"><id>tag:google.com,2005:reader/feed/http://julien.danjou.info/blog/index.xml</id><title type="html">jd:/dev/blog</title><link rel="alternate" href="http://julien.danjou.info/blog/index.html" type="text/html" /></source><content type="html" xml:base="http://julien.danjou.info/blog/index.html">&lt;p&gt;While customizing &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; this last weeks, I had the need to customize also
the color theme.&lt;/p&gt;

&lt;p&gt;Color themes are always a pain in the ass to edit, because you're supposed
to read color strings like &lt;em&gt;#aabbcc&lt;/em&gt; and guess what colors they represent.&lt;/p&gt;

&lt;p&gt;This is why I wrote &lt;em&gt;&lt;a href="http://julien.danjou.info/rainbow-mode.html"&gt;rainbow-mode&lt;/a&gt;&lt;/em&gt;, a minor mode for Emacs that will highlight
strings that represents color, using the color they represent.&lt;/p&gt;

&lt;p&gt;This support hexadecimal syntax, HTML color name, X color names and rgb()
CSS syntax.&lt;/p&gt;

&lt;center&gt;
&lt;p&gt;&lt;img src="http://julien.danjou.info/images/rainbow-mode.png" alt=""&gt;&lt;/p&gt;
&lt;/center&gt;



&lt;a href="http://flattr.com/thing/47923/Julien-Danjous-blog"&gt;
&lt;img src="http://api.flattr.com/button/button-compact-static-100x17.png" alt="Flattr this" title="Flattr this" border="0"&gt;&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=aL6jyogLLaQ:tetf6o22b6k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=aL6jyogLLaQ:tetf6o22b6k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=aL6jyogLLaQ:tetf6o22b6k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/aL6jyogLLaQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://julien.danjou.info/blog/index.html#Announcing%20rainbow%2Dmode</feedburner:origLink></entry></feed>
