<?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>CN_MqYra3Z8C</gr:continuation><author><name>Mekk</name></author><updated>2010-03-10T07:57:50Z</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="1268207870961"><id gr:original-id="tag:typepad.com,2003:post-6a00d83451b31569e2012876aa0ce5970c">tag:google.com,2005:reader/item/dea5973e72a4d850</id><title type="html">Losing Andrew Carnegie</title><published>2010-03-07T10:43:00Z</published><updated>2010-03-07T10:43:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/Y6sW7Oar_Tc/losing-andrew-carnegie.html" type="text/html" /><link rel="replies" href="http://sethgodin.typepad.com/seths_blog/2010/03/losing-andrew-carnegie.html" type="text/html" /><content xml:base="http://sethgodin.typepad.com/seths_blog/" xml:lang="en-US" type="html">&lt;p&gt;Carnegie apparently said, "Take away my people, but leave my factories and soon grass will grow on the factory floors......Take away my factories, but leave my people and soon we will have a new and better factory."&lt;/p&gt;&lt;p&gt;Is there a typical large corporation working today that still believes this?&lt;/p&gt;&lt;p&gt;Most organizations now have it backwards. The factory, the infrastructure, the systems, the patents, the process, the manual... that's king. In fact, shareholders demand it.&lt;/p&gt;&lt;p&gt;It turns out that success is coming from the atypical organizations, the ones that can get back to embracing irreplaceable people, the linchpins, the ones that make a difference. Anything else can be replicated cheaper by someone else.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=T1t9zN2WJwM:1H-xM-1UXfU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=T1t9zN2WJwM:1H-xM-1UXfU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?i=T1t9zN2WJwM:1H-xM-1UXfU:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=T1t9zN2WJwM:1H-xM-1UXfU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?i=T1t9zN2WJwM:1H-xM-1UXfU:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=T1t9zN2WJwM:1H-xM-1UXfU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/typepad/sethsmainblog/~4/T1t9zN2WJwM" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=Y6sW7Oar_Tc:VJ0BSuZYXz8: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=Y6sW7Oar_Tc:VJ0BSuZYXz8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=Y6sW7Oar_Tc:VJ0BSuZYXz8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/Y6sW7Oar_Tc" height="1" width="1"/&gt;</content><author><name>Seth Godin</name></author><gr:likingUser>12990940133197776746</gr:likingUser><gr:likingUser>05259566976767128128</gr:likingUser><gr:likingUser>01378362922825043920</gr:likingUser><gr:likingUser>01224498559420767385</gr:likingUser><gr:likingUser>07170499960291821851</gr:likingUser><gr:likingUser>10366480381824398793</gr:likingUser><gr:likingUser>06836422528150126485</gr:likingUser><gr:likingUser>03490475870080539773</gr:likingUser><gr:likingUser>02092943838564559099</gr:likingUser><gr:likingUser>00216266662614051495</gr:likingUser><gr:likingUser>09707714666645634624</gr:likingUser><gr:likingUser>07315051996252857139</gr:likingUser><gr:likingUser>18202590468076660258</gr:likingUser><gr:likingUser>13057385199218195453</gr:likingUser><gr:likingUser>07139243193558197037</gr:likingUser><gr:likingUser>03970370891561483415</gr:likingUser><gr:likingUser>14224134059409316207</gr:likingUser><gr:likingUser>16869745641614086221</gr:likingUser><gr:likingUser>13696983230628520415</gr:likingUser><gr:likingUser>08748823588543312374</gr:likingUser><gr:likingUser>18128479142991488428</gr:likingUser><gr:likingUser>07050687848573741600</gr:likingUser><gr:likingUser>16958614747233220671</gr:likingUser><gr:likingUser>07452669192691215530</gr:likingUser><gr:likingUser>04490406597174706846</gr:likingUser><gr:likingUser>03560200052926293134</gr:likingUser><gr:likingUser>04421191134967048834</gr:likingUser><gr:likingUser>16188505377848183052</gr:likingUser><gr:likingUser>02741563639509228021</gr:likingUser><gr:likingUser>06945282437217682568</gr:likingUser><gr:likingUser>17499704811082572793</gr:likingUser><gr:likingUser>15919668003302288733</gr:likingUser><gr:likingUser>02269656737792893975</gr:likingUser><gr:likingUser>07846121479207904374</gr:likingUser><gr:likingUser>15751288444407481914</gr:likingUser><gr:likingUser>02080127968210448614</gr:likingUser><gr:likingUser>10324818919023888648</gr:likingUser><gr:likingUser>13306578704933458086</gr:likingUser><gr:likingUser>12147027165183346417</gr:likingUser><gr:likingUser>01809650712453904001</gr:likingUser><gr:likingUser>15246756168639854855</gr:likingUser><gr:likingUser>04843381969968619758</gr:likingUser><gr:likingUser>11270171458922216948</gr:likingUser><gr:likingUser>05247968899839252084</gr:likingUser><gr:likingUser>08059203792403139005</gr:likingUser><gr:likingUser>05300697168151124794</gr:likingUser><gr:likingUser>00107408941918062758</gr:likingUser><gr:likingUser>04901500204428454494</gr:likingUser><gr:likingUser>01073639216063890330</gr:likingUser><gr:likingUser>17862903703485204094</gr:likingUser><gr:likingUser>03195910748953282006</gr:likingUser><gr:likingUser>03292177839336061984</gr:likingUser><gr:likingUser>16471383142055539106</gr:likingUser><gr:likingUser>05123306718636506131</gr:likingUser><gr:likingUser>15850446774142810887</gr:likingUser><gr:likingUser>08759707611832914818</gr:likingUser><gr:likingUser>02904755526297934385</gr:likingUser><gr:likingUser>11594504325615762968</gr:likingUser><gr:likingUser>14665582612819298383</gr:likingUser><gr:likingUser>13281146764639882214</gr:likingUser><gr:likingUser>04583787003001197338</gr:likingUser><gr:likingUser>14204181209420232599</gr:likingUser><gr:likingUser>18023099470000976174</gr:likingUser><gr:likingUser>02626549229402109857</gr:likingUser><gr:likingUser>15246499783674969514</gr:likingUser><gr:likingUser>13939299528429497067</gr:likingUser><gr:likingUser>16558009820424632552</gr:likingUser><gr:likingUser>02520413608638959903</gr:likingUser><gr:likingUser>04992484953289227472</gr:likingUser><gr:likingUser>04601702247889566094</gr:likingUser><gr:likingUser>14462943574626741860</gr:likingUser><gr:likingUser>10797428145199142285</gr:likingUser><gr:likingUser>14383969961635638863</gr:likingUser><gr:likingUser>12001470393827068758</gr:likingUser><gr:likingUser>17491545474192184960</gr:likingUser><gr:likingUser>03602835681444527847</gr:likingUser><gr:likingUser>14281668685233099868</gr:likingUser><gr:likingUser>13220900651900645117</gr:likingUser><gr:likingUser>03970137388897272569</gr:likingUser><gr:likingUser>14362384495308276062</gr:likingUser><gr:likingUser>08664702173082506227</gr:likingUser><gr:likingUser>04725279285636921877</gr:likingUser><gr:likingUser>06955855646732497059</gr:likingUser><gr:likingUser>08903261836777611431</gr:likingUser><gr:likingUser>13310035680271791168</gr:likingUser><gr:likingUser>11253719338661800764</gr:likingUser><gr:likingUser>08228297149657587322</gr:likingUser><gr:likingUser>14537923607623480721</gr:likingUser><gr:likingUser>07570340884163482768</gr:likingUser><gr:likingUser>07876018908142980393</gr:likingUser><gr:likingUser>01834910545141335547</gr:likingUser><gr:likingUser>00898023021857241320</gr:likingUser><gr:likingUser>04631486114415918089</gr:likingUser><gr:likingUser>12764780689558227544</gr:likingUser><gr:likingUser>00071201598017220284</gr:likingUser><gr:likingUser>07568254177051505193</gr:likingUser><gr:likingUser>01707051492707378780</gr:likingUser><gr:likingUser>03032998846354113340</gr:likingUser><gr:likingUser>02575597668356588954</gr:likingUser><gr:likingUser>14217098608439517308</gr:likingUser><source gr:stream-id="feed/http://feeds.feedburner.com/typepad/sethsmainblog"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/typepad/sethsmainblog</id><title type="html">Seth&amp;#39;s Blog</title><link rel="alternate" href="http://sethgodin.typepad.com/seths_blog/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/typepad/sethsmainblog/~3/T1t9zN2WJwM/losing-andrew-carnegie.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1268148701252"><id gr:original-id="http://igoro.com/?p=366">tag:google.com,2005:reader/item/0f122b38937add95</id><category term="Uncategorized" /><title type="html">Gallery of Processor Cache Effects</title><published>2010-01-19T10:28:11Z</published><updated>2010-01-19T10:28:11Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/5dtBX13VqlA/" type="text/html" /><content xml:base="http://igoro.com/" type="html">&lt;p&gt;Most of my readers will understand that cache is a fast but small type of memory that stores recently accessed memory locations.  This description is reasonably accurate, but the “boring” details of how processor caches work can help a lot when trying to understand program performance.&lt;/p&gt;
&lt;p&gt;In this blog post, I will use code samples to illustrate various aspects of how caches work, and what is the impact on the performance of real-world programs.&lt;/p&gt;
&lt;p&gt;The examples are in C#, but the language choice has little impact on the performance scores and the conclusions they lead to.&lt;/p&gt;
&lt;h3&gt;Example 1: Memory accesses and performance&lt;/h3&gt;
&lt;p&gt;How much faster do you expect Loop 2 to run, compared Loop 1?&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;int&lt;/span&gt;[] arr = &lt;span style="color:blue"&gt;new int&lt;/span&gt;[64 * 1024 * 1024];
&lt;span&gt;&lt;/span&gt;
&lt;span style="color:green"&gt;// Loop 1&lt;/span&gt;
&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; arr.Length; i++) arr[i] *= 3;

&lt;span style="color:green"&gt;// Loop 2&lt;/span&gt;
&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; arr.Length; i += 16) arr[i] *= 3;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The first loop multiplies every value in the array by 3, and the second loop multiplies only every 16-th. The second loop only does about &lt;strong&gt;6% of the work&lt;/strong&gt; of the first loop, but on modern machines, the two for-loops take about the same time&lt;strong&gt;:&lt;/strong&gt; &lt;strong&gt;80&lt;/strong&gt; and &lt;strong&gt;78&lt;/strong&gt; &lt;strong&gt;ms&lt;/strong&gt; respectively on my machine.&lt;/p&gt;
&lt;p&gt;The reason why the loops take the same amount of time has to do with memory. The running time of these loops is dominated by the memory accesses to the array, not by the integer multiplications. And, as I’ll explain on Example 2, the hardware will perform the same main memory accesses for the two loops.&lt;/p&gt;
&lt;h3&gt;Example 2: Impact of cache lines&lt;/h3&gt;
&lt;p&gt;Let’s explore this example deeper. We will try other step values, not just 1 and 16:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; arr.Length; i += K) arr[i] *= 3;&lt;/pre&gt;
&lt;p&gt;Here are the running times of this loop for different step values (K):&lt;/p&gt;
&lt;p&gt;&lt;img style="display:inline;border-width:0px" title="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/01/image6.png" border="0" alt="image" width="483" height="291"&gt;&lt;/p&gt;
&lt;p&gt;Notice that while step is in the range from 1 to 16, the running time of the for-loop hardly changes. But from 16 onwards, the running time is halved each time we double the step.&lt;/p&gt;
&lt;p&gt;The reason behind this is that today’s CPUs do not access memory byte by byte. Instead, they fetch memory in chunks of (typically) 64 bytes, called &lt;em&gt;cache lines&lt;/em&gt;. When you read a particular memory location, the entire cache line is fetched from the main memory into the cache. And, accessing other values from the same cache line is cheap!&lt;/p&gt;
&lt;p&gt;Since 16 ints take up 64 bytes (one cache line), for-loops with a step between 1 and 16 have to touch the same number of cache lines: all of the cache lines in the array. But once the step is 32, we’ll only touch roughly every other cache line, and once it is 64, only every fourth.&lt;/p&gt;
&lt;p&gt;Understanding of cache lines can be important for certain types of program optimizations. For example, alignment of data may determine whether an operation touches one or two cache lines. As we saw in the example above, this can easily mean that in the misaligned case, the operation will be twice slower.&lt;/p&gt;
&lt;h3&gt;Example 3: L1 and L2 cache sizes&lt;/h3&gt;
&lt;p&gt;Today’s computers come with two or three levels of caches, usually called L1, L2 and possibly L3. If you want to know the sizes of the different caches, you can use the &lt;a href="http://technet.microsoft.com/en-us/sysinternals/cc835722.aspx"&gt;CoreInfo&lt;/a&gt; SysInternals tool, or use the &lt;a href="http://msdn.microsoft.com/en-us/library/ms683194(VS.85).aspx"&gt;GetLogicalProcessorInfo&lt;/a&gt; Windows API call. Both methods will also tell you the cache line sizes, in addition to the cache sizes.&lt;/p&gt;
&lt;p&gt;On my machine, CoreInfo reports that I have a 32kB L1 data cache, a 32kB L1 instruction cache, and a 4MB L2 data cache. The L1 caches are per-core, and the L2 caches are shared between pairs of cores:&lt;/p&gt;
&lt;pre&gt;Logical Processor to Cache Map:
*---  Data Cache          0, Level 1,   32 KB, Assoc   8, LineSize  64
*---  Instruction Cache   0, Level 1,   32 KB, Assoc   8, LineSize  64
-*--  Data Cache          1, Level 1,   32 KB, Assoc   8, LineSize  64
-*--  Instruction Cache   1, Level 1,   32 KB, Assoc   8, LineSize  64
**--  Unified Cache       0, Level 2,    4 MB, Assoc  16, LineSize  64
--*-  Data Cache          2, Level 1,   32 KB, Assoc   8, LineSize  64
--*-  Instruction Cache   2, Level 1,   32 KB, Assoc   8, LineSize  64
---*  Data Cache          3, Level 1,   32 KB, Assoc   8, LineSize  64
---*  Instruction Cache   3, Level 1,   32 KB, Assoc   8, LineSize  64
--**  Unified Cache       1, Level 2,    4 MB, Assoc  16, LineSize  64&lt;/pre&gt;
&lt;p&gt;Let’s verify these numbers by an experiment. To do that, we’ll step over an array incrementing every 16th integer – a cheap way to modify every cache line. When we reach the last value, we loop back to the beginning. We’ll experiment with different array sizes, and we should see drops in the performance at the array sizes where the array spills out of one cache level.&lt;/p&gt;
&lt;p&gt;Here is the program:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;int &lt;/span&gt;steps = 64 * 1024 * 1024; &lt;span style="color:green"&gt;// Arbitrary number of steps&lt;/span&gt;
&lt;span style="color:blue"&gt;int &lt;/span&gt;lengthMod = arr.Length - 1;
&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; steps; i++)
{
    arr[(i * 16) &amp;amp; lengthMod]++; &lt;span style="color:green"&gt;// (x &amp;amp; lengthMod) is equal to (x % arr.Length)
&lt;/span&gt;}&lt;/pre&gt;
&lt;p&gt;And here are the timings:&lt;/p&gt;
&lt;p&gt; &lt;img style="display:inline;border-width:0px" title="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image.png" border="0" alt="image" width="483" height="291"&gt;&lt;/p&gt;
&lt;p&gt;You can see distinct drops after 32kB and 4MB – the sizes of L1 and L2 caches on my machine.&lt;/p&gt;
&lt;h3&gt;Example 4: Instruction-level parallelism&lt;/h3&gt;
&lt;p&gt;Now, let’s take a look at something different. Out of these two loops, which one would you expect to be faster?&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;int &lt;/span&gt;steps = 256 * 1024 * 1024;
&lt;span style="color:blue"&gt;int&lt;/span&gt;[] a = &lt;span style="color:blue"&gt;new int&lt;/span&gt;[2];

&lt;span style="color:green"&gt;// Loop 1
&lt;/span&gt;&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i=0; i&amp;lt;steps; i++) { a[0]++; a[0]++; }

