<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" 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" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-19850649</atom:id><lastBuildDate>Mon, 28 Nov 2011 00:26:22 +0000</lastBuildDate><category>shadowbook</category><category>flash</category><category>addiction</category><category>venture</category><category>finances</category><category>tools</category><category>budgetler</category><category>news</category><category>books</category><category>jboss seam</category><category>development</category><category>free</category><category>certifications</category><category>silicon valley</category><category>maven</category><category>new</category><category>iterative</category><category>socal</category><category>analytics</category><category>updates</category><category>poll</category><category>kindle 2</category><category>posterous</category><category>strawlink</category><category>service</category><category>war</category><category>spreadsheets</category><category>new ventures</category><category>las vegas</category><category>techzulu</category><category>picasa</category><category>kawasaki</category><category>job</category><category>monster</category><category>git</category><category>welder</category><category>rss</category><category>rails</category><category>g4</category><category>watches</category><category>dating</category><category>scalable</category><category>russian</category><category>2008</category><category>reading</category><category>stanza</category><category>motorcycle</category><category>java</category><category>seam</category><category>talk</category><category>example</category><category>online games</category><category>charger</category><category>jobcentral</category><category>accident</category><category>ideas</category><category>lift</category><category>samples</category><category>pdf</category><category>beta</category><category>online</category><category>startup school 2007</category><category>read</category><category>tweeplies</category><category>interview</category><category>motorcycles</category><category>product management</category><category>desktop</category><category>iphoto</category><category>mb2800</category><category>opinion</category><category>flickr</category><category>mac</category><category>insurance</category><category>pasadena</category><category>feedburner</category><category>new project</category><category>soulmate</category><category>liftweb</category><category>svn</category><category>google</category><category>igreen</category><category>ruby</category><category>baume et mercier</category><category>bikes</category><category>without lift</category><category>big bang</category><category>resolutions</category><category>hublot</category><category>quote</category><category>web applications</category><category>github</category><category>tomcat</category><category>bay area</category><category>social sites</category><category>socaltech</category><category>sync</category><category>smackbook</category><category>e-reading</category><category>green</category><category>acquisitions</category><category>excel</category><category>year</category><category>steve jobs</category><category>jetty</category><category>ca</category><category>ray ban</category><category>everytalks</category><category>uml</category><category>new year resolutions</category><category>brm</category><category>code</category><category>riviera</category><category>high tech</category><category>share</category><category>speed</category><category>stencils</category><category>italo fontana</category><category>new friends</category><category>wallpaper</category><category>howto</category><category>startup</category><category>mac os x</category><category>ergon</category><category>wife</category><category>emporio armani</category><category>virtuedesktops</category><category>question</category><category>friendship</category><category>ruby on rails</category><category>scrum</category><category>kindle 2.0</category><category>s.f.</category><category>equipment</category><category>twitter</category><category>sucks</category><category>source code</category><category>household</category><category>career</category><category>coffee</category><category>symfony</category><category>project management</category><category>jruby</category><category>omnigraffle</category><category>yaska</category><category>boots</category><category>mixergy</category><category>vega nitro matrix</category><category>recruiter</category><category>bofa</category><category>pictures</category><category>yelp</category><category>drinks 2.0</category><category>funny</category><category>omnigroup</category><category>web</category><category>powerbook</category><category>projects</category><category>office time killers</category><category>date</category><category>library</category><category>trends</category><category>home</category><category>iphone</category><category>spring</category><category>sportbike</category><category>todo</category><category>bank of america</category><category>santa monica</category><category>eclipse</category><category>candidate screening</category><category>ocmt</category><category>review</category><category>laptop</category><category>startups</category><category>business</category><category>wallpapers</category><category>scala</category><category>panerai</category><category>threads</category><category>scalability</category><category>online candidate screening</category><category>san francisco</category><category>livejournal</category><category>mistakes</category><category>brother</category><category>textmate</category><category>announce</category><category>sunglasses</category><category>replies</category><category>speak</category><category>los angeles</category><category>lj</category><category>without liftweb</category><category>social networks</category><category>people</category><category>struts</category><category>software</category><category>atomkeep</category><category>ninja</category><category>sup</category><category>sinatra</category><category>l.a.</category><category>fun</category><category>slide</category><category>release</category><category>architecture</category><category>malcolm muggeridge</category><category>ide</category><category>mountain view</category><category>articles</category><category>gallery</category><category>auto</category><category>apple</category><category>documents</category><category>graphs</category><category>shared profile</category><category>photos</category><category>usps</category><category>kawasaki ninja</category><category>financial</category><category>diagono</category><category>lack of time</category><category>toy</category><category>yana</category><category>amazon</category><category>socialize</category><category>job interview</category><category>recruitment</category><category>bvlgari</category><category>new people</category><category>car</category><category>friends</category><category>interview candidate</category><category>hibernate</category><category>the journey is the reward</category><category>platforms</category><category>cvs</category><category>feed</category><category>personal</category><category>php</category><category>programming</category><category>California</category><category>meet</category><category>experience</category><category>job trends</category><category>entrepreneurship</category><category>goals</category><category>break</category><category>lavazza</category><category>how-to</category><category>jvm</category><category>blog</category><category>trip</category><category>time</category><category>life</category><category>kindle</category><category>source</category><category>hi tech</category><category>passion</category><category>blogger</category><category>jobs</category><category>amazon kindle</category><category>profile sync</category><category>u-boat</category><category>ror</category><category>jobster</category><category>user interfaces</category><category>profile</category><title>Alex talks.</title><description>Olexiy (&lt;a href="http://en.wikipedia.org/wiki/Alexey"&gt;Alexey&lt;/a&gt;) Prokhorenko likes to live in different places and blog about different things. Ruby, JRuby, Java, Javascript, Scala, Rails, Spring, Hibernate... just to name a few. And different aspects of product management and agile software development. On the other note, he also loves speed in form of flashy cars and sportbikes, so those topics may find their place here, too.</description><link>http://atalks.prokhorenko.us/</link><managingEditor>noreply@blogger.com (Olexiy Prokhorenko)</managingEditor><generator>Blogger</generator><openSearch:totalResults>350</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/rss+xml" href="http://feeds.feedburner.com/alexqwe" /><feedburner:info uri="alexqwe" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-3566862844862515329</guid><pubDate>Fri, 22 Oct 2010 04:12:00 +0000</pubDate><atom:updated>2010-10-21T21:12:28.062-07:00</atom:updated><title>Nice, just saw an amazing feedback for my http://schooler.qwe3.com - feels great! #iphone</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/BhA1dPvC3izkMEq6ugrjTGxI6ac8QAIQVQl0uAHDgJuK8E1qj2xSEc1IXWbS/IMG00029-20101021-2108.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/WMj93WNTXyE0vdbkP246DxNqBuK4P91xE1zbdId1Vm6r2SyucOKHwDsaB32h/IMG00029-20101021-2108.jpg.scaled.500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;p&gt;(Follow the link from &lt;a href="http://schooler.qwe3.com/"&gt;http://schooler.qwe3.com/&lt;/a&gt; to get to review!) &lt;p /&gt; It's very niche, very small, simple and cheap. But its great people are loving it!!! Thanks @bazinia (&lt;a href="http://twitter.com/bazinia)"&gt;http://twitter.com/bazinia)&lt;/a&gt; for design and help :-)&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/nice-just-saw-an-amazing-feedback-for-my-http"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-3566862844862515329?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/1T9oiK7dI3o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/1T9oiK7dI3o/nice-just-saw-amazing-feedback-for-my.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/10/nice-just-saw-amazing-feedback-for-my.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-4923054881008711033</guid><pubDate>Tue, 10 Aug 2010 18:45:00 +0000</pubDate><atom:updated>2010-08-10T11:45:14.164-07:00</atom:updated><title>Funny real estate market</title><description>&lt;div class='posterous_autopost'&gt;I find it very funny, not sure about everybody else, but -- I see &lt;br /&gt;condos (1 bedroom) for sale (in SF and LA) which: &lt;br /&gt;1. Require to be 1st time buyer &lt;br /&gt;2. Require income not to exceed 95k/yr for 2 people &lt;br /&gt;3. Cost 350-400k &lt;br /&gt;4. Want 10% minimum downpayment, but obviously prefer 20% &lt;br /&gt;5. Are called affordable &lt;p /&gt; Okay, so let's lay down some numbers for say, 375k 1 bedroom &lt;br /&gt;"affordable" condo. That means that two people with limited income &lt;br /&gt;have to cough (somehow) 75k for downpayment. Which is almost their &lt;br /&gt;annual income. Nice. But it's not over. So they will have to finance &lt;br /&gt;the rest which is 300k. &lt;br /&gt;For 30 years on average interest rate, plus adding annual taxes and &lt;br /&gt;insurance and modest $300/mnth HOA fees (and hoping they'll not grow) &lt;br /&gt;and also hoping nothing major breaks -- so keeping this all in mind -- &lt;br /&gt;they are looking at good $2900-3100 PER MONTH. Over the course of 30 &lt;br /&gt;years the $$$ spent only on principal and interest will be about &lt;br /&gt;680-700k (I am not even adding here HOA and taxes). &lt;br /&gt;Does anybody think their condo will cost these money in 30 years? Nope. &lt;p /&gt; So the question is -- is this really "affordable"?? Does it make sense &lt;br /&gt;to buy? Not for me. California real estate market is just crazy. Dumb &lt;br /&gt;crazy. &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/funny-real-estate-market"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-4923054881008711033?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/RJDw0mQms8c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/RJDw0mQms8c/funny-real-estate-market.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/08/funny-real-estate-market.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-4043429123206660162</guid><pubDate>Sun, 27 Jun 2010 07:14:00 +0000</pubDate><atom:updated>2010-06-27T00:14:29.657-07:00</atom:updated><title>Double green tea espresso at Urth Caffe</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/m3vI8F8klOGsTCp8jqG5ZaWJ1tODEdW428Fk8sY7BGvClVVRnSU3LMpGa54H/photo.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/oT8WbhZBGpXAxhZzgygqOLcjtySeLgun2HxaDTKJgH5HaDeOFhXAlJSNhu9q/photo.jpg.scaled.500.jpg" width="500" height="669"/&gt;&lt;/a&gt;  &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/double-green-tea-espresso-at-urth-caffe"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-4043429123206660162?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/ytExWlsStbU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/ytExWlsStbU/double-green-tea-espresso-at-urth-caffe.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/06/double-green-tea-espresso-at-urth-caffe.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-7814639887424797413</guid><pubDate>Fri, 25 Jun 2010 19:54:00 +0000</pubDate><atom:updated>2010-06-25T12:54:29.374-07:00</atom:updated><title>Can't stand more shopping!..</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/tlKn3NeHD1s1xNeATMKKQbTcJrpcNzmGRDWxav0WGtSRkAurGBKjQrQRUGqZ/photo.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/yErSxEYT0bkgzihlKPOFJRrUrfIxgbtOBGYio9cbjqVWKJUEMtQArejwTzd6/photo.jpg.scaled.500.jpg" width="500" height="669"/&gt;&lt;/a&gt;  &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/cant-stand-more-shopping"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-7814639887424797413?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/JyZ9jmMI72E" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/JyZ9jmMI72E/can-stand-more-shopping.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/06/can-stand-more-shopping.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-2209567563873291110</guid><pubDate>Thu, 24 Jun 2010 19:35:00 +0000</pubDate><atom:updated>2010-06-24T12:35:59.872-07:00</atom:updated><title>Camera on iPhone 4 #iphone</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/KxzZrNi30H9s5QwXAuK4hDiJL3eSI2nzQSUnzAbFVOkoYRxhPjhvGYEmzLYw/photo.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/zckx6saLVEW8R26ZSCoTTD9GzdN3EDImJ7HT7NWBVG4PfrfKqQmksAXHLUrj/photo.jpg.scaled.500.jpg" width="500" height="669"/&gt;&lt;/a&gt; &lt;p&gt;I am no expert, but so far, iphone's camera is THE best one I saw on &lt;br /&gt;mobile devices. Very very nice.&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/camera-on-iphone-4-iphone"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-2209567563873291110?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/Q0Tq7HXKiqw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/Q0Tq7HXKiqw/camera-on-iphone-4-iphone.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/06/camera-on-iphone-4-iphone.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-5079682839403334360</guid><pubDate>Sun, 13 Jun 2010 04:08:00 +0000</pubDate><atom:updated>2010-06-12T21:08:39.258-07:00</atom:updated><title>So, what's the real battery improvement for iPhone 4? #iphone</title><description>&lt;div class='posterous_autopost'&gt;I am using &lt;a href="http://www.apple.com/iphone/iphone-3gs/specs.html"&gt;http://www.apple.com/iphone/iphone-3gs/specs.html&lt;/a&gt; and &lt;a href="http://www.apple.com/iphone/specs.html"&gt;http://www.apple.com/iphone/specs.html&lt;/a&gt; to compare tech specs. Here is what we are going to have (not including standby time, audio and video playback time, as they do not matter for me):&lt;p /&gt; &lt;b&gt;Talk time:&lt;/b&gt;&lt;br /&gt;&lt;blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"&gt; &lt;i&gt;3GS&lt;/i&gt;: Up to 5 hours on 3G, Up to 12 hours on 2G&lt;/blockquote&gt;&lt;blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"&gt; &lt;i&gt;4&lt;/i&gt;:      Up to 7 hours on 3G, Up to 14 hours on 2G&lt;/blockquote&gt;&lt;br /&gt;Okay, so we are getting 2 extra hours here. I don&amp;#39;t talk that much, so I don&amp;#39;t care particularly of this item.&lt;br /&gt;&lt;b&gt;&lt;span style="font-weight: normal;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;Internet use:&lt;/b&gt;&lt;/div&gt;&lt;blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"&gt; &lt;i&gt;3GS&lt;/i&gt;: Up to 5 hours on 3G, Up to 9 hours on Wi-Fi&lt;/blockquote&gt;&lt;blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"&gt; &lt;i&gt;4&lt;/i&gt;:      Up to 6 hours on 3G, Up to 10 hours on Wi-Fi&lt;/blockquote&gt;&lt;p /&gt;&lt;div&gt;Now, so here is the most important for me. I have couple mailboxes, I have IM, I do browse, Twitter and other stuff. What improvement are we getting here? 1 hour? That&amp;#39;s not cool.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;When you say it&amp;#39;s 40% of improved battery life that sounds amazing. But 3GS barely gets me through the day. iPhone 4 will get me through the day probably easier, but not more. So that means nightly charges still.&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/so-whats-the-real-battery-improvement-for-iph"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-5079682839403334360?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/1m913pKvVmo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/1m913pKvVmo/so-what-real-battery-improvement-for.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/06/so-what-real-battery-improvement-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-4272662491145695418</guid><pubDate>Wed, 09 Jun 2010 04:48:00 +0000</pubDate><atom:updated>2010-06-08T21:48:28.188-07:00</atom:updated><title>Is iPhone 4 for me? #iphone #apple #blackberry #rim</title><description>&lt;div class='posterous_autopost'&gt;So, I was quite anxious to see iPhone 4 been announced this week &lt;a href="http://www.apple.com/iphone/"&gt;http://www.apple.com/iphone/&lt;/a&gt;&lt;div&gt;After thoughts? Not so sure. So, definitely, love the build quality. I didn&amp;#39;t touch the device, but I remember all previous iPhone&amp;#39;s. And from what Steve Jobs described during his keynote, what is on the web site now.. this will be the most precisely done and pretty device. Art piece. I want to have it just because of it&amp;#39;s design. But... what else? &lt;/div&gt; &lt;div&gt;Back camera with LED flash. That&amp;#39;s helpful, and essentially nice. Quality of images is very nice, no doubt.&lt;/div&gt;&lt;div&gt;Unfortunately that&amp;#39;s it for me. You know what I didn&amp;#39;t see there? I didn&amp;#39;t see communication device. That&amp;#39;s my problem. There are  certain improvements for Apple&amp;#39;s Mail (like combined Inbox), but that&amp;#39;s it. Still, you have to do multiple steps just to see if you have new email. Making calls? Yup, take few steps too.&lt;/div&gt; &lt;div&gt;That&amp;#39;s really annoying me. I know that my other option is Blackberry Bold 9700. It has it&amp;#39;s own certain flaws. Camera is not that nice, just decent. Build quality is poor. Browser is the last thing you want to use. But damn thing can make calls and very simple and nice with messaging and IMs.&lt;/div&gt; &lt;div&gt;So, I am not sure if I am getting new iPhone or am I back on Blackberry. Having options is a good thing, but I need to throw couple heavy stones into RIM&amp;#39;s and Apple&amp;#39;s face. Why can&amp;#39;t you guys make one awesome device? :-)&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/is-iphone-4-for-me-iphone-apple-blackberry-ri"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-4272662491145695418?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/0j0TTGgAtsM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/0j0TTGgAtsM/is-iphone-4-for-me-iphone-apple.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/06/is-iphone-4-for-me-iphone-apple.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-2365134490407374584</guid><pubDate>Wed, 05 May 2010 19:34:00 +0000</pubDate><atom:updated>2010-05-05T12:34:31.900-07:00</atom:updated><title>While moving out from Flickr account.. #atomkeep #flashback #startup</title><description>&lt;div class='posterous_autopost'&gt;I found those nice scans of LAPTOP Magazine, where "Atomkeep" was nominated as one of Top 50 Best Web Apps... That was a pleasant warm feeling!&lt;p /&gt;&lt;div&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/LUQChbevhZg8BJzIUSQ7ABaBD8xqD3h6fcXEQCGxx4g9CyaLYIA8usk6axtE/00000_Laptop_AtomkeepPage.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/8nWMThKvww1AdMgn2nC6yGkkN8Fs4N2K7GzRRB2zUyPfEXX0594yA5WlfB0c/00000_Laptop_AtomkeepPage.jpg.scaled.500.jpg" width="500" height="648"/&gt;&lt;/a&gt; &lt;/div&gt;&lt;p /&gt;&lt;div&gt;Shared page with BillShrink (awesome tool by&amp;nbsp;&lt;a href="http://twitter.com/peterpham"&gt;@peterpham&lt;/a&gt;) - and we got there just in 5 or 6 months...&amp;nbsp;&lt;/div&gt;&lt;p /&gt;&lt;div&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/AK7zGnALkABSDVoTo0vYwa0S5f8Wt2uc9DCTkp0E6FkPO6md53P8CHVRKvMf/00002_Laptop_AtomkeepBlock.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/pP5M12ABxaC1DgfzkAlJWD3Nxi16VWhzGfsgxy6CvOp4WfksICwvaZbBF40c/00002_Laptop_AtomkeepBlock.jpg.scaled.500.jpg" width="500" height="415"/&gt;&lt;/a&gt; &lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/while-moving-out-from-flickr-account-atomkeep"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-2365134490407374584?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/0pZr9peZtHg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/0pZr9peZtHg/while-moving-out-from-flickr-account.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/05/while-moving-out-from-flickr-account.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-38970708788204395</guid><pubDate>Mon, 26 Apr 2010 15:19:00 +0000</pubDate><atom:updated>2010-04-26T08:19:18.218-07:00</atom:updated><title>iPhone vs. Android: nice article I came across #android #iphone #platform</title><description>&lt;div class='posterous_autopost'&gt;&lt;p&gt;Full article is here &lt;a href="http://radar.oreilly.com/2010/04/five-reasons-iphone-v-android.html"&gt;http://radar.oreilly.com/2010/04/five-reasons-iphone-v-android.html&lt;/a&gt; and I should say it does make interesting points, though, I am not 100% agree with everything there. But, like this block:&lt;/p&gt;  &lt;blockquote&gt;  &lt;p&gt;"...&lt;span style="font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 14px; color: #333333; line-height: 19px;"&gt;Apple is moving on to the 4.0 stage of its mobile platform, has consistently hit promised milestones, has done yeomen's work on evangelizing key technologies within the platform (and third-party developer creations - "There's an app for that"), and developed multiple ways for developers to monetize their products. No less, they have offered 100 percent distribution to 85 million iPhones, iPod Touches and iPads, and one-click monetization via same. Nested in every one of these devices is a giant vending machine that is bottomless and never closes. By contrast, Google has taught consumers to expect free, the Android Market is hobbled by poor discovery and clunky, inconsistent monetization workflows. Most damning, despite touted high-volume third-party applications, there are (seemingly) no breakout third-party developer successes, despite Android being around two-thirds as long as the iPhone platform."&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;  &lt;p&gt;&lt;span style="color: #333333; font-family: Arial, Verdana, Helvetica, sans-serif; font-size: medium;"&gt;&lt;span style="font-size: 14px; line-height: 19px;"&gt;&lt;span style="color: #000000; font-family: Arial, Helvetica, sans-serif; font-size: small;"&gt;&lt;span style="font-size: 13px; line-height: normal;"&gt;Well said. And very clear what is the difference between Android and iPhone users. My personal experience shows the same. Blackberry and Android users don't *buy* applications. Well, incorrect. They *rarely buy*. Blackberry users don't have many at the first place, Android users try to get everything free. iPhone users pay. And usually they don't even questioning the price (some still do), but they just buy if *any* value is in the app.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/iphone-vs-android-nice-article-i-came-across"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-38970708788204395?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/5hJhGMMCFmM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/5hJhGMMCFmM/iphone-vs-android-nice-article-i-came.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/04/iphone-vs-android-nice-article-i-came.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-6230131586199422317</guid><pubDate>Sat, 27 Mar 2010 01:30:00 +0000</pubDate><atom:updated>2010-03-26T18:30:07.441-07:00</atom:updated><title>Leaving S.F. to L.A. in an hour or so. #losangeles #sanfrancisco #la #sf #move</title><description>&lt;div class='posterous_autopost'&gt;So, after almost 1.5 years in San Francisco I am leaving back to Los Angeles. Nothing bad to say about San Francisco, though, I am not sure I really enjoyed the weather - it was well crappy all the time I&amp;#39;ve been leaving here. Probably weather is not the thing I should be looking in the place (Los Angeles is extremely hot, yeah! ;-)&lt;p /&gt;&lt;div&gt;Together with that I should say I can think I am mentally moving forward, and looking for possibilities and everything around me what picks my interest. Really excited and itching to learn new, explore new, do new, build new,... well, you got it. I am evolving. &lt;/div&gt; &lt;p /&gt;&lt;div&gt;See you all in L.A.! ;-)&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/leaving-sf-to-la-in-an-hour-or-so-losangeles"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-6230131586199422317?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/oSEo9FZZI4I" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/oSEo9FZZI4I/leaving-sf-to-la-in-hour-or-so.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/leaving-sf-to-la-in-hour-or-so.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-7650250847646221075</guid><pubDate>Wed, 17 Mar 2010 17:14:00 +0000</pubDate><atom:updated>2010-03-17T10:14:59.414-07:00</atom:updated><title>My thoughts on iPhone's multitasking "issue" #iphone #apple #ipad</title><description>&lt;div class='posterous_autopost'&gt;Couple last days I've been playing with SDK and find it really a nice tool. It restricts at many point, but well, it still gives you quite some stuff which you can sucessfully and reliably use and build your apps. &lt;p /&gt; Frankly speaking, after and while using Blackberry I was pretty annoyed with the fact (exactly the *fact*) that there is no multitasking. It's just our brain, used to the fact that it should be there, complains and grumbles. &lt;p /&gt; Reality check? Well, I do use background apps on Blackberry. IM (beejive). Twitter. Uh-oh. That should be it. You? &lt;br /&gt;The fact that you have N number of applications running in the background does not give you anything. They are just there. Slow sleeping or just doing nothing, keep their chunk of memory and loading your tiny CPU to keep them alive. &lt;p /&gt; So what really happens when you SWITCH to application? (Which is in background). It "wakes up", shows off itself, same data, same status, everything the same. &lt;br /&gt;Hold on - but isn't that exactly what iPhone allow all applications to implement?! You've got an event before shutdown, even after launch, you can save and load all the info about application status you ever would want; restore it properly, restore the UI (views) - here we go - your app will look like it never left the stage, was just hiding in "virtual ;-) background". &lt;br /&gt;I was able to implement basics of it easily, within an hour, being a complete newbie to Objective-C and iPhone SDK. And it works. So, now, I assume, all those developers of all those apps which didn't do that, but instead think that "multitasking saves everybody" - just ignorant of existing functionality. Actually, I think that multitasking is a much more complex and painful thing to properly develop and debug -- than just simple state saving/loading. &lt;p /&gt; There are exclusions always, certainly, in this case, too. Sometimes you may want to run background music app and you want to browse Web at the same time. That's true. Apple putted their foot down and decided it's only their iPod app has this priveledge. &lt;br /&gt;Also, you may want to open Web page and while it is loading, switch to email, and then may be twitter, and then to Web page - which you expect to be loaded already. True. Valid case. Reality check? Does not work that well on Blackberries, neither on Androids. With all the multitasking. You are on *mobile* device, with only EDGE or 3G connection (usually), you have small chunk of memory and CPU isn't big. All that leads to the fact that page probably is not loaded, or half-loaded by the time you switched back. True multitasking? Yeah... NO. &lt;p /&gt; So, this is just my personal take on this problem. Again, I was kind of dissapointed myself with the fact that "no multitasking" on those pretty iPhones and iPads, but by given a look from the different angle, and from the perspective of real use - I do not care that much, really. I have no doubt that once mobile devices catch up a little bit more with CPU speeds and energy use - magically Apple will bring multitasking on board. Till then.. I am fine without it. ;-) &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/my-thoughts-on-iphones-multitasking-issue-iph"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-7650250847646221075?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/DfgvkH7zOBE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/DfgvkH7zOBE/my-thoughts-on-iphone-multitasking.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>1</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/my-thoughts-on-iphone-multitasking.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-335467067474051721</guid><pubDate>Mon, 15 Mar 2010 00:28:00 +0000</pubDate><atom:updated>2010-03-14T17:28:45.554-07:00</atom:updated><title>this is how we make UIActivityIndicatorView work #iphone #sdk #objective-c (tiny tutorial)</title><description>&lt;div class='posterous_autopost'&gt;To begin with - I think it&amp;#39;s necessary to mention that I am not an expert in Objective-C, neither in iPhone SDK. I had some experience developing for mobile devices (Siemens, to be precise) like 8 years ago, and that was fun, but obviously it was nothing comparing to what apps nowadays can do.&lt;p /&gt;&lt;div&gt;This was an intro and disclaimer. &lt;/div&gt;&lt;p /&gt;&lt;div&gt;But this post is about &lt;span style="font-family: Menlo; font-size: 11px; color: rgb(128, 29, 173);"&gt;UIActivityIndicatorView&lt;/span&gt; and how we can make it work in our app. If you Google for this information you will find tons of questions and problems with this thing. It&amp;#39;s simple, just not that straightforward. I had to spend quite some time gathering all pieces from different resources to make it work, and later, to tweak to work in different situation. So, information described here will help you to get over those complications faster than I did.&lt;/div&gt; &lt;p /&gt;&lt;div&gt;So, let&amp;#39;s start. &lt;span style="font-family: Menlo; font-size: 11px; color: rgb(128, 29, 173);"&gt;UIActivityIndicatorView&lt;span style="color: rgb(0, 0, 0); font-family: arial; font-size: small;"&gt; is just a view (right, this rollin gear is just a view), so general idea is that we want to show it whenever our application is doing some time consuming operations. Good habit to let user know that he is not left alone, just on &amp;quot;hold&amp;quot;. :-)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;p /&gt;&lt;div&gt;Let&amp;#39;s do it this way -- starting from our controller&amp;#39;s .h file (same example on &lt;a href="http://pastie.org/869669"&gt;http://pastie.org/869669&lt;/a&gt;):&lt;/div&gt;&lt;p /&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt; &lt;span style="color: #d000a4;"&gt;@interface&lt;/span&gt; RootViewController : UIViewController {&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3c8288;"&gt;&lt;span style="color: rgb(128, 29, 173);"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;UIActivityIndicatorView&lt;span style="color: #000000;"&gt; *&lt;/span&gt;&lt;span style="color: #3c8288;"&gt;cLoadingView&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: #d000a4;"&gt;@property&lt;/span&gt; (&lt;span style="color: #d000a4;"&gt;nonatomic&lt;/span&gt;, &lt;span style="color: #d000a4;"&gt;retain&lt;/span&gt;) UIActivityIndicatorView *cLoadingView;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)initSpinner;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)spinBegin;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)spinEnd;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d000a4;"&gt;@end&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d000a4;"&gt;&lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d000a4;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d000a4;"&gt; &lt;span style="font-size: small;"&gt;Simplest case possible. We have three methods defined here. One is for initialization, and we will call it when controller will just load; other two to start and stop spinning. Easy, so our controller&amp;#39;s .m file will look like this (again, on &lt;a href="http://pastie.org/869680"&gt;http://pastie.org/869680&lt;/a&gt;):&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d000a4;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d000a4;"&gt; &lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt; &lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: #d000a4;"&gt;@implementation&lt;/span&gt; RootViewController&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: rgb(0, 0, 0); font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: #d000a4;"&gt;@synthesize&lt;/span&gt; cLoadingView;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;IBAction&lt;/span&gt;)doSomethingComplexAndTimeConsuming {&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;// this is how we start spinning&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt;&lt;span style="color: rgb(74, 0, 132);"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;[&lt;/span&gt;&lt;span style="color: #801dad;"&gt;NSThread&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;detachNewThreadSelector&lt;span style="color: #000000;"&gt;: &lt;/span&gt;&lt;span style="color: #d000a4;"&gt;@selector&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #215a5e;"&gt;spinBegin&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;toTarget&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;self&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;withObject&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;nil&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;// TODO: something very complex and time consuming&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt; &lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;// you can also add extra wait for the test (just uncomment line below)&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;//[NSThread sleepForTimeInterval:3];&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3c8288;"&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;// stop waiting...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4a0084;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;[&lt;/span&gt;&lt;span style="color: #801dad;"&gt;NSThread&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;detachNewThreadSelector&lt;span style="color: #000000;"&gt;: &lt;/span&gt;&lt;span style="color: #d000a4;"&gt;@selector&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #215a5e;"&gt;spinEnd&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;toTarget&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;self&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;withObject&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;nil&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #215a5e;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #215a5e;"&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;// TODO: continue with our application&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #215a5e;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;		&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)initSpinner {&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt;&lt;span style="color: rgb(74, 0, 132);"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #3c8288;"&gt;cLoadingView&lt;/span&gt;&lt;span style="color: #000000;"&gt; = [[[&lt;/span&gt;&lt;span style="color: #801dad;"&gt;UIActivityIndicatorView&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;alloc&lt;span style="color: #000000;"&gt;] &lt;/span&gt;initWithActivityIndicatorStyle&lt;span style="color: #000000;"&gt;:&lt;/span&gt;UIActivityIndicatorViewStyleWhiteLarge&lt;span style="color: #000000;"&gt;] &lt;/span&gt;autorelease&lt;span style="color: #000000;"&gt;];    &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;// we put our spinning &amp;quot;thing&amp;quot; right in the center of the current view&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;span style="color: #801dad;"&gt;CGPoint&lt;/span&gt; newCenter = (&lt;span style="color: #801dad;"&gt;CGPoint&lt;/span&gt;) [&lt;span style="color: #d000a4;"&gt;self&lt;/span&gt;.&lt;span style="color: #801dad;"&gt;view&lt;/span&gt; &lt;span style="color: #4a0084;"&gt;center&lt;/span&gt;];&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;span style="color: #3c8288;"&gt;cLoadingView&lt;/span&gt;.&lt;span style="color: #801dad;"&gt;center&lt;/span&gt; = newCenter;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #3c8288;"&gt;&lt;span style="color: #000000;"&gt;        [&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;self&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #801dad;"&gt;view&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #4a0084;"&gt;addSubview&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;cLoadingView&lt;span style="color: #000000;"&gt;];&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)spinBegin {&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4a0084;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;[&lt;/span&gt;&lt;span style="color: #3c8288;"&gt;cLoadingView&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;startAnimating&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)spinEnd {&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4a0084;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;[&lt;/span&gt;&lt;span style="color: #3c8288;"&gt;cLoadingView&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;stopAnimating&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008c00;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;- (&lt;span style="color: #d000a4;"&gt;void&lt;/span&gt;)viewDidLoad {&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #e50000;"&gt;&lt;span style="color: rgb(33, 90, 94);"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;[&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;self&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;initSpinner&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #4a0084;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;[&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;super&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;viewDidLoad&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="color: rgb(0, 0, 0); font-family: arial; font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style=""&gt;@end&lt;/p&gt;&lt;p style=""&gt; &lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p style=""&gt; &lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=""&gt; &lt;span style="font-size: small;"&gt;Simple, isn&amp;#39;t it? That really is trivial, and I thought most of the cases can be handled the same way. Unfortunately, when I wanted it to works fancier (I wanted the spinning gear to be in the navigation bar of my app) -- it brought me confusion on how this can be done. Just positioning up there? That&amp;#39;s a pain, and I never was able to make it work (frankly speaking :-). However, then, I realized other thing. Navigation bar has buttons! So, why wouldn&amp;#39;t we make our spinning gear a button? and this is what I did. It was really easy to do -- just tweaking our initSpinner method a little bit (on &lt;a href="http://pastie.org/869703"&gt;http://pastie.org/869703&lt;/a&gt;):&lt;/span&gt;&lt;/p&gt; &lt;p style=""&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;&lt;span style="font-family: arial; font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt; - (&lt;span style="color: rgb(208, 0, 164);"&gt;void&lt;/span&gt;)initSpinner {&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #e50000;"&gt;&lt;span style="color: rgb(74, 0, 132);"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;span style="color: rgb(60, 130, 136);"&gt;cLoadingView&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; = [[&lt;/span&gt;&lt;span style="color: #801dad;"&gt;UIActivityIndicatorView&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;alloc&lt;span style="color: #000000;"&gt;] &lt;/span&gt;initWithActivityIndicatorStyle&lt;span style="color: #000000;"&gt;:&lt;/span&gt;UIActivityIndicatorViewStyleWhite&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #801dad;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;UIBarButtonItem&lt;span style="color: #000000;"&gt; *activityButton = [[&lt;/span&gt;UIBarButtonItem&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #4a0084;"&gt;alloc&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #4a0084;"&gt;initWithCustomView&lt;/span&gt;&lt;span style="color: #000000;"&gt;:&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;span style="color: rgb(60, 130, 136);"&gt; cLoadingView&lt;/span&gt;];&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #801dad;"&gt;&lt;span style="color: #000000;"&gt;&lt;span class="Apple-tab-span" style=""&gt;	&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #d000a4;"&gt;self&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;navigationItem&lt;span style="color: #000000;"&gt;.&lt;/span&gt;rightBarButtonItem&lt;span style="color: #000000;"&gt; = activityButton;&lt;span class="Apple-tab-span" style=""&gt;		&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo;"&gt;}&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=""&gt; &lt;span style="font-size: small;"&gt;...&lt;/span&gt;&lt;/p&gt;&lt;p style=""&gt; &lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=""&gt; &lt;span style="font-size: small;"&gt;Simple. It&amp;#39;s all looks pretty simple when there is a working example, isn&amp;#39;t it? :-)&lt;/span&gt;&lt;/p&gt; &lt;p style=""&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style=""&gt;&lt;span style="font-size: small;"&gt;To crown it all, I would love to mention that Apple actually worked hard on making deep documentation available. And while they certainly limit developer with UI requirements and restrictions, they allow to build beautifully helpful and looking application very fast.&lt;/span&gt;&lt;/p&gt; &lt;p style=""&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;&lt;p style=""&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/this-is-how-we-make-uiactivityindicatorview-w"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-335467067474051721?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/kFrGDfuyg04" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/kFrGDfuyg04/this-is-how-we-make-uiactivityindicator.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/this-is-how-we-make-uiactivityindicator.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-4936690800180928900</guid><pubDate>Tue, 09 Mar 2010 03:41:00 +0000</pubDate><atom:updated>2010-03-08T19:41:34.331-08:00</atom:updated><title>My blackberry is sick of AT&amp;T :-( #att #fail #bis #nointernet #wtf</title><description>&lt;div class='posterous_autopost'&gt;So, whenever I am trying to access Internet on my Blackberry Bold -- I fail. Today. Usually it works somehow, but not today. Today, the only time I am getting emails, tweets, IMs on my Blackberry is when I am on WiFi. WTF? Only those three simple words. And question mark. Literally. AT&amp;amp;T claims nothing is wrong, but of course I can reboot/restart/pull out my battery dozen times, because they think this is what cures their network. I fucking doubt so. Now I understand why iPhone is such a success. It allows you to do more. Offline. Because AT&amp;amp;T doesn&amp;#39;t care that much if their network works. By the way -- AT&amp;amp;T -- You still owe me $150 which was a &amp;quot;mail-in&amp;quot; fucking &amp;quot;rebate&amp;quot; since I connected new landline and DSL more than a year ago. You know what your customer service is saying when I bother to call? Or yeah, our system is still processing it. You are fuckers, from bottom to the top. If you stealing money, please, at least close my eyes with some kind of service. I know I am swearing more than I should (it&amp;#39;s not me, really!), but I am just tired of paying big bucks for the company which pretend to provide service.  &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/my-blackberry-is-sick-of-atandt-att-fail-bis"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-4936690800180928900?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/QM0LAfu9Nyg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/QM0LAfu9Nyg/my-blackberry-is-sick-of-at-att-fail.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/my-blackberry-is-sick-of-at-att-fail.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-3847888522229039236</guid><pubDate>Sat, 06 Mar 2010 23:48:00 +0000</pubDate><atom:updated>2010-03-06T15:48:48.743-08:00</atom:updated><title>todos, gtd, tasks - yeah: @rememberthemilk #gtd #productivity #todo #rtm</title><description>&lt;div class='posterous_autopost'&gt;I am jumping off the &lt;i&gt;ToodleDo&lt;/i&gt; vagon and all into &lt;a href="http://www.rememberthemilk.com/"&gt;Remember The Milk&lt;/a&gt; + &lt;a href="http://www.rememberthemilk.com/services/milksync/blackberry/"&gt;MilkSync for Blackberry&lt;/a&gt; (and for the &lt;a href="http://www.rememberthemilk.com/services/iphone/app/"&gt;Remember The Milk App for the iPhone&lt;/a&gt; ;-) Why did I make this choice? Well, after few active days with &lt;i&gt;ToodleDo&lt;/i&gt; + &lt;i&gt;TaskJot&lt;/i&gt; I just see it&amp;#39;s not making it for me. Blackberry sync is really bad, goes out of sync very often; using non-native Tasks app gets on my nerves, etc. The whole UI of &lt;i&gt;ToodleDo&lt;/i&gt; unfortunatelly lacks the glare, and using it for managing more than one task drives me nuts. It certainly outperforms &lt;i&gt;Remember The Mil&lt;/i&gt;k in terms of features/stuff; but I find myself *not* using those features at all. It&amp;#39;s just the way I use it, so I believe your own experience will be different; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/todos-gtd-tasks-yeah-rememberthemilk-gtd-prod"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-3847888522229039236?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/ixtGLvGwohE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/ixtGLvGwohE/todos-gtd-tasks-yeah-rememberthemilk.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/todos-gtd-tasks-yeah-rememberthemilk.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-4914425283781536526</guid><pubDate>Thu, 04 Mar 2010 01:06:00 +0000</pubDate><atom:updated>2010-03-03T17:06:35.241-08:00</atom:updated><title>Starting self-improvement with your time management #selfimprovement #plusrated</title><description>&lt;div class='posterous_autopost'&gt;My strong belief is that everything is in your own hands. But you certainly can get lazy, and flow by the stream (like dead fish, and I promise you'll stink badly soon after that); the other option is to figure out missing pieces in your life or career and go reach for them. Frankly speaking, it's much easier to say than to do, but it's more than doable, so stop looking for excuses. &lt;p /&gt; To begin with, I should say that first step takes forever. Because it's hard. I've been in "self improving mode" like forever now. Since high school, I saw this as the only possible option to get up from where I was. It did work fine so far, but every step "up" was as hard as previous - and it still does not get any easier. But results are more rewarding, so it's well worth the "torture" ;-) &lt;p /&gt; There is one big problem. Always at least one, and always this one is the biggest. Time. You will always have tons to do at work, in personal life, family stuff, you'll feel lazy or/and exhausted, tired, under pressure, feeling lack of sleep, sick or many other "important" things. It's okay, as they are part of your life. Squeeze them and find part of the day you are wasting. There is always long or short part of the day been wasted. May be even few parts, minutes long, spreaded all over your day. "Self"-improvement? Let yourself improve your TIME first. &lt;p /&gt; So figure out how much you reasonably have. You certainly will see million things you might be doing in those "spare" parts, but truth is - you are NOT doing anything there now, that's why you see them as spare time, and you know that. It might be just few minutes, or even hours, but there are such parts of your life you are skipping. Realizing that you *have* this time is important. Now you just have to use it. If it's spreaded across the day - figure out what tools do you need to make good use of it. Is it iPhone/iPod touch/Kindle to read books or listen for podcasts, or go through visual tutorials? Go for it. Those devices are not cheap, but they help you. They can help you to fit your self improvement while you are in gym, or in the car, train, etc. But please, no toys on them. Don't even keep them there ;-) Or you'll get closer to be "dead fish" (see the paragraph right above). &lt;br /&gt;If you can figure out the bigger block of time - then you are in much better position - just mark this time in your calendar or in your todo list, desktop, or put sticky paper on your screen. Same way like you have time for your school, job, food, sleep - mark THIS time for your self improvement. Read, try, experiment - because you have this special time. Don't let it loose. It's not free time. It's not "tomorrow" time, or "other", or "weekend" time. Fuck tomorrow. Do it today for an hour. Every other day for half an hour. But it should be consistent. Don't allow yourself to lose attention, don't interrupt yourself. This time has it's own rules. You cannot skip it. It's like second (or third, fourth, ...) job. But it will be much more rewarding in all possible ways, my promise. &lt;p /&gt; In my current life I have interests besides of job, family and leisure. It's my self improvement. I am hold a stack of books with label "to read" and video podcasts "to watch". And I know when I'll be doing that. Almost every my day will have time for that. It's scheduled already. &lt;p /&gt; And one more important thing. Say, you are preparing for the exam, or studying to get better job, to ask for job promotion - anything like that. Anything when you are doing something but still waiting for something. Don't lie to yourself. This wait will last forever. And then some more. Stop it from the very beginning - just give yourself timeframe, limit yourself, set the final date. If you are not done - sorry - you may suck, you may fail, not get what you want. But you WILL know what you are missing, what you didn't do right, what exactly is not enough... That will help you to catch up with missing stuff in days, if not hours. &lt;br /&gt;Instead of waiting and just waiting for "the sign that you are ready". You ARE ready for something already. You don't know if you are NOT ready, because you didn't try. &lt;p /&gt; Not trying, not doing, not improving -- those are all synonims to WASTING YOUR LIFE. Is your life worth wasting? Is any even single minute of it NOT valuable? Try. Always try and do. &lt;p /&gt; I have bunch of other my tricks on spotting "lost" time in your day, etc., so I am thinking to do those posts on self improvement more often. Sometimes I feel like I am losing my track, too, so putting them "in writing", even if it is just for myself on my blog helps to gather my shit together. &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/starting-self-improvement-with-your-time-mana"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-4914425283781536526?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/PI_ltkvOuiY" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/PI_ltkvOuiY/starting-self-improvement-with-your.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/starting-self-improvement-with-your.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-8137494346552320075</guid><pubDate>Tue, 02 Mar 2010 07:49:00 +0000</pubDate><atom:updated>2010-03-01T23:49:05.167-08:00</atom:updated><title>Keeping it simple and getting things done #gtd #simple #todo #daily #productivity</title><description>&lt;div class='posterous_autopost'&gt;In attempt to increase my productivity I am jumping away from Google &lt;a href="http://www.google.com/calendar"&gt;Calendar&lt;/a&gt; to something more simple and actually more *productive*. Don&amp;#39;t get me wrong, I *do* use Google &lt;a href="http://www.google.com/apps/"&gt;Apps&lt;/a&gt; for personal email now and contacts, and was using Google &lt;a href="http://www.google.com/calendar"&gt;Calendar&lt;/a&gt; as well, but it just doesn&amp;#39;t keep me up-to-date very well. Why? Simple enough, it&amp;#39;s more a tool for &amp;quot;bookmarks&amp;quot; of events. Instead, my life is full of simple TODOs. Do this, do that, here and there. Daily todos. I need to be able to take a look of my todo list and see what&amp;#39;s there for today, and may be tomorrow, or if something is undone - how bad I delayed with it. Google &lt;a href="http://www.google.com/calendar"&gt;Calendar&lt;/a&gt; (and any other calendar) -- they show me today. If it&amp;#39;s tomorrow already, my yesterday&amp;#39;s events are in the past. Even if they are left undone. This doesn&amp;#39;t work well for me -- as I have to re-organize the calendar then. Which is time consuming. Means I am less productive. That&amp;#39;s why I decided to explore todo solutions which follow &lt;a href="http://en.wikipedia.org/wiki/Getting_Things_Done"&gt;GTD&lt;/a&gt; principle. So, my choice is &lt;a href="http://www.toodledo.com/"&gt;ToodleDo&lt;/a&gt; now in combination with &lt;a href="http://www.taskjot.com/"&gt;TaskJot Pro&lt;/a&gt;, which is a Blackberry application (&lt;a href="http://www.toodledo.com/"&gt;ToodleDo&lt;/a&gt; has also &lt;a href="http://www.toodledo.com/info/iphone.php"&gt;iPhone&lt;/a&gt; app, by the way). I do not expect too much from it, but it helps to accomplish my initial goal. I know there is also &lt;a href="http://www.rememberthemilk.com/"&gt;Remember The Milk&lt;/a&gt;, but it&amp;#39;s giving less and pushes about upgrading to Pro version much more actively than I would like to be pushed, so why bother?&lt;div&gt; So far so good, I actually feel an improvement of my daily process of following todos, so it&amp;#39;s the good thing.&lt;/div&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/keeping-it-simple-and-getting-things-done-gtd"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-8137494346552320075?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/dQtc970bpZ8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/dQtc970bpZ8/keeping-it-simple-and-getting-things.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/03/keeping-it-simple-and-getting-things.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-2753037033388517522</guid><pubDate>Mon, 01 Mar 2010 01:04:00 +0000</pubDate><atom:updated>2010-02-28T17:04:36.660-08:00</atom:updated><title>Blackberry comments for @alexmak Nexus One/iPhone review (russian) #blackberry #nexus #iphone</title><description>&lt;div class='posterous_autopost'&gt;&lt;p&gt;Давно я не писал в блог ничего на русском, и так же давно не писал никаких сравнительно-отмечающих моментов по поводу телефонов; Читателем моего ремарок давно известно что я не могу определиться с телефоном который я использую (между iPhone и Blackberry), посему прыгаю туда-сюда. Платформу Android я обходил, ибо выбор Google -- HTC я не особо люблю, после опыта с нескольими Win-базироваными телефонами HTC. Оно съело мне "мозок", точнее откровенно меня вынудило их возненавидеть. Не уверен что именно это было, но то что я HTC не люблю ни качеством железа, ни софта -- это точно, хотя возможно многое изменилось.&lt;/p&gt;  &lt;p&gt;К чем это все -- я недавно наткнулся на "Обзор Nexus One" (в трех частях - &lt;a href="http://alexmak.net/blog/2010/02/18/google-nexus-one-part1/"&gt;№1&lt;/a&gt;, №2 и &lt;a href="http://alexmak.net/blog/2010/02/26/google-nexus-one-p3/"&gt;№3&lt;/a&gt;) который сделал &lt;a href="http://twitter.com/alexmak"&gt;@alexmak&lt;/a&gt; (Alex Patsay), и если честно нашел его достаточно позновательным, и решил опять же прокомментировать его исклюительно для сравнения с Blackberry. Хотя я отлично понимаю что многие не рассматривают этот телефон как альтерантиву iPhone/Android. На то есть причины, и совершенно объективные, хотя, телефон - это не лаптоп, поэтому я его рассматриваю как телефон в первую очередь.&lt;/p&gt;  &lt;p&gt;Теперь по моим комментариям и сравнениям с Blackberry. Сразу отмечу, что использовал я несколько моделей, Blackberry &lt;a href="http://na.blackberry.com/eng/devices/blackberrybold/"&gt;Bold 9000&lt;/a&gt;&amp;nbsp;(который и использую сейчас повседневно),&amp;nbsp;&lt;a href="http://na.blackberry.com/eng/devices/blackberrycurve8900/"&gt;Curve 8900&lt;/a&gt; и &lt;a href="http://na.blackberry.com/eng/devices/blackberrybold9700/"&gt;Bold 9700&lt;/a&gt;. Так что более менее могу сравнивать за достаточно большой спектр моделей. И iPhone я использовал с самого их выпуска -- то есть с аллюминено-iPhone 2G, до iPhone 3GS.&lt;/p&gt;  &lt;p&gt;Качество сборки и железа -- достаточно высокое у Bold 9700, очень и очень близкое к iPhone 3GS, который можно сказать эталон для меня. Curve 8900 более бюджетная модель, так что качество сборки ок. Не супер, но и не откровенная дешевка. Bold 9000 мне нравится по многим фактором, но "целостность" телефона чувствуется меньше всего -- скорее из за его таковой конструкции. Слишком много слотов воокруг по телефону создают ощущение "lego" :-) Nexus One я бы поставил на уровень с 9700. Те же болезни - хочешь поменять SIM'карту -- будь добр, телефон отключай. Но не могу сказать что это big deal для меня - я их не меняю вообще :-)&lt;/p&gt;  &lt;p&gt;Трекбол в Nexus One меня убивает. Его делать было ужасно неразумно, при условии что Bold 9000 имеет такой же, и RIM за несколько лет "наевшись" с ним проблем -- перешло на trackpad'ы. Не понял смысла вообще, а если учитывая несуществующий customer service от Google для Nexus One -- это может быть огромный frustration пользователей через полгода, когда трекболы будут поголовно "портиться".&lt;/p&gt;  &lt;p&gt;Опять же не подлежит сравнению клавиатура и кнопки "активации" -- в Blackberry это любая (почти) кнопка :-) -- в Nexus One и iPhone их не так уж и много. Так что сравнивать тут нечего.&lt;/p&gt;  &lt;p&gt;По поводу "мигания трекбола" - это отличная вещь, аналог у которой в Blackberry "миллион лет" уже существует отдельный индикатор, наличия почты, сообщений, SMS, и тд -- это то что iPhone из за дизайна выбрасывают, но это безумно помогает. Когда привыкаешь - лишиться этого очень сложно.&lt;/p&gt;  &lt;p&gt;Батарея -- не сравнивал на long run Nexus One, но точно скажу что Bold 9000 и особенно Bold 9700 просто супер батареи. Лучше не встречал - и это с моим использованием. Не думаю что на рынке много телефонов способных их "побить".&lt;/p&gt;  &lt;p&gt;Программно -- мой Bold 9000 еще "ездит" на OS 4.6, а Bold 9700 на OS 5 -- которая несомненно более улучшенная, и в плане удобства, так и быстродействия. Мне трудно сравнить ее с iPhone, где интерфейс опять же эталон простоты, но Nexus One как и все остальные Android телефоны у меня вызывают неприязнь - ибо их UI весьма непродуман до конца. Ощущение что делать начали хорошо и тщательно, а закончить забыли, поэтому просто добавили все лишь бы где. В девайсах Blackberry по крайней мере как говорится в армии -- "хоть и безобразно, но однообразно". Я конечно преувеличиваю с безобразием, но там ты точно знаешь что сделает какая кнопка. Можно делать на ощупь. И быть увереным в результате. Проверенно УЙМУ раз.&lt;/p&gt;  &lt;p&gt;Менеджер задач - в Blackberry есть переключатель, но не менеджер. Обычно все приложения можно закрыть через меню самого приложения, убивать кого-то возможно и есть нужда, но я еще не встречал таких ситуаций хотя слышал что такое было на ранних телефонах RIM'а с слабыми процессорами. Лично я не встречал. Возможно потому что использую по больше части дефолтовые приложения, либо достаточно устоявшиеся (штук 5-6 разных). Опять же отмечу -- мои сравнения очень субъективны, потому что телефон для меня это в первую очередь телефон, которые должен хорошо делать коммуникации, почту, контакты, календарь. Броузинг - это бонус, красота которого меня волнует иногда, но редко, скорее информативность более важна. Игры вообще не волнуют. Так же как и fancy stupid things, как дурацкие приложения и прочее.&lt;/p&gt;  &lt;p&gt;Русский язык. Однако это головная боль Blackberry тоже. На Bold 9000 и Curve 8900 оно ставится достаточно просто из Desktop Manager, но для этого понятно надо USB'шкой прицепить к компьютеру, ибо по умолчанию телефоны в Штатах имеют Spanish, и тройку других языков, но не русский. Из плюсов их все можно прибить, и оставить только English и Russian (2 вида input, о них позже) -- и радоваться. Есть два вида ввода - первый это транслит -- смотришь на английские буквы, вводятся русские (пример "qwerty" это "яшерт", или "sdfghjkl" это "cдфгчьк") -- либо когда вводишь и используется их раскладка такая же как на клавиатуре. К сожалению второй метод трудный если не помнишь "на память" что "q" это "й", что "fgh" это "апр" и тд. Правда огромный минус Bold 9700 -- он будучи самым новым не имеет русского. По моей теории это потому что телефон еще не продается в страны где нужен русский и использует новую OS 5, но я могу ошибаться (хотя вряд ли). Поставить его туда можно, но это уже сложнее процесс, поэтому я его даже не рассматриваю.&lt;/p&gt;  &lt;p&gt;Blackberry быстрее для обычных задач, Быстрее набрать номер, пролистать или найти человека в телефонной книге, набрать номер броузя страницы или твиты, или же щелкнуть на ссылку или опять же набрать номер или кинуть SMS по номеру в календаре, и тд. В чем прогадывают и теряют клиента (меня конкретно) Apple и Google -- это в том что будучи воодушевлены борьбой они забыли что RIM "выехал" и выезжает построив сначала некрасивый девайс, но сделав почту абсолютным и самым важным компонентом on-the-go. Я отвечаю, forward, копирую и делаю много вещей с почтой на бегу, что iPhone мне не дает. Моя почта может быть объединена в один список писем, я могу настроить звонок для почты (нет смысла в push email если я ее не слышу). Я могу видеть сколько писем новых с момента последней проверки писем. И еще кучу "я могу", которые скорее видимо рассматриваются как "необязательные" фичи у Android и iPhone.&lt;/p&gt;  &lt;p&gt;Сервисы Google были более сложны в настройке на iPhone, на Blackberry это же Google Sync, Google Voice. Все, они интегрируются просто и спокойно, вися в background, и вообще не напоминая о себе (если не надо). Контакты, календарь, google voice кстати еще позволяет из меню телефона звонить на номер с помощью него, а так же бросить SMS с его помощью. Тут вообще не знаю что лучше - они прозрачны и ненавязчивы,&amp;nbsp;&lt;/p&gt;  &lt;p&gt;Скриншоты в Blackberry делают нетривиально -- но это даже не 10% от нетривиальности у Nexus One. Просто ставится бесплатно апликейшн (OTA конечно,&amp;nbsp;&lt;a href="http://m.thetechmogul.com/"&gt;http://m.thetechmogul.com/&lt;/a&gt;) Capture It! и спокойно щелкается.&lt;/p&gt;  &lt;p&gt;Настройка звуков и рингтонов у Blackberry самая удобная. Во первых делается во одном месте, во вторых использовать можно какие хочешь файлы, хочешь mp3, хочешь еще что. И настраивать можно почти для всего. (Пишу "почти" потому что наверняка для чего-то нельзя, хотя я на это еще не наталкивался :-)&lt;/p&gt;  &lt;p&gt;О приложениях для Blackberry мне нечего написать по двум причинам. Во первых их мало, во вторых мне много и не надо, и все что мне надо есть. Разработка приложенияй для Blackberry это совсем отдельная тема, которая скорее негативная, в плане incentives для разработчиков, а вернее -- их отсутствия.&lt;/p&gt;  &lt;p&gt;Вопрос - взял бы Я себе Nexus One ответ простой и даже без сомнения - НЕТ. Если бы я не пользовался Blackberry я бы пользовался iPhone 3GS, это даже без колебания.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via web&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/blackberry-comments-for-alexmak-nexus-oneipho"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-2753037033388517522?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/ZyJFlqwINFw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/ZyJFlqwINFw/blackberry-comments-for-alexmak-nexus.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/02/blackberry-comments-for-alexmak-nexus.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-6816748277135170600</guid><pubDate>Sun, 28 Feb 2010 21:36:00 +0000</pubDate><atom:updated>2010-02-28T13:36:19.059-08:00</atom:updated><title>Free QuickTime video/audio for #mac #bookmark</title><description>&lt;div class='posterous_autopost'&gt;Just as bookmark for myself (I tend not to like browser bookmarks, as they are pain to maintain on the long run, and I just want to be able to search-and-fine, instead of browse-and-select :-) -- the best open source free QuickTime component for Mac OS X which I found is Perian (&lt;a href="http://perian.org"&gt;http://perian.org&lt;/a&gt;). FTW! :-) real "swiss-army knife for QuickTime" &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/free-quicktime-videoaudio-for-mac-bookmark"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-6816748277135170600?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/pXTQIZMbHEU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/pXTQIZMbHEU/free-quicktime-videoaudio-for-mac.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/02/free-quicktime-videoaudio-for-mac.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-5323134230524811998</guid><pubDate>Sat, 20 Feb 2010 22:04:00 +0000</pubDate><atom:updated>2010-02-20T14:04:21.718-08:00</atom:updated><title>Happiness :-)</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/yZOD6HQKFeXGqFbsa1HTjWvt1jBaWD2MQcoQJfjj02He5yU9MGOWQNiFKopB/IMG00007-20100220-1401.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/lJAHxG5cgxVgSHqMWJiwixrlcE2ioVOuRI1nnlpiNgrvNWjq8fZNfOxwiwXn/IMG00007-20100220-1401.jpg.scaled.500.jpg" width="500" height="375"/&gt;&lt;/a&gt;  &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/happiness-505"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-5323134230524811998?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/92o0y-QZ930" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/92o0y-QZ930/happiness.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/02/happiness.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-3820894513425643535</guid><pubDate>Fri, 19 Feb 2010 05:52:00 +0000</pubDate><atom:updated>2010-02-18T21:52:13.090-08:00</atom:updated><title>Back on Blackberry (again 10x) #bb #blackberry #iphone</title><description>&lt;div class='posterous_autopost'&gt;I had to retire iPhone 3GS and return it back to my love @bazinia. I think she'll take good care of it. In my turn I am enjoying Blackberry again. (And I know @rwaldin knew this would happen :-) Frankly speaking, I just decided it's not worth it for me to keep it. I will wait until Apple will bring new iPhone which would be less of a game device but at least a little bit more of productivity booster. This time my tipping point was not keyboard (can really get used to touch-typing) or battery life (I have a bunch of wall/car chargers for this), but terribly slow email client and very inefficient access and operation with it and the calendar. &lt;br /&gt;So I either have to wait for Apple to fix it or do it myself the way I want :-) none of those options really seems to be happening in the nearest future so I'd stick to Blackberry for now. &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/back-on-blackberry-again-10x-bb-blackberry-ip"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-3820894513425643535?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/pr8Kd-DfkN0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/pr8Kd-DfkN0/back-on-blackberry-again-10x-bb.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/02/back-on-blackberry-again-10x-bb.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-2758194542998871525</guid><pubDate>Tue, 16 Feb 2010 19:59:00 +0000</pubDate><atom:updated>2010-02-16T11:59:09.068-08:00</atom:updated><title>very nice #poster #mindless</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/aippkPDa8c7KYhSHq4zVDBAVCAnVs3gQNhyk8GBXaWN19vvNa1ESVZu8zIK1/3086128569_40666bf7de_b.jpg.scaled.1000.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/inThUwe0KuJva30bwxjYUPIVNCCZ07USNrD4iQIovYRjL2uJK7NS4trbPz6O/3086128569_40666bf7de_b.jpg.scaled.500.jpg" width="500" height="642"/&gt;&lt;/a&gt;  &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/very-nice-poster-mindless"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-2758194542998871525?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/XyVKxH8IWeQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/XyVKxH8IWeQ/very-nice-poster-mindless.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/02/very-nice-poster-mindless.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-3979220758117634346</guid><pubDate>Sat, 13 Feb 2010 20:01:00 +0000</pubDate><atom:updated>2010-02-13T12:01:49.137-08:00</atom:updated><title>Nice ride!</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/alexeypro/9yK7T3FYeZFvZzi2V75vhCg0BNNz96kflU0GG6sMUc7ez1ZryaHMoAuFn3OG/photo.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/alexeypro/XKJSwl790HiSYYD4H6lqPGKhgfyHyECOMxr6XJAwjcJ7ndXrOex1qu7fK1G4/photo.jpg.scaled.500.jpg" width="500" height="667"/&gt;&lt;/a&gt;  &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/nice-ride-9"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-3979220758117634346?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/6paFwzNDhp4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/6paFwzNDhp4/nice-ride.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/02/nice-ride.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-482204588859817704</guid><pubDate>Sun, 31 Jan 2010 02:02:00 +0000</pubDate><atom:updated>2010-01-30T18:02:35.345-08:00</atom:updated><title>Matthew rides motorcycle...</title><description>&lt;div class='posterous_autopost'&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/westla7/D32OTpqlOeyUogQxiOI2OZGOnqBEYgdLfqOdI4QnIGWXCzMioesMAOvQOU5C/photo.jpg'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/westla7/x9Up7w2jfEiKGN4dek8nlsD59p7YzVmZyY5l7nm5w2sypvEdoa9MBO9DTd9h/photo.jpg.scaled.500.jpg" width="500" height="667"/&gt;&lt;/a&gt; &lt;p&gt;And I do not even have one (yet) ;-(&lt;/p&gt; &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/matthew-rides-motorcycle"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-482204588859817704?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/5QMK93eMd90" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/5QMK93eMd90/matthew-rides-motorcycle.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/01/matthew-rides-motorcycle.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-5328449827694437120</guid><pubDate>Fri, 29 Jan 2010 17:50:00 +0000</pubDate><atom:updated>2010-01-29T09:50:35.615-08:00</atom:updated><title>So, iPhone #again #why #blackberry #switched #ipadnano</title><description>&lt;div class='posterous_autopost'&gt;Everybody is writing about iPad this week, but I guess I want to be &lt;br /&gt;special and write about iPhone (again) and my 100x time switching from/ &lt;br /&gt;to Blackerry to/from iPhone. It is definitely a love-hate relationship &lt;br /&gt;between me and these devices. None of them is good enough to be 100% &lt;br /&gt;my device, and what it feels that I am getting tired of lousiness of &lt;br /&gt;each of them time to time. &lt;p /&gt; This time I am switching from Blackberry Bold 9700 (which was also &lt;br /&gt;known as Bold2) to my lovely wife's (&lt;a href="http://twitter.com/bazinia"&gt;http://twitter.com/bazinia&lt;/a&gt; hi!) &lt;br /&gt;iPhone 3GS. I don't think I should write again that Blackberries &lt;br /&gt;quality is less break-prone than iPhone's (total count of my returns/ &lt;br /&gt;exchanges of Blackberries I had is close to 10. Compare this to iPhone &lt;br /&gt;which I never had to repair/exchange since using 1G (the very first &lt;br /&gt;one), so I'll just concentrate on what I will and will NOT miss: &lt;p /&gt; I will miss: &lt;p /&gt; 1. Keyboard. Just forcing myself into virtual one, and I know that &lt;br /&gt;real keyboard is much better. &lt;br /&gt;2. Battery life. Crap, they need to sell extra wall adapter for iPhone &lt;br /&gt;and all other possible adapters to plug anywhere where you are. &lt;br /&gt;Because iPhone sucks with battery big time. &lt;br /&gt;3. LID which indicates new email/messages/whatever. Really helpful. I &lt;br /&gt;can just take a look at my device to know if there is something &lt;br /&gt;"inside". &lt;br /&gt;4. Customizable profiles and ringtones for everything. Never thought I &lt;br /&gt;will use them, but man, they are so convenient. &lt;br /&gt;5. Tethering. It's very easy on Blackberry, with Mac, over Bluetooth, &lt;br /&gt;which makes life easier and more portable. Loved it. iPhone? Tethe... &lt;br /&gt;what? Jailbreak only? Or cought out $60 on top we are paying already &lt;br /&gt;to greedy AT&amp;T? Yeah... NO. &lt;br /&gt;6. Multitasking. Didn't use it as much as I thought, that's why it's &lt;br /&gt;the last item on the list, but still. &lt;p /&gt; I guess that's it. Now, the list of what I WILL NOT miss: &lt;p /&gt; 1. Lack of Apps. I didn't think they are so useful but I am sporting &lt;br /&gt;like 20 apps (on iPhone, not games) now which actually *are* useful. &lt;br /&gt;2. Plasticish feel. It's the build quality of Blackberries. It's poor &lt;br /&gt;comparing to iPhone. Like really poor. &lt;br /&gt;3. Stupid BIS. What the fuck, really? No, RIM, really? At least 3 &lt;br /&gt;major problems in Northern America within 6 months? And that's &lt;br /&gt;reliable messaging device then? &lt;br /&gt;4. Browser. I wouldn't call it so. It's a laught on this word. It's a &lt;br /&gt;piece of crap which cannot be called browser. Multitasking to launch &lt;br /&gt;two browsing windows? No, impossible. And no need to tell me that I &lt;br /&gt;had to checkout Opera or Bolt, etc. Been there, done that. No. &lt;br /&gt;5. No two-way IMAP support. So, I've joined Blackberry world in 2009 &lt;br /&gt;and now it's 2010, and rumors about coming soon support are floating &lt;br /&gt;around I guess since 2005. Not happening. I guess it's a very terribly &lt;br /&gt;hard protocol to use. Or may be "corporate" business people do not &lt;br /&gt;care. On the other hand RIM has no problems developing it's Twitter &lt;br /&gt;client (like 5-10 exising ones are not good enough!) - so that means &lt;br /&gt;that they want to target business people who don't give a fuck about &lt;br /&gt;email support but all into tweeting. Hmmm... Nice breed. &lt;p /&gt; I didn't add a lot of stuff here. Like I was complaining before that &lt;br /&gt;Blackberry is more like a phone, but unfortunatelly they are becoming &lt;br /&gt;less and less, closer to iPhones, when dialing a number is one of the &lt;br /&gt;features, but not major product offering. Lags, etc. - they have it &lt;br /&gt;all. And bunch of other stuff. It all matches this or that way, so it &lt;br /&gt;does not matter. &lt;p /&gt; After all, sum it up an you'll see that phones are equal. One is &lt;br /&gt;equiped with nice features and other one has other. Both fucked up &lt;br /&gt;with flaws. But at the end it's all about what fits you the best, and &lt;br /&gt;in my case I guess I'll stick with iPhone for now. &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/so-iphone-again-why-blackberry-switched-ipadn"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt; &lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-5328449827694437120?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/2XP2VulKfYo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/2XP2VulKfYo/so-iphone-again-why-blackberry-switched.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2010/01/so-iphone-again-why-blackberry-switched.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-19850649.post-3151784212077008591</guid><pubDate>Sun, 20 Dec 2009 06:00:00 +0000</pubDate><atom:updated>2009-12-19T22:00:56.188-08:00</atom:updated><title>Fun with #ruby and #hbase for beginners.</title><description>This blog post is mostly educational for myself, as I am just trying to put my hands on HBase, so these are kind of &amp;quot;first steps&amp;quot; for anybody who never tried it before (like myself). My plan is to build simple application using HBase for storage (certainly, no expectations to make somehow &amp;quot;production ready&amp;quot;, but it will be using HBase, so it will be &amp;quot;scalable&amp;quot; :-) and describe all the steps right here.&lt;p /&gt; Let&amp;#39;s begin with simplest. I am using Mac OS X, so you either follow the same steps or adjust them for your OS. First - our lovely process of installing new toys. I assume that we all have Java already, so not covering that. Installing HBase -- download it from &lt;a href="http://hadoop.apache.org/hbase/"&gt;http://hadoop.apache.org/hbase/&lt;/a&gt; and then this is what I do:&lt;p /&gt; &lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:~ olexiy$ cd /usr/local/&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:local olexiy$ tar -zxvf ~/Desktop/hbase-0.20.2.tar.gz&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;...&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:local olexiy$ ln -sf hbase-0.20.2 hbase&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:local olexiy$ ls -al | grep hba&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;lrwxr-xr-x   1 olexiy  wheel   12 Dec  9 21:23 hbase -&amp;gt; hbase-0.20.2&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;drwxr-xr-x@ 16 olexiy  wheel  544 Nov 10 10:24 hbase-0.20.2&lt;/span&gt;&lt;p /&gt;It&amp;#39;s that simple and actually the second step is my own preference, just to create symlink, for my own convenience. Now, let&amp;#39;s verify that environment variables are set properly:&lt;p /&gt; &lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:~ olexiy$ echo $JAVA_HOME&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:~ olexiy$ echo $HBASE_HOME&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;/usr/local/hbase&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:~ olexiy$ echo $PATH&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;/opt/local/bin:/opt/local/sbin:/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin:/usr/local/hbase/bin:/usr/local/mysql/bin:/usr/local/maven/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin&lt;/span&gt;&lt;p /&gt; So far so good. But not enough - to do everything fast we want to cut corners -- we need to define JAVA_HOME in HBase&amp;#39;s conf:&lt;p /&gt;&lt;b&gt;o-macair:~ olexiy$ cat /usr/local/hbase/conf/hbase-env.sh  - grep JAVA_HOME&lt;/b&gt;&lt;br /&gt; export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home&lt;p /&gt;And also let&amp;#39;s check &amp;quot;System Preferences&amp;quot;, then &amp;quot;Sharing&amp;quot; and see if &amp;quot;Remote Login&amp;quot; is enabled. It should be, because it enables SSH which is required before we can launch HBase.&lt;p /&gt; Now we do have everything we want and need, so let&amp;#39;s move slightly forward. Now, we have a dilemma. What are we going to use for our application? Will it be Java or Ruby? I decided to stick to Ruby, as my test code will very simple, and not sure if I want to do (but have to agree - more natural choice) Java here.&lt;p /&gt; But the decision of which framework to use for Ruby is tough. I though to use Ruby&amp;#39;s HBase gem which is linked from HBase&amp;#39;s website. You can check it out here &lt;a href="http://github.com/sishen/hbase-ruby"&gt;http://github.com/sishen/hbase-ruby&lt;/a&gt;. But, I knew that there is also other gem created by guys from Rapleaf. Here is the original blog post I found &lt;a href="http://blog.rapleaf.com/dev/?p=16"&gt;http://blog.rapleaf.com/dev/?p=16&lt;/a&gt; and it gives a simple example of how gem could be used, but you&amp;#39;ll also see the &amp;quot;kind of&amp;quot; same example down below. At the end I found myself using third option &lt;a href="http://github.com/greglu/hbase-ruby/"&gt;http://github.com/greglu/hbase-ruby/&lt;/a&gt; which is an &amp;quot;official&amp;quot; gem modified to be used with HBase&amp;#39;s Stargate REST server. &lt;p /&gt; &lt;b&gt;o-macair:hbase-with-ruby-first-try olexiy$ sudo gem install hbase-ruby -s &lt;a href="http://gemcutter.org"&gt;http://gemcutter.org&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;Building native extensions.  This could take a while...&lt;br /&gt; Successfully installed json-1.2.0&lt;br /&gt;Successfully installed hbase-ruby-1.1.3&lt;br /&gt;2 gems installed&lt;br /&gt;Installing ri documentation for json-1.2.0...&lt;br /&gt;Installing ri documentation for hbase-ruby-1.1.3...&lt;br /&gt;Installing RDoc documentation for json-1.2.0...&lt;br /&gt; Installing RDoc documentation for hbase-ruby-1.1.3...&lt;p /&gt;Fast and simple. We seems like having just everything. Oh, sorry - I didn&amp;#39;t mention that I do have Ruby pre-installed with my Mac OS X:&lt;p /&gt;&lt;b&gt;o-macair:~ olexiy$ ruby -v&lt;/b&gt;&lt;br /&gt; ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]&lt;p /&gt;But I guess it&amp;#39;s not that important especially after we already installed HBase gem :-)&lt;p /&gt;So, what kind of application are we going to build, what do you think? Something scalable, big and certainly very new? May be next time. I decided to build something better. Like forum! :-) So, our requirements to the forum are the following:&lt;br /&gt; - It definitely needs to have user. Each user has name and email.&lt;br /&gt;- It should have topics for discussion. Each topic has name and actual description.&lt;br /&gt;- And we need comments. Each comment is posted by user for some topic and has the body of the comment.&lt;p /&gt; Disclaimer: please, I do understand that forum is simple, stupid and easy example. That&amp;#39;s why I chose it. And that&amp;#39;s why I do not care if you think RDBMS works better for this kind of application. It&amp;#39;s an example.&lt;p /&gt; Fairly simple, don&amp;#39;t you think? So, rolling our sleeves and here we go. We should start with reading documentation, though. Very helpful - &lt;a href="http://wiki.apache.org/hadoop/Hbase/DataModel"&gt;http://wiki.apache.org/hadoop/Hbase/DataModel&lt;/a&gt;, &lt;a href="http://wiki.apache.org/hadoop/Hbase/HbaseArchitecture"&gt;http://wiki.apache.org/hadoop/Hbase/HbaseArchitecture&lt;/a&gt; and short but nice reading &lt;a href="http://jimbojw.com/wiki/index.php?title=Understanding_HBase_and_BigTable"&gt;http://jimbojw.com/wiki/index.php?title=Understanding_HBase_and_BigTable&lt;/a&gt;. There is also basic BigTable document from Google &lt;a href="http://labs.google.com/papers/bigtable.html"&gt;http://labs.google.com/papers/bigtable.html&lt;/a&gt; but it&amp;#39;s well too dry and basic, so not sure I got from it anything useful. ;-) But I see necessary to suggest you going through &lt;object height="417" width="500"&gt; 	&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090713hbaseschemadesign-090713130051-phpapp01&amp;stripped_title=20090713-hbase-schema-design-case-studies" /&gt; 	&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt; 	&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20090713hbaseschemadesign-090713130051-phpapp01&amp;stripped_title=20090713-hbase-schema-design-case-studies" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" height="417" width="500"&gt;&lt;/embed&gt; &lt;/object&gt; which was a very helpful presentation for me.&lt;p /&gt; Before we even jump into coding we need to build storage structure. We have our requirements to the project listed above, so let&amp;#39;s think (in terms of HBase) what we need to have. As my background was mostly with RDBMS I am almost hundred percent sure I didn&amp;#39;t build the correct architecture for HBase, but what a heck, you learn from mistakes. ;-)&lt;p /&gt; Launch HBase:&lt;p /&gt;&lt;b&gt;o-macair:~ olexiy$ start-hbase.sh &lt;/b&gt;&lt;br /&gt;Password:&lt;br /&gt;localhost: starting zookeeper, logging to /usr/local/hbase/bin/../logs/hbase-olexiy-zookeeper-o-macair.out&lt;br /&gt; starting master, logging to /usr/local/hbase/bin/../logs/hbase-olexiy-master-o-macair.out&lt;br /&gt;Password:&lt;br /&gt;localhost: starting regionserver, logging to /usr/local/hbase/bin/../logs/hbase-olexiy-regionserver-o-macair.out&lt;p /&gt; Nice. My tiny Macbook Air feels so powerful now, when it&amp;#39;s running HBase. Just kidding :-) To create tables and stuff we want to use HBase Shell &lt;a href="http://wiki.apache.org/hadoop/Hbase/Shell"&gt;http://wiki.apache.org/hadoop/Hbase/Shell&lt;/a&gt; - tiny tool, but it helps to get things going faster.&lt;p /&gt; Let&amp;#39;s begin doing that one by one. So, we want table &amp;quot;userstable&amp;quot;. &lt;p /&gt;&lt;b&gt;o-macair:~ olexiy$ hbase shell&lt;/b&gt;&lt;br /&gt;HBase Shell; enter &amp;#39;help&amp;lt;RETURN&amp;gt;&amp;#39; for list of supported commands.&lt;br /&gt; Version: 0.20.2, r834515, Tue Nov 10 10:07:05 PST 2009&lt;br /&gt;&lt;b&gt;hbase(main):001:0&amp;gt;&lt;/b&gt; create &amp;#39;userstable&amp;#39;, {NAME =&amp;gt; &amp;#39;maininfo&amp;#39;}, {NAME =&amp;gt; &amp;#39;additionalinfo&amp;#39;}&lt;br /&gt;...&lt;br /&gt;0 row(s) in 6.2910 seconds&lt;br /&gt; &lt;b&gt;hbase(main):002:0&amp;gt;&lt;/b&gt; scan &amp;#39;userstable&amp;#39;&lt;br /&gt;09/12/13 14:38:56 DEBUG client.HConnectionManager$TableServers: Cached location address: &lt;a href="http://192.168.1.64:64336"&gt;192.168.1.64:64336&lt;/a&gt;, regioninfo: REGION =&amp;gt; {NAME =&amp;gt; &amp;#39;userstable,,1260743863388&amp;#39;, STARTKEY =&amp;gt; &amp;#39;&amp;#39;, ENDKEY =&amp;gt; &amp;#39;&amp;#39;, ENCODED =&amp;gt; 619697624, TABLE =&amp;gt; {{NAME =&amp;gt; &amp;#39;userstable&amp;#39;, FAMILIES =&amp;gt; [{NAME =&amp;gt; &amp;#39;additionalinfo&amp;#39;, COMPRESSION =&amp;gt; &amp;#39;NONE&amp;#39;, VERSIONS =&amp;gt; &amp;#39;3&amp;#39;, TTL =&amp;gt; &amp;#39;2147483647&amp;#39;, BLOCKSIZE =&amp;gt; &amp;#39;65536&amp;#39;, IN_MEMORY =&amp;gt; &amp;#39;false&amp;#39;, BLOCKCACHE =&amp;gt; &amp;#39;true&amp;#39;}, {NAME =&amp;gt; &amp;#39;maininfo&amp;#39;, COMPRESSION =&amp;gt; &amp;#39;NONE&amp;#39;, VERSIONS =&amp;gt; &amp;#39;3&amp;#39;, TTL =&amp;gt; &amp;#39;2147483647&amp;#39;, BLOCKSIZE =&amp;gt; &amp;#39;65536&amp;#39;, IN_MEMORY =&amp;gt; &amp;#39;false&amp;#39;, BLOCKCACHE =&amp;gt; &amp;#39;true&amp;#39;}]}}&lt;br /&gt; 09/12/13 14:38:56 DEBUG client.HTable$ClientScanner: Creating scanner over userstable starting at key &amp;#39;&amp;#39;&lt;br /&gt;09/12/13 14:38:56 DEBUG client.HTable$ClientScanner: Advancing internal scanner to startKey at &amp;#39;&amp;#39;&lt;br /&gt; 09/12/13 14:38:56 DEBUG client.HConnectionManager$TableServers: Cache hit for row &amp;lt;&amp;gt; in tableName userstable: location server &lt;a href="http://192.168.1.64:64336"&gt;192.168.1.64:64336&lt;/a&gt;, location region name userstable,,1260743863388&lt;br /&gt; ROW                          COLUMN+CELL                                                                      &lt;br /&gt;09/12/13 14:38:56 DEBUG client.HTable$ClientScanner: Finished with scanning at REGION =&amp;gt; {NAME =&amp;gt; &amp;#39;userstable,,1260743863388&amp;#39;, STARTKEY =&amp;gt; &amp;#39;&amp;#39;, ENDKEY =&amp;gt; &amp;#39;&amp;#39;, ENCODED =&amp;gt; 619697624, TABLE =&amp;gt; {{NAME =&amp;gt; &amp;#39;userstable&amp;#39;, FAMILIES =&amp;gt; [{NAME =&amp;gt; &amp;#39;additionalinfo&amp;#39;, COMPRESSION =&amp;gt; &amp;#39;NONE&amp;#39;, VERSIONS =&amp;gt; &amp;#39;3&amp;#39;, TTL =&amp;gt; &amp;#39;2147483647&amp;#39;, BLOCKSIZE =&amp;gt; &amp;#39;65536&amp;#39;, IN_MEMORY =&amp;gt; &amp;#39;false&amp;#39;, BLOCKCACHE =&amp;gt; &amp;#39;true&amp;#39;}, {NAME =&amp;gt; &amp;#39;maininfo&amp;#39;, COMPRESSION =&amp;gt; &amp;#39;NONE&amp;#39;, VERSIONS =&amp;gt; &amp;#39;3&amp;#39;, TTL =&amp;gt; &amp;#39;2147483647&amp;#39;, BLOCKSIZE =&amp;gt; &amp;#39;65536&amp;#39;, IN_MEMORY =&amp;gt; &amp;#39;false&amp;#39;, BLOCKCACHE =&amp;gt; &amp;#39;true&amp;#39;}]}}&lt;br /&gt; 0 row(s) in 0.0170 seconds&lt;br /&gt;&lt;b&gt;hbase(main):003:0&amp;gt;&lt;/b&gt;&lt;p /&gt;That&amp;#39;s quite a thing we did. Let&amp;#39;s cover everything line by line. So our first command was:&lt;p /&gt; create &amp;#39;userstable&amp;#39;, { NAME =&amp;gt; &amp;#39;maininfo&amp;#39; }, { NAME =&amp;gt; &amp;#39;additionalinfo&amp;#39; }&lt;p /&gt;In HBase Shell this means -- create table with name &amp;#39;userstable&amp;#39; which has two column families &amp;#39;maininfo&amp;#39; and &amp;#39;additionalinfo&amp;#39;. Those two families - if we put it in simple words - is like predefined list of &amp;quot;columns structure&amp;quot;. I.e. in our case we intend to keep &amp;quot;full name&amp;quot; and &amp;quot;password&amp;quot; in &amp;#39;maininfo&amp;#39;, and &amp;quot;city&amp;quot; and &amp;quot;state&amp;quot; in &amp;#39;additionalinfo&amp;#39;. So, it&amp;#39;s for our organizing of things.&lt;p /&gt; Next useful line is:&lt;p /&gt;scan &amp;#39;userstable&amp;#39;&lt;p /&gt;Which gives us everything about and from this table. We did it to be sure that our tables is really here, and certainly it yet has nothing inside. Let&amp;#39;s fix that, and fill our table with some data:&lt;p /&gt; &lt;b&gt;hbase(main):004:0&amp;gt;&lt;/b&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;maininfo:fullname&amp;#39;, &amp;#39;Olexiy Prokhorenko&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):005:0&amp;gt;&lt;/b&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;maininfo:email&amp;#39;, &amp;#39;&lt;a href="mailto:olexiy@prokhorenko.us"&gt;olexiy@prokhorenko.us&lt;/a&gt;&amp;#39;     &lt;br /&gt; &lt;b&gt;hbase(main):006:0&amp;gt;&lt;/b&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;maininfo:password&amp;#39;, &amp;#39;zup3rpazzv0rd&amp;#39;     &lt;br /&gt;&lt;b&gt;hbase(main):007:0&amp;gt;&lt;/b&gt; get &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;&lt;br /&gt; ...&lt;br /&gt;COLUMN                       CELL                                                                             &lt;br /&gt; maininfo:email              timestamp=1260756864019, value=&lt;a href="mailto:olexiy@prokhorenko.us"&gt;olexiy@prokhorenko.us&lt;/a&gt;                             &lt;br /&gt;  maininfo:fullname           timestamp=1260756857570, value=Olexiy Prokhorenko                                &lt;br /&gt; maininfo:password           timestamp=1260756870079, value=zup3rpazzv0rd                                     &lt;br /&gt; 3 row(s) in 0.6730 seconds&lt;p /&gt;Again, step by step explanation. First important line:&lt;p /&gt;put &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;maininfo:fullname&amp;#39;, &amp;#39;Olexiy Prokhorenko&amp;#39;&lt;p /&gt; So we save record in table &amp;#39;userstable&amp;#39;, for row with key &amp;#39;20091213093540&amp;#39; (in a second more details why it is so ugly), to &amp;#39;maininfo&amp;#39; section into column &amp;#39;fullname&amp;#39; my full name, which is Olexiy Prokhorenko. ID (or row key) for every user (and actually topic, etc. -- we will keep same idea everywhere) is some kind of timestamp -- YYYYMMYYhhmmss - simple enough to keep, and will work pretty fine unless we get users created more often than every second.&lt;p /&gt; Second line and third line:&lt;p /&gt;put &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;maininfo:email&amp;#39;, &amp;#39;&lt;a href="mailto:olexiy@prokhorenko.us"&gt;olexiy@prokhorenko.us&lt;/a&gt;&amp;#39;     &lt;br /&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;maininfo:password&amp;#39;, &amp;#39;zup3rpazzv0rd&amp;#39;&lt;p /&gt;Is the same, except that we save the email and password.&lt;br /&gt;Third line actually gives us more warm feeling of filling table:&lt;p /&gt; &lt;b&gt;hbase(main):008:0&amp;gt;&lt;/b&gt; get &amp;#39;userstable&amp;#39;, &amp;#39;20091213093540&amp;#39;&lt;p /&gt;Our table knows about our user &amp;#39;&lt;a href="mailto:olexiy@prokhorenko.us"&gt;olexiy@prokhorenko.us&lt;/a&gt;&amp;#39;!!! Woo-hoo! How cool is that?&lt;p /&gt; Now, as we are getting more comfortable, let&amp;#39;s create table for topics and fill it with couple records (please note, that output of commands is eliminated for convenience) - and note -- that we also creating one more user (with very bad password :-), to make our life more interesting!&lt;p /&gt; &lt;b&gt;hbase(main):009:0&amp;gt;&lt;/b&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213120030&amp;#39;, &amp;#39;maininfo:fullname&amp;#39;, &amp;#39;John Axe&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):010:0&amp;gt;&lt;/b&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213120030&amp;#39;, &amp;#39;maininfo:email&amp;#39;, &amp;#39;&lt;a href="mailto:westla7@gmail.com"&gt;westla7@gmail.com&lt;/a&gt;&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):011:0&amp;gt;&lt;/b&gt; put &amp;#39;userstable&amp;#39;, &amp;#39;20091213120030&amp;#39;, &amp;#39;maininfo:password&amp;#39;, &amp;#39;john&amp;#39;&lt;p /&gt;Okay, another user created.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;hbase(main):012:0&amp;gt;&lt;/b&gt; create &amp;#39;topicstable&amp;#39;, { NAME =&amp;gt; &amp;#39;content&amp;#39; }  &lt;br /&gt; &lt;b&gt;hbase(main):013:0&amp;gt;&lt;/b&gt; put &amp;#39;topicstable&amp;#39;, &amp;#39;20091213161745&amp;#39;, &amp;#39;content:name&amp;#39;, &amp;#39;Blackberry Bold 9700&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):014:0&amp;gt;&lt;/b&gt; put &amp;#39;topicstable&amp;#39;, &amp;#39;20091213161745&amp;#39;, &amp;#39;content:description&amp;#39;, &amp;#39;Discussion about Blackberry Bold 9700 and probably all other Blackberry phones.&amp;#39;&lt;p /&gt; Now, we created &amp;#39;topicstable&amp;#39;, where we keep the content. ID for row key is the same idea as above.&lt;p /&gt;&lt;b&gt;hbase(main):015:0&amp;gt;&lt;/b&gt; create &amp;#39;commentstable&amp;#39;, { NAME =&amp;gt; &amp;#39;content&amp;#39; }, { NAME =&amp;gt; &amp;#39;postinginfo&amp;#39; } &lt;br /&gt; &lt;b&gt;hbase(main):016:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213120030-20091213172000&amp;#39;, &amp;#39;content:body&amp;#39;, &amp;#39;Hey, my first comment!&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):017:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213120030-20091213172000&amp;#39;, &amp;#39;postinginfo:author&amp;#39;, &amp;#39;20091213120030&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):018:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213120030-20091213172000&amp;#39;, &amp;#39;postinginfo:topic&amp;#39;, &amp;#39;20091213161745&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):019:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213120030-20091213172000&amp;#39;, &amp;#39;postinginfo:replyto&amp;#39;, &amp;#39;&amp;#39;&lt;p /&gt; Almost same here. We create &amp;#39;commentstable&amp;#39;, which keeps the comments. It knows the author and the topic it was posted it, as well it keeps a track if this comment is reply to some other reply with &amp;#39;postinginfo:replyto&amp;#39;. Please note, I decided to user composite row key for comments. First part of it (before - sign) is topic ID, and the second part is user&amp;#39;s ID, and then the actual comment ID. In this case we pretty much sure until some topic is getting comments by same user more often than once a second - we are fine.&lt;p /&gt; &lt;b&gt;hbase(main):020:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221000&amp;#39;, &amp;#39;content:body&amp;#39;, &amp;#39;I can comment on your comment!&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):021:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221000&amp;#39;, &amp;#39;postinginfo:author&amp;#39;, &amp;#39;20091213093540&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):022:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221000&amp;#39;, &amp;#39;postinginfo:topic&amp;#39;, &amp;#39;20091213161745&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):023:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221000&amp;#39;, &amp;#39;postinginfo:replyto&amp;#39;, &amp;#39;20091213161745-20091213120030-20091213172000&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):024:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221250&amp;#39;, &amp;#39;content:body&amp;#39;, &amp;#39;And I can leave my own comment on topic...&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):025:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221250&amp;#39;, &amp;#39;postinginfo:author&amp;#39;, &amp;#39;20091213093540&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):026:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221250&amp;#39;, &amp;#39;postinginfo:topic&amp;#39;, &amp;#39;20091213161745&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):027:0&amp;gt;&lt;/b&gt; put &amp;#39;commentstable&amp;#39;, &amp;#39;20091213161745-20091213093540-20091213221250&amp;#39;, &amp;#39;postinginfo:replyto&amp;#39;, &amp;#39;&amp;#39;&lt;p /&gt;So we dropped in two more comments by our first user. Everything looks kind of fun, we have everything we need, but let&amp;#39;s think how we fulfill those two requirements:&lt;br /&gt; 1. Allow to see all comments by user?&lt;br /&gt;2. Allow to see all comments on topic?&lt;p /&gt;First thing comes to my mind is using normal &amp;#39;scan&amp;#39;. Here we go:&lt;p /&gt;&lt;b&gt;hbase(main):028:0&amp;gt;&lt;/b&gt; scan &amp;#39;commentstable&amp;#39;, { STARTROW =&amp;gt; &amp;#39;20091213161745-&amp;#39;, STOPROW =&amp;gt; &amp;#39;20091213161745-99999999999999-99999999999999&amp;#39; }&lt;p /&gt; Will give us all comments on topic.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;hbase(main):029:0&amp;gt;&lt;/b&gt; scan &amp;#39;commentstable&amp;#39;, { STARTROW =&amp;gt; &amp;#39;20091213161745-20091213120030-&amp;#39;, STOPROW =&amp;gt; &amp;#39;20091213161745-20091213120030-99999999999999&amp;#39; }&lt;p /&gt; This helps us to see all comments by user for specific topic. As you can tell -20091213120030- is a part where we mention ID of user with email &amp;#39;&lt;a href="mailto:westla7@gmail.com"&gt;westla7@gmail.com&lt;/a&gt;&amp;#39;. &lt;br /&gt; We still have left one unresolved problem. How do we show all comments by user? We may create the same scan, but do the first part from 00000000000000-... to 99999999999999-..., and then filter out all entries with our user ID, but that does not sound too nice. I do not really like this solution, frankly speaking. It&amp;#39;s neither scalable nor pretty.&lt;p /&gt; So, don&amp;#39;t you think that we can create referral table? Say something like the following:&lt;p /&gt;&lt;b&gt;hbase(main):030:0&amp;gt;&lt;/b&gt; create &amp;#39;usersreferencestable&amp;#39;, { NAME =&amp;gt; &amp;#39;comment&amp;#39; }&lt;p /&gt; And imagine that when we created comments we also for every comment added:&lt;p /&gt;&lt;b&gt;hbase(main):031:0&amp;gt;&lt;/b&gt; put &amp;#39;usersreferencestable&amp;#39;, &amp;#39;20091213120030&amp;#39;, &amp;#39;comment:20091213161745-20091213120030-20091213172000&amp;#39;, &amp;#39;20091213161745&amp;#39;&lt;br /&gt; &lt;b&gt;hbase(main):032:0&amp;gt;&lt;/b&gt; put &amp;#39;usersreferencestable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;comment:20091213161745-20091213093540-20091213221250&amp;#39;, &amp;#39;20091213161745&amp;#39;&lt;br /&gt;&lt;b&gt;hbase(main):033:0&amp;gt;&lt;/b&gt; put &amp;#39;usersreferencestable&amp;#39;, &amp;#39;20091213093540&amp;#39;, &amp;#39;comment:20091213161745-20091213093540-20091213221000&amp;#39;, &amp;#39;20091213161745&amp;#39;&lt;p /&gt; Yes, that&amp;#39;s totally a denormalization of data, keeping it same, but let&amp;#39;s see. Now to get all comments for user with email &amp;#39;&lt;a href="mailto:olexiy@prokhorenko.us"&gt;olexiy@prokhorenko.us&lt;/a&gt;&amp;#39; which ID is 20091213093540 we do simple:&lt;p /&gt; &lt;b&gt;hbase(main):034:0&amp;gt;&lt;/b&gt; get &amp;#39;usersreferencestable&amp;#39;, &amp;#39;20091213093540&amp;#39;&lt;br /&gt;09/12/13 23:55:34 DEBUG client.HConnectionManager$TableServers: Cache hit for row &amp;lt;&amp;gt; in tableName usersreferencestable: location server &lt;a href="http://192.168.1.64:64336"&gt;192.168.1.64:64336&lt;/a&gt;, location region name usersreferencestable,,1260777299770&lt;br /&gt; COLUMN                       CELL                                                                             &lt;br /&gt; comment:20091213161745-2009 timestamp=1260777318126, value=20091213161745                                    &lt;br /&gt;  1213093540-20091213221000                                                                                    &lt;br /&gt; comment:20091213161745-2009 timestamp=1260777312319, value=20091213161745                                    &lt;br /&gt;  1213093540-20091213221250                                                                                    &lt;br /&gt;2 row(s) in 0.0120 seconds&lt;p /&gt;And get as result ID of comment as part of the column name, and actually the value will be the topic ID, which we may want to use for easier access. Totally makes us happy.&lt;p /&gt; At this point we have our database created, filled with data, so let&amp;#39;s try and create some Ruby application to do what we need - list topics, list comments to this topic, and list comments by user (you can use &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try/blob/master/hbase-shell-execute.txt"&gt;http://github.com/westla7/hbase-with-ruby-first-try/blob/master/hbase-shell-execute.txt&lt;/a&gt; to run all the commands mentioned above).&lt;p /&gt; By the way, or Ruby application will be accessing the HBase with the help of REST API, which server supports. However, you need to remember to start REST server first -- so do:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:~ olexiy$ hbase rest start&lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;Starting restServer&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;2009-12-17 21:20:46.886::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;2009-12-17 21:20:46.973::INFO:  jetty-6.1.14&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;2009-12-17 21:20:47.866::INFO:  Started &lt;a href="http://SocketConnector@0.0.0.0:60050"&gt;SocketConnector@0.0.0.0:60050&lt;/a&gt;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;...&lt;/span&gt;&lt;p /&gt;But as I am using &lt;a href="http://github.com/greglu/hbase-ruby/"&gt;http://github.com/greglu/hbase-ruby/&lt;/a&gt; gem which is for Stargate server, we need to launch that one -- and it&amp;#39;ll take a little bit more of the efforts:&lt;br /&gt; &lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;o-macair:~ olexiy$ cd /usr/local/hbase&lt;/b&gt;&lt;br /&gt;&lt;b&gt;o-macair:hbase olexiy$ cp contrib/stargate/hbase-*-stargate.jar lib/&lt;br /&gt;o-macair:hbase olexiy$ cp contrib/stargate/lib/* lib/&lt;/b&gt;&lt;p /&gt; And now we launching the server:&lt;p /&gt;&lt;b&gt;o-macair:~ olexiy$ hbase org.apache.hadoop.hbase.stargate.Main&lt;/b&gt;&lt;br /&gt;2009-12-19 19:31:47.827::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog&lt;br /&gt; 2009-12-19 19:31:47.886::INFO:  jetty-6.1.14&lt;br /&gt;2009-12-19 19:31:48.183::INFO:  Started &lt;a href="http://SocketConnector@0.0.0.0:8080"&gt;SocketConnector@0.0.0.0:8080&lt;/a&gt;&lt;br /&gt;...&lt;p /&gt;And keep it open or throw to background, whatever you prefer.&lt;p /&gt; Now, point your browsers to &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try"&gt;http://github.com/westla7/hbase-with-ruby-first-try&lt;/a&gt; and check out the code.&lt;p /&gt;We begin with &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try/blob/master/load_user.rb"&gt;http://github.com/westla7/hbase-with-ruby-first-try/blob/master/load_user.rb&lt;/a&gt; which is a script to load user, and say &amp;quot;Hello&amp;quot; to it. Showing that we can very easily access user&amp;#39;s data and manipulate it.&lt;p /&gt; But loading is not enough, so next will go &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try/blob/master/load_save_user.rb"&gt;http://github.com/westla7/hbase-with-ruby-first-try/blob/master/load_save_user.rb&lt;/a&gt;, which now can create user object and save it into HBase. Which gives us much more power.&lt;br /&gt; Once you run it you&amp;#39;ll get user created with the ID shown in the output.&lt;br /&gt;By the way, if you don&amp;#39;t like it, feel free to:&lt;p /&gt;&lt;b&gt;hbase(main):035:0&amp;gt;&lt;/b&gt; deleteall &amp;#39;userstable&amp;#39;, &amp;#39;20091219103439&amp;#39;&lt;p /&gt; (where &amp;#39;20091219103439&amp;#39; is your created user ID, which you saw in the output)&lt;p /&gt;But we are not going to stop on this. What we want now, is to get list of all users and topics we have. Open &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try/blob/master/list_data.rb"&gt;http://github.com/westla7/hbase-with-ruby-first-try/blob/master/list_data.rb&lt;/a&gt; and you can get an understanding how we can get list of topics we have.&lt;p /&gt; Last, but not least - we are moving ahead to the simplest use case possible for our application. We want to list all the topics, and then list all of comments to every topic, and also user name, who posted each comment. Sounds big &amp;#39;n crazy? Not really. Run &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try/blob/master/complete_list.rb"&gt;http://github.com/westla7/hbase-with-ruby-first-try/blob/master/complete_list.rb&lt;/a&gt; and enjoy:&lt;p /&gt; &lt;b&gt;&lt;span style="font-family: courier new,monospace;"&gt;o-macair:hbase-with-ruby-first-try olexiy$ ruby complete_list.rb &lt;/span&gt;&lt;/b&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;&amp;quot;Blackberry Bold 9700&amp;quot;: Discussion about Blackberry Bold 9700 and probably all other Blackberry phones.&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;   Olexiy Prokhorenko: I can comment on your comment! (reply to: Hey, my first comment!)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt;&lt;span style="font-family: courier new,monospace;"&gt;   Olexiy Prokhorenko: And I can leave my own comment on topic...&lt;/span&gt;&lt;br style="font-family: courier new,monospace;" /&gt; &lt;span style="font-family: courier new,monospace;"&gt;   John Axe: Hey, my first comment!&lt;/span&gt;&lt;p /&gt;And - finally, for the sake of &amp;#39;usersreferencestable&amp;#39;, which I created and didn&amp;#39;t use -- here is an example how it&amp;#39;s possible to show comments by users. As for me - it looks better, but a little bit more wordy - &lt;a href="http://github.com/westla7/hbase-with-ruby-first-try/blob/master/other_complete_list.rb"&gt;http://github.com/westla7/hbase-with-ruby-first-try/blob/master/other_complete_list.rb&lt;/a&gt;&lt;p /&gt; &lt;b&gt;o-macair:hbase-with-ruby-first-try olexiy$ ruby other_complete_list.rb&lt;/b&gt;&lt;br /&gt;User &amp;quot;Olexiy Prokhorenko&amp;quot; says: &lt;br /&gt;   I can comment on your comment!&lt;br /&gt;    And I can leave my own comment on topic...&lt;p /&gt;User &amp;quot;John Axe&amp;quot; says: &lt;br /&gt;   Hey, my first comment!&lt;p /&gt;User &amp;quot;Test User&amp;quot; says: &lt;br /&gt;   (nothing, 0 comments)&lt;p /&gt;On this note I should say that I hope that gave you some overview of what you can do with HBase, and may be in general, what &amp;quot;key-value NOSQL&amp;quot; storages can bring to you. There is some headache, and obviously redundancy of data, but it helps to accomplish numerous other things. Before that it was all upon the SQL, now it&amp;#39;s all about your code (again :-) &lt;p style="font-size: 10px;"&gt; &lt;a href="http://posterous.com"&gt;Posted via email&lt;/a&gt;  from &lt;a href="http://a.prokhorenko.us/fun-with-ruby-and-hbase-for-beginners"&gt;olexiy prokhorenko's blog&lt;/a&gt; &lt;/p&gt;   &lt;div class="blogger-post-footer"&gt;&lt;br/&gt;&lt;br/&gt;Olexiy (Alexey) Prokhorenko: &lt;a href="http://prokhorenko.us/a"&gt;Homepage&lt;/a&gt; |
&lt;a href="http://atalks.prokhorenko.us/"&gt;Blog&lt;/a&gt; | 
&lt;a href="http://www.linkedin.com/in/alexqwe"&gt;LinkedIn&lt;/a&gt; | 
&lt;a href="http://www.twitter.com/alexqwe"&gt;Twitter&lt;/a&gt; |&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19850649-3151784212077008591?l=atalks.prokhorenko.us' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/alexqwe/~4/9YmjdmntijM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/alexqwe/~3/9YmjdmntijM/fun-with-ruby-and-hbase-for-beginners.html</link><author>noreply@blogger.com (Olexiy Prokhorenko)</author><thr:total>0</thr:total><feedburner:origLink>http://atalks.prokhorenko.us/2009/12/fun-with-ruby-and-hbase-for-beginners.html</feedburner:origLink></item></channel></rss>

