<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5488803742537723823</id><updated>2012-03-04T10:58:02.592-08:00</updated><title type='text'>Srool The Knife</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-455515385258960597</id><published>2012-03-04T10:58:00.000-08:00</published><updated>2012-03-04T10:58:02.596-08:00</updated><title type='text'>Custom Transition Animation for Modal View Controllers</title><content type='html'>Needed to implement a custom animation (push from right/left when presenting a modal view controller, and then pushing out to the other direction when dismissing the dialog).&lt;br /&gt;Yosi found this snippet:&amp;nbsp;http://blog.radi.ws/post/5924267283/custom-modal-uiviewcontroller-transitions&lt;br /&gt;by Evadne Wu. This was so cool, and I think I made it a bit more fun by creating a UIViewController category to do that (I was a bit lazy, so I only implemented the Push in/out transition, but this can be easily extended):&lt;br /&gt;&lt;br /&gt;&lt;div class="p1"&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;//&lt;br /&gt;//  UIViewController+Transitions.h&lt;br /&gt;//  Labgoo Misc&lt;br /&gt;//&lt;br /&gt;//  Created by Israel Roth on 3/4/12.&lt;br /&gt;//  Copyright (c) 2012 Labgoo LTD. All rights reserved.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#import &amp;lt;UIKit/UIKit.h&amp;gt;&lt;br /&gt;&lt;br /&gt;@interface UIViewController(Transitions)&lt;br /&gt;&lt;br /&gt;- (void) presentModalViewController:(UIViewController *)modalViewController withPushDirection: (NSString *) direction;&lt;br /&gt;- (void) dismissModalViewControllerWithPushDirection:(NSString *) direction;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;br /&gt;and the implementation:&lt;/div&gt;&lt;div class="p5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p5"&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;//&lt;br /&gt;//  UiViewController+Transitions.m&lt;br /&gt;//  Labgoo Misc&lt;br /&gt;//&lt;br /&gt;//  Created by Israel Roth on 3/4/12.&lt;br /&gt;//  Copyright (c) 2012 Labgoo LTD. All rights reserved.&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;#import "UIViewController+Transitions.h"&lt;br /&gt;&lt;br /&gt;@implementation UIViewController(Transitions)&lt;br /&gt;&lt;br /&gt;- (void) presentModalViewController:(UIViewController *)modalViewController withPushDirection: (NSString *) direction {&lt;br /&gt;&lt;br /&gt;    [CATransaction begin];&lt;br /&gt;    &lt;br /&gt;    CATransition *transition = [CATransition animation];&lt;br /&gt;    transition.type = kCATransitionPush;&lt;br /&gt;    transition.subtype = direction;&lt;br /&gt;    transition.duration = 0.25f;&lt;br /&gt;    transition.fillMode = kCAFillModeForwards;&lt;br /&gt;    transition.removedOnCompletion = YES;&lt;br /&gt;    &lt;br /&gt;    [[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"];        &lt;br /&gt;    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];&lt;br /&gt;    [CATransaction setCompletionBlock: ^ {&lt;br /&gt;        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {&lt;br /&gt;            [[UIApplication sharedApplication] endIgnoringInteractionEvents];        &lt;br /&gt;        });&lt;br /&gt;    }];&lt;br /&gt;    &lt;br /&gt;    [self presentModalViewController:modalViewController animated:NO];&lt;br /&gt;    &lt;br /&gt;    [CATransaction commit];&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void) dismissModalViewControllerWithPushDirection:(NSString *) direction {&lt;br /&gt;&lt;br /&gt;    [CATransaction begin];&lt;br /&gt;    &lt;br /&gt;    CATransition *transition = [CATransition animation];&lt;br /&gt;    transition.type = kCATransitionPush;&lt;br /&gt;    transition.subtype = direction;&lt;br /&gt;    transition.duration = 0.25f;&lt;br /&gt;    transition.fillMode = kCAFillModeForwards;&lt;br /&gt;    transition.removedOnCompletion = YES;&lt;br /&gt;&lt;br /&gt;    [[UIApplication sharedApplication].keyWindow.layer addAnimation:transition forKey:@"transition"];        &lt;br /&gt;    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];&lt;br /&gt;    [CATransaction setCompletionBlock: ^ {&lt;br /&gt;        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(transition.duration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {&lt;br /&gt;            [[UIApplication sharedApplication] endIgnoringInteractionEvents];        &lt;br /&gt;        });&lt;br /&gt;    }];&lt;br /&gt;    &lt;br /&gt;    [self dismissModalViewControllerAnimated:NO];&lt;br /&gt;    &lt;br /&gt;    [CATransaction commit];&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="p5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p5"&gt;to use it, you import "UIViewController+Transitions.h" in your file and call the presentModalViewController:withPushDirection:&lt;/div&gt;&lt;div class="p5"&gt;the direction parameter receives core animation transition sub-types such as&amp;nbsp;kCATransitionFromRight&lt;/div&gt;&lt;div class="p5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="p5"&gt;Enjoy...&lt;/div&gt;&lt;div class="p5"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-455515385258960597?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/455515385258960597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2012/03/custom-transition-animation-for-modal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/455515385258960597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/455515385258960597'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2012/03/custom-transition-animation-for-modal.html' title='Custom Transition Animation for Modal View Controllers'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-9115203867803787506</id><published>2011-11-30T15:49:00.001-08:00</published><updated>2011-12-01T08:01:08.435-08:00</updated><title type='text'>Growing your revenues in new markets</title><content type='html'>&lt;br /&gt;As we indie developers struggle to get our apps noticed, downloaded, used and pay our bills, we should maximize whatever means we have to get the app available to as many users.&lt;br /&gt;One often neglected direction is localizing your app to serve users in non-English speaking countries.&lt;br /&gt;Publishing your app in a local language can open for you new markets and maximize your revenues, and the effort needed is really not that great.&lt;br /&gt;&lt;br /&gt;There are three parts for making your app available in multiple languages:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Design Time&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;While at the design and conception stage of your app, give some thoughts to issues such as:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Using text vs. using images for buttons, menus or other app elements.&lt;/i&gt;&lt;/b&gt;&amp;nbsp;Using images gives you more flexibility as to the appearance, fonts, effects of your app text. Using strings makes it easier to change your texts or localize them.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Using special fonts which may or may not have the characters you need in foreign languages.&lt;/i&gt;&lt;/b&gt;&amp;nbsp;If you did decide to use strings, and opt for using custom fonts, make sure the font has the characters for all the languages you want to support. In many cases it is simpler to use unicode fonts from the set of built-in fonts, but sometimes you do need a custom font to get that special look. Keep the character set issue in your thoughts.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;Designing for variable size strings for labels or other GUI elements&lt;/i&gt;&lt;/b&gt;. Text may change size when you switch to a different langauage - width, height and in some cases number of lines will have to be flexible. At the design stage just keep this in mind, and allow your self room for flexibility&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Development&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;During development, you should follow Apple guidelines for localization. Refrain from using hard coded text strings, and go for the NSLocalizedString, localized resources, etc.&lt;br /&gt;Also bear in mind the issue of text size and location. You can use NSString method sizeWithFont to get the dimension of text:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;font = [&lt;span class="s1"&gt;UIFont&lt;/span&gt; &lt;span class="s1"&gt;fontWithName&lt;/span&gt;:name &lt;span class="s1"&gt;size&lt;/span&gt;:size];&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span"&gt; &lt;/span&gt;&lt;span class="s2"&gt;if&lt;/span&gt;( font )&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;CGSize&amp;nbsp;dim = [string &lt;span class="s1"&gt;sizeWithFont&lt;/span&gt;:font];&lt;/span&gt;&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Sean Berry published an excellent tutorial with examples on&amp;nbsp;Ray Wanderlich's blog site:&amp;nbsp;&lt;a href="http://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial"&gt;http://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Translation&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;In many cases I found Google Translate sufficient (especially for languages I have some experience with), but a more professional approach which is not so expensive is available. I am recommending a service called &lt;a href="http://bit.ly/ua9TeF"&gt;One Hour Translation&lt;/a&gt; This service is very reasonably priced (around 5-10 cents per word) and the turn around time is phenomenal - I got all my translations within 30 minutes (!!!)&lt;br /&gt;I have no way to judge the translation quality, but they do give you an option (for slightly more money) to use an expert translator for your particular domain, and an option to get the translation proof read by another person.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bit.ly/ua9TeF"&gt;One Hour Translation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-9115203867803787506?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/9115203867803787506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2011/11/growing-your-revenues-in-new-markets.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/9115203867803787506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/9115203867803787506'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2011/11/growing-your-revenues-in-new-markets.html' title='Growing your revenues in new markets'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-1790916468125168808</id><published>2011-11-02T23:50:00.000-07:00</published><updated>2011-11-24T03:59:56.220-08:00</updated><title type='text'>My Art and other interests</title><content type='html'>I decided to separate my art related posts and place them in a separate blog. You can check them here:&amp;nbsp;&lt;a href="http://sroolart.blogspot.com/"&gt;http://sroolart.blogspot.com/&lt;/a&gt;&lt;br /&gt;I also created a new blog for posts on social / technology / employment issues I am interested in here:&amp;nbsp;&lt;a href="http://societyredesigned.com/"&gt;http://societyredesigned.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br class="Apple-interchange-newline" /&gt;The Knife (this blog) will be just about programming...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-1790916468125168808?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/1790916468125168808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2011/11/my-art.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/1790916468125168808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/1790916468125168808'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2011/11/my-art.html' title='My Art and other interests'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-3666434179289444495</id><published>2011-08-30T04:51:00.000-07:00</published><updated>2011-08-30T04:51:28.804-07:00</updated><title type='text'>OpenGL ES alternate texture renderring</title><content type='html'>A friend asked me for help with getting the sample here: &lt;a href="http://www.mat.ucsb.edu/a.forbes/blog/?p=245"&gt;http://www.mat.ucsb.edu/a.forbes/blog/?p=245&lt;/a&gt; to work on the iPhone.&lt;br /&gt;&lt;br /&gt;Since I had no experience with OpenGL ES 2 shaders, I thought it would be a good chance to get my hands dirty and learn something about it. I am still not an expert (far from it), so take it all with healthy skepticism.&lt;br /&gt;&lt;br /&gt;This is an interim report, just to let you know the basics are working and provide with the sample code.&lt;br /&gt;&lt;br /&gt;So the code is available here: &lt;a href="http://iroth.net/prog/PingPong.zip"&gt;http://iroth.net/prog/PingPong.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In addition to the article that was the inspiration of this, I could have not made this work without the help of the great tutorials of Ray Wenderlich and in particular this series of two:&lt;br /&gt;&lt;a href="http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial"&gt;http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.raywenderlich.com/4404/opengl-es-2-0-for-iphone-tutorial-part-2-textures"&gt;http://www.raywenderlich.com/4404/opengl-es-2-0-for-iphone-tutorial-part-2-textures&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One more thing - there seems to be some black triangle artifact in the upper left corner I still was unable to understand. If any of you find out - please comment below...&lt;br /&gt;&lt;br /&gt;And while at it, here are some books that really help me get up to speed on iPhone game programming:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1430233036&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0321735625&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=B0043M56Y6&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-3666434179289444495?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/3666434179289444495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2011/08/opengl-es-alternate-texture-renderring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/3666434179289444495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/3666434179289444495'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2011/08/opengl-es-alternate-texture-renderring.html' title='OpenGL ES alternate texture renderring'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-1392613614400325582</id><published>2011-06-13T13:52:00.000-07:00</published><updated>2011-06-13T13:52:15.830-07:00</updated><title type='text'>Improved CCSlider included with Cocos2d iPhone Extensions</title><content type='html'>I was happy to get an email from Stepan Generalov asking for permission to publish an improved version he made of CCSlider under an MIT license, which I approved immediately. Good work Stepan!&lt;br /&gt;You can find the improved CCSlider and other cool stuff here:&lt;br /&gt;&lt;a href="http://www.cocos2d-iphone.org/archives/1506"&gt;http://www.cocos2d-iphone.org/archives/1506&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-1392613614400325582?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/1392613614400325582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2011/06/improved-ccslider-included-with-cocos2d.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/1392613614400325582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/1392613614400325582'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2011/06/improved-ccslider-included-with-cocos2d.html' title='Improved CCSlider included with Cocos2d iPhone Extensions'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-6957394616934449323</id><published>2011-03-24T12:53:00.000-07:00</published><updated>2011-03-24T12:53:26.827-07:00</updated><title type='text'>Pah! is on the app store - the joy of iOS programming...</title><content type='html'>It is so much fun to create apps for iOS devices. The first time you get your code to run, the first reaction from other people, but the most fun is publishing your product on the app store and watching how the world reacts...&lt;br /&gt;&lt;br /&gt;We just published today the first truely voice-activated game for the iPhone - it is called Pah! and it is guaranteed to make you look silly, and laugh hard (or at least make the people around you laugh), and is there a more nobel cause than to make people laugh??&lt;br /&gt;&lt;br /&gt;The game idea and design are by Eyal Shahar, and programming was done by Yosi Taguri and myself.&lt;br /&gt;Eyal implemented the game few years ago using Flash, and left it alone for a while, but when he showed us the game we laughed so hard, we knew we must make it into an iPhone game. The first working version was done in few hours, and then it took another two months or so of late night work to make it happen...&lt;br /&gt;&lt;br /&gt;The game went up 18 hours ago, and the responses are overwhelming. Here are some:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mobilecrunch.com/2011/03/24/pah-iphone-game-mouth-sounds/"&gt;http://www.mobilecrunch.com/2011/03/24/pah-iphone-game-mouth-sounds/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.theiphoneguru.net/2011/03/24/app-of-the-day-pah-for-iphone-is-voice-activated-and-hilarity-inducing/"&gt;http://www.theiphoneguru.net/2011/03/24/app-of-the-day-pah-for-iphone-is-voice-activated-and-hilarity-inducing/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.igoiphone.com/?p=1593"&gt;http://www.igoiphone.com/?p=1593&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dailyapp.mobi/index.php/2011/03/pah-for-iphone/"&gt;http://dailyapp.mobi/index.php/2011/03/pah-for-iphone/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check our site too: &lt;a href="http://ahhhpah.com/"&gt;http://ahhhpah.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I want to give credit here to the amazing &lt;a href="http://www.cocos2d-iphone.org/"&gt;Cocos2d&lt;/a&gt; framework that really is fun to work with...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-6957394616934449323?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/6957394616934449323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2011/03/pah-is-on-app-store-joy-of-ios.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/6957394616934449323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/6957394616934449323'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2011/03/pah-is-on-app-store-joy-of-ios.html' title='Pah! is on the app store - the joy of iOS programming...'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-3653961288913775244</id><published>2011-01-05T16:00:00.000-08:00</published><updated>2011-01-05T16:00:04.794-08:00</updated><title type='text'>Creating a Slider Control in cocos2d</title><content type='html'>I wanted to add a little slider control to allow the user to set the background music level in a game I am working on. So I created this little CCSliderControl class that I think is cute and useful.&lt;br /&gt;&lt;br /&gt;The CCSliderControl is sub-classed from CCLayer. Here is the .h file for it:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; @protocol CCSliderControlDelegate  &lt;br /&gt; - (void) valueChanged: (float) value tag: (int) tag;  &lt;br /&gt; @end  &lt;br /&gt; @interface CCSliderControl : CCLayer {  &lt;br /&gt;      float value;  &lt;br /&gt;      id&amp;lt;CCSliderControlDelegate&amp;gt; delegate;  &lt;br /&gt;      float minX;  &lt;br /&gt;      float maxX;  &lt;br /&gt; }  &lt;br /&gt; @property (nonatomic, assign) float value;  &lt;br /&gt; @property (nonatomic, retain) id&amp;lt;CCSliderControlDelegate&amp;gt; delegate;  &lt;br /&gt; @end  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;In the init of this class instance, I add two sprites - one for the background, and one for the slider thumb:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: url(&amp;quot;http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif&amp;quot;) repeat scroll 0% 0% rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; -(id) init  &lt;br /&gt; {  &lt;br /&gt;      if ((self = [super init]))  &lt;br /&gt;      {  &lt;br /&gt;           CCLOG(@"init %@", self);  &lt;br /&gt;           self.isTouchEnabled = YES;  &lt;br /&gt;           value = 0;  &lt;br /&gt;           // add the slider background  &lt;br /&gt;           CCSprite *bg = [CCSprite spriteWithFile:@"slider_background.png"]; //- TODO: add this to some texture atlas  &lt;br /&gt;           [self setContentSize:[bg contentSize]];  &lt;br /&gt;           bg.position = CGPointMake([bg contentSize].width / 2, [bg contentSize].height / 2);  &lt;br /&gt;           [self addChild:bg];  &lt;br /&gt;           // add the slider thumb  &lt;br /&gt;           CGSize thumb_size;  &lt;br /&gt;           CCSprite *thumb = [CCSprite spriteWithFile:@"slider_thumb.png"]; //- TODO: add this to some texture atlas  &lt;br /&gt;           thumb_size = [thumb contentSize];  &lt;br /&gt;           minX = thumb_size.width / 2;  &lt;br /&gt;           maxX = [self contentSize].width - thumb_size.width / 2;  &lt;br /&gt;           thumb.position = CGPointMake(minX, [self contentSize].height / 2);  &lt;br /&gt;           [self addChild:thumb];  &lt;br /&gt;      }  &lt;br /&gt;      return self;  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The setValue method that sets the value property of the instance also updates the thumb sprite position:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;- (void) setValue:(float) newValue&lt;br /&gt;{&lt;br /&gt;    if (newValue &amp;lt; 0) newValue = 0;&lt;br /&gt;    if (newValue &amp;gt; 1.0) newValue = 1.0;&lt;br /&gt;    value = newValue;&lt;br /&gt;    CCSprite *thumb = (CCSprite *)[[self children] objectAtIndex:1];&lt;br /&gt;    CGPoint pos = thumb.position;&lt;br /&gt;    pos.x = minX + newValue * (maxX - minX);&lt;br /&gt;    thumb.position = pos;&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Next step is to register for touch events:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;-(void) registerWithTouchDispatcher&lt;br /&gt;{&lt;br /&gt;    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:-1 swallowsTouches:YES];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;and then handle the touch events:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"&gt;&lt;code&gt;-(CGPoint) locationFromTouch:(UITouch *)touch&lt;br /&gt;{&lt;br /&gt;    CGPoint touchLocation = [touch locationInView: [touch view]];&lt;br /&gt;    touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];&lt;br /&gt;    CGRect bbox = [self boundingBox];&lt;br /&gt;    touchLocation.x -= bbox.origin.x;&lt;br /&gt;    touchLocation.y -= bbox.origin.y;&lt;br /&gt;    return touchLocation;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(bool) isTouchForMe:(CGPoint)touchLocation&lt;br /&gt;{&lt;br /&gt;    CCSprite *bg = (CCSprite *)[[self children] objectAtIndex:0];&lt;br /&gt;    return CGRectContainsPoint([bg boundingBox], touchLocation);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event&lt;br /&gt;{&lt;br /&gt;    CGPoint location = [self locationFromTouch:touch];&lt;br /&gt;    bool isTouchHandled = [self isTouchForMe:location];&lt;br /&gt;    if (isTouchHandled) {&lt;br /&gt;        CCSprite *thumb = (CCSprite *)[[self children] objectAtIndex:1];&lt;br /&gt;        thumb.color = ccYELLOW;&lt;br /&gt;        CGPoint pos = thumb.position;&lt;br /&gt;        pos.x = location.x;&lt;br /&gt;        thumb.position = pos;&lt;br /&gt;    }&lt;br /&gt;    return isTouchHandled; // YES for events I handle&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event&lt;br /&gt;{&lt;br /&gt;    CGPoint location = [self locationFromTouch:touch];&lt;br /&gt;    if ((location.x &amp;lt; minX) || (location.x &amp;gt; maxX))&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    CCSprite *thumb = (CCSprite *)[[self children] objectAtIndex:1];&lt;br /&gt;    CGPoint pos = thumb.position;&lt;br /&gt;    pos.x = location.x;&lt;br /&gt;    thumb.position = pos;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;-(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event&lt;br /&gt;{&lt;br /&gt;    CCSprite *thumb = (CCSprite *)[[self children] objectAtIndex:1];&lt;br /&gt;    thumb.color = ccWHITE;&lt;br /&gt;    value = (thumb.position.x - minX) / (maxX - minX);&lt;br /&gt;    [delegate valueChanged:value tag:self.tag];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And the result looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_UmtiLhaIz2g/TSUBafvrSWI/AAAAAAAABi8/Zes3GHnOvGY/s1600/Slider.png"&gt;&lt;img border="0" height="208" src="http://4.bp.blogspot.com/_UmtiLhaIz2g/TSUBafvrSWI/AAAAAAAABi8/Zes3GHnOvGY/s400/Slider.png" width="400"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can get the source code from bitbucket by using mercurial:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;$ hg clone https://iroth_net@bitbucket.org/iroth_net/ccslider&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-3653961288913775244?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/3653961288913775244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2011/01/creating-slider-control-in-cocos2d.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/3653961288913775244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/3653961288913775244'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2011/01/creating-slider-control-in-cocos2d.html' title='Creating a Slider Control in cocos2d'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UmtiLhaIz2g/TSUBafvrSWI/AAAAAAAABi8/Zes3GHnOvGY/s72-c/Slider.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-5204621448522098859</id><published>2010-12-25T00:29:00.000-08:00</published><updated>2010-12-25T01:58:14.424-08:00</updated><title type='text'>Cocos2D support new and old devices textures</title><content type='html'>Got a new iPhone game project going - an opportunity to learn some new things which is always fun.&lt;br /&gt;I am using the &lt;b&gt;&lt;a href="http://www.cocos2d-iphone.org/"&gt;cocos2d&lt;/a&gt;&lt;/b&gt; framework, which really saves me a lot of work.&lt;br /&gt;I still would like to get deeper into OpenGL ES some time later, but for this project it will be enough to have &lt;b&gt;cocos2d&lt;/b&gt; handle the low level details.&lt;br /&gt;&lt;br /&gt;One issue I struggled with is that I need to create fairly detailed animation of the scene background.&lt;br /&gt;&lt;br /&gt;Due to the limit on OpenGL ES texture size (especially on older devices where the texture is limited to 1024x1024 pixels), I am faced with two options:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Limit the number of frames (In a 1024x1024 texture I can get 9 frames of size 320x340 which is the size of my background area in the game).&lt;/li&gt;&lt;li&gt;Construct the background area from multiple animations and compose them programmatically. While possible, this makes the design work more cumbersome as the designer needs to supply the needed graphics and their location. &lt;/li&gt;&lt;/ul&gt;Using a larger texture size of 2048x2048 gives me enough room for 36 frames, which is sufficient for quite a nice background animation loop, but should I give up all older devices (prior to iPhone 3Gs)?&lt;br /&gt;&lt;br /&gt;There are millions of those!&lt;br /&gt;&lt;br /&gt;So this leads me to the current solution I am going to use, which is:&lt;br /&gt;&lt;br /&gt;Use a 2048x2048 texture for newer devices, and substitute that for a smaller 1024x1024 texture on older devices in run time.&lt;br /&gt;&lt;br /&gt;But how should I decide which texture to use?&lt;br /&gt;&lt;br /&gt;Well, I will save you all my google searches, as the answer was found right under my nose:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cocos2d CCConfiguration class!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here's the code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;NSString *plistFile;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp; int numFrames; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;if ([[CCConfiguration sharedConfiguration] maxTextureSize] &amp;lt; 2048)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; plistFile = @"highQualityAnimation.plist"];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numFrames = 36;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; plistFile = @"highQualityAnimation.plist"];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; numFrames = 9;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // cache the frames to the sharedSpriteFrameCache&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CCSpriteFrameCache * cache = [CCSpriteFrameCache sharedSpriteFrameCache];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [cache addSpriteFramesWithFile:plistFile];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // create the animation&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CCAnimation * animation = [[CCAnimation alloc] initWithName:@"animation" delay:0.1];&amp;nbsp;&amp;nbsp;&amp;nbsp; // set the frame rate as needed&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( int i=1; i &amp;lt;= numFrames; ++i )&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NSString * fname = [NSString stringWithFormat:@"animation_frame_%i.png", i];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [animation addFrame:[cache spriteFrameByName: fname]];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CCSprite *backgroundSprite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"animation_frame_1.png"]];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; id action = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:animation]];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [backgroundSprite runAction:action];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // add the sprite to the scene layer&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [self addChild:backgroundSprite];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;That's easy enough, gives good animation on newer devices, and still reasonably support for older devices.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-5204621448522098859?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/5204621448522098859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/12/cocos2d-support-new-and-old-devices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/5204621448522098859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/5204621448522098859'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/12/cocos2d-support-new-and-old-devices.html' title='Cocos2D support new and old devices textures'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-30570386908982124</id><published>2010-12-18T23:48:00.000-08:00</published><updated>2010-12-18T23:48:13.765-08:00</updated><title type='text'>Easily making the different size icons for iPhone and iPad</title><content type='html'>This is a small tip for scaling your icon to the different sizes requested by iPhone and iPad applications. I used to do that with Photoshop actions in the past, but if that is not available, you can use this tip with no extra software using Mac OS X Automator:&lt;br /&gt;1. I Start with a high quality 512x512 png file (which you will later rename to iTunesArtwork without the png extension) as this is needed for the App Store.&lt;br /&gt;2. In Automator, create a new Service and add the following steps:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_UmtiLhaIz2g/TQ23enklCaI/AAAAAAAABiw/SlLFA4zPqf0/s1600/automatorWF.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="234" src="http://4.bp.blogspot.com/_UmtiLhaIz2g/TQ23enklCaI/AAAAAAAABiw/SlLFA4zPqf0/s320/automatorWF.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Save this service as iPhoneIcon (or icon57, or whatever).&lt;br /&gt;3. Similarly, make services for the different sizes as listed here:&lt;br /&gt;Icon-72.png (72x72)&lt;br /&gt;Icon@2x.png (114x114)&lt;br /&gt;Icon-Small.png (29x29)&lt;br /&gt;Icon-Small-50.png (50x50)&lt;br /&gt;Icon-Small@2x.png (58x58)&lt;br /&gt;4. Now place your 512 icon in a folder, in the finder, right-click the icon file and select from the services sub-menu the different services, and voila! you got the scaled icon with the right name.&lt;br /&gt;5. Add to your project resources and you are ready to go...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-30570386908982124?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/30570386908982124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/12/easily-making-different-size-icons-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/30570386908982124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/30570386908982124'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/12/easily-making-different-size-icons-for.html' title='Easily making the different size icons for iPhone and iPad'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UmtiLhaIz2g/TQ23enklCaI/AAAAAAAABiw/SlLFA4zPqf0/s72-c/automatorWF.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-9078426795120465199</id><published>2010-12-04T01:31:00.000-08:00</published><updated>2010-12-04T01:31:13.511-08:00</updated><title type='text'>File Names are Case Sensitive!</title><content type='html'>Urrrrrrgggggghhhh. Spent two days debugging an issue where my program works well on the simulator, but not on a device. I was debugging directory creations, file createions, file permissions in an attempt to find why a dwnloaded file could not be read. I am downloading a zip file from a server, and unzip it into a sub-directory of the Documents directory of my app.&lt;br /&gt;I used PhoneDisk to look at the file system - all hierarchy is created and it seems the file I am trying to read is there too.&lt;br /&gt;After two days of debugging and trying all kind of things, getting file not find errors, I finally realized that the file is named "File.ini" while I was trying to read "file.ini".&lt;br /&gt;This works fine on the simulator, but not on the device where all file names are case sensitive.&lt;br /&gt;I feel stupid, but at least fixed the bug....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-9078426795120465199?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/9078426795120465199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/12/file-names-are-case-sensitive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/9078426795120465199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/9078426795120465199'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/12/file-names-are-case-sensitive.html' title='File Names are Case Sensitive!'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-344505027087835094</id><published>2010-11-20T14:31:00.000-08:00</published><updated>2010-11-20T14:31:57.837-08:00</updated><title type='text'>TTURLRequest tracking download progress</title><content type='html'>OK, I needed to present a progress bar while downloading a fairly large file to my app.&lt;br /&gt;This presented three challanges:&lt;br /&gt;1. Presenting a progress bar. Well, with three20 this is real easy - I created a view controller that is presented modally and used the Three20 ActivityLabel:&lt;br /&gt;- (void) loadView&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [super loadView];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _downloadProgressLabel = [[TTActivityLabel alloc] initWithStyle:TTActivityLabelStyleBlackBezel];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _downloadProgressLabel.progress = _progress;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _downloadProgressLabel.text = @"Downloading My File...";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [_downloadProgressLabel sizeToFit];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _downloadProgressLabel.center = self.view.center;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [self.view addSubview:_downloadProgressLabel];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void) setProgress:(float)inProgress&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _progress = inProgress;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _downloadProgressLabel.progress = _progress;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;2. Getting the progress from an asynchronous TTURLRequest. Well, the TTURLRequestDelegate protocol has a method called requestDidUploadData, but this is only used by uploads (POST with some body). Well, thought I will implement something, but a quick google search found me that: &lt;a href="https://github.com/facebook/three20/pull/288"&gt;https://github.com/facebook/three20/pull/288&lt;/a&gt;&lt;br /&gt;So, I was not the first to tackle this... thanks &lt;a href="https://github.com/cemaleker"&gt;Cemal Eker&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;3. After implementing this, I still had an issue. I found out that I made a stupid mistake. I was waiting in a loop for the request to finish doing [NSThread sleepForTimeInterval:0.5]. This caused both the URLRequest to not function as well as my view controller to not show up..&lt;br /&gt;So, don't do that, you are going to get a requestDidFinish in your delegate, so no need to sit in a loop...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-344505027087835094?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/344505027087835094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/11/tturlrequest-tracking-download-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/344505027087835094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/344505027087835094'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/11/tturlrequest-tracking-download-progress.html' title='TTURLRequest tracking download progress'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-5065051506503538064</id><published>2010-10-21T15:45:00.000-07:00</published><updated>2010-11-25T02:30:39.704-08:00</updated><title type='text'>Sizing a launcher item image in Three20</title><content type='html'>Recently I got deeper into iPhone (or iOS) programming, doing some projects for fun and for fee.&lt;br /&gt;My friend Reuven wanted me to use a framework called Three20 in the context of a project I am doing for XMPie, but the person who really pushed me into it is Yosi Taguri of fiddme.com who gave me a crash course on Three20.&lt;br /&gt;So, I am working now on converting the XMPie project to Three20, and I spent the last couple of hours on trying to get the launcher view work with some images that are of unknown sizes. I initially thought I will have to sub-class the launcher view and all its related classes (TTLauncherItem, TTLauncherButton), but this is of course the wrong way of doing things in Three20...&lt;br /&gt;There is a better way which is to use the stylesheet mechansim of Three20. I read the tutorial by Matt Vague (&lt;a href="http://mattvague.com/three20-stylesheets-tutorial"&gt;Three20 stylesheets tutorial&lt;/a&gt;), but it was not enough to get what I wanted.&lt;br /&gt;What really helped me figure this one out is a tool named &lt;a href="http://github.com/klazuka/TTStyleBuilder"&gt;TTStyleBuilder&lt;/a&gt; by a guy named Keith Lazuka.&lt;br /&gt;finally I was able to create the following style in my stylesheet to get the images to behave:&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;- (TTStyle*)launcherButtonXM:(UIControlState)state {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [TTPartStyle styleWithName:@"image" style: TTSTYLESTATE(launcherButtonImageXM:, state) next:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;[TTTextStyle styleWithFont:[UIFont boldSystemFontOfSize:11] color:RGBCOLOR(180, 180,180)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; minimumFontSize:11 shadowColor:nil shadowOffset:CGSizeZero&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; textAlignment:UITextAlignmentCenter verticalAlignment:UIControlContentVerticalAlignmentBottom&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; lineBreakMode:UILineBreakModeClip numberOfLines:1 next:nil]];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;// Our launcher button image style&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;- (TTStyle*)launcherButtonImageXM:(UIControlState)state {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TTStyle* style =&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;[TTShapeStyle styleWithShape:[TTRoundedRectangleShape&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; shapeWithRadius:8] next:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; [TTBoxStyle styleWithMargin:UIEdgeInsetsMake(0, 0, 0, 0)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; padding:UIEdgeInsetsMake(22, 22, 22, 22)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; minSize:CGSizeMake(0, 0)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;position:TTPositionStatic next:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; [TTImageStyle styleWithImageURL:nil defaultImage:nil contentMode:UIViewContentModeScaleAspectFit&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;size:CGSizeMake(57, 57) next:nil&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ]]];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (state == UIControlStateHighlighted || state == UIControlStateSelected) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [style addStyle:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;[TTBlendStyle styleWithBlend:kCGBlendModeSourceAtop next:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; [TTSolidFillStyle styleWithColor:RGBACOLOR(0,0,0,0.5) next:nil]]];&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return style;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You use this style in the launcher by setting the style property of the launcher item:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; launcherItem.style = @"launcherButtonXM:";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [_launcherView addItem:launcherItem animated:YES];&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Three20 is cool!&lt;br /&gt;&lt;br /&gt;[Edit] Based on some questions I got, I want to clarify that the style methods above are placed in my XMDefaultStyleSheet which is defined as an inherited class of TTDefaultStyleSheet. I create an instance of this class and set it as the default style sheet in the App Delegate applicationDidFinishLaunching method like that:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // register our stylesheet&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [TTStyleSheet setGlobalStyleSheet:[[[XMPDefaultStylesheet alloc] init] autorelease]]; &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-5065051506503538064?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/5065051506503538064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/10/sizing-launcher-item-image-in-three20.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/5065051506503538064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/5065051506503538064'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/10/sizing-launcher-item-image-in-three20.html' title='Sizing a launcher item image in Three20'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-7814852712086085391</id><published>2010-07-20T06:04:00.000-07:00</published><updated>2010-07-27T06:16:38.187-07:00</updated><title type='text'>Startup weekend Tel Aviv Jaffa</title><content type='html'>Just got back from three days of fun at the startup weekend event in the Peres Center for Peace in Jaffa. It was nice to see a nice Palestinian group joining together their fellow Israeli entrepreneurs and working together to create cool and useful start ups. Compared to the previous event, I felt this time there were more "real" ideas and very high level execution and presentation. I joined a team where we developed an iPhone game for blind people. The game "son of zato" allows blind people to aim and shoot at virtual monsters using audio directional signals. It was great fun!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href='http://blogpress.w18.net/photos/10/07/20/502.jpg'&gt;&lt;img src='http://blogpress.w18.net/photos/10/07/20/s_502.jpg' border='0' width='281' height='210' style='margin:5px'&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;- Posted using BlogPress from my iPad&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-7814852712086085391?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/7814852712086085391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/07/startup-weekend-tel-aviv-jaffa.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/7814852712086085391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/7814852712086085391'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/07/startup-weekend-tel-aviv-jaffa.html' title='Startup weekend Tel Aviv Jaffa'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-2096251074257845577</id><published>2010-07-09T05:49:00.000-07:00</published><updated>2010-07-09T05:51:30.581-07:00</updated><title type='text'>Birthday Present</title><content type='html'>My beloved wife is celebrating birthday tomorrow and I just found the right present:&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=9626343559&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;Three Men In A Boat - in audio book format. It is also available for download from &lt;a href="http://www.audible.com/"&gt;Audible&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;She used to have that on cassette tape, and this is no longer playable...&lt;br /&gt;&lt;br /&gt;Hope she will be happy...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy Birthday Love!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-2096251074257845577?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/2096251074257845577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/07/birthday-present.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/2096251074257845577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/2096251074257845577'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/07/birthday-present.html' title='Birthday Present'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-6948095905636131882</id><published>2010-07-01T02:58:00.000-07:00</published><updated>2010-07-01T02:58:31.110-07:00</updated><title type='text'>Art Experiment of the week</title><content type='html'>This week I had some great tasting cherries. I went through a dozen watching TV, and placed the stones on a piece of paper. The stones with some left over from the cherries, created some blood colored stains on the paper. A light bulb turned on over my head... "Aha", I thought, lets try painting with cherries...&lt;br /&gt;&amp;nbsp;So here is the first attempt of cheery-paint (not sure you can see the details in this scan, and I am not too happy about it yet. I plan to try some more - so stay tuned...):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_UmtiLhaIz2g/TBP45DWcJlI/AAAAAAAABVY/cxIcYDsJsSg/s1600/CherryPaint1_LR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_UmtiLhaIz2g/TBP45DWcJlI/AAAAAAAABVY/cxIcYDsJsSg/s320/CherryPaint1_LR.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-6948095905636131882?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/6948095905636131882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/07/art-experiment-of-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/6948095905636131882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/6948095905636131882'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/07/art-experiment-of-week.html' title='Art Experiment of the week'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_UmtiLhaIz2g/TBP45DWcJlI/AAAAAAAABVY/cxIcYDsJsSg/s72-c/CherryPaint1_LR.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-5228690425298266405</id><published>2010-06-18T00:16:00.001-07:00</published><updated>2010-06-18T00:28:07.462-07:00</updated><title type='text'>Trying Windows Live Writer</title><content type='html'>I am “forced” to work on my windows laptop as I am working on a huge tender response that includes many technological systems, suppliers, integration and so on. I started working on the project using my MacBook with Open Office, but that created quite a mess as the rest of the companies and my client are using Windows and Microsoft Office. So, I had to go and get a laptop with Windows 7 on it. I went to the local computer store, and asked “here’s what I need, what do you have in stock?” – so I got a Dell Inspiron which I am absolutely OK with.&lt;br /&gt;Now, this tender is a bit special in that the technological part of it is being reviewed by the government using a “flexible procedure” – meaning that this part is not given score, but the government can get back to us with more questions, requests for clarifications, etc. This means I am already working on the fourth iteration. Now, this time the committee inspecting our proposals warned us that “this is the last round” and that they will not issue any more – so we should really try to provide the best answers. The deadline is next Thursday… And, I am flying for a week to Italy….&lt;br /&gt;So, I am working feverishly to try and prepare all the materials for my client, so they can take over preparing the response while I am away. But they still insist I take my laptop with me to Italy in case they will have some questions for me. I originally planned to be completely disconnected from the world while on vacation, but life sometimes makes other decisions for us…&lt;br /&gt;Anyway, trying to make the situation have some positive side, I thought I will also use the laptop to write some blog posts from Tuscany…&lt;br /&gt;As I don’t expect to have regular internet connection in the rural areas of Tuscany, I searched for some offline blogging tools, and I found out that I already have one installed – which is Windows Live Writer. So here I am giving it a try before I pack to see if this works for me…&lt;br /&gt;Here's the area we will be in: &lt;br /&gt;&lt;iframe frameborder="0" height="350" marginheight="0" marginwidth="0" scrolling="no" src="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;msa=0&amp;amp;msid=100868651634321605634.00048948b1640fa01611c&amp;amp;ll=45.259422,13.205566&amp;amp;spn=6.63429,21.643066&amp;amp;output=embed" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;View &lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;msa=0&amp;amp;msid=100868651634321605634.00048948b1640fa01611c&amp;amp;ll=45.259422,13.205566&amp;amp;spn=6.63429,21.643066&amp;amp;source=embed" style="color: blue; text-align: left;"&gt;Perugia&lt;/a&gt; in a larger map&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1905131267&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0756640989&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=1598802844&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;o=1&amp;p=8&amp;l=bpl&amp;asins=0767900383&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="align:left;padding-top:5px;width:131px;height:245px;padding-right:10px;"align="left" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-5228690425298266405?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/5228690425298266405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/06/trying-windows-live-writer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/5228690425298266405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/5228690425298266405'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/06/trying-windows-live-writer.html' title='Trying Windows Live Writer'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-4621140593257414023</id><published>2010-06-15T05:57:00.001-07:00</published><updated>2010-06-15T05:57:48.030-07:00</updated><title type='text'>Test post from iPad</title><content type='html'>OK, trying to write my first post using BlogPress on the iPad. First impression is that the iPad on-screen keyboard is quite usable. Well until you want an hyphen or other mark not on the main keyboard. But who cares of those little marks.... Being a (very) new blogger, I do not have much experience but clearly for blogging on the run this Is more than enough. You can always go back and make it prettier when you get back home or to an internet cafe. There is no fancy editor. Pretty much simple text, but there is an option to add pictures. So here is one...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;a href='http://blogpress.w18.net/photos/10/06/15/472.jpg'&gt;&lt;img src='http://blogpress.w18.net/photos/10/06/15/s_472.jpg' border='0' width='177' height='281' style='margin:5px'&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;I am even able to add some text below it as you can see..&lt;br /&gt;&lt;br /&gt;- Posted using BlogPress from my iPad&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-4621140593257414023?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/4621140593257414023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/06/test-post-from-ipad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/4621140593257414023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/4621140593257414023'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/06/test-post-from-ipad.html' title='Test post from iPad'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5488803742537723823.post-6241204071842352980</id><published>2010-06-12T05:02:00.000-07:00</published><updated>2010-06-12T11:08:05.974-07:00</updated><title type='text'>The pleasure of simple things</title><content type='html'>Sometimes preparing food, washing dishes, doing the laundry, folding, ironing and watering the garden can be real joy. Here's how I do it: I get a portable music device (I am using a mobile phone with mp3 player, but you can use iPod, mp3 player, etc. - no shortage of music sources), load it with some good music and let it shuffle play...&lt;br /&gt;I call it chores-yoga and I really love it.&lt;br /&gt;If your device has enough music on it, from all periods and genres, it can be a real pleasure to let it shuffle and get surprised with a song you forgot you even had in your collection.&lt;br /&gt;I find myself completely isolated from the world, from the news, from any worries, concentrating on the task at hand, enjoying the music and getting work done...&lt;br /&gt;Some people can listen to music while they work. As my work often needs my full attention, I find it too distracting often, but with the daily chores - it is just perfect!&lt;br /&gt;As I write this post, my player just surprsied me now with the "I hear a Rhapsody" played by Bill Evans and Jim Hall from their Undercurrent CD - what a great piece! Can bring me to tears...&lt;br /&gt;&lt;br /&gt;Here's a self portrait I made:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_UmtiLhaIz2g/TBOBH3b3FrI/AAAAAAAABVI/pE8NW9NMNsc/s1600/DSC_0071_LR.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5481867143579899570" src="http://4.bp.blogspot.com/_UmtiLhaIz2g/TBOBH3b3FrI/AAAAAAAABVI/pE8NW9NMNsc/s320/DSC_0071_LR.jpg" style="cursor: pointer; float: left; height: 236px; margin: 0pt 10px 10px 0pt; width: 354px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"Self Portrait as a cat" - 2010&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can get the Bill Evans and Jim Hall "Undercurrent CD" from Amazon:&lt;br /&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=sroo-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B0000691U0&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5488803742537723823-6241204071842352980?l=srooltheknife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://srooltheknife.blogspot.com/feeds/6241204071842352980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://srooltheknife.blogspot.com/2010/06/pleasure-of-simple-things.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/6241204071842352980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5488803742537723823/posts/default/6241204071842352980'/><link rel='alternate' type='text/html' href='http://srooltheknife.blogspot.com/2010/06/pleasure-of-simple-things.html' title='The pleasure of simple things'/><author><name>Israel Roth</name><uri>http://www.blogger.com/profile/05282134357400070378</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://3.bp.blogspot.com/_UmtiLhaIz2g/TBP72SQMhBI/AAAAAAAABVk/SZn2oBP1a6g/S220/DSC_0068_LR.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_UmtiLhaIz2g/TBOBH3b3FrI/AAAAAAAABVI/pE8NW9NMNsc/s72-c/DSC_0071_LR.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