&lt;span style="color:green"&gt;// Loop 2
&lt;/span&gt;&lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i=0; i&amp;lt;steps; i++) { a[0]++; a[1]++; }&lt;/pre&gt;
&lt;p&gt;It turns out that the second loop is about twice faster than the first loop, at least on all of the machines I tested. Why? This has to do with the dependencies between operations in the two loop bodies.&lt;/p&gt;
&lt;p&gt;In the body of the first loop, operations depend on each other as follows:&lt;/p&gt;
&lt;p&gt;&lt;img style="display:inline;border-width:0px" title="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/01/image.png" border="0" alt="image" width="613" height="25"&gt;&lt;/p&gt;
&lt;p&gt;But in the second example, we only have these dependencies:&lt;/p&gt;
&lt;p&gt;&lt;img style="display:inline;border-width:0px" title="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image2.png" border="0" alt="image" width="289" height="73"&gt;&lt;/p&gt;
&lt;p&gt;The modern processor has various parts that have a little bit of parallelism in them: it can access two memory locations in L1 at the same time, or perform two simple arithmetic operations. In the first loop, the processor cannot exploit this instruction-level parallelism, but in the second loop, it can.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[UPDATE]&lt;/strong&gt;: Many people on reddit are asking about compiler optimizations, and whether { a[0]++; a[0]++; } would just get optimized to { a[0]+=2; }. In fact, the C# compiler and CLR JIT will not do this optimization – not when array accesses are involved. I built all of the tests in release mode (i.e. with optimizations), but I looked at the JIT-ted assembly to verify that optimizations aren’t skewing the results.&lt;/p&gt;
&lt;h3&gt;Example 5: Cache associativity&lt;/h3&gt;
&lt;p&gt;One key decision in cache design is whether each chunk of main memory can be stored in any cache slot, or in just some of them.&lt;/p&gt;
&lt;p&gt;There are three possible approaches to mapping cache slots to memory chunks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Direct mapped cache&lt;/strong&gt;
&lt;p&gt;Each memory chunk can only be stored only in one particular slot in the cache. One simple solution is to map the chunk with index chunk_index to cache slot (chunk_index % cache_slots). Two memory chunks that map to the same slot cannot be stored simultaneously in the cache.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;N-way set associative cache&lt;/strong&gt;
&lt;p&gt;Each memory chunk can be stored in any one of N particular slots in the cache. As an example, in a 16-way cache, each memory chunk can be stored in 16 different cache slots. Commonly, chunks with indices with the same lowest order bits will all share 16 slots.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fully associative cache&lt;/strong&gt;
&lt;p&gt;Each memory chunk can be stored in any slot in the cache. Effectively, the cache operates like a hash table.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Direct mapped caches can suffer from conflicts – when multiple values compete for the same slot in the cache, they keep evicting each other out, and the hit rate plummets. On the other hand, fully associative caches are complicated and costly to implement in the hardware. N-way set associative caches are the typical solution for processor caches, as they make a good trade off between implementation simplicity and good hit rate.&lt;/p&gt;
&lt;p&gt;For example, the 4MB L2 cache on my machine is 16-way associative. All 64-byte memory chunks are partitioned into sets (based on the lowest order bits of the chunk index), and chunks in the same set compete for 16 slots in the L2 cache.&lt;/p&gt;
&lt;p&gt;Since the L2 cache has 65,536 slots, and each set will need 16 slots in the cache, we will have 4,096 sets. So, the lowest 12 bits of the chunk index will determine which set the chunk belongs to (2&lt;sup&gt;12&lt;/sup&gt; = 4,096). As a result, cache lines at addresses that differ by a multiple of 262,144 bytes (4096 * 64) will compete for the same slot in the cache. The cache on my machine can hold at most 16 such cache lines.&lt;/p&gt;
&lt;p&gt;In order for the effects of cache associativity to become apparent, I need to repeatedly access more than  16 elements from the same set. I will demonstrate this using the following method:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;public static long &lt;/span&gt;UpdateEveryKthByte(&lt;span style="color:blue"&gt;byte&lt;/span&gt;[] arr, &lt;span style="color:blue"&gt;int &lt;/span&gt;K)
{
    &lt;span style="color:#2b91af"&gt;Stopwatch &lt;/span&gt;sw = &lt;span style="color:#2b91af"&gt;Stopwatch&lt;/span&gt;.StartNew();
    &lt;span style="color:blue"&gt;const int &lt;/span&gt;rep = 1024*1024; &lt;span style="color:green"&gt;// Number of iterations – arbitrary&lt;/span&gt;

&lt;span style="color:green"&gt;    &lt;/span&gt;&lt;span style="color:blue"&gt;int &lt;/span&gt;p = 0;
    &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; rep; i++)
    {
        arr[p]++;
        p += K;
        &lt;span style="color:blue"&gt;if &lt;/span&gt;(p &amp;gt;= arr.Length) p = 0;
    }

    sw.Stop();
    &lt;span style="color:blue"&gt;return &lt;/span&gt;sw.ElapsedMilliseconds;
}&lt;/pre&gt;
&lt;p&gt;This method increments every K-th value in the array. Once the it reaches the end of the array, it starts again from the beginning. After running sufficiently long (2^20 steps), the loop stops.&lt;/p&gt;
&lt;p&gt;I ran UpdateEveryKthByte() with different array sizes (in 1MB increments) and different step sizes. Here is a plot of the results, with blue representing long running time, and white representing short:&lt;/p&gt;
&lt;p&gt; &lt;a href="http://igoro.com/wordpress/wp-content/uploads/2010/02/image3.png"&gt;&lt;img style="display:inline;border-width:0px" title="image" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/image_thumb1_opt.png" border="0" alt="image" width="582" height="299"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The blue areas (long running times) are cases where the updated values &lt;strong&gt;could not be simultaneously held in the cache&lt;/strong&gt; as we repeatedly iterated over them. The bright blue areas correspond to running times of ~80 ms, and the nearly white areas to ~10 ms.&lt;/p&gt;
&lt;p&gt;Let’s explain the blue parts of the chart:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Why the vertical lines?&lt;/strong&gt;The vertical lines show the step values that touch too many memory locations (&amp;gt;16) from the same set. For those steps, we cannot simultaneously hold all touched values in the 16-way associative cache on my machine.
&lt;p&gt;Some bad step values are powers of two: 256 and 512. As an example, consider step 512 on an 8MB array. An 8MB cache line contains 32 values that are spaced by 262,144 bytes apart. All of those values will be updated by each pass of our loop, because 512 divides 262,144.&lt;/p&gt;
&lt;p&gt;And since 32 &amp;gt; 16, those 32 values will keep competing for the same 16 slots in the cache.&lt;/p&gt;
&lt;p&gt;Some values that are not powers of two are simply unfortunate, and will end up visiting disproportionately many values from the same set. Those step values will also show up as as blue lines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why do the vertical lines stop at 4MB array length?&lt;/strong&gt;On arrays of 4MB or less, a 16-way associative cache is just as good as a fully associative one.
&lt;p&gt;A 16-way associative cache can hold at most 16 cache lines that are a multiple of 262,144 bytes apart. There is &lt;strong&gt;no set&lt;/strong&gt; of 17 or more cache lines all aligned on 262,144-byte boundaries within 4MB, because 16 * 262,144 = 4,194,304.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why the blue triangle in upper left?&lt;/strong&gt;In the triangle area, we cannot hold all necessary data in cache simultaneously … not due to the associativity, but simply because of the L2 cache size limit.
&lt;p&gt;For example, consider the array length 16MB with step 128. We are repeatedly updating every 128th byte in the array, which means that we touch every other 64-byte memory chunk. To store every other cache line of a 16MB array, we’d need 8MB cache. But, my machine only has 4MB of cache.&lt;/p&gt;
&lt;p&gt;Even if the 4MB cache on my machine was fully associative, it still wouldn’t be able to hold 8MB of data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why does the triangle fade out in the left?&lt;/strong&gt;Notice that the gradient goes from 0 to 64 bytes – one cache line! As explained in examples 1 and 2, additional accesses to same cache line are nearly free. For example, when stepping by 16 bytes, it will take 4 steps to get to the next cache line. So, we get four memory accesses for the price of one.
&lt;p&gt;Since the number of steps is the same for all cases, a cheaper step results in a shorter running time.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These patterns continue to hold as you extend the chart:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://igoro.com/wordpress/wp-content/uploads/2010/02/assoc_big1.png"&gt;&lt;img style="display:inline;border-width:0px" title="assoc_big" src="http://igoro.com/wordpress/wp-content/uploads/2010/02/assoc_big_thumb1_opt.png" border="0" alt="assoc_big" width="582" height="299"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cache associativity is interesting to understand and can certainly be demonstrated, but it tends to be less of a problem compared to the other issues discussed in this article. It is certainly not something that should be at the forefront of your mind as you write programs.&lt;/p&gt;
&lt;h3&gt;Example 6: False cache line sharing&lt;/h3&gt;
&lt;p&gt;On multi-core machines, caches encounter another problem – consistency. Different cores have fully or partly separate caches. On my machine, L1 caches are separate (as is common), and there are two pairs of processors, each pair sharing an L2 cache. While the details vary, a modern multi-core machine will have a multi-level cache hierarchy, where the faster and smaller caches belong to individual processors.&lt;/p&gt;
&lt;p&gt;When one processor modifies a value in its cache, other processors cannot use the old value anymore. That memory location will be invalidated in all of the caches. Furthermore, since caches operate on the granularity of cache lines and not individual bytes, the &lt;strong&gt;entire cache line&lt;/strong&gt; will be invalidated in all caches!&lt;/p&gt;
&lt;p&gt;To demonstrate this issue, consider this example:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;private static int&lt;/span&gt;[] s_counter = &lt;span style="color:blue"&gt;new int&lt;/span&gt;[1024];
&lt;span style="color:blue"&gt;private void &lt;/span&gt;UpdateCounter(&lt;span style="color:blue"&gt;int &lt;/span&gt;position)
{
    &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;j = 0; j &amp;lt; 100000000; j++)
    {
        s_counter[position] = s_counter[position] + 3;
    }
}&lt;/pre&gt;
&lt;p&gt;On my quad-core machine, if I call UpdateCounter with parameters 0,1,2,3 from four different threads, it will take &lt;strong&gt;4.3 seconds &lt;/strong&gt;until all threads are done.&lt;/p&gt;
&lt;p&gt;On the other hand, if I call UpdateCounter with parameters 16,32,48,64 the operation will be done in &lt;strong&gt;0.28 seconds&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Why? In the first case, all four values are very likely to end up on the same cache line. Each time a core increments the counter, it invalidates the cache line that holds all four counters. All other cores will suffer a cache miss the next time they access their own counters. This kind of thread behavior effectively disables caches, &lt;strong&gt;crippling&lt;/strong&gt; the program’s performance.&lt;/p&gt;
&lt;h3&gt;Example 7: Hardware complexities&lt;/h3&gt;
&lt;p&gt;Even when you know the basics of how caches work, the hardware will still sometimes surprise you. Different processors differ in optimizations, heuristics, and subtle details of how they do things.&lt;/p&gt;
&lt;p&gt;On some processors, L1 cache can process two accesses in parallel if they access cache lines from different banks, and serially if they belong to the same bank. Also, processors can surprise you with clever optimizations. For example, the false-sharing example that I’ve used on several machines in the past did not work well on my machine without tweaks – my home machine can optimize the execution in the simplest cases to reduce the cache invalidations.&lt;/p&gt;
&lt;p&gt;Here is one odd example of “hardware weirdness”:&lt;/p&gt;
&lt;pre&gt;&lt;span style="color:blue"&gt;private static int &lt;/span&gt;A, B, C, D, E, F, G;
&lt;span style="color:blue"&gt;private static void &lt;/span&gt;Weirdness()
{
    &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 200000000; i++)
    {
        &amp;lt;something&amp;gt;
    }
}&lt;/pre&gt;
&lt;p&gt;When I substitute three different blocks for “&amp;lt;something&amp;gt;”, I get these timings:&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="362"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="199" valign="top"&gt;&lt;strong&gt;&amp;lt;something&amp;gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td width="161" valign="top"&gt;&lt;strong&gt;Time&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="220" valign="top"&gt;A++; B++; C++; D++;&lt;/td&gt;
&lt;td width="169" valign="top"&gt;719 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="225" valign="top"&gt;A++; C++; E++; G++;&lt;/td&gt;
&lt;td width="172" valign="top"&gt;448 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="225" valign="top"&gt;A++; C++;&lt;/td&gt;
&lt;td width="174" valign="top"&gt;518 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Incrementing fields A,B,C,D takes longer than incrementing fields A,C,E,G. And what’s even weirder, incrementing just A and C takes &lt;strong&gt;longer &lt;/strong&gt;than increment A and C &lt;strong&gt;and&lt;/strong&gt; E and G!&lt;/p&gt;
&lt;p&gt;I don’t know for sure what is the reason behind these numbers, but I suspect it is related to memory banks. If someone can explain these numbers, I’d be very curious to hear about it.&lt;/p&gt;
&lt;p&gt;The lesson of this example is that can be difficult to fully predict hardware performance. There is a lot that you &lt;strong&gt;can&lt;/strong&gt; predict, but ultimately, it is very important to measure and verify your assumptions.&lt;/p&gt;
&lt;div style="background-color:#f6f6ff;margin-top:20px;width:600px;margin-bottom:20px;margin-left:10px;border:black 1px solid;padding:4px"&gt;
&lt;p&gt;Read more of my articles:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://igoro.com/archive/human-heart-is-a-turing-machine-research-on-xbox-360-shows-wait-what/"&gt;Human heart is a Turing machine, research on XBox 360 shows. Wait, what?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://igoro.com/archive/self-printing-game-of-life-in-c/"&gt;Self-printing Game of Life in C#&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/"&gt;Efficient auto-complete with a ternary search tree&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://igoro.com/archive/numbers-that-cannot-be-computed/"&gt;Numbers that cannot be computed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And if you like my blog, &lt;a href="http://igoro.com/feed/"&gt;subscribe&lt;/a&gt;!&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Hopefully all of this helps you understand how caches work, and apply that knowledge when tuning your programs.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/igoro/~4/5dtBX13VqlA" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=5dtBX13VqlA:KyoaOWI_A3g: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=5dtBX13VqlA:KyoaOWI_A3g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=5dtBX13VqlA:KyoaOWI_A3g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/5dtBX13VqlA" height="1" width="1"/&gt;</content><author><name>Igor Ostrovsky</name></author><gr:likingUser>18146486342902622719</gr:likingUser><gr:likingUser>06006538507529006583</gr:likingUser><gr:likingUser>17321519908412308645</gr:likingUser><gr:likingUser>16681341695260261743</gr:likingUser><gr:likingUser>16085533288245172128</gr:likingUser><gr:likingUser>10424339004168172679</gr:likingUser><gr:likingUser>10049083604713484123</gr:likingUser><gr:likingUser>11737857327255323766</gr:likingUser><gr:likingUser>07250129884366479084</gr:likingUser><gr:likingUser>01599268592921359637</gr:likingUser><gr:likingUser>14638224132259407950</gr:likingUser><gr:likingUser>00220888783655893749</gr:likingUser><gr:likingUser>12784790545648997205</gr:likingUser><gr:likingUser>09593184903756704274</gr:likingUser><gr:likingUser>00059529022475919495</gr:likingUser><gr:likingUser>02525844516983582037</gr:likingUser><gr:likingUser>00787938847478046556</gr:likingUser><gr:likingUser>06718712618053279165</gr:likingUser><gr:likingUser>16939287700545273181</gr:likingUser><gr:likingUser>16798125704060913183</gr:likingUser><gr:likingUser>13940536751471068482</gr:likingUser><gr:likingUser>10097722472524821289</gr:likingUser><gr:likingUser>10044612689267319876</gr:likingUser><gr:likingUser>13545480196181515120</gr:likingUser><gr:likingUser>04869275416294276962</gr:likingUser><gr:likingUser>06676530261975115190</gr:likingUser><gr:likingUser>11236253508733938641</gr:likingUser><gr:likingUser>01453653866331110838</gr:likingUser><source gr:stream-id="feed/http://feeds.feedburner.com/igoro"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/igoro</id><title type="html">Igor Ostrovsky Blogging</title><link rel="alternate" href="http://igoro.com" type="text/html" /></source><feedburner:origLink>http://igoro.com/archive/gallery-of-processor-cache-effects/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1268142232251"><id gr:original-id="http://www.scottberkun.com/?p=3945">tag:google.com,2005:reader/item/0889901f36bd269f</id><category term="Innovation" /><category term="Microsoft" /><title type="html">Microsoft and Creative Destruction</title><published>2010-02-11T17:15:59Z</published><updated>2010-02-11T17:15:59Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/wfyCAoW0M8A/" type="text/html" /><content xml:base="http://www.scottberkun.com/" type="html">&lt;p&gt;A recent NYT article by former &lt;a href="http://www.nytimes.com/2010/02/04/opinion/04brass.html?pagewanted=1"&gt;Microsoft VP Dick Brass &lt;/a&gt;has caused quite the stir, but for the wrong reasons.  Every follow up article I’ve read, including &lt;a href="http://www.engadget.com/2010/02/04/microsoft-responds-to-dick-brass-we-measure-our-work-by-its-br/"&gt;one from Microsoft&lt;/a&gt;, gets &lt;span style="text-decoration:line-through"&gt;much of it wrong&lt;/span&gt; some key things wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The premise:&lt;/strong&gt; The core point of the Brass article is how the introduction of middle management and bureaucracy has killed innovation at Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My counterargument&lt;/strong&gt;:  Microsoft has always been a conservative, platforms company. Visionary design and creative leaders think in terms of great products, which Microsoft has never been good at. Brass assumes the challenges that hampered Tablet PC were new and local, but they have always been there. Microsoft’s best, and most creative, work has come when a competitor forced one of the few Renaissance-VPs (VPs who were not over-promoted engineers but actually had a diversity of management skills) to take product design seriously.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My credentials:&lt;/strong&gt; I worked at MSFT 1994 to 2003. I was on the IE 1.0 to IE 5.0 team among others (Windows, MSN, and MSTE/Best Practices, where I worked with many groups across the company). I wrote a &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FMyths-Innovation-Scott-Berkun%2Fdp%2F0596527055&amp;amp;tag=scottberkunco-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;bestselling book about Innovation&lt;/a&gt; and I’ve spoken and consulted with various groups at the company dozens of times since I left in 2003.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;My take:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The primary problem at Microsoft regarding good design &amp;amp;  innovation is the diffusion of creative authority. &lt;/strong&gt;The problem is not the numbers of people at the company, or the layers of management, as many gripe about.  Layers don’t help, but it’s not the problem. The real issue is the inability to &lt;strong&gt;grant creative authority to the few people worthy of it&lt;/strong&gt;. Microsoft has always been a place that gives way too many people a say in matters of design, vision and user experience, and it shows in the pervasive mediocrity of the majority of its products. Films need directors. Orchestras need conductors. But if you divide things into 30 pieces and ask 30 people to play creative visionary, mediocrity ensues. The better products at Microsoft are the ones where VPs modify the distribution of authority to create clear creative authority.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Few VPs are qualified to be creative leaders, at Microsoft or elsewhere&lt;/strong&gt;. And there is no creative lead role at Microsoft. There never has been. This is not new, it has always been true (at least since 1994 when I started). This is why when brilliant, genius type software designers come to the company, they are baffled by how little creative power they can earn, so they retreat to research or future thinking groups that have no skin in the game (e.g.&lt;a href="http://www.billbuxton.com/"&gt; Bill Buxton&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Steve_Capps"&gt;Steve Capps&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Ray_Ozzie"&gt;Ray Ozzie&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Jim_Gray_%28computer_scientist%29"&gt;Jim Gray (RIP)&lt;/a&gt;, etc.). Microsoft is simply a hard place for to accumulate wide authority over design, which is required to make coherent visions, user experiences and innovations come true. Worse, it’s rare for leaders to acknowledge death by too many cooks since those who have never worked elsewhere, and have no conception of creative process, can’t imagine  any other way. The culture has always been a heavily consensus/collaboration driven place for managers, which waters down ideas, and shifts what goes out the door heavily towards conservation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Management at Microsoft is fat with inbred managers who are not worthy of their title&lt;/strong&gt;, &lt;strong&gt;but this has always been true. &lt;/strong&gt; If you are hired to manage version 5 of something, you inherit a host of decisions made with skills you do not have, yet get credit for anyway. If the team you inherit does good work, and you happen to be the manager, you receive credit, regardless of how little you did. Entire unprofitable, failed divisions, funded by the rest of the company, promote people out of corporate obligation, creating the existence of middle managers who have never actually successfully managed anything in the marketplace. For the 90s, this was MSN and Consumer products, which were perennial failures. The quality pool of people who managed in those divisions was below average and as the company aged more of these groups were born. Microsoft, like all companies, has suffered from the &lt;a href="http://en.wikipedia.org/wiki/Peter_Principle"&gt;Peter principle&lt;/a&gt;, or worse, perhaps the &lt;strong&gt;Paul Principle&lt;/strong&gt; (people who are lousy at even simple management skills but inherit mediocre projects they don’t understand, and simply manage not to get fired via their team’s noble but unheralded efforts, which hide their shortcomings). As a result, there are line level managers at Microsoft who are more competent than some middle or senior managers. But this has always been true, given the diversity of the company. It’s worse now because of the size.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real layoffs would be a blessing&lt;/strong&gt;. In 1999 when I left the Internet Explorer team (before the ill-fated IE 6.0 release), I looked around the company for other teams to work on. I couldn’t believe how many lost, misguided, sad, self-destructive teams I saw. This was in &lt;strong&gt;1999!&lt;/strong&gt; The company has more than tripled in size since then. &lt;a href="http://minimsft.blogspot.com/"&gt;Mini-Microsoft &lt;/a&gt;is so clearly on the mark about his core ambitions.  I don’t wish unemployment on anyone, but I’d say &lt;strong&gt;a)&lt;/strong&gt; the ratio of managers to programmers is insanely out of whack &lt;strong&gt;b)&lt;/strong&gt; The number of projects and divisions that have never made profit and are market laggards is obscene. If the company were split apart, few groups are competent enough to survive a year. This defeats the “strategic value” these properties supposedly have, as dumping of buckets of money earned by Office and Windows profits into their bonfires of incompetence does not a strategy make.  You need basic leadership competence, which all too many groups at Microsoft don’t have (and many never did).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft’s best and most inventive work has often been driven by competition&lt;/strong&gt;. A visible and serious threat is the only situation where leadership, historically, was forced to be creatively aggressive, giving a  chance for creatives to obtain enough power to do good work.  Windows 95, Office 95, Internet Explorer 5.0, MS Natural Keyboard, XBOX 360 were all excellent products by most standards, and were made possible by strong competition. The question executives need to ask is why divisions like Mobile &amp;amp; MSN,or the entire Vietnam like 15 year history of imploding efforts of web search (there is a great book to be written by someone about this), have been disasters despite clear and strong competition – this is the analysis to post on every office door at the rest of the company.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It’s lazy arguing to assume an organization of 10,000 or 100,000 is uniform in any way&lt;/strong&gt;. Groups at Microsoft have a different culture, and some have been wildly more successful than others (e.g. Office vs. MSN/Live/whatever it’s called this week) in part because their leaders have developed superior cultures that diverge widely from other groups. Windows 7 is an excellent product no matter how it stands in comparison to Apple’s work, and the turnaround from Windows Vista, which many heralded as the end of MSFT, was beyond noteworthy.  If Windows 7 or XBOX 360  is made in the same company that makes all the products you hate, you have to realize the limits of painting broad strokes. This is where many critiques of Microsoft fall short, including the one by Brass. They assume uniformity, projecting a local set of experiences in part of the company as the model for the entire company.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If you talk only to people who quit and were disgruntled you can’t possibly have the whole story&lt;/strong&gt;.  I’ve never met Dick Brass, but I know the Tablet PC was a commercial failure. As smart as Dick is, its likely he never understood how IE beat Netscape (it was more than the monopoly stuff), or Office beat Lotus/WordPerfect etc.  He also might not know the long history of Windows and Office rejecting most requests from most other teams as a matter of both basic sanity and arrogance. Specific to Tablet PC, it started as a Bill Gates pet project. Working with Bill, who Dick curiously never mentions, was no treat, and unlike Steve Jobs, his direct involvement in matters of design is likely not a godsend. &lt;a href="http://www.betanews.com/joewilcox/article/Why-former-employees-say-Microsoft-cant-innovate/1265750084"&gt;Articles like this one&lt;/a&gt; reads too much into corporate policies, as many of them are old (e.g. the review process) and good managers have always had ways to work within these rules to reward good employees. I’d agree the processes could be improved, but all the good VPs find ways to bend rules into loopholes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The greatest disease at Microsoft is lack of sharing lessons from failure&lt;/strong&gt;, especially where innovation is concerned. Microsoft has made many big, visible bets. Many of them have failed, but that’s par for the course. The problem is these expensive lessons are swept under the rug, encouraging others in the company to repeat the same mistakes. Everyone loves to make fun of &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Bob"&gt;Microsoft Bob&lt;/a&gt;, but few can articulate why it failed. If you don’t understand why it failed, you don’t have any reason for laughing so hard, and you likely aren’t half as smart as you think you are. A case study on Vista, MSN Search, Microsoft Bob, The Tablet PC, etc. should be produced by an outside consultant, and stapled on the forehead of every manager at the company, once a day, until they read them all word for word. Then they’d take advantage of Microsoft’s so called experience and wisdom. Otherwise, they are being set up to make the same expensive mistakes again and again.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The idea of Innovation, and Innovation Systems, is a distraction. Success in the market is a better scorecard and the most reliable source of criticism. &lt;/strong&gt;Innovation, as the word is used in these articles, is a matter of taste. You can be very inventive and still get your ass kicked. Or do a great job with mostly conventional ideas, and kick more interesting competitors off the field. Apple, if you study their choices, doesn’t pull things out of the sky (digital music players, cell phones, and tablet PCs were all established ideas).  They enter games others are already playing and kick their ass. But innovation is the least useful lens. The best criticism of Microsoft’s management is how, or how not, they’ve done against their competitors in terms of customer satisfaction. If innovation matters as much as people seem to claim it does, it’s well reflected in either market success or customer satisfaction, so worry more about those solid measures, rather than the ethereal notion of who is innovative and who isn’t.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=wfyCAoW0M8A:cLmoqDH5EMU: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=wfyCAoW0M8A:cLmoqDH5EMU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=wfyCAoW0M8A:cLmoqDH5EMU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/wfyCAoW0M8A" height="1" width="1"/&gt;</content><author><name>Scott Berkun</name></author><gr:likingUser>04274321955565113001</gr:likingUser><gr:likingUser>13812241751414086043</gr:likingUser><gr:likingUser>16397708710238144934</gr:likingUser><gr:likingUser>07263786696056944503</gr:likingUser><gr:likingUser>09336981518321434181</gr:likingUser><gr:likingUser>00541598277995793510</gr:likingUser><gr:likingUser>12043674643414749751</gr:likingUser><gr:likingUser>13265839017208423873</gr:likingUser><gr:likingUser>00574930121256581774</gr:likingUser><gr:likingUser>01772601733322275299</gr:likingUser><gr:likingUser>01078807943562087042</gr:likingUser><gr:likingUser>12212200999016560865</gr:likingUser><gr:likingUser>00167166060507917238</gr:likingUser><gr:likingUser>12057979681273160400</gr:likingUser><gr:likingUser>00481964739504089148</gr:likingUser><gr:likingUser>14451002153423606462</gr:likingUser><gr:likingUser>15774908983273165827</gr:likingUser><gr:likingUser>11669359490637626595</gr:likingUser><gr:likingUser>03007116702304513424</gr:likingUser><gr:likingUser>01115669101156784555</gr:likingUser><gr:likingUser>09084756239977223427</gr:likingUser><gr:likingUser>01372222645142130519</gr:likingUser><gr:likingUser>16935322041668034773</gr:likingUser><gr:likingUser>01207238673319789387</gr:likingUser><source gr:stream-id="feed/http://www.scottberkun.com/feed/"><id>tag:google.com,2005:reader/feed/http://www.scottberkun.com/feed/</id><title type="html">Scott Berkun</title><link rel="alternate" href="http://www.scottberkun.com" type="text/html" /></source><feedburner:origLink>http://www.scottberkun.com/blog/2010/microsoft-and-creative-destruction/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1268130346311"><id gr:original-id="http://www.engadget.com/2010/03/09/1024-bit-rsa-encryption-cracked-by-carefully-starving-cpu-of-ele/">tag:google.com,2005:reader/item/496fe2176bb8bfe0</id><category term="crack" /><category term="cracking" /><category term="cracks" /><category term="DATE 2010" /><category term="Date2010" /><category term="encryption" /><category term="exploit" /><category term="hack" /><category term="hacking" /><category term="OpenSSL" /><category term="pentium 4" /><category term="Pentium4" /><category term="public key" /><category term="public key encryption" /><category term="PublicKey" /><category term="PublicKeyEncryption" /><category term="RSA" /><category term="SPARC" /><category term="SSL" /><category term="ssl encryption" /><category term="SslEncryption" /><category term="University of Michigan" /><category term="UniversityOfMichigan" /><title type="html">1024-bit RSA encryption cracked by carefully starving CPU of electricity</title><published>2010-03-09T07:47:00Z</published><updated>2010-03-09T07:47:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/I0xQJur3swk/" type="text/html" /><author><name>Sean Hollister</name></author><gr:likingUser>00846674582015573064</gr:likingUser><gr:likingUser>08815063464591820762</gr:likingUser><gr:likingUser>08183196791780161044</gr:likingUser><gr:likingUser>09077581667847878079</gr:likingUser><gr:likingUser>14065669452280803519</gr:likingUser><gr:likingUser>08401528317081428011</gr:likingUser><gr:likingUser>12268064038872041822</gr:likingUser><gr:likingUser>01058937325451900081</gr:likingUser><gr:likingUser>16134658040611991521</gr:likingUser><gr:likingUser>14674522718628798500</gr:likingUser><gr:likingUser>06281541929163736939</gr:likingUser><gr:likingUser>04905807841118771425</gr:likingUser><gr:likingUser>09733555683740543693</gr:likingUser><gr:likingUser>01462214085765833178</gr:likingUser><gr:likingUser>04603607502933300923</gr:likingUser><gr:likingUser>14937359681499646238</gr:likingUser><gr:likingUser>12690621517862860372</gr:likingUser><gr:likingUser>00493147371113573670</gr:likingUser><gr:likingUser>12522747025767378800</gr:likingUser><gr:likingUser>05196210999645540731</gr:likingUser><gr:likingUser>18158899507117698729</gr:likingUser><gr:likingUser>14754721983918864954</gr:likingUser><gr:likingUser>02136462671128046765</gr:likingUser><gr:likingUser>12976224706645114418</gr:likingUser><gr:likingUser>16904164933583130653</gr:likingUser><gr:likingUser>04527429347499637151</gr:likingUser><gr:likingUser>10524940497794509100</gr:likingUser><gr:likingUser>13464076067335111270</gr:likingUser><gr:likingUser>14628806662419495879</gr:likingUser><gr:likingUser>06619280203313515759</gr:likingUser><gr:likingUser>06812008323234157173</gr:likingUser><gr:likingUser>11226777490679887005</gr:likingUser><gr:likingUser>05540450001301599868</gr:likingUser><gr:likingUser>11436582081809554747</gr:likingUser><gr:likingUser>05528642525056508440</gr:likingUser><gr:likingUser>07753216095665996846</gr:likingUser><gr:likingUser>04294526716709191285</gr:likingUser><gr:likingUser>16725323208946679727</gr:likingUser><gr:likingUser>06357189685275807073</gr:likingUser><gr:likingUser>08644107957088589680</gr:likingUser><gr:likingUser>14274384500514150963</gr:likingUser><gr:likingUser>05120207073746910346</gr:likingUser><gr:likingUser>01764978357855875487</gr:likingUser><gr:likingUser>13833541379917089398</gr:likingUser><gr:likingUser>03791749216510579880</gr:likingUser><gr:likingUser>02790627291003410743</gr:likingUser><gr:likingUser>13692925380137216584</gr:likingUser><gr:likingUser>09044151341686886342</gr:likingUser><gr:likingUser>07220994236109821000</gr:likingUser><gr:likingUser>13438783200440407771</gr:likingUser><gr:likingUser>14953040201314051275</gr:likingUser><gr:likingUser>14351491092878419467</gr:likingUser><gr:likingUser>16781483239318820707</gr:likingUser><gr:likingUser>08949910119601359423</gr:likingUser><gr:likingUser>03200336763651787062</gr:likingUser><gr:likingUser>09141663845289345650</gr:likingUser><gr:likingUser>06541085273507853384</gr:likingUser><gr:likingUser>01169879439978702358</gr:likingUser><gr:likingUser>10525048508515035516</gr:likingUser><gr:likingUser>03447927904896608929</gr:likingUser><gr:likingUser>03235656586413912418</gr:likingUser><gr:likingUser>02493361864459897726</gr:likingUser><gr:likingUser>06047395522771568884</gr:likingUser><gr:likingUser>13918250687054064926</gr:likingUser><gr:likingUser>03188643447512250971</gr:likingUser><gr:likingUser>13407855821112324012</gr:likingUser><gr:likingUser>13994049981293093933</gr:likingUser><gr:likingUser>09254337708348395231</gr:likingUser><gr:likingUser>15072499672994134940</gr:likingUser><gr:likingUser>15343816798707827768</gr:likingUser><gr:likingUser>10872140520309183697</gr:likingUser><gr:likingUser>11548582136358052314</gr:likingUser><gr:likingUser>08748823588543312374</gr:likingUser><gr:likingUser>12431544186227545239</gr:likingUser><gr:likingUser>15415170308888899355</gr:likingUser><gr:likingUser>03050638290058172675</gr:likingUser><gr:likingUser>11980036041887010752</gr:likingUser><gr:likingUser>06848558116230134833</gr:likingUser><gr:likingUser>17268183178673568997</gr:likingUser><gr:likingUser>08314309684863377005</gr:likingUser><gr:likingUser>16090070772489785021</gr:likingUser><gr:likingUser>14820737047226068307</gr:likingUser><gr:likingUser>14211916916699959538</gr:likingUser><gr:likingUser>01719306988632112893</gr:likingUser><gr:likingUser>05230637714158210448</gr:likingUser><gr:likingUser>06137565801731745300</gr:likingUser><gr:likingUser>17160017350610821804</gr:likingUser><gr:likingUser>02164763278676753524</gr:likingUser><gr:likingUser>18282473375405738314</gr:likingUser><gr:likingUser>11945998965733081425</gr:likingUser><gr:likingUser>09222153640801920191</gr:likingUser><gr:likingUser>18087212024131518303</gr:likingUser><gr:likingUser>17831489892535781099</gr:likingUser><gr:likingUser>01980784589755008945</gr:likingUser><gr:likingUser>17857009770067640891</gr:likingUser><gr:likingUser>17737546845741718504</gr:likingUser><gr:likingUser>16820007008568411625</gr:likingUser><gr:likingUser>05814554731484303439</gr:likingUser><gr:likingUser>15669201701743855179</gr:likingUser><gr:likingUser>12310192873297146800</gr:likingUser><source gr:stream-id="feed/http://www.engadget.com/rss.xml"><id>tag:google.com,2005:reader/feed/http://www.engadget.com/rss.xml</id><title type="html">Engadget</title><link rel="alternate" href="http://www.engadget.com" type="text/html" /></source><content type="html" xml:base="http://www.engadget.com/">&lt;div style="text-align:center"&gt;&lt;a href="http://www.eecs.umich.edu/%7Evaleria/research/publications/DATE10RSA.pdf"&gt;&lt;img hspace="4" vspace="4" border="0" alt="" src="http://www.blogcdn.com/www.engadget.com/media/2010/03/3-8-10-rsahardwarefaultattackgraphic.jpg"&gt;&lt;/a&gt;&lt;/div&gt;
Since 1977, RSA public-key &lt;a href="http://www.engadget.com/tag/encryption"&gt;encryption&lt;/a&gt; has protected privacy and verified authenticity when using computers, gadgets and web browsers around the globe, with only the most brutish of brute force efforts (and 1,500 &lt;em&gt;years&lt;/em&gt; of processing time) felling its 768-bit variety earlier this year. Now, three eggheads (or Wolverines, as it were) at the &lt;a href="http://www.engadget.com/tag/university+of+michigan"&gt;University of Michigan&lt;/a&gt; claim they can break it simply by tweaking a device's power supply. By fluctuating the voltage to the CPU such that it generated a single hardware error per clock cycle, they found that they could cause the server to flip single bits of the private key at a time, allowing them to slowly piece together the password. With a small cluster of 81 Pentium 4 chips and 104 hours of processing time, they were able to successfully &lt;a href="http://www.engadget.com/tag/hack/"&gt;hack&lt;/a&gt; 1024-bit encryption in OpenSSL on a SPARC-based system, without damaging the computer, leaving a single trace or ending human life as we know it. That's why they're presenting a paper at the Design, Automation and Test conference this week in Europe, and that's why -- until RSA hopefully fixes the flaw -- you should keep a close eye on your server room's power supply.&lt;p style="padding:5px;background:#ddd;border:1px solid #ccc;clear:both"&gt;&lt;a href="http://www.engadget.com/2010/03/09/1024-bit-rsa-encryption-cracked-by-carefully-starving-cpu-of-ele/"&gt;1024-bit RSA encryption cracked by carefully starving CPU of electricity&lt;/a&gt; originally appeared on &lt;a href="http://www.engadget.com"&gt;Engadget&lt;/a&gt; on Tue, 09 Mar 2010 02:47:00 EST.  Please see our &lt;a href="http://www.weblogsinc.com/feed-terms/"&gt;terms for use of feeds&lt;/a&gt;.&lt;/p&gt;&lt;h6 style="clear:both;padding:8px 0 0 0;height:2px;font-size:1px;border:0;margin:0;padding:0"&gt;&lt;/h6&gt;&lt;a href="http://www.engadget.com/2010/03/09/1024-bit-rsa-encryption-cracked-by-carefully-starving-cpu-of-ele/" rel="bookmark" title="Permanent link to this entry"&gt;Permalink&lt;/a&gt; &lt;img src="http://www.blogsmithmedia.com/www.engadget.com/media/post_label_VIA.gif" alt=""&gt;&lt;span&gt;&lt;a href="http://www.theregister.co.uk/2010/03/04/severe_openssl_vulnerability/"&gt;The Register&lt;/a&gt;, &lt;a href="http://news.techworld.com/security/3214360/rsa-1024-bit-private-key-encryption-cracked/"&gt;TechWorld&lt;/a&gt;&lt;/span&gt;  |  &lt;img src="http://www.blogsmithmedia.com/www.engadget.com/media/post_label_source.gif" alt="source"&gt;&lt;span&gt;&lt;a href="http://www.ns.umich.edu/htdocs/releases/story.php?id=7551"&gt;University of Michigan&lt;/a&gt;&lt;/span&gt;  | &lt;a href="http://www.engadget.com/forward/19388881/" title="Send this entry to a friend via email"&gt;Email this&lt;/a&gt; | &lt;a href="http://www.engadget.com/2010/03/09/1024-bit-rsa-encryption-cracked-by-carefully-starving-cpu-of-ele/#comments" title="View reader comments on this entry"&gt;Comments&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=I0xQJur3swk:soSh1w17YMs: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=I0xQJur3swk:soSh1w17YMs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=I0xQJur3swk:soSh1w17YMs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/I0xQJur3swk" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.engadget.com/2010/03/09/1024-bit-rsa-encryption-cracked-by-carefully-starving-cpu-of-ele/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1268091604881"><id gr:original-id="http://www.petermichaud.com/?p=168">tag:google.com,2005:reader/item/d970f053a22d6d78</id><category term="Essays" /><category term="Featured Articles" /><category term="Getting your Mind Right" /><title type="html">Achievement Porn</title><published>2010-02-26T16:00:34Z</published><updated>2010-02-26T16:00:34Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/AcrKXKdwb3s/" type="text/html" /><author><name>Pete</name></author><source gr:stream-id="feed/http://www.petermichaud.com/feed/"><id>tag:google.com,2005:reader/feed/http://www.petermichaud.com/feed/</id><title type="html">Pete Michaud</title><link rel="alternate" href="http://www.petermichaud.com" type="text/html" /></source><content type="html" xml:base="http://www.petermichaud.com/">Hacker News pointed me to an article recently called “Addicted to Fake Achievement“. 

