<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUAAQXo5eyp7ImA9WhRWGUs.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995</id><updated>2012-01-29T19:31:35+00:00</updated><category term="barcamp" /><category term="logging" /><category term="bango" /><category term="flash" /><category term="static analysis" /><category term="momolondon" /><category term="community" /><category term="bcl7" /><category term="privacy" /><category term="adobe" /><category term="analytics" /><category term="train" /><category term="cocoa" /><category term="epub" /><category term="applescript" /><category term="femtocell" /><category term="zeroconf" /><category term="imperial" /><category term="transcoding" /><category term="xhtml" /><category term="vodafone" /><category term="localisation" /><category term="opera" /><category term="bcl6" /><category term="kids" /><category term="facebook" /><category term="googlegears" /><category term="opencv" /><category term="java" /><category term="wifi" /><category term="webdav" /><category term="mms" /><category term="formatting" /><category term="government" /><category term="lastminute" /><category term="networking" /><category term="ota09" /><category term="xpday" /><category term="j2me" /><category term="ocmock" /><category term="flickr" /><category term="view" /><category term="admob" /><category term="mac" /><category term="braille" /><category term="trutap" /><category term="unit testing" /><category term="design" /><category term="bespin" /><category term="bbc-redux" /><category term="payment" /><category term="bcl8" /><category term="statistics" /><category term="blogging" /><category term="7digital" /><category term="json" /><category term="j2mepolish" /><category term="google" /><category term="dabbledb" /><category term="sky" /><category term="work-life-balance" /><category term="shozu" /><category term="gamekit" /><category term="messaging" /><category term="xapian" /><category term="os x" /><category term="demo" /><category term="sync" /><category term="creativity" /><category term="eyetv" /><category term="bigtable" /><category term="opensource" /><category term="ios" /><category term="sound" /><category term="charity" /><category term="rad" /><category term="openhacklondon" /><category term="wsgi" /><category term="tdd" /><category term="iplayer" /><category term="gesture" /><category term="mentoring" /><category term="user experience" /><category term="p2p" /><category term="handbrake" /><category term="playbook" /><category term="market_research" /><category term="humm" /><category term="futureplatforms" /><category term="music" /><category term="gdd08" /><category term="chord" /><category term="icloud" /><category term="energy" /><category term="interaction" /><category term="fit" /><category term="webos" /><category term="twitter" /><category term="volunteering" /><category term="qnap" /><category term="mwc2008" /><category term="deviceanywhere" /><category term="team" /><category term="webapp" /><category term="foursquare" /><category term="iphonetechtalk" /><category term="mobile" /><category term="sonyericsson" /><category term="gla" /><category term="dopplr" /><category term="html5" /><category term="web" /><category term="encoding" /><category term="ocunit" /><category term="annotations" /><category term="ovi" /><category term="art" /><category term="uservoice" /><category term="hackdaylondon" /><category term="time machine" /><category term="exceptions" /><category term="transplant" /><category term="css" /><category term="ribot" /><category term="sun" /><category term="realtime" /><category term="performance" /><category term="palmpre" /><category term="coregraphics" /><category term="pachube" /><category term="backup" /><category term="safari" /><category term="jabber" /><category term="accessories" /><category term="manyeyes" /><category term="push-notifications" /><category term="language" /><category term="gui" /><category term="getjar" /><category term="style" /><category term="android" /><category term="xcode" /><category term="cloudmade" /><category term="iads" /><category term="svg" /><category term="intel" /><category term="spa2008" /><category term="computer_vision" /><category term="tomiahonen" /><category term="wurfl" /><category term="redundancy" /><category term="widget" /><category term="w3c" /><category term="node.js" /><category term="yahoo" /><category term="core-animation" /><category term="javascript" /><category term="tfl" /><category term="volantis" /><category term="jira" /><category term="social" /><category term="youtube" /><category term="http" /><category term="crashes" /><category term="rdf" /><category term="instagram" /><category term="archive" /><category term="developers" /><category term="crime" /><category term="sensors" /><category term="amazon" /><category term="browser" /><category term="windows" /><category term="rnib" /><category term="guardian" /><category term="arduino" /><category term="hackday" /><category term="vision" /><category term="litmus" /><category term="culture" /><category term="bbc" /><category term="samsung" /><category term="nas" /><category term="bondi" /><category term="broadcast" /><category term="gnuradio" /><category term="bluetooth" /><category term="newspapers" /><category term="appengine" /><category term="web2.0" /><category term="search" /><category term="o2litmus" /><category term="maps" /><category term="failure" /><category term="bcs" /><category term="processing" /><category term="sysadmin" /><category term="sms" /><category term="qr_codes" /><category term="movies" /><category term="currentcost" /><category term="image-recognition" /><category term="development" /><category term="offline" /><category term="maven" /><category term="ota11" /><category term="updates" /><category term="api" /><category term="yiibu" /><category term="pairing" /><category term="chrome" /><category term="openstreetmap" /><category term="objective-c" /><category term="barcamplondon3" /><category term="dashcode" /><category term="git" /><category term="rss" /><category term="video" /><category term="nosql" /><category term="getsatisfaction" /><category term="mobileweb" /><category term="shazam" /><category term="voting" /><category term="tesco" /><category term="lego" /><category term="nfc" /><category term="hamcrest" /><category term="battery" /><category term="tapmaguk" /><category term="useragent" /><category term="paythru" /><category term="rest" /><category term="in-app-purchases" /><category term="naptan" /><category term="palm" /><category term="marketing" /><category term="responsive" /><category term="rummble" /><category term="content" /><category term="ota10" /><category term="flurry" /><category term="education" /><category term="android appstore blackberry bluevia economics facebook futureplatforms html5 ios iphone javame momolo momolondon london nokia overtheair statistics symbian telefonica visionmobile windows-phone-7" /><category term="operator" /><category term="barcamplondon6" /><category term="childcare" /><category term="futurefriendly" /><category term="gradients" /><category term="support" /><category term="ec2" /><category term="deviceatlas" /><category term="smb" /><category term="ebay" /><category term="github" /><category term="input" /><category term="advertising" /><category term="sailing" /><category term="transforms" /><category term="police" /><category term="interface" /><category term="electricity" /><category term="techtalk" /><category term="prototyping" /><category term="webkit" /><category term="nokia" /><category term="whisky" /><category term="nslog" /><category term="voice" /><category term="qualcomm" /><category term="london" /><category term="mindstorms" /><category term="learning" /><category term="hardware" /><category term="surfkitchen" /><category term="wireframes" /><category term="microwriter" /><category term="radio" /><category term="air" /><category term="fragmentation" /><category term="0870" /><category term="overtheair" /><category term="momolo" /><category term="hudson" /><category term="barcamplondon7" /><category term="publishing" /><category term="clone" /><category term="blackberry" /><category term="scrum" /><category term="paypal" /><category term="wireless" /><category term="limo" /><category term="lombok" /><category term="windows-phone-7" /><category term="qt" /><category term="vertu" /><category term="barcamplondon8" /><category term="flirtomatic" /><category term="mobileCampLondon" /><category term="bonjour" /><category term="university" /><category term="intohand" /><category term="giffgaff" /><category term="multi-user" /><category term="mocks" /><category term="xaml" /><category term="erlang" /><category term="oneweb" /><category term="omtp" /><category term="gwt" /><category term="fom" /><category term="asterix" /><category term="drwho" /><category term="firefox" /><category term="location" /><category term="openbts" /><category term="carsonified" /><category term="iphone" /><category term="accessibility" /><category term="travel" /><category term="spa" /><category term="symbian" /><category term="eds" /><category term="keyboard" /><category term="t-mobile" /><category term="elgato" /><category term="surface" /><category term="o2" /><category term="audioboo" /><category term="airdrop" /><category term="business" /><category term="reviews" /><category term="xmpp" /><category term="scalability" /><category term="security" /><category term="freeview" /><category term="semantic web" /><category term="beta_testing" /><category term="javame" /><category term="gsm" /><category term="robots" /><category term="ux" /><category term="school" /><category term="game" /><category term="augmented_reality" /><category term="microformats" /><category term="billing" /><category term="gears" /><category term="jataf" /><category term="coding" /><category term="atom" /><category term="sign-language" /><category term="orange" /><category term="testing" /><category term="googleappengine" /><category term="couchdb" /><category term="media" /><category term="scotland" /><category term="debugging" /><category term="cache" /><category term="apple" /><category term="mobileworldcongress" /><category term="ipad" /><category term="digital-rights" /><category term="qnx" /><category term="voiceover" /><category term="barcelona" /><category term="visionmobile" /><category term="feedback" /><category term="ibm" /><category term="trolltech" /><category term="agile" /><category term="python" /><category term="layout" /><category term="thetrainline" /><category term="iosdevuk" /><category term="mtrends" /><category term="database" /><category term="fennec" /><category term="linux" /><category term="kizoom" /><category term="appstore" /><category term="research" /><category term="instruments" /><category term="futureofmobile" /><category term="ajax" /><category term="htc" /><category term="streaming" /><category term="voip" /><category term="myrail lite" /><category term="developing_markets" /><category term="mongodb" /><category term="titanium" /><category term="television" /><category term="openwave" /><category term="food" /><category term="icon" /><category term="cloudcomputing" /><category term="microsoft" /><category term="mobilewood" /><category term="capuchin" /><category term="data" /><category term="landscape" /><category term="multitouch" /><title>Expanding horizons</title><subtitle type="html">ubiquitous computing, cognitive science, design and everyday things</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.cohen-rose.org/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>165</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/AdamCohenRose" /><feedburner:info uri="adamcohenrose" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry><title type="text">devinross/tapkulibrary - GitHub [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/sBexhM9AOo8/tapkulibrary" /><category term="objective-c" /><category term="iphone" /><category term="ios" /><category term="library" /><category term="ui" /><author><name>adamcr</name></author><updated>2012-01-29T11:31:35-08:00</updated><id>http://www.delicious.com/url/958a0be4380337b37a5ff96d1ff37dfd#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/958a0be4380337b37a5ff96d1ff37dfd</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/sBexhM9AOo8" height="1" width="1"/&gt;</summary><feedburner:origLink>https://github.com/devinross/tapkulibrary</feedburner:origLink></entry><entry><title type="text">Responsive Advertising | Mark Boulton [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/KprKoj59O_w/responsive-advertising" /><category term="advertising" /><category term="web" /><category term="design" /><category term="responsive" /><author><name>adamcr</name></author><updated>2012-01-27T04:39:59-08:00</updated><id>http://www.delicious.com/url/6a7e2be1df6bb953b1b09bbc3ece79a8#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/6a7e2be1df6bb953b1b09bbc3ece79a8</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/KprKoj59O_w" height="1" width="1"/&gt;</summary><feedburner:origLink>http://www.markboulton.co.uk/journal/comments/responsive-advertising</feedburner:origLink></entry><entry><title type="text">Responsive Advertising · ART=WORK [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/VY92a80BOxQ/responsive-ads.php" /><category term="advertising" /><category term="responsive" /><category term="web" /><category term="design" /><author><name>adamcr</name></author><updated>2012-01-27T04:32:57-08:00</updated><id>http://www.delicious.com/url/f8520779cb19bf4be871155bcd623a29#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/f8520779cb19bf4be871155bcd623a29</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/VY92a80BOxQ" height="1" width="1"/&gt;</summary><feedburner:origLink>http://artequalswork.com/posts/responsive-ads.php</feedburner:origLink></entry><entry><title type="text">Funny.Pho.to - Create fun photo effects online with Funny.Pho.to. Free photo frames, photo collages, photo montages, e-cards and valentines [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/sKOZXZ_okqM/" /><category term="photo" /><category term="ethan" /><author><name>adamcr</name></author><updated>2012-01-26T14:52:23-08:00</updated><id>http://www.delicious.com/url/35c757f97c0b38545d661fce4df0b40c#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/35c757f97c0b38545d661fce4df0b40c</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/sKOZXZ_okqM" height="1" width="1"/&gt;</summary><feedburner:origLink>http://funny.pho.to/</feedburner:origLink></entry><entry><title type="text">Cobook - The Smart Address Book for Mac [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/eyA9j3-afHU/" /><category term="address" /><category term="mac" /><category term="email" /><category term="contacts" /><category term="os_x" /><author><name>adamcr</name></author><updated>2012-01-26T09:22:32-08:00</updated><id>http://www.delicious.com/url/4ccd66ab279810452993662c02752d09#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/4ccd66ab279810452993662c02752d09</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/eyA9j3-afHU" height="1" width="1"/&gt;</summary><feedburner:origLink>http://www.cobookapp.com/</feedburner:origLink></entry><entry><title type="text">Detector [BETA] - combined browser- &amp; feature-detection for your app [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/xyLkeZbuBnc/" /><category term="devices" /><category term="browser" /><category term="mobile" /><category term="feature" /><category term="profiles" /><author><name>adamcr</name></author><updated>2012-01-25T13:12:17-08:00</updated><id>http://www.delicious.com/url/c31bb5af475a2cd0d60b4b4593708e6f#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/c31bb5af475a2cd0d60b4b4593708e6f</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/xyLkeZbuBnc" height="1" width="1"/&gt;</summary><feedburner:origLink>http://detector.dmolsen.com/</feedburner:origLink></entry><entry><title type="text">Maruku: a Markdown-superset interpreter [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/ahlYQEi4dFo/index.html" /><category term="markdown" /><category term="blogging" /><category term="html" /><category term="formatting" /><author><name>adamcr</name></author><updated>2012-01-25T02:28:38-08:00</updated><id>http://www.delicious.com/url/7a3fd0e31592cec1f447d92a5aa48c99#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/7a3fd0e31592cec1f447d92a5aa48c99</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/ahlYQEi4dFo" height="1" width="1"/&gt;</summary><feedburner:origLink>http://maruku.rubyforge.org/index.html</feedburner:origLink></entry><entry><title type="text">Debugging tool for Safari on iPhone, iPad and PhoneGap apps - Remote Inspector (Firebug) for JavaScript, HTML and CSS [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/LV27ULsfUHI/" /><category term="mobile" /><category term="ios" /><category term="iphone" /><category term="webkit" /><category term="debugging" /><category term="ipad" /><category term="javascript" /><category term="css" /><author><name>adamcr</name></author><updated>2012-01-25T02:15:47-08:00</updated><id>http://www.delicious.com/url/4cf3066cc55a8cace967f62618adb66e#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/4cf3066cc55a8cace967f62618adb66e</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/LV27ULsfUHI" height="1" width="1"/&gt;</summary><feedburner:origLink>http://www.iwebinspector.com/</feedburner:origLink></entry><entry><title type="text">Cookies on the beta | Government Digital Service [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/Q-G9_0ma_IE/" /><category term="cookies" /><category term="web" /><category term="security" /><category term="privacy" /><author><name>adamcr</name></author><updated>2012-01-24T09:15:51-08:00</updated><id>http://www.delicious.com/url/e3060ff60589fe7c3d55d1748947637c#adamcr</id><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/e3060ff60589fe7c3d55d1748947637c</wfw:commentRss><summary type="html">&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/Q-G9_0ma_IE" height="1" width="1"/&gt;</summary><feedburner:origLink>http://digital.cabinetoffice.gov.uk/2012/01/12/cookies-on-the-beta/</feedburner:origLink></entry><entry><title type="text">HTML5 Please - Use the new and shiny responsibly [del.icio.us]</title><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/OY60SKli1Xo/" /><category term="html5" /><category term="css3" /><category term="polyfills" /><category term="mobile" /><category term="prefixes" /><category term="ie7" /><category term="javascript" /><author><name>adamcr</name></author><updated>2012-01-24T03:38:42-08:00</updated><id>http://www.delicious.com/url/ef9844451e50d988802d9013767ecfc2#adamcr</id><content type="html">Explore features by various axes: mobile, api, javascript, IE&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/OY60SKli1Xo" height="1" width="1"/&gt;</content><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://feeds.delicious.com/v2/rss/url/ef9844451e50d988802d9013767ecfc2</wfw:commentRss><feedburner:origLink>http://html5please.us/</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUCQX47fyp7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-3749068221558376292</id><published>2011-10-04T12:20:00.001+01:00</published><updated>2011-10-04T12:21:00.007+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T12:21:00.007+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="qnx" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="webkit" /><category scheme="http://www.blogger.com/atom/ns#" term="offline" /><category scheme="http://www.blogger.com/atom/ns#" term="appstore" /><category scheme="http://www.blogger.com/atom/ns#" term="advertising" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="playbook" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="webapp" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="overtheair" /><category scheme="http://www.blogger.com/atom/ns#" term="ota11" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="browser" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Over The Air 2011: The FT Web app - We've Got a Website for That</title><content type="html">&lt;p&gt;&lt;em&gt;Andrew Betts, Assanka &lt;a href="http://twitter.com/triblondon"&gt;@triblondon&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;An app is:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;responsive design&lt;/li&gt;
&lt;li&gt;responsive to human interface (mouse, keyboard, touchscreen, TV remote, &amp;#8230;)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;The Daily app is now generating less than 50 tweets a day (and still going down)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Down from over 200&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;iPad web app also works on other devices&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;not just tablets &amp;#8211; phones too&lt;/li&gt;
&lt;li&gt;currently only accessibly on iPad&lt;/li&gt;
&lt;li&gt;works on Android &amp;amp; QNX but not released yet&lt;/li&gt;
&lt;li&gt;Android imminent, QNX a few months&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;server serves the same code to all devices&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;client does customisation and caches as much as it can&lt;/li&gt;
&lt;li&gt;so can go offline and still access pages&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://apps.ft.com/ftwebapp/"&gt;FT web app&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;8 months with 3 people&lt;/li&gt;
&lt;li&gt;then additional 4 months with same people to get Android &amp;amp; Playbook&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="issues"&gt;issues&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;flowed columns and flowing text around fixed elements&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;adobe webkit fork has great flow additions - but not available on devices&lt;/li&gt;
&lt;li&gt;css3 template layouts &amp;#8211; but again not supported&lt;/li&gt;
&lt;li&gt;so have to measure content and cut it into positioned containers using Javascript&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;content balancing&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;always show a whole number of items across the width&lt;/li&gt;
&lt;li&gt;done by classifying devices into four groups according to screen size&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;small, medium, large, large wide&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;podcast pages&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;want to keep playing audio even when move to another page&lt;/li&gt;
&lt;li&gt;put audio player at the top of the DOM, so not altered&lt;/li&gt;
&lt;li&gt;entire app is in a single page &amp;#8211; just swap content in and out&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;swiping between sections&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;continuous carousel made out of three divs&lt;/li&gt;
&lt;li&gt;middle one is always the current&lt;/li&gt;
&lt;li&gt;outer ones are preloaded as required&lt;/li&gt;
&lt;li&gt;implemented swipes using touch gestures&lt;/li&gt;
&lt;li&gt;have to do your own gesture interpretation&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;distinguish between slow drags and flings&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="tools"&gt;tools&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;playbook has remote web debugging&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lanyrd.com/2011/ota2011/shdtk/"&gt;WeinRE&lt;/a&gt; can do similar, but can&amp;#8217;t debug Javascript&lt;/li&gt;
&lt;li&gt;&lt;a href="http://uxebu.com/blog/2010/09/15/touchscroll-0-2-first-alpha-available/"&gt;TouchScroll&lt;/a&gt; allows you to keep headers fixed and snap to columns when swiping across&lt;/li&gt;
&lt;li&gt;web debugging proxies (e.g. &lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;use desktop for layout, but real device for interaction (swiping)&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="discoveries"&gt;discoveries&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;people use native apps differently&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;they tap lightly and fast&lt;/li&gt;
&lt;li&gt;the web browser waits for fast taps in case there&amp;#8217;s a double tap to zoom&lt;/li&gt;
&lt;li&gt;if you don&amp;#8217;t want double tap to zoom&lt;/li&gt;
&lt;li&gt;Assanka made &lt;a href="http://assanka.net/content/tech/2011/08/26/fastclick-native-like-tapping-for-touch-apps/"&gt;fastclick&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="offlineaccess"&gt;offline access&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;launching app offline&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;need to specify URLs in app manifest&lt;/li&gt;
&lt;li&gt;if you change a single file, all of the manifest needs to be re-downloaded&lt;/li&gt;
&lt;li&gt;store as little as possible&lt;/li&gt;
&lt;li&gt;the more you store, the longer your app will take to launch&lt;/li&gt;
&lt;li&gt;iOS manifest is buggy &amp;#8211; you can get name conflicts with other webapps&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;so make sure you give your manifest a custom name&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;development is hell &amp;#8211; things get cached the whole time&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;instead, add a comment that changes every minute (for dev)&lt;/li&gt;
&lt;li&gt;still leaves you time to refresh a few times to check the cacheing&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;manifest is no good for editorial content&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;local storage is much faster than SQLite&lt;/li&gt;
&lt;li&gt;so if you only access by key then use it&lt;/li&gt;
&lt;li&gt;you need permission to store &amp;gt; 5Mb&lt;/li&gt;
&lt;li&gt;strategy:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;launch app from web, just store &amp;lt;= 5Mb and prompt to save to home screen&lt;/li&gt;
&lt;li&gt;saved from home screen, immediately ask for 50Mb and never ask again&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;images downloaded from server as base64 encoded strings&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;can combine images into single requests&lt;/li&gt;
&lt;li&gt;and can then gzip the whole thing&lt;/li&gt;
&lt;li&gt;stored in local SQLite&lt;/li&gt;
&lt;li&gt;rendered into DOM as a data: URI&lt;/li&gt;
&lt;li&gt;base64 transfer also avoids operator image recompression!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;analytics&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;can&amp;#8217;t use Google analytics&lt;/li&gt;
&lt;li&gt;log user actions into local DB&lt;/li&gt;
&lt;li&gt;POST the log when requesting updated content&lt;/li&gt;
&lt;li&gt;on the server, rewrite the log into an Apache format access log&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="unresolvedissues"&gt;unresolved issues&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;SSL security: no browser chrome, so no browser padlock&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;trusted, because we tell you&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Social media integration &amp;#8211; OAuth in separate window doesn&amp;#8217;t work&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;have to reload completely when return to app&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;offline adverts:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;not technically hard, but ad server companies don&amp;#8217;t know how to deal with them&lt;/li&gt;
&lt;li&gt;can&amp;#8217;t retract the ad&lt;/li&gt;
&lt;li&gt;can&amp;#8217;t measure clicks&lt;/li&gt;
&lt;li&gt;can&amp;#8217;t click through at all&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;automated QA &amp;#8211; selenium doesn&amp;#8217;t really work&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;ended up using lots of people and lots of devices&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="platforms"&gt;platforms&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Android is by far the poorest web environment when compared with iOS and QNX&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;mainly due to lack of hardware-accelerated CSS transitions&lt;/li&gt;
&lt;li&gt;so FT have a native Android app which has a single native component &amp;#8211; the gallery to enable swiping&lt;/li&gt;
&lt;li&gt;the rest of the app is HTML/CSS/JS&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;QNX has a native app too, but only to have a home screen icon and to provide distribution&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;upset Apple?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;probably not &amp;#8211; FT are specific market&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;differences between web app and native&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;web has more sections than native ever had&lt;/li&gt;
&lt;li&gt;web app preloads content, so people swipe more often&lt;/li&gt;
&lt;li&gt;as a result web app gets much more interaction&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;is not appearing in the app store an issue?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;yes, but instead making tactical native apps&lt;/li&gt;
&lt;li&gt;e.g. FT Top 100 Companies &amp;#8211; tells users if you want the full edition, go to the web app&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-3749068221558376292?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hZfMKJfwP-N2jROYUZ4CzeXndLY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hZfMKJfwP-N2jROYUZ4CzeXndLY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hZfMKJfwP-N2jROYUZ4CzeXndLY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hZfMKJfwP-N2jROYUZ4CzeXndLY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=OEI2v_x2-nE:y2noLiyEgd4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=OEI2v_x2-nE:y2noLiyEgd4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=OEI2v_x2-nE:y2noLiyEgd4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=OEI2v_x2-nE:y2noLiyEgd4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/OEI2v_x2-nE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/3749068221558376292/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=3749068221558376292" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/3749068221558376292?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/3749068221558376292?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/OEI2v_x2-nE/over-air-2011-ft-web-app-weve-got.html" title="Over The Air 2011: The FT Web app - We've Got a Website for That" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/10/over-air-2011-ft-web-app-weve-got.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkANRXs8fCp7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-1366691640832617632</id><published>2011-10-04T11:39:00.001+01:00</published><updated>2011-10-04T11:39:54.574+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T11:39:54.574+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsm" /><category scheme="http://www.blogger.com/atom/ns#" term="radio" /><category scheme="http://www.blogger.com/atom/ns#" term="asterix" /><category scheme="http://www.blogger.com/atom/ns#" term="voice" /><category scheme="http://www.blogger.com/atom/ns#" term="voip" /><category scheme="http://www.blogger.com/atom/ns#" term="overtheair" /><category scheme="http://www.blogger.com/atom/ns#" term="ota11" /><category scheme="http://www.blogger.com/atom/ns#" term="openbts" /><category scheme="http://www.blogger.com/atom/ns#" term="sms" /><category scheme="http://www.blogger.com/atom/ns#" term="gnuradio" /><category scheme="http://www.blogger.com/atom/ns#" term="opensource" /><category scheme="http://www.blogger.com/atom/ns#" term="femtocell" /><title>Over The Air 2011: OpenBTS - Open Source GSM</title><content type="html">&lt;p&gt;&lt;em&gt;Will Rogers, Senior Consultant at Detica&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Open Base Transceiver Station: &lt;a href="http://openbts.sourceforge.net/"&gt;http://openbts.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;software implementation of radio towers&lt;/li&gt;
&lt;li&gt;USRP: universal software radio peripheral&lt;/li&gt;
&lt;li&gt;written in C++ on top of GNU Radio&lt;/li&gt;
&lt;li&gt;fairly stable &amp;#8211; maintained by Free Software Foundation&lt;/li&gt;
&lt;li&gt;only acts as an access point &amp;#8211; doesn&amp;#8217;t simulate entire mobile network&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;another project: &lt;a href="http://openbsc.osmocom.org/" title="OpenBSC"&gt;OpenBSC&lt;/a&gt; does more&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;but, can translate GSM into VOIP &amp;#8211; Asterix&lt;/li&gt;
&lt;li&gt;originally built by David Burgess (Range Networks) and Harvind Samra&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Range Networks building commercial implementations (e.g. Femtocells)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;originally designed for:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;signals intelligence&amp;#8230;&lt;/li&gt;
&lt;li&gt;disaster relief&lt;/li&gt;
&lt;li&gt;developing countries&lt;/li&gt;
&lt;li&gt;&lt;a href="http://openbts.sourceforge.net/NiuePilot/" title="Niue Pilot System"&gt;Island of Niue project&lt;/a&gt; - March 2010&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;enables GSM network for $1/month per subscriber&lt;/li&gt;
&lt;li&gt;hardly uses any power&lt;/li&gt;
&lt;li&gt;range depends on antenna &amp;amp; height&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Burning Man covered 5km &amp;#8211; with a microwave backhaul&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;supports handset registration&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;requires no pre-provisioning&lt;/li&gt;
&lt;li&gt;get a text with a code &amp;#8211; reply and your IMSI gets added to the asterix&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;some branches support USSD (free data)&lt;/li&gt;
&lt;li&gt;requirements:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;hardware:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;can run the whole thing in a VM&lt;/li&gt;
&lt;li&gt;USB (for USRP 1), or ethernet (for USRP 2)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;software:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;most linuxes (Ubuntu well supported)&lt;/li&gt;
&lt;li&gt;GNUradio&lt;/li&gt;
&lt;li&gt;Asterix PBX&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;USRP was chosen as it was available, but it&amp;#8217;s not really designed for GSM&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;better to have multiple of 13MHz clock&lt;/li&gt;
&lt;li&gt;daughterboards available for various RF frequencies&lt;/li&gt;
&lt;li&gt;need to have GSM-specific one&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;resources&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://gnuradio.org/redmine/attachments/219/fordummies.pdf"&gt;OpenBTS for Dummies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Will has an Ubuntu installer script that just works&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;channels&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;default is one logical channel for control&lt;/li&gt;
&lt;li&gt;everything else (7) for voice&lt;/li&gt;
&lt;li&gt;that means 7 simultaneous handset calls at once&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;e.g. 3 on-network conversations + one outbound&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;if you want more then you need multiple BTS units&lt;/li&gt;
&lt;li&gt;if want SMS then need to steal a voice channel for control&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;SMS messages need routing, so OpenBTS includes smsqueue which forwards messages&lt;/li&gt;
&lt;li&gt;limitations&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;doesn&amp;#8217;t support live handover of calls&lt;/li&gt;
&lt;li&gt;no data support (GPRS or Edge)&lt;/li&gt;
&lt;li&gt;no way of supporting roaming or billing&lt;/li&gt;
&lt;li&gt;3G/UMTS boxes are available, but not yet open source&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;OpenBSC may get there first&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;doesn&amp;#8217;t support encryption&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;use CC/MNC of 001/01 &amp;#8211; these are the test values&lt;/li&gt;
&lt;li&gt;OpenBTS console has various commands&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;timsi&lt;/code&gt; lists connected IMSIs and IMEIs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;testcall&lt;/code&gt; creates a UDP connection to the phone&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;you can then send Layer 3 packets&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sendrrlp&lt;/code&gt; sends a request for location (as mandated by US Gov)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;can provide info about cell tower locations and phone will calculate location itself&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-1366691640832617632?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xDMHxbu0qMi3QlvrHTKCWxOKon0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xDMHxbu0qMi3QlvrHTKCWxOKon0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xDMHxbu0qMi3QlvrHTKCWxOKon0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xDMHxbu0qMi3QlvrHTKCWxOKon0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=C2UifhheydM:-WRQ8vg2r9Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=C2UifhheydM:-WRQ8vg2r9Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=C2UifhheydM:-WRQ8vg2r9Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=C2UifhheydM:-WRQ8vg2r9Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/C2UifhheydM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/1366691640832617632/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=1366691640832617632" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1366691640832617632?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1366691640832617632?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/C2UifhheydM/over-air-2011-openbts-open-source-gsm.html" title="Over The Air 2011: OpenBTS - Open Source GSM" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/10/over-air-2011-openbts-open-source-gsm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMCRX84fSp7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-8254603330769355135</id><published>2011-10-04T11:34:00.000+01:00</published><updated>2011-10-04T11:34:24.135+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T11:34:24.135+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="futureplatforms" /><category scheme="http://www.blogger.com/atom/ns#" term="node.js" /><category scheme="http://www.blogger.com/atom/ns#" term="github" /><category scheme="http://www.blogger.com/atom/ns#" term="windows-phone-7" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="titanium" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="nokia" /><category scheme="http://www.blogger.com/atom/ns#" term="overtheair" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="ota11" /><category scheme="http://www.blogger.com/atom/ns#" term="qt" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><category scheme="http://www.blogger.com/atom/ns#" term="opensource" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><title>Over The Air 2011: Exploding the Gap Between Web and Native</title><content type="html">&lt;p&gt;&lt;em&gt;James Hugman - Engineer at &lt;a href="http://www.futureplatforms.com"&gt;Future Platforms&lt;/a&gt; &lt;a href="http://twitter.com/jhugman"&gt;@jhugman&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Web vs Native is a false dilemma&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;the answer is: it depends, or it&amp;#8217;s both&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;often a lot of display in UI&lt;/li&gt;
&lt;li&gt;story of the glastonbury app&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Orange app for iPhone, Android and Nokia&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;three/four phases of content:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;before (and before embargo)&lt;/li&gt;
&lt;li&gt;during&lt;/li&gt;
&lt;li&gt;after&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;lots of data&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;3000 bands, 65 stages &amp;#8211; timings could change&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="experimentationresearch"&gt;experimentation &amp;amp; research&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;assumed offline and native UI&lt;/li&gt;
&lt;li&gt;but native was too expensive for three platforms&lt;/li&gt;
&lt;li&gt;how do you make native in web technologies?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;every phone has a different web view&lt;/li&gt;
&lt;li&gt;Android users don&amp;#8217;t like seeing iPhone UX&lt;/li&gt;
&lt;li&gt;and Android back button can exit app if you&amp;#8217;re not careful&lt;/li&gt;
&lt;li&gt;there is no release cycle of WebKit&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;manufacturers just take the trunk and fix bugs&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;dev and cpu time spent getting UI just right&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Titanium: write your UI in Javascript, render natively&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;ListViews either don&amp;#8217;t look right, or leak memory&lt;/li&gt;
&lt;li&gt;doesn&amp;#8217;t always deal with latest design patterns &amp;#8211; can&amp;#8217;t override platform-specific behaviours&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Impact for iOS: javascript talks to OpenGL&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;experimental &amp;amp; proprietary&lt;/li&gt;
&lt;li&gt;morphed into appMobi&amp;#8217;s DirectCanvas&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;game{closure}&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;pre-alpha &amp;#8211; HTML5&lt;/li&gt;
&lt;li&gt;also node.js&lt;/li&gt;
&lt;li&gt;debug your mobile app and your browser app all in the same browser&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;but Game UI is not platform UI&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;easier to make cross-platform game UI as the UI is brand-specific, not platform specific&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;important to get events passing between rendering and UI logic&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;all frameworks bundle their own Javascript engine&lt;/li&gt;
&lt;li&gt;Android users don&amp;#8217;t like big apps &amp;#8211; Titanium hello world is 6Mb!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="newplatform"&gt;new platform&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Kirin requirements:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;native, platform appropriate UIs&lt;/li&gt;
&lt;li&gt;minimal download&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;design:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;native UI&lt;/li&gt;
&lt;li&gt;JS application logic&lt;/li&gt;
&lt;li&gt;native platform&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;advantages:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;raw events processed natively&lt;/li&gt;
&lt;li&gt;only app-specific events passed through to app&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#8220;the keyhole&amp;#8221;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;instantiate an invisible web-view&lt;/li&gt;
&lt;li&gt;build proxies for objects&lt;/li&gt;
&lt;li&gt;javascript calls into native and the other way&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;modular javascript using CommonJS&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;each screen has its own module (one file each)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;threading using asynchronous APIs, inspired by node.js&lt;/li&gt;
&lt;li&gt;native-specific features available as services&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;e.g. Location, SQL, Network access&lt;/li&gt;
&lt;li&gt;same Javascript to native bridge&lt;/li&gt;
&lt;li&gt;JS just uses a &lt;code&gt;require(...)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="releasingasopensource"&gt;releasing as open source&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/kirinjs"&gt;available now on github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;as a 0.5 release&lt;/li&gt;
&lt;li&gt;apache license&lt;/li&gt;
&lt;li&gt;looking for feedback&lt;/li&gt;
&lt;li&gt;iOS and Android only at the moment (Qt coming later)&lt;/li&gt;
&lt;li&gt;Windows Phone 7 might come later&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;testing &amp;amp; debugging:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;build script runs node.js&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;so can include unit tests at build time with assert&lt;/li&gt;
&lt;li&gt;have console access&lt;/li&gt;
&lt;li&gt;no actual debugger&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;why port model code &amp;#8211; isn&amp;#8217;t it simple?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;but if using database on device, then model not so portable (Core Data doesn&amp;#8217;t port well)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;porting pain? scaling to iPad?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;most of pain was electronic programme guide&lt;/li&gt;
&lt;li&gt;download &amp;amp; syncing&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-8254603330769355135?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/h4yDuYqG7Yz-xDn41zNYBrSRgWY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h4yDuYqG7Yz-xDn41zNYBrSRgWY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/h4yDuYqG7Yz-xDn41zNYBrSRgWY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h4yDuYqG7Yz-xDn41zNYBrSRgWY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=7TsKEWqLOL8:FdhDRPZRFVU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=7TsKEWqLOL8:FdhDRPZRFVU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=7TsKEWqLOL8:FdhDRPZRFVU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=7TsKEWqLOL8:FdhDRPZRFVU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/7TsKEWqLOL8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/8254603330769355135/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=8254603330769355135" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8254603330769355135?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8254603330769355135?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/7TsKEWqLOL8/over-air-2011-exploding-gap-between-web.html" title="Over The Air 2011: Exploding the Gap Between Web and Native" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/10/over-air-2011-exploding-gap-between-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUERH8_fip7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-4790057300827362779</id><published>2011-10-04T11:30:00.001+01:00</published><updated>2011-10-04T11:30:05.146+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T11:30:05.146+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="useragent" /><category scheme="http://www.blogger.com/atom/ns#" term="futurefriendly" /><category scheme="http://www.blogger.com/atom/ns#" term="overtheair" /><category scheme="http://www.blogger.com/atom/ns#" term="ota11" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="mobilewood" /><category scheme="http://www.blogger.com/atom/ns#" term="wurfl" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><category scheme="http://www.blogger.com/atom/ns#" term="responsive" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><category scheme="http://www.blogger.com/atom/ns#" term="browser" /><title>Over The Air 2011: Crap! It doesn't quite look right!</title><content type="html">&lt;p&gt;Or&amp;#8230; how I learned to stop worrying and set my web sites free&lt;/p&gt;&lt;p&gt;&lt;em&gt;Lyza Danger Gardner, co-founder Cloud Four &lt;a href="http://twitter.com/lyzadanger"&gt;@lyzadanger&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="width:425px" id="__ss_9518337"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/lyzadanger/crap-it-doesnt-look-quite-right-or-how-i-learned-to-stop-worrying-and-set-my-mobile-web-sites-free-9518337" title="Crap! It doesn&amp;#39;t look quite right, or, how I learned to stop worrying and set my mobile web sites free" target="_blank"&gt;Crap! It doesn&amp;#39;t look quite right, or, how I learned to stop worrying and set my mobile web sites free&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9518337" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/lyzadanger" target="_blank"&gt;Lyza Gardner&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Founder of Cloud Four in 2007&lt;/li&gt;
&lt;li&gt;Explicitly for mobile web&lt;/li&gt;
&lt;li&gt;Lyza was on the team that built the Obama app&lt;/li&gt;
&lt;li&gt;Went through the app and realised that there was nothing in the app that couldn&amp;#8217;t be done with the web&lt;/li&gt;
&lt;li&gt;hautelook.com &amp;#8211; high performance mobile web&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.deschutesbrewery.com/"&gt;deschutes brewery&lt;/a&gt; &amp;#8211; one web&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;uses geolocation to find where to buy the beer&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;mobile web is hard and getting harder&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;and it&amp;#8217;s not just phones any more&amp;#8230;&lt;/li&gt;
&lt;li&gt;car radios, televisions, &amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;and there&amp;#8217;s a whole stack every time (any of which can change)&lt;/li&gt;
&lt;li&gt;in the 1990s, took print ideas and applied them &amp;#8211; pixel perfect&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;customers believed that we had control&amp;#8230;&lt;/li&gt;
&lt;li&gt;&amp;#8220;could you move the logo a half pixel to the right?&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;no one can possibly know enough &amp;#8211; devices are continually appearing and you still have to deal with the old stuff&lt;/li&gt;
&lt;li&gt;how do you deal with WYSIWYG for customers&amp;#8230;?&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="mobilewood"&gt;mobilewood&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;10 highly experienced mobile developers&lt;/li&gt;
&lt;li&gt;working on where we wanted the mobile web to go&lt;/li&gt;
&lt;li&gt;built &lt;a href="http://futurefriend.ly"&gt;http://futurefriend.ly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;three pages, two images, no interactivity&lt;/li&gt;
&lt;li&gt;100 man hours&lt;/li&gt;
&lt;li&gt;-&amp;gt; &lt;strong&gt;not scaleable!&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="testingisveryhard"&gt;testing is very hard&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Cloud Four helped set up a &lt;a href="http://mobileportland.com/device-lab"&gt;device laboratory in downtown Portland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;multiple operators, device manufacturers&lt;/li&gt;
&lt;li&gt;but even a well-stocked device library will not help&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="takeheart"&gt;take heart!&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;relinquish control over a few things we thought we had down pat&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;four considerations:&lt;/em&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;content like water&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;consider wireframes that demonstrate the flow and flex of content across a continuum of device and window sizes&lt;/li&gt;
&lt;li&gt;design approach: like proportion &amp;#8211; not pixel perfect&lt;/li&gt;
&lt;li&gt;build functional mockups, so you can show (not tell)&lt;/li&gt;
&lt;li&gt;it &lt;em&gt;will&lt;/em&gt; be an iterative process&lt;/li&gt;
&lt;li&gt;will not be an overnight change &amp;#8211; it&amp;#8217;s not a brochure, despite what we told you earlier&lt;/li&gt;
&lt;li&gt;it&amp;#8217;s often surprising how willing customers will be to adapt or modify their content APIs&lt;/li&gt;
&lt;li&gt;try using textile or markdown in CMS&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;essentials first&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;not just mobile &amp;#8211; pare down to the essentials&lt;/li&gt;
&lt;li&gt;not just about design &amp;#8211; about process, performance, experience for every user&lt;/li&gt;
&lt;li&gt;start serene and simple&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;arm the weapons!&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;responsive web design&lt;/li&gt;
&lt;li&gt;fluid media: 100% width images&lt;/li&gt;
&lt;li&gt;fluid grids&lt;/li&gt;
&lt;li&gt;use media queries to enhance (mobile first)&lt;/li&gt;
&lt;li&gt;see also Responsive Images (by Scott Jehl)&lt;/li&gt;
&lt;li&gt;Boston Globe is a showcase&lt;/li&gt;
&lt;li&gt;it&amp;#8217;s ok to leave unmanaged gutter in % widths&lt;/li&gt;
&lt;li&gt;use Modernizr&amp;#8217;s modular approach (don&amp;#8217;t test everything)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;but it&amp;#8217;s not infallible&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;use server-side work:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;reordering &amp;#8211; moving navigation around&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;android devices are too buggy&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;reduction &amp;#8211; smaller images&lt;/li&gt;
&lt;li&gt;respect &amp;#8211; your users: don&amp;#8217;t download graphics if you don&amp;#8217;t use them&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;user agent sniffing &amp;#8211; it ain&amp;#8217;t perfect, but it gets the job done&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t be afraid to do some server-side optimization&lt;/li&gt;
&lt;li&gt;optimise!&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;especially your htaccess or apache config&lt;/li&gt;
&lt;li&gt;use YSlow&lt;/li&gt;
&lt;li&gt;make sure you gzip everything you can (not just html)&lt;/li&gt;
&lt;li&gt;cache manifests are a little tricky to deal with&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Cloud Four images:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;server side sizing using WURFL for major sizes&lt;/li&gt;
&lt;li&gt;common images are then cached&lt;/li&gt;
&lt;li&gt;then 100% fluid sizing&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;draw the line&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;set expectations with your customers&lt;/li&gt;
&lt;li&gt;explain how you don&amp;#8217;t have control over everything&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t be afraid to pull out egregious hacks!&lt;/li&gt;
&lt;li&gt;be ready to fail gracefully&lt;/li&gt;
&lt;li&gt;this isn&amp;#8217;t religion!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;frameworks:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Lyza likes the &lt;a href="http://www.columnal.com/"&gt;&lt;strong&gt;columnal&lt;/strong&gt; CSS framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;most complex projects end up rolling their own&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;iOS rotation&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;use &lt;code&gt;-webkit-text-size-adjust:none;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Lyza is writing a book &amp;#8211; &lt;a href="http://www.amazon.co.uk/gp/product/1449302661/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=expandhorizo-21&amp;amp;linkCode=as2&amp;amp;camp=1634&amp;amp;creative=19450&amp;amp;creativeASIN=1449302661"&gt;Head First Mobile Web&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-4790057300827362779?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q_XrLUuf_odvxxJ4v9ftOOURNE0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q_XrLUuf_odvxxJ4v9ftOOURNE0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q_XrLUuf_odvxxJ4v9ftOOURNE0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q_XrLUuf_odvxxJ4v9ftOOURNE0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=dH9g0pOfxjs:Z8oNRM6Ns1Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=dH9g0pOfxjs:Z8oNRM6Ns1Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=dH9g0pOfxjs:Z8oNRM6Ns1Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=dH9g0pOfxjs:Z8oNRM6Ns1Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/dH9g0pOfxjs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/4790057300827362779/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=4790057300827362779" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/4790057300827362779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/4790057300827362779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/dH9g0pOfxjs/over-air-2011-crap-it-doesnt-quite-look.html" title="Over The Air 2011: Crap! It doesn't quite look right!" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/10/over-air-2011-crap-it-doesnt-quite-look.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUANRXw9eyp7ImA9WhdUF04.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-2540290852826305524</id><published>2011-10-04T11:02:00.000+01:00</published><updated>2011-10-04T15:16:34.263+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T15:16:34.263+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="api" /><category scheme="http://www.blogger.com/atom/ns#" term="archive" /><category scheme="http://www.blogger.com/atom/ns#" term="digital-rights" /><category scheme="http://www.blogger.com/atom/ns#" term="semantic web" /><category scheme="http://www.blogger.com/atom/ns#" term="bbc-redux" /><category scheme="http://www.blogger.com/atom/ns#" term="rdf" /><category scheme="http://www.blogger.com/atom/ns#" term="overtheair" /><category scheme="http://www.blogger.com/atom/ns#" term="ota11" /><category scheme="http://www.blogger.com/atom/ns#" term="drwho" /><category scheme="http://www.blogger.com/atom/ns#" term="media" /><category scheme="http://www.blogger.com/atom/ns#" term="iplayer" /><category scheme="http://www.blogger.com/atom/ns#" term="bbc" /><title>Over The Air 2011: BBC Digital Public Space</title><content type="html">&lt;p&gt;&lt;em&gt;Mo McRoberts - Developer, BBC Archive Development &lt;a href="http://twitter.com/nevali"&gt;@nevali&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="width:425px" id="__ss_9518628"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/momcroberts/digital-public-space-at-over-the-air-2011" title="Digital Public Space at Over The Air 2011" target="_blank"&gt;Digital Public Space at Over The Air 2011&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9518628" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/momcroberts" target="_blank"&gt;Mo McRoberts&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Trying to make BBC Digital Archive accessible&lt;/li&gt;
&lt;li&gt;Then working together with other organisations:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;BFI, Kew, national maritime museum, royal opera house, british library, national archives, national library of scotland&lt;/li&gt;
&lt;li&gt;have 25&amp;#8211;30 organisations who have said yes to accessing data&lt;/li&gt;
&lt;li&gt;but only have Mo to connect things!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;lots of separate catalogues&lt;/li&gt;
&lt;li&gt;each catalogue refers to things in asset stores&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;may not be able to get to asset stores, but linking catalogues by itself is useful&lt;/li&gt;
&lt;li&gt;also link to external sources such as dbpedia, geonames, etc&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;want to make the archives accessible to people other than archivists&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;golden rule:&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;give everything a single, permanent URI&lt;/li&gt;
&lt;li&gt;make the data about that thing accessible at that URI&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;could try to fit everything into one giant, extensible XML schema&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;or else just go with RDF&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;can put all the RDF from catalogues into an RDF Aggregator&lt;/li&gt;
&lt;li&gt;wanted to find overlaps in the catalogues&lt;/li&gt;
&lt;li&gt;aggregator evaluates all info coming in and tries to find matches&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;not just exact matches, but close matches too&lt;/li&gt;
&lt;li&gt;disambiguating is the hard part&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;create lots of stub objects&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;people, places, events, things, &amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;eventually want to have spindle in the hands of the public&lt;/li&gt;
&lt;li&gt;the archives themselves are slowly being digitised, but it takes quite a while&lt;/li&gt;
&lt;li&gt;BBC Redux captures and stores TV and radio, transcodes them and makes them available in various forms&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;been running since July 2007 for everything that&amp;#8217;s been running centrally (not all local opt-outs)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;now has an API and developers&amp;#8217; guide&lt;/li&gt;
&lt;li&gt;available to developers for the duration of OverTheAir:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;prototype RDF aggregator to query&lt;/li&gt;
&lt;li&gt;API to Redux&lt;/li&gt;
&lt;li&gt;references to Redux are not fully tested &amp;#8211; may or may not work&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;genome project:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;scan in, OCR and codify all of the Radio Times issues&lt;/li&gt;
&lt;li&gt;from 1920 to 2009&lt;/li&gt;
&lt;li&gt;this and /programmes will provide a public API for all broadcasts ever&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;three windows of content availability:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;free to air on iPlayer&lt;/li&gt;
&lt;li&gt;commercially useful&lt;/li&gt;
&lt;li&gt;out of commercial time: e.g. desert island discs (but no music)&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;aiming to have content available in 10 years&amp;#8217; time&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;BBC Director General has committed to this&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;1 recent episode of Doctor Who has 80 rights clearances&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;an older episode would be worse as you would have to find the appropriate rights holders&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-2540290852826305524?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HDzWXf_S4ZPxcvZkJBw0RezOTbc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HDzWXf_S4ZPxcvZkJBw0RezOTbc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HDzWXf_S4ZPxcvZkJBw0RezOTbc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HDzWXf_S4ZPxcvZkJBw0RezOTbc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=HrL8jFp241Q:SJluX4t6X0Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=HrL8jFp241Q:SJluX4t6X0Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=HrL8jFp241Q:SJluX4t6X0Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=HrL8jFp241Q:SJluX4t6X0Y:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/HrL8jFp241Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/2540290852826305524/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=2540290852826305524" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2540290852826305524?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2540290852826305524?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/HrL8jFp241Q/over-air-2011-bbc-digital-public-space.html" title="Over The Air 2011: BBC Digital Public Space" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/10/over-air-2011-bbc-digital-public-space.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEUHRX0-eip7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-7045066887305902521</id><published>2011-10-04T10:52:00.001+01:00</published><updated>2011-10-04T10:57:14.352+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T10:57:14.352+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="ebay" /><category scheme="http://www.blogger.com/atom/ns#" term="blackberry" /><category scheme="http://www.blogger.com/atom/ns#" term="nfc" /><category scheme="http://www.blogger.com/atom/ns#" term="crime" /><category scheme="http://www.blogger.com/atom/ns#" term="overtheair" /><category scheme="http://www.blogger.com/atom/ns#" term="ota11" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="police" /><title>Over The Air 2011: Stolen and lost phones - can mobile phone applications help with the problem?</title><content type="html">&lt;p&gt;&lt;em&gt;Detective Sergeant Andy Williams&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;National Mobile Crime Unit &amp;#8211; based in Notting Hill&lt;/li&gt;
&lt;li&gt;Criminals stealing to order&lt;/li&gt;
&lt;li&gt;Cops are not the most technologically advanced people &amp;#8211; when Andy wants something done, he asks his children&amp;#8230;&lt;/li&gt;
&lt;li&gt;in 2001, 45% street crime linked to mobiles&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;this was from the British Crime Survey &amp;#8211; not reported crime, but surveyed&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;current stats:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;9.7% of all UK crime accounted for by theft of a handset&lt;/li&gt;
&lt;li&gt;60% of mobile phones stolen in personal robberies are iPhones or BlackBerrys&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;not just the phone is high value, but the data on the phones&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;avg 8,000 phones stolen every month in london&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;h3 id="whathappenstostolenphones"&gt;what happens to stolen phones?&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;used until blocked (by IMEI)&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;IMEI blocking works across UK, 60% of Europe, plus North &amp;amp; South America coming in soon&lt;/li&gt;
&lt;li&gt;but main export markets are North Africa (mainly Algeria) &amp;amp; Romania&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;some handsets are vulnerable to having their IMEI changed (so can be unblocked)&lt;/li&gt;
&lt;li&gt;phones used for parts (broken screens, etc)&lt;/li&gt;
&lt;li&gt;phones used for non-phone functions &amp;#8211; mp3 player, etc&lt;/li&gt;
&lt;li&gt;blocking:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;operator will block SIM&lt;/li&gt;
&lt;li&gt;will also request IMEI to be blocked&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;individual can install a theft tracking app, but police would need a signed warrant&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;police can&amp;#8217;t monitor 8,000 phones a month&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IMEIs are personal data in Germany&lt;/li&gt;
&lt;li&gt;phones offered on eBay, shown as blocked or no signal&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="immobilise--nationalpropertyregister"&gt;immobilise &amp;#8211; national property register&lt;/h3&gt;&lt;p&gt;&lt;a href="http://immobilise.com"&gt;http://immobilise.com&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;if device is registered with immobilise, police don&amp;#8217;t need to go through RIPA&lt;/li&gt;
&lt;li&gt;can put anything with a serial number on there&lt;/li&gt;
&lt;li&gt;can check on people&amp;#8217;s phones when stop people on the street&lt;/li&gt;
&lt;li&gt;private company set up and operated in conjunction with the police&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="formationofnmpcu"&gt;formation of NMPCU&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;initially front line - reducing robbery&lt;/li&gt;
&lt;li&gt;expanded to all acquisitive crime&lt;/li&gt;
&lt;li&gt;working at all levels of crime - local through to organised&lt;/li&gt;
&lt;li&gt;now an offence to offer to reprogram a phone (change the IMEI)&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="policecentralecrimeunit"&gt;Police Central eCrime Unit&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;trying to combat cyber-criminals&lt;/li&gt;
&lt;li&gt;looking at denial of service attacks, etc&lt;/li&gt;
&lt;li&gt;front line police notoriously poor at dealing with cyber crime&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;but&lt;/strong&gt; no law enforcement agency that specialises in all areas of cyber crime&lt;/li&gt;
&lt;li&gt;most expertise is in the forensic area&lt;/li&gt;
&lt;li&gt;judicial system is not set up to deal with cyber crime&lt;/li&gt;
&lt;li&gt;judicial boundaries don&amp;#8217;t help &amp;#8211; if online connections are not in UK&amp;#8230;&lt;/li&gt;
&lt;li&gt;recently starting up new kind of officer: Covert Internet Investigator&lt;/li&gt;
&lt;li&gt;not very many across the country&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="casestudy:organisedcriminalstargetingmusicevents"&gt;Case study: organised criminals targeting music events&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;following same bands the whole time&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;bands with mosh pits&amp;#8230;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Download 2010: 3 people found with 140 phones buried under their tent&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="securitynewmobiletech"&gt;Security &amp;amp; new mobile tech&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Man City gave 20 season ticket holders their tickets on their phone&lt;/li&gt;
&lt;li&gt;if someone steals your phone, they have access to your wallet, your ticket, your flat&amp;#8230;&lt;/li&gt;
&lt;li&gt;NFC requirements requested by police:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;PIN required for all payments &amp;#8211; not gonna happen!&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;at the moment, 5 payments of £10 until a PIN required&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;capture IMEI during transactions&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;possible but not gonna happen&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;compulsory registration with financial institution&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;may happen&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;h3 id="keyareas"&gt;key areas&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;registration at point of sale&lt;/li&gt;
&lt;li&gt;carphone warehouse register 25,000 phones a day at Xmas&lt;/li&gt;
&lt;li&gt;only 4 in 10 PIN lock their phone&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;significant barrier&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;locating devices post theft&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;works ok, but not great &amp;#8211; won&amp;#8217;t work if someone goes into a block of flats&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;identification of a SIM change post theft&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="checkmend"&gt;checkMEND&lt;/h3&gt;&lt;p&gt;&lt;a href="http://www.recipero.com/checkmend"&gt;http://www.recipero.com/checkmend&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;can find out if an IMEI is stolen&lt;/li&gt;
&lt;li&gt;some operators run this service for free&lt;/li&gt;
&lt;li&gt;but otherwise may cost £1 a shot&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-7045066887305902521?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NKSQXLFYqHnZDnd7aOuQJMRymF0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NKSQXLFYqHnZDnd7aOuQJMRymF0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NKSQXLFYqHnZDnd7aOuQJMRymF0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NKSQXLFYqHnZDnd7aOuQJMRymF0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=K5SiDYgd3wQ:WM5hGVdZM-I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=K5SiDYgd3wQ:WM5hGVdZM-I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=K5SiDYgd3wQ:WM5hGVdZM-I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=K5SiDYgd3wQ:WM5hGVdZM-I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/K5SiDYgd3wQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/7045066887305902521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=7045066887305902521" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/7045066887305902521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/7045066887305902521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/K5SiDYgd3wQ/over-air-2011-stolen-and-lost-phones.html" title="Over The Air 2011: Stolen and lost phones - can mobile phone applications help with the problem?" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/10/over-air-2011-stolen-and-lost-phones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQDSH0_eyp7ImA9WhdWFk0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-2544915157466123004</id><published>2011-09-09T21:11:00.000+01:00</published><updated>2011-09-09T21:32:59.343+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T21:32:59.343+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mentoring" /><category scheme="http://www.blogger.com/atom/ns#" term="developers" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="learning" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="failure" /><title>iOSDev UK: The Eternal Sunshine of the Developer Mind</title><content type="html">&lt;p&gt;&lt;em&gt;Steve &amp;#8220;Scotty&amp;#8221; Scott, iDeveloper iDTV, &lt;a href="http://twitter.com/macdevnet"&gt;@macdevnet&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Scotty gave a great talk complete with loads of cartoons that I can&amp;#8217;t remember here. I&amp;#8217;ve just noted down the more serious bits&amp;#8230;&lt;/p&gt;

&lt;p&gt;However, the best slide was by far:&lt;/p&gt;

&lt;p&gt;
&lt;img src="http://farm7.static.flickr.com/6203/6131170682_5ec20e5d31.jpg" width="500" height="330" alt="Pocket Dan - from @macdevnet's presentation at iOS Dev UK 2011" /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;programming is:
&lt;ul&gt;
&lt;li&gt;10% science&lt;/li&gt;
&lt;li&gt;20% ingenuity&lt;/li&gt;
&lt;li&gt;70% getting the two to work together&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;embrace your pain and draw positives from it&lt;/li&gt;
&lt;li&gt;just because something has failed, doesn&amp;#8217;t make you a failure&lt;/li&gt;
&lt;li&gt;unless you can own the failure, you can&amp;#8217;t understand the problem and move on&lt;/li&gt;
&lt;li&gt;if you&amp;#8217;re trying to learn what went wrong, make sure you&amp;#8217;re looking at the real issues
&lt;ul&gt;
&lt;li&gt;keep on asking why until you hit the real reason&lt;/li&gt;
&lt;li&gt;was it the people or the technology?&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;you don&amp;#8217;t have time &lt;em&gt;not&lt;/em&gt; to do this&lt;/li&gt;
&lt;li&gt;when you next find a situation that&amp;#8217;s negative, find a positive&lt;/li&gt;
&lt;li&gt;make sure you learn to understand what people are saying, rather than what you are hearing
&lt;ul&gt;
&lt;li&gt;&amp;#8220;developers get confused between Xmas &amp;amp; Halloween because DEC 25 = OCT 31&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;it is impossible to mentor yourself
&lt;ul&gt;
&lt;li&gt;you can&amp;#8217;t get out of your own assumptions&lt;/li&gt;
&lt;li&gt;you don&amp;#8217;t need someone highly experienced to mentor you &amp;#8212; you just have to explain yourself and get someone to ask, &amp;#8220;how do you know that&amp;#8217;s true?&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;often our thinking is shaped by a whole load of things that you haven&amp;#8217;t let go
&lt;ul&gt;
&lt;li&gt;process it and let it go&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;we don&amp;#8217;t tend to learn a lot from success
&lt;ul&gt;
&lt;li&gt;that&amp;#8217;s ok - we just need to do the same thing again&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-2544915157466123004?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q7m_OlLacL6bdDlvAsz4qN6i414/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q7m_OlLacL6bdDlvAsz4qN6i414/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q7m_OlLacL6bdDlvAsz4qN6i414/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q7m_OlLacL6bdDlvAsz4qN6i414/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=sTMfwclysDk:vZ6nGXUbF5A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=sTMfwclysDk:vZ6nGXUbF5A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=sTMfwclysDk:vZ6nGXUbF5A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=sTMfwclysDk:vZ6nGXUbF5A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/sTMfwclysDk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/2544915157466123004/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=2544915157466123004" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2544915157466123004?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2544915157466123004?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/sTMfwclysDk/iosdev-uk-eternal-sunshine-of-developer.html" title="iOSDev UK: The Eternal Sunshine of the Developer Mind" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm7.static.flickr.com/6203/6131170682_5ec20e5d31_t.jpg" height="72" width="72" /><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-eternal-sunshine-of-developer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQDQ349eCp7ImA9WhdWFk0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-1959910644670147700</id><published>2011-09-09T20:45:00.000+01:00</published><updated>2011-09-09T21:32:52.060+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T21:32:52.060+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="appstore" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="school" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><category scheme="http://www.blogger.com/atom/ns#" term="youtube" /><category scheme="http://www.blogger.com/atom/ns#" term="scotland" /><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="localisation" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="push-notifications" /><title>iOSDev UK: Design Considerations for Educational Apps</title><content type="html">&lt;p&gt;&lt;em&gt;Fraser Speirs, Head of Computing &amp;amp; IT, Cedars School of Excellence, @fraserspeirs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://speirs.org"&gt;http://speirs.org&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;last year gave every child an iPad
&lt;ul&gt;
&lt;li&gt;only 100 pupils&lt;/li&gt;
&lt;li&gt;had 220 people come to visit the school&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;when you give people the internet the whole time, you sometimes get unexpected results
&lt;ul&gt;
&lt;li&gt;Fraser showed a slide of coursework on cell nuclei, decorated with a background showing the &lt;a href="http://www.generallyawesome.com/photos/funny/statue-of-darth-liberty" title="Darth Liberty | A Scarier Version of the Statue of Liberty | Funny Photos |  GENERALLY AWESOME"&gt;Statue of Darth Liberty&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;sitting around iPads &amp;#8212; everybody faces each other rather than all facing the screen at the front&lt;/li&gt;
&lt;li&gt;avoiding the ceremonial computer lab &amp;#8212; moving to casual computing&lt;/li&gt;
&lt;li&gt;beautiful artwork created by kids on iPads, within a month of receiving them&lt;/li&gt;
&lt;li&gt;it&amp;#8217;s not just the iPads, it&amp;#8217;s the 1:1 &amp;#8212; the 1:1 is more important&lt;/li&gt;
&lt;li&gt;Fraser&amp;#8217;s daughter is 4.5 &amp;#8212; just started school
&lt;ul&gt;
&lt;li&gt;will graduate from university in Summer 2029&lt;/li&gt;
&lt;li&gt;&amp;#8220;we are already teaching the citizens of the 22nd century&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;looking at investment as kids&amp;#8217; chairs &amp;amp; tables
&lt;ul&gt;
&lt;li&gt;not as a guarantee that scores will go up&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="dosanddontsforappsinschools"&gt;Do&amp;#8217;s and Don&amp;#8217;ts for apps in schools&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;don&amp;#8217;t assume the internet works correctly
&lt;ul&gt;
&lt;li&gt;schools change what internet is available through frequent policy changes&lt;/li&gt;
&lt;li&gt;youtube is often turned off&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;teaching fashions come and go regularly&lt;/li&gt;
&lt;li&gt;in-app purchase doesn&amp;#8217;t work in schools
&lt;ul&gt;
&lt;li&gt;central purchasing or gifting&lt;/li&gt;
&lt;li&gt;e.g. PCalc has a full version that can be purchased at once&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t assume your users can (will) read
&lt;ul&gt;
&lt;li&gt;use conventions wisely (keep the back button in top left corner)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;use push notifications sparingly
&lt;ul&gt;
&lt;li&gt;no good advertising to kids in school &amp;#8212; they don&amp;#8217;t have the app store password anyway&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;watch out for number of devices nearby
&lt;ul&gt;
&lt;li&gt;could be 20-30 devices around&lt;/li&gt;
&lt;li&gt;infrastructure may cope, but leave room in your UI&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;limit or prevent app store interactions
&lt;ul&gt;
&lt;li&gt;no good in schools&lt;/li&gt;
&lt;li&gt;confuses kids; annoying for teachers&lt;/li&gt;
&lt;li&gt;that goes for &amp;#8220;review me now&amp;#8221; too&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;teachers need access to content
&lt;ul&gt;
&lt;li&gt;support the photos app&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t promote facebook
&lt;ul&gt;
&lt;li&gt;facebook can be a major source of anxiety for many children&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;watch out for shaking gestures &amp;#8212; not good for&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t use bad language (and try to avoid double-entendres and local slang too). Some examples:
&lt;ul&gt;
&lt;li&gt;Rasterbator&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/pETfHy"&gt;Procreate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Little Snapper&lt;/li&gt;
&lt;li&gt;hardware growler&lt;/li&gt;
&lt;li&gt;mental case&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/p5eDnB"&gt;FlashToPass&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gojobby.com"&gt;http://gojobby.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;be very careful with user data &amp;#8212; especially with location&lt;/li&gt;
&lt;li&gt;talk to teachers and test with actual children
&lt;ul&gt;
&lt;li&gt;Fraser&amp;#8217;s school does not have the scale to be a beta tester&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;watch out for different curricula in different countries&lt;/li&gt;
&lt;li&gt;walk through guide in the app
&lt;ul&gt;
&lt;li&gt;see &lt;a href="http://j.mp/n6XuRb"&gt;toontastic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;kids can use loads of apps to edit graphics, passing the image through the photos app&lt;/li&gt;
&lt;li&gt;use sharing effectively
&lt;ul&gt;
&lt;li&gt;use &amp;#8220;Open In&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;li&gt;avoid huge sharing option lists&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;show proof of completion&lt;/li&gt;
&lt;li&gt;avoid (penalise) random hits&lt;/li&gt;
&lt;li&gt;structure + headroom = creativity
&lt;ul&gt;
&lt;li&gt;app idea: make toontastic for creative writing&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;show user activity
&lt;ul&gt;
&lt;li&gt;e.g. &lt;a href="http://j.mp/qComhR"&gt;Brushes&lt;/a&gt; lets you record all your strokes and play them back as a quicktime video&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;localisation is useful even if your app is UK-specific
&lt;ul&gt;
&lt;li&gt;e.g. Iraqi boy with a 1:1 iPod touch switched it to Farsi and used Google Image Search to show pictures of what he wanted to the teacher&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;support projectors &amp;amp; AirPlay
&lt;ul&gt;
&lt;li&gt;don&amp;#8217;t offer resolutions for external display &amp;#8212; just pick one and do it well&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;there is a control to turn off Game Center at a policy level
&lt;ul&gt;
&lt;li&gt;so go ahead and put it in the app but make the rest of the app work without it&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;gap in the middle for 7-10 year olds
&lt;ul&gt;
&lt;li&gt;need more apps like &lt;a href="http://j.mp/n6XuRb"&gt;toontastic&lt;/a&gt; &amp;#8212; structure provided, but space for creation&lt;/li&gt;
&lt;li&gt;older kids can use general content apps&lt;/li&gt;
&lt;li&gt;younger kids don&amp;#8217;t need so much freedom&lt;/li&gt;
&lt;li&gt;using &lt;a href="http://target.georiot.com/Proxy.ashx?grid=606&amp;amp;GR_URL=http%3a%2f%2fitunes.apple.com%2fgb%2fapp%2fithoughtshd-mindmapping%2fid369020033%3fmt%3d8&amp;amp;TRACK=ADAMBLOG"&gt;iThoughts HD&lt;/a&gt; for mindmap, then writing in Pages&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="examples"&gt;example apps&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://j.mp/onbhMw"&gt;preschool memory match&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/q7gPZx"&gt;the history of jazz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/qSRUkD"&gt;slice it&lt;/a&gt; &amp;#8212; but gets too hard too quickly&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/panRBL"&gt;DrawRace 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/qvQ0Au"&gt;Real Racing 2 HD&lt;/a&gt; &amp;#8212; but uses up huge amounts of battery&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/ruc3R9"&gt;toca tea party&lt;/a&gt; &amp;#8212; not a game but a digital toy
&lt;ul&gt;
&lt;li&gt;have a virtual tea party around the iPad&lt;/li&gt;
&lt;li&gt;lots of other other toca &amp;#8220;games&amp;#8221; available &amp;#8212; see &lt;a href="http://toca.com"&gt;http://toca.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/rqBBpZ"&gt;math bingo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;gather &amp;#8220;bingo bugs&amp;#8221; and then use them in a breakout game&lt;/li&gt;
&lt;li&gt;15 year-olds were saying &amp;#8220;why do we not have math bingo?&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/qZKBlu"&gt;penultimate&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;write on a project as you walk around&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;research?
&lt;ul&gt;
&lt;li&gt;study with university of western scotland&lt;/li&gt;
&lt;li&gt;two lessons back to back: one with iPad, one with paper &amp;amp; pencil&lt;/li&gt;
&lt;li&gt;same teacher, same children&lt;/li&gt;
&lt;li&gt;with paper &amp;amp; pencil, boys and some girls had less emotional engagement&lt;/li&gt;
&lt;li&gt;with iPad emotional engagement of all pupils was brought up to same level as best kids&lt;/li&gt;
&lt;li&gt;being submitted to &lt;a href="http://www.blackwellpublishing.com/journal.asp?ref=0007-1013" title="British Journal of Educational Technology - Journal Information"&gt;BJET&lt;/a&gt;, but may not be published yet&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;separate educational version of an app?
&lt;ul&gt;
&lt;li&gt;kids want the real thing&lt;/li&gt;
&lt;li&gt;universal design is best&lt;/li&gt;
&lt;li&gt;Fraser tries to buy things off the shelf rather than waiting for educational specific versions&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;damages?
&lt;ul&gt;
&lt;li&gt;only had one &amp;#8212; parent ran it over with Land Cruiser!&lt;/li&gt;
&lt;li&gt;kids are careful &amp;#8212; the iPad has their name on it&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;teachers adapting to technology?
&lt;ul&gt;
&lt;li&gt;about half of the teachers had iPhones/iPod Touches before the programme started&lt;/li&gt;
&lt;li&gt;the iPad is significantly more approachable than other computers&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;how do you find apps?
&lt;ul&gt;
&lt;li&gt;school subscribes to Tap! magazine&amp;#8230;&lt;/li&gt;
&lt;li&gt;more popular than the TES :-)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-1959910644670147700?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/EFMp_n90osU9-_jAdipYgtImIU8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EFMp_n90osU9-_jAdipYgtImIU8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/EFMp_n90osU9-_jAdipYgtImIU8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/EFMp_n90osU9-_jAdipYgtImIU8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Xz02-fPWZeY:HFzH5sViFII:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Xz02-fPWZeY:HFzH5sViFII:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=Xz02-fPWZeY:HFzH5sViFII:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Xz02-fPWZeY:HFzH5sViFII:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/Xz02-fPWZeY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/1959910644670147700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=1959910644670147700" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1959910644670147700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1959910644670147700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/Xz02-fPWZeY/iosdev-uk-design-considerations-for.html" title="iOSDev UK: Design Considerations for Educational Apps" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-design-considerations-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UDQH0-fSp7ImA9WhdWFUs.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-2011796516238498384</id><published>2011-09-09T10:41:00.001+01:00</published><updated>2011-09-09T10:41:11.355+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T10:41:11.355+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reviews" /><category scheme="http://www.blogger.com/atom/ns#" term="social" /><category scheme="http://www.blogger.com/atom/ns#" term="appstore" /><category scheme="http://www.blogger.com/atom/ns#" term="feedback" /><category scheme="http://www.blogger.com/atom/ns#" term="advertising" /><category scheme="http://www.blogger.com/atom/ns#" term="marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="voting" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="qr_codes" /><title>iOSDev UK: Standing Out from the Crowd</title><content type="html">&lt;p&gt;&lt;em&gt;Craig Lockwood, &lt;a href="http://www.huwdavid.net/" title="We will make your brand better | Huw David Design"&gt;HuwDavid&lt;/a&gt;, &lt;a href="http://twitter.com/craiginwales"&gt;@craiginwales&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;put a QR code on the presentation screen for a voting web page&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;works surprisingly well (given good network connection&amp;#8230;)&lt;/li&gt;
&lt;li&gt;voting page was well presented too &lt;a href="http://wbxapp.com/join-in"&gt;http://wbxapp.com/join-in&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;pre-render your icon so you have control of the gloss&lt;/li&gt;
&lt;li&gt;localisation
&lt;ul&gt;
&lt;li&gt;french, dutch, german, italian translations pay dividends&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;app microsite
&lt;ul&gt;
&lt;li&gt;drive traffic with google adwords &amp;amp; track with analytics&lt;/li&gt;
&lt;li&gt;good example: &lt;a href="http://thecocktailapp.com"&gt;http://thecocktailapp.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;using social media
&lt;ul&gt;
&lt;li&gt;shout loudly yourself&lt;/li&gt;
&lt;li&gt;and get your users to shout louder&lt;/li&gt;
&lt;li&gt;&amp;#8220;if you&amp;#8217;re not ethical, at least be targeted&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;make your app meta data relevant&lt;/li&gt;
&lt;li&gt;watch out for the app size
&lt;ul&gt;
&lt;li&gt;you can&amp;#8217;t download an app &gt; 20Mb over 3G&lt;/li&gt;
&lt;li&gt;you have one opportunity to sell &amp;#8212; don&amp;#8217;t waste it&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;niche press works well for niche products
&lt;ul&gt;
&lt;li&gt;e.g. rare pig breeds app (&lt;a href="http://j.mp/qAg5eW"&gt;Guide to Pig Keeping&lt;/a&gt;), got featured in Farmers Weekly and got 6,000 downloads in a short period&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;getting designers:
&lt;ul&gt;
&lt;li&gt;there are plenty of media students who are looking for portfolio work&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;how to deal with app store feedback complaints?
&lt;ul&gt;
&lt;li&gt;point to the app website &amp;amp; twitter account &lt;em&gt;within the app&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;people look at the reviews more as the cost goes up (even if it&amp;#8217;s only to &amp;#163;2.99)&lt;/li&gt;
&lt;li&gt;get your friends and family to review when you release &amp;#8212; get in first with 5 star reviews&lt;/li&gt;
&lt;li&gt;good screenshots can filter out people who don&amp;#8217;t understand the app&lt;/li&gt;
&lt;li&gt;price tier 2 gets less scathing reviews than tier 1 &amp;amp; free&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-2011796516238498384?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3l450pOts7lRVmA7mWy348Xu8vg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3l450pOts7lRVmA7mWy348Xu8vg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3l450pOts7lRVmA7mWy348Xu8vg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3l450pOts7lRVmA7mWy348Xu8vg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=y34kYez4vAo:t_LGzRgMIxs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=y34kYez4vAo:t_LGzRgMIxs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=y34kYez4vAo:t_LGzRgMIxs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=y34kYez4vAo:t_LGzRgMIxs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/y34kYez4vAo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/2011796516238498384/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=2011796516238498384" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2011796516238498384?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2011796516238498384?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/y34kYez4vAo/iosdev-uk-standing-out-from-crowd.html" title="iOSDev UK: Standing Out from the Crowd" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-standing-out-from-crowd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UCRHo8fSp7ImA9WhdWFUs.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-7656464594161028302</id><published>2011-09-09T10:39:00.000+01:00</published><updated>2011-09-09T10:41:05.475+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T10:41:05.475+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="surface" /><category scheme="http://www.blogger.com/atom/ns#" term="kids" /><category scheme="http://www.blogger.com/atom/ns#" term="creativity" /><category scheme="http://www.blogger.com/atom/ns#" term="lastminute" /><category scheme="http://www.blogger.com/atom/ns#" term="education" /><category scheme="http://www.blogger.com/atom/ns#" term="multitouch" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="interaction" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="game" /><category scheme="http://www.blogger.com/atom/ns#" term="multi-user" /><title>iOSDev UK: Designing multi-user, single device interfaces on the iPad</title><content type="html">&lt;p&gt;&lt;em&gt;Kate Ho, &lt;a href="http://www.interface3.com/" title="Interface3: Smart Multitouch Solutions"&gt;interface3&lt;/a&gt;, &lt;a href="http://twitter.com/kateho"&gt;@kateho&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Started by designing for Microsoft Tablet
&lt;ul&gt;
&lt;li&gt;kids started saying &amp;#8220;this would be really cool an iPad&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="examplemulti-userapps"&gt;Example multi-user apps&lt;/h3&gt;

&lt;p&gt;Multi-user (sharing a single device at the same time)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Versus Games:
&lt;ul&gt;
&lt;li&gt;Examples: &lt;a href="http://j.mp/nPE4pO"&gt;PaddleBattle&lt;/a&gt;, Dorfball(?), &lt;a href="http://j.mp/nxeYoh"&gt;Table Twister&lt;/a&gt;, &lt;a href="http://j.mp/rph3ct"&gt;Touch of Fun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Very simple games: you&amp;#8217;d think people would get bored, but people get very competitive&lt;/li&gt;
&lt;li&gt;&amp;#8220;You can only play for 30 seconds at a time without killing each other&amp;#8221; &amp;#8212; playing with 8 year-olds can be very bad&lt;/li&gt;
&lt;li&gt;Best place to find inspiration for these games are the Wii mini games (Raving Rabbids, etc)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Co-op Games:
&lt;ul&gt;
&lt;li&gt;Complete an objective together&lt;/li&gt;
&lt;li&gt;from interface3: &lt;a href="http://j.mp/pfcXu8"&gt;iHave&lt;/a&gt; (just released)&lt;/li&gt;
&lt;li&gt;who has the maths answer?&lt;/li&gt;
&lt;li&gt;collectively get as many points as possible&lt;/li&gt;
&lt;li&gt;&lt;a href="http://j.mp/nGW5Jy"&gt;SliceHD&lt;/a&gt; &amp;#8212; maybe not meant for multiplayer, but great for kids!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Games with a twist:
&lt;ul&gt;
&lt;li&gt;one idea: two people playing on an iPad, and another player on a &lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Creative 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://j.mp/pRvLoO"&gt;Singing Fingers&lt;/a&gt; &amp;#8212; just &lt;a href="http://www.singingfingers.com"&gt;watch the video&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;haven&amp;#8217;t seen any specifically collaborative drawing apps, but perhaps regular drawing apps are ok&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Exploration scenarios
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://j.mp/rpxxac"&gt;Topsee&lt;/a&gt; &amp;#8212; can have a look at something and pass it over to someone else&lt;/li&gt;
&lt;li&gt;interface3 interactive mortgage guide on a Surface&lt;/li&gt;
&lt;li&gt;multitouch is better than keyboard since you don&amp;#8217;t have to ask permission from the other person &amp;#8212; just reach in a grab&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Small group interactions
&lt;ul&gt;
&lt;li&gt;one person in charge and two to three people learning over the same device&lt;/li&gt;
&lt;li&gt;interface3 built &lt;a href="http://j.mp/ogmZy1"&gt;CoachAssist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="tips"&gt;Tips&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;design without orientation
&lt;ul&gt;
&lt;li&gt;circular buttons with both-way-up text&lt;/li&gt;
&lt;li&gt;rotate the text every now and then&lt;/li&gt;
&lt;li&gt;draggable, rotatable objects&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;try to avoid one player&amp;#8217;s actions getting in the way of others&lt;/li&gt;
&lt;li&gt;design for short interactions
&lt;ul&gt;
&lt;li&gt;around an iPad people are sharing personal space&lt;/li&gt;
&lt;li&gt;especially if they have to put their head over the screen&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;make sure players aren&amp;#8217;t kept waiting&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t have too many complex gestures
&lt;ul&gt;
&lt;li&gt;&amp;#8220;gestures are like the 21st Century command line&amp;#8221;&lt;/li&gt;
&lt;li&gt;you shouldn&amp;#8217;t spend too much time explaining yourself&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;create shared experiences
&lt;ul&gt;
&lt;li&gt;what could two people do together that they couldn&amp;#8217;t do by themselves&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-7656464594161028302?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zyj2xmtzwkPp7siLC3YtBlHewN4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zyj2xmtzwkPp7siLC3YtBlHewN4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zyj2xmtzwkPp7siLC3YtBlHewN4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zyj2xmtzwkPp7siLC3YtBlHewN4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=mGispCTLapw:8qyZCCiPyBY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=mGispCTLapw:8qyZCCiPyBY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=mGispCTLapw:8qyZCCiPyBY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=mGispCTLapw:8qyZCCiPyBY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/mGispCTLapw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/7656464594161028302/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=7656464594161028302" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/7656464594161028302?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/7656464594161028302?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/mGispCTLapw/iosdev-uk-designing-multi-user-single.html" title="iOSDev UK: Designing multi-user, single device interfaces on the iPad" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-designing-multi-user-single.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEDQXo9eCp7ImA9WhdWFU8.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-9137280449844280965</id><published>2011-09-09T00:14:00.001+01:00</published><updated>2011-09-09T00:14:30.460+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T00:14:30.460+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="accessibility" /><category scheme="http://www.blogger.com/atom/ns#" term="rnib" /><category scheme="http://www.blogger.com/atom/ns#" term="voiceover" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="barcamp" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><title>iOS Dev UK: Your App Sounds Great</title><content type="html">&lt;p&gt;&lt;em&gt;Dave Addey, &lt;a href="http://www.agant.com/"&gt;Agant Ltd&lt;/a&gt;, &lt;a href="http://twitter.com/daveaddey"&gt;@daveaddey&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This was one of the barcamp slots in the evening. Dave went through the presentation he gave previously at NSConference on VoiceOver, Apple's device support for blind and partially sighted users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RNIB have an accessible app of the month
&lt;ul&gt;
&lt;li&gt;they&amp;#8217;re really interested in helping people&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;2m blind or partially sighted people in the UK
&lt;ul&gt;
&lt;li&gt;equivalent to population of Birmingham, or lefties, or gingers!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;How it works:
&lt;ul&gt;
&lt;li&gt;label - description&lt;/li&gt;
&lt;li&gt;hint - results of interaction&lt;/li&gt;
&lt;li&gt;traits - only need if making a custom control&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;triple tap with voiceover enabled to turn &lt;em&gt;screen curtain&lt;/em&gt; on &amp;#8212; blacks out the screen so you can test it without cheating&lt;/li&gt;
&lt;li&gt;use &lt;code&gt;UIAccessibilityPostNotification(UIAccessibilityNotification, ...)&lt;/code&gt; to post sounds on events rather than touches&lt;/li&gt;
&lt;li&gt;iOS knows quite a lot of UK place names, but not all (and especially not Welsh names)&lt;/li&gt;
&lt;li&gt;can set your own usability tags, but uses normal spelling, not phonetic characters
&lt;ul&gt;
&lt;li&gt;can use &lt;code&gt;say "word"&lt;/code&gt; on a Mac to test&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;can define accessibility containers to group stuff&lt;/li&gt;
&lt;li&gt;it&amp;#8217;s not just about making it accessible for a blind user or a partially sighted user, it&amp;#8217;s also about making it usable for a sighted and non-sighted person using the app at the same time&lt;/li&gt;
&lt;li&gt;At the bottom of accessibility options there&amp;#8217;s a triple click home option &amp;#8212; you can make this toggle VoiceOver&lt;/li&gt;
&lt;li&gt;Maps do &lt;strong&gt;not&lt;/strong&gt; have accessibility other than the pins&lt;/li&gt;
&lt;li&gt;If stuff is still being selected by VoiceOver, then you might need to set them to be disabled&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-9137280449844280965?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/a6T4ZmriWQJqi0HZDRlwoFCe368/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a6T4ZmriWQJqi0HZDRlwoFCe368/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/a6T4ZmriWQJqi0HZDRlwoFCe368/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/a6T4ZmriWQJqi0HZDRlwoFCe368/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=fcP2VnBy5Jc:uAGTImrE_Mo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=fcP2VnBy5Jc:uAGTImrE_Mo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=fcP2VnBy5Jc:uAGTImrE_Mo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=fcP2VnBy5Jc:uAGTImrE_Mo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/fcP2VnBy5Jc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/9137280449844280965/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=9137280449844280965" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/9137280449844280965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/9137280449844280965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/fcP2VnBy5Jc/ios-dev-uk-your-app-sounds-great.html" title="iOS Dev UK: Your App Sounds Great" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/ios-dev-uk-your-app-sounds-great.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYEQHgzeCp7ImA9WhdWFk0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-1399629286698227227</id><published>2011-09-08T18:02:00.000+01:00</published><updated>2011-09-09T21:28:21.680+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T21:28:21.680+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sailing" /><category scheme="http://www.blogger.com/atom/ns#" term="university" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="research" /><category scheme="http://www.blogger.com/atom/ns#" term="robots" /><category scheme="http://www.blogger.com/atom/ns#" term="computer_vision" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><title>iOSDev UK: Robots!!</title><content type="html">&lt;p&gt;&lt;em&gt;&lt;a href="http://users.aber.ac.uk/mjn/"&gt;Mark Neal&lt;/a&gt;, Co-ordinator for the &lt;a href="http://www.aber.ac.uk/en/cs/research/ir/"&gt;Intelligent Robotics Research Group, Aberystwyth University&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;learning &amp;amp; adaptation &lt;ul&gt;&lt;li&gt;neuro-endocrine control&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;visual navigation &lt;ul&gt;&lt;li&gt;robots with cameras on top finding out where they are and how they are standing&lt;/li&gt;
&lt;li&gt;gyroscopes etc don&amp;#8217;t always work in harsh environments&lt;/li&gt;
&lt;li&gt;map-building&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;control systems &lt;ul&gt;&lt;li&gt;trying to make things that are redundant and reconfigurable by themselves&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;try to get out of the lab! &lt;ul&gt;&lt;li&gt;sensors may start giving you junk&amp;#8230;&lt;/li&gt;
&lt;li&gt;ideally having stuff work over a few years&lt;/li&gt;
&lt;li&gt;watch out for &amp;#8220;Dalek syndrome&amp;#8221; &amp;#8212; falling down stairs&lt;/li&gt;
&lt;li&gt;flexibility tends to be reversible, adaptation tends not&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;department suffers from too much kit and not enough people &lt;ul&gt;&lt;li&gt;started in 1998/99&lt;/li&gt;
&lt;li&gt;now have about 10 wheeled robots&lt;/li&gt;
&lt;li&gt;2 and 4 wheel pioneers &amp;#8212; not enough ground clearance so best indoors&lt;/li&gt;
&lt;li&gt;have had balloons and kits&lt;/li&gt;
&lt;li&gt;now have quadracopters&amp;#8230;&lt;/li&gt;
&lt;li&gt;also have sailing robots&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;robot: autonomous &lt;ul&gt;&lt;li&gt;try to avoid remote control other than start/stop&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;would like to buy off the shelf and build software &lt;ul&gt;&lt;li&gt;works for little indoor bots&lt;/li&gt;
&lt;li&gt;but bigger ones don&amp;#8217;t really work outside&lt;/li&gt;
&lt;li&gt;better to build yourself, or at least adapt&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;pioneer &lt;ul&gt;&lt;li&gt;linux box on wheels&lt;/li&gt;
&lt;li&gt;16 sonars&lt;/li&gt;
&lt;li&gt;laser scanners and grass don&amp;#8217;t mix&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;iCub &amp;#8212; fancy toy &lt;ul&gt;&lt;li&gt;human-shaped but can&amp;#8217;t walk&lt;/li&gt;
&lt;li&gt;investigating how kids learn to do hand-eye coordination&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IDRIS &lt;ul&gt;&lt;li&gt;weighs 400kg&lt;/li&gt;
&lt;li&gt;4 landrover sized tyres&lt;/li&gt;
&lt;li&gt;have done lots of work laser scanning monuments&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;ARGO &lt;ul&gt;&lt;li&gt;6-wheel drive amphibious&lt;/li&gt;
&lt;li&gt;&amp;#163;10K and then convert with a few more &amp;#163;K to make an autonomous robot&lt;/li&gt;
&lt;li&gt;doing the same with GWiz electric cars&lt;/li&gt;
&lt;li&gt;ARGO planned to be used as a radar tug in Greenland&lt;/li&gt;
&lt;li&gt;power is the killer&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;aerial robots &lt;ul&gt;&lt;li&gt;had three helium balloons navigating in formation&lt;/li&gt;
&lt;li&gt;kite with aerial photographing &amp;#8212; software is to stabilise the image based only on the camera&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;sailing robots: Beagle B &lt;ul&gt;&lt;li&gt;3.6m long&lt;/li&gt;
&lt;li&gt;disabled sailor&amp;#8217;s boat&lt;/li&gt;
&lt;li&gt;vertical aerofoil wing on top instead of a sail&lt;/li&gt;
&lt;li&gt;has to be autonomous since the Wi-Fi only extends about 30m&lt;/li&gt;
&lt;li&gt;control system designed to use as little rudder and ropes as possible&lt;/li&gt;
&lt;li&gt;almost no power to run: &amp;lt; 5W&lt;/li&gt;
&lt;li&gt;6W from solar panels&lt;/li&gt;
&lt;li&gt;unusual to have an autonomous robot that lasts more than a few hours&lt;/li&gt;
&lt;li&gt;these last at least 49 hours!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-1399629286698227227?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mXNalMECjfHVlDhynaBnV0naK9M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mXNalMECjfHVlDhynaBnV0naK9M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mXNalMECjfHVlDhynaBnV0naK9M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mXNalMECjfHVlDhynaBnV0naK9M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=6EzmnicqxJQ:z3yegu49g1o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=6EzmnicqxJQ:z3yegu49g1o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=6EzmnicqxJQ:z3yegu49g1o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=6EzmnicqxJQ:z3yegu49g1o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/6EzmnicqxJQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/1399629286698227227/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=1399629286698227227" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1399629286698227227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1399629286698227227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/6EzmnicqxJQ/iosdev-uk-robots.html" title="iOSDev UK: Robots!!" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-robots.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IAQX0zeCp7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-3982574598275105058</id><published>2011-09-08T18:00:00.000+01:00</published><updated>2011-09-08T18:05:40.380+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T18:05:40.380+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="statistics" /><category scheme="http://www.blogger.com/atom/ns#" term="flurry" /><category scheme="http://www.blogger.com/atom/ns#" term="flickr" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="analytics" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="in-app-purchases" /><title>iOSDev UK: Making Money with In-App Purchases</title><content type="html">&lt;p&gt;&lt;em&gt;Dave Verwer, &lt;a href="http://shinydevelopment.com"&gt;shinydevelopment&lt;/a&gt;,  &lt;a href="http://twitter.com/daveverwer"&gt;@daveverwer&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Developing in-app purchases in the &lt;a href="http://j.mp/oXBZmO"&gt;Explore Flickr app&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;purchases can be:
&lt;ul&gt;
&lt;li&gt;content, functionality (permanent purchases)&lt;/li&gt;
&lt;li&gt;services, subscriptions (repeatable purchases)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;have to design your own store&lt;/li&gt;
&lt;li&gt;in-app purchases restrictions:
&lt;ul&gt;
&lt;li&gt;no promo codes or volume purchases&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;store should answer:
&lt;ul&gt;
&lt;li&gt;what is this store?&lt;/li&gt;
&lt;li&gt;what will I get if I upgrade?&lt;/li&gt;
&lt;li&gt;big green friendly buy button&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/1200658"&gt;ruby script to switch info plist based on DEBUG/RELEASE&lt;/a&gt; &amp;#8212; needed to switch between versions&lt;/li&gt;
&lt;li&gt;measure success with analytics
&lt;ul&gt;
&lt;li&gt;log each stage to capture where people fall out&lt;/li&gt;
&lt;li&gt;e.g. store shown, video played, upgrade button tapped, upgrade process complete&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;1.6% conversion from Explore Flickr (from those who view the store)&lt;/li&gt;
&lt;li&gt;A/B testing for store designs
&lt;ul&gt;
&lt;li&gt;HuffPost do A/B testing on headlines&lt;/li&gt;
&lt;li&gt;have 3 choices for first hour, then automatically chosen&lt;/li&gt;
&lt;li&gt;be consistent with presentation (don&amp;#8217;t let people know we&amp;#8217;re A/B testing them)&lt;/li&gt;
&lt;li&gt;need to know if we&amp;#8217;re still A/B testing&lt;/li&gt;
&lt;li&gt;put both bits of code in app, and choose according to web check on first launch&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Results:
&lt;ul&gt;
&lt;li&gt;store -&gt; video -&gt; upgrade pressed -&gt; upgraded&lt;/li&gt;
&lt;li&gt;A: 100% -&gt; 7.5% -&gt; 3.2% -&gt; 1.6%&lt;/li&gt;
&lt;li&gt;B: 100% -&gt; 9.5% -&gt; 3.5% -&gt; 1.8%&lt;/li&gt;
&lt;li&gt;interesting stat is that video &lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;What next?
&lt;ul&gt;
&lt;li&gt;make the store more dynamic&lt;/li&gt;
&lt;li&gt;downloaded plist file for wording&lt;/li&gt;
&lt;li&gt;HTML for whole store page (but would need to download and cache it)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-3982574598275105058?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P4MWTLaIR8wMup6gMxyIC_a7amE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P4MWTLaIR8wMup6gMxyIC_a7amE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P4MWTLaIR8wMup6gMxyIC_a7amE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P4MWTLaIR8wMup6gMxyIC_a7amE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=oVEVTnvSQDQ:ke2XfRRybOM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=oVEVTnvSQDQ:ke2XfRRybOM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=oVEVTnvSQDQ:ke2XfRRybOM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=oVEVTnvSQDQ:ke2XfRRybOM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/oVEVTnvSQDQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/3982574598275105058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=3982574598275105058" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/3982574598275105058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/3982574598275105058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/oVEVTnvSQDQ/iosdev-uk-making-money-with-in-app.html" title="iOSDev UK: Making Money with In-App Purchases" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-making-money-with-in-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IHR3o-eSp7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-1402957012411536075</id><published>2011-09-08T17:57:00.000+01:00</published><updated>2011-09-08T18:05:36.451+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T18:05:36.451+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="location" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="computer_vision" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="image-recognition" /><category scheme="http://www.blogger.com/atom/ns#" term="wifi" /><title>iOSDev UK: Mobile Apps: Bringing Together Real and Online Worlds</title><content type="html">&lt;p&gt;&lt;em&gt;Graeme Gibson, &lt;a href="http://appsherpas.com"&gt;AppSherpas&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS device as controller
&lt;ul&gt;
&lt;li&gt;an interface to home automation using DMX&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;existing products:
&lt;ul&gt;
&lt;li&gt;POSCard: point of sale mobile commerce at low cost&lt;/li&gt;
&lt;li&gt;Print&amp;amp;Post: Royal Mail from an iPhone&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;use eye movements to control a device&lt;/li&gt;
&lt;li&gt;mobile image discovery
&lt;ul&gt;
&lt;li&gt;scan an image instead of a QR code&lt;/li&gt;
&lt;li&gt;extracts &amp;#8220;DNA&amp;#8221; of image&lt;/li&gt;
&lt;li&gt;matches against database of monochrome images&lt;/li&gt;
&lt;li&gt;3-5s response on 3G (&amp;lt; 1s on Wi-Fi)&lt;/li&gt;
&lt;li&gt;100% accuracy for flat objects with a reasonable amount of light, that are large enough in the phot&lt;/li&gt;
&lt;li&gt;70-80% accuracy with less light and &gt; 15% perspective&lt;/li&gt;
&lt;li&gt;unlike QR codes, works for distant media (e.g. poster on the other side of the road)&lt;/li&gt;
&lt;li&gt;also works for a trailer on the TV&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;indoor wifi location is already available with Cisco kit
&lt;ul&gt;
&lt;li&gt;no extra client kit&lt;/li&gt;
&lt;li&gt;extra stuff needed in the AP&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-1402957012411536075?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Xr_Azg_ITL20YjQ-kxCmfYIfvk4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xr_Azg_ITL20YjQ-kxCmfYIfvk4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Xr_Azg_ITL20YjQ-kxCmfYIfvk4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xr_Azg_ITL20YjQ-kxCmfYIfvk4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=sMkKo4tawAU:UrNzu7exm1U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=sMkKo4tawAU:UrNzu7exm1U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=sMkKo4tawAU:UrNzu7exm1U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=sMkKo4tawAU:UrNzu7exm1U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/sMkKo4tawAU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/1402957012411536075/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=1402957012411536075" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1402957012411536075?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1402957012411536075?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/sMkKo4tawAU/iosdev-uk-mobile-apps-bringing-together.html" title="iOSDev UK: Mobile Apps: Bringing Together Real and Online Worlds" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>1</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-mobile-apps-bringing-together.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IHQ3wzeSp7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-480319266676207742</id><published>2011-09-08T17:55:00.000+01:00</published><updated>2011-09-08T18:05:32.281+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T18:05:32.281+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="formatting" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="style" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><category scheme="http://www.blogger.com/atom/ns#" term="exceptions" /><category scheme="http://www.blogger.com/atom/ns#" term="coding" /><title>iOSDev UK: Coding for your Future Self</title><content type="html">&lt;p&gt;&lt;em&gt;Martin Pilkington, &lt;a href="http://twitter.com/pilky"&gt;@pilky&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there are three you&amp;#8217;s
&lt;ul&gt;
&lt;li&gt;now &amp;#8212; doing the work&lt;/li&gt;
&lt;li&gt;future &amp;#8212; code guru&lt;/li&gt;
&lt;li&gt;past &amp;#8212; got let near your computer and vomited all over your code&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;consistent formatting &amp;#8212; follow conventions
&lt;ul&gt;
&lt;li&gt;don&amp;#8217;t fight the conventions&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;composition vs subclassing
&lt;ul&gt;
&lt;li&gt;cocoa often better to use composition&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;copy immutable classes &amp;#8212; don&amp;#8217;t use a reference&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t ship code with exceptions
&lt;ul&gt;
&lt;li&gt;in Objective-C they&amp;#8217;re for invalid state &amp;#8212; programming errors&lt;/li&gt;
&lt;li&gt;use NSError instead&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;naming
&lt;ul&gt;
&lt;li&gt;don&amp;#8217;t abbreviate&lt;/li&gt;
&lt;li&gt;no namespaces, so prefix all your classes, preferably with 3+ chars&lt;/li&gt;
&lt;li&gt;prefix category methods on other classes too, e.g. &lt;code&gt;abc_categoryMethod&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;capitalise acronyms&lt;/li&gt;
&lt;li&gt;if last param is error return, should be &lt;code&gt;error:&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;if you comment &lt;em&gt;every method&lt;/em&gt; then you&amp;#8217;ll be in the habit of commenting when it counts
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;not sure I totally agree &amp;#8212; comments can get out of date with the code. perhaps better to comment longer code pieces rather than each and every method&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;large classes and large methods are unmaintainable
&lt;ul&gt;
&lt;li&gt;also splits out more stuff into back-end code&lt;/li&gt;
&lt;li&gt;better for testing, better for multi-platform&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;better to inject dependencies (tell, don&amp;#8217;t ask)
&lt;ul&gt;
&lt;li&gt;or at least expose a property to set during tests&lt;/li&gt;
&lt;li&gt;if do so, then either set default in init, or use lazy construction in the getter method&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;notifications
&lt;ul&gt;
&lt;li&gt;can also be distributed to other devices&lt;/li&gt;
&lt;li&gt;see kellabyte.com for continuous client&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;regular refactoring:
&lt;ul&gt;
&lt;li&gt;always leave the campground cleaner than you found it&lt;/li&gt;
&lt;li&gt;have spring cleaning days/hours&lt;/li&gt;
&lt;li&gt;lots of little refactors mean less big rewrites!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-480319266676207742?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KElwXwbIBeAoYJ81RXQ4A9XW-cg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KElwXwbIBeAoYJ81RXQ4A9XW-cg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KElwXwbIBeAoYJ81RXQ4A9XW-cg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KElwXwbIBeAoYJ81RXQ4A9XW-cg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=FBcDV15GeZM:Tk37-Fa2KTw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=FBcDV15GeZM:Tk37-Fa2KTw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=FBcDV15GeZM:Tk37-Fa2KTw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=FBcDV15GeZM:Tk37-Fa2KTw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/FBcDV15GeZM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/480319266676207742/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=480319266676207742" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/480319266676207742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/480319266676207742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/FBcDV15GeZM/iosdev-uk-coding-for-your-future-self.html" title="iOSDev UK: Coding for your Future Self" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-coding-for-your-future-self.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ICSX0-eCp7ImA9WhdWF08.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-2140889702111283088</id><published>2011-09-08T17:52:00.000+01:00</published><updated>2011-09-11T09:26:08.350+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-11T09:26:08.350+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="statistics" /><category scheme="http://www.blogger.com/atom/ns#" term="appstore" /><category scheme="http://www.blogger.com/atom/ns#" term="layout" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="cache" /><category scheme="http://www.blogger.com/atom/ns#" term="epub" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="xcode" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="team" /><category scheme="http://www.blogger.com/atom/ns#" term="content" /><title>iOSDev UK: Adapting Content for Apps</title><content type="html">&lt;p&gt;&lt;em&gt;Dave Addey &amp;amp; Alyson Fielding, &lt;a href="http://www.agant.com/" title="Agant - mobile app development for iPhone, iPad, Android and more"&gt;Agant Ltd&lt;/a&gt;, &lt;a href="http://twitter.com/daveaddey"&gt;@daveaddey&lt;/a&gt; &amp;amp; &lt;a href="http://twitter.com/alysonf"&gt;@alysonf&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Why an app?&lt;ul&gt;&lt;li&gt;Can you do something with it in dead time?&lt;/li&gt;&lt;li&gt;It&amp;#8217;s always there when you need it&lt;/li&gt;&lt;li&gt;Would you use it yourself?&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Preparing content&lt;ul&gt;&lt;li&gt;content definition lets you split up content into small pieces&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;iPhone vs iPad&lt;ul&gt;&lt;li&gt;use cases are different&lt;/li&gt;&lt;li&gt;e.g. full page illustrations just don&amp;#8217;t work on an iPhone &amp;#8212; universal app just doesn&amp;#8217;t show them&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;network content:&lt;ul&gt;&lt;li&gt;assume no network and make as many things possible as you can&lt;/li&gt;&lt;li&gt;then download &amp;amp; cache what you need when network becomes available&lt;/li&gt;&lt;li&gt;same goes for submitting stuff &amp;#8212; add it to a queue and submit it when a network becomes available&lt;/li&gt;&lt;li&gt;e.g. QI app submit a fact&lt;/li&gt;&lt;li&gt;provide the app bundle with some initial content to get started&lt;/li&gt;&lt;li&gt;if you have information always show it &amp;#8212; but show how old it is&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="contentformats"&gt;content formats&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;HTML&lt;/li&gt;&lt;li&gt;Property list&lt;/li&gt;&lt;li&gt;Custom XML&lt;/li&gt;&lt;li&gt;NSAttributedString&lt;/li&gt;&lt;li&gt;Core Data store&lt;/li&gt;&lt;li&gt;SQLite database&lt;/li&gt;&lt;li&gt;bundled media files&lt;/li&gt;&lt;li&gt;text files &amp;#8212; e.g. QI facts to rate&lt;/li&gt;&lt;li&gt;PDF&lt;/li&gt;&lt;li&gt;e.g. &lt;a href="http://j.mp/oRaMkO"&gt;QI app&lt;/a&gt;&lt;ul&gt;&lt;li&gt;books came as ePub (HTML)&lt;/li&gt;&lt;li&gt;needed tidying, but was very useful&lt;/li&gt;&lt;li&gt;errors could be spotted &amp;amp; fixed directly&lt;/li&gt;&lt;li&gt;however, not the right format to put in the app&lt;/li&gt;&lt;li&gt;used script to transfer into NSAttributedString&lt;/li&gt;&lt;li&gt;better presentation&lt;/li&gt;&lt;li&gt;better layout for images &amp;amp; text&lt;/li&gt;&lt;li&gt;better pagination&lt;/li&gt;&lt;li&gt;content definition really helped&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;e.g. &lt;a href="http://j.mp/nsGMUs" title="Malcolm Tucker: The Missing Phone"&gt;Malcolm Tucker&lt;/a&gt;&lt;ul&gt;&lt;li&gt;email views driven from plist&lt;/li&gt;&lt;li&gt;Aly edited directly in XCode and rebuild to check&lt;/li&gt;&lt;li&gt;email content in HTML&lt;/li&gt;&lt;li&gt;attachments in PDF&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;e.g. &lt;a href="http://j.mp/nPyKZ3"&gt;Arsenal app&lt;/a&gt;&lt;ul&gt;&lt;li&gt;already had a CMS for the website&lt;/li&gt;&lt;li&gt;beginning of project &amp;#8212; defined an API&lt;/li&gt;&lt;li&gt;tweaked the API throughout development, but had something to work from right at the beginning&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="helpingcontentexperts"&gt;Helping content experts&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;work hand in hand with them from the beginning&lt;/li&gt;&lt;li&gt;make sure they have a real device that they&amp;#8217;re using every day&lt;/li&gt;&lt;li&gt;try to let the content expert able to make their own build of the app as they change the content&lt;ul&gt;&lt;li&gt;anyone working on the content has XCode installed and knows how to build it&lt;/li&gt;&lt;li&gt;they also have access to check stuff back in&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;let them play with your toys &amp;#8212; it&amp;#8217;s fun!&lt;/li&gt;&lt;li&gt;put the content in with the development&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="stats"&gt;stats&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;2.7 million stations are picked from UK Trains picker every month (~88k per day)&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;testing&lt;ul&gt;&lt;li&gt;looking to do more&lt;/li&gt;&lt;li&gt;UI testing is a bit of a faff, but is possible&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-2140889702111283088?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HTfkW09GJwteV7CJ-mDdvnqEMSQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HTfkW09GJwteV7CJ-mDdvnqEMSQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HTfkW09GJwteV7CJ-mDdvnqEMSQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HTfkW09GJwteV7CJ-mDdvnqEMSQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Mts3jR78HmM:SOCxEgn0lM8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Mts3jR78HmM:SOCxEgn0lM8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=Mts3jR78HmM:SOCxEgn0lM8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Mts3jR78HmM:SOCxEgn0lM8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/Mts3jR78HmM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/2140889702111283088/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=2140889702111283088" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2140889702111283088?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2140889702111283088?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/Mts3jR78HmM/iosdev-uk-adapting-content-for-apps.html" title="iOSDev UK: Adapting Content for Apps" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-adapting-content-for-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IFSX85cCp7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-8575747073823866414</id><published>2011-09-08T17:43:00.000+01:00</published><updated>2011-09-08T18:05:18.128+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T18:05:18.128+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="statistics" /><category scheme="http://www.blogger.com/atom/ns#" term="appstore" /><category scheme="http://www.blogger.com/atom/ns#" term="advertising" /><category scheme="http://www.blogger.com/atom/ns#" term="xmpp" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="messaging" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="iads" /><title>iOSDev UK: Tap to Experiment</title><content type="html">&lt;p&gt;&lt;em&gt;Chris Ross, &lt;a href="http://osmosisapps.com"&gt;Osmosis Apps&lt;/a&gt;, &lt;a href="http://twitter.com/darkrock"&gt;@darkrock&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An attempt to find success on the AppStore&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App: &lt;a href="http://j.mp/qRHXFL"&gt;Tap to Chat&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Other chat apps look very similar &amp;#8212; buddy lists &amp;amp; tab bars&lt;/li&gt;
&lt;li&gt;Decided to try something different &amp;#8212; picture-based&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Go along to a nearby group (e.g. Brighton iPhone Creators)&lt;/li&gt;
&lt;li&gt;Experiment #1: universal Facebook chat app with a novel UI
&lt;ul&gt;
&lt;li&gt;1.5 weeks each for two people&lt;/li&gt;
&lt;li&gt;Used pre-existing code from other apps (Facebook XMPP chat)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Collaboration helps &amp;#8212; both to evolve good ideas and filter bad ideas&lt;/li&gt;
&lt;li&gt;Can appeal app store rejections, even if you don&amp;#8217;t change the code (e.g. if your app relies on a third party that was down during testing)&lt;/li&gt;
&lt;li&gt;Don&amp;#8217;t underestimate the phenomenal power of the Christmas period
&lt;ul&gt;
&lt;li&gt;e.g. EA drop their prices just before Xmas, their apps go to the top, and their downloads rocket&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Experiment #1.5:
&lt;ul&gt;
&lt;li&gt;iAds seeing only 10-15% fill rate&lt;/li&gt;
&lt;li&gt;Apple pay you just to show the advert&lt;/li&gt;
&lt;li&gt;Admob have a higher fill rate, but only pay you for click-through&lt;/li&gt;
&lt;li&gt;More differentiation with paid app&lt;/li&gt;
&lt;li&gt;Removing adverts is not enough to get people to buy the paid version&lt;/li&gt;
&lt;li&gt;Added &amp;#8220;share app on friends&amp;#8217; walls&amp;#8221;&lt;/li&gt;
&lt;li&gt;had a spike -&gt; 1000 shares a day&lt;/li&gt;
&lt;li&gt;revenue jumped to &amp;#163;4-4.5K / month&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Experiment #2:
&lt;ul&gt;
&lt;li&gt;Started a company to house the app&lt;/li&gt;
&lt;li&gt;Rewrite the code&lt;/li&gt;
&lt;li&gt;Changed the facebook (spamming)sharing since Facebook complained&amp;#8230;&lt;/li&gt;
&lt;li&gt;but they were polite&lt;/li&gt;
&lt;li&gt;Added Google chat, AIM + others&lt;/li&gt;
&lt;li&gt;More free apps: one per API &amp;#8212; better upgrade path (get all in one app)&lt;/li&gt;
&lt;li&gt;Got a designer&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Aimed to do all that in two weeks&amp;#8230;
&lt;ul&gt;
&lt;li&gt;but took three weeks from 6am-11pm&lt;/li&gt;
&lt;li&gt;&lt;code&gt;downloadDidFailWithError&lt;/code&gt; is a private API&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Got an expedited AppStore review to be in store in time for Apple Design Awards&lt;/li&gt;
&lt;li&gt;Results:
&lt;ul&gt;
&lt;li&gt;Revenue jumped to c.&amp;#163;6k/month&lt;/li&gt;
&lt;li&gt;Difficult to convert people from v1 to v2 (especially since v2 was on a new (company) iTunes account)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Success in the AppStore?
&lt;ul&gt;
&lt;li&gt;Overall stats:&lt;/li&gt;
&lt;li&gt;Mean amount of money made: &amp;#163;30,000&lt;/li&gt;
&lt;li&gt;Median amount made: &amp;#163;600&lt;/li&gt;
&lt;li&gt;Tap to Chat:&lt;/li&gt;
&lt;li&gt;18% revenue from paid apps (18K downloads)&lt;/li&gt;
&lt;li&gt;82% revenue from adverts in free (500K downloads)&lt;/li&gt;
&lt;li&gt;&amp;#163;40K made so far&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Moving to using mopub to do advertising
&lt;ul&gt;
&lt;li&gt;provides more control on the server side&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Mistakes
&lt;ul&gt;
&lt;li&gt;changed sharing in v2 &amp;#8212; less visibility&lt;/li&gt;
&lt;li&gt;no push notifications in v2 (but kind of a choice anyway)&lt;/li&gt;
&lt;li&gt;transitioning to a new iTunes Connect account&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Next steps
&lt;ul&gt;
&lt;li&gt;building a backend server for push notifications&lt;/li&gt;
&lt;li&gt;building libraries for MSN &amp;amp; AIM&lt;/li&gt;
&lt;li&gt;improving user retention:&lt;/li&gt;
&lt;li&gt;Osmo character offers advice and news&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Facebook App ID
&lt;ul&gt;
&lt;li&gt;can share same app ID between apps&lt;/li&gt;
&lt;li&gt;v1 &amp;amp; v2 (different iTunes Accounts) and free apps use same facebook app ID&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Facebook spamming guidelines
&lt;ul&gt;
&lt;li&gt;you must have a single action per share&lt;/li&gt;
&lt;li&gt;you must allow the user to edit their text on others&amp;#8217; walls&lt;/li&gt;
&lt;li&gt;If there is an issue, facebook contact you to say that you have to resolve the issue in 24hrs &amp;#8212; but they need you to respond in that time&lt;/li&gt;
&lt;li&gt;you can ask for a grace period&lt;/li&gt;
&lt;li&gt;Tap to Chat asked for 2 weeks&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Transferring iTunes Accounts
&lt;ul&gt;
&lt;li&gt;can convert a personal account into a corporate account if you ask&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Experiments with price?
&lt;ul&gt;
&lt;li&gt;v1: 59p&lt;/li&gt;
&lt;li&gt;aim to bump the price with each added network&lt;/li&gt;
&lt;li&gt;&amp;#8220;no point putting things for less than &amp;#163;2 on the app store &amp;#8212; if people have made a decision to buy it, then they&amp;#8217;ll buy it&amp;#8230;&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-8575747073823866414?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6jdNcPotUEoGg-2L4jw3A2HYLYs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6jdNcPotUEoGg-2L4jw3A2HYLYs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6jdNcPotUEoGg-2L4jw3A2HYLYs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6jdNcPotUEoGg-2L4jw3A2HYLYs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=zJWaZnucNDU:WtLVHsQjHMY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=zJWaZnucNDU:WtLVHsQjHMY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=zJWaZnucNDU:WtLVHsQjHMY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=zJWaZnucNDU:WtLVHsQjHMY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/zJWaZnucNDU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/8575747073823866414/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=8575747073823866414" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8575747073823866414?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8575747073823866414?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/zJWaZnucNDU/iosdev-uk-tap-to-experiment.html" title="iOSDev UK: Tap to Experiment" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-tap-to-experiment.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EHRXc7fyp7ImA9WhdWFU0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-8544644875177624486</id><published>2011-09-08T17:30:00.000+01:00</published><updated>2011-09-08T18:07:14.907+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T18:07:14.907+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="appstore" /><category scheme="http://www.blogger.com/atom/ns#" term="advertising" /><category scheme="http://www.blogger.com/atom/ns#" term="marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="tapmaguk" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="media" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><title>iOSDev UK: Handling the Press</title><content type="html">&lt;p&gt;&lt;em&gt;Chris Phin, Editor, &lt;a href="http://www.tapmag.co.uk/"&gt;Tap! Magazine&lt;/a&gt;, &lt;a href="http://twitter.com/chrisphin"&gt;@chrisphin&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Or, &amp;#8220;How to get five-star reviews, sell millions of apps, and retire six months from now &amp;#8212; guaranteed!&amp;#8221;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Getting an app noticed: &lt;ul&gt;&lt;li&gt;Exposure&lt;/li&gt;
&lt;li&gt;Endorsement&lt;/li&gt;
&lt;li&gt;Tap! magazine really want to embrace developers&lt;/li&gt;
&lt;li&gt;Purchase&lt;/li&gt;
&lt;li&gt;91% of readers buy recommended apps&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;UK magazines make money from selling issues &lt;ul&gt;&lt;li&gt;In the US it&amp;#8217;s more based on advertising&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;How reviews are chosen? &lt;ul&gt;&lt;li&gt;Gut feeling from the editors&lt;/li&gt;
&lt;li&gt;Fitting in to specific sections&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;How to piss off an editor? &lt;ul&gt;&lt;li&gt;Not knowing the magazine title or anything about it&amp;#8230;&lt;/li&gt;
&lt;li&gt;Unfocussed pitching&lt;/li&gt;
&lt;li&gt;Aggressiveness&lt;/li&gt;
&lt;li&gt;Choosing the wrong comms channel (email/SMS/phone)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;How to make an editor happy? &lt;ul&gt;&lt;li&gt;Devs with passion &amp;amp; high standards&lt;/li&gt;
&lt;li&gt;Personal connection &amp;#8212; trust other devs&amp;#8217; feelings&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Freelancers &lt;ul&gt;&lt;li&gt;e.g. Craig Gennell &amp;#8212; Tap! mag contributing editor for games&lt;/li&gt;
&lt;li&gt;Some are integral part of team; some are chancers&amp;#8230;&lt;/li&gt;
&lt;li&gt;But help them as much as possible&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Press releases &lt;ul&gt;&lt;li&gt;Same rules as any other content &amp;#8212; first line should be who made the app, its name and what does it do&lt;/li&gt;
&lt;li&gt;Links &amp;#8212; to the web site and the app store&lt;/li&gt;
&lt;li&gt;Contact details&lt;/li&gt;
&lt;li&gt;include twitter&lt;/li&gt;
&lt;li&gt;After all this, can put in description of company (but not before)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Website &lt;ul&gt;&lt;li&gt;What it is &amp;#8212; in as few words as possible&lt;/li&gt;
&lt;li&gt;Price &amp;#8212; including details of promotions (if poss)&lt;/li&gt;
&lt;li&gt;Screenshots &amp;#8212; equinux.com does a good media room&lt;/li&gt;
&lt;li&gt;Contact details &amp;#8212; again, specific media details if poss&lt;/li&gt;
&lt;li&gt;Contact forms not so good as the sender can&amp;#8217;t track the outgoing email&lt;/li&gt;
&lt;li&gt;So have an obfuscated email address on the page&lt;/li&gt;
&lt;li&gt;Reviewers&amp;#8217; guide&lt;/li&gt;
&lt;li&gt;Often hooked around a narrative&lt;/li&gt;
&lt;li&gt;Opportunity to guide the review &amp;#8212; pick out USPs, etc&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;What to do when you get a review &lt;ul&gt;&lt;li&gt;Read it! Not just the score&amp;#8230;&lt;/li&gt;
&lt;li&gt;Take any feedback&lt;/li&gt;
&lt;li&gt;app reviewers see a lot of apps, so maybe a little more informed&lt;/li&gt;
&lt;li&gt;but they are just another individual user!&lt;/li&gt;
&lt;li&gt;Shout about good reviews&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Other ways to get in a magazine &lt;ul&gt;&lt;li&gt;Not just full reviews: app roundups, features, updates&lt;/li&gt;
&lt;li&gt;Building relationships leads to tweets etc&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;innovative ways of catching attention &lt;ul&gt;&lt;li&gt;direct mail involving cookies!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;press area &lt;ul&gt;&lt;li&gt;often include reviews from other magazines (but that&amp;#8217;s not useful for reviewers)&lt;/li&gt;
&lt;li&gt;screenshots, hi-res logos, videos&lt;/li&gt;
&lt;li&gt;useful to have a zip&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;beta builds &lt;ul&gt;&lt;li&gt;interesting from bigger apps (well-known, anticipated)&lt;/li&gt;
&lt;li&gt;Chris loves &lt;a href="http://testflightapp.com"&gt;TestFlight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;mailing out &lt;ul&gt;&lt;li&gt;really targeted, passionate, individualized approach to 5 or so key targets&lt;/li&gt;
&lt;li&gt;mailshot out the rest&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;screencasts? &lt;ul&gt;&lt;li&gt;prefer image galleries as can skim them&lt;/li&gt;
&lt;li&gt;otherwise, 20 seconds max!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-8544644875177624486?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KRTKGfoBNvbh1NklkZztbKhVCLw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KRTKGfoBNvbh1NklkZztbKhVCLw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KRTKGfoBNvbh1NklkZztbKhVCLw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KRTKGfoBNvbh1NklkZztbKhVCLw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=--rqwpgNz9g:moZ1RDl61Ok:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=--rqwpgNz9g:moZ1RDl61Ok:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=--rqwpgNz9g:moZ1RDl61Ok:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=--rqwpgNz9g:moZ1RDl61Ok:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/--rqwpgNz9g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/8544644875177624486/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=8544644875177624486" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8544644875177624486?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8544644875177624486?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/--rqwpgNz9g/iosdev-uk-handling-press.html" title="iOSDev UK: Handling the Press" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-handling-press.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGRHg5eCp7ImA9WhdWFE4.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-3752227299826337182</id><published>2011-09-08T00:12:00.001+01:00</published><updated>2011-09-08T00:12:05.620+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T00:12:05.620+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gesture" /><category scheme="http://www.blogger.com/atom/ns#" term="multitouch" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="interface" /><category scheme="http://www.blogger.com/atom/ns#" term="interaction" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="game" /><title>iOSDev UK: iPad-native Game Design: Exploring a New Gaming Interface</title><content type="html">&lt;p&gt;&lt;em&gt;&lt;a href="http://www.36peas.com/"&gt;Gareth Jenkins&lt;/a&gt;, &lt;a href="http://twitter.com/36peas"&gt;@36peas&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iPad specific &amp;#8212; using the iPad interface as primary interface to game mechanic&lt;/li&gt;
&lt;li&gt;Multi-touch interfaces don&amp;#8217;t work when you can&amp;#8217;t see what you&amp;#8217;re interfacing with&lt;/li&gt;
&lt;li&gt;The iPad is more likely a shared device&lt;/li&gt;
&lt;li&gt;iPad player more likely on the sofa than the toilet :-)
&lt;ul&gt;
&lt;li&gt;i.e. usage is more purposeful rather than filling time&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;areas of focus:
&lt;ul&gt;
&lt;li&gt;take advantage of space available&lt;/li&gt;
&lt;li&gt;think about appropriate gestures&lt;/li&gt;
&lt;li&gt;think about gaming context&lt;/li&gt;
&lt;li&gt;think outside the (phone) box&lt;/li&gt;
&lt;li&gt;iPad specific does not mean exclusively iPad &amp;#8212; take the idea elsewhere as well&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;examples:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.hyperiond7.com/" title="Hyperion: d7 | Action / strategy / puzzle gaming -- launching on iPad September 2011"&gt;Hyperion: d7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;iPad provides more room for dedicated interaction areas
&lt;ul&gt;
&lt;li&gt;e.g. left hand &amp;amp; right hand controls on edges + general interaction in middle&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;ways to think about it
&lt;ul&gt;
&lt;li&gt;play lots of iPad games&lt;/li&gt;
&lt;li&gt;play iPhone games scaled up and work out what&amp;#8217;s wrong&lt;/li&gt;
&lt;li&gt;look at the fingerprints on your device!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-3752227299826337182?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FQ41KJtyMtXxX4t4NQoML4B0qQc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQ41KJtyMtXxX4t4NQoML4B0qQc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FQ41KJtyMtXxX4t4NQoML4B0qQc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQ41KJtyMtXxX4t4NQoML4B0qQc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Lo9Dj98_3hU:WfnD5r43Hnk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Lo9Dj98_3hU:WfnD5r43Hnk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=Lo9Dj98_3hU:WfnD5r43Hnk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=Lo9Dj98_3hU:WfnD5r43Hnk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/Lo9Dj98_3hU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/3752227299826337182/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=3752227299826337182" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/3752227299826337182?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/3752227299826337182?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/Lo9Dj98_3hU/iosdev-uk-ipad-native-game-design.html" title="iOSDev UK: iPad-native Game Design: Exploring a New Gaming Interface" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-ipad-native-game-design.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHSXk4cSp7ImA9WhdWFE4.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-1065425943022715149</id><published>2011-09-08T00:10:00.001+01:00</published><updated>2011-09-08T00:10:38.739+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T00:10:38.739+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="core-animation" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>iOSDev UK: Animation for Serious Apps</title><content type="html">&lt;p&gt;Neil Taylor, Aberystwyth University, &lt;a href="http://twitter.com/digidol"&gt;@digidol&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CALayer is not actually the view &amp;#8212; it&amp;#8217;s the model&lt;/li&gt;
&lt;li&gt;Old-style UIView animations are now discouraged &amp;#8212; start to use blocks instead
&lt;ul&gt;
&lt;li&gt;block-style also allows you to add further animations on completion&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;CALayer animation is slightly different
&lt;ul&gt;
&lt;li&gt;animate position, not centre&lt;/li&gt;
&lt;li&gt;bounds, not frame&lt;/li&gt;
&lt;li&gt;values are animated, not changed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CAAnimation setFromValue:/setToValue:&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Keyframe animation lets you animate across a complex path
&lt;ul&gt;
&lt;li&gt;Core Animation will calculate intermediate frames&lt;/li&gt;
&lt;li&gt;e.g. shopping cart items thrown into a cart at the bottom of the screen&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Other bits
&lt;ul&gt;
&lt;li&gt;can have transactions to tie animations together&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;More useful references in slides&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-1065425943022715149?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x01QlVv2v6ycmSsRBStAchE1Nwc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x01QlVv2v6ycmSsRBStAchE1Nwc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x01QlVv2v6ycmSsRBStAchE1Nwc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x01QlVv2v6ycmSsRBStAchE1Nwc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=ZCiMjX1odLw:NhV6emUGeDg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=ZCiMjX1odLw:NhV6emUGeDg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=ZCiMjX1odLw:NhV6emUGeDg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=ZCiMjX1odLw:NhV6emUGeDg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/ZCiMjX1odLw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/1065425943022715149/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=1065425943022715149" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1065425943022715149?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1065425943022715149?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/ZCiMjX1odLw/animation-for-serious-apps.html" title="iOSDev UK: Animation for Serious Apps" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/animation-for-serious-apps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcASX45cSp7ImA9WhdWFE4.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-2754842202168501260</id><published>2011-09-08T00:07:00.001+01:00</published><updated>2011-09-08T00:10:48.029+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T00:10:48.029+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gamekit" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="html5" /><category scheme="http://www.blogger.com/atom/ns#" term="webdav" /><category scheme="http://www.blogger.com/atom/ns#" term="icloud" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="airdrop" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><title>iOSDev UK: Real-World Data (or There and Back Again)</title><content type="html">&lt;p&gt;&lt;em&gt;&lt;a href="https://twitter.com/hatfinch"&gt;Hamish Allan&lt;/a&gt;, &lt;a href="http://www.olivetoast.com/" title="OliveToast - Purveyors of fine software"&gt;Olive Toast&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The story of writing &lt;a href="http://j.mp/pCznBu"&gt;Files Pro&lt;/a&gt; &amp;#8212; an app to take files with you on an iOS device.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used &lt;a href="http://code.google.com/p/cocoahttpserver/" title="cocoahttpserver - An embedded HTTP server written in Cocoa. - Google Project Hosting"&gt;Deusty&amp;#8217;s CocoaHTTPServer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;but starting now, would use Matt Gallagher&amp;#8217;s &lt;a href="http://cocoawithlove.com/2009/07/simple-extensible-http-server-in-cocoa.html" title="Cocoa with Love: A simple, extensible HTTP server in Cocoa"&gt;simple HTTP server code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Dropbox has a nice API
&lt;ul&gt;
&lt;li&gt;operations are aynchronous&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Gamekit makes device to device connection over bluetooth easy&lt;/li&gt;
&lt;li&gt;Could use HTML5 to make a PC-based interface to an iOS app
&lt;ul&gt;
&lt;li&gt;Visit a web page served from the device from your PC and see a flexible app within your browser&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;iCloud
&lt;ul&gt;
&lt;li&gt;NSFilePresenter tells you when a file transfer has completed&lt;/li&gt;
&lt;li&gt;iCloud syncs the meta-data about files first, using NSMetadataQuery&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&amp;#8220;Your market is not power users&amp;#8221;&lt;/li&gt;
&lt;li&gt;Apple is moving towards a flat list of files with search, rather than a hierarchical system&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="qa"&gt;Q&amp;#38;A&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No hooks in iOS for AirDrop (yet?)&lt;/li&gt;
&lt;li&gt;Nor any GameKit APIs which talk to desktop&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-2754842202168501260?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b9l2A65Ka-L39FwRhAIYrPHgx1Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b9l2A65Ka-L39FwRhAIYrPHgx1Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b9l2A65Ka-L39FwRhAIYrPHgx1Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b9l2A65Ka-L39FwRhAIYrPHgx1Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=GFyd4sGiR24:i14hY9tq8VE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=GFyd4sGiR24:i14hY9tq8VE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=GFyd4sGiR24:i14hY9tq8VE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=GFyd4sGiR24:i14hY9tq8VE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/GFyd4sGiR24" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/2754842202168501260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=2754842202168501260" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2754842202168501260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2754842202168501260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/GFyd4sGiR24/real-world-data-or-there-and-back-again.html" title="iOSDev UK: Real-World Data (or There and Back Again)" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/real-world-data-or-there-and-back-again.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUICSHc4cCp7ImA9WhdWFE0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-2189294821139635957</id><published>2011-09-07T15:59:00.001+01:00</published><updated>2011-09-07T15:59:29.938+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T15:59:29.938+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ocunit" /><category scheme="http://www.blogger.com/atom/ns#" term="mocks" /><category scheme="http://www.blogger.com/atom/ns#" term="tdd" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="ocmock" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>iOSDev UK: Using TDD to write an iOS App</title><content type="html">&lt;p&gt;&lt;em&gt;Graham Lee, professional in-betweener, &lt;a href="http://twitter.com/iamleeg"&gt;@iamleeg&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Or, &amp;#8220;What is TDD and why should you use it?&amp;#8221;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;discovering bugs is not the point of testing at all
&lt;ul&gt;
&lt;li&gt;instead, you are proving that there aren&amp;#8217;t bugs&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;once we&amp;#8217;ve fixed bugs, we don&amp;#8217;t want to see them ever again
&lt;ul&gt;
&lt;li&gt;tests can ensure that regressions don&amp;#8217;t come back&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;TDD allows us to prevent bugs from ever happening!
&lt;ul&gt;
&lt;li&gt;you won&amp;#8217;t prove that the app works how the customer expects, but you will at least prove that it works how you expect it to work&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;TDD imposes black-box thinking for the developer
&lt;ul&gt;
&lt;li&gt;makes you think about how the code &lt;em&gt;should&lt;/em&gt; be designed and scoped&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;accurate planning: we know how much we&amp;#8217;ve done
&lt;ul&gt;
&lt;li&gt;and we can be &lt;strong&gt;honest&lt;/strong&gt; how much we have done&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;TDD does &lt;strong&gt;not&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;ensure that the developer understood the requirements!&lt;/li&gt;
&lt;li&gt;ensure that the requirements remain static&lt;/li&gt;
&lt;li&gt;ensure that pieces work together (unless you add integration tests)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;tests should be short and have descriptive, English names
&lt;ul&gt;
&lt;li&gt;e.g. &lt;code&gt;testDatesOnTheSameDayAreConsideredSame&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;general pattern &lt;condition&gt; &lt;expectation&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;tests should be fast &amp;#8212; well under a hundredth of a second each, so a second or so for &lt;em&gt;all of them&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;avoid integration tests in unit testing since they take too long&lt;/li&gt;
&lt;li&gt;don&amp;#8217;t interrupt your concentration by waiting for tests&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;as a result, your classes will be smaller and have obvious effects
&lt;ul&gt;
&lt;li&gt;any side-effects are few and easy to predict&lt;/li&gt;
&lt;li&gt;if your test fixture gets big, then that&amp;#8217;s a sign that you need to refactor (possibly including the tests!)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;TDD encourages &amp;#8220;tell, don&amp;#8217;t ask&amp;#8221; configuration
&lt;ul&gt;
&lt;li&gt;inversion of control&lt;/li&gt;
&lt;li&gt;pass in helper data rather than discover it internally&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;avoiding testing everything at once:
&lt;ul&gt;
&lt;li&gt;use fake objects (with same interfaces) to provide simulated interactions&lt;/li&gt;
&lt;li&gt;use mock objects to record and verify interactions&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Objective-C mock frameworks:
&lt;ul&gt;
&lt;li&gt;OCMock&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lukeredpath/lrmocky"&gt;Mocky&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Code coverage is useful for adding tests to an existing app
&lt;ul&gt;
&lt;li&gt;Not so useful for building new code&lt;/li&gt;
&lt;li&gt;If you&amp;#8217;re not covering code with TDD, then you&amp;#8217;re kind of cheating yourself&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="qa"&gt;Q&amp;amp;A&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;@pilky knows about using the accessibility framework to write automated UI tests using javascript&lt;/li&gt;
&lt;li&gt;can use XCodeBuild to run unit tests from command line&lt;/li&gt;
&lt;li&gt;use GHUnit instead of built-in OCUnit to output JUnit XML reports&lt;/li&gt;
&lt;li&gt;iOS Enterprise Development &amp;#8212; O&amp;#8217;Reilly book by James Turner
&lt;ul&gt;
&lt;li&gt;includes lots of useful&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;squish automated GUI testing?&lt;/li&gt;
&lt;li&gt;test code linking&amp;#8230;
&lt;ul&gt;
&lt;li&gt;app should be plugin host, providing linked libraries&lt;/li&gt;
&lt;li&gt;but it doesn&amp;#8217;t work &amp;#8212; have to link yourself from test code&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-2189294821139635957?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/n6JXqbCezRIE2zz5nAQQw5IkCck/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n6JXqbCezRIE2zz5nAQQw5IkCck/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/n6JXqbCezRIE2zz5nAQQw5IkCck/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/n6JXqbCezRIE2zz5nAQQw5IkCck/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=6Ejre49OYjs:sMtAXZ4Ic90:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=6Ejre49OYjs:sMtAXZ4Ic90:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=6Ejre49OYjs:sMtAXZ4Ic90:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=6Ejre49OYjs:sMtAXZ4Ic90:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/6Ejre49OYjs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/2189294821139635957/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=2189294821139635957" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2189294821139635957?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/2189294821139635957?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/6Ejre49OYjs/iosdev-uk-using-tdd-to-write-ios-app.html" title="iOSDev UK: Using TDD to write an iOS App" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-using-tdd-to-write-ios-app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGRH07fSp7ImA9WhdWFE0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-1482801913807971710</id><published>2011-09-07T15:55:00.001+01:00</published><updated>2011-09-07T15:55:25.305+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T15:55:25.305+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><category scheme="http://www.blogger.com/atom/ns#" term="coregraphics" /><title>iOSDev UK: Building Custom Controls with UIView</title><content type="html">&lt;p&gt;&lt;em&gt;Rory Prior, &lt;a href="http://www.thinkmac.co.uk"&gt;ThinkMac Software&lt;/a&gt;&lt;/em&gt;, &lt;a href="http://www.twitter.com/roryprior"&gt;@roryprior&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generally subclass UIView directly
&lt;ul&gt;
&lt;li&gt;can subclass other controls, but things might not happen how you expect since lots of things happen in the background&lt;/li&gt;
&lt;li&gt;and you may need to use private APIs&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;override methods:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;initWithFrame&lt;/code&gt; for programmatic creation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;initWithCoder&lt;/code&gt; for IB-created views&lt;/li&gt;
&lt;li&gt;&lt;code&gt;drawRect&lt;/code&gt; for actual drawing&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;UIKit uses top left as origin
&lt;ul&gt;
&lt;li&gt;but CoreGraphics uses bottom left&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;adding UIImageView is easy
&lt;ul&gt;
&lt;li&gt;but quite heavyweight&lt;/li&gt;
&lt;li&gt;instead can draw a UIImage directly&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;similarly, can use UILabel or draw string directly
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NSString drawAtPoint:withFont:&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NSString drawInRect:withFont:&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NSString sizeWithFont:&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;drawing shapes:
&lt;ul&gt;
&lt;li&gt;CoreGraphics (nasty low-level C stuff :-) )&lt;/li&gt;
&lt;li&gt;UIBezierPath (introduced in iOS 3.2)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;complicated graphics often still done better by using bitmaps &amp;#8212; UIBezierPath can be processor-intensive for lots of lines&lt;/li&gt;
&lt;li&gt;UIColor can fill in patterns as well as flat colour&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="userinteraction"&gt;user interaction&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;override UIResponder methods to detect touches&lt;/li&gt;
&lt;li&gt;you&amp;#8217;ll need UIGestureRecognizers to detect swipes, pinches, etc&lt;/li&gt;
&lt;li&gt;but use sub-views of UIButton etc to make thins much easier&lt;/li&gt;
&lt;li&gt;see slides for nice example of adding UIResponder and UIGestureRecognizer&lt;/li&gt;
&lt;li&gt;use the delegate pattern to send feedback from your view to the rest of your app&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-1482801913807971710?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/epIqfO3dhidqj8EmmRv_klvdY70/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/epIqfO3dhidqj8EmmRv_klvdY70/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/epIqfO3dhidqj8EmmRv_klvdY70/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/epIqfO3dhidqj8EmmRv_klvdY70/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=rw0DwDTNDaY:WYBJ_Ikv-kE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=rw0DwDTNDaY:WYBJ_Ikv-kE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=rw0DwDTNDaY:WYBJ_Ikv-kE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=rw0DwDTNDaY:WYBJ_Ikv-kE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/rw0DwDTNDaY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/1482801913807971710/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=1482801913807971710" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1482801913807971710?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/1482801913807971710?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/rw0DwDTNDaY/iosdev-uk-building-custom-controls-with.html" title="iOSDev UK: Building Custom Controls with UIView" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-building-custom-controls-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMR30yeip7ImA9WhdWFE0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-8881364867991854929</id><published>2011-09-07T15:51:00.001+01:00</published><updated>2011-09-07T15:51:26.392+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T15:51:26.392+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nslog" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="xcode" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><category scheme="http://www.blogger.com/atom/ns#" term="instruments" /><title>iOSDev UK: Beyond NSLog</title><content type="html">&lt;p&gt;&lt;em&gt;&lt;a href="http://www.timisted.net/"&gt;Tim Isted&lt;/a&gt;, &lt;a href="https://twitter.com/timisted"&gt;@timisted&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h3 id="nslogxcodeandgdb"&gt;NSLog, XCode and gdb&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;useful macros for logging:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__FILE__&lt;/code&gt; (full path)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__LINE__&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__FUNCTION__&lt;/code&gt; (and &lt;code&gt;__PRETTY_FUNCTION__&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NSStringFromSelector(_cmd)&lt;/code&gt; gives you current message
&lt;ul&gt;
&lt;li&gt;Lots of these useful NSString functions, e.g. &lt;code&gt;NSStringFromCGRect&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;use macros in log define
&lt;ul&gt;
&lt;li&gt;non-debug version should be something like: &lt;code&gt;
TILog(...) do {} while (0)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;XCode preferences &gt; Behaviours
&lt;ul&gt;
&lt;li&gt;Run starts &amp;#8212; can choose what displays&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;XCode also has a variables view, hidden in the next pane of the debugger&lt;/li&gt;
&lt;li&gt;add breakpoints for exceptions or non-source code by using little plus button at bottom of breakpoints pane&lt;/li&gt;
&lt;li&gt;breakpoints have &lt;strong&gt;really useful&lt;/strong&gt; options
&lt;ul&gt;
&lt;li&gt;log to console on hit (with auto hit count)&lt;/li&gt;
&lt;li&gt;continue automatically&lt;/li&gt;
&lt;li&gt;only do stuff on conditions&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;gdb commands:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;s&lt;/code&gt; = &lt;code&gt;step&lt;/code&gt; = Step In&lt;/li&gt;
&lt;li&gt;&lt;code&gt;m&lt;/code&gt; = Step Over&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c&lt;/code&gt; = Continue&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p&lt;/code&gt; = Print&lt;/li&gt;
&lt;li&gt;&lt;code&gt;po&lt;/code&gt; = Print Object&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;debugging Core Data: use &lt;code&gt;[self valueForKey:@"propertyName"]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;can use addresses instead of variable names in &lt;code&gt;po&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;can make breakpoints user-specific instead of project-specific&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="instruments"&gt;Instruments&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Time Profiler &amp;#8212; great for catching infinite loops!
&lt;ul&gt;
&lt;li&gt;shows you time spent at certain places in call stack&lt;/li&gt;
&lt;li&gt;tick the &amp;#8220;Show Obj-C Only&amp;#8221; checkbox&lt;/li&gt;
&lt;li&gt;look for purple user symbols!&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Heap Shot tool find leaks&lt;/li&gt;
&lt;li&gt;quite a few WWDC videos on Instruments&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-8881364867991854929?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X7-UqjqYOyN1u2Y9pAF44p4O8m4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X7-UqjqYOyN1u2Y9pAF44p4O8m4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X7-UqjqYOyN1u2Y9pAF44p4O8m4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X7-UqjqYOyN1u2Y9pAF44p4O8m4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=as4VwmOQJpo:RIngp2lcCvE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=as4VwmOQJpo:RIngp2lcCvE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=as4VwmOQJpo:RIngp2lcCvE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=as4VwmOQJpo:RIngp2lcCvE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/as4VwmOQJpo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/8881364867991854929/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=8881364867991854929" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8881364867991854929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/8881364867991854929?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/as4VwmOQJpo/iosdev-uk-beyond-nslog.html" title="iOSDev UK: Beyond NSLog" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-beyond-nslog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYEQ3k_eCp7ImA9WhdWFE0.&quot;"><id>tag:blogger.com,1999:blog-6382212051821902995.post-6041485095596350789</id><published>2011-09-07T14:40:00.001+01:00</published><updated>2011-09-07T14:45:02.740+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T14:45:02.740+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="augmented_reality" /><category scheme="http://www.blogger.com/atom/ns#" term="sensors" /><category scheme="http://www.blogger.com/atom/ns#" term="iosdevuk" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="objective-c" /><title>iOSDev UK: Programming iOS Sensors</title><content type="html">&lt;p&gt;&lt;em&gt;Alasdair Allan, Babilim Light Industries&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://programmingiphonesensors.com/"&gt;http://programmingiphonesensors.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3 id="magnetometeritsnotadigitalcompass"&gt;Magnetometer (it&amp;#8217;s not a digital compass!)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;4th gen iPod Touch doesn&amp;#8217;t have magnetometer
&lt;ul&gt;
&lt;li&gt;so no outside AR apps without markers&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;UIAccelerometer API newly deprecated for CoreMotion in iOS5&lt;/li&gt;
&lt;li&gt;if you want compass heading but not location, then just start up [locationManager startUpdatingHeading]
&lt;ul&gt;
&lt;li&gt;you won&amp;#8217;t get location updates warning&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;however, magnetic north varies across the world
&lt;ul&gt;
&lt;li&gt;there&amp;#8217;s a big lookup table in the iPhone that can translate the magnetic heading into true north&lt;/li&gt;
&lt;li&gt;so you need actual location to work this out&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;watch out for device orientation: magnetometer always reports heading pointing out of top of device
&lt;ul&gt;
&lt;li&gt;need to rotate according to device orientation&amp;#8230;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;local magnetic anomalies cause a fluctuating magnetic field &amp;#8212; which is when it tells you to wave your device around&lt;/li&gt;
&lt;li&gt;Earth&amp;#8217;s magnetic pole is a quadrapole, not a bipole &amp;#8212; it swaps over every now and then and the north pole goes south&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="gyroscopeaccelerometercoremotion"&gt;Gyroscope &amp;#38; Accelerometer (CoreMotion)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;iPhone 4 has more bits in its accelerometer sampler&lt;/li&gt;
&lt;li&gt;combining gyroscope and accelerometer provides very accurate device attitude&lt;/li&gt;
&lt;li&gt;if there&amp;#8217;s no natural timer in your app, then you may have to use the push API
&lt;ul&gt;
&lt;li&gt;otherwise much easier to use pull API&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CMMotionManager&lt;/code&gt; should be treated as a singleton (but API allows you to create multiples&amp;#8230;)&lt;/li&gt;
&lt;li&gt;monitoring does take a lot of CPU, so remember to stop it when you&amp;#8217;re finished
&lt;ul&gt;
&lt;li&gt;device motion at 100 samples/sec uses 65% of iPhone 4 CPU&lt;/li&gt;
&lt;li&gt;see &amp;#8220;Pushing Device Motion&amp;#8221; slide&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;you can fetch a frame of reference and then work out attitude relative to that&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="artoolkits"&gt;AR Toolkits&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Marker based:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.artoolworks.com"&gt;ARToolKit for iOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.qualcomm.com/develop/mobile-technologies/augmented-reality"&gt;Qualcomm AR Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Location-aware
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dopanic.com/ar/"&gt;doPanic Toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ARView &amp;#8212; available from &lt;a href="http://programmingiphonesensors.com/masterclass/theclass.html"&gt;Programming iOS Sensors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id="externalaccessories"&gt;External accessories&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Arduino for iPhone!!!!
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.makershed.com/ProductDetails.asp?ProductCode=MSRP02"&gt;Redpark Breakout Pack for iPhone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;been going through Made for iPhone accreditation for the last 3 years&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6382212051821902995-6041485095596350789?l=blog.cohen-rose.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xj9Yj_L-I4NgL2eUqvxNG1kDT_k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xj9Yj_L-I4NgL2eUqvxNG1kDT_k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xj9Yj_L-I4NgL2eUqvxNG1kDT_k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xj9Yj_L-I4NgL2eUqvxNG1kDT_k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=i2R3syGwbGI:K2i77MdzP2E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=i2R3syGwbGI:K2i77MdzP2E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?i=i2R3syGwbGI:K2i77MdzP2E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/AdamCohenRose?a=i2R3syGwbGI:K2i77MdzP2E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/AdamCohenRose?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/AdamCohenRose/~4/i2R3syGwbGI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.cohen-rose.org/feeds/6041485095596350789/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6382212051821902995&amp;postID=6041485095596350789" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/6041485095596350789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6382212051821902995/posts/default/6041485095596350789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/AdamCohenRose/~3/i2R3syGwbGI/iosdev-uk-programming-ios-sensors.html" title="iOSDev UK: Programming iOS Sensors" /><author><name>Adam Cohen-Rose</name><uri>http://www.blogger.com/profile/12286496556944495325</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://3.bp.blogspot.com/_r_kzp2nFX7Q/SZKx6CymI9I/AAAAAAAAAFU/0UYt6JPdQUs/S220/IMG_4830_2.JPG" /></author><thr:total>0</thr:total><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><feedburner:origLink>http://blog.cohen-rose.org/2011/09/iosdev-uk-programming-ios-sensors.html</feedburner:origLink></entry></feed>

