<?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.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0ICRH06eCp7ImA9WhFTF0w.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656</id><updated>2013-06-08T20:19:25.310+02:00</updated><category term="mobile" /><category term="logcat" /><category term="gallery" /><category term="MacBook" /><category term="media" /><category term="Software Engineering" /><category term="Technology" /><category term="sd-card" /><category term="Machine Learning" /><category term="mock" /><category term="UI" /><category term="Tutorial" /><category term="Apple" /><category term="Future" /><category term="HTTP" /><category term="Psychology" /><category term="Steve Jobs" /><category term="Symbolic Links" /><category term="click listener" /><category term="Audio" /><category term="shell" /><category term="Shopping" /><category term="shortcuts" /><category term="resource" /><category term="Mac OS X" /><category term="Marketing" /><category term="layout" /><category term="rfkill" /><category term="iOS" /><category term="mklink" /><category term="JSON" /><category term="Android" /><category term="Google I/O" /><category term="Visual Life" /><category term="Facebook" /><category term="Cloud" /><category term="HTML5" /><category term="Windows 7" /><category term="ListView" /><category term="debug" /><category term="Go" /><category term="enum" /><category term="UxD" /><category term="quick and dirty" /><category term="java" /><category term="Rapid Prototyping" /><category term="Fonts" /><category term="UX" /><category term="Server" /><category term="Design" /><category term="bookmarks" /><category term="bash" /><category term="Command" /><category term="source" /><category term="Interfaces" /><category term="Google Chrome" /><category term="Junction Points" /><category term="reload settings" /><category term="Firefox" /><category term="iPhone" /><category term="Linux" /><category term="Eclipse" /><category term="zsh" /><category term="Swype" /><category term="GPS" /><category term="iPad" /><category term="Education" /><category term="Intel" /><category term="WiFi" /><title>GEEK!mind</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.geekmind.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.geekmind.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/geekmind" /><feedburner:info uri="geekmind" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DEAGQHo6fyp7ImA9WhFTFUQ.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-3840976774243728423</id><published>2013-05-21T17:31:00.000+02:00</published><updated>2013-06-07T11:18:41.417+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-07T11:18:41.417+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="Go" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Google I/O" /><title>Google I/O 2013 Recommended Sessions</title><content type="html">&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333265959"&gt;Cloud Platform Track Kickoff: Ushering in the Next Generation of Cloud Computing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333117643"&gt;What's New and Cool with Google Compute Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/364746894"&gt;7 Techmakers and a Microphone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333519914"&gt;High Performance Apps with Go on App Engine&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/332768653"&gt;Advanced Go Concurrency Patterns&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;check out &lt;a href="https://www.youtube.com/watch?feature=player_embedded&amp;amp;v=f6kdp27TYZs"&gt;Go Concurreny Patterns&lt;/a&gt;&amp;nbsp;(Google I/O 2012)&amp;nbsp;beforehand&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/332695704"&gt;Fireside Chat with the Glass Team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/326336563"&gt;Real-time communication with WebRTC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/326460111"&gt;Cognitive Science and Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Additional list of talks that sound interesting, but haven't seen them myself, yet.&lt;/h2&gt;
&lt;i&gt;(WARING: some talks might be interesting, but the speakers are terrible, which makes it impossible to follow.)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Android Track&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/324603352"&gt;What's New in Android Developer Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/325304728"&gt;Volley: Easy, Fast Networking for Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/325615129"&gt;Writing Custom Views for Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/326454327"&gt;Android Protips: Making Apps Work Like Magic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/324893448"&gt;Google Cloud Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/325337477"&gt;Beyond the Blue Dot: New Features in Android Location&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/326368573"&gt;Enchant, Simplify, Amaze: Android's Design Principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/326483138"&gt;Agile UX Research Practice in Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/326431311"&gt;A Moving Experience (Android Animations)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/325172829"&gt;When Android Meets Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Chrome Track&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/325586817"&gt;Mobile HTML: The Future of Your Sites&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/327928222"&gt;Extend Google Docs with Apps Script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Cloud Track&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333276583"&gt;Autoscaling Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/350753683"&gt;Supercharge Your Google Compute Engine App with Persistent Disk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333138978"&gt;Speed, Efficiency, and Control: Advanced Packet Routing Techniques in a Google Compute Engine Network&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333103712"&gt;Big Data Mashups: Enabling Next Generation Analytics Using BigQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/333361785"&gt;Here Be BigQuery: Building Social Gaming Infrastructure on the Google Cloud Platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Others&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/382968729"&gt;Ingress: Design Principles Behind Google's Massively Multiplayer Geo Game&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/332733833"&gt;Building Glass Services with the Google Mirror API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/events/io/sessions/467453230"&gt;An Engineer's Pragmatic Guide to Design&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/kMlaMonUtio" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/3840976774243728423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2013/05/google-io-2013-recommended-sessions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/3840976774243728423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/3840976774243728423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/kMlaMonUtio/google-io-2013-recommended-sessions.html" title="Google I/O 2013 Recommended Sessions" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2013/05/google-io-2013-recommended-sessions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MCQHc6fyp7ImA9WhJbE0Q.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-505159883518468388</id><published>2012-09-23T13:21:00.000+02:00</published><updated>2012-09-23T13:24:21.917+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-23T13:24:21.917+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>iOS: Reversing a NSArray</title><content type="html">You can reverse a NSArray by writing your own loop iterating from the end towards the beginning and using a second array to add the items in reverse order.&lt;br /&gt;
&lt;br /&gt;
Or you can simply use&amp;nbsp;&lt;i&gt;&lt;span style="color: #f9cb9c;"&gt;- (NSEnumerator *)reverseObjectEnumerator&amp;nbsp;&lt;/span&gt;&lt;/i&gt; from the &lt;a href="https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html"&gt;NSArray&lt;/a&gt; class.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
NSArray *sortedArray = [....]&lt;br /&gt;
NSArray *reversedArray = [[sortedArray &lt;span style="color: #f9cb9c;"&gt;reverseObjectEnumerator&lt;/span&gt;] allObjects];&lt;/blockquote&gt;
&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/amNGFWcVzws" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/505159883518468388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/09/reversing-nsarray.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/505159883518468388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/505159883518468388?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/amNGFWcVzws/reversing-nsarray.html" title="iOS: Reversing a NSArray" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/09/reversing-nsarray.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8ERH0_fyp7ImA9WhJbE0s.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-5528894989893603630</id><published>2012-09-22T16:55:00.000+02:00</published><updated>2012-09-23T03:13:25.347+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-23T03:13:25.347+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Education" /><title>How to rescue Spain</title><content type="html">&lt;blockquote class="tr_bq"&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="color: #f9cb9c;"&gt;Stop complaining&lt;/span&gt; about the government* and banks**. Get your own ass up! Take responsibility for yourself and the world around you.&lt;/li&gt;
&lt;li&gt;Learn proper &lt;span style="color: #f9cb9c;"&gt;English&lt;/span&gt;. English is the world's collective language (at least for now). Doesn't matter if you like it or not. That's just the way it is. Adapt to it or fall behind.&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #f9cb9c;"&gt;Learn something&lt;/span&gt; that actually matters and &lt;span style="color: #f9cb9c;"&gt;practice&lt;/span&gt; it.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;span style="font-size: x-small;"&gt;* &lt;i&gt;"Every nation gets the government it deserves."&lt;/i&gt; ~&amp;nbsp;&lt;a href="http://en.wikiquote.org/wiki/Joseph_de_Maistre" target="_blank"&gt;Joseph de Maistre&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;** &lt;i&gt;&lt;a href="http://www.youtube.com/watch?v=XBmJay_qdNc" target="_blank"&gt;The Truth About Dishonesty&lt;/a&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some starters:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.class-central.com/" target="_blank"&gt;Class Central&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.khanacademy.org/" target="_blank"&gt;Khan Academy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.academicearth.org/" target="_blank"&gt;Academic Earth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;
When you're done with that, ping me.&amp;nbsp;&lt;a href="http://mobilejazz.cat/#contact" target="_blank"&gt;I might have a job for you&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/utdTe4Jn6o8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/5528894989893603630/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/09/how-to-rescue-spain.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5528894989893603630?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5528894989893603630?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/utdTe4Jn6o8/how-to-rescue-spain.html" title="How to rescue Spain" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/09/how-to-rescue-spain.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8CQX06fCp7ImA9WhJVE08.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-9008446205187857834</id><published>2012-08-30T12:34:00.000+02:00</published><updated>2012-08-30T12:34:20.314+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-30T12:34:20.314+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>iOS: Displaying "Back" on the back button instead of the title of the previous UIViewController</title><content type="html">The back button typically shows the title of the previous UIViewController, unless it's empty. However, sometimes you don't want to show the title of the previous. Sometimes you have a title that just doesn't make sense to show on the back button.&lt;br /&gt;
&lt;br /&gt;
The easy option is to simply set the back button title yourself to @"Back" with the caveat that it will always be English, no matter what the device's configured language is. The better solution is to temporarily remove the title in the previous UIViewController and re-set it when returning.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&lt;pre&gt;-(void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];
 &lt;span style="color: #f9cb9c;"&gt;self.title = @"My title";&lt;/span&gt;
}
-(void)viewWillDisappear:(BOOL)animated
{
 &lt;span style="color: #f9cb9c;"&gt;self.title = nil;&lt;/span&gt;
 [super viewWillDisappear:animated];
}&lt;/pre&gt;&lt;/blockquote&gt;This way iOS will automatically set the title to "Back" or to the equivalent for whatever language is configured for the device.&lt;br /&gt;
&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/n7H8c-H0p0k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/9008446205187857834/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/08/ios-displaying-back-on-back-button.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/9008446205187857834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/9008446205187857834?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/n7H8c-H0p0k/ios-displaying-back-on-back-button.html" title="iOS: Displaying &quot;Back&quot; on the back button instead of the title of the previous UIViewController" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/08/ios-displaying-back-on-back-button.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUINRXg6eip7ImA9WhJXE04.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-2393765893443583915</id><published>2012-08-07T13:01:00.000+02:00</published><updated>2012-08-07T13:06:34.612+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-07T13:06:34.612+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>iOS: Facebook SDK 3.0 (beta) - access user's information</title><content type="html">The new Facebook SDK for iOS has a&amp;nbsp;convenient&amp;nbsp;way to access user information via the &lt;a href="https://developers.facebook.com/docs/sdk-reference/iossdk/3.0/protocol/FBGraphUser/" target="_blank"&gt;FBGraphUser protocol&lt;/a&gt;&amp;nbsp;in a nice "dot-syntax" manner. However, because the FBGraphUser protocol doesn't have an email @property, we can't access all the information like we do with the name (see example below). Nevertheless, as with the previous SDK, the NSDictionary still contains the email kv-pair and other user information, which is not populated via the FBGraphUser protocol and we can access it like we would have done it with a normal NSDictionary (since it still is just a normal NSDictionary).&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
if (FBSession.activeSession.isOpen) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary&lt;fbgraphuser&gt; *user, NSError *error) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!error) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.nameLabel.text = &lt;span style="color: #f9cb9c;"&gt;user.name;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.emailLabel.text = &lt;span style="color: #f9cb9c;"&gt;[user objectForKey:@"email"];&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;}];&lt;br /&gt;
}&lt;/fbgraphuser&gt;&lt;/blockquote&gt;
Also, don't forget to ask for the email &lt;a href="https://developers.facebook.com/docs/authentication/permissions/" target="_blank"&gt;permission&lt;/a&gt; when opening the FB session:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
NSArray *permissions = [[NSArray alloc] initWithObjects:&lt;span style="color: #f9cb9c;"&gt;@"email"&lt;/span&gt;, nil];&lt;br /&gt;
[FBSession sessionOpenWithPermissions:&lt;span style="color: #f9cb9c;"&gt;permissions&lt;/span&gt; completionHandler:&lt;br /&gt;
&amp;nbsp;^(FBSession *session, FBSessionState state, NSError *error) {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;[self facebookSessionStateChanged:session state:state error:error];&lt;br /&gt;
&amp;nbsp;}];&lt;/blockquote&gt;
Source: &lt;a href="http://stackoverflow.com/a/11844297/184367" target="_blank"&gt;stackoverflow.com&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/HkqX5XdG0BQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/2393765893443583915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/08/ios-facebook-sdk-30-beta-access-users.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2393765893443583915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2393765893443583915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/HkqX5XdG0BQ/ios-facebook-sdk-30-beta-access-users.html" title="iOS: Facebook SDK 3.0 (beta) - access user's information" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/08/ios-facebook-sdk-30-beta-access-users.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkECRX47fCp7ImA9WhJQFEo.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-7063853724193110191</id><published>2012-07-28T12:17:00.000+02:00</published><updated>2012-07-28T12:17:44.004+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-28T12:17:44.004+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><title>Paper folding animation for iOS</title><content type="html">&lt;iframe allowfullscreen="" frameborder="0" height="487" src="http://www.youtube.com/embed/91XWz8OOEq8?fs=1" width="650"&gt;&lt;/iframe&gt;Source: &lt;a href="http://github.com/honcheng/PaperFold-for-iOS"&gt;github.com/honcheng/PaperFold-for-iOS&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/KleT2EA2O80" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/7063853724193110191/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/paper-folding-animation-for-ios.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/7063853724193110191?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/7063853724193110191?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/KleT2EA2O80/paper-folding-animation-for-ios.html" title="Paper folding animation for iOS" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/91XWz8OOEq8/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/paper-folding-animation-for-ios.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMEQ384eip7ImA9WhJQE0U.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-5600569805256521116</id><published>2012-07-16T11:39:00.000+02:00</published><updated>2012-07-27T11:13:22.132+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-27T11:13:22.132+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="iPad" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Chrome" /><title>Use Chrome as the default browser on iOS</title><content type="html">Recently Google released their beloved &lt;a href="https://www.google.com/intl/en/chrome/browser/mobile/ios.html" target="_blank"&gt;Chrome browser for iOS&lt;/a&gt;, which supports advanced features like Chrome for your desktop computer. The most interesting among them are the &lt;span style="color: #f9cb9c;"&gt;smart suggestions&lt;/span&gt; while typing in the omnibox as well as &lt;span style="color: #f9cb9c;"&gt;synchronized bookmarks, history and passwords&lt;/span&gt;, where especially the latter is a pain to enter on mobile devices, when using long and cryptic passwords.&lt;br /&gt;
&lt;br /&gt;
It all sounds pretty awesome, but there is one problem with that: the default browser for iOS is still Safari. And I guess Apple has no interest in changing that. Luckily&amp;nbsp;&lt;a href="https://twitter.com/raphaelcaixeta" target="_blank"&gt;Raphael Caixeta&lt;/a&gt;&amp;nbsp;came up with a &lt;a href="http://raphaelcaixeta.com/blog/2012/07/09/making-chrome-better-on-ios/" target="_blank"&gt;few lines of code&lt;/a&gt;, that app developers can add to their application, so that at least those will support opening links on Chrome for iOS where installed. If the user doesn't have Chrome installed, it will gracefully fall back to Safari.&lt;br /&gt;
&lt;br /&gt;
As a developer you simply have to use the following snippet, whenever you want to open an URL with an external web browser:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;