That article is about video games, but this one isn’t. The thesis of that article is that some games (it mentions Role Playing Games) don’t actually require skill, just time. You start with a weak character and perform some task that’s almost [...]


Read More:&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.petermichaud.com/essays/meaningful-work/" rel="bookmark" title="Permanent Link: Meaningful Work"&gt;Meaningful Work&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=AcrKXKdwb3s:Hq-Sd0G7l7Q: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=AcrKXKdwb3s:Hq-Sd0G7l7Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=AcrKXKdwb3s:Hq-Sd0G7l7Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/AcrKXKdwb3s" height="1" width="1"/&gt;</content><feedburner:origLink>http://www.petermichaud.com/essays/achievement-porn/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1268076061548"><id gr:original-id="http://zajaczkowski.org/?p=5811">tag:google.com,2005:reader/item/95de97fac4c36fc4</id><category term="ciekawe" /><title type="html">Czy czterogodzinny tydzień pracy w wersji dla inżynierów jest w ogóle możliwy?</title><published>2010-03-07T13:32:08Z</published><updated>2010-03-07T13:32:08Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/5aEIRA3IYm0/" type="text/html" /><content xml:base="http://zajaczkowski.org/" type="html">&lt;p&gt;“4-hour workweek” to swego rodzaju fenomen ostatnich lat. Ten niepozorny tomik przypomniał wielu zapracowanym, skoncentrowanym na karierze ludziom, że przyjemność z życia można (a wręcz powinno się) czerpać tu i teraz. Dziś, kiedy człowiek jest wystarczająco młody, sprawny i pełen energii, a nie w bliżej nieokreślonym dniu “zarobienia miliona”, “przejścia na emeryturę” lub osiągnięcia innego hipotetycznego celu. Pierwsze wydanie w/w książki było bardziej praktyczne, techniczne i trochę surowe. Odniesiony sukces, tysiące fanów oraz ukuta gdzieś po drodze nazwa całego tego fenomenu: &lt;strong&gt;lifestyle design&lt;/strong&gt;, skłoniły autora do przygotowania  nowej poszerzonej edycji, której głównym mottem i myślą przewodnią stało się już oficjalnie “projektowanie stylu życia”. Chcąc przekonać czytelników, że każdy, bez względu na wykonywany zawód może “zarabiać na życie i jednocześnie zwiedzać świat” autor wrzucił cały szereg interesujących case studies. Niestety niektóre z nich, dla mnie jako osoby w temacie, trochę zgrzytają.&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;Case study wyssany z palca&lt;/h2&gt;
&lt;p&gt;Oto Pan Sherwood, z zawodu &lt;strong&gt;mechanical engineer&lt;/strong&gt;, którego marzeniem jest podróżowanie po świecie i wykonywanie swojej pracy zdalnie. Realizując swój misternie przygotowany plan, Pan Sherwood przekonuje szefa, że kiedy nie ma go w firmie pracuje lepiej, wydajniej i tworzy dwa razy więcej projektów (bo nic go nie rozprasza) i że tak naprawdę to jego obecność w pracy nie jest konieczna. Ech, dawno nie czytałem takich bajek.&lt;/p&gt;
&lt;table align="right" width="380" border="0" cellpadding="10" cellspacing="5"&gt;
&lt;tr&gt;
&lt;td valign="bottom"&gt;“Wielu najchętniej robi to, co nie wymaga pracy.”
&lt;p&gt;– Władysław Grzeszczyk, “Parada paradoksów”&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Może i byłaby to prawda, gdyby bohater tej historyjki zajmował się np. projektowaniem gwoździ. Niestety, mając za sobą pewne doświadczenie w pracy w zespole R&amp;amp;D, wiem jak taka praca naprawdę wygląda. Zdecydowanie inaczej niż w przedstawionym powyżej przykładzie. Przede wszystkim w żaden sposób nie da się jej skwantyfikować tak jak życzyłby sobie tego autor (w środę dwa projekty, a w czwartek trzy). Nad większością projektów działy R&amp;amp;D pracują całymi tygodniami lub miesiącami. Dni wypełnione są spotkaniami, grupowymi burzami mózgów, przygotowywaniem symulacji i prototypów, analizami matematycznymi, konsultacjami itp. Jedynie od czasu do czasu po prostu się czyta, studiuje materiał, zaszywa w jakimś kącie i po prostu myśli z ołówkiem w ręku – czyli to co w zasadzie można robić wszędzie. Historia Pana Sherwooda to wyssany z palca, zupełnie nierealistyczny przykład…&lt;/p&gt;
&lt;p&gt;Poza tym działy badań i rozwoju to jedno. Czy potrafilibyście sobie wyobrazić inżyniera produkcji, który nadzoruje sytuację na linii z domu, a co dopiero z innego kraju?&lt;/p&gt;
&lt;table align="left" border="0" cellpadding="10" cellspacing="5"&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;div&gt;
&lt;img src="http://zajaczkowski.org/gfx/blog/office_by_scottableman.jpg" alt="" border="1" height="300" width="400"&gt;&lt;br&gt; 
&lt;table align="center" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.flickr.com/photos/ableman/229743691/"&gt;Scott Ableman&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Owszem są profesje i biznesy, które dają się wykonywać i zarządzać zewsząd – przede wszystkim te oparte na nowoczesnych technologiach sieciowych. Nie jest technicznie problemem pomieszkiwanie w Tajlandii i obsługiwanie serwisu internetowego w Europie. Niestety, kreatywna praca naukowca lub inżyniera (a więc ta na wysokim poziomie, prowadząca do powstawania nowych technologii i produktów, a nie poprawianie rysunków technicznych lub przygotowywanie instrukcji dla użytkowników) wymaga bycia na miejscu, generowania pomysłów, szerokiego dyskutowania, obrony lub krytyki różnych koncepcji, testowania modeli komputerowych oraz prototypów. &lt;a href="http://en.wikipedia.org/wiki/Jonathan_Ive"&gt;Johnattan Ive&lt;/a&gt; i jego Design Team w Apple nigdy nie stworzyliby &lt;a href="http://en.wikipedia.org/wiki/IPhone"&gt;iPhone’a&lt;/a&gt; gdyby jego członkowie w międzyczasie zwiedzali sobie obce kraje, tudzież, jak Pan Sherwood, bawili na Oktoberfeście.&lt;/p&gt;
&lt;p&gt;I dlatego właśnie nie da się żyć tak jak proponuje nam Tim Ferris, wykonując jednocześnie zawód bardzo mocno oddziałujący ze środowiskiem pracy, w którym intelektualne sprzężenie zwrotne w zespole nakręca postęp (pomijając już nawet inne istotne kwestie jak poufność materiałów oraz dostępność specjalizowanych narzędzi). Jeśli środowiskiem tym jest internet możesz mieszkać i pracować wszędzie. Zespół inżynierów i naukowców R&amp;amp;D pracuje razem, razem rozwiązuje problemy, podrzuca sobie nawzajem pomysły i wzajemnie się krytykuje. To właśnie ta sieć interakcji międzyludzkich pobudza kreatywność i motywuje do działania, a w konsekwencji jest źródłem przełomowych odkryć, rozwiązań i nowych technologii. To musi się odbywać twarzą w twarz. Przez telefon lub internet to nie to samo.&lt;/p&gt;
&lt;p&gt;Mam wrażenie, że próbując rozszerzyć grupę docelową czytelników i dodając przykłady takie jak ten nieszczęsny Pan Sherwood, autor wkroczył na dość niepewny grunt. Rozumiem, że celem było doprecyzowanie i  poszerzenie przekazu oraz zdecydowany skręt w stronę lifestyle design (wyleciał np. cały materiał o wirtualnych asystentach). Jednak przytaczanie wyimaginowanych case studies trąci marketingową manipulacją nie mającą wiele wspólnego z realizmem. I to jest właśnie powód, przez który zwykle przy lekturze blogów i książek promujących lifestyle design lepiej zachowywać wzmożoną czujność i duży sceptycyzm.&lt;/p&gt;
&lt;h2&gt;Alternatywa&lt;/h2&gt;
&lt;p&gt;Skończyłem niedawno lekturę &lt;a href="http://www.amazon.com/Linchpin-ebook/dp/B00371V91S/ref=tmm_kin_title_0"&gt;“Linchpin”&lt;/a&gt; &lt;a href="http://sethgodin.typepad.com/"&gt;Setha Godina&lt;/a&gt; (kupiłem zachęcony &lt;a href="http://biz.blox.pl/2010/03/Jak-to-robia-zawleczki.html"&gt;fragmentami przytaczanymi przez Krzysztofa Wysockiego na jego blogu&lt;/a&gt;). Już od pierwszych stron rzuca się w oczy jak odmienne podejście do zagadnienia pracy (i życia w ogóle) ona reprezentuje. Seth Godin twierdzi, że automatyzacja procesów biznesowych i produkcyjnych zdewaluowała pracownika do “łatwo wymienialnego trybiku w maszynie”. W rezultacie prawdziwą wartość ma to co nie daje się zautomatyzować, to co jest wyjątkowe i unikatowe. Problem w tym, że tego typu praca wymaga kreatywności i niebanalnego postrzegania świata. Tylko wtedy jej rezultatem będzie coś, co autor określił po prostu dziełem sztuki.&lt;/p&gt;
&lt;p&gt;Czy można można tworzyć sztukę (w rozumieniu Setha Godina) posługując się zautomatyzowanym procesem biznesowym, leżąc w tym samym czasie na plaży gdzieś tam? Jeśli coś jest zautomatyzowane, to jest dobrze opisane. Jeśli jest opisane – każdy może skorzystać z przepisu, uzyskując taki sam lub bardzo zbliżony efekt. Skoro może to robić każdy to jaka jest tak naprawdę wartość takiej pracy i jej owoców? &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Seth Godin radzi&lt;/strong&gt; – poszukuj wyjątkowości, bądź kreatywny. Twórz sztukę. Podnoś swoją wartość oraz wartość swojej pracy, tworząc nową lepszą jakość. Kiedy Twoja praca ma naprawdę wielką wartość, możesz wykonywać ją jak chcesz i kiedy chcesz – będziesz wolny.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tim Ferris radzi&lt;/strong&gt; – odrzuć reguły wg których funkcjonuje współczesny świat i nie daj się ograniczać swojej pracy. Zautomatyzuj co się da, aby zapewnić sobie stały pasywny dochód i mieć więcej czasu na robienie tego co chcesz i jak chcesz. Zdystansuj się do swojej pracy tak bardzo jak to możliwe – będziesz wolny.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dwie drogi i dwa zupełnie różne podejścia do sprawy. Choć uważam, że książka i blog Tima Ferrisa to ciekawe pozycje, z których zdarzyło mi się nie jeden raz czerpać inspirację, to jednak zdecydowanie bardziej przemawia do mnie filozofia Setha Godina.&lt;/p&gt;
&lt;table align="right" width="330" border="0" cellpadding="10" cellspacing="5"&gt;
&lt;tr&gt;
&lt;td valign="bottom"&gt;“Nie przepracowałem ani jednego dnia w swoim życiu. Wszystko co robiłem, to była przyjemność.”
&lt;p&gt;– Thomas Alva Edison&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Nie chcę tu jednoznacznie deklarować, że jedno podejście jest lepsze od drugiego. Są to po prostu dwa odmienne style funkcjonowania i każdy może wybrać to co bardziej mu odpowiada. W jednym przypadku  &lt;em&gt;“zrób tak, aby Twoją pasją była Twoja praca”&lt;/em&gt; a w drugim &lt;em&gt;“zrób tak, aby Twoja praca nie przeszkadzała Ci w Twojej pasji”&lt;/em&gt;. “Linchpin” przemawia do mnie bardziej ponieważ bardziej realistycznie wpisuje się w środowisko pracy każdego z nas. Wystarczy uważnie rozejrzeć się dookoła, aby znaleźć wiele życiowych przykładów. Jak już pokazałem na przykładzie Pana Sherwooda, nie jest to takie oczywiste w przypadku “4-hour workweek”. &lt;/p&gt;
&lt;p&gt;Zachęcam do wyrażenia własnej opinii w komentarzach.&lt;/p&gt;
&lt;h2&gt;Do poczytania&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://sethgodin.typepad.com/"&gt;Setha Godin’s Blog&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/"&gt;Tim Ferris’ Blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.fourhourworkweek.com/blog/2009/12/31/cold-remedy-15-real-world-lifestyle-design-case-studies-now-its-your-turn/"&gt;Cold Remedy: 18 Real-World Lifestyle Design Case Studies (Now It’s Your Turn) (@4-hour workweek)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Prawie setka stron w nowej edycji “4-hour workweek” to materiały z blogu, więc jeśli chcecie dowiedzieć się więcej przed podjęciem decyzji o wydaniu pieniędzy , warto tam najpierw zajrzeć. Oto sześć z ośmiu tekstów, które znalazły się w książce (dwa brakujące stanowią cześć pozostałych):&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/2007/10/25/weapons-of-mass-distractions-and-the-art-of-letting-bad-things-happen/"&gt;The Art of Letting Bad Things Happen&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/2008/12/31/things-ive-learned-and-loved-in-2008/"&gt;Things  I’ve Learned and Loved in 2008&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/2007/07/11/how-to-travel-the-world-with-10-pounds-or-less-plus-how-to-negotiate-convertibles-and-luxury-treehouses/"&gt;How to Travel the World with 10 Pounds or Less (Plus: How to Negotiate Convertibles and Luxury Treehouses)&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/2008/02/06/the-choice-minimal-lifestyle-6-formulas-for-more-output-and-less-overwhelm/"&gt;The Choice-Minimal Lifestyle: 6 Formulas for More Output and Less Overwhelm&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/2008/06/24/the-margin-manifesto-11-tenets-for-reaching-or-doubling-profitability-in-3-months/"&gt;The Margin Manifesto: 11 Tenets for Reaching (or Doubling) Profitability in 3 Months &lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.fourhourworkweek.com/blog/2008/01/21/the-holy-grail-how-to-outsource-the-inbox-and-never-check-email-again/"&gt;The Holy Grail: How to Outsource the Inbox and Never Check Email Again&lt;/a&gt; &lt;/p&gt;
&lt;img src="http://zajaczkowski.org/?ak_action=api_record_view&amp;amp;id=5811&amp;amp;type=feed" alt=""&gt;

&lt;p&gt;Artykuły o podobnej tematyce:&lt;ul&gt;&lt;li&gt;&lt;a href="http://zajaczkowski.org/2010/01/08/proba-ognia-yabusame/" rel="bookmark" title="Permanent Link: Próba ognia – Yabusame"&gt;Próba ognia – Yabusame&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zajaczkowski.org/2009/12/10/praca-pracy-nie-rowna-czyli-madrosci-z-bajek-rosyjskich/" rel="bookmark" title="Permanent Link: Praca pracy nie równa, czyli mądrości z bajek rosyjskich"&gt;Praca pracy nie równa, czyli mądrości z bajek rosyjskich&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zajaczkowski.org/2008/09/21/piekny-umysl-susan-polgar/" rel="bookmark" title="Permanent Link: Piękny umysł – Susan Polgar"&gt;Piękny umysł – Susan Polgar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zajaczkowski.org/2008/08/31/blogday-2008/" rel="bookmark" title="Permanent Link: Blogday 2008"&gt;Blogday 2008&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zajaczkowski.org/2008/06/01/josh-waitzkin-o-koncentracji-i-multitaskingu/" rel="bookmark" title="Permanent Link: Josh Waitzkin o koncentracji i multitaskingu"&gt;Josh Waitzkin o koncentracji i multitaskingu&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zajaczkowski.org/2008/03/30/fisher-files/" rel="bookmark" title="Permanent Link: Fisher Files"&gt;Fisher Files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://zajaczkowski.org/2007/11/22/twoje-wymarzone-miejsce-do-pracy/" rel="bookmark" title="Permanent Link: Wymarzone miejsce do pracy"&gt;Wymarzone miejsce do pracy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/zajaczkowski?a=5aEIRA3IYm0:JqTN5HIy4d0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/zajaczkowski?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/zajaczkowski?a=5aEIRA3IYm0:JqTN5HIy4d0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/zajaczkowski?d=7Q72WNTAKBA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/zajaczkowski?a=5aEIRA3IYm0:JqTN5HIy4d0:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/zajaczkowski?i=5aEIRA3IYm0:JqTN5HIy4d0:D7DqB2pKExk" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/zajaczkowski?a=5aEIRA3IYm0:JqTN5HIy4d0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/zajaczkowski?d=dnMXMwOfBR0" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/zajaczkowski?a=5aEIRA3IYm0:JqTN5HIy4d0:ACf-c_HutVc"&gt;&lt;img src="http://feeds.feedburner.com/~ff/zajaczkowski?d=ACf-c_HutVc" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/zajaczkowski/~4/5aEIRA3IYm0" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=5aEIRA3IYm0:NGbW_IHhEG8: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=5aEIRA3IYm0:NGbW_IHhEG8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=5aEIRA3IYm0:NGbW_IHhEG8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/5aEIRA3IYm0" height="1" width="1"/&gt;</content><author><name>Bartosz Zajaczkowski</name></author><gr:likingUser>14823542539901027821</gr:likingUser><gr:likingUser>16469171320865686721</gr:likingUser><gr:likingUser>02867303831612694378</gr:likingUser><source gr:stream-id="feed/http://feeds.feedburner.com/zajaczkowski"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/zajaczkowski</id><title type="html">zajaczkowski.org</title><link rel="alternate" href="http://zajaczkowski.org" type="text/html" /></source><feedburner:origLink>http://zajaczkowski.org/2010/03/07/czy-czterogodzinny-tydzien-pracy-w-wersji-dla-inzynierow-jest-w-ogole-mozliwy/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267922788576"><id gr:original-id="tag:lucumr.pocoo.org,2010-02-11:/entry;2010/2/11/porting-to-python-3-a-guide">tag:google.com,2005:reader/item/ccfffe261f874b58</id><title type="html">Porting to Python 3 — A Guide</title><published>2010-02-11T17:58:00Z</published><updated>2010-02-12T20:28:55Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/4Ig3KjSNy6s/porting-to-python-3-a-guide" type="text/html" /><content xml:base="http://lucumr.pocoo.org/feed.atom" type="html">&lt;p&gt;The latest &lt;a href="http://jinja.pocoo.org/2/"&gt;Jinja 2&lt;/a&gt; release came with basic support for Python 3.  It was surprisingly painless to port the application over but it did require a substantial amount of tweaks and code changes in order to get it running.  For everyone else out there who is interested in getting started, I decided to share my experiences:
&lt;/p&gt;&lt;h3&gt;Changing APIs&lt;/h3&gt;
&lt;p&gt;Before you start porting the library you have to decide how interfaces will behave in Python 3.  The biggest issue here is obviously unicode, but there are others as well. I would say there are four kinds of libraries you might encounter regarding string behavior in Python 2: There are the libraries that only accept unicode and only output unicode, there are those that only accept byte-strings and output byte-strings but operate on textual data, there are the libraries that operate on either or and what has been fed into it, comes out of it and there are libraries that operate either on unicode or byte-strings and also accept the other type as long as it's a subset of the default encoding (&lt;abbr&gt;ASCII&lt;/abbr&gt;).
&lt;/p&gt;&lt;p&gt;First you have to find out what your library does, what it is supposed to do, and how you want to deal with that in Python 3. Because byte-strings no longer exist in Python 3 and were replaced by a &lt;code&gt;bytes&lt;/code&gt; object that works similar, but has an incompatible &lt;abbr&gt;API&lt;/abbr&gt; it is very unlikely that your code will be able to support both in the future (or that it is something you would desire).
&lt;/p&gt;&lt;h3&gt;Byte-Based Libraries&lt;/h3&gt;
&lt;p&gt;This is might the most tricky one if you are aiming for Python 2.5 support or lower and you are operating on bytes directly. The issue is that the way you operate on bytes changed fundamentally from Python 2.x to 3.x and 2to3 is not really able to pick it up.  Worse, it will try convert all your bytestring literals to unicode! The official support is as far as I know, to explicitly prefix the byte strings in the 2.x code with a leading &lt;code&gt;b&lt;/code&gt; to indicate bytes.  Unfortunately that means no support for 2.x. I am not completely sure what to do in that situation, but at least I found a way to trick python to operate on bytes: if you have code like this:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;magic&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&amp;#39;M23&lt;/span&gt;&lt;span&gt;\x01&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And you want to ensure it does not end up being a &lt;code&gt;str&lt;/code&gt; in 3.x, add a dummy encode:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;magic&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;u&amp;#39;M23&lt;/span&gt;&lt;span&gt;\x01&lt;/span&gt;&lt;span&gt;&amp;#39;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;iso-8859-1&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The only downside is that the encode happens at runtime, so it will slow down execution a bit.
&lt;/p&gt;&lt;h3&gt;Text Based Libraries&lt;/h3&gt;
&lt;p&gt;The second kind of library is a library that operates on text.  In 2.x there were multiple ways to implement such libraries and it basically came down to what data type was used internally and what was accepted for input and output.  There are the libraries that operate exclusively either on bytestrings or unicode. These are the ones that are the easiest to port, because 2to3 was written with nearly that in mind.  If your library was only accepting bytestrings in 2.x it will (after a 2to3 run) only be accepting a Python 3 &lt;code&gt;str&lt;/code&gt; type which is unicode based.  This works well as long as you do not intend to use some kind of &lt;abbr&gt;IO&lt;/abbr&gt; in your library.  Once you start doing that, you will need to make sure you can somehow specify the encoding to be used when opening files.  In that case, make sure you open the file in byte mode (&lt;em&gt;not&lt;/em&gt; in text mode!) and do the decoding/encoding yourself.  This is the only way your &lt;abbr&gt;IO&lt;/abbr&gt; code will work the same in both 2.x and 3.x. But more on &lt;abbr&gt;IO&lt;/abbr&gt; later.
&lt;/p&gt;&lt;p&gt;What 2to3 does out of the box is converting calls from &lt;code&gt;unicode&lt;/code&gt; to &lt;code&gt;str&lt;/code&gt; automatically. Unfortunately it does not change the special &lt;code&gt;__unicode__&lt;/code&gt; method to &lt;code&gt;__str__&lt;/code&gt;. You can easily do that in a custom fixer though, so it should be easy to accomplish. If your library however supports both &lt;code&gt;__str__&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; &lt;code&gt;__unicode__&lt;/code&gt; you are in a more tricky situation here.  Let me show you an example of the kind of classes I deal with in Jinja 2 for example:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;class&lt;/span&gt; &lt;span&gt;MyObject&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;u&amp;#39;some value&amp;#39;&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__str__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;unicode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__unicode__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The big problem here is that 2to3 will convert it to this:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;class&lt;/span&gt; &lt;span&gt;MyObject&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&amp;#39;some value&amp;#39;&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__str__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__unicode__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you call &lt;code&gt;str()&lt;/code&gt; on your instance now, it will die with a runtime error because it recurses infinitely. Even if it would not recurse, it would try to return a bytes object from the &lt;code&gt;__str__&lt;/code&gt; method because of the encode call. My plan was to write a custom fixer that, if it detects a &lt;code&gt;__str__&lt;/code&gt; that just calls into &lt;code&gt;__unicode__&lt;/code&gt; and encodes, will drop the &lt;code&gt;__str__&lt;/code&gt; method and rename &lt;code&gt;__unicode__&lt;/code&gt; to &lt;code&gt;__str__&lt;/code&gt;.  Unfortunately the tree you are dealing with in 2to3 does not appear to be designed to removing code so what I do instead of removing the &lt;code&gt;__str__&lt;/code&gt; is just renaming the &lt;code&gt;__unicode__&lt;/code&gt; to &lt;code&gt;__str__&lt;/code&gt; and let Python override the dummy &lt;code&gt;__str__&lt;/code&gt; with the correct one.  The fixer I use for that, looks like this:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;from&lt;/span&gt; &lt;span&gt;lib2to3&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;fixer_base&lt;/span&gt;
&lt;span&gt;from&lt;/span&gt; &lt;span&gt;lib2to3.fixer_util&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;Name&lt;/span&gt;

