<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>petersteinberger.com &#187; Random Stuff</title>
	<atom:link href="http://petersteinberger.com/category/random-stuff/feed/" rel="self" type="application/rss+xml" />
	<link>http://petersteinberger.com</link>
	<description>bits about life, coding and stuff</description>
	<lastBuildDate>Thu, 09 Sep 2010 13:41:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>OAuth 2 meets user friendly</title>
		<link>http://petersteinberger.com/2010/07/oauth-2-meets-user-friendly/</link>
		<comments>http://petersteinberger.com/2010/07/oauth-2-meets-user-friendly/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:48:15 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=956</guid>
		<description><![CDATA[OAuth is a perfect solution for authentication with other web apps. The problem is, it just sucks for native apps. You know the typical workflow for apps. Open, enter credentials, it works. Now here&#8217;s what OAuth looks: Yes, it quit&#8217;s the app, opens Safari, and then restarts the App. Yes, this sucks. But see for yourself [...]


Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/' rel='bookmark' title='Permanent Link: Add Facebook Like Button with Facebook Connect iPhone SDK'>Add Facebook Like Button with Facebook Connect iPhone SDK</a></li>
<li><a href='http://petersteinberger.com/2010/03/wordpress-change-the-default-text-for-password-protected-pages/' rel='bookmark' title='Permanent Link: WordPress: Change the default text for password protected pages'>WordPress: Change the default text for password protected pages</a></li>
<li><a href='http://petersteinberger.com/2009/05/mysql5-with-mac-os-x/' rel='bookmark' title='Permanent Link: mysql5 with mac os x'>mysql5 with mac os x</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://petersteinberger.com/wp-content/uploads/2010/07/SquarePegRoundHole.jpg" rel="lightbox[956]" title="SquarePegRoundHole" class="liimagelink"><img class="alignnone size-full wp-image-960" title="SquarePegRoundHole" src="http://petersteinberger.com/wp-content/uploads/2010/07/SquarePegRoundHole.jpg" alt="" width="349" height="261" /></a></p>
<p>OAuth is a perfect solution for authentication with other web apps. The problem is, <strong>it just sucks for native apps</strong>.</p>
<p>You know the typical workflow for apps. Open, enter credentials, it works. Now here&#8217;s what OAuth looks:</p>
<p><a href="http://petersteinberger.com/wp-content/uploads/2010/07/2658493767_ec97a7d9ae_o.png" rel="lightbox[956]" title="2658493767_ec97a7d9ae_o" class="liimagelink"><img class="alignnone size-full wp-image-959" title="2658493767_ec97a7d9ae_o" src="http://petersteinberger.com/wp-content/uploads/2010/07/2658493767_ec97a7d9ae_o.png" alt="" width="320" height="480" /></a></p>
<p>Yes, it quit&#8217;s the app, opens Safari, and then restarts the App. Yes, this sucks. <a href="http://blog.oauth.net/2008/07/11/oauth-for-the-iphone-pownceapp/" target="_blank" class="liexternal">But see for yourself</a></p>
<p>Even worse, some other apps like Echofon like to <a href="http://aralbalkan.com/images/71d4eae5efdd234762d7f25887450a19.png" target="_blank" class="liexternal">play the travesty role and ask your two times</a>.</p>
<div id="_mcePaste">OAuth <em>may</em> provide an improvement in security, but most end users don&#8217;t care or just don&#8217;t understand. Our job is to provide reasonably good security AND maximizing the user experience. Closing an app, opening a browser and forcing a user to copy a token IS NOT user friendly.</div>
<p>There was a <a href="http://groups.google.com/group/twitter-development-talk/browse_thread/thread/904acfadaf71c61c" target="_blank" class="liexternal">big outcry by some people</a>, especially <a href="http://aralbalkan.com/3057" target="_blank" class="liexternal">UX affine ones</a>, when Twitter announced shutting down their http auth, leaving only OAuth. Twitter listened and presented xAuth. It basically hides everything from OAuth, let the user enter his credentials the old way while transparently fetching the token. <a href="http://hueniverse.com/2010/06/xauth-a-terrible-horrible-no-good-very-bad-idea/" target="_blank" class="liexternal">hen some other people say this is a terrible, horrible, not good, very bad idea</a>&#8230;</p>
<h2>So what else is there?</h2>
<p>Facebook&#8217;s new Graph API is probably the most known OAuth 2 API. They provide a full package for the iPhone that manages all authorization  in the browser, yet in a very user transparent way. Sure, <strong>this is a security risk</strong>. With some easy hacking and/or javascript injection you can steal the login data. But it&#8217;s certainly saver than letting the application store the credentials.</p>
<p><a href="http://petersteinberger.com/wp-content/uploads/2010/07/6a00e54fe20d00883301310f90317d970c-800wi.jpg" rel="lightbox[956]" title="6a00e54fe20d00883301310f90317d970c-800wi" class="liimagelink"><img class="alignnone size-full wp-image-958" title="6a00e54fe20d00883301310f90317d970c-800wi" src="http://petersteinberger.com/wp-content/uploads/2010/07/6a00e54fe20d00883301310f90317d970c-800wi.jpg" alt="" width="320" height="480" /></a></p>
<h2>Problems</h2>
<ul>
<li>Creating multiple accounts is a PITA, requiring multiple roundtrips and logging in/logging out of the service. (This is less of a problem if you make the login convenient via a optimized landing page; and you don&#8217;t have an automatic login)</li>
<li><strong>The Consumer Secret is reverse engineer-able</strong>. This nullifies the argument that oAuth is better for identifying clients when it comes to desktop/mobile apps.</li>
<li>If a native app wants to get a copy of your password, <strong>it will get a copy of your password</strong>. It can create embedded browsers, hijack the authentication, add a proxy or else.</li>
</ul>
<p><a href="http://blog.atebits.com/2009/02/fixing-oauth/" target="_blank" class="liexternal">Loren Brichter proposes a solution that integrates deeply with the OS</a>, therefore maximizing security while keeping the &#8220;native&#8221; experience.</p>
<h2>Advantages</h2>
<ul>
<li>From a service provider&#8217;s point of view, it&#8217;s absolutely reasonable why the want OAuth. Control. Which is a good thing.</li>
</ul>
<blockquote><p>OAuth doesn&#8217;t prevent evil folks from shipping Twitter apps that might be trojans, but it does allow us here at the Mother Ship to revoke their ability to talk to the Twitter API. That means less spam/&#8221;SEO&#8221; tools, and a short time-to-live for applications that are discovered to be malicious. [<a href="http://groups.google.com/group/twitter-development-talk/browse_thread/thread/629b03475a3d78a1" target="_blank" class="liexternal">Alex Payne - API Lead, Twitter, Inc.</a>]</p></blockquote>
<ul>
<li>For the user this is also a good thing. You can loose your iPhone and just disable the specific token. Your password is not leaked. The App furthermore could be configured to clear all caches when it detects that the API Key has been revoked.</li>
<li>It&#8217;s better than <a href="http://en.wikipedia.org/wiki/Basic_access_authentication" target="_blank" rel="nofollow" class="liwikipedia">Basic access authentication</a>, where your username and password is sent in every single request. But you have to go over SSL anyway. If your token leaks, other&#8217;s have access to your account.</li>
</ul>
<h2>My proposal</h2>
<p>I&#8217;ll propose something similar. A optimized, secured landing page that is styled native-ish per device and runs within the native browser, but without showing the user so. So we can provide a good-known-flow</p>
<ol>
<li>Open App</li>
<li>Press Login / Register</li>
<li>Wait for login page to load (this is where users may experience a little difference&#8230;)</li>
<li>enter credentials</li>
<li>wait for authorization</li>
<li>it just works!</li>
</ol>
<p>Of course, the web service has to provide some sort of management page where current applications are listed and rights can be revoked. If a application goes wild and messes around with usernames, their token can be blocked. (which only makes sense if there&#8217;s a reasonable review in application registering)</p>
<p>There&#8217;s <a href="http://wiki.oauth.net/OAuth%202%20for%20Native%20Apps" target="_blank" class="liexternal">some comparison of the different techniques on the oauth wiki native apps page</a>; but no clear winner.</p>
<!-- PHP 5.x -->

<p>Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/' rel='bookmark' title='Permanent Link: Add Facebook Like Button with Facebook Connect iPhone SDK'>Add Facebook Like Button with Facebook Connect iPhone SDK</a></li>
<li><a href='http://petersteinberger.com/2010/03/wordpress-change-the-default-text-for-password-protected-pages/' rel='bookmark' title='Permanent Link: WordPress: Change the default text for password protected pages'>WordPress: Change the default text for password protected pages</a></li>
<li><a href='http://petersteinberger.com/2009/05/mysql5-with-mac-os-x/' rel='bookmark' title='Permanent Link: mysql5 with mac os x'>mysql5 with mac os x</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/07/oauth-2-meets-user-friendly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Add Facebook Like Button with Facebook Connect iPhone SDK</title>
		<link>http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/</link>
		<comments>http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 01:41:25 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=943</guid>
		<description><![CDATA[Like buttons are everywhere, so this is supposed to be easy with the facebook-iphone-sdk. It is not. Liking is not a supported action from the SDK. Only via facebooks iframe. I present you a clever workaround, that even uses the sdk to display a *conventional* facebook login in a way the user knows. The flow [...]


Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/use-tturlxmlresponse-with-server-that-send-you-the-wrong-encoding/' rel='bookmark' title='Permanent Link: Use TTURLXMLResponse with server that send you the wrong encoding'>Use TTURLXMLResponse with server that send you the wrong encoding</a></li>
<li><a href='http://petersteinberger.com/2009/12/fix-mobile-webkit-target-behavior-on-os-3-0/' rel='bookmark' title='Permanent Link: Fix Mobile WebKit target behavior on OS 3.0'>Fix Mobile WebKit target behavior on OS 3.0</a></li>
<li><a href='http://petersteinberger.com/2010/06/the-facebook-app-situation/' rel='bookmark' title='Permanent Link: The Facebook-App Situation'>The Facebook-App Situation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Like buttons are everywhere, so this is supposed to be easy with the <a href="http://github.com/facebook/facebook-iphone-sdk" target="_blank" class="liexternal">facebook-iphone-sdk</a>. It is not. Liking is not a supported action from the SDK. Only via facebooks iframe.</p>
<p>I present you a clever workaround, that even uses the sdk to display a *conventional* facebook login in a way the user knows.</p>
<p><a href="http://petersteinberger.com/wp-content/uploads/2010/06/facebook_like_iphone_button.png" rel="lightbox[943]" title="facebook_like_iphone_button" class="liimagelink"><img class="alignnone size-full wp-image-944" title="facebook_like_iphone_button" src="http://petersteinberger.com/wp-content/uploads/2010/06/facebook_like_iphone_button.png" alt="" width="353" height="144" /></a></p>
<p><a href="http://petersteinberger.com/wp-content/uploads/2010/06/facebook_like_2.png" rel="lightbox[943]" title="facebook_like_2" class="liimagelink"><img class="alignnone size-full wp-image-945" title="facebook_like_2" src="http://petersteinberger.com/wp-content/uploads/2010/06/facebook_like_2.png" alt="" width="320" height="481" /></a></p>
<p>The flow is equal to other Facebook-Connect functions &#8211; at least for the user:</p>
<ul>
<li>User presses like button</li>
<li>If cookie is there (user logged in already and marked &#8220;Keep me logged in&#8221; it is instantly liked. Done.</li>
<li>Else, the (known) Facebook Connect Login Dialog pops up. It looks a bit different (two headers) but most users won&#8217;t notice</li>
<li>User enters his login details</li>
<li>Dialog closes, like button reloads, displays like now in user language + friend faces that also like link</li>
<li>User can press like again to invoke it</li>
</ul>
<p>So how to we get there? First, let&#8217;s overload FBDialog (we need to hack a little bit).</p>
<p>PSFBLoginDialog.m:</p>
<p>[CC lang="objc"]<br />
// overridden to check against our *own* URLs<br />
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request<br />
navigationType:(UIWebViewNavigationType)navigationType {<br />
NSURL* url = request.URL;<br />
GTMLoggerInfo(@&#8221;url: %@&#8221;, [url absoluteString]);</p>
<p>if (![[url absoluteString] containsString:@&#8221;login&#8221;]) {<br />
[self dialogDidSucceed:url];<br />
return NO;<br />
}else {<br />
return YES;<br />
}<br />
}<br />
[/CC]</p>
<p>This checks whether login was successful and calls our registered delegate. Now, let&#8217;s add an area where the like button should be. In my case, I add it as a table footer view.</p>
<p>[CC lang="objc"]<br />
#define kWebPadding 10<br />
      UIView *paddingView = [[[UIView alloc] init] autorelease];<br />
      paddingView.backgroundColor = [UIColor whiteColor]; //RGBACOLOR(128,128,128,0.7);<br />
      paddingView.opaque = NO;<br />
      UIWebView *webView = [[[UIWebView alloc] initWithFrame:CGRectMake(kWebPadding, kWebPadding, self.view.width-kWebPadding, 60+2*kWebPadding)] autorelease];<br />
      [paddingView addSubview:webView];</p>
<p>      NSString *likePage = @&#8221;http://google.com&#8221;;<br />
      NSString *likeFacebookUrl = @&#8221;http://www.facebook.com/plugins/like.php?href=%@&amp;layout=standard&amp;show_faces=false&amp;width=320&amp;action=like&amp;colorscheme=light&amp;height=35&#8243;;<br />
      likePage = feedItem.link;<br />
      [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:likeFacebookUrl, likePage]]]];<br />
      webView.opaque = NO;<br />
      webView.backgroundColor = [UIColor clearColor];<br />
      webView.delegate = self;</p>
<p>      paddingView.height = webView.height;<br />
      paddingView.width = webView.width;<br />
      self.tableView.tableFooterView = paddingView;<br />
[/CC]</p>
<p>This is wrapped in a UIView to get a bit padding.<br />
Next, we need to intercept the calls on the UIWebView, maybe opening the dialog if a login is needed.</p>
<p>[CC lang="objc"]<br />
///////////////////////////////////////////////////////////////////////////////////////////////////<br />
#pragma mark -<br />
#pragma mark UIWebViewDelegate</p>
<p>- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {<br />
  GTMLoggerInfo(@&#8221;starting request %@&#8221;, request);</p>
<p>  // if user has to log in, open a new (modal) window<br />
  if ([[[request URL] absoluteString] containsString:@&#8221;login.php&#8221;]) {</p>
<p>    PSFBLoginDialog *dialog = [[[PSFBLoginDialog alloc] init] autorelease];<br />
    [dialog loadURL:[[request URL] absoluteString] method:@&#8221;GET&#8221; get:nil post:nil];<br />
    dialog.delegate = self;<br />
    [dialog show];<br />
    return NO;<br />
  }</p>
<p>  return YES;<br />
}<br />
[/CC]</p>
<p>We&#8217;re almost done. We need to create the callback delegate for this operation to reload our WebView after a successful login:</p>
<p>[CC lang="objc"]<br />
///////////////////////////////////////////////////////////////////////////////////////////////////<br />
#pragma mark -<br />
#pragma mark Facebook Connect</p>
<p>- (void)dialogDidSucceed:(FBDialog*)dialog {<br />
  GTMLoggerInfo(@&#8221;succeded!&#8221;);</p>
<p>  // try to reload webview after dialog succeeded<br />
  if ([[[self.tableView.tableFooterView subviews] objectAtIndex:0] isKindOfClass:[UIWebView class]]) {<br />
    [(UIWebView *)[[self.tableView.tableFooterView subviews] objectAtIndex:0] reload];<br />
  }<br />
}<br />
[/CC]</p>
<p>Voila. A working Like Button! </p>
<p>This solution however has a downside, the user may has to enter his credentials two times if both the FBConnect Login AND the web-login are used.</p>
<!-- PHP 5.x -->

<p>Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/use-tturlxmlresponse-with-server-that-send-you-the-wrong-encoding/' rel='bookmark' title='Permanent Link: Use TTURLXMLResponse with server that send you the wrong encoding'>Use TTURLXMLResponse with server that send you the wrong encoding</a></li>
<li><a href='http://petersteinberger.com/2009/12/fix-mobile-webkit-target-behavior-on-os-3-0/' rel='bookmark' title='Permanent Link: Fix Mobile WebKit target behavior on OS 3.0'>Fix Mobile WebKit target behavior on OS 3.0</a></li>
<li><a href='http://petersteinberger.com/2010/06/the-facebook-app-situation/' rel='bookmark' title='Permanent Link: The Facebook-App Situation'>The Facebook-App Situation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Use TTURLXMLResponse with server that send you the wrong encoding</title>
		<link>http://petersteinberger.com/2010/06/use-tturlxmlresponse-with-server-that-send-you-the-wrong-encoding/</link>
		<comments>http://petersteinberger.com/2010/06/use-tturlxmlresponse-with-server-that-send-you-the-wrong-encoding/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 11:58:52 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=938</guid>
		<description><![CDATA[That took long. I am parsing RSS, but _one_ particular feed would not parse, the console screamed &#8220;NSXMLParserErrorDomain error 9&#8243;. So some stuff in encoding was weird. I replicated the feed on my server, voila, worked like a charm. http://beta.feedvalidator.org finally brought some light into the issue: &#8220;Your feed appears to be encoded as &#8220;UTF-8&#8243;, [...]


Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/' rel='bookmark' title='Permanent Link: Add Facebook Like Button with Facebook Connect iPhone SDK'>Add Facebook Like Button with Facebook Connect iPhone SDK</a></li>
<li><a href='http://petersteinberger.com/2010/02/backup-server-with-rsnapshot/' rel='bookmark' title='Permanent Link: Backup Server with rsnapshot'>Backup Server with rsnapshot</a></li>
<li><a href='http://petersteinberger.com/2010/05/nsdateformatter-and-0000-parsing/' rel='bookmark' title='Permanent Link: NSDateFormatter and +00:00 parsing'>NSDateFormatter and +00:00 parsing</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>That took long. I am parsing RSS, but _one_ particular feed would not parse, the console screamed &#8220;NSXMLParserErrorDomain error 9&#8243;.</p>
<p>So some stuff in encoding was weird. I replicated the feed on my server, voila, worked like a charm. http://beta.feedvalidator.org finally brought some light into the issue: &#8220;Your feed appears to be encoded as &#8220;UTF-8&#8243;, but  your server is reporting &#8220;iso-8859-1&#8243;&#8221;</p>
<p>Okay. So the server fucked up. But we can&#8217;t change that, so let&#8217;s make our parser more robust. I am using TTURLXMLResponse (see their <a href="http://github.com/facebook/three20" target="_blank" class="liexternal">TTTwitter example on github</a>)</p>
<p>So let&#8217;s override that! See the middle part for my change/hack/improvement. (Call it whatever you want)</p>
<p>[CC lang="objc"]</p>
<p>@implementation VIURLXMLResponse</p>
<p>///////////////////////////////////////////////////////////////////////////////////////////////////<br />
///////////////////////////////////////////////////////////////////////////////////////////////////<br />
#pragma mark -<br />
#pragma mark TTURLResponse</p>
<p>// overridden from TTURLResponse to hack around voest rss feed!<br />
- (NSError*)request:(TTURLRequest*)request processResponse:(NSHTTPURLResponse*)response<br />
data:(id)data {<br />
// This response is designed for NSData objects, so if we get anything else it&#8217;s probably a<br />
// mistake.<br />
TTDASSERT([data isKindOfClass:[NSData class]]);<br />
TTDASSERT(nil == _rootObject);</p>
<p>if ([data isKindOfClass:[NSData class]]) {<br />
NSString *utf8Response = [[[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding] autorelease];</p>
<p>// oh ooh. server sent us data in ISO-8859-1? [hack around standards]<br />
// http://stackoverflow.com/questions/1207867/nsxmlparser-rss-issue-nsxmlparserinvalidcharactererror<br />
if (!utf8Response) {<br />
NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];<br />
data = [dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];<br />
}</p>
<p>TTDCONDITIONLOG(TTDFLAG_XMLPARSER, @&#8221;Data: %@&#8221;, [[[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding] autorelease]);</p>
<p>TTXMLParser* parser = [[TTXMLParser alloc] initWithData:data];<br />
parser.delegate = self;<br />
parser.treatDuplicateKeysAsArrayItems = self.isRssFeed;<br />
[parser parse];<br />
_rootObject = [parser.rootObject retain];<br />
TT_RELEASE_SAFELY(parser);<br />
}</p>
<p>return nil;<br />
}</p>
<p>@end<br />
[/CC]</p>
<!-- PHP 5.x -->

<p>Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/' rel='bookmark' title='Permanent Link: Add Facebook Like Button with Facebook Connect iPhone SDK'>Add Facebook Like Button with Facebook Connect iPhone SDK</a></li>
<li><a href='http://petersteinberger.com/2010/02/backup-server-with-rsnapshot/' rel='bookmark' title='Permanent Link: Backup Server with rsnapshot'>Backup Server with rsnapshot</a></li>
<li><a href='http://petersteinberger.com/2010/05/nsdateformatter-and-0000-parsing/' rel='bookmark' title='Permanent Link: NSDateFormatter and +00:00 parsing'>NSDateFormatter and +00:00 parsing</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/use-tturlxmlresponse-with-server-that-send-you-the-wrong-encoding/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>About voice recognition</title>
		<link>http://petersteinberger.com/2010/06/about-voice-recognition/</link>
		<comments>http://petersteinberger.com/2010/06/about-voice-recognition/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 22:26:42 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=915</guid>
		<description><![CDATA[Today&#8217;s twitter feeds stumbled me about this awesome article on &#8220;whatever happened to voice recognition&#8221;. Having tried and used speech recognition myself (all started on my 400 mhz celeron &#8230; oh boy&#8230;) i really agree on the article&#8217;s essence. They just don&#8217;t get it right &#8211; and it&#8217;s more or less impossible to really get [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s twitter feeds stumbled me about this awesome article on <a href="http://www.codinghorror.com/blog/2010/06/whatever-happened-to-voice-recognition.html" target="_blank" class="liexternal">&#8220;whatever happened to voice recognition&#8221;</a>.</p>
<p>Having tried and used speech recognition myself (all started on my 400 mhz celeron &#8230; oh boy&#8230;) i really agree on the article&#8217;s essence. They just don&#8217;t get it right &#8211; and it&#8217;s more or less impossible to really get it right.</p>
<p>There&#8217;s also some current state-of-the-art software available. Tried it, failed. It&#8217;s not that it doesn&#8217;t work at all, but that you are faster typing than speaking, going to keyboard fixing, speaking again, hoping and checking, fixing&#8230;.</p>
<p>Why on earth I am thinking now on the big great Android feature to fill *every* textfield with text-to-speech via google servers? I don&#8217;t know. <a href="http://petersteinberger.com/2010/06/going-android-for-two-weeks/" class="liinternal">Maybe it relates to this.</a> (And yes, I tried it, and yes, it failed in a quite funny way. Maybe because I&#8217;m not a native speaker&#8230; maybe.)</p>
<p>I wonder how many people actually <em>like</em> this feature. I&#8217;ll add a comment here as soon as I see someone non-geeky using it. And don&#8217;t bash me now &#8211; there&#8217;s a difference between voice control and voice recognition. In short, the first may work <img src='http://petersteinberger.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>So again, it&#8217;s great for navigation, or other feature sets where you have a finite domain of answers. But it just fails on free speech.</p>
<!-- PHP 5.x -->

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/about-voice-recognition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where Cursors come from</title>
		<link>http://petersteinberger.com/2010/06/where-cursors-come-from/</link>
		<comments>http://petersteinberger.com/2010/06/where-cursors-come-from/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 13:11:31 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=911</guid>
		<description><![CDATA[No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://petersteinberger.com/wp-content/uploads/2010/06/where-cursors-come-from.png" rel="lightbox[911]" title="where cursors come from" class="liimagelink"><img class="alignnone size-full wp-image-912" title="where cursors come from" src="http://petersteinberger.com/wp-content/uploads/2010/06/where-cursors-come-from.png" alt="" width="480" height="600" /></a></p>
<!-- PHP 5.x -->

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/where-cursors-come-from/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Facebook-App Situation</title>
		<link>http://petersteinberger.com/2010/06/the-facebook-app-situation/</link>
		<comments>http://petersteinberger.com/2010/06/the-facebook-app-situation/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 12:04:20 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=907</guid>
		<description><![CDATA[On Saturday the 19th, Facebook released an update for their iPhone Application. Although they fixed some bugs and added video (finally, yeah!) they introduced other, much more visible bugs. To be exact, this bug was there all the time, they just didn&#8217;t test it with iOS4. See it? Shadows have the wrong path. I have [...]


Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/' rel='bookmark' title='Permanent Link: Add Facebook Like Button with Facebook Connect iPhone SDK'>Add Facebook Like Button with Facebook Connect iPhone SDK</a></li>
<li><a href='http://petersteinberger.com/2010/09/fixing-nsfetchedresultscontroller/' rel='bookmark' title='Permanent Link: Fixing NSFetchedResultsController'>Fixing NSFetchedResultsController</a></li>
<li><a href='http://petersteinberger.com/2009/06/pay-for-facebook-you-already-do/' rel='bookmark' title='Permanent Link: pay for facebook? you already do.'>pay for facebook? you already do.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>On Saturday the 19th, Facebook released an update for their iPhone Application. Although they fixed some bugs and added video (finally, yeah!) they introduced other, much more visible bugs. To be exact, this bug was there all the time, they just didn&#8217;t test it with iOS4.</p>
<p><a href="http://petersteinberger.com/wp-content/uploads/2010/06/facebook_updated.png" rel="lightbox[907]" title="facebook_updated" class="liimagelink"><img class="alignnone size-full wp-image-908" title="facebook_updated" src="http://petersteinberger.com/wp-content/uploads/2010/06/facebook_updated.png" alt="" width="280" height="420" /></a></p>
<p>See it? Shadows have the wrong path. <strong>I have the same bug with </strong><a href="http://github.com/facebook/three20" target="_blank" class="liexternal"><strong>three20</strong></a><strong> builds.</strong> I wonder how this *ever* could go through their quality checking. After all, it&#8217;s a one-line fix. And <a href="http://techcrunch.com/2010/06/19/facebook-iphone-app/" target="_blank" class="liexternal">TechCrunch&#8217;es argument</a>, that it only applies to the unread-bubbles is wrong, the status-update bar has also the wrong (inverted) shadows.</p>
<p>They don&#8217;t mention iOS4 in their fixed section, so you can&#8217;t really blame them. But it&#8217;s really disappointing. After all, facebook was once the &#8220;leader&#8221; in app quality and was one of the first apps of the AppStore. But ever since <a href="http://en.wikipedia.org/wiki/Joe_Hewitt_(programmer)" target="_blank" rel="nofollow" class="liwikipedia">Joe Hewitt</a> walked away from the iOS-Platform, the project kinda stagnated.</p>
<p>There has been huge effort by facebook-employeed <a href="http://github.com/jverkoey" target="_blank" class="liexternal">Jeff Verkoeyen</a> on three20, the underlying open-sourced library that Joe built around the app. But the app code itself was apparently less touched&#8230;</p>
<p>For a company of this size there should be enough resources to do better. (and i&#8217;m not even talking about the Android version that <em>really</em> sucks)</p>
<p>It&#8217;s also interesting that there is no love for the iPad. Yes, the screen is big enough to support the Website without any &#8220;app&#8221;, but IMHO the experience would be much better. And people really *are* searching for the iPad-App, which<a href="http://techcrunch.com/2010/04/05/facebooks-ipad-impostor-facebook-ultimate-removed-from-the-app-store/" target="_blank" class="liexternal"> some developer brought much money</a>. (of course he is innocent&#8230; for sure&#8230;)</p>
<p>Maybe because there are ads on the website, and there aren&#8217;t anyone in the mobile apps&#8230; What do you think?</p>
<!-- PHP 5.x -->

<p>Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/add-facebook-like-button-with-facebook-connect-iphone-sdk/' rel='bookmark' title='Permanent Link: Add Facebook Like Button with Facebook Connect iPhone SDK'>Add Facebook Like Button with Facebook Connect iPhone SDK</a></li>
<li><a href='http://petersteinberger.com/2010/09/fixing-nsfetchedresultscontroller/' rel='bookmark' title='Permanent Link: Fixing NSFetchedResultsController'>Fixing NSFetchedResultsController</a></li>
<li><a href='http://petersteinberger.com/2009/06/pay-for-facebook-you-already-do/' rel='bookmark' title='Permanent Link: pay for facebook? you already do.'>pay for facebook? you already do.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/the-facebook-app-situation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Going Android for two Weeks</title>
		<link>http://petersteinberger.com/2010/06/going-android-for-two-weeks/</link>
		<comments>http://petersteinberger.com/2010/06/going-android-for-two-weeks/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 18:22:17 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=898</guid>
		<description><![CDATA[Disclaimer: I write iPhone/iPad Software, so I may be biased here. I try to be fair, though. I believe that Android is a good thing, the only _real_ competition in the Smartphone area for the iPhone. I&#8217;m sure Android will go mass-market, and will be successful. It&#8217;s not bad. There are just some things that [...]


Related posts:<ol><li><a href='http://petersteinberger.com/2010/05/version-adoption-rate-iphone-vs-android/' rel='bookmark' title='Permanent Link: Version Adoption Rate: iPhone vs Android'>Version Adoption Rate: iPhone vs Android</a></li>
<li><a href='http://petersteinberger.com/2010/03/on-android-its-fucking-hell/' rel='bookmark' title='Permanent Link: &#8220;On Android, it&#8217;s fucking hell&#8221;'>&#8220;On Android, it&#8217;s fucking hell&#8221;</a></li>
<li><a href='http://petersteinberger.com/2010/09/the-great-app-bubble/' rel='bookmark' title='Permanent Link: The Great App Bubble?'>The Great App Bubble?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Disclaimer: I write iPhone/iPad Software, so I may be biased here. I try to be fair, though. I believe that Android is a good thing, the only _real_ competition in the Smartphone area for the iPhone. I&#8217;m sure Android will go mass-market, and will be successful. It&#8217;s not bad. There are just some things that really need to be fixed (and <a href="http://techcrunch.com/2010/06/16/android-team-laser-focused-on-the-user-experience-for-next-release/" target="_blank" class="liexternal">even google thinks this way</a>)</p>
<p>I spent my two weeks in San Francisco @ WWDC with an HTC Legend. What, you think? It was my only *unlocked* phone, i got it for free &#8211; and I really wanted to try Android somewhere more in-depth. So I got a T-Mobile USA Sim and started playing. And no, I won&#8217;t go into the horrible cellular networks that are in the US&#8230; (God bless Austria for that!)</p>
<p>And I apologize for <a href="http://thedroidblog.com/content/88-take-screenshots-htc-droid-incredible-without-rooting.html" target="_blank" class="liexternal">not having screenshots</a> ready&#8230;</p>
<p>There are some domains where Android really shines:</p>
<ol>
<li><strong>The Notification Area.</strong> When you get different Push Notifications/Messages on iPhone, they (sometimes) overlap, but mostly you will loose the older one. That&#8217;s kinda annoying. On Android those notifications are collected in the status bar and are accessible from every screen, as long as the status bar is visible. I&#8217;m sure <a href="http://www.appleinsider.com/articles/10/06/09/designer_of_notification_system_for_palms_webos_hired_by_apple.html" target="_blank" class="liexternal">this will improve in later iOS versions</a>. (Palm also has a <a href="http://www.precentral.net/palm-pre-review#Notifications" target="_blank" class="liexternal">superior notification system</a>)<br />
Disadvantage:  There&#8217;s no scroll-to-top (like on iPhone) which in combination of a kinda wanky scrolling system is really missing.</li>
<li><strong>Maps</strong>. I *love* the Places-Integration. It&#8217;s just that cool to have all data from Yelp, Urban Spoon right on the spot you searched for. (It may be useless in Austria but it was cool in the US)<br />
Otherwise maps felt much clunkier than on iPhone. Scrolling wasn&#8217;t smooth at all.</li>
<li><strong>Systemwide back.</strong> It&#8217;s a yeah and sucks both times. Those extra buttons like back, search, menu take you away from your app canvas every time. It is supposed to be just the app. But with those hardware-buttons you (the developer) has to provide actions for every screen. But yeah sometimes they just don&#8217;t work.<br />
Systemwide back however, is pretty nice. Open a URL in Maps, go into the browser, press back, and voila, you&#8217;re back in Maps.</li>
</ol>
<p>Let&#8217;s go to the bad things i noticed</p>
<ol>
<li><strong>Messaging</strong>. First, the system is not able to order my messages the right way when they were sent in the same minute. This leads to very strange message histories with garbled sequences. It&#8217;s very frustrating cause thats clearly a bug. I don&#8217;t know if it&#8217;s a HTC Sense issue or Android itself.</li>
<li><strong>Message send failures.</strong> When message sending fails, you get a notification (good), then you get to the &#8220;Message sending failure&#8221;-Screen (good) and then you don&#8217;t see a button or anything to retry sending. It&#8217;s hidden under the Menu-Hardware-Button-Popover. I had a hard time discovering that.<br />
To be fair, it&#8217;s a 1:1 cause the iPhone doesn&#8217;t even has option to retry sending of all unsent messages.</li>
<li>T<strong>he Keyboard.</strong> Much too much keys, two labels per key, and much junkier to use. To be fair, that&#8217;s an HTC Sense issue and was improved on Android 2.2. There&#8217;s an paid App on the Android Market that replaces the keyboard with an iPhone-nearish model, and i was pretty good.</li>
<li><strong>Autocompletion</strong>. Sucks on iPhone too, but subjectively less. If you type and you look at the text, iPhone displays the proposals right where your text is. Android adds a text proposal bar right above the keyboard (like early prototypes of iPhone did) This takes up more spaces (as it&#8217;s added when you *start* typing, and not with animation but in a junky way.</li>
<li><strong>Twitter</strong>. The official Twitter app is nowhere near as good as the Twitter app for iPhone. Nowhere. I tried Twitdroid too, but that was a total sucker. Added a notification as soon as I got new tweets, my phone was making noise every 5 minutes. But that&#8217;s supposed not to be an Android issue, right? Because it&#8217;s all the apps. But as a developer, the frameworks you get really make the difference in building a ok or a great app.<br />
I tried to upload an Image with Twitter for Android, and it crashed every time. Yeah, after I found my picture, because the picture browser is crazy slow (there isn&#8217;t even a delay on iPhone &#8211; on Android you can see each picture thumb loading after the other). And the order is wrong, you have to scroll right down to the bottom to get the latest pic (which is usually what u want &#8211; take pic and tweet it). Twitter for Android also often just lost my scrolling position, changing it a few tweets up or down. That&#8217;s absolutely unacceptable.</li>
<li><strong>Facebook</strong>. The iPhone version is also much superior. As soon as you drill down on something, you are redirected to the Web-Interface of Facebook, where the iPhone-Version just does fine. I also didn&#8217;t manage to upload a picture to fb that was already on the phone, because pressing the picture-icon just opens the camera (instead of giving you a chance to selected saved pics)<br />
@westbaer on twitter told me that it&#8217;s only possible from the Android picture browser. So you go to a picture, press the action button and get this menu with all app hooks (which is kinda cool and not possible on iPhone right now). But then _another_ screen is opened, where you have to select the picture you wanna upload (same junky stuff as on Twitter, scrolling, waiting, scrolling, waiting). Why it doesn&#8217;t just upload the picture I was on? And why I can&#8217;t do that within the application?</li>
<li><strong>This damn selection-ball.</strong> I don&#8217;t get it, I don&#8217;t need it and I don&#8217;t wanna use it. Hello, it&#8217;s all touch, remember? But I accidentally touched it and it changed my screen focus. It&#8217;s also ridiculous that this is the make-a-picture-button. I gave it to some people and most just messed up. As they removed their finger they made a touch-gesture on it, resulting in the active button cursor to be on delete, deleting the picture right after making it. Great. (And isn&#8217;t that supposed to glow on notifications? It never did)</li>
<li><strong>Selecting text.</strong> Where&#8217;s my magnifier? It&#8217;s there _sometimes_ but it wasn&#8217;t there in messages or the browser. At least not when I tried to copy that damn phone number. (On iPhone you have data detectors that make the number click-able. It worked here, on Android most of the times not) After five minutes trying to get the cursor right before starting the selection mode with long-touching in input, then copying&#8230; and then every time THE WHOLE MESSAGE was copied. Which I didn&#8217;t knew, pasting it into the message number box unknowingly, resulted in a bunch of alert boxes that this was (obviously) no number. The only way out was to press the Home-Button as Message-App was pretty much killed with that action.</li>
<li><strong>The Address Book.</strong> I don&#8217;t care where you save the Contact, can&#8217;t you just save it and keep my Google-Contacts in sync with my Local-Contacts? It&#8217;s a Google-Phone, isn&#8217;t it? And SIM, hahaha, I really don&#8217;t care.<br />
But it asked me every time, with no option to &#8220;make this default&#8221;. Sucks, totally. Also that you have to enter many sub-views to enter your data (like name &#8211; all happens on one screen on iPhone). And then try to scroll aaaaaallll the way down to the end of the form to find the save/clear button. Why it just can&#8217;t be on the top?</li>
<li><strong>The Browser.</strong> Tabs? What is it, a joke? Switching tabs on iPhone already sucks, but on Android sucking got a whole new level. Press Menu, Press Windows, try to select your tab from the junky CoverFlow, activate it. But don&#8217;t worry, more than 4 or 5 tabs are not allowed anyway.<br />
The Browser is also way more imprecise when pressing small urls. I was used that most of the times i got it right &#8211; no chance on Android (this may be because of a worse touch screen, or was it just not calibrated correct? I don&#8217;t know, and honestly I don&#8217;t care &#8211; this is supposed to just work!)<br />
The Browser also doesn&#8217;t auto-zoom in when pressing on small form elements. It&#8217;s a small feature but you gonna miss it really hard &#8211; especially in combination of bad-working multitouch zoom. Try it and you go back to the on-screen-buttons (they are much more reliable)</li>
<li>Apps in general. The quality is much lower than I am used to. Some are _ports_ of iPhone apps, resulting in clunky copycated ui-elements that just aren&#8217;t there on Android. Must Apps look and feel very differently. There are some outstanding good ones, like <a href="http://apps.doubletwist.com/doubleTwist-Player/-5600663843429577219" target="_blank" class="liexternal">doubletwist</a>, but most of them are junk.<br />
On the iPhone AppStore, there&#8217;s much more junk. But also MUCH MUCH more apps that really shine out and make your live easier. Here, knowing most of the iPhone-Versions, most had less features, had a junkier ui and were slower.</li>
<li><strong>The Market.</strong> I really wanted to buy some paid apps (maybe here is the good stuff?) but there were no attractive apps in the store. I finally bought a replacement keyboard (after downloading the free task killer app <img src='http://petersteinberger.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
The payment process is a mess, I was forced to enter my credit card details on the phone, in a multi-step process. Even later on buying needs about 4 touches, compared to just one on the iPhone.<br />
Another suck-age is the return policy, which you just can&#8217;t do. Maybe a 79 cent app is fun for 20 minutes. People buy, download and then, after 20 minutes, just return it and get their money back. ERROR IN THE SYSTEM!<br />
Another error is that the LOCAL PRICES are displayed. So I see Euro, Pounds, Dollars, pretty much mixed up. Why? I only have one currency, and Google knows my country so it should be able to just recalculate that.</li>
</ol>
<p>I keep that as a draft, pretty sure there are more things than that.</p>
<!-- PHP 5.x -->

<p>Related posts:<ol><li><a href='http://petersteinberger.com/2010/05/version-adoption-rate-iphone-vs-android/' rel='bookmark' title='Permanent Link: Version Adoption Rate: iPhone vs Android'>Version Adoption Rate: iPhone vs Android</a></li>
<li><a href='http://petersteinberger.com/2010/03/on-android-its-fucking-hell/' rel='bookmark' title='Permanent Link: &#8220;On Android, it&#8217;s fucking hell&#8221;'>&#8220;On Android, it&#8217;s fucking hell&#8221;</a></li>
<li><a href='http://petersteinberger.com/2010/09/the-great-app-bubble/' rel='bookmark' title='Permanent Link: The Great App Bubble?'>The Great App Bubble?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/going-android-for-two-weeks/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Coming soon to iOS</title>
		<link>http://petersteinberger.com/2010/06/coming-soon-to-ios/</link>
		<comments>http://petersteinberger.com/2010/06/coming-soon-to-ios/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 01:23:31 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=892</guid>
		<description><![CDATA[&#8220;This changes everything. Again.&#8221; [CLLocationManager setLocation:] Found at L3 on WWDC, some crazy kid&#8230; No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://petersteinberger.com/wp-content/uploads/2010/06/tutn.jpg" rel="lightbox[892]" title="tutn" class="liimagelink"><img class="alignnone size-full wp-image-893" title="tutn" src="http://petersteinberger.com/wp-content/uploads/2010/06/tutn.jpg" alt="" width="640" height="480" /></a></p>
<p><strong>&#8220;This changes everything. Again.&#8221;</strong></p>
<p>[CLLocationManager setLocation:] <img src='http://petersteinberger.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Found at L3 on WWDC, some crazy kid&#8230;</p>
<!-- PHP 5.x -->

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/coming-soon-to-ios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>San Francisco, Insiders Guide Part 1</title>
		<link>http://petersteinberger.com/2010/06/san-francisco-insiders-guide-part-1/</link>
		<comments>http://petersteinberger.com/2010/06/san-francisco-insiders-guide-part-1/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 15:41:23 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=883</guid>
		<description><![CDATA[While waiting for the mighty Stevenote here in Moscone West, I wanna revisit the past 5 days in San Francisco.  Man, it&#8217;s awesome. Everything is bigger here. The cars, the buildings, the burger, the people ;o) I&#8217;ll gonna focus on San Francisco here and how it compares to Vienna/Austria, as the WWDC is just starting [...]


Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/heading-to-wwdc-2010-san-francisco/' rel='bookmark' title='Permanent Link: Heading to WWDC 2010 @ San Francisco'>Heading to WWDC 2010 @ San Francisco</a></li>
<li><a href='http://petersteinberger.com/2010/06/about-voice-recognition/' rel='bookmark' title='Permanent Link: About voice recognition'>About voice recognition</a></li>
<li><a href='http://petersteinberger.com/2010/09/the-great-app-bubble/' rel='bookmark' title='Permanent Link: The Great App Bubble?'>The Great App Bubble?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>While waiting for the mighty Stevenote here in Moscone West, I wanna revisit the past 5 days in San Francisco.  Man, it&#8217;s awesome. Everything is bigger here. The cars, the buildings, the burger, the people ;o)</p>
<p>I&#8217;ll gonna focus on San Francisco here and how it compares to Vienna/Austria, as the WWDC is just starting (I definitely will blog about that too!)</p>
<p><a href="http://petersteinberger.com/wp-content/uploads/2010/06/IMAG0027.jpg" rel="lightbox[883]" title="IMAG0027" class="liimagelink"><img class="alignnone size-full wp-image-885" title="IMAG0027" src="http://petersteinberger.com/wp-content/uploads/2010/06/IMAG0027.jpg" alt="" width="640" height="416" /></a></p>
<p>What&#8217;s great:</p>
<ul>
<li>American toilets! They don&#8217;t need toilet brushes, as it&#8217;s filled with water. Why isn&#8217;t that standard in austria? (Germans like to see their poo?) ^^</li>
<li>The people. They&#8217;re totally friendly, talk to you, smile, and just seem to be happy.</li>
<li>Starbucks. Oh my. I don&#8217;t feel bad going there (probably because SF doesn&#8217;t have a coffee house culture like Vienna ;o) And coffee is so much cheaper. Go on market street, you see them every 100 meter <img src='http://petersteinberger.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Medication. Maaan. Their pharmacies are more like stores, just grab what you want and go. Most stuff where you need to see a doctor and get receipts are just free here, get them in the 500-tablet-saving-box. (don&#8217;t know if that&#8217;s really that great)</li>
<li>Smoking. Only homeless smoke in SF. Clubs and Bars are smoke-free. I love it. Btw, parties at Castro are freakin&#8217; crazy! (They even run metal detectors when entering the disco ^^)</li>
<li>You wander around at night, and a <a href="http://www.partybus.com/" target="_blank" class="liexternal">party bus full of screaming people</a> drives along.</li>
<li>Steak. Go to <a href="http://www.mortons.com/" target="_blank" class="liexternal">Mortons</a>. Crazy prices (&#8217;bout 150 bucks), but it&#8217;s worth it, believe me.</li>
<li>The skyline standing on <a href="http://www.alcatrazcruises.com/" target="_blank" class="liexternal">Alcatraz</a>.</li>
<li><a href="http://www.glide.org/" target="_blank" class="liexternal">Glide Church</a>. Awesome experience. Go there and hear them singing and praying!</li>
<li>Golden Gate Bridge. Go rent a bike and ride over it!</li>
<li>Silicon Valley. Go visit the Googleplex when its lunchtime. We just parked on the employees parking spaces and played being googlers. They have an awesome campus! <a href="http://www.intel.com/museum/" target="_blank" class="liexternal">Intel Museum</a> is also worth a visit.</li>
<li><a href="http://www.sfcablecar.com/" target="_blank" class="liexternal">Cable Cars</a>. Go hang on them, it&#8217;s really fun!</li>
<li>Go <a href="http://www.pier39.com/index.cfm" target="_blank" class="liexternal">watch (and smell!) the sea lions</a>, but don&#8217;t go to Pier39, it&#8217;s a tourist pit.</li>
<li><a href="http://www.boudinbakery.com/" target="_blank" class="liexternal">Sour Bread at Boudin Bakery</a>. U have to try those.</li>
<li><a href="http://sanfrancisco.lovetoknow.com/wiki/Coit_Tower" target="_blank" class="liexternal">Coit Tower</a>. It&#8217;s not the tower, but the stairs up getting there. Flowers and beautiful gardens everywhere. U have to be really rich or lucky getting a house there.</li>
</ul>
<p>What sucks:</p>
<ul>
<li>Homeless people. There are A LOT. On every street, on every corner. Or standing next to the ATM and want your money.</li>
<li>Water. Yeah, yosemite national park or not, it&#8217;s strange, maybe because of chlorine or other chemicals, but it totally looses compared to our national water.</li>
<li>Bread. You get muffins and whole grain muffins. Don&#8217;t even think of great rolls.</li>
<li>Milk. nuff&#8217; said.</li>
<li>Renting a  car. Just don&#8217;t do it. U have to wait ages in traffic jams and don&#8217;t find a parking lot. You don&#8217;t need it anyway, just go by bus or bike, SF is not THAT huge.</li>
</ul>
<p>We still have 10 days left (5 of them are for WWDC) and there&#8217;s a lot more on the list, expect part 2 soon! <img src='http://petersteinberger.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<!-- PHP 5.x -->

<p>Related posts:<ol><li><a href='http://petersteinberger.com/2010/06/heading-to-wwdc-2010-san-francisco/' rel='bookmark' title='Permanent Link: Heading to WWDC 2010 @ San Francisco'>Heading to WWDC 2010 @ San Francisco</a></li>
<li><a href='http://petersteinberger.com/2010/06/about-voice-recognition/' rel='bookmark' title='Permanent Link: About voice recognition'>About voice recognition</a></li>
<li><a href='http://petersteinberger.com/2010/09/the-great-app-bubble/' rel='bookmark' title='Permanent Link: The Great App Bubble?'>The Great App Bubble?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/06/san-francisco-insiders-guide-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>not just a tool</title>
		<link>http://petersteinberger.com/2010/05/not-just-a-tool/</link>
		<comments>http://petersteinberger.com/2010/05/not-just-a-tool/#comments</comments>
		<pubDate>Fri, 14 May 2010 09:29:08 +0000</pubDate>
		<dc:creator>studpete</dc:creator>
				<category><![CDATA[Random Stuff]]></category>

		<guid isPermaLink="false">http://petersteinberger.com/?p=857</guid>
		<description><![CDATA[No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://petersteinberger.com/wp-content/uploads/2010/05/subjective-c.jpg" rel="lightbox[857]" title="subjective-c" class="liimagelink"><img class="alignnone size-large wp-image-858" title="subjective-c" src="http://petersteinberger.com/wp-content/uploads/2010/05/subjective-c-722x1024.jpg" alt="" width="505" height="717" /></a></p>
<!-- PHP 5.x -->

<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://petersteinberger.com/2010/05/not-just-a-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