&lt;br /&gt;
&lt;div class="p1"&gt;








&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s2"&gt;NSString&lt;/span&gt;&lt;span class="s1"&gt; *url = &lt;/span&gt;@"mobilejazz.cat"&lt;span class="s1"&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s1"&gt; &lt;/span&gt;// Open with Google Chrome if possible&lt;/div&gt;
&lt;div class="p4"&gt;
&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="s3"&gt;if&lt;/span&gt;&lt;span class="s1"&gt; ([[&lt;/span&gt;&lt;span class="s2"&gt;UIApplication&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;sharedApplication&lt;span class="s1"&gt;] &lt;/span&gt;canOpenURL&lt;span class="s1"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;NSURL&lt;/span&gt;&lt;span class="s1"&gt; &amp;nbsp; &lt;/span&gt;URLWithString&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="s4"&gt;@"googlechrome:"&lt;/span&gt;&lt;span class="s1"&gt;]]) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="p4"&gt;
&lt;span class="s1"&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;[[&lt;/span&gt;&lt;span class="s2"&gt;UIApplication&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;sharedApplication&lt;span class="s1"&gt;] &lt;/span&gt;openURL&lt;span class="s1"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;NSURL&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;URLWithString&lt;span class="s1"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;NSString&amp;nbsp;&lt;/span&gt;stringWithFormat&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="s4"&gt;@"googlechrome://%@"&lt;/span&gt;&lt;span class="s1"&gt;, &lt;span style="color: #f9cb9c;"&gt;url&lt;/span&gt;]]];&lt;/span&gt;&lt;/div&gt;
&lt;div class="p5"&gt;
&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;} &lt;span class="s3"&gt;else&lt;/span&gt; {&lt;/div&gt;
&lt;div class="p4"&gt;
&lt;span class="s1"&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&lt;span class="Apple-tab-span"&gt;&lt;/span&gt;&amp;nbsp; &amp;nbsp; [[&lt;/span&gt;&lt;span class="s2"&gt;UIApplication&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;sharedApplication&lt;span class="s1"&gt;] &lt;/span&gt;openURL&lt;span class="s1"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;NSURL&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;URLWithString&lt;span class="s1"&gt;:[&lt;/span&gt;&lt;span class="s2"&gt;NSString&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;stringWithFormat&lt;span class="s1"&gt;:&lt;/span&gt;&lt;span class="s4"&gt;@"http://%@"&lt;/span&gt;&lt;span class="s1"&gt;, &lt;span style="color: #f9cb9c;"&gt;url&lt;/span&gt;]]];&lt;/span&gt;&lt;/div&gt;
&lt;div class="p5"&gt;
&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;}&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
For jailbroken devices there is another option: Browser Chooser, developed by &lt;a href="http://rpetri.ch/" target="_blank"&gt;Ryan Petrich&lt;/a&gt;. You can get it by adding&amp;nbsp;&lt;span style="color: #f9cb9c;"&gt;rpetri.ch/repo&lt;/span&gt;&amp;nbsp;as a repo to &lt;a href="http://cydia.saurik.com/" target="_blank"&gt;Cydia&lt;/a&gt; (&lt;span style="color: #f9cb9c;"&gt;Manage &amp;gt; Sources &amp;gt; Edit &amp;gt; Add&lt;/span&gt;) and then simply search for &lt;span style="color: #f9cb9c;"&gt;Browser Chooser&lt;/span&gt;.&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/VIXqoSmoAy8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/5600569805256521116/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/use-chrome-as-default-browser-on-ios.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5600569805256521116?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5600569805256521116?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/VIXqoSmoAy8/use-chrome-as-default-browser-on-ios.html" title="Use Chrome as the default browser on iOS" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/use-chrome-as-default-browser-on-ios.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCQ3g7fyp7ImA9WhJREUU.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-6999876478863174939</id><published>2012-07-13T16:16:00.000+02:00</published><updated>2012-07-13T16:17:42.607+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-13T16:17:42.607+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><title>UX of HTML5</title><content type="html">&lt;iframe src="http://www.slideshare.net/slideshow/embed_code/13617851?rel=0" width="668" height="544" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:0px solid #CCC;border-width:0px 0px 0; text-align: center;" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Source: &lt;a href="http://www.cxpartners.co.uk/cxblog/the-ux-of-html5/" target="_blank"&gt;cxpartners.co.uk&lt;/a&gt;&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/96lo0ZvEfvQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/6999876478863174939/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/ux-of-html5.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/6999876478863174939?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/6999876478863174939?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/96lo0ZvEfvQ/ux-of-html5.html" title="UX of HTML5" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/ux-of-html5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMFRnw9fSp7ImA9WhJSF0g.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-4871410868966609385</id><published>2012-07-08T09:30:00.000+02:00</published><updated>2012-07-08T14:26:57.265+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-08T14:26:57.265+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Shopping" /><category scheme="http://www.blogger.com/atom/ns#" term="Marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="Psychology" /><title>Pricing Psychology: 33% more vs 33% discount</title><content type="html">The Economist has an interesting article about the &lt;a href="http://www.economist.com/node/21557801" target="_blank"&gt;psychology of discounting&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The main claim of the article is&lt;br /&gt;
&lt;span style="color: #f9cb9c;"&gt;&lt;i&gt;"Shoppers prefer getting something extra free to getting something cheaper."&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
which they "explain" with&lt;br /&gt;
&lt;i&gt;&lt;span style="color: #f9cb9c;"&gt;"Most people are useless at fractions."&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
For example people don't realize that a &lt;span style="color: #b6d7a8;"&gt;50% increase in quantity is the same as a 33% discount in price&lt;/span&gt;.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
50% increase in quantity = 150% = 1.5&lt;br /&gt;
33% discount = 67% = 0.67&lt;br /&gt;
&lt;span style="color: #b6d7a8;"&gt;1 / 1.5 = 0.67&lt;/span&gt; and thus&amp;nbsp;&lt;span style="color: #b6d7a8;"&gt;1 / 0.67 = 1.5&lt;/span&gt;&lt;/blockquote&gt;
For those who still don't get it, we can also look at it the other way around:&lt;br /&gt;
a &lt;span style="color: #b6d7a8;"&gt;33% discount on something that is 150% results in 100%&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
150% * (1-0.33) = 100%&lt;/blockquote&gt;
and a &lt;span style="color: #b6d7a8;"&gt;50% increase on something that is 67% also results in 100%&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
67% * (1+0.50) = 100%&lt;/blockquote&gt;
&lt;br /&gt;
Therefore if you're offered either a &lt;span style="color: #b6d7a8;"&gt;33% extra for free&lt;/span&gt;&amp;nbsp;or a &lt;span style="color: #b6d7a8;"&gt;33% discount&lt;/span&gt; you should definitely go for the discount, since we already learned above, the &lt;span style="color: #b6d7a8;"&gt;33% discount gives you a 50% extra for free&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Another marketing trick people often fall for is&amp;nbsp;&lt;span style="color: #b6d7a8;"&gt;double discounting&lt;/span&gt;. So if a product has been reduced by 20% and then later on by another 25% percent, most people think 20% + 25% = 45% discount, while the truth is, it's only a 40% discount.&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="color: #b6d7a8;"&gt;100% * (1-0.20) * (1-0.25) = 60%&lt;/span&gt; which is&amp;nbsp;obviously&amp;nbsp;a &lt;span style="color: #b6d7a8;"&gt;40% discount&lt;/span&gt;&lt;/blockquote&gt;
&lt;i&gt;&lt;span style="font-size: x-small;"&gt;Note: values have been rounded to make them easier readable. If you perform the calculations yourself and you want precise results, use fractions instead of percentages, e.g. 1/3 instead of 33%.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/NP734WA9vVo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/4871410868966609385/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/pricing-psychology-33-more-vs-33.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4871410868966609385?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4871410868966609385?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/NP734WA9vVo/pricing-psychology-33-more-vs-33.html" title="Pricing Psychology: 33% more vs 33% discount" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/pricing-psychology-33-more-vs-33.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcEQXo7eyp7ImA9WhJSFU0.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-5192022097539203354</id><published>2012-07-05T17:10:00.000+02:00</published><updated>2012-07-05T17:26:40.403+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-05T17:26:40.403+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><title>Everything You Need to know about Machine Learning in 30 Minutes or Less</title><content type="html">A brief introduction to Machine Learning by Hilary Mason in her talk &lt;a href="http://vimeo.com/43547079" target="_blank"&gt;Machine Learning for Hackers&lt;/a&gt; at &lt;a href="http://devslovebacon.com/" target="_blank"&gt;Bacon&lt;/a&gt;. Unfortunately the video has restrictive settings on vimeo, so I couldn't embedded it directly, but please follow the &lt;a href="http://vimeo.com/43547079" target="_blank"&gt;link&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you're interested in learning more, you can get a full video lecture from Hilary at &lt;a href="http://shop.oreilly.com/product/0636920017493.do" target="_blank"&gt;O'Reilly&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Also check out the &lt;a href="https://www.coursera.org/course/ml" target="_blank"&gt;Machine Learning class&lt;/a&gt; at Coursera.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" height="248" src="http://4.bp.blogspot.com/-t7B88w0_pqs/T_Wu0EpDM_I/AAAAAAAAIAw/OajzxTmPh30/s320/machine_learning.png" width="320" /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/2f5G7raLmgk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/5192022097539203354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/everything-you-need-to-know-about.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5192022097539203354?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5192022097539203354?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/2f5G7raLmgk/everything-you-need-to-know-about.html" title="Everything You Need to know about Machine Learning in 30 Minutes or Less" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-t7B88w0_pqs/T_Wu0EpDM_I/AAAAAAAAIAw/OajzxTmPh30/s72-c/machine_learning.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/everything-you-need-to-know-about.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MRn8_eip7ImA9WhJSE0Q.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-7993406075041534702</id><published>2012-07-04T12:49:00.000+02:00</published><updated>2012-07-04T12:49:47.142+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-04T12:49:47.142+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Steve Jobs" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Engineering" /><title>Steve Jobs on Average vs Best Software Engineers</title><content type="html">&lt;blockquote class="tr_bq"&gt;
&lt;i&gt;“I observed something fairly early on at Apple, which I didn’t know how to explain then, but have thought a lot about it since. Most things in life have a dynamic range in which average to best is at most &lt;span style="color: #f9cb9c;"&gt;2:1&lt;/span&gt;. For example if you go to New York City and get an average taxi cab driver versus the best taxi cab driver, you’ll probably get to your destination with the best taxi driver 30% faster. And an automobile; What’s the difference between the average car and the best? Maybe 20% ? &amp;nbsp;The best CD player versus the average CD player? Maybe 20% ? So 2:1 is a big dynamic range for most things in life. Now, in software, and it used ot be the case in hardware, the difference between the average software developer and the best is &lt;span style="color: #f9cb9c;"&gt;50:1&lt;/span&gt;; Maybe even &lt;span style="color: #f9cb9c;"&gt;100:1&lt;/span&gt;. Very few things in life are like this, but what I was lucky enough to spend my life doing, which is software, is like this. So I’ve built a lot of my success on finding these truly gifted people, and not settling for ‘&lt;span style="color: #f9cb9c;"&gt;B&lt;/span&gt;’ and ‘&lt;span style="color: #f9cb9c;"&gt;C&lt;/span&gt;’ players, but really going for the ‘&lt;span style="color: #f9cb9c;"&gt;A&lt;/span&gt;’ players. And I found something… &lt;span style="color: #f9cb9c;"&gt;I found that when you get enough ‘A’ players together; when you go through the incredible work to find these ‘A’ players, they really like working with each other&lt;/span&gt;. Because most have never had the chance to do that before. And they dont work with ‘B’ and ‘C’ players, so its self policing. They only want to hire ‘A’ players. So you build these pockets of ‘A’ players and it just&amp;nbsp;propagates.”&lt;/i&gt;&lt;/blockquote&gt;
~ Steve Jobs in &lt;a href="http://www.cringely.com/2012/07/02/steve-jobs-the-lost-interview-itunes-dont-tell-anyone-okay/" target="_blank"&gt;&lt;i&gt;Steve Jobs - The Lost Interview&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Source: &lt;a href="http://benlakey.com/2012/07/04/why-you-need-to-hire-great-developers-part-2/" target="_blank"&gt;benlakey.com&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/t-VMmKbIwlU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/7993406075041534702/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/steve-jobs-on-average-vs-best-software.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/7993406075041534702?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/7993406075041534702?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/t-VMmKbIwlU/steve-jobs-on-average-vs-best-software.html" title="Steve Jobs on Average vs Best Software Engineers" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/steve-jobs-on-average-vs-best-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4NRXw8eCp7ImA9WhJSEkg.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-2576858977286244805</id><published>2012-07-02T20:11:00.000+02:00</published><updated>2012-07-02T20:16:34.270+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-02T20:16:34.270+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><title>Great UX for list selection</title><content type="html">I just noticed that Facebook provides you with a great experience, when selecting a bunch of friends to invite them to join an event or page. This is especially dragging if you have hundreds of friends, however, Facebook came up with a few tricks to make it a very painless process.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-0mYT_s-uPY4/T_HdQCa0kHI/AAAAAAAAIAk/Ic7Ua-1jmLA/s1600/facebook_invite_friends.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0mYT_s-uPY4/T_HdQCa0kHI/AAAAAAAAIAk/Ic7Ua-1jmLA/s1600/facebook_invite_friends.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;