&lt;span&gt;class&lt;/span&gt; &lt;span&gt;FixRenameUnicode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fixer_base&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;BaseFix&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
    &lt;span&gt;PATTERN&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;r&amp;quot;funcdef&amp;lt; &amp;#39;def&amp;#39; name=&amp;#39;__unicode__&amp;#39; parameters&amp;lt; &amp;#39;(&amp;#39; NAME &amp;#39;)&amp;#39; &amp;gt; any+ &amp;gt;&amp;quot;&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;node&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;results&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;name&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;results&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;
        &lt;span&gt;name&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Name&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;__str__&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;After conversion with this fixer in place, the class from above will then look like this:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;class&lt;/span&gt; &lt;span&gt;MyObject&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&amp;#39;some value&amp;#39;&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__str__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;str&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;__str__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;But where to put those fixers? Edit 2to3 directly? And do I have to provide two source packages for 2.x and 3.x? This is where &lt;a href="http://pypi.python.org/pypi/distribute"&gt;distribute&lt;/a&gt; comes in.
&lt;/p&gt;&lt;h3&gt;2to3 through distribute&lt;/h3&gt;
&lt;p&gt;Distutils itself already has the possibility to run 2to3 for you, but what it cannot do is adding custom fixers without a lot of custom code. distribute on the other hand not gives you built in 2to3 support as a single keyword argument to &lt;code&gt;setup()&lt;/code&gt; but can also pass custom fixers to 2to3 which is very helpful. Because these new keyword arguments however would warn if the setup script was executed with setuptools instead of distribute, you should only pass them to the setup function if invoked from Python 3.  The setup script then looks like this:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;import&lt;/span&gt; &lt;span&gt;sys&lt;/span&gt;

&lt;span&gt;from&lt;/span&gt; &lt;span&gt;setuptools&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;setup&lt;/span&gt;

&lt;span&gt;# if we are running on python 3, enable 2to3 and&lt;/span&gt;
&lt;span&gt;# let it use the custom fixers from the custom_fixers&lt;/span&gt;
&lt;span&gt;# package.&lt;/span&gt;
&lt;span&gt;extra&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;{}&lt;/span&gt;
&lt;span&gt;if&lt;/span&gt; &lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;version_info&lt;/span&gt; &lt;span&gt;&amp;gt;=&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;0&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
    &lt;span&gt;extra&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;
        &lt;span&gt;use_2to3&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
        &lt;span&gt;use_2to3_fixers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;#39;custom_fixers&amp;#39;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;
    &lt;span&gt;)&lt;/span&gt;


&lt;span&gt;setup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;
    &lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;#39;Your Library&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;#39;1.0&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;classifiers&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;
        &lt;span&gt;# make sure to use :: Python *and* :: Python :: 3 so&lt;/span&gt;
        &lt;span&gt;# that pypi can list the package on the python 3 page&lt;/span&gt;
        &lt;span&gt;&amp;#39;Programming Language :: Python&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
        &lt;span&gt;&amp;#39;Programming Language :: Python :: 3&amp;#39;&lt;/span&gt;
    &lt;span&gt;],&lt;/span&gt;
    &lt;span&gt;packages&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;#39;yourlibrary&amp;#39;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;
    &lt;span&gt;# make sure to add custom_fixers to the MANIFEST.in&lt;/span&gt;
    &lt;span&gt;include_package_data&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
    &lt;span&gt;**&lt;/span&gt;&lt;span&gt;extra&lt;/span&gt;
&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now all you have to do is to put the custom 2to3 fixers (written in Python 3!) into the &lt;code&gt;custom_fixers&lt;/code&gt; package next to your real library and they will be added automatically.  For examples of fixers, look into the &lt;code&gt;lib2to3/fixes&lt;/code&gt; package or your Python 3 installation. If you run &lt;code&gt;python3 setup.py build&lt;/code&gt; it will run 2to3 on your files and put the output into the build folder for you to test.
&lt;/p&gt;&lt;h3&gt;Input/Output&lt;/h3&gt;
&lt;p&gt;So in Python 3 there is a completely new input/output system. It is very Java-ish and is able to deal with unicode. The downside is that you either don't have it in 2.x or the implementation is too slow, so what you want to do is to create yourself an abstraction layer.
&lt;/p&gt;&lt;p&gt;If your library was unicode based in older Python versions you probably just did &lt;code&gt;file.read().decode(encoding)&lt;/code&gt; or something similar.  This still works on 3.x and I strongly recommend doing that, but be sure to open the file in binary mode, otherwise on Python 3 the decode will attempt to decode an already decoded unicode string, which does not make any sense. If you &lt;em&gt;need&lt;/em&gt; normalized newlines (windows newlines converted to &lt;code&gt;'\n'&lt;/code&gt;) you would have to post-process the string by hand, but must applications and libraries are able to deal with any kind of newline anyways.
&lt;/p&gt;&lt;p&gt;You could also just create a &lt;abbr&gt;IO&lt;/abbr&gt; helper module that calls the builtin open on 3.x and &lt;code&gt;codecs.open&lt;/code&gt; on 2.x.  Unfortunately codecs.open has a worse performance than the built in open on 2.x, so you might want to check how you are dealing with files, if a high performance is necessary and so forth. Most of the time, opening the file in binary mode is what you want to do.
&lt;/p&gt;&lt;p&gt;If you library was byte based in 2.x and you opened files in the library, instead of just working on open file objects, you will have to change your &lt;abbr&gt;API&lt;/abbr&gt; slightly in order to take the charset and error mode into account.  If you previously had a function like this:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;def&lt;/span&gt; &lt;span&gt;read_file_contents&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
    &lt;span&gt;with&lt;/span&gt; &lt;span&gt;open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;f&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You will have to change it to something like this now:
&lt;/p&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;def&lt;/span&gt; &lt;span&gt;read_file_contents&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;charset&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;errors&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;#39;strict&amp;#39;&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;
    &lt;span&gt;with&lt;/span&gt; &lt;span&gt;open&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;as&lt;/span&gt; &lt;span&gt;f&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;
        &lt;span&gt;return&lt;/span&gt; &lt;span&gt;f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;decode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;charset&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;errors&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And then ensure that you give the user to provide these arguments to the function. This means that whatever calls this, would also have to accept this arguments and so forth. Not everyone is using utf-8, there might be legacy files in iso-8859-1 a user might still want to be able to open. With a proper error handling system, it might even be possible to fall back to another encoding if it does not decode as utf-8 properly.
&lt;/p&gt;&lt;p&gt;Last but not least, 3.x &lt;code&gt;StringIO&lt;/code&gt; is a "string &lt;abbr&gt;IO&lt;/abbr&gt;", not something that accepts binary data. If you have a lot of unittests that are dealing with binary data in such objects, you will have to use the &lt;code&gt;io.BytesIO&lt;/code&gt; instead. If it does not exist, you are running 2.x, and you can safely fall back to &lt;code&gt;cStringIO.StringIO&lt;/code&gt;.
&lt;/p&gt;&lt;h3&gt;Unit-Testing&lt;/h3&gt;
&lt;p&gt;Now the biggest problem I had with switching to 3.x: The unittests. First of all: &lt;strong&gt;do not use doctest&lt;/strong&gt;. There is a doctest converter in 2to3, but it does not give you much. Error messages changed, reprs changed which it cannot properly pick up, nested tracebacks cause a lot of grief and they are hard to debug. I was playing with the idea to write a tool that automatically converts doctests to unittests, but I was too lazy and converted the few I had in my code, to unittests by hand. Furthermore, the few doctests left (used as code examples in the documentation) are only tested if the testsuite is invoked from Python 2.x
&lt;/p&gt;&lt;p&gt;Nosetest has 3.x support in a separate branch, py.test comes with 3.x for a while now and the builtin unittest does the trick as well. I personally converted all my Jinja 2 tests to unittest lately. If you are using unittest you can point distribute to your test suite function and it will run the test for you if you write &lt;abbr&gt;python setup.py test&lt;/abbr&gt;. This even runs 2to3 for you if you execute it with Python 3. So very helpful.
&lt;/p&gt;&lt;p style="margin-top:2em"&gt;Hope that helps you porting your libraries to Python 3. Would love to hear about your experiences, because even if Python 3 did not work out as some of us hoped, it is very important that we continue to port libraries over to 3.x.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=4Ig3KjSNy6s:bif-HAajJjM: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=4Ig3KjSNy6s:bif-HAajJjM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=4Ig3KjSNy6s:bif-HAajJjM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/4Ig3KjSNy6s" height="1" width="1"/&gt;</content><author><name>Armin Ronacher</name></author><gr:likingUser>12813170326913873233</gr:likingUser><gr:likingUser>06636548060106328016</gr:likingUser><gr:likingUser>06180967825724351299</gr:likingUser><gr:likingUser>14204578019084366953</gr:likingUser><gr:likingUser>17421417565218025985</gr:likingUser><gr:likingUser>12580833182986722614</gr:likingUser><gr:likingUser>13682388889190177588</gr:likingUser><source gr:stream-id="feed/http://lucumr.pocoo.org/feed.atom"><id>tag:google.com,2005:reader/feed/http://lucumr.pocoo.org/feed.atom</id><title type="html">Armin Ronacher</title><link rel="alternate" href="http://lucumr.pocoo.org/" type="text/html" /></source><feedburner:origLink>http://lucumr.pocoo.org/2010/2/11/porting-to-python-3-a-guide</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267826680696"><id gr:original-id="http://thebrandbuilder.wordpress.com/?p=3117">tag:google.com,2005:reader/item/b58a7e5830b9580c</id><category term="Social Communications" /><category term="social media" /><category term="strategy" /><category term="#RedChairPdx" /><category term="beth harte" /><category term="brandbuilder" /><category term="chris brogan" /><category term="david polinchock" /><category term="execution" /><category term="leadership" /><category term="management" /><category term="marketing" /><category term="mike wagner" /><category term="olivier blanchard" /><category term="Red Chair" /><category term="tactics" /><title type="html">The Strategy Trap: Why focusing too much on strategy could be killing your ability to execute.</title><published>2010-03-01T19:46:11Z</published><updated>2010-03-01T19:46:11Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/netwt6Nawiw/" type="text/html" /><media:group><media:content url="http://1.gravatar.com/avatar/1dd24f0102c94be2cecd9b384e30ef43?s=96&amp;d=monsterid&amp;r=PG" /><media:content url="http://thebrandbuilder.files.wordpress.com/2010/03/likeminds2010_24.jpg" /><media:content url="http://thebrandbuilder.files.wordpress.com/2010/03/redchairpdx01.jpg" /></media:group><content xml:base="http://thebrandbuilder.wordpress.com/" type="html">&lt;p style="text-align:center"&gt;&lt;a href="http://thebrandbuilder.files.wordpress.com/2010/03/likeminds2010_24.jpg"&gt;&lt;img title="LikeMinds2010_24" src="http://thebrandbuilder.files.wordpress.com/2010/03/likeminds2010_24.jpg?w=500&amp;amp;h=350" alt="" width="500" height="350"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“They were worried that I would get bogged down in wanting to &lt;em&gt;do&lt;/em&gt; things, not just create strategy.”&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://blog.polinchock.com/"&gt;David Polinchock&lt;/a&gt; / @lbbinc&lt;/p&gt;&lt;/blockquote&gt;
&lt;p style="text-align:justify"&gt;
&lt;p style="text-align:justify"&gt;One of the topics covered during the &lt;a href="http://thebrandbuilder.wordpress.com/2010/02/22/red-chair-pdx-social-media-training-for-managers-and-executives-comes-to-portland-or-on-march-11-and-12/"&gt;#LikeMinds Summit&lt;/a&gt; this past weekend was precisely this: The chasm between strategy and execution, especially as businesses struggle to understand how to leverage, integrate and operationalize Social Communications (what you &lt;em&gt;do&lt;/em&gt; with social media platforms) in the coming 6-24 months.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Unfortunately, because the C-suite tends to look to itself when it comes to “strategic masterminding,” the focus too often shifts from execution at the customer level (the most important thing a business should be focusing on on) to… being the guy who came up with the game-changing strategy that will secure more funding and increase influence within the organization.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;When this happens, strategy becomes a product, and that’s bad. Strategy isn’t a product. Strategy exists mostly in support of execution.&lt;/p&gt;
&lt;p&gt;Any idiot with a powerpoint deck can deliver a “Social” strategy:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="text-align:justify"&gt;&lt;em&gt;“We’ll create a facebook fan page, a twitter account, a LinkedIn Group, a YouTube channel, a blog, and a Flickr account too! We’ll convert all of our customers who participate in social networking into fans and followers, and we’ll engage them with content at regular intervals throughout the day. We’ll embed hyperlinks into our tweets and facebook updates so we can pull them to our website to increase traffic there. We’ll get lots of extra clicks. We’ll gain mindshare by being there with them on their favorite social platforms. When they talk to us, we’ll respond. We’ll monitor sentiment and mentions. Our social media strategy will be a success.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Um… yeah, except… no.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Sometimes, companies focus so much on developing and implementing strategies that they forget to focus on what’s important: Focusing on the customers. That’s priority &lt;em&gt;numero uno&lt;/em&gt;.&lt;strong&gt; As a consumer, I don’t give two shakes what a company’s latest strategy is. I really don’t care. You want to gain 4% market share in the next quarter? You want to dominate the tablet PC market? Okay. Great. What’s that to me? All I want is for you to improve my life.&lt;/strong&gt; How are you planning on doing that? How does your strategy actually make anything happen on the ground? Have you thought about what happens when your theories actually touch the real world?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;strong&gt;The gap between high level strategy and ground-level execution can usually be summed up this way: Do you understand the tactics and ground level dynamics enough to ensure that your strategy will turn into something more than just an inspiring powerpoint presentation?&lt;/strong&gt; Yes = small or no gap. No = huge gap.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;On the ground, in the real world, what does your grand strategy do to make me want to spend more time recommending you to my friends? Spend more time wishing I could fill my garage with more of your stuff? What’s your strategy to make my experiences with your brand outclass and outshine my experiences with every other company? What’s your strategy to be awesome?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Don’t just look at strategy from the top down and the inside out. Also look at it from the outside in. How does it play in terms of influencing customer perceptions and behavior? How does it differentiate you or increase preference?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Let me illustrate the difference between tactically-agnostic strategy and tactically-savvy strategy:&lt;/p&gt;
&lt;p style="text-align:justify"&gt;What could you do TODAY that would change the way customers feel about you?&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;a) Give them a 10% off rebate that may take 30-60 business days to process. (We’ll worry about eroding margins and loyalty later.)&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;b) Knock their socks off with incredible customer service. (Smiles are free and being helpful makes customers come back.)&lt;/p&gt;
&lt;p style="text-align:justify"&gt;- or another choice -&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;a) Try to nickle-and-dime a guest with a $10 bottle of water in their hotel room (hey, going after that incremental revenue looks genius on Excel. Let’s charge extra for everything! We’ll make billions off premium pillow mints.)&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;b) &lt;a href="http://www.chrisbrogan.com/thank-you-sheraton-four-points/"&gt;Slap a note on the bottle that says “It’s water. Of course it’s free.&lt;/a&gt;” (The repeat business, loyalty and recommendations are worth more than the odd begrudged transaction.)&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Which hotel chain is more likely to get repeat business and earn recommendations?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Which of these options do you think a disconnected top-down strategy might have generated? a) or b)?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Strangely, few companies have an “awesomeness” strategy. They have growth strategies, sales strategies, reach strategies, campaign strategies, pull strategies… all of which include a lot of content creation, content distribution and push/pull schemes created and directed from the top echelons. Great stuff, don’t get me wrong. But also lots of wasted energy working its way down to customers through less than fluid “channels.” Lots of energy wasted encountering friction and resistance on their way to the customers. Encountering snags and problems.  That’s the execution gap. That’s the part of implementation that too much emphasis on strategy, coupled with an operational chasm between the “strategists” and the “doers” creates.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;So, your company isn’t short on strategy. You have dozens if not hundreds of powerpoint presentations to prove it. The quarterly deluge of strategic plans and “bullet points” and budget proposals to prove it. Social Media-related or otherwise. How’s that been working out for you?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Social Media – as it relates to Brand Management, PR, Marketing, Business Development, Community Management, recruiting, internal collaboration, product innovation and crisis management – isn’t about developing the winning strategy. There’s no “win” in developing or delivering a strategy.  Any strategy. Ever. Anywhere. I mean, yes, you’re smart. We get it. Thank you. That’s wonderful. But now what?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;The reality here, the nugget, is this: The emphasis on top-down strategy is completely wrong for Social Media and Social Communications. &lt;strong&gt;The way to truly make Social Media and Social Communications WORK for business requires a focus on&lt;/strong&gt;&lt;em&gt;&lt;strong&gt; enablement&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;, not &lt;/strong&gt;&lt;em&gt;&lt;strong&gt;strategy.&lt;/strong&gt; &lt;/em&gt;Strategies don’t generate revenue. Strategies don’t win market share. Strategies don’t make customers loyal. Strategies are bullets on a slide, ink on paper, words across a conference table. They’re essentially worthless until you can use them to move a needle.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;The disproportionate investment in strategy vs. implementation and execution is at the heart of why “Social” works for so few companies right now.&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;1. What are we trying to improve? (What should we be trying to improve?) &amp;lt;– Start with customer experience. Always.&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;2. What will it take to make that happen?&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;3. Does Social fit in?&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;4. If so, how?&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;5. What can Social help us improve?&lt;/p&gt;
&lt;p style="text-align:justify;padding-left:30px"&gt;6. What will it take to make that happen?&lt;/p&gt;
&lt;p style="text-align:justify"&gt;That’s it. Those those 6 questions. Start there. Stop talking about it. Move towards something your customers will be able to grasp, enjoy, value and convey.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;&lt;strong&gt;Next time someone wants to sell you on a strategy, tell them to come back when they can show you exactly how they plan to implement it.&lt;/strong&gt; Always make the strategist responsible for the execution. You’ll save yourself a lot of headaches, and things will get done a lot faster.&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Cheers,&lt;/p&gt;
&lt;p style="text-align:justify"&gt;Olivier&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;a href="http://www.redchairgroup.com/event-information"&gt;&lt;img title="redchairpdx01" src="http://thebrandbuilder.files.wordpress.com/2010/03/redchairpdx01.jpg?w=500&amp;amp;h=379" alt="" width="500" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify"&gt;PS: The upcoming Red Chair double-workshop&lt;a href="http://thebrandbuilder.wordpress.com/2010/02/22/red-chair-pdx-social-media-training-for-managers-and-executives-comes-to-portland-or-on-march-11-and-12/"&gt; in Portland, Oregon (PDX) on March 11 and March 12&lt;/a&gt; focuses on precisely that: How to actually put all of this into action. How to make it work. One session is designed for enterprise space management and executives, and the other for account management and Social Media for small business. It would be lovely of you to help spread the word, even if you can’t attend this time around. &lt;img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)"&gt;  For registration and information, &lt;a href="http://www.redchairgroup.com/event-information"&gt;click here&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;Filed under: &lt;a href="http://thebrandbuilder.wordpress.com/category/social-communications/"&gt;Social Communications&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/category/social-media/"&gt;social media&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/category/strategy/"&gt;strategy&lt;/a&gt; Tagged: &lt;a href="http://thebrandbuilder.wordpress.com/tag/redchairpdx/"&gt;#RedChairPdx&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/beth-harte/"&gt;beth harte&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/brandbuilder/"&gt;brandbuilder&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/chris-brogan/"&gt;chris brogan&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/david-polinchock/"&gt;david polinchock&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/execution/"&gt;execution&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/leadership/"&gt;leadership&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/management/"&gt;management&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/marketing/"&gt;marketing&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/mike-wagner/"&gt;mike wagner&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/olivier-blanchard/"&gt;olivier blanchard&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/red-chair/"&gt;Red Chair&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/social-communications/"&gt;Social Communications&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/social-media/"&gt;social media&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/strategy/"&gt;strategy&lt;/a&gt;, &lt;a href="http://thebrandbuilder.wordpress.com/tag/tactics/"&gt;tactics&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thebrandbuilder.wordpress.com/3117/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thebrandbuilder.wordpress.com/3117/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thebrandbuilder.wordpress.com/3117/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thebrandbuilder.wordpress.com/3117/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thebrandbuilder.wordpress.com/3117/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thebrandbuilder.wordpress.com/3117/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thebrandbuilder.wordpress.com/3117/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thebrandbuilder.wordpress.com/3117/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thebrandbuilder.wordpress.com/3117/"&gt;&lt;img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thebrandbuilder.wordpress.com/3117/"&gt;&lt;/a&gt; &lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thebrandbuilder.wordpress.com&amp;amp;blog=3974435&amp;amp;post=3117&amp;amp;subd=thebrandbuilder&amp;amp;ref=&amp;amp;feed=1"&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=netwt6Nawiw:Jvl8KdDb93Y: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=netwt6Nawiw:Jvl8KdDb93Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=netwt6Nawiw:Jvl8KdDb93Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/netwt6Nawiw" height="1" width="1"/&gt;</content><author><name>Olivier Blanchard</name></author><gr:likingUser>09057398077173288917</gr:likingUser><gr:likingUser>17506279362822768929</gr:likingUser><gr:likingUser>01153223999007196894</gr:likingUser><gr:likingUser>07856671369633185471</gr:likingUser><gr:likingUser>02848039997193907980</gr:likingUser><source gr:stream-id="feed/http://thebrandbuilder.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://thebrandbuilder.wordpress.com/feed/</id><title type="html">The BrandBuilder Blog</title><link rel="alternate" href="http://thebrandbuilder.wordpress.com" type="text/html" /></source><feedburner:origLink>http://thebrandbuilder.wordpress.com/2010/03/01/the-strategy-trap-why-focusing-too-much-on-strategy-could-be-killing-your-ability-to-execute/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267789884783"><id gr:original-id="http://www.scottberkun.com/?p=4101">tag:google.com,2005:reader/item/695b2701ccd234bc</id><category term="Management" /><title type="html">The 22 minute meeting</title><published>2010-03-05T07:51:42Z</published><updated>2010-03-05T07:51:42Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/0v1jNqYYsUw/" type="text/html" /><content xml:base="http://www.scottberkun.com/" type="html">&lt;p&gt;No one likes meetings and for good reason. In most meetings, most of the time, most people think most of what goes on is a waste of time.&lt;/p&gt;
&lt;p&gt;So what if you took out all of the stupid, wasteful stuff and left only the useful parts?&lt;/p&gt;
&lt;p&gt;Enter the &lt;strong&gt;22 minute meeting&lt;/strong&gt;. This is an idea from &lt;a href="http://twitter.com/nicolesteinbok"&gt;Nicole Steinbok&lt;/a&gt;, and she presented the idea at &lt;a href="http://www.igniteseattle.com/2010/02/ignite-seattle-9-speakers/"&gt;Seattle Ignite 9&lt;/a&gt;.� When I saw her present this concept at Microsoft a few months ago, she gave one of the best short talks I’ve ever seen.&lt;/p&gt;
&lt;p&gt;Here’s the &lt;a href="http://www.22minutemeeting.info/22MinuteMeetingPoster.pdf"&gt;poster from her talk&lt;/a&gt;: &lt;img title="22meeting" src="http://www.scottberkun.com/wp-content/uploads/2010/03/22meeting1.png" alt="" width="517" height="495"&gt;&lt;/p&gt;
&lt;p&gt;I couldn’t find a write up of the core points, so here’s my take on her ideas from what I remember from her talk. All credit should go her way:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Schedule a 22 minute meeting &lt;/strong&gt;- Who decided meetings should be 30 or 60 minutes?� What data is this based on? None. 30 and 60 minute meetings leave no time to get between meetings, and  assumes, on average,  people need an hour to sort things out. &lt;strong&gt;Certainly not all meetings can be run in 22 minutes&lt;/strong&gt;, but many can, so we’d all be better off if the default time were small, not large.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Have a goal based agenda&lt;/strong&gt; – Having an agenda at all would be a plus in most meetings. Writing it on the whiteboard, earns double pluses, since then everyone has a constant reminder of what the meeting is supposed to achieve.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Send required readings 3 days beforehand&lt;/strong&gt; – The burden is on the organizer to make this small enough that people actually do it. Never ever allow a meeting to be “lets all read the documents together and penalize anyone diligent enough to do their homework”. (note: I think 24 hours is plenty).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Start on time&lt;/strong&gt; – How often does this happen? Almost never. Part of the problem is Outlook and all schedule programs don’t have space between meetings. By 2pm there is a day’s worth of meeting time debt. 22 minutes ensures plenty of travel/buffer time between meetings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stand up&lt;/strong&gt; – Reminds everyone the goal isn’t to elaborate or be supplemental (See &lt;a href="http://martinfowler.com/articles/itsNotJustStandingUp.html"&gt;Scrum standing meetings&lt;/a&gt;). Make your point, make your requests, or keep quiet. If there is a disagreement, say so, but handle resolving it outside of the meeting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No laptops, but presenters and note takes&lt;/strong&gt;. If you’re promised 22 minutes, and it’s all good stuff, you don’t need a secondary thing to be doing while you pretend to be listening. One person taking notes, and one person presenting if necessary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No phones, no exceptions&lt;/strong&gt; – see above.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Focus! Note off topic comments&lt;/strong&gt;.� If you have an agenda, someone has to police it and this burden is on whoever called the meeting. Tangents are ok, provided they are short. The meeting organizer has to table tangents and arguments that go too far from the agenda.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Send notes ASAP&lt;/strong&gt; – With 22 minutes, there should be time, post meeting, for the organizer to send out notes and action items before the next meeting begins.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What do you think?&lt;/p&gt;
&lt;p&gt;If you like the idea, help it spread. Nicole started a &lt;a href="http://www.facebook.com/pages/22-Minute-Meeting/10150106232800265?v=info"&gt;facebook group&lt;/a&gt; and a &lt;a href="http://www.22minutemeeting.info/22MinuteMeetingPoster.pdf"&gt;poster you can download&lt;/a&gt; (PDF).� Pass it on.&lt;/p&gt;
&lt;p&gt;When/If they post her ignite talk online, I’ll post it here.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=0v1jNqYYsUw:-t8BVSdCWrc: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=0v1jNqYYsUw:-t8BVSdCWrc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=0v1jNqYYsUw:-t8BVSdCWrc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/0v1jNqYYsUw" height="1" width="1"/&gt;</content><author><name>Scott Berkun</name></author><gr:likingUser>01257198879025517818</gr:likingUser><gr:likingUser>08891219488333003045</gr:likingUser><gr:likingUser>12281498142090079728</gr:likingUser><gr:likingUser>01786044364640024503</gr:likingUser><gr:likingUser>11155705278351825808</gr:likingUser><gr:likingUser>07263786696056944503</gr:likingUser><gr:likingUser>05849052985714716492</gr:likingUser><gr:likingUser>03206420968545219681</gr:likingUser><gr:likingUser>00443687924606351474</gr:likingUser><gr:likingUser>09398055431946851706</gr:likingUser><gr:likingUser>03088636861675885062</gr:likingUser><gr:likingUser>14254105048553886946</gr:likingUser><gr:likingUser>05671055573088600295</gr:likingUser><gr:likingUser>13070391691980975018</gr:likingUser><gr:likingUser>13599485918254348585</gr:likingUser><gr:likingUser>07050753271909117426</gr:likingUser><gr:likingUser>09932058523314310399</gr:likingUser><gr:likingUser>15363570613321724645</gr:likingUser><gr:likingUser>16488379588597830482</gr:likingUser><gr:likingUser>06297245024611191220</gr:likingUser><gr:likingUser>17149860210739374960</gr:likingUser><gr:likingUser>13774720655951595907</gr:likingUser><gr:likingUser>18393200075402303686</gr:likingUser><gr:likingUser>14451002153423606462</gr:likingUser><gr:likingUser>00341834733381581222</gr:likingUser><gr:likingUser>03545964666694920486</gr:likingUser><gr:likingUser>05647973542476810269</gr:likingUser><gr:likingUser>15670065414505958233</gr:likingUser><gr:likingUser>12046093891958900028</gr:likingUser><gr:likingUser>13959800430638659050</gr:likingUser><gr:likingUser>17764019927628278617</gr:likingUser><gr:likingUser>10476977153177447276</gr:likingUser><gr:likingUser>10619139721871665126</gr:likingUser><gr:likingUser>11450635976902756970</gr:likingUser><gr:likingUser>03010481051066927062</gr:likingUser><gr:likingUser>03107010113955413271</gr:likingUser><gr:likingUser>11641722212153301273</gr:likingUser><gr:likingUser>18158063426860872794</gr:likingUser><gr:likingUser>00461033310345139896</gr:likingUser><gr:likingUser>07169498198220845310</gr:likingUser><gr:likingUser>10734723349399911536</gr:likingUser><gr:likingUser>14737236229849972621</gr:likingUser><gr:likingUser>16935322041668034773</gr:likingUser><source gr:stream-id="feed/http://www.scottberkun.com/feed/"><id>tag:google.com,2005:reader/feed/http://www.scottberkun.com/feed/</id><title type="html">Scott Berkun</title><link rel="alternate" href="http://www.scottberkun.com" type="text/html" /></source><feedburner:origLink>http://www.scottberkun.com/blog/2010/the-22-minute-meeting/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267742200133"><id gr:original-id="http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/">tag:google.com,2005:reader/item/3051dacdd4374d71</id><title type="html">Designing User Interfaces For Business Web Applications</title><published>2010-02-25T13:56:00Z</published><updated>2010-02-25T13:56:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/bkq7EF9NJsQ/" type="text/html" /><link rel="related" href="http://api.postrank.com/log?url=http%3A%2F%2Fwww.smashingmagazine.com%2F2010%2F02%2F25%2Fdesigning-user-interfaces-for-business-web-applications%2F" /><content xml:base="http://feeds.postrank.com/32487697bce91539719dd56a738ba43e?level=good" type="html">&lt;table width="650"&gt;&lt;tr&gt;&lt;td width="650"&gt;&lt;div style="width:650px"&gt; &lt;img alt="Smashing-magazine-advertisement in Designing User Interfaces For Business Web Applications" border="0" src="http://creatives.commindo-media.de/static/smashing-magazine-advertisement.gif"&gt;&lt;br&gt; &lt;a href="http://creatives.commindo-media.de/www/delivery/ck.php?zoneid=56"&gt;&lt;img alt=" in Designing User Interfaces For Business Web Applications" border="0" src="http://creatives.commindo-media.de/www/delivery/avw.php?zoneid=56"&gt;&lt;/a&gt; &lt;a href="http://creatives.commindo-media.de/www/delivery/ck.php?zoneid=63"&gt;&lt;img alt=" in Designing User Interfaces For Business Web Applications" border="0" src="http://creatives.commindo-media.de/www/delivery/avw.php?zoneid=63"&gt;&lt;/a&gt; &lt;a href="http://creatives.commindo-media.de/www/delivery/ck.php?zoneid=64"&gt;&lt;img alt=" in Designing User Interfaces For Business Web Applications" border="0" src="http://creatives.commindo-media.de/www/delivery/avw.php?zoneid=64"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;Business Web application design&lt;/strong&gt; is too often neglected. I see a lot of applications that don’t meet the needs of either businesses or users and thus contribute to a loss of profit and poor user experience. It even happens that designers are not involved in the process of creating applications at all, putting all of the responsibility on the shoulders of developers.&lt;/p&gt;&lt;p&gt;This is a tough task for developers, who may have plenty of back-end and front-end development experience but limited knowledge of design. This results in unsatisfied customers, frustrated users and failed projects.&lt;/p&gt;&lt;p&gt;So, we will cover the basics of user interface design for business Web applications. While one could apply many approaches, techniques and principles to UI design in general, our focus here will be on &lt;em&gt;business&lt;/em&gt; Web applications.&lt;/p&gt; [By the way: The &lt;a href="http://www.smashingmagazine.com/network-posts/"&gt;network tab&lt;/a&gt; (on the top of the page) is updated several times a day. It features manually selected articles from the best web design blogs!]&lt;h3&gt;Websites vs. Web Applications&lt;/h3&gt;&lt;p&gt;Confusing Web applications and websites is easy, as is confusing user interface design and website design. But they are different both in essence and in so many other ways, which we’ll explore in this article.&lt;/p&gt;&lt;p&gt;A website is a collection of pages consisting mostly of static content, images and video, with limited interactive functionality (i.e. except for the contact form and search functionality). &lt;strong&gt;The primary role of a website is to inform&lt;/strong&gt;. Some websites use content management systems to render dynamic content, but their nature is still informational.&lt;/p&gt;&lt;p&gt;&lt;img alt="Website-webapp in Designing User Interfaces For Business Web Applications" height="299" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/website-webapp.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;CampaignMonitor is powerful email marketing software, while Jeff Sarimento’s website is intended to inform readers about his life and work.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Web applications, on the other hand, are &lt;strong&gt;dynamic, interactive systems&lt;/strong&gt; that help businesses perform business critical tasks and that increase and measure their productivity. Thus, the primary role of a Web application is to perform a function that serves the user’s tasks and according to defined business rules.&lt;/p&gt;&lt;p&gt;Web applications require a higher level of involvement and knowledge of the system on the part of the user. They don’t just stumble upon the application, do their work and bounce off. They use it as a tool to perform critical business tasks in their daily work. In the end, they cannot easily discontinue using the application and switch to another if they don’t like how it’s working, as is the case with websites.&lt;/p&gt;&lt;h4&gt;Different Types of Web Applications&lt;/h4&gt;&lt;p&gt;Business applications range in type from invoicing for freelancers to content management systems to document management systems to banking and financial systems.&lt;/p&gt;&lt;p&gt;We can distinguish between &lt;strong&gt;open and closed applications&lt;/strong&gt;. Open systems are online applications that are easily accessible to anyone who opens an account. Users can access such applications via the Web and can open an account for free or by paying a fee. Closed systems (or line-of-business applications) are usually not accessible outside the company that uses it, and they can be considered “offline” applications (though many systems expose their functionality to business partners via either services or specialized interfaces). Such systems usually run on the company’s local network and are available only to employees.&lt;/p&gt;&lt;p&gt;I don’t know who coined it, but one term I like especially is &lt;strong&gt;weblication&lt;/strong&gt;, which describes what a Web application is in general. This doesn’t mean, though that a Web application is a half-website half-application hybrid. It is far more complex that that.&lt;/p&gt;&lt;h3&gt;First, Know Your Users&lt;/h3&gt;&lt;p&gt;You’ve probably heard this a thousand times, and for good reason. A successful user interface focuses on users and their tasks. This is key, and too many developers have failed to create a good user experience. As Steve Krug said, “Developers like complexity; they enjoy discovering how something works.”&lt;/p&gt;&lt;p&gt;&lt;img alt="Users1 in Designing User Interfaces For Business Web Applications" height="352" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/users1.jpg" width="500"&gt;&lt;/p&gt;&lt;p&gt;When identifying your users, keep in mind that &lt;a href="http://52weeksofux.com/post/385981879/you-are-not-your-user"&gt;clients are not users, and you are not a user&lt;/a&gt;. Although a client’s management team will usually be interested in the project and try to influence decisions, remember that they won’t be sitting in front of the computer several hours a day (unless the application is specifically for them).&lt;/p&gt;&lt;h4&gt;How to Identify Users?&lt;/h4&gt;&lt;p&gt;Identifying users can be done using several techniques, such as user interviews, business stakeholder interviews and and the “shadowing” method of observation. Interviews can give you answers to questions about the users’ knowledge of the system and computers in general, while shadowing can yield more detailed information about how users perform tasks and what errors they make. The method is called shadowing because the observer is like a shadow, watching and noting the steps a user takes.&lt;/p&gt;&lt;p&gt;If you don’t have access to real users—either because you don’t have permission or are designing for open application—you can use personas, a tool to help identify users. Personas are a representation of real users, including their habits, goals and motivation. Because certain information about users is often identified through business analysis, you can make use of it to create personas. If you are not familiar with the tool, &lt;a href="http://carsonified.com/blog/design/how-to-understand-your-users-with-personas/"&gt;a comic by Brad Colbow&lt;/a&gt; will help.&lt;/p&gt;&lt;p&gt;&lt;a href="http://carsonified.com/blog/design/how-to-understand-your-users-with-personas/"&gt;&lt;img alt="Personas in Designing User Interfaces For Business Web Applications" height="203" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/personas.jpg" width="469"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.usability.gov/analyze/analysis.html"&gt;Task analysis&lt;/a&gt; helps identify what tasks users perform in their jobs, how they do them, how long they take and what errors they make. Sometimes clients will be using an old version of the application that you are designing to replace. Make use of that old system and watch how users use it. Understanding their tasks and challenges will be easier that way.&lt;/p&gt;&lt;p&gt;Regardless of who your users are, one thing is certain: in most cases, you will have to consider both &lt;strong&gt;novices and experts&lt;/strong&gt;. Novice users should be enabled to learn as fast as possible, while expert users should be enabled to perform their tasks extremely efficiently. This may mean creating separate interfaces. But in many cases you will be able to accommodate both types of users in the same interface through various techniques, such as progressive disclosure.&lt;/p&gt;&lt;p&gt;Such research is usually done by business analysts. But if no one else is responsible for it, you should do it. Once you have the necessary information, you can begin with design.&lt;/p&gt;&lt;h3&gt;Design Process&lt;/h3&gt;&lt;p&gt;You can follow one of any number of processes in designing the user interface. You might already have one. However, I would suggest that you consider the Agile approach. Why, you ask? Well, because for users (and clients), the user interface is the product. The bottom line is that they don’t care about your sketches or about fantastic back ends or powerful servers. All they want to see is the user interface.&lt;/p&gt;&lt;p&gt;So, how does Agile help? It helps through its key principle: the iterative approach. Each iteration consists of all of the phases defined by your process. This means that at the end of the first iteration, you will have a product that can be tested, a prototype.&lt;/p&gt;&lt;p&gt;&lt;img alt="Process in Designing User Interfaces For Business Web Applications" height="364" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/01/process.jpg" width="500"&gt;&lt;/p&gt;&lt;h4&gt;Sketching&lt;/h4&gt;&lt;p&gt;Sketching is a powerful way to explore ideas. The goal is to arrive at the solution by sketching out different concepts. Most sketches will be thrown out, but that is okay. As Bill Buxton says in his “Sketching User Experience” book, sketches are fast to create and easy to dispose of, which is why they are so powerful.&lt;/p&gt;&lt;p&gt;Are sketches the same as wireframes? Well, the differences can be blurry, but I would say no. Wireframes don’t capture rough ideas but rather develop them. Read a fantastic discussion on IxDA: &lt;a href="http://www.ixda.org/discuss.php?post=48924"&gt;Sketching Before the Wireframes.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Once you get the “right” sketches, or at least the ones that you think are right, you can create more detailed wireframes or go straight to creating interactive prototypes.&lt;/p&gt;&lt;p&gt;&lt;img alt="Sketch in Designing User Interfaces For Business Web Applications" height="375" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/sketch.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;Sketch by &lt;a href="http://www.flickr.com/photos/jasonrobb/3836463737/"&gt;Jason Robb&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Interesting reading on sketching and wireframing:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2009/09/01/35-excellent-wireframing-resources/"&gt;35 Excellent Wireframing Resources&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uxbooth.com/blog/tools-for-sketching-user-experiences/"&gt;Tools for Sketching User Experiences&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://carsonified.com/blog/web-apps/20-steps-to-better-wireframing/"&gt;20 Steps to Better Wireframing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Prototyping&lt;/h4&gt;&lt;p&gt;The next step in the process is to create prototypes that will simulate the real application. A prototype can contain one or more features (or all of them), but it actually does nothing. It merely simulates the behavior of a real application, and users will feel that they are actually doing something. Prototypes may contain some functionality if needed (such as complex calculations).&lt;/p&gt;&lt;p&gt;Because the nature of a prototype done in HTML is temporary—its purpose, after all, is to &lt;em&gt;test&lt;/em&gt; ideas—don’t bother with the code; just make it work with minimal bugs. You will throw it away anyway. You can also use specialized prototyping software such as &lt;a href="http://www.axure.com/"&gt;Axure&lt;/a&gt;. Some people even prototype in &lt;a href="http://office.microsoft.com/en-us/powerpoint/default.aspx"&gt;PowerPoint&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;img alt="Prototype in Designing User Interfaces For Business Web Applications" height="508" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/prototype.jpg" width="487"&gt;&lt;br&gt; &lt;em&gt;An Axure interactive prototype for an e-commerce website, by &lt;a href="http://www.flickr.com/photos/e-maujean/4188239932/"&gt;e-maujean&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Further reading and tools for prototyping:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.webdistortion.com/2009/02/22/useful-online-tools-for-easier-website-planning-and-prototyping/"&gt;5 Useful Online Tools for Web Design Planning and Prototyping&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.rosenfeldmedia.com/books/prototyping/"&gt;A Practitioner’s Guide to Prototyping&lt;/a&gt;: A book from Rosenfeld Media&lt;/li&gt;&lt;li&gt;&lt;a href="http://articles.sitepoint.com/article/tools-prototyping-wireframing"&gt;16 Design Tools for Prototyping and Wireframing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Testing&lt;/h4&gt;&lt;p&gt;Prototypes are useless unless you test them. This is not rocket science. People like Jakob Nielsen and Steve Krug support so-called “discount usability testing,” which is cheap and fast and yields valuable insight into your design decisions. You will use this information as the basis of another iteration of sketching, prototyping and testing. Do this at least until major issues have been fixed. We all know that software projects are tight on time and budget, so to be more efficient, &lt;strong&gt;test early and test often&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;One of the best resources for discount usability testing is a new book by Steve Krug, “Rocket Surgery Made Easy.” Pick up a copy and read it.&lt;/p&gt;&lt;p&gt;&lt;img alt="Usability Test in Designing User Interfaces For Business Web Applications" height="335" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/usability_test.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;Snapshot of usability testing for Delicious, by &lt;a href="http://www.flickr.com/photos/nzdave/491411546/"&gt;(nz)dave&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Further reading:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.useit.com/alertbox/20000319.html"&gt;Why You Only Need to Test with 5 Users&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/usability-testing-demystified/"&gt;Usability Testing Demystified&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/the-myth-of-usability-testing/"&gt;The Myth of Usability Testing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Design Principles&lt;/h3&gt;&lt;p&gt;There are many design principles, but there doesn’t seem to be a general consensus on definitive ones. So, we’ll go through design principles more informally, leaving out strict definitions.&lt;/p&gt;&lt;h4&gt;No One Likes Surprises&lt;/h4&gt;&lt;p&gt;Probably the key factors in a good UI are consistency and familiarity. A user interface should be consistent across all parts of the application, from navigation to color to terminology. This is known as &lt;strong&gt;internal consistency&lt;/strong&gt;. But a user interface should also be consistent within its context, such as the operating system or other applications in its group or family. A typical example is the applications in the Microsoft Office family. This is called &lt;strong&gt;external consistency&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;A good approach to consistency is to define user interface guidelines for each project or for a group of projects. These should guide the decisions you make for all of the details. This will not only maintain consistency but also serve as documentation to help team members better understand your decisions.&lt;/p&gt;&lt;p&gt;&lt;img alt="Sprinkle Penny in Designing User Interfaces For Business Web Applications" height="393" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/sprinkle_penny.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;Although a simple example, SprinklePenny achieves consistency and familiarity across the application.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Consistent user interfaces have a shorter learning curve, because users will recognize parts of the system and be able to fall back on prior experience. But &lt;strong&gt;familiarity&lt;/strong&gt; is sometimes confused with consistency. Familiar user interfaces draw on concepts from the users’ previous experiences and use appropriate metaphors. Folders, for example, are a well-known metaphor for file organization, and they have replaced “directories,” which were used previously in command-line operating systems. In short, speak the language of your users.&lt;/p&gt;&lt;p&gt;A common belief among business owners is that a great user interface should look like a Microsoft Office product, especially Outlook. I won’t go into explaining how pointless this is. Rather, I will offer alternative advice: defend the user-centric approach, and explain why creating an application for employees, clients and partners (i.e. &lt;strong&gt;their users&lt;/strong&gt;) is so important.&lt;/p&gt;&lt;p&gt;All the same, most businesses are unique, as are their work processes. For example, two businesses from the same branch could have significantly different processes, forcing you to go beyond what is familiar and start to &lt;strong&gt;innovate&lt;/strong&gt;. This part of the design process can be very interesting, although you have to be careful in how far you go with innovation.&lt;/p&gt;&lt;p&gt;Further reading:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://uxmag.com/design/designing-amp-selecting-components-for-uis"&gt;Designing and Selecting Components for UIs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://articles.sitepoint.com/article/why-consistency-is-critical"&gt;Why Consistency Is Critical&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Users Should Be Able to Be Efficient&lt;/h4&gt;&lt;p&gt;Without a doubt, users should be able to be efficient when using business applications. This is what they are paid for, and this is what managers expects from the application. User interfaces should allow users to be efficient and should focus them on completing tasks in the easiest and fastest way. But this is not always the case. There is an opinion, or at least practice, among developers that says the user interface should be as complex as the back end system. No matter how ridiculous this sounds, the problem is real and might give you a headache. This is one reason why good communication and collaboration between developers is a must.&lt;/p&gt;&lt;p&gt;Users are efficient when they &lt;strong&gt;focus on a particular task&lt;/strong&gt;. As mentioned, task analysis can help you identify tasks and determine how users perform them. If tasks are long, accelerate them by breaking them up into smaller units. You can also increase efficiency by providing &lt;strong&gt;keyboard support and shortcuts&lt;/strong&gt;. Think how inefficient it is for a user to have to switch back and forth between mouse and keyboard. In some cases, you will be designing for users who are accustomed to working on command-line operating systems and the applications made for them. They will be keen to have keyboard support. One suggestion: when defining keyboard shortcuts, keep them consistent with those of common applications. For example, &lt;em&gt;Ctrl + S&lt;/em&gt; should always be save, and so on.&lt;/p&gt;&lt;p&gt;&lt;img alt="Google Docs in Designing User Interfaces For Business Web Applications" height="324" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/google_docs.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;Google Docs Spreadsheet enables users to be efficient by providing keyboard shortcuts and context menus, as well as by taking advantage of users’ familiarity with common desktop applications.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Efficiency can also be enhanced through &lt;strong&gt;personalization&lt;/strong&gt;. Users who can personalize an environment will learn it faster and, more importantly, will be more confident using it. Personalization can be done in many ways: choosing widgets for the dashboard; defining shortcut options and favorites; changing the order of elements; etc.&lt;/p&gt;&lt;p&gt;Pay attention to &lt;strong&gt;accessibility&lt;/strong&gt;. Although many assume that accessibility doesn’t matter in Web applications, it certainly does. Treat the application as if it were a public website.&lt;/p&gt;&lt;p&gt;A Web application also has to be efficient in the speed with which it processes information. So, consider heavy interactions that result from partial renderings and &lt;a href="http://www.jankoatwarpspeed.com/post/2009/11/01/usability-tips-visualizing-ajax-requests.aspx"&gt;AJAX requests&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;Help!&lt;/h4&gt;&lt;p&gt;An interface should provide &lt;strong&gt;meaningful feedback&lt;/strong&gt; that describes the state of the system to users. If an error occurs, users should be notified and informed of ways to recover. If an operation is in progress, users should be notified about the progress.&lt;/p&gt;&lt;p&gt;We can go even further and declare that user interfaces should prevent users from making errors. This principle, called &lt;strong&gt;forgiveness&lt;/strong&gt;, can be followed with confirmation dialogs, undo options, forgiving formats and more. Forgiveness makes it safe to explore the interface, decreases the learning curve and increases overall satisfaction.&lt;/p&gt;&lt;p&gt;Because of the complexity of business Web applications, you would also need to provide a &lt;strong&gt;comprehensive help system&lt;/strong&gt;. This can be done with inline help, a support database, a knowledge base and guided tours (which mix video, images and text).&lt;/p&gt;&lt;p&gt;Further reading:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.jankoatwarpspeed.com/post/2009/11/17/Forgiveness-UI-design.aspx"&gt;Forgiveness in UI design&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/02/25/2009/07/07/web-form-validation-best-practices-and-tutorials/"&gt;Web Form Validation: Best Practices and Tutorials&lt;/a&gt;&lt;a href="http://www.uxbooth.com/blog/showing-error-messages-to-users/"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uxbooth.com/blog/showing-error-messages-to-users/"&gt;Handling User Error with Care: Getting Users Back on Track&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Can’t Get No Satisfaction&lt;/h4&gt;&lt;p&gt;Satisfaction is a subjective term that refers to how pleasant an interface is to use. Every design principle we have described here affects  satisfaction. And a few more principles are worth mentioning here.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Simplicity&lt;/strong&gt; is a basic principle of UI design. The simpler a user interface, the easier it is to use. But keeping user interfaces for business applications simple is a challenge because the apps often have a lot of functionality. The key is to balance functionality and simplicity. Restraint is one of the most efficient ways to achieve this balance: i.e. finding the simplest way to solve a problem.&lt;/p&gt;&lt;p&gt;&lt;img alt="Buildwithme in Designing User Interfaces For Business Web Applications" height="282" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/buildwithme.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;BuildWith.me has a simple and effective user interface, without sacrificing aesthetics.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Aesthetics&lt;/strong&gt;, though subjective and somewhat arbitrary, play an important role in overall satisfaction. Users respond positively to pleasing user interfaces, sometimes even overlooking missing functionality. But you’re not creating a work of art. One of the best articles that explains aesthetics is &lt;a href="http://www.alistapart.com/articles/indefenseofeyecandy/"&gt;In Defense of Eye Candy&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In the end, users will be spending a lot of time in front of a business application, and no matter how usable, consistent or forgiving the interface is, satisfaction will be critical in determining how good the user interface is.&lt;/p&gt;&lt;p&gt;Further reading:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.webdesignerdepot.com/2009/02/7-interface-design-techniques-to-simplify-and-de-clutter-your-interfaces/" rel="bookmark" title="Permanent Link to 7 Interface Design Techniques to Simplify and De-clutter Your Interfaces"&gt;7 Interface Design Techniques to Simplify and De-clutter Your Interfaces&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.usabilitypost.com/2009/10/02/restraint/"&gt;Restraint &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.alistapart.com/articles/indefenseofeyecandy/"&gt;In Defense of Eye Candy&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Other resources related to UI design:&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/02/25/2009/01/19/12-useful-techniques-for-good-user-interface-design-in-web-applications/"&gt;12 Useful Techniques for Good User Interface Design&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.usabilitypost.com/2009/04/15/8-characteristics-of-successful-user-interfaces/" rel="bookmark" title="Permanent Link to 8 Characteristics Of Successful User Interfaces"&gt;8 Characteristics of Successful User Interfaces&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Principles_of_User_Interface_Design"&gt;Principles of User Interface Design (Wikipedia)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://net.tutsplus.com/articles/10-principles-of-the-user-interface-masters/"&gt;10 Principles of the UI Design Masters&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sixrevisions.com/usabilityaccessibility/20-websites-to-help-you-master-user-interface-design/" rel="bookmark" title="Permanent Link to 20 Websites to Help You Master User Interface Design"&gt;20 Websites to Help You Master User Interface Design&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Essential Components Of Web Applications&lt;/h3&gt;&lt;p&gt;Every Web application is unique, but many of them contain common features. Although the implementation of any one of these features will vary, let’s look at the basic concept of the three most common ones.&lt;/p&gt;&lt;h4&gt;Web Forms&lt;/h4&gt;&lt;p&gt;Forms in general are important to Web applications. But as Luke Wroblewski says in his Web Form Design book, “No one likes filing in forms.” That includes sign-up forms, including business applications with dozens of fields.&lt;/p&gt;&lt;p&gt;Minimize the frustration of filling in forms. Provide inline validation and good feedback. Use defaults when possible. Don’t forget about novice users. Use wizards to help them complete tasks faster, or use progressive disclosure to hide advanced (or infrequently used) features.&lt;/p&gt;&lt;h4&gt;Master-Detail Views&lt;/h4&gt;&lt;p&gt;This is the technique of showing data in two separate but related views. One view shows a list of items, while the other shows details of the selected item. Master-detail views can be implemented across multiple pages or on individual ones.&lt;/p&gt;&lt;h4&gt;Dashboards&lt;/h4&gt;&lt;p&gt;Many Web applications have dashboards. A dashboard is a view of the most important information needed to take action and make decisions. It is confined to a single page and is usually the starting point of an application. Dashboards are important because they enable users to access information and take action without having to dig through the application.&lt;/p&gt;&lt;p&gt;&lt;img alt="Xero in Designing User Interfaces For Business Web Applications" height="367" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/xero.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;Xero shows a user’s most important financial information (e.g. bank accounts and credit cards) in its dashboard, making it easy for users to quickly see the status of their financial data.&lt;/em&gt;&lt;/p&gt;&lt;h4&gt;Heavy Use of Tables&lt;/h4&gt;&lt;p&gt;Because Web applications typically deal with large quantities of data that are easily accessible and sortable, tables are unavoidable. But this is not a bad thing. In fact, tables were made for this purpose. Don’t confuse this with table-less layouts. &lt;a href="http://designshack.co.uk/articles/css/15-tips-for-designing-terrific-tables"&gt;Effective tables&lt;/a&gt; are easily readable. So, in most cases you will need a meaningful header, an optimal number of columns, pagination, alternating row colors, proper column alignment, sorting and filtering capabilities and much more.&lt;/p&gt;&lt;p&gt;Tables can also be interactive, meaning they can generate additional info and even modify the data they contain.&lt;/p&gt;&lt;p&gt;&lt;img alt="Pulseapp1 in Designing User Interfaces For Business Web Applications" height="481" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/pulseapp1.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;PulseApp is a good example of how tables can be used to efficiently present and manipulate complex data.&lt;/em&gt;&lt;/p&gt;&lt;h4&gt;Reports&lt;/h4&gt;&lt;p&gt;Most businesses work with some kind of reports. Printed reports are usually required, so pay attention to the design of reports. Printed (or exported) reports are usually simplified versions of online reports, optimized for monochrome printers.&lt;/p&gt;&lt;p&gt;&lt;img alt="Fresh Books in Designing User Interfaces For Business Web Applications" height="285" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/02/fresh_books.jpg" width="500"&gt;&lt;br&gt; &lt;em&gt;FreshBooks has printing, PDF exporting and “Send to email” features. It also shows a print preview.&lt;/em&gt;&lt;/p&gt;&lt;h3&gt;Don’t Forget UI Design Patterns&lt;/h3&gt;&lt;p&gt;We’re so used to hearing and talking about UI design patterns that we sometimes forget about them! UI design patterns are helpful for designing user interfaces. The important thing is to consider them early on in the design process, ideally at the sketching stage. Because patterns often solve common problems, the right pattern can facilitate the user’s familiarity with an interface and increase the speed at which they learn it.&lt;/p&gt;&lt;p&gt;&lt;a href="http://designingwebinterfaces.com/designing-web-interfaces-12-screen-patterns"&gt;&lt;img alt="Standard Screen Patterns in Designing User Interfaces For Business Web Applications" height="705" src="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/2010/01/standard_screen_patterns.png" width="476"&gt;&lt;/a&gt;&lt;br&gt; &lt;em&gt;This screenshot is from the article &lt;a href="http://designingwebinterfaces.com/designing-web-interfaces-12-screen-patterns"&gt;12 Standard Screen Patterns&lt;/a&gt;, which goes over the most common screen patterns.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Further reading:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.amazon.com/Designing-Web-Interfaces-Principles-Interactions/dp/0596516258/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1264343645&amp;amp;sr=8-3"&gt;Designing Web Interfaces: Principles and Patterns for Rich Interactions&lt;/a&gt;&lt;br&gt; A fantastic book that covers more that 70 Web design patterns.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2010/02/25/2009/06/15/40-helpful-resources-on-user-interface-design-patterns/"&gt;40+ Helpful Resources On User Interface Design Patterns&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Case Study: Online Banking Application&lt;/h3&gt;&lt;p&gt;To take an example from the real world, I will briefly explain the process of designing the user interface for one small bank’s online banking system. The team I worked with was hired to improve the system. The main reason for the redesign was that, according to management, “users complained and many stopped using it.”&lt;/p&gt;&lt;p&gt;After only a couple of hours spent with actual users, the main problems were uncovered. Information about accounts and credit cards was buried in poor navigation. Understanding how much money users were spending and the state of their accounts and credit cards was also hard. The application, however, was obvious to bank employees; they were familiar with the terminology and could interpreted the numbers in the application perfectly well.&lt;/p&gt;&lt;p&gt;Give the tight deadlines, we followed the process I have described, and we partially succeeded. Despite the short time, the major problems were so obvious that we clearly understood our main task and how to go about it. We created a dashboard that provided clear information on the state of all accounts and credit cards. With this new navigation, finding information became easier. Reports were easier to understand, and several new features were implemented.&lt;/p&gt;&lt;p&gt;Although we made only a few changes, the changes affected critical user tasks and resulted in significant improvements to the overall experience.&lt;/p&gt;&lt;h3&gt;Final Thoughts&lt;/h3&gt;&lt;p&gt;Designing user interfaces for business Web applications is a challenging job that is full of compromises. You have to make compromises between client and user needs; business requirements and users; novice and expert users; functionality and simplicity. It requires a solid understanding of users and their tasks, as well as of UI design principles and patterns. Despite the difficulties, the job is interesting, and you learn many new things on each project that influence the way you design websites.&lt;/p&gt;&lt;p&gt;While this article reflects some well-known concepts and things I have learned from designing business applications over the years, I look forward to hearing your experiences and stories.&lt;/p&gt;&lt;p&gt;&lt;em&gt;(al)&lt;/em&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;small&gt;© Janko Jovanovic for &lt;a href="http://www.smashingmagazine.com"&gt;Smashing Magazine&lt;/a&gt;, 2010. | &lt;a href="http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/"&gt;Permalink&lt;/a&gt; | &lt;a href="http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/#comments"&gt;One comment&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/&amp;amp;title=Designing%20User%20Interfaces%20For%20Business%20Web%20Applications" title="Bookmark in del.icio.us"&gt;Add to del.icio.us&lt;/a&gt; | &lt;a href="http://digg.com/submit?phase=2&amp;amp;url=http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/" title="Bookmark in Digg"&gt;Digg this&lt;/a&gt; | &lt;a href="http://www.stumbleupon.com/submit?url=http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/" title="Stumble on StumbleUpon"&gt;Stumble on StumbleUpon!&lt;/a&gt; | &lt;a href="http://twitter.com/home?status=@tweetmeme%20@smashingmag%20Reading%20&amp;#39;Designing%20User%20Interfaces%20For%20Business%20Web%20Applications&amp;#39;%20http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/" title="Tweet us!"&gt;Tweet it!&lt;/a&gt; | &lt;a href="http://reddit.com/submit?url=http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/" title="Bookmark in Reddit"&gt;Submit to Reddit&lt;/a&gt; | &lt;a href="http://forum.smashingmagazine.com/"&gt;Forum Smashing Magazine&lt;/a&gt;&lt;br&gt; Post tags: &lt;br&gt; &lt;/small&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=bkq7EF9NJsQ:ll169yXW8KM: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=bkq7EF9NJsQ:ll169yXW8KM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=bkq7EF9NJsQ:ll169yXW8KM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/bkq7EF9NJsQ" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://feeds.postrank.com/32487697bce91539719dd56a738ba43e?level=good"><id>tag:google.com,2005:reader/feed/http://feeds.postrank.com/32487697bce91539719dd56a738ba43e?level=good</id><title type="html">Smashing Magazine - PostRank (PostRank: Good)</title><link rel="alternate" href="http://feeds.postrank.com/32487697bce91539719dd56a738ba43e?level=good" type="text/html" /></source><feedburner:origLink>http://www.smashingmagazine.com/2010/02/25/designing-user-interfaces-for-business-web-applications/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267442477267"><id gr:original-id="tag:blogger.com,1999:blog-3526038014741802853.post-800620276930908011">tag:google.com,2005:reader/item/e796312f16fa24a3</id><category term="gnome3" /><category term="nautlius" /><title type="html">The Future Of Nautilus</title><published>2010-02-28T23:57:30Z</published><updated>2010-02-28T23:57:30Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/94slj-oW2lc/future-of-nautilus.html" type="text/html" /><author><name>noreply@blogger.com (d0od)</name></author><gr:likingUser>03123277463555219805</gr:likingUser><gr:likingUser>09895063479675896067</gr:likingUser><gr:likingUser>01603459742862873344</gr:likingUser><gr:likingUser>05924429338927468978</gr:likingUser><gr:likingUser>15816351474215397997</gr:likingUser><gr:likingUser>00355346239514940980</gr:likingUser><gr:likingUser>16713378673369385587</gr:likingUser><gr:likingUser>02620425662677136617</gr:likingUser><gr:likingUser>17571160278268413551</gr:likingUser><gr:likingUser>07422282341148437558</gr:likingUser><gr:likingUser>17728244651958814706</gr:likingUser><gr:likingUser>18095177751647752007</gr:likingUser><gr:likingUser>16485479665141224453</gr:likingUser><source gr:stream-id="feed/http://www.omgubuntu.co.uk/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://www.omgubuntu.co.uk/feeds/posts/default</id><title type="html">Omg! Ubuntu!</title><link rel="alternate" href="http://www.omgubuntu.co.uk/" type="text/html" /></source><content type="html" xml:base="http://www.omgubuntu.co.uk/">Nautilus – the default file manager in Ubuntu – has an interface many consider to be awful and overly complex.  &lt;p&gt;It has button after button, toolbar after toolbar, menu after menu – and just looks, in my opinion at least, &lt;em&gt;clunky&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;&lt;img style="border:0px none;display:block;float:none;margin-left:auto;margin-right:auto" title="banner" alt="banner" src="http://lh6.ggpht.com/_FJH0hYZmVtc/S4qv5DsbeKI/AAAAAAAAGGM/oUFLp0cp6DY/banner_thumb%5B3%5D.jpg?imgmax=800" border="0" height="150" width="500"&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Ian “ Izo” Cylkowski&lt;/em&gt; also thinks that Nautilus could do with a makeover and has gone a step further and produced some mock-ups detailing his vision for the file browser. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;Boy does it scream ‘Yes!!’&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;To get to his design, Cylkowski deconstructed the current Nautilus, highlighti ng its replicated buttons and superfluous menus.&lt;/p&gt;  &lt;p&gt;It’s well worth reading the whole thing over at his site @ &lt;a title="http://www.design-by-izo.com/2010/02/27/deconstructing-nautilus-and-rebuilding-it-better/" href="http://www.design-by-izo.com/2010/02/27/deconstructing-nautilus-and-rebuilding-it-better/"&gt;http://www.design-by-izo.com/2010/02/27/deconstructing-nautilus-and-rebuilding-it-better/&lt;/a&gt; although a brief summary is below. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_FJH0hYZmVtc/S4p3YBcwL2I/AAAAAAAAGDs/dXUF1jTyBjs/s1600-h/nautilus_deconstructed%5B4%5D.png"&gt;&lt;img style="border-width:0px;display:inline" title="nautilus_deconstructed" alt="nautilus_deconstructed" src="http://lh3.ggpht.com/_FJH0hYZmVtc/S4p3Zdnf5vI/AAAAAAAAGDw/G6l3hIs8cDg/nautilus_deconstructed_thumb%5B2%5D.png?imgmax=800" border="0" height="352" width="475"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Arrows replicate functionality provided by pathbar. Would be more ‘elegant’ to have their feature merged into a right click on back/forward buttons. &lt;/li&gt;    &lt;li&gt;‘Parent Folder’ button replicates functionality provided by pathbar. &lt;/li&gt;    &lt;li&gt;Stop buttons is useless – file browsers load instantly. &lt;/li&gt;    &lt;li&gt;Reload could be integrated into pathbar &lt;/li&gt;    &lt;li&gt;Home button is already on sidebar. &lt;/li&gt;    &lt;li&gt;Computer button should also be on sidebar. &lt;/li&gt;    &lt;li&gt;Search should be a text entry field. &lt;/li&gt;    &lt;li&gt;Make the pathbar sexy. &lt;/li&gt;    &lt;li&gt;Zoom could be better implemented (like Nautilus Elementary’s slider) &lt;/li&gt;    &lt;li&gt;Buttons would work better than drop down list; a-la OS X finder. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;His resulting mock-up is worthy of an OMG! &lt;/p&gt;  &lt;p&gt; &lt;a href="http://www.design-by-izo.com/wp-content/uploads/2010/02/new-nautilus_mockup.png"&gt;&lt;img style="border-width:0px;display:inline" title="new-nautilus_mockup" alt="new-nautilus_mockup" src="http://lh5.ggpht.com/_FJH0hYZmVtc/S4p3Zw9nS8I/AAAAAAAAGD0/AtRdCQTBTFQ/new-nautilus_mockup%5B10%5D.png?imgmax=800" border="0" height="300" width="500"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;He even goes one better by proposing that GNOME Activity Journal – which uses Zeitgeist to display a log of your recent file activity – would make more sense as part of Nautilus rather than a standalone application. &lt;/p&gt;  &lt;p&gt;Seeing it in mock-up it’s hard to disagree!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.design-by-izo.com/2010/02/27/deconstructing-nautilus-and-rebuilding-it-better/"&gt;&lt;img style="border-width:0px;display:inline" title="new-nautilus_zeitgeist" alt="new-nautilus_zeitgeist" src="http://lh5.ggpht.com/_FJH0hYZmVtc/S4p3beMpyVI/AAAAAAAAGEY/ud2uH445xGA/new-nautilus_zeitgeist%5B5%5D.png?imgmax=800" border="0" height="305" width="508"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Get it now (sorta.)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Cylkowski does reference the awesome work of DanRabbit’s Nautilus-Elementary. Better still Nautilus-Elementary can be installed today!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_FJH0hYZmVtc/S4p3cBKX0JI/AAAAAAAAGEA/1djmv521D-8/s1600-h/4301178438_ea297ae655_o%5B4%5D.png"&gt;&lt;img style="border-width:0px;display:inline" title="4301178438_ea297ae655_o" alt="4301178438_ea297ae655_o" src="http://lh3.ggpht.com/_FJH0hYZmVtc/S4p3cgY6CPI/AAAAAAAAGEE/nvFS14HUfD4/4301178438_ea297ae655_o_thumb%5B2%5D.png?imgmax=800" border="0" height="353" width="498"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Install Nautilus-Elementary [Karmic only]&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Open a terminal and type the following commands, hitting your return/enter key after each.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;sudo add-apt-repository ppa:am-monkeyd/nautilus-elementary-ppa &lt;/li&gt;    &lt;li&gt;sudo apt-get update &lt;/li&gt;    &lt;li&gt;sudo apt-get upgrade &lt;/li&gt; &lt;/ul&gt; Then either log out and back in to use the new Nautilus or manually do it by pressing Alt+F2 and typing: -   &lt;ul&gt;   &lt;li&gt;pkill nautilus &lt;/li&gt; &lt;/ul&gt; Now we need to launch nautilus, so press Alt+F2 again, this time entering: -   &lt;ul&gt;   &lt;li&gt;nautilus &lt;/li&gt; &lt;/ul&gt; To hide/show the "menu bar" as in the screenshot hit Alt+M. &lt;br&gt;To toggle the sidebar use 'F9'.   &lt;p&gt;&lt;strong&gt;Future of Nautilus-Elementay&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;DanRabbit’s vision for Nautilus-Elementary is not too dissimilar to that of Ian Cylkowski’s: -&lt;/p&gt;  &lt;p&gt;&lt;a href="http://danrabbit.deviantart.com/art/elementary-Nautilus-154893044"&gt;&lt;img style="border-width:0px;display:inline" title="image" alt="image" src="http://lh4.ggpht.com/_FJH0hYZmVtc/S4p3dadc1QI/AAAAAAAAGEI/TN5ux7Bavk0/image%5B21%5D.png?imgmax=800" border="0" height="355" width="517"&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We’ve already seen Nautilus-Elementary get CoverFlow-esque integration: -&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.omgubuntu.co.uk/2010/02/easily-install-nautilus-coverflow-in.html"&gt;&lt;img style="border-width:0px;display:inline" title="image" alt="image" src="http://lh4.ggpht.com/_FJH0hYZmVtc/S4p3eb4wqXI/AAAAAAAAGEM/xBqOhQ7_fyQ/image%5B20%5D.png?imgmax=800" border="0" height="380" width="522"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;And you needn't worry about losing the ability to 'type' in the pathbar either, as DanRabbit's vision has that covered in spectacular style: -&lt;/p&gt;&lt;p&gt;&lt;a href="http://danrabbit.deviantart.com/art/Nautilus-Pathbar-Breakdown-155760035"&gt;&lt;img style="width:540px;height:405px" src="http://fc03.deviantart.net/fs71/f/2010/059/b/f/Nautilus_Pathbar_Breakdown_by_DanRabbit.png" alt="" border="0"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Practical future: Lucid, GNOME 3 and beyond&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Leaving the land of mock-ups and 3rd party win, what &lt;em&gt;IS&lt;/em&gt; Nautilus going to look like in the future?&lt;/p&gt;  &lt;p&gt;Requiring almost no squinting in our crystal ball, Nautilus in Lucid already sees some minor, subtle changes. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://imgur.com/wE92c.png"&gt;&lt;img alt="" src="http://imgur.com/wE92c.png" border="0" height="449" width="528"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Tabs have been moved to the bottom &lt;/li&gt;    &lt;li&gt;Split-pane view has been implemented &lt;/li&gt;    &lt;li&gt;Toolbars have been slightly rearranged with the ‘Places’ sitting in the pathbar and ‘View’ and ‘Zoom’ jumping up to the main toolbar. &lt;/li&gt;    &lt;li&gt;Un-mounting a device now returns you to ‘Computer’ &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_FJH0hYZmVtc/S4qo9aRE37I/AAAAAAAAGFc/fPsMgTSddZQ/s1600-h/Image.png"&gt;&lt;img style="border-width:0px;display:inline" title="Cartel — File Browser_011" alt="Cartel — File Browser_011" src="http://lh6.ggpht.com/_FJH0hYZmVtc/S4qo-Hur5JI/AAAAAAAAGFg/JD37mMbIpb8/Image.png?imgmax=800" border="0" height="296" width="500"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;Split pane view in Nautilus 2.29&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;GNOME 3&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;GNOME 3 will see nautilus become solely a file manager. “What?” you ask. Currently Nautilus provides several parts of the GNOME desktop including your actual ‘desktop’. With GNOME 3 Nautilus will be relegated to simply being a file manager – making swapping it out for an alternative a breeze.&lt;/p&gt;  &lt;p&gt;Although noting concrete has been built – or even decided on – yet last weeks GNOME usability hackfest in London threw up some tantalizing glimpses into what’s being proposed.&lt;/p&gt;  &lt;p&gt;Behold the whiteboard of divination: -&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_FJH0hYZmVtc/S4p3h2beOKI/AAAAAAAAGEQ/d50ahBtXQlM/s1600-h/image%5B25%5D.png"&gt;&lt;img style="border-width:0px;display:inline" title="image" alt="image" src="http://lh4.ggpht.com/_FJH0hYZmVtc/S4p3ktU3nyI/AAAAAAAAGEU/5SiPMyGO64Q/image_thumb%5B15%5D.png?imgmax=800" border="0" height="400" width="532"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Máirín Duffy posted the above image and some notes on the discussion of Nautilus from the hackfest &lt;a href="http://mairin.wordpress.com/2010/02/24/misc-notes-from-gnome-ux-hackfest-tuesday/"&gt;on her blog&lt;/a&gt; - which I've shamelessly pillaged and pasted below. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;a href="http://mairin.wordpress.com/"&gt;Head on over to her blog for even more juice on GNOME 3 from the week-long discussion.&lt;/a&gt;&lt;/em&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;remove combo box to change nautilus view, just use menu? &lt;/li&gt;    &lt;li&gt;frustration that nautilus is becoming like midnight commander, not beautiful to use, too complicated &lt;/li&gt;    &lt;li&gt;dont like split pane idea, why not use two windows? split-pane seems universally disliked by GNOME designers. &lt;/li&gt;    &lt;li&gt;snap to side-by-side like in windows 7 would be good and would remove need for split-pane. &lt;/li&gt;    &lt;li&gt;search in nautilus sucks &lt;/li&gt;    &lt;li&gt;confusion between magnifying glass icon for search vs zoom &lt;/li&gt;    &lt;li&gt;Things to consider removing from ui:      &lt;ul&gt;       &lt;li&gt;zoom controls &lt;/li&gt;        &lt;li&gt;tabs &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Things to add to ui      &lt;ul&gt;       &lt;li&gt;undo &lt;/li&gt;        &lt;li&gt;search folders &lt;/li&gt;        &lt;li&gt;sharing / collaboration – share with &lt;/li&gt;        &lt;li&gt;context-sensitive actions toolbar &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Convergence &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A lot of the discussions for GNOME 3’s direction tie in wonderfully with the proposed directions offered up by Elementary and Izo. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;It seems the future of Nautilus has its bearing set firmly in the direction of awesome.&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="right"&gt;&lt;em&gt;Thanks to leo&lt;/em&gt;&lt;/p&gt;&lt;div&gt;© omgubuntu.co.uk 2010. | Ubuntu News, Tips, Apps and more.&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/3526038014741802853-800620276930908011?l=www.omgubuntu.co.uk" alt=""&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:wBxX2hOkimM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?i=bsPhc0mD2Ng:qUuSgNx2jdg:wBxX2hOkimM" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?i=bsPhc0mD2Ng:qUuSgNx2jdg:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?i=bsPhc0mD2Ng:qUuSgNx2jdg:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?d=TzevzKxY174" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/d0od?a=bsPhc0mD2Ng:qUuSgNx2jdg:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/d0od?d=l6gmwiTKsz0" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/d0od/~4/bsPhc0mD2Ng" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=94slj-oW2lc:H1OAo6Xi0tc: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=94slj-oW2lc:H1OAo6Xi0tc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=94slj-oW2lc:H1OAo6Xi0tc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/94slj-oW2lc" height="1" width="1"/&gt;</content><feedburner:origLink>http://feedproxy.google.com/~r/d0od/~3/bsPhc0mD2Ng/future-of-nautilus.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267189428928"><id gr:original-id="http://readitlaterlist.com/blog/?p=473">tag:google.com,2005:reader/item/c43f5ace22190203</id><category term="News" /><title type="html">Introducing Read It Later Digest</title><published>2010-02-25T17:43:59Z</published><updated>2010-02-25T17:43:59Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/h8aGVK8a-Rw/" type="text/html" /><content xml:base="http://readitlaterlist.com/blog" type="html">&lt;p&gt;&lt;a href="http://readitlaterlist.com/digest/"&gt;Digest&lt;/a&gt; is Read It Later with a brain. It analyzes all of the articles in your list and automatically groups them into topics. Simply put, it is like having folders in your list, but RIL takes care of sorting them for you.&lt;/p&gt;
&lt;div align="center" style="margin-bottom:5px"&gt;
&lt;embed src="http://www.youtube.com/v/wMS05MhpOV8&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" allowScriptAccess="never" allowFullScreen="true" width="425" height="344" wmode="transparent" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;
&lt;/div&gt;
&lt;p&gt;This is all about reinventing the reading list.  RIL makes it very easy to save a link with just one click, in any browser and on most mobile devices.  It’s almost too easy.  So naturally your reading list can fill up fast.&lt;/p&gt;
&lt;p&gt;There is a fundamental problem with displaying your items in a list.  It’s hard to know where to start.  Do you start from the top?  From the bottom?  Randomly?  None of these make a whole lot of sense because the order in which you saved things is not necessarily the order you want to read them.&lt;/p&gt;
&lt;p&gt;Looking at your list, you may have an article about technology you wanted to read, a video about kittens you wanted to watch, a link to shoes you wanted to buy or a website for a band your friend told you to check out.  And when you finally get around to reading, you may only be interested in one of those topics.  It’d be a LOT easier if it were better organized.&lt;/p&gt;
&lt;p&gt;Normally organization is accomplished with folders and tagging.  But both of those take time to manually add to each item, time that you do not have, which is the whole reason why you are using Read It Later in the first place!&lt;/p&gt;
&lt;p&gt;This is why Digest works.  It’s smart enough to know the difference between an article on iPhones and an article about sports.  It takes each article and filters it into the topics you care about automatically.&lt;/p&gt;
&lt;div align="center" style="margin-bottom:5px"&gt;&lt;a href="http://readitlaterlist.com/digest/"&gt;&lt;img title="topicblog" src="http://readitlaterlist.com/blog/wp-content/uploads/2010/02/topicblog.jpg" alt="topicblog" width="462" height="391"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Landing on the front page is like coming to a news site where all of the articles were hand picked by you, where there is nothing to filter through, it is all content you already know you want to read.&lt;/p&gt;
&lt;p&gt;Topics are automatically created for you based on what you’ve already saved but you can fully customize your digest by adding topics, removing them, rearranging them and even defining your own custom topics that articles will be sorted into.&lt;/p&gt;
&lt;p&gt;Digest finds and highlights certain content from your list.  If you save a lot of videos, Digest will present                 them together for you.  If you save a lot of links from a certain site, Digest will group them for you.&lt;/p&gt;
&lt;p&gt;You can even share your digest by making it public and sending the URL to all of your friends.&lt;/p&gt;
&lt;h3&gt;How to Get It&lt;/h3&gt;
&lt;p&gt;Today, Digest is available as a free invite only beta.  To request an invite, go to &lt;a href="http://readitlaterlist.com/digest"&gt;http://readitlaterlist.com/digest&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;The Future&lt;/h3&gt;
&lt;p&gt;Digest is starting on the web but will very soon be making a native appearance within the iPhone app, Firefox extension and the upcoming iPad app.&lt;/p&gt;
&lt;p&gt;The current way you use Read It Later and all that it offers will not change and it will absolutely still be free.  Digest will be the premium upgrade to the Read It Later service and pricing will be announced in a few weeks.&lt;/p&gt;
&lt;p&gt;I’m unbelievably excited about where Digest will go in the future.  I already have a million ideas for paths to explore, so grab an invite, give it a spin and enjoy a new way to use Read It Later!&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/ReadItLaterBlog/~4/BEdPXLZzEl8" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=h8aGVK8a-Rw:KYHFily9QNw: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=h8aGVK8a-Rw:KYHFily9QNw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=h8aGVK8a-Rw:KYHFily9QNw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/h8aGVK8a-Rw" height="1" width="1"/&gt;</content><author><name>admin</name></author><gr:likingUser>04472467876023233253</gr:likingUser><gr:likingUser>09814921231144597801</gr:likingUser><gr:likingUser>00206155940995900748</gr:likingUser><source gr:stream-id="feed/http://feeds2.feedburner.com/ReadItLaterBlog"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/ReadItLaterBlog</id><title type="html">Read It Later Blog</title><link rel="alternate" href="http://readitlaterlist.com/blog" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/ReadItLaterBlog/~3/BEdPXLZzEl8/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1267104786600"><id gr:original-id="tag:typepad.com,2003:post-6a00d83451b31569e2012875dfc76f970c">tag:google.com,2005:reader/item/afeb3dc20f9b86e3</id><title type="html">Why are you apologizing?</title><published>2010-02-25T10:02:00Z</published><updated>2010-02-25T10:02:00Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/YB0WZAScyTU/why-are-you-apologizing.html" type="text/html" /><link rel="replies" href="http://sethgodin.typepad.com/seths_blog/2010/02/why-are-you-apologizing.html" type="text/html" /><content xml:base="http://sethgodin.typepad.com/seths_blog/" xml:lang="en-US" type="html">&lt;p&gt;I don't understand blog posts, emails and other messages that begin with an apology.&lt;/p&gt;&lt;p&gt;If you're sorry to interrupt me with that spam, &lt;em&gt;don't send it. &lt;br&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you know that yet another blog post on a topic that's not of interest to your readers will annoy them, &lt;em&gt;don't post it.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;If you're in HR and you know that no one in the office is going to read your office-wide spam about yet another inane meeting, &lt;em&gt;don't bother us.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;On the other hand, if it's important, if it needs to be said, if it benefits not just you but the recipient, then just send it. Instead of an apology, clearly label it so it's easy to ignore or discard. Even better, don't send everyone a message aimed at just a few people. It's easier than ever to focus on the people you need to focus on. &lt;/p&gt;&lt;p&gt;Just because it's more convenient &lt;em&gt;for you&lt;/em&gt; to blast everyone in your address book doesn't mean it's smart.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=d_br8DbnrvI:lsfU9z_mOa0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=d_br8DbnrvI:lsfU9z_mOa0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?i=d_br8DbnrvI:lsfU9z_mOa0:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=d_br8DbnrvI:lsfU9z_mOa0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?i=d_br8DbnrvI:lsfU9z_mOa0:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?a=d_br8DbnrvI:lsfU9z_mOa0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/typepad/sethsmainblog?d=qj6IDK7rITs" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/typepad/sethsmainblog/~4/d_br8DbnrvI" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=YB0WZAScyTU:0ahSmHRxmeM: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=YB0WZAScyTU:0ahSmHRxmeM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=YB0WZAScyTU:0ahSmHRxmeM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/YB0WZAScyTU" height="1" width="1"/&gt;</content><author><name>Seth Godin</name></author><gr:likingUser>08806027115291376477</gr:likingUser><gr:likingUser>08065408371810708657</gr:likingUser><gr:likingUser>09879977286868249236</gr:likingUser><gr:likingUser>01378362922825043920</gr:likingUser><gr:likingUser>17319055754489212699</gr:likingUser><gr:likingUser>17722001012160051895</gr:likingUser><gr:likingUser>18202590468076660258</gr:likingUser><gr:likingUser>11389594268607297375</gr:likingUser><gr:likingUser>13677247128929462804</gr:likingUser><gr:likingUser>06780069587605525364</gr:likingUser><gr:likingUser>03560200052926293134</gr:likingUser><gr:likingUser>06602485712224141539</gr:likingUser><gr:likingUser>14456380543361628049</gr:likingUser><gr:likingUser>02812919787727560075</gr:likingUser><gr:likingUser>05259078288864139472</gr:likingUser><gr:likingUser>03542851206260239431</gr:likingUser><gr:likingUser>01355649457074568134</gr:likingUser><gr:likingUser>10794533770051388961</gr:likingUser><gr:likingUser>17614079838891910183</gr:likingUser><gr:likingUser>00588392285204781377</gr:likingUser><gr:likingUser>11270171458922216948</gr:likingUser><gr:likingUser>03644179181219103988</gr:likingUser><gr:likingUser>09353311395555216279</gr:likingUser><gr:likingUser>05940503693148720177</gr:likingUser><gr:likingUser>06827786850484179908</gr:likingUser><gr:likingUser>09279803058508456618</gr:likingUser><gr:likingUser>08759707611832914818</gr:likingUser><gr:likingUser>11594504325615762968</gr:likingUser><gr:likingUser>12212200999016560865</gr:likingUser><gr:likingUser>04583787003001197338</gr:likingUser><gr:likingUser>01395482776692417489</gr:likingUser><gr:likingUser>00608651506045087410</gr:likingUser><gr:likingUser>00278265867767457667</gr:likingUser><gr:likingUser>01652926906295791166</gr:likingUser><gr:likingUser>02173528149948855047</gr:likingUser><gr:likingUser>01663442123412209734</gr:likingUser><gr:likingUser>07866091659462793592</gr:likingUser><gr:likingUser>15743118921241282294</gr:likingUser><gr:likingUser>17334117419571554503</gr:likingUser><gr:likingUser>00854899150142204418</gr:likingUser><gr:likingUser>06955855646732497059</gr:likingUser><gr:likingUser>06152004481357015922</gr:likingUser><gr:likingUser>06894343738181735059</gr:likingUser><gr:likingUser>11430576558512139246</gr:likingUser><gr:likingUser>08206130904854014088</gr:likingUser><gr:likingUser>18164528136028484913</gr:likingUser><gr:likingUser>11561230805588022331</gr:likingUser><gr:likingUser>09810797701105967160</gr:likingUser><gr:likingUser>13385264844769497763</gr:likingUser><gr:likingUser>01888514743119747885</gr:likingUser><gr:likingUser>06093693391433498752</gr:likingUser><gr:likingUser>02522844054678507844</gr:likingUser><gr:likingUser>14312955793133815651</gr:likingUser><gr:likingUser>03869743105084347647</gr:likingUser><gr:likingUser>14217098608439517308</gr:likingUser><gr:likingUser>00522691215039874515</gr:likingUser><gr:likingUser>12027178065618997979</gr:likingUser><gr:likingUser>13112233448461084908</gr:likingUser><gr:likingUser>06180967825724351299</gr:likingUser><gr:likingUser>10283606287975428146</gr:likingUser><gr:likingUser>01503283757702654730</gr:likingUser><gr:likingUser>13453457502975409600</gr:likingUser><gr:likingUser>00013493085127312859</gr:likingUser><gr:likingUser>07027387198294470478</gr:likingUser><gr:likingUser>09288151640552344367</gr:likingUser><gr:likingUser>13825579957425031692</gr:likingUser><gr:likingUser>02256128191785119187</gr:likingUser><gr:likingUser>01167508414597979090</gr:likingUser><gr:likingUser>10988187040395647596</gr:likingUser><gr:likingUser>00389271133507290306</gr:likingUser><gr:likingUser>11428857372515194212</gr:likingUser><gr:likingUser>03476316638003394405</gr:likingUser><gr:likingUser>12006236744221234806</gr:likingUser><gr:likingUser>09740490214290799102</gr:likingUser><gr:likingUser>04050934029632996156</gr:likingUser><gr:likingUser>01518687307808882836</gr:likingUser><gr:likingUser>09770117062078850116</gr:likingUser><gr:likingUser>05576498764053654029</gr:likingUser><gr:likingUser>06015849592468810423</gr:likingUser><gr:likingUser>15425516374748737790</gr:likingUser><gr:likingUser>09275559235888380528</gr:likingUser><gr:likingUser>06164954718577270385</gr:likingUser><gr:likingUser>13498253436214215893</gr:likingUser><gr:likingUser>02666917073255051703</gr:likingUser><gr:likingUser>00762231927070388848</gr:likingUser><gr:likingUser>09904296224569911781</gr:likingUser><gr:likingUser>12385612377600601333</gr:likingUser><gr:likingUser>09422301044102329515</gr:likingUser><gr:likingUser>08938884734686348723</gr:likingUser><gr:likingUser>17220363622418603842</gr:likingUser><gr:likingUser>05932263768104850349</gr:likingUser><gr:likingUser>08980340040165421553</gr:likingUser><gr:likingUser>01078909911975297443</gr:likingUser><gr:likingUser>07061238956016346988</gr:likingUser><gr:likingUser>14795733190593612097</gr:likingUser><gr:likingUser>17343810970162056417</gr:likingUser><gr:likingUser>18303968031612193409</gr:likingUser><gr:likingUser>07796624529320644792</gr:likingUser><gr:likingUser>06723147975468587461</gr:likingUser><gr:likingUser>00265743533233451547</gr:likingUser><source gr:stream-id="feed/http://feeds.feedburner.com/typepad/sethsmainblog"><id>tag:google.com,2005:reader/feed/http://feeds.feedburner.com/typepad/sethsmainblog</id><title type="html">Seth&amp;#39;s Blog</title><link rel="alternate" href="http://sethgodin.typepad.com/seths_blog/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/typepad/sethsmainblog/~3/d_br8DbnrvI/why-are-you-apologizing.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1266324763345"><id gr:original-id="http://dominno.pl/blog/2010/02/15/automatyczne-sprawdzanie-zgodnosci-kodu-pythona/">tag:google.com,2005:reader/item/ff04738c7e18fabd</id><title type="html">Automatyczne sprawdzanie zgodności kodu Pythona z PEP8</title><published>2010-02-16T12:52:43Z</published><updated>2010-02-16T12:52:43Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/nrQLMO3CnkQ/" type="text/html" /><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://dominno.pl/blog/feeds/entries/"><id>tag:google.com,2005:reader/feed/http://dominno.pl/blog/feeds/entries/</id><title type="html">Dominik Szopa - ostatnie wpisy</title><link rel="alternate" href="http://dominno.pl/blog/" type="text/html" /></source><content type="html" xml:base="http://dominno.pl/blog/">