&lt;/h2&gt;
&lt;h2&gt;

&lt;span style="color: #e69138;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2&gt;



&lt;span style="color: #f6b26b;"&gt;Visual Summary&lt;/span&gt;&lt;/h2&gt;
First to notice is that Facebook doesn't just provide a simple list, where one row equals one item. Instead it puts 3 items in one row, making it &lt;span style="color: #f9cb9c;"&gt;much faster to scroll through the whole list&lt;/span&gt;. This might not be the best idea for a simple text based list. In Facebook's case, however, they add a thumbnail of the profile picture to each entry, which makes it very easy for the user's eye to scan the list, even if it has 3 columns. You know how most of your friends look like, and if in doubt or in case of a strange profile picture, you can still quickly double check with the name next to it.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



&lt;/h2&gt;
&lt;h2&gt;



&lt;span style="color: #f6b26b;"&gt;Filtering&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
The second important feature to notice is the &lt;span style="color: #f9cb9c;"&gt;filter drop-down menu&lt;/span&gt; in the top left corner and the &lt;span style="color: #f9cb9c;"&gt;search box&lt;/span&gt; right next to it.&amp;nbsp;With the filter you can easily display only the friends, which belong to a certain group or region, while with the search box the displayed entries will be restricted as you type to the entered character.&lt;br /&gt;
&lt;br /&gt;
An additional nifty feature are the filter options &lt;span style="color: #f9cb9c;"&gt;Recent Interactions&lt;/span&gt; and &lt;span style="color: #f9cb9c;"&gt;Selected&lt;/span&gt;, where the first one gives you your most important friends (the ones you've interacted with recently), while the second one displays all the selected user, so that you can get a quick overview before hitting the Submit button, without having to scroll through hundreds of entries again.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



&lt;/h2&gt;
&lt;h2&gt;



&lt;span style="color: #f6b26b;"&gt;Selection&lt;/span&gt;&lt;/h2&gt;
And the best part of it is in my opinion the way you can select entries and how selected entries are displayed. Because of the &lt;span style="color: #f9cb9c;"&gt;checkbox&lt;/span&gt; the user will immediately notice, that this is a selectable item. However, you can not only click on the checkbox itself, but also the related image and text next to it. Which makes it way easier to hit the target, rather than aiming for a little checkbox.&lt;br /&gt;
&lt;br /&gt;
Also, instead of just marking the checkbox as checked, Facebook &lt;span style="color: #f9cb9c;"&gt;highlights the whole item&lt;/span&gt; with a subtle blue frame and background. Which makes it way easier to differentiate the selected from the unselected items, without having the eye constantly jumping between checkbox, image and name.&lt;br /&gt;
&lt;br /&gt;
Worth noticing is that Facebook &lt;span style="color: #f9cb9c;"&gt;grays out&lt;/span&gt; users that can't be selected anymore, typically because they've already been invited before or even already joined the event.&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/EEvlnFGnytM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/2576858977286244805/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/07/great-ux-for-list-selection.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2576858977286244805?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2576858977286244805?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/EEvlnFGnytM/great-ux-for-list-selection.html" title="Great UX for list selection" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-0mYT_s-uPY4/T_HdQCa0kHI/AAAAAAAAIAk/Ic7Ua-1jmLA/s72-c/facebook_invite_friends.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/07/great-ux-for-list-selection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UMQXY5fCp7ImA9WhJSE0Q.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-901086861270073371</id><published>2012-06-30T20:46:00.000+02:00</published><updated>2012-07-04T12:54:40.824+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-04T12:54:40.824+02:00</app:edited><title>On being lazy</title><content type="html">&lt;blockquote class="tr_bq"&gt;
&lt;i&gt;"I divide my officers into four groups. There are clever, diligent, stupid, and lazy officers. Usually two characteristics are combined. Some are clever and diligent -- their place is the General Staff. The next lot are stupid and lazy -- they make up 90 percent of every army and are suited to routine duties. &lt;span style="color: #f9cb9c;"&gt;Anyone who is both clever and lazy is qualified for the highest leadership duties, because he possesses the intellectual clarity and the composure necessary for difficult decisions&lt;/span&gt;. One must beware of anyone who is stupid and diligent -- he must not be entrusted with any responsibility because he will always cause only mischief."&lt;/i&gt;&lt;/blockquote&gt;
~ &lt;a href="http://en.wikipedia.org/wiki/Kurt_von_Hammerstein-Equord" target="_blank"&gt;Kurt von Hammerstein-Equord&lt;/a&gt; (German General)&lt;br /&gt;
&lt;br /&gt;
Related: &lt;a href="http://self.ach.al/post/lazy-people-innovate" target="_blank"&gt;Lazy people innovate&lt;/a&gt; (&lt;a href="http://news.ycombinator.com/item?id=4178031" target="_blank"&gt;HN discussion&lt;/a&gt;)&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/K2Nl3eWH0h4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/901086861270073371/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/06/on-being-lazy.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/901086861270073371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/901086861270073371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/K2Nl3eWH0h4/on-being-lazy.html" title="On being lazy" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/06/on-being-lazy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4NQX06fip7ImA9WhVaGUo.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-4743527072598191141</id><published>2012-06-18T00:07:00.000+02:00</published><updated>2012-06-18T00:09:50.316+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-18T00:09:50.316+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Fonts" /><category scheme="http://www.blogger.com/atom/ns#" term="Design" /><title>Google Web Fonts</title><content type="html">&lt;span style="font-family: inherit;"&gt;I was bored this afternoon, so I started playing around with random design stuff and at some point I discovered &lt;a href="http://www.google.com/webfonts" target="_blank"&gt;Google Web Fonts&lt;/a&gt;, which is by the way a pretty awesome project.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;

&lt;span style="font-family: inherit;"&gt;Of course I ended up spending hours browsing through various font collections and simply being mesmerized. But well, there are worse ways of wasting a Sunday night.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;

&lt;span style="font-family: inherit;"&gt;In case you are curious: this blog's title (GEEK!mind) is now rendered using&amp;nbsp;&lt;a href="http://www.google.com/webfonts/specimen/Play" target="_blank"&gt;Play&lt;/a&gt;, while the main text is displayed in &lt;a href="http://www.google.com/webfonts/specimen/Droid+Sans" target="_blank"&gt;Droid Sans&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/bN_ytuxnIBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/4743527072598191141/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2012/06/google-web-fonts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4743527072598191141?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4743527072598191141?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/bN_ytuxnIBk/google-web-fonts.html" title="Google Web Fonts" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2012/06/google-web-fonts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cEQX46cSp7ImA9WhdXFUg.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-2711605827470979600</id><published>2011-08-05T11:56:00.001+02:00</published><updated>2011-08-28T21:16:40.019+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-28T21:16:40.019+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zsh" /><category scheme="http://www.blogger.com/atom/ns#" term="bash" /><category scheme="http://www.blogger.com/atom/ns#" term="source" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><category scheme="http://www.blogger.com/atom/ns#" term="reload settings" /><title>How to reload your .zshrc</title><content type="html">Stupid me, after editing my .zshrc I always invoked a new shell to apply those changes. Now I &lt;a href="http://superuser.com/questions/46139/what-does-source-do"&gt;found out&lt;/a&gt;, that you can use your shell's &lt;a href="http://ss64.com/bash/source.html"&gt;built-in source command&lt;/a&gt; to reload your zsh settings.&lt;br /&gt;
&lt;blockquote&gt;sk@supernova:~/ &amp;gt; source ~/.zshrc&lt;/blockquote&gt;or, even shorter:&lt;br /&gt;
&lt;blockquote&gt;sk@supernova:~/ &amp;gt; . ~/.zshrc&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/KckYLtnTScc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/2711605827470979600/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/08/how-to-reload-your-zshrc.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2711605827470979600?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2711605827470979600?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/KckYLtnTScc/how-to-reload-your-zshrc.html" title="How to reload your .zshrc" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2011/08/how-to-reload-your-zshrc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUGQHozeip7ImA9WhZUFUk.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-1826660503550381495</id><published>2011-06-08T16:43:00.000+02:00</published><updated>2011-06-08T16:43:41.482+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-08T16:43:41.482+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="enum" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Java: Customizing enums</title><content type="html">After reading this you might wonder why I would write about something obvious like that. And I agree. It is quite obvious. Once you know about it. However, first I didn't know and neither did the other Java programmers I've spoken to. So I thought it's worth writing up a quick blog post.&lt;br /&gt;
&lt;br /&gt;
Probably all of you already know about &lt;a href="http://en.wikipedia.org/wiki/Enumerated_type"&gt;enums&lt;/a&gt; and use them as type-safe flags or enumerations:&lt;br /&gt;
&lt;blockquote&gt;enum Cardsuit { CLUBS, DIAMONDS, SPADES, HEARTS };&lt;/blockquote&gt;That is pretty basic and probably everyone learned that in Java 101. What was new to me, though, is that you can customize the &lt;i&gt;enum { }&lt;/i&gt; pretty much like a &lt;i&gt;class&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
So for example, one day I was working on a XML parser implementation, where depending on an attribute value of a XML element I had to make a decision. Since in XML everything is a String I wrote a quick method which compares an &lt;i&gt;enum&lt;/i&gt; to a &lt;i&gt;String&lt;/i&gt;. But I didn't know where to put it in my code. I figured the best place would be within the &lt;i&gt;enum&lt;/i&gt; itself. Not really thinking that it would work, but still curious I tried the following:&lt;br /&gt;
&lt;script class="brush: java; wrap-lines: false" type="syntaxhighlighter"&gt;
&lt;![CDATA[
public enum KeyActionType {
 CLUBS, DIAMONDS, SPADES, HEARTS;
 
 public boolean compareToString(String s) {
  return s.equalsIgnoreCase(this.toString());
 } 
}
]]&gt;
&lt;/script&gt;I tried to compile it and voilà: it worked! No errors, no warnings.&lt;br /&gt;
&lt;br /&gt;
In my actual XML parser I then would only have to do the following:&lt;br /&gt;
&lt;blockquote&gt;if ( Cardsuit.CLUBS.compareToString(xmlString) ) { .... }&lt;/blockquote&gt;Of course there would have been many other ways to do this, but this solution seems quite clean and elegant to me.&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/QnPhxv2EwBw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/1826660503550381495/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/06/java-customizing-enums.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/1826660503550381495?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/1826660503550381495?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/QnPhxv2EwBw/java-customizing-enums.html" title="Java: Customizing enums" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.geekmind.net/2011/06/java-customizing-enums.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYCSH06fSp7ImA9WhVaGUs.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-6241571021052973987</id><published>2011-05-09T17:57:00.000+02:00</published><updated>2012-06-17T22:49:29.315+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-17T22:49:29.315+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="media" /><category scheme="http://www.blogger.com/atom/ns#" term="sd-card" /><category scheme="http://www.blogger.com/atom/ns#" term="gallery" /><title>Android: Hide your application's media files from the Gallery App</title><content type="html">If you have a media heavy application it is very likely that you store the image, sound or video data on the sd-card, since it gives you a lot more space than bundling everything with the application. Also, it enables you to dynamically add, remove or modify your media data.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-hedFBGI1yQE/TcgOYnHf4EI/AAAAAAAAG-U/QUNOS5lRbns/s1600/android_gallery_nomedia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-hedFBGI1yQE/TcgOYnHf4EI/AAAAAAAAG-U/QUNOS5lRbns/s320/android_gallery_nomedia.png" width="192" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
However, the problem that comes with it is, that all your media is public now and can be read by other applications, e.g. the Gallery App, which scans the whole sd-card for image files. To prevent other applications from scanning and displaying your media files, you can simply add an empty file called &lt;span style="color: #93c47d;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.nomedia&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&lt;/span&gt;in the root folder of your media data.&lt;br /&gt;
&lt;br /&gt;
From the official &lt;a href="http://developer.android.com/reference/android/provider/MediaStore.html#MEDIA_IGNORE_FILENAME"&gt;Android documentation&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;
Name of the file signaling the media scanner to ignore media in the containing directory and its subdirectories. Developers should use this to avoid application graphics showing up in the Gallery and likewise prevent application sounds and music from showing up in the Music app.&amp;nbsp;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/wU9ILkH6Mis" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/6241571021052973987/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/05/android-hide-your-applications-media.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/6241571021052973987?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/6241571021052973987?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/wU9ILkH6Mis/android-hide-your-applications-media.html" title="Android: Hide your application's media files from the Gallery App" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-hedFBGI1yQE/TcgOYnHf4EI/AAAAAAAAG-U/QUNOS5lRbns/s72-c/android_gallery_nomedia.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.geekmind.net/2011/05/android-hide-your-applications-media.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMMQ3g_eyp7ImA9WhVaGUs.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-3866991276738536821</id><published>2011-04-13T11:15:00.003+02:00</published><updated>2012-06-17T22:54:42.643+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-17T22:54:42.643+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Server" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="JSON" /><category scheme="http://www.blogger.com/atom/ns#" term="HTTP" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Debugging Client-Server Communication</title><content type="html">Especially in mobile development you most likely have some&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Client%E2%80%93server_model"&gt;client-server communication&lt;/a&gt; going on, which is often the source of a lot of problems and long debugging sessions. To make the debugging easier it is helpful to see what each side sends or receives. There are two UNIX tools that can come in quite handy in such situations:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Netcat"&gt;netcat&lt;/a&gt; - to listen to all TCP and UDP connections on a specific port&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/CURL"&gt;cURL&lt;/a&gt; - to send 'fake' requests to a server&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Both a very powerful tools and you can do a lot of stuff with them (e.g. write your own web server with a shell script). However, in this post we will keep it simple and focus on debugging a HTTP (JSON) communication between a web server and a mobile client (iPhone, Android, but could be pretty much any kind of client).&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Listening to incoming requests&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
We start a listening server with&lt;br /&gt;
&lt;blockquote&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;nc -lk $ip $port&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;-l: listen&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;-k: forces nc to stay listening for another connection after its current connection is completed.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;$ip: the IP/interface you want to bind to. Use 0.0.0.0 to bind to all interfaces and IPs.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;$port: the port you want to bind to. Doesn't really matter which one you use, as long as the client uses the same one to connect to.&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;
In practice it might look like this:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sk@supernova:~/ &amp;gt; &lt;b&gt;nc -lk 0.0.0.0 8080&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #93c47d;"&gt;POST /rpc HTTP/1.1&lt;br /&gt;
Accept: application/json&lt;br /&gt;
Content-type: application/json&lt;br /&gt;
Accept-Encoding: gzip&lt;br /&gt;
Host: 192.168.2.3&lt;br /&gt;
Content-Length: 152&lt;br /&gt;
Connection: Keep-Alive&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #f6b26b;"&gt;{"id":3,"jsonrpc":"2.0","method":"sendTestMessage","params":{"clientVersion":"0.11.4-debug","user":"sk@geekmind.net","imei":"32420214181983746","message":"This is a test message :-)"}}&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
In &lt;span style="color: #93c47d;"&gt;green&lt;/span&gt; the HTTP header and in &lt;span style="color: #f6b26b;"&gt;orange&lt;/span&gt; the actual content, in this case a &lt;a href="http://en.wikipedia.org/wiki/JSON-RPC"&gt;JSON-RPC&lt;/a&gt; message. While the header is mostly irrelevant to us, it might in some cases contain useful information to detect the source of the problem. However, more interesting, and in most cases more prone to errors is our own "custom protocol" and its implementation. By evaluating the content section we can now easily compare if there is a difference between what we were expecting to receive and what the client was actually sending out.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Sending "fake" requests to a server&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes the problem may not be in the client's implementation of our communication protocol, but on the server side. The complementary approach to the above example is to send "fake" requests to our server and look at the response we get.&lt;br /&gt;
&lt;br /&gt;
With cURL it is as simply as that:&lt;br /&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;curl -v -i -X POST -d $data $uri&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;-&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;v: verbose&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;-i: include HTTP headers in the output&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;-X: HTTP request type. Defaults to GET if none given&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;-d: data&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Applied it might look like this:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sk@supernova:~/ &amp;gt; &lt;b&gt;curl -v -i -X POST -d '{"id":1,"jsonrpc":"2.0","method":"sendTestMessage","params":{"clientVersion":"0.11.4-debug","user":"sk@geekmind.net","imei":"1111111111111111111"}}' http://android.geekmind.net/rpc&lt;/b&gt;&lt;br /&gt;
* About to connect() to android.geekmind.net port 80 (#0)&lt;br /&gt;
* &amp;nbsp; Trying 74.125.43.121... connected&lt;br /&gt;
* Connected to android.geekmind.net (74.125.43.121) port 80 (#0)&lt;br /&gt;
&amp;gt; POST /rpc HTTP/1.1&lt;br /&gt;
&amp;gt; User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3&lt;br /&gt;
&amp;gt; Host: android.geekmind.net&lt;br /&gt;
&amp;gt; Accept: */*&lt;br /&gt;
&amp;gt; Content-Length: 157&lt;br /&gt;
&amp;gt; Content-Type: application/x-www-form-urlencoded&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt; HTTP/1.1 200 OK&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
&amp;lt; Content-Type: text/html; charset=utf-8&lt;br /&gt;
Content-Type: text/html; charset=utf-8&lt;br /&gt;
&amp;lt; Cache-Control: no-cache&lt;br /&gt;
Cache-Control: no-cache&lt;br /&gt;
&amp;lt; Expires: Fri, 01 Jan 1990 00:00:00 GMT&lt;br /&gt;
Expires: Fri, 01 Jan 1990 00:00:00 GMT&lt;br /&gt;
&amp;lt; Date: Fri, 08 Apr 2011 09:19:32 GMT&lt;br /&gt;
Date: Fri, 08 Apr 2011 09:19:32 GMT&lt;br /&gt;
&amp;lt; Server: Google Frontend&lt;br /&gt;
Server: Google Frontend&lt;br /&gt;
&amp;lt; Transfer-Encoding: chunked&lt;br /&gt;
Transfer-Encoding: chunked&lt;br /&gt;
&amp;lt;&lt;br /&gt;
* Connection #0 to host android.geekmind.net left intact&lt;br /&gt;
* Closing connection #0&lt;br /&gt;
&lt;span style="color: #e06666;"&gt;{"jsonrpc": "2.0", "id": 1, "error": "1", "message": "ERROR: user and IMEI do not match!"}}&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #660000;"&gt; &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
In &lt;span style="color: #e06666;"&gt;red&lt;/span&gt; the response we got from the server. In this case we used a real username with a wrong &lt;a href="http://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity"&gt;IMEI&lt;/a&gt; and tested if the server generates the right response. In our case the server correctly produced an error.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
If you're interested in reading more about the actual implementation of client-server communication on mobile devices, check out my blog post &lt;a href="http://www.geekmind.net/2009/11/android-simple-httpclient-to.html"&gt;Android: Simple HttpClient to send/receive JSON Objects&lt;/a&gt;. The code is available on &lt;a href="https://github.com/znq/Simple-HTTP-Client"&gt;GitHub&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
If you want to directly monitor a real connection I suggest that you have a look at tools like &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt; and &lt;a href="http://www.tcpdump.org/"&gt;tcpdump&lt;/a&gt;. Wireshark has a GUI and is fairly easy to understand. It also helps to have a server instance running on your local machine (development server), so you don't need to figure out how to tap into your phones WiFi connection.&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/2o3_DD335F0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/3866991276738536821/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/04/debugging-client-server-communication.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/3866991276738536821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/3866991276738536821?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/2o3_DD335F0/debugging-client-server-communication.html" title="Debugging Client-Server Communication" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2011/04/debugging-client-server-communication.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkANQXozeip7ImA9WhZSFEQ.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-5662640668279550512</id><published>2011-03-30T17:26:00.000+02:00</published><updated>2011-03-30T17:26:30.482+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T17:26:30.482+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Visual Life" /><category scheme="http://www.blogger.com/atom/ns#" term="Design" /><category scheme="http://www.blogger.com/atom/ns#" term="Intel" /><title>Visual Life</title><content type="html">A collection of promo videos of Inte's Visual Life contest. Interesting people and inspiring to watch.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="390" src="http://www.youtube.com/embed/i73f0pQBfQ8?hd=1" title="YouTube video player" width="640"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
Check them out, if you get a chance.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=i73f0pQBfQ8&amp;amp;hd=1"&gt;Invitation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=e5NgG5koPZU&amp;amp;hd=1"&gt;The Sartorialist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=oGuYu7EfgQs&amp;amp;hd=1"&gt;Remastered&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=BTfAzjBTokc&amp;amp;hd=1"&gt;Michael Wolff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=63wanWqzav8&amp;amp;hd=1"&gt;Avant Cellist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/7NLN_IkVroE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/5662640668279550512/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/03/visual-life.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5662640668279550512?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/5662640668279550512?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/7NLN_IkVroE/visual-life.html" title="Visual Life" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/i73f0pQBfQ8/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2011/03/visual-life.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MFQ3c8fyp7ImA9Wx9UFU4.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-4563844643032138214</id><published>2011-02-12T20:33:00.001+01:00</published><updated>2011-02-12T20:36:52.977+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-12T20:36:52.977+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="UxD" /><category scheme="http://www.blogger.com/atom/ns#" term="Future" /><category scheme="http://www.blogger.com/atom/ns#" term="Interfaces" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><title>The Age of Fire - Futuristic Interfaces</title><content type="html">Here is a really well-made video about futuristic interfaces in a completely interconnected home environment. It shows the beauty and usefulness that comes with it, but also points out the inherent problems of complete interconnectivity.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="478" src="http://player.vimeo.com/video/11802060?title=0&amp;amp;byline=0&amp;amp;portrait=0&amp;amp;color=ff9933" width="600"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
Interesting challenges for User Interface Engineers and Designers :-)&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/y6wI8V5hbGc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/4563844643032138214/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/02/age-of-fire-futuristic-interfaces.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4563844643032138214?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4563844643032138214?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/y6wI8V5hbGc/age-of-fire-futuristic-interfaces.html" title="The Age of Fire - Futuristic Interfaces" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.geekmind.net/2011/02/age-of-fire-futuristic-interfaces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMCRX88eCp7ImA9Wx9VEE4.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-2522159494271414131</id><published>2011-01-26T00:48:00.004+01:00</published><updated>2011-01-26T09:27:44.170+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-26T09:27:44.170+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="zsh" /><category scheme="http://www.blogger.com/atom/ns#" term="bash" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><category scheme="http://www.blogger.com/atom/ns#" term="Mac OS X" /><title>Shortcuts to improve your bash &amp; zsh productivity</title><content type="html">So, you hate using a terminal? That might be, because you use the arrow keys to navigate character by character through a long command just to change a paramater at the other end of the line, right? Here's a list of my most-used bash &amp;amp; zsh shortcuts, that will definitely boost your productivity and will help you to improve your command line experience.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 19px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table style="font-size: inherit; line-height: 1.4em; margin-bottom: 1em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;thead style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;th align="left" style="border-bottom-color: rgb(187, 187, 187) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Shortcut&lt;/th&gt;&lt;th align="left" style="border-bottom-color: rgb(187, 187, 187) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Action&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + A&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Move&lt;/strong&gt;&amp;nbsp;to the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;beginning of the line&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + E&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Move&lt;/strong&gt;&amp;nbsp;to the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;end of the line&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + [left arrow]&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Move&lt;/strong&gt;&amp;nbsp;one&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;word backward&lt;/strong&gt;&amp;nbsp;(on some systems this is&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;ALT + B&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + [right arrow]&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Move&lt;/strong&gt;&amp;nbsp;one&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;word forward&lt;/strong&gt;&amp;nbsp;(on some systems this is&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;ALT + F&lt;/code&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + U&lt;/code&gt;&amp;nbsp;(bash)&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Clear&lt;/strong&gt;&amp;nbsp;the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;characters&lt;/strong&gt;&amp;nbsp;on the line&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;before the current cursor&lt;/strong&gt;&amp;nbsp;position&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + U&lt;/code&gt;&amp;nbsp;(zsh)&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;If you're using the zsh, this will&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;clear the entire line&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + K&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Clear&lt;/strong&gt;&amp;nbsp;the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;characters&lt;/strong&gt;&amp;nbsp;on the line&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;after the current cursor&lt;/strong&gt;&amp;nbsp;position&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;ESC + [backspace]&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Delete&lt;/strong&gt;&amp;nbsp;the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;word in front&lt;/strong&gt;&amp;nbsp;of the cursor&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + W&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Delete&lt;/strong&gt;&amp;nbsp;the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;word in front&lt;/strong&gt;&amp;nbsp;of the cursor&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;ALT + D&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Delete&lt;/strong&gt;&amp;nbsp;the&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;word after&lt;/strong&gt;&amp;nbsp;the cursor&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + R&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Search history&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + G&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Escape from search mode&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + _&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Undo&lt;/strong&gt;&amp;nbsp;the last change&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + L&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Clear screen&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + S&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Stop output to screen&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + Q&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Re-enable screen output&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + C&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Terminate/kill&lt;/strong&gt;&amp;nbsp;current foreground process&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + Z&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Suspend/stop&lt;/strong&gt;&amp;nbsp;current foreground process&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;table style="font-size: inherit; line-height: 1.4em; margin-bottom: 1em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;thead style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;th align="left" style="border-bottom-color: rgb(187, 187, 187) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Command&lt;/th&gt;&lt;th align="left" style="border-bottom-color: rgb(187, 187, 187) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;Action&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;!!&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Execute last command&lt;/strong&gt;&amp;nbsp;in history&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;!abc&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Execute last command&lt;/strong&gt;&amp;nbsp;in history&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;beginning with&lt;/strong&gt;&amp;nbsp;&lt;em style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;abc&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;!abc:p&lt;/code&gt;&lt;/td&gt;&lt;td align="left" style="border-bottom-color: rgb(221, 221, 221) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.2em !important; padding-left: 1em !important; padding-right: 1em !important; padding-top: 0.2em !important;"&gt;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Print last command&lt;/strong&gt;&amp;nbsp;in history&amp;nbsp;&lt;strong style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;beginning with&lt;/strong&gt;&amp;nbsp;&lt;em style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;abc&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;h3 style="border-bottom-width: 0px !important; border-color: initial !important; border-left-width: 0px !important; border-right-width: 0px !important; border-style: initial !important; border-top-width: 0px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;History Search&lt;/h3&gt;&lt;div style="line-height: 1.5em !important; margin-bottom: 1em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Press&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + R&lt;/code&gt;&amp;nbsp;to search through the history. Continue pressing&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + R&lt;/code&gt;&amp;nbsp;until you find the entry you're looking for. Press&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;[ENTER]&lt;/code&gt;&amp;nbsp;to execute the current expression. Press&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;[Right Arrow]&lt;/code&gt;&amp;nbsp;to modify the current expression. Press&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + G&lt;/code&gt;&amp;nbsp;to escape from search mode.&lt;/div&gt;&lt;h3 style="border-bottom-width: 0px !important; border-color: initial !important; border-left-width: 0px !important; border-right-width: 0px !important; border-style: initial !important; border-top-width: 0px !important; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Special setup for Mac OS X&lt;/h3&gt;&lt;div style="line-height: 1.5em !important; margin-bottom: 1em !important; margin-left: 0px !important; margin-right: 0px !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Go to&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;Terminal&lt;/code&gt;&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;Preferences&lt;/code&gt;&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;Settings&lt;/code&gt;&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;Keyboard&lt;/code&gt;&lt;/div&gt;&lt;ul style="line-height: 1.4em; margin-bottom: 1em !important; margin-left: 2em !important; margin-right: 0px !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;To enable the use of the&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;ALT&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;OPTION&lt;/code&gt;&amp;nbsp;key, select&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;use option as meta key&lt;/code&gt;&lt;/li&gt;
&lt;li style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;To enable the&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + [left arrow]&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;CTRL + [right arrow]&lt;/code&gt;&amp;nbsp;shortcuts, select&lt;/li&gt;
&lt;ul style="line-height: 1.4em; margin-bottom: 0px !important; margin-left: 2em !important; margin-right: 0px !important; margin-top: 0px !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;li style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;control cursor left&lt;/code&gt;&amp;nbsp;and set it to&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;\033b&lt;/code&gt;&amp;nbsp;and&lt;/li&gt;
&lt;li style="line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;control cursor right&lt;/code&gt;&amp;nbsp;and set it to&amp;nbsp;&lt;code style="background-color: rgb(248, 248, 255) !important; border-bottom-color: rgb(222, 222, 222) !important; border-bottom-style: solid !important; border-bottom-width: 1px !important; border-left-color: rgb(222, 222, 222) !important; border-left-style: solid !important; border-left-width: 1px !important; border-right-color: rgb(222, 222, 222) !important; border-right-style: solid !important; border-right-width: 1px !important; border-top-color: rgb(222, 222, 222) !important; border-top-style: solid !important; border-top-width: 1px !important; color: rgb(68, 68, 68) !important; font-size: 12px; font: normal normal normal 12px/normal Monaco, 'Courier New', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; line-height: 1.4em; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px !important; padding-left: 0.2em !important; padding-right: 0.2em !important; padding-top: 0px !important;"&gt;\033f&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="line-height: 22px;"&gt;You know of any other important shortcuts that I missed? Please let me know in the comments.&lt;/span&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/ATzU1cRCdxY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/2522159494271414131/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/01/shortcuts-to-improve-your-bash-zsh.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2522159494271414131?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/2522159494271414131?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/ATzU1cRCdxY/shortcuts-to-improve-your-bash-zsh.html" title="Shortcuts to improve your bash &amp; zsh productivity" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.geekmind.net/2011/01/shortcuts-to-improve-your-bash-zsh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IHSHo6eip7ImA9WhVaGUs.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-4347647102038548547</id><published>2011-01-19T23:31:00.000+01:00</published><updated>2012-06-17T23:45:39.412+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-17T23:45:39.412+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="logcat" /><title>Android: Better Logging Output</title><content type="html">Ever got annoyed by the flood of information in Android's adb logcat output? Luckily Google Engineer&amp;nbsp;&lt;a href="http://jsharkey.org/"&gt;Jeff Sharkey&lt;/a&gt; put together a Python script to make the output visually more appealing and easier to follow. Below are a few tipps on how to effectively combine &lt;i&gt;coloredlogcat.py&lt;/i&gt;&amp;nbsp;with &lt;i&gt;adb logcat's&lt;/i&gt;&amp;nbsp;parameters and options.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_K6NH2gxxhAc/TTdQAInmHVI/AAAAAAAAG4E/1feI0PgdOQk/s1600/logcat_screenshot.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="396" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/TTdQAInmHVI/AAAAAAAAG4E/1feI0PgdOQk/s640/logcat_screenshot.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Colored Logcat Output&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Setup&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download &lt;a href="http://jsharkey.org/downloads/coloredlogcat.pytxt"&gt;coloredlogcat.py&lt;/a&gt; from Jeff Sharky's blog&lt;/li&gt;
&lt;li&gt;Copy the script to your local ~/bin folder and make it executable&lt;/li&gt;
&lt;blockquote&gt;
mkdir ~/bin cp ~/Downloads/coloredl chmod +x ~/bin/coloredlogcat.py&lt;/blockquote&gt;
&lt;li&gt;Add ~/bin permanently to your $PATH variable. Either in your .bashrc or .zshrc (or whatever shell you use) add or modify this line:&lt;/li&gt;
&lt;blockquote&gt;
export PATH=$HOME/bin:$PATH&lt;/blockquote&gt;
&lt;/ol&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Usage&lt;/span&gt;&lt;br /&gt;
You can either use it directly, by simply entering&amp;nbsp;&lt;i&gt;&lt;span style="color: #f6b26b;"&gt;coloredlogcat.py&lt;/span&gt;&lt;/i&gt;, or you can use &lt;i style="color: #f6b26b;"&gt;adb logcat&lt;/i&gt;&amp;nbsp;with all it's parameters and just &lt;a href="http://en.wikipedia.org/wiki/Pipeline_(Unix)"&gt;pipe&lt;/a&gt; it into &lt;i style="color: #f6b26b;"&gt;coloredlogcat.py&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Show only DEBUG output from the &lt;i&gt;MyApp&lt;/i&gt;&amp;nbsp;TAG. Everything else is SILENT: &lt;i&gt;*:s&lt;/i&gt; (not shown)&lt;br /&gt;
&lt;blockquote&gt;
adb -d logcat "*:S MyApp:D" | coloredlogcat.py&lt;/blockquote&gt;
Show only WARNING, ERROR and FATAL output. Great for checking on exceptions.&lt;br /&gt;
&lt;blockquote&gt;
adb -d logcat "*:W" | coloredlogcat.py&lt;/blockquote&gt;
&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;References&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/guide/developing/tools/adb.html#logcat"&gt;Logcat Reference&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Logcat priorities&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;V — Verbose (lowest priority)&lt;/li&gt;
&lt;li&gt;D — Debug&lt;/li&gt;
&lt;li&gt;I — Info&lt;/li&gt;
&lt;li&gt;W — Warning&lt;/li&gt;
&lt;li&gt;E — Error&lt;/li&gt;
&lt;li&gt;F — Fatal&lt;/li&gt;
&lt;li&gt;S — Silent (highest priority, on which nothing is ever printed)&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Special options&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i style="color: #f6b26b;"&gt;adb logcat -c&lt;/i&gt; clears the entire log&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/cen189lk6Ug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/4347647102038548547/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/01/android-better-logging-output.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4347647102038548547?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/4347647102038548547?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/cen189lk6Ug/android-better-logging-output.html" title="Android: Better Logging Output" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_K6NH2gxxhAc/TTdQAInmHVI/AAAAAAAAG4E/1feI0PgdOQk/s72-c/logcat_screenshot.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.geekmind.net/2011/01/android-better-logging-output.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIGSX08eyp7ImA9Wx9WEU0.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-7835519337078439897</id><published>2011-01-15T16:26:00.003+01:00</published><updated>2011-01-15T17:05:28.373+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-15T17:05:28.373+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="WiFi" /><category scheme="http://www.blogger.com/atom/ns#" term="rfkill" /><title>Linux WiFi: operation not possible due to RF-kill</title><content type="html">Some people have been experiencing WiFi problems with Ubuntu 10.10 since an update that happend just before Christmas 2010. The problem seems to be a bug in a kernel module, which prevents the &lt;a href="http://www.mjmwired.net/kernel/Documentation/rfkill.txt"&gt;rfkill's soft and hard block&lt;/a&gt; from syncing correctly.&lt;br /&gt;
&lt;br /&gt;
In practice that means you can press your laptop's WiFi button as often as you want, it doesn't change anything. Your wireless adapter will always appear as disabled. If you try to start the wireless interface manually you get the following error message:&lt;br /&gt;
&lt;blockquote&gt;sk@ubuntu:~# &lt;b&gt;sudo ifconfig wlan0 up&lt;/b&gt;&lt;br /&gt;
SIOCSIFFLAGS: Operation not possible due to RF-kill&lt;/blockquote&gt;If you do a &lt;b&gt;&lt;i&gt;rfkill list all&lt;/i&gt;&lt;/b&gt; you should get an output similar to this:&lt;br /&gt;
&lt;blockquote&gt;sk@ubuntu:~$ &lt;b&gt;sudo rfkill list all&lt;/b&gt;&lt;br /&gt;
0: hp-wifi: Wireless LAN&lt;br /&gt;
Soft blocked: yes&lt;br /&gt;
Hard blocked: no&lt;br /&gt;
1: phy0: Wireless LAN&lt;br /&gt;
Soft blocked: yes&lt;br /&gt;
Hard blocked: no&lt;/blockquote&gt;Depending on the state of your WiFi button the &lt;b&gt;&lt;i&gt;Hard blocked&lt;/i&gt;&lt;/b&gt; will either be &lt;b&gt;&lt;i&gt;yes&lt;/i&gt;&lt;/b&gt; or &lt;b&gt;&lt;i&gt;no&lt;/i&gt;&lt;/b&gt;. Press the WiFi button and run &lt;b&gt;&lt;i&gt;rfkill list all&lt;/i&gt;&lt;/b&gt; again to make sure the value for &lt;b&gt;&lt;i&gt;Hard blocked&lt;/i&gt;&lt;/b&gt; changes.&lt;br /&gt;
&lt;br /&gt;
The actual problem is, that the &lt;b&gt;&lt;i&gt;Soft blocked&lt;/i&gt;&lt;/b&gt; value is always set to &lt;i&gt;&lt;b&gt;yes&lt;/b&gt;&lt;/i&gt;, because for some reason the syncing between the hardware block and the software block doesn't work as supposed. To override this behavior, you can just run &lt;b&gt;&lt;i&gt;rfkill unblock wifi&lt;/i&gt;&lt;/b&gt; and it should work again. Double check by entering &lt;b&gt;&lt;i&gt;rfkill list all&lt;/i&gt;&lt;/b&gt; again and make sure it looks like this, with all values set to &lt;b&gt;&lt;i&gt;no&lt;/i&gt;&lt;/b&gt;:&lt;br /&gt;
&lt;blockquote&gt;sk@ubuntu:~$ &lt;b&gt;sudo rfkill list all&lt;/b&gt;&lt;br /&gt;
0: hp-wifi: Wireless LAN&lt;br /&gt;
Soft blocked: no&lt;br /&gt;
Hard blocked: no&lt;br /&gt;
1: phy0: Wireless LAN&lt;br /&gt;
Soft blocked: no&lt;br /&gt;
Hard blocked: no&lt;/blockquote&gt;If you then run &lt;b&gt;&lt;i&gt;ifconfig wlan0 up&lt;/i&gt;&lt;/b&gt; (or enable the wireless via your desktop's network manager) you should be able to connect to a wireless network again without any further issues.&lt;br /&gt;
&lt;br /&gt;
The configuration, which I've been using:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Compaq Presario CQ60&lt;/li&gt;
&lt;li&gt;Atheros&amp;nbsp;AR5001 Wireless Network Adapter&lt;/li&gt;
&lt;li&gt;Ubuntu 10.10&lt;/li&gt;
&lt;/ul&gt;I also read, that some people could fix it, by turning off the WiFi button during the boot process and then switch it on again, once the system is up and running. It seems that the system expects the hard block to be set to off. This is still a bug, but it could explain why then the soft block didn't sync with the hard block any more.&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/7I3bST3KxuU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/7835519337078439897/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2011/01/linux-wifi-operation-not-possible-due.html#comment-form" title="24 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/7835519337078439897?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/7835519337078439897?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/7I3bST3KxuU/linux-wifi-operation-not-possible-due.html" title="Linux WiFi: operation not possible due to RF-kill" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><thr:total>24</thr:total><feedburner:origLink>http://www.geekmind.net/2011/01/linux-wifi-operation-not-possible-due.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcCSHY-fCp7ImA9WhdXFk4.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-3149284248235631561</id><published>2010-11-01T00:47:00.005+01:00</published><updated>2011-08-29T17:01:09.854+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-29T17:01:09.854+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><category scheme="http://www.blogger.com/atom/ns#" term="UI" /><category scheme="http://www.blogger.com/atom/ns#" term="Rapid Prototyping" /><title>Rapid Prototyping of Web Applications</title><content type="html">Ryan Singer from 37 Signals gave a really interesting talk at the&amp;nbsp;&lt;i&gt;Future of Web Apps &lt;/i&gt;in London about the rapid prototyping process of web applications.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe frameborder="0" height="336" src="http://player.vimeo.com/video/15772341?byline=0&amp;amp;portrait=0" width="600"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;
For me, the most important insight was to start off with building a really bare-bone HTML framework, which then involves step-by-step by having already right from the beginning a programmer working on the data models and controllers in parallel with a web designer improving the markup and CSS, instead of going the traditional way of letting only a graphic designer spending days (or even weeks) bringing his design ideas to perfection and blocking other people (i.e. programmers) from getting started, to then finally figure out a couple of weeks later that from a UX perspective the whole thing doesn't work.&lt;br /&gt;
&lt;br /&gt;
Kinda obvious and simple once you hear it. However, most people in the industry still have their way of thinking that you have to tinker a design visually to perfection, but don't get the point that a static design is only a small proportion of what makes an application gonna work or not.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_K6NH2gxxhAc/TSo50M18xCI/AAAAAAAAG3o/g-6GejEtiQ4/s1600/ui_design.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="440" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/TSo50M18xCI/AAAAAAAAG3o/g-6GejEtiQ4/s640/ui_design.jpg" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;UI Design&lt;/b&gt; (Photo by &lt;a href="http://www.flickr.com/photos/lucamascaro/4941101192/"&gt;Lucas Mascaro&lt;/a&gt;)&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Something I personally like a lot, is what I call &lt;i style="font-weight: bold;"&gt;"back to kindergarden"&lt;/i&gt;&amp;nbsp;or&amp;nbsp;the &lt;i&gt;&lt;b&gt;pen, paper &amp;amp; scissors&lt;/b&gt;&lt;/i&gt; approach, which basically means that we draw all pages and UI elements on paper by using different sized pens of various colors and then play around with them and walk through different use cases by moving the small paper snippets around and then discuss our ideas with other team members including developers. Including the developers is very important, because they're the ones who actually have to build the whole thing. They sometimes might restrict the creativity with bringing up all these ambiguous technological limits, but they're quite crucial when it comes down to decision making about feasibility and time estimates.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Tipp:&lt;/b&gt; having pre-designed templates, which can be printed out makes it a lot easier to throw away the current ideas and start over without having to completely start all the way from scratch again.&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/fAcaJDhpdhQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/3149284248235631561/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2010/11/rapid-prototyping-of-web-applications.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/3149284248235631561?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/3149284248235631561?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/fAcaJDhpdhQ/rapid-prototyping-of-web-applications.html" title="Rapid Prototyping of Web Applications" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_K6NH2gxxhAc/TSo50M18xCI/AAAAAAAAG3o/g-6GejEtiQ4/s72-c/ui_design.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.geekmind.net/2010/11/rapid-prototyping-of-web-applications.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMGR3kyeip7ImA9Wx5VGU0.&quot;"><id>tag:blogger.com,1999:blog-380980011076825656.post-929459007455289233</id><published>2010-10-12T18:53:00.000+02:00</published><updated>2010-10-12T18:53:46.792+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-12T18:53:46.792+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Audio" /><category scheme="http://www.blogger.com/atom/ns#" term="MacBook" /><category scheme="http://www.blogger.com/atom/ns#" term="Apple" /><title>Hissing noise when connecting earbuds to MacBook</title><content type="html">Recently I bought some high quality Sennheiser earbuds, but since using them together with my MacBook I was annoyed by a constant hissing noise when playing back very quiet parts of a song. For a while I didn't bother and just accepted it as it is, but later on I played around with some tools in &lt;i&gt;&lt;b&gt;/Application/Utilities&lt;/b&gt;&lt;/i&gt;&amp;nbsp;and found an application called &lt;i&gt;&lt;b&gt;Audio Midi Setup&lt;/b&gt;&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_K6NH2gxxhAc/TLSM9BzbqYI/AAAAAAAAG1o/ZFEIRV_0P4U/s1600/02+audio+midi+setup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://2.bp.blogspot.com/_K6NH2gxxhAc/TLSM9BzbqYI/AAAAAAAAG1o/ZFEIRV_0P4U/s400/02+audio+midi+setup.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Luckily I was listening to some calm music while randomly fooling around with these settings and when I changed the bit rate of the &lt;b&gt;&lt;i&gt;Built-In Output&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&amp;nbsp;from &lt;/span&gt;&lt;i&gt;2ch-16bit&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&amp;nbsp;to &lt;/span&gt;&lt;i&gt;2ch-24bit&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&amp;nbsp;all the sudden I got an impressive increase of sound output with almost no hissing noise. It's still not perfect, but definitely much better compared to what I was tortured with before. Although, increasing the bit rate all the way up to&amp;nbsp;&lt;/span&gt;&lt;i&gt;2ch-32bit&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&amp;nbsp;didn't cause any significant improvement to 24 bit, that's why I went with &lt;/span&gt;&lt;i&gt;2ch-24bit&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&amp;nbsp;for now.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;If someone can explain what the correlation between bit rate and hissing noise is, please let me know in the comments. I'm curious to know :-)&lt;/span&gt;&lt;/b&gt;&lt;img src="http://feeds.feedburner.com/~r/geekmind/~4/-AUV4U2KkXE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.geekmind.net/feeds/929459007455289233/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.geekmind.net/2010/10/hissing-noise-when-connecting-earbuds.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/929459007455289233?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380980011076825656/posts/default/929459007455289233?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/geekmind/~3/-AUV4U2KkXE/hissing-noise-when-connecting-earbuds.html" title="Hissing noise when connecting earbuds to MacBook" /><author><name>Stefan Klumpp</name><uri>http://www.blogger.com/profile/02899343387413244345</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://1.bp.blogspot.com/_K6NH2gxxhAc/THlKag7L_HI/AAAAAAAAG0A/tOK1BsVjkFA/S220/Manga_Tarragona_August_2010_without_beard.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_K6NH2gxxhAc/TLSM9BzbqYI/AAAAAAAAG1o/ZFEIRV_0P4U/s72-c/02+audio+midi+setup.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.geekmind.net/2010/10/hissing-noise-when-connecting-earbuds.html</feedburner:origLink></entry></feed>