&lt;p&gt;Jakiś czas temu pisałem o &lt;a href="http://pypi.python.org/pypi/pep8/"&gt;skrypcie&lt;/a&gt; który sprawdza zgodność kodu Pythona z &lt;a href="http://www.python.org/dev/peps/pep-0008/"&gt;PEP8&lt;/a&gt;.
   Jednak podczas pracy nad kilkoma projektami zauważyłem, że nie chciało mi się za każdym razem ręcznie uruchamiać tego skryptu na całym projekcie. Sprowadzało się do tego że uruchamiałem go gdy projekt był już skończony. Prowadziło do tego że nie byłem w stanie czasowo wprowadzić wszystkich poprawek, bo było ich bardzo dużo. 
&lt;/p&gt;
&lt;p&gt;Niby wydawało by się że wystarczy raz czy dwa przeczytać dokument PEP8 i przy pisaniu kodu stosować się do zaleceń, jednak potem gdy pisze się kod to się o wszystkim zapomina. Wydaje mi się że z pisaniem kodu jest jak z ładnym odręcznym pisaniem, to nawyk którego się nie da się nauczyć czytając jakieś poradniki. Tak samo jest ze stylem pisania kodu. 
&lt;/p&gt;
&lt;p&gt;Skrypt do sprawdzania poprawności stylu kodu sprawdza się tutaj znakomicie, pozwala w szybki sposób na wyuczenie nawyku pisania kodu zgodnego z PEP8. Aby ułatwić sprawę, dodałem do testów danego projektu, przypadek testowy który uruchamia skrypt i sprawdza kod całego projektu. Jeżeli kod nie jest zgody z PEP8, to wyrzuca wyjątek i pokazuje dokładnie co trzeba poprawić. 
&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;from&lt;/span&gt; &lt;span&gt;StringIO&lt;/span&gt; &lt;span&gt;import&lt;/span&gt; &lt;span&gt;StringIO&lt;/span&gt;

&lt;span&gt;import&lt;/span&gt; &lt;span&gt;sys&lt;/span&gt;

&lt;span&gt;import&lt;/span&gt; &lt;span&gt;unittest&lt;/span&gt;

&lt;span&gt;import&lt;/span&gt; &lt;span&gt;pep8&lt;/span&gt;


&lt;span&gt;class&lt;/span&gt; &lt;span&gt;PEP8TestCase&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;unittest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;TestCase&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;

    &lt;span&gt;def&lt;/span&gt; &lt;span&gt;test_pep8_rules&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;  
        &lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;argv&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:]&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;[&lt;/span&gt;&lt;span&gt;&amp;#39;--filename=*.py&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&amp;#39;--show-source&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&amp;#39;--show-pep8&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; 
                               &lt;span&gt;my_project&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;__path__&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;  
        &lt;span&gt;buf&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;StringIO&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;         
        &lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stdout&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;buf&lt;/span&gt;
        &lt;span&gt;pep8&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_main&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;            
        &lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stdout&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;sys&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;__stdout__&lt;/span&gt;   
        &lt;span&gt;result&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;buf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getvalue&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;

        &lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;assertEqual&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;result&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;
                     &lt;span&gt;&amp;quot;Code messages should be empty but was:&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Wystarczy teraz na bieżąco podczas pisania kodu uruchamiać testy i mamy pewność że powstały kod jest zgodny z PEP8. Bardzo fajnie sprawdza się to także z pisaniem kodu wykorzystując Test Driven Development. Podczas pisania i uruchamiania testów od razu mamy sprawdzony cały powstały kod.
&lt;/p&gt;
&lt;p&gt;Po paru poprawkach pisanie kodu zgodnego z PEP8 wejdzie nam tak w krew że podczas pisania kodu od razu zacznie się pisać poprawny kod. Przydaje się tutaj włączenie w edytorze pokazywanie białych znaków aby od razu wykrywać miejsca gdzie znajdują się nadmiarowe białe znaki.
&lt;/p&gt;
&lt;p&gt;Zauważyłem także, że dbając o styl kodu, wykrywa się też miejsca które można zrefaktoryzować i uprościć. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=nrQLMO3CnkQ:Ee2fKC7sD7I: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=nrQLMO3CnkQ:Ee2fKC7sD7I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=nrQLMO3CnkQ:Ee2fKC7sD7I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/nrQLMO3CnkQ" height="1" width="1"/&gt;</content><feedburner:origLink>http://dominno.pl/blog/2010/02/15/automatyczne-sprawdzanie-zgodnosci-kodu-pythona/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1266254934821"><id gr:original-id="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=f4e8e926-bd5a-43ba-8c7c-cea3dfaf2b2d">tag:google.com,2005:reader/item/9b6faf730dff91e9</id><category term="Competitors/Web Companies" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Competitors%2fWeb+Companies" label="Competitors/Web Companies" /><category term="Mindless Link Propagation" scheme="http://www.25hoursaday.com/weblog/CategoryView.aspx?category=Mindless+Link+Propagation" label="Mindless Link Propagation" /><title type="html">Google Buzz vs. Google Wave</title><published>2010-02-15T14:59:13Z</published><updated>2010-02-15T14:59:13Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/sTBCT7yMI64/GoogleBuzzVsGoogleWave.aspx" type="text/html" /><link rel="replies" href="http://www.25hoursaday.com/weblog/SyndicationService.asmx/GetEntryCommentsRss?guid=f4e8e926-bd5a-43ba-8c7c-cea3dfaf2b2d" type="application/atom+xml" /><link rel="replies" href="http://www.25hoursaday.com/weblog/CommentView.aspx?guid=f4e8e926-bd5a-43ba-8c7c-cea3dfaf2b2d" title="4 Comments" type="text/html" /><content xml:base="http://www.25hoursaday.com/weblog/" xml:lang="en-us" type="html">&lt;p&gt;
From the &lt;a href="http://www.waveprotocol.org/whitepapers/google-wave-architecture"&gt;Google
Wave Federation architecture white paper&lt;/a&gt; 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;Google Wave is a new communication and collaboration platform based on hosted
documents (called waves) supporting concurrent modifications and low-latency updates.
This platform enables people to communicate and work together in new, convenient and
effective ways. We will offer these benefits to users of &lt;/em&gt;&lt;a href="http://wave.google.com"&gt;&lt;em&gt;wave.google.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and
we also want to share them with everyone else by making waves an open platform that
everybody can share. &lt;font color="#ff0000"&gt;We welcome others to run wave servers and
become wave providers, for themselves or as services for their users, and to &amp;quot;federate&amp;quot;
waves, that is, to share waves with each other and with wave.google.com.&lt;/font&gt; In
this way users from different wave providers can communicate and collaborate using
shared waves. We are introducing the Google Wave Federation Protocol for federating
waves between wave providers on the Internet.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
From a &lt;a href="http://www.google.com/buzz/dclinton/XxER6oP4WGe/The-best-way-to-get-a-sense-of-where-the-Buzz-API"&gt;Buzz
post by Dewitt Clinton&lt;/a&gt;, a Google employee
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;The best way to get a sense of where the Buzz API is heading is to take a look
at &lt;/em&gt;&lt;a href="http://code.google.com/apis/buzz/"&gt;&lt;em&gt;http://code.google.com/apis/buzz/&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.
You&amp;#39;ll notice that the &amp;quot;coming soon&amp;quot; section mentions a ton of protocols—Activity
Streams, Atom, AtomPub, MediaRSS, WebFinger, PubSubHubbub, Salmon, OAuth, XFN, etc. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;What it doesn't talk much about is Google. That's because the goal isn't Google
specific at all. &lt;font color="#ff0000"&gt;The idea is that someday, any host on the web
should be able to implement these open protocols and send messages back and forth
in real time with users from any network, without any one company in the middle.&lt;/font&gt; The
web contains the social graph, the protocols are standard web protocols, the messages
can contain whatever crazy stuff people think to put in them. Google Buzz will be
just another node (a very good node, I hope) among many peers. Users of any two systems
should be able to send updates back and forth, federate comments, share photos, send
@replies, etc., without needing Google in the middle and without using a Google-specific
protocol or format.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
From Mark Sigal’s post &lt;a href="http://radar.oreilly.com/2010/02/google-buzz-is-it-project-prod.html"&gt;Google
Buzz: Is it Project, Product or Platform?&lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;I think that it's great that Google is iterating Gmail (read Tim O'Reilly's excellent
write-up on it &lt;/em&gt;&lt;a href="http://radar.oreilly.com/2010/02/google-buzz-re-invents-gmail.html"&gt;&lt;em&gt;here&lt;/em&gt;&lt;/a&gt;&lt;em&gt;),
and actually improving an &lt;strong&gt;existing&lt;/strong&gt; product, versus rolling out a
knock-off of something that is already in the market.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Nonetheless. I am confused. I thought that Google Wave was destined to be the
new Gmail, but after yesterday's announcement, I am left wondering if Gmail is, instead,
the new Google Wave.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;hr&gt;
&lt;p&gt;
Since the saying goes that people in glass houses shouldn’t throw stones, I won’t
make any comment besides sharing these links with you. 
&lt;/p&gt;
&lt;p&gt;
&lt;img style="vertical-align:middle" 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=50+Cent&amp;amp;field-title=Stolen&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;50
Cent&lt;/a&gt; - &lt;a href="http://www.amazon.com/s/ref=nb_ss_dmusic?url=search-alias%3Ddigital-music&amp;amp;field-keywords=50+Cent+Crime+Wave&amp;amp;x=0&amp;amp;y=0"&gt;Crime
Wave&lt;/a&gt; &lt;img style="vertical-align:middle" 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=sTBCT7yMI64:KON9CgLN3pI: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=sTBCT7yMI64:KON9CgLN3pI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=sTBCT7yMI64:KON9CgLN3pI:F7zBnMyn0Lo" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=sTBCT7yMI64:KON9CgLN3pI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=sTBCT7yMI64:KON9CgLN3pI:gIN9vFwOqvQ" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=sTBCT7yMI64:KON9CgLN3pI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=sTBCT7yMI64:KON9CgLN3pI:V_sGLiPBpWU" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Carnage4life?a=sTBCT7yMI64:KON9CgLN3pI:D7DqB2pKExk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Carnage4life?i=sTBCT7yMI64:KON9CgLN3pI:D7DqB2pKExk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Carnage4life/~4/sTBCT7yMI64" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=sTBCT7yMI64:6JfZ9fBqEQ0: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=sTBCT7yMI64:6JfZ9fBqEQ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=sTBCT7yMI64:6JfZ9fBqEQ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/sTBCT7yMI64" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>01378362922825043920</gr:likingUser><gr:likingUser>03999094385297308278</gr:likingUser><gr:likingUser>04950154698156109952</gr:likingUser><gr:likingUser>13876357222116191626</gr:likingUser><gr:likingUser>14185680358208344481</gr:likingUser><gr:likingUser>08508797527682677317</gr:likingUser><gr:likingUser>16799363754356764690</gr:likingUser><gr:likingUser>14559311968925167242</gr:likingUser><gr:likingUser>06057918660078543422</gr:likingUser><gr:likingUser>00363647479470519434</gr:likingUser><gr:likingUser>10682654785454478291</gr:likingUser><gr:likingUser>05382475056820482374</gr:likingUser><gr:likingUser>15493505074370661985</gr:likingUser><gr:likingUser>16009207400378881228</gr:likingUser><gr:likingUser>01014446539998601099</gr:likingUser><gr:likingUser>00133857118597717724</gr:likingUser><gr:likingUser>04605841360574369872</gr:likingUser><gr:likingUser>11224858748982647680</gr:likingUser><gr:likingUser>17930131873740303556</gr:likingUser><gr:likingUser>02193447919425749287</gr:likingUser><gr:likingUser>11067853532291698348</gr:likingUser><gr:likingUser>01474645680428334099</gr:likingUser><gr:likingUser>10367912267584164636</gr:likingUser><gr:likingUser>00381581412184631601</gr:likingUser><gr:likingUser>12650819708713300725</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/02/15/GoogleBuzzVsGoogleWave.aspx</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1266049725960"><id gr:original-id="http://www.baekdal.com/articles/management/where/">tag:google.com,2005:reader/item/bace3be3cb55c5c5</id><category term="management" /><title type="html">Where&amp;#39;s the Money, Bob?</title><published>2010-02-08T13:08:40Z</published><updated>2010-02-08T13:08:40Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/v22Bl6Sj6LE/" type="text/html" /><content xml:base="http://www.baekdal.com/" type="html">&lt;img src="http://www.baekdal.com/rssmedia/rss.png" style="float:left;padding:0 5px 0 0"&gt; 
&lt;p&gt;The social web is starting to sound more and more like the dot.com days. We are in the middle of a transition. The ways we do things are radically different. What works and doesn't work seems new. And many people are getting very excited about numbers, but not the right ones.&lt;/p&gt;&lt;p&gt;Back in 2000, it was all about traffic. Just get a million people to come to your site, and you have made it. Today people say that attention, engagement, interactions or number of fans is the new currency. Just get people's attention and you have made it!&lt;/p&gt;&lt;p&gt;I have this weird sense of deja vu. Haven't we been here before? Didn't people learn anything?&lt;/p&gt;&lt;p&gt;The bottom line is this. Money is still the new currency. I can't buy a cup of coffee just by paying attention to it!&lt;/p&gt;&lt;h2&gt;Should content be free?&lt;/h2&gt;&lt;p&gt;Everywhere you look, you will find many people believing that content, and in some cases, products should be free. If you ask people about paying for news online, about 40-80% say that they won't. Content should be free, just as music should be free. &lt;/p&gt;&lt;p&gt;But here is the thing.&lt;/p&gt;&lt;p&gt;I am a firm believer of freedom of content. That is anyone should be free to get any content, despite where they are or how they choose to consume it. We need freedom of content, no restrictions, no lock-ins, no "you can only get it if you buy it on a DVD" or "you can only read this article in this news application, and not via RSS"&lt;/p&gt;&lt;p&gt;But that doesn't mean that centent itself should be free. It just means that consumption of content should be free.&lt;/p&gt;&lt;p&gt;Content creation is a different matter. Creating content cost money and time. When you spend 5 hours writing a really interesting article, you are creating value, and you do at a cost. You spend time on it. You have to buy a computer, have an internet connection, use electricity, and the list goes on and on. &lt;/p&gt;&lt;p&gt;Just take this site. It costs me $4,000/year to run this site just for at the equipment and connections alone. That doesn't even include the time I spend writing content, contacting companies, preparing graphics, and illustrations etc. If I had to hire a writer to do it for me, I would have to pay her an additional $36,000/year.&lt;/p&gt;&lt;p&gt;So here is a simple question. Would you pay for baekdal.com? And if so, how much? What about $9.99/year? Does that sound reasonable?&lt;/p&gt;&lt;p&gt;Notice: No, I am not planning to turn baekdal.com into a pay-site.&lt;/p&gt;&lt;p&gt;You know, Rupert Murdoch is right when he says that people need to understand that content costs money to make, and as such cannot be free. Free means somebody else have to pay the bills. &lt;/p&gt;&lt;p&gt;What Rupert Murdoch doesn't understand, though, is that he is selling the wrong product. People don't want cheap newspapers, they want highly targeted, uniquely created news. Rupert Murdoch tries to sell us a box of random news - who wants that?&lt;/p&gt;&lt;p&gt;Content consumption must be free. You must be able to consume content where ever you are, whenever you want, via whatever channel. People should never pay extra for a mobile version, or not be able to read it in their favorite newsreader. &lt;/p&gt;&lt;p&gt;But, the content and services themselves cannot be free. It costs money to create, thus comes at a price.&lt;img src="http://www.baekdal.com/media/content/2010/nomoney1.jpg" alt=""&gt;  &lt;/p&gt;&lt;p&gt;A &lt;a href="http://www.boingboing.net/2010/02/05/zero-rupee-note-that.html"&gt;Zero Rupees&lt;/a&gt; note... a way for people to pay nothing.&lt;/p&gt;&lt;p&gt;Notice: Also read: "&lt;a href="http://www.baekdal.com/articles/management/how-newspaper-can-charge-for-content/"&gt;How Newspapers Can Charge for Content&lt;/a&gt;"&lt;/p&gt;&lt;h2&gt;Freemium doesn't mean free&lt;/h2&gt;&lt;p&gt;The biggest problem with this "everything must be free" is actually caused by lot of people and companies not understanding the concept of freemium. &lt;/p&gt;&lt;p&gt;Freemium is a business model brilliantly explained by Chris Anderson (Editor of Wired Magazine) and it goes like this: I will give you this for free, so that you in turn might be persuaded to buy my other products for money. Or variation of the same. &lt;/p&gt;&lt;img src="http://www.baekdal.com/media/content/2010/nomoney2.jpg" alt=""&gt;&lt;p&gt;It works for all kinds of industries. Online services might provide a free basic account, in the hope that you will later sign-up for premium services.&lt;/p&gt;&lt;img src="http://www.baekdal.com/media/content/2010/nomoney3.jpg" alt=""&gt;&lt;p&gt;Or, the most used freemium model of all. I Will give you free content, in exchange for being exposed to advertisement. This is how almost every commercial website operates.&lt;/p&gt;&lt;img src="http://www.baekdal.com/media/content/2010/nomoney4.jpg" alt=""&gt;&lt;p&gt;When people and companies starts to believe that freemium means free then we got real a problem. Freemium doesn't mean free. It means we will give you a salad, so that you might buy a meal to go with it. Some people might only want the salad, and that's okay, but, the business model is to get people to by the meal. &lt;/p&gt;&lt;p&gt;Most new social startups doesn't seem to understand freemium at all. Just take almost every single twitter app ever made. They are all free, with no viable business plan, besides hoping that huge amount of traffic will somehow make the millionaires.&lt;/p&gt;&lt;p&gt;How long do they plan to live of venture capital funding, before being sold to a clueless media company or go bankrupt? Doesn't this remind you of the good old dot.com days?&lt;/p&gt;&lt;img src="http://www.baekdal.com/media/content/2010/nomoney5.jpg" alt=""&gt;&lt;p&gt;The other and much bigger problem is when the money part doesn't cover the expenses of running the free part. This is currently the biggest issue for newspapers. For traditional media companies like the New York Times, advertising online doesn't cover the cost of writing the articles. &lt;/p&gt;&lt;p&gt;Seesmic got the same problem. Their business model is to build huge amount of traffic, then introduce advertising, and make billions - or so they hope. But, because the market they are in is so crowded, the second they put advertising into their product, people will simple use another Twitter client. &lt;/p&gt;&lt;p&gt;It is a recipe for failure. &lt;/p&gt;&lt;h2&gt;The coming battle&lt;/h2&gt;&lt;p&gt;There is a war coming, and it will be nasty ...and the best thing that ever happened. &lt;/p&gt;&lt;p&gt;The war is about companies realizing that the internet is now their primary business, their primary communication channel, and their primary sales channel. And it has to make to make a profit, otherwise, they are sunk!&lt;/p&gt;&lt;p&gt;It is the war against the "everything must be free" culture, and it is won by the ones who create something worth paying for. &lt;/p&gt;&lt;p&gt;It is not about traditional companies trying to go back to the way it was (they are merely a distraction). It is not about advertising. And it is not about getting people to cover the cost of print.&lt;/p&gt;&lt;p&gt;It is about giving people a salad that is so good, that they will upgrade it to get a premium meal to go with it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- &lt;a href="http://www.baekdal.com/articles/management/where/#comments"&gt;Read Comments&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.baekdal.com/media/articles/link/"&gt;&lt;img src="http://www.baekdal.com/media/articles/img/also.jpg" alt=""&gt;&lt;/a&gt;&lt;img src="https://www.assoc-amazon.com/e/ir?t=baekdalcom0a-20&amp;amp;l=ur2&amp;amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important;margin:0px !important"&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=v22Bl6Sj6LE:vkn6kXUaaWk: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=v22Bl6Sj6LE:vkn6kXUaaWk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=v22Bl6Sj6LE:vkn6kXUaaWk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/v22Bl6Sj6LE" height="1" width="1"/&gt;</content><author><name>Thomas Baekdal</name></author><gr:likingUser>17610512600896758875</gr:likingUser><gr:likingUser>14184807404796269368</gr:likingUser><gr:likingUser>06739040197717624728</gr:likingUser><gr:likingUser>14921596037366399952</gr:likingUser><gr:likingUser>09276125534007403032</gr:likingUser><gr:likingUser>17451073651346637731</gr:likingUser><gr:likingUser>09786939547951682134</gr:likingUser><gr:likingUser>08339321115464910932</gr:likingUser><gr:likingUser>08017499076804425868</gr:likingUser><gr:likingUser>09205146588661341717</gr:likingUser><gr:likingUser>09247255364191993226</gr:likingUser><gr:likingUser>01530348096082271476</gr:likingUser><gr:likingUser>04461309954051413968</gr:likingUser><gr:likingUser>17627007183890174104</gr:likingUser><source gr:stream-id="feed/http://www.baekdal.com/myfeed/"><id>tag:google.com,2005:reader/feed/http://www.baekdal.com/myfeed/</id><title type="html">Baekdal.com</title><link rel="alternate" href="http://www.baekdal.com" type="text/html" /></source><feedburner:origLink>http://www.baekdal.com/articles/management/where/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1265937056023"><id gr:original-id="tag:typepad.com,2003:post-6a00e008c4515188340120a86d432e970b">tag:google.com,2005:reader/item/6f830ae7db4720aa</id><category term="advocacy" scheme="http://www.sixapart.com/ns/types#category" /><category term="consumer target" scheme="http://www.sixapart.com/ns/types#category" /><category term="marketing clutter" scheme="http://www.sixapart.com/ns/types#category" /><category term="sharing ideas" scheme="http://www.sixapart.com/ns/types#category" /><title type="html">influencer stalking</title><published>2010-02-07T16:32:19Z</published><updated>2010-02-07T16:32:19Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/sGztocsQcxU/influencer-stalking.html" type="text/html" /><link rel="replies" href="http://www.tomfishburne.com/tomfishburne/2010/02/influencer-stalking.html" type="text/html" /><content xml:base="http://www.tomfishburne.com/tomfishburne/" xml:lang="en-US" type="html">&lt;div&gt;&lt;p&gt;&lt;a href="http://www.tomfishburne.com/.a/6a00e008c4515188340128776fa7bc970c-popup" style="display:inline"&gt;&lt;img alt="100208.influencer" src="http://www.tomfishburne.com/.a/6a00e008c4515188340128776fa7bc970c-450wi" style="width:450px"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I doubt there&amp;#39;s a marketing plan in the world nowadays without some form of influencer marketing focus.  Reaching influencers is part of every agency pitch. With mainstream media becoming less effective over time and widespread recognition that influencers play a big role in buying decisions, the influencer hunt is on.&lt;/p&gt;

&lt;p&gt;The challenge is how to do it right.  How do you identify who is really an influencer?  How do you reach them?  And with everyone else targeting influencers, how do you break through the clutter?&lt;/p&gt;

&lt;p&gt;Many brands apply the same heavy-handed approach to influencer marketing that they do with mainstream marketing.  They shout.  &lt;/p&gt;

&lt;p&gt;Somehow I ended up on agency influencer lists this last year, and I now receive dozens of emails a week, asking me to write about some piece of news or another. Aside from the fact that these emails are unsolicited, they are usually badly targeted, often lacking any news that is even moderately relevant to what I cover.  The other problem is that they usually arrive in an impersonal press release format with &amp;quot;for immediate release&amp;quot; marked at the top. One recent note was addressed to &amp;quot;Dear &amp;lt;first name&amp;gt; &amp;lt;last name&amp;gt;&amp;quot; because their email mail merge didn&amp;#39;t work.&lt;/p&gt;

&lt;p&gt;It&amp;#39;s a common pitfall to assume that influencer marketing is just the same old marketing, only targeted more finely. If whatever you&amp;#39;re trying to share is mediocre from the start, it&amp;#39;s simply not going to spread, no matter how loudly you shout it or how many people you put on your shouting list. It doesn&amp;#39;t matter if they&amp;#39;re influential or not.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.tomfishburne.com/.a/6a00e008c4515188340120a86df254970b-pi" style="float:right"&gt;&lt;img alt="Wine" border="0" src="http://www.tomfishburne.com/.a/6a00e008c4515188340120a86df254970b-800wi" style="margin:0px 0px 5px 5px" title="Wine"&gt;&lt;/a&gt;One of my favorite (albeit 5-year old) examples of a bootstrapped influencer marketing program is the Stormhoek winery &lt;a href="http://gapingvoid.com/2005/12/29/blogging-doubled-stormhoek-sales-in-less-than-twelve-months/"&gt;100 Blogging Dinners in 100 Days&lt;/a&gt;, developed by Hugh MacLeod. The winery credits this event for doubling their sales in 12 months. They sent out a free pre-release bottle of wine to any blogger who was interested (with no obligation to write about it), along with a &lt;a href="javascript:void(0);"&gt;great manifesto&lt;/a&gt; about wine and blogging.  It didn&amp;#39;t shout.  It started an intriguing conversation and talked to bloggers as people, not as press contacts or direct marketing targets.  &lt;/p&gt;

&lt;p&gt;I like this quote from Hugh after the event: &amp;quot;Blogging as a marketing tool is easier when you think of it as a chemical catalyst, not as a hammer and nail.&amp;quot;  I think that &amp;quot;chemical catalyst&amp;quot; is a good description of influencer marketing in general too.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=sGztocsQcxU:XQGL7tjiy2o: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=sGztocsQcxU:XQGL7tjiy2o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=sGztocsQcxU:XQGL7tjiy2o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/sGztocsQcxU" height="1" width="1"/&gt;</content><author><name>Tom Fishburne</name></author><gr:likingUser>05804951629430549523</gr:likingUser><gr:likingUser>07172321225682751161</gr:likingUser><gr:likingUser>07625897669251837773</gr:likingUser><gr:likingUser>00013493085127312859</gr:likingUser><gr:likingUser>11062381894370218926</gr:likingUser><source gr:stream-id="feed/http://www.tomfishburne.com/tomfishburne/atom.xml"><id>tag:google.com,2005:reader/feed/http://www.tomfishburne.com/tomfishburne/atom.xml</id><title type="html">Tom Fishburne: this one time at Brand Camp</title><link rel="alternate" href="http://www.tomfishburne.com/tomfishburne/" type="text/html" /></source><feedburner:origLink>http://www.tomfishburne.com/tomfishburne/2010/02/influencer-stalking.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1265808859743"><id gr:original-id="http://blog.matthew.org.pl/2010/02/10/jakiego-jezyka-programowania-sie-nauczyc/">tag:google.com,2005:reader/item/ab85c8bcb0cd1e0f</id><category term="programowanie" label="Programowanie" /><category term="techblog" label="Techblog" /><title type="html">Jakiego języka programowania się nauczyć?</title><published>2010-02-10T00:37:53Z</published><updated>2010-02-10T00:37:53Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/ZqggPNzEDrc/" type="text/html" /><content xml:base="http://blog.matthew.org.pl/" type="html">Ostatnio coraz częściej spotykam się z pytaniem osób, które chcą się nauczyć programować, jakiego języka warto się nauczyć pod kątem przyszłego rynku pracy. Czy jeżeli nauczę się języka X to będą miał pracę? Co lepiej, Y czy Z, żeby dużo zarabiać? I tego typu różne...&lt;img src="http://feeds.feedburner.com/~r/blogmattheworgpl/~4/6j9NlL2AMZk" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=ZqggPNzEDrc:UpQd3ggPVtA: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=ZqggPNzEDrc:UpQd3ggPVtA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=ZqggPNzEDrc:UpQd3ggPVtA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/ZqggPNzEDrc" height="1" width="1"/&gt;</content><author gr:unknown-author="true"><name>(author unknown)</name></author><gr:likingUser>13900666331081904919</gr:likingUser><source gr:stream-id="feed/http://feeds2.feedburner.com/blogmattheworgpl"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/blogmattheworgpl</id><title type="html">Matthew</title><link rel="alternate" href="http://blog.matthew.org.pl/" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/blogmattheworgpl/~3/6j9NlL2AMZk/</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1265795465088"><id gr:original-id="http://pfg.blox.pl/2010/02/Minister-Ernst-Young.html">tag:google.com,2005:reader/item/1e1cf33451e23e07</id><category term="Edukacja" /><title type="html">Minister, Ernst &amp;amp; Young</title><published>2010-02-06T21:33:10Z</published><updated>2010-02-06T21:33:10Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/2pkbvJK1NDw/Minister-Ernst-Young.html" type="text/html" /><author><name>pfg@NOSPAM.gazeta.pl</name></author><source gr:stream-id="feed/http://pfg.blox.pl/rss2"><id>tag:google.com,2005:reader/feed/http://pfg.blox.pl/rss2</id><title type="html">Komentarze fizyka</title><link rel="alternate" href="http://pfg.blox.pl/html" type="text/html" /></source><content type="html" xml:base="http://pfg.blox.pl/html">&lt;p style="text-align:justify"&gt; Ministerstwo Nauki i Szkolnictwa Wyższego ogłosiło wczoraj &lt;a href="http://www.uczelnie2020.pl/docs/file/SSW2020_strategia.pdf"&gt; Strategię Rozwoju Szkolnictwa Wyższego w Polsce do roku 2020 &lt;/a&gt; . Strategię , na zlecenie Ministerstwa, opracowała firma doradcza Ernst &amp;amp; Young, za &lt;a href="http://www.naukawpolsce.pap.pl/palio/html.run?_Instance=cms_naukapl.pap.pl&amp;amp;_PageID=1&amp;amp;s=szablon.depesza&amp;amp;dz=REFORMANAUKI&amp;amp;dep=362491&amp;amp;data=&amp;amp;lang=PL&amp;amp;_CheckSum=-78428357"&gt; 1,7 mln złotych &lt;/a&gt; . Dokument ten, omawiany już na wielu forach, zawiera szereg rekomendacji. Część z nich jest lepsza, część gorsza, ale kilka budzi mój sprzeciw: &lt;/p&gt;&#xD;
&lt;ul style="text-align:justify"&gt;&#xD;
&lt;li style="text-align:justify"&gt; Zakaz zatrudniania własnych doktorów.  Uczelnie publiczne przez dwa lata nie będą mogły zatrudniać osób, które uzyskały na nich doktorat. Ma to wyeliminować "chów wsobny" tudzież wymusić mobilność. Mobilność  to słowo-klucz. Nie możesz być dobrym naukowcem, jeśli nie otarłeś się o inne uczelnie. To prawda, tak to działa na przykład w Ameryce, ale autorzy Strategii  nie wzięli pod uwagę ograniczeń, warunków brzegowych. Gdzie i za co młody doktor miałby się przeprowadzić? Za co wynająć mieszkanie, gdy pensja młodego doktora nie wystarcza na wynajęcie czegoś w dużym mieście po cenach rynkowych? Co ze współmałżonkiem doktora? W Polsce społeczeństwo w ogóle jest mniej mobilne, niż w Ameryce, wyjazd do innego miasta za pracą - i to nie ze wsi, ale z miasta uniwersyteckiego! - jest nam kulturowo obcy. W porządku, być może trzeba to zmienić, uczelnie powinny być otwarte na osoby z zewnątrz, ale nie sądzę, żeby administracyjny nakaz był najlepszą metodą. Duże dyscypliny, uprawiane na wielu uczelniach, szybko znajdą sposób na obchodzenie zakazu: nasz doktorant formalnie będzie się bronił w Instytucie Fizyki Jądrowej, na AGH lub w Katowicach, doktorant z Katowic u nas. Przecież nie ma prawnego obowiązku bronienia się na uczelni, na której odbywało się studia. A jeśli takiej możliwości nie będzie, młodzi doktorzy mogą zostać zmuszeni do porzucenia dalszej kariery akademickiej. &lt;/li&gt;&#xD;
&lt;li style="text-align:justify"&gt; Kandydat na profesora musi przepracować łącznie co najmniej trzy lata poza własną uczelnią.  Znów, w teorii pomysł jest znakomity, przyszły profesor musi mieć obycie w świecie, musi zetknąć się z innymi projektami i inną kulturą naukową, musi wystawić się na krytykę "obcych". Ach, żeby tylko pani minister mogła administracyjnie zapewnić miejsca pracy dla kandydatów na profesorów! W rzeczywistości może dojść do tego, że klasyczny wieloetatowiec będzie spełniać ten warunek - przecież pracował poza swoją uczelnią - podobnie jak osoba, która nigdzie długo nie zagrzała miejsca, i to niekoniecznie  ze względu na ciekawość intelektualną pchającą ją do nowych wyzwań, a ktoś, kto pracował w jednym miejscu, nawet na światowym poziomie, będzie bez szans. Albo kandydat na profesora będzie musiał pogodzić się z czasowym spadkiem dochodów i prestiżu, popracować pewien czas w gorszej uczelni. Czego on się tam nauczy? I czy będzie miał gdzie pracować, bo przecież Strategia  zakłada konsolidację i likwidację małych uczelni, także ze względów demograficznych. Oj, chyba nie zostanę profesorem. O tym, czy ktoś na stanowisko profesora zasługuje, powinny decydować nie formalne kryteria administracyjne, ale uzyskane wyniki - publikacje, zaproszone wykłady na konferencjach. (Oj, chyba nie zostanę profesorem.) Strategią obronną będzie mianowanie na stanowiska profesorów podwórkowych, pardon, uczelnianych, wszystkich doktorów habilitowanych tuż przed wejściem reformy w życie. Obawiam się, że oba te sposoby na administracyjne wymuszenie mobilności będą w wielu wypadkach działać raczej zniechęcająco niż mobilizująco. &lt;/li&gt;&#xD;
&lt;li style="text-align:justify"&gt; Zakaz wieloetatowości  - pracownik uczelni akademickiej będzie mógł poza własną uczelnią pracować co najwyżej na pół etatu. Dotyczyć ma to też działalności gospodarczej. Świetny pomysł, który mnie zresztą powinien być obojętny - fizyków nikt nie potrzebuje, więc ich na drugim itd etacie nie zatrudnia. Takie obostrzenia są zrozumiałe, o ile prestiż i wynagrodzenie pracownika uczelni są na tyle duże, żeby rekompensować utratę potencjalnych zarobków gdzie indziej. Tymczasem na sama strategia zakłada, że do roku 2020 realne wynagrodzenia pracowników uczelni mają wzrosnąć o 30%. To zbyt mało. Ha, już widzę naszych licznych profesorów prawa ( nomina sunt odiosa ), którzy porzucają swoje kancelarie adwokackie, żeby móc pozostać na uczelni. Podobnie pracowników wydziałów medycznych, porzucających swoje gabinety. Nawiasem mówiąc, pracownicy wydziałów medycznych bardzo często mają tylko cząstkę etatu akademickiego, w ramach którego uczą i prowadzą badania naukowe, oraz cały, lub też jakiś ułamek, etatu z PSK, w ramach którego leczą ludzi. Czy teraz będą musieli przestać leczyć, czy też będą leczyć za darmo? Czy wysoko opłacanym specjalistom z E&amp;amp;Y w ogóle to przyszło do głowy? &lt;/li&gt;&#xD;
&lt;li style="text-align:justify"&gt; Likwidacja stypendiów naukowych.  Środki przeznaczane obecnie na stypendia naukowe pójdą na zwiększenie liczby i wysokości stypendiów socjalnych, aby zwiększyć dostępność darmowych studiów. Stypendia mają być przyznawane nie przez uczelnie, ale przez Ośrodki Pomocy Społecznej. Ubóstwo nie powinno być barierą do studiowania, powinny być liczne programy stypendialne wspierające niezamożnych, ale zdolnych studentów. No właśnie, zdolnych. Po wejściu w życie ministerialnych propozycji takie samo wsparcie otrzyma student biedny, ale zdolny i pracowity, jak i biedny leniwy kombinator, któremu zależy tylko na tym, żeby utrzymać się na studiach, bo dzięki temu dostaje stypendium. To jest po prostu głupie. I jak ma się to do deklarowanego celu, jakim ma być podniesienie i poziomu wykształcenia, i jakości badań? Ano, nijak. &lt;/li&gt;&#xD;
&lt;li style="text-align:justify"&gt; Ostateczna likwidacja jednolitych studiów magisterskich.  Tak zwany "proces boloński", podział studiów na studia I i II stopnia, uznanie studiów doktoranckich za studia III stopnia, to katastrofa, zupełnie nieprzystająca do polskich warunków i tradycji (pracodawcy osoby z samym licencjatem traktują jak ludzi z niepełnym wykształceniem!), ale OK, jakoś sobie z tym radzimy. Ale teraz co, będzie licencjat z prawa? Licencjat z medycyny?! Przywracamy zawód felczera? &lt;/li&gt;&#xD;
&lt;li style="text-align:justify"&gt; Wprowadzenie kategorii uczelni badawczej .  Uczelnia badawcza ma prowadzić badania, zatrudniać personel pod kątem ich pozycji naukowej, nie zaś potrzeb dydaktycznych, ma obowiązek prowadzić studia III stopnia i może prowadzić studia I i II stopnia, na uczelni badawczej na jednego pracownika naukowego ma przypadać mniej studentów, niż na uczelni akademickiej. Jak rozumiem, mają się z tym łączyć większe pieniądze na badania. Nie wiem, jakie będą szczegółowe kryteria, ale jeśli mały stosunek liczby studentów do pracowników potraktować literalnie jako wymóg, wielkie uczelnie - Uniwersytet Warszawski, Jagielloński i inne czołowe uniwersytety - prowadzące masowe, popularne kierunki studiów, nie będą mogły stać się uczelniami badawczymi. Za to instytuty naukowe, które prowadzą studia doktoranckie, będą mogły formalnie zjednoczyć się w uniwersytet, uzyskać status uniwersytetu badawczego i spić całą śmietankę. Kudrycka jako eksponent lobby instytutów naukowych? &lt;/li&gt;&#xD;
&lt;li style="text-align:justify"&gt; Zwiększenie kontroli ministra nad uczelniami państwowymi.  Tak, duże uczelnie państwowe są źle zarządzane, ale pomysł, że scentralizowana kontrola jest najlepszym remedium, to jest etatystyczna aberracja. Uczelnie, także państwowe, będą mogły upadać (w sensie prawa upadłościowego). Czy to ma oznaczać, że uczelnie staną się przedsiębiorstwami nastawionymi na zysk? W ogóle różnica pomiędzy uczelniami państwowymi a prywatnymi zaciera się - tyle, że uczelnie prywatne będą miały większą autonomię, niż państwowe. Minister Kudrycka jednak jest  eksponentem interesów uczelni prywatnych. &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p style="text-align:justify"&gt; Jednocześnie pani minister Kudrycka opublikowała &lt;a href="http://wyborcza.pl/1,75515,7531221,Wyzsza_Szkola_Dumy.html"&gt; artykuł &lt;/a&gt; , w którym zachwala swoją strategię. Artykuł jest cukierkowo niekonkretny, pełno w nim haseł, pobożnych życzeń, ale żadnych gwarancji. I jeszcze te stereotypy: Natalia - kobieta -  to "dociekliwa humanistka", która "skoncentruje się na psychologii społecznej [...] i intensywnej nauce języków obcych", Wojtek - mężczyzna - to "umysł ścisły i praktyczny", który wobec tego pójdzie na politechnikę. Mnie zaś uderza wizja pani minister: uniwersytety to humanistyka, kierunki ścisłe to politechnika, która "musi zbliżyć swoją ofertę dydaktyczną do oczekiwań przedsiębiorców", są jeszcze wyższe szkoły zawodowe.  A gdzie badania podstawowe , od matematyki po biologię? W wizji pani minister najwyraźniej nie ma na nie miejsca. &lt;/p&gt;&#xD;
&lt;p style="text-align:justify"&gt; Mam nadzieję, że ten projekt reform nie wejdzie w życie. &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=2pkbvJK1NDw:DQ3gGMm7eUw: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=2pkbvJK1NDw:DQ3gGMm7eUw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=2pkbvJK1NDw:DQ3gGMm7eUw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/2pkbvJK1NDw" height="1" width="1"/&gt;</content><feedburner:origLink>http://pfg.blox.pl/2010/02/Minister-Ernst-Young.html</feedburner:origLink></entry><entry gr:crawl-timestamp-msec="1265646858469"><id gr:original-id="http://www.whatmakesthemclick.net/?p=437">tag:google.com,2005:reader/item/6e8f3c0a929ebd6f</id><category term="attention" /><category term="eye tracking" /><category term="research" /><title type="html">100 Things You Should Know About People: #18 — What People Look At On a Picture Or Screen Depends On What You Say To Them</title><published>2009-12-11T22:21:03Z</published><updated>2009-12-11T22:21:03Z</updated><link rel="alternate" href="http://feeds.mekk.waw.pl/~r/WylowioneZCzytnika/~3/3YconvhPk4U/" type="text/html" /><content xml:base="http://www.whatmakesthemclick.net/" type="html">&lt;div style="float:right;margin-left:10px"&gt;&lt;a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.whatmakesthemclick.net%2F2009%2F12%2F11%2F100-things-you-should-know-about-people-18-what-people-look-at-on-a-picture-or-screen-depends-on-what-you-say-to-them%2F"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.whatmakesthemclick.net%2F2009%2F12%2F11%2F100-things-you-should-know-about-people-18-what-people-look-at-on-a-picture-or-screen-depends-on-what-you-say-to-them%2F" height="61" width="51"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="width:250px"&gt;&lt;img src="http://www.whatmakesthemclick.net/wp-content/uploads/2009/12/etSlide-1.jpeg" alt="Yarbus Eye Tracking Picture" width="240" height="223"&gt;&lt;p&gt;Yarbus Eye Tracking Picture&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;Eye tracking is a technology that allows you to see and record what a person is looking at, and for how long. One way it is used is to study web sites to see where people are looking on a web page, where they look first, second, etc. It’s a pretty interesting technology, one of the benefits being that you don’t have to rely on what people SAY they are looking at, but can collect the data directly. Like any technology, however, it’s not perfect, and one of the problems with eye tracking is that you can’t just give people a web site to look at and then assume that where they look is what they are “really interested” in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We underestimate the effect our instructions have on where someone looks.&lt;/strong&gt; Look at the picture at the beginning of this post. In research by Yarbus, people were shown this picture, and then given different instructions of what to think about while looking at the picture. Below are the eye gaze patterns matched with the instructions that people were given:&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title="Slide03" src="http://www.whatmakesthemclick.net/wp-content/uploads/2009/12/Slide031.jpg" alt="Slide03" width="720" height="540"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img title="Slide04" src="http://www.whatmakesthemclick.net/wp-content/uploads/2009/12/Slide04.jpg" alt="Slide04" width="720" height="540"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proceed with caution.&lt;/strong&gt; To me this data says: a) If you are using eye tracking as a technique to evaluate how people are using your website then you must be very careful about the instructions you give, and you must make sure you are giving everyone the exact same instructions. b) You can’t assume that just because people look at one spot on your website when they first see it that they will always look there. It might depend on what they were coming back to do. c) It’s nice to have a measure that doesn’t rely on what the user says or how they think they are reacting, but even these “objective” measures aren’t as objective as we think!&lt;/p&gt;
&lt;p&gt;This research is from way back, but I believe it is still relevant. I haven’t found any recent replication of it yet. If you know of any please do pass on the reference:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style="margin-top:4.32pt;margin-bottom:4.32pt;text-align:left;direction:ltr;vertical-align:baseline"&gt;&lt;span style="font-family:Verdana;color:black"&gt;Yarbus&lt;/span&gt;&lt;span style="font-family:Verdana;color:black"&gt;, A. L. (1967). &lt;/span&gt;&lt;span style="font-family:Verdana;color:black;font-style:italic"&gt;Eye Movements and Vision&lt;/span&gt;&lt;span style="font-family:Verdana;color:black"&gt; (B. &lt;/span&gt;&lt;span style="font-family:Verdana;color:black"&gt;Haigh&lt;/span&gt;&lt;span style="font-family:Verdana;color:black"&gt;, trans.), New York: Plenum&lt;/span&gt;&lt;span style="font-size:16pt;font-family:Verdana;color:black"&gt; &lt;/span&gt;&lt;span style="font-size:16pt;font-family:Arial;color:black"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;——————————————-&lt;/p&gt;
&lt;p&gt;Did you find this post interesting? If you did, please consider adding your comment, subscribing to the blog via RSS or email, signing up for the Brain Lady newsletter, and/or sharing the post.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/whatmakesthemclick/Flnp/~4/wfbi6ThaJzA" height="1" width="1"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.mekk.waw.pl/~ff/WylowioneZCzytnika?a=3YconvhPk4U:R8LQV2Lqya8: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=3YconvhPk4U:R8LQV2Lqya8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/WylowioneZCzytnika?i=3YconvhPk4U:R8LQV2Lqya8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/WylowioneZCzytnika/~4/3YconvhPk4U" height="1" width="1"/&gt;</content><author><name>Susan Weinschenk</name></author><source gr:stream-id="feed/http://whatmakesthemclick.blogspot.com/feeds/posts/default"><id>tag:google.com,2005:reader/feed/http://whatmakesthemclick.blogspot.com/feeds/posts/default</id><title type="html">What Makes Them Click</title><link rel="alternate" href="http://www.whatmakesthemclick.net" type="text/html" /></source><feedburner:origLink>http://feedproxy.google.com/~r/whatmakesthemclick/Flnp/~3/wfbi6ThaJzA/</feedburner:origLink></entry></feed>
