<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-13957257</id><updated>2008-07-09T09:51:07.346+01:00</updated><title type='text'>Finger Tips - a fistful of handy web notes</title><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/index.php'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default?start-index=26&amp;max-results=25'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-13957257.post-6902683037049247569</id><published>2008-07-09T09:08:00.003+01:00</published><updated>2008-07-09T09:18:54.364+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><title type='text'>Starting MySQL on Leopard</title><content type='html'>&lt;p&gt;For many, many months I have been seeking a website called "Angry Fly" and in particular the &lt;a href="http://www.angry-fly.com/index.cfm/2007/10/26/Fix-for-MySQL-on-Leopard"&gt;Fix for MySQL on Leopard&lt;/a&gt; page. It offered a quick and easy way for me to get MySQL started up on my Mac OS X 10.5 aka Leopard MacBook Pro. Worked ok on Tiger, but Leopard seems to be a bit more fussy.&lt;/p&gt;
&lt;p&gt;I have just noticed a new comment today by Chris St.Germain.&lt;/p&gt;
&lt;p&gt;&amp;quot;a new preference pane has been released from mySQL that actually works now! The file is:
&lt;a href="ftp://ftp.mysql.com/pub/mysql/download/gui-tools/MySQL.prefPane-leopardfix.zip"&gt;ftp://ftp.mysql.com/pub/mysql/download/gui-tools/MySQL.prefPane-leopardfix.zip&lt;/a&gt; &amp;quot;&lt;/p&gt;
&lt;p&gt;This has made my day, a &lt;em&gt;working&lt;/em&gt; MySQL preference pane in system preferences! Whoppee!&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2008/07/starting-mysql-on-leopard.html' title='Starting MySQL on Leopard'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=6902683037049247569' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/6902683037049247569'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/6902683037049247569'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-330173593684234986</id><published>2007-12-12T11:06:00.000Z</published><updated>2007-12-12T12:28:47.036Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><title type='text'>Leopard on Rails</title><content type='html'>&lt;p&gt;So, Apple Mac OS X Leopard comes pre-installed with Ruby on Rails. I am currently running 10.5.1, but till now haven't even played with RoR on the spotty cat, till now...&lt;/p&gt;
&lt;p&gt;Found a great post,  &lt;a href="http://www.kolonay.com/2007/10/ruby-on-rails-and-leopard-n00bs-view.html"&gt;Ruby on Rails on Leopard: A N00b's view&lt;/a&gt;. This was just what the doctor ordered. I hadn't installed the X Code tools, so did that and pretty much followed Jeremy's example.&lt;/p&gt;
&lt;p&gt;I did get one problem, when running the sudo gem update --include-dependencies, I got an error message: ERROR: While executing gem … (OpenURI::HTTPError). Googled it, and found this &lt;a href="http://www.digitalsanctum.com/2007/11/07/installing-mongrel-on-ubuntu-error-while-executing-gem-openurihttperror/"&gt;post&lt;/a&gt;, which suggested trying the command again, which I did.&lt;/p&gt;
&lt;p&gt;Like Jeremy I navigated to an old Ruby project directory, typed: "script/server start" and then pointed my browser to 0.0.0.0:3000 and got the default "Welcome on board" welcome. Great stuff, now for &lt;a href="http://www.ifingers.com/tips/labels/mysql.html"&gt;MySQL&lt;/a&gt;...&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/12/leopard-on-rails.html' title='Leopard on Rails'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=330173593684234986' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/330173593684234986'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/330173593684234986'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-3886731551271953830</id><published>2007-11-22T18:46:00.000Z</published><updated>2007-11-22T18:55:57.206Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='typography'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>How to Size Text in CSS</title><content type='html'>&lt;p&gt;Their may be an end in sight to the hard-fought web typography battle between designers and users, thanks to Richard Rutter and his A List Apart article - &lt;a href="http://www.alistapart.com/articles/howtosizetextincss"&gt;How to Size Text in CSS&lt;/a&gt;.&lt;/p&gt;

Peace.</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/11/how-to-size-text-in-css.html' title='How to Size Text in CSS'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=3886731551271953830' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3886731551271953830'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3886731551271953830'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-417266583939097947</id><published>2007-11-21T18:53:00.000Z</published><updated>2007-11-21T19:44:03.797Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='fingers'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Phone Fingers - no relation</title><content type='html'>&lt;img src="http://www.ifingers.com/i/phone-fingers.jpg" alt="Phone Fingers" /&gt;
&lt;p&gt;Great for burglars and iPhone users. These handy, finger sized receptacles will keep unwanted fingerprints and smudges off  anything you touch.&lt;/p&gt;
&lt;p&gt;I haven't actually tried Phone Fingers, as I do quite like the feel of naked skin on glass. Not every one is an iPhone naturist though, and I am sure they will be of real benefit when it's cold.&lt;/p&gt;
&lt;h3&gt;Give someone the finger this Christmas&lt;/h3&gt;
&lt;p&gt;I think with Christmas approaching, these would make an ideal present. And lets face it, it's not everyday one gets the opportunity to give someone the finger&amp;hellip;&lt;/p&gt;
&lt;p&gt;Disclaimer: Unfortunately, I didn't design these, and I am in no way related to the &lt;a href="http://www.phonefingers.com/"&gt;Phone Fingers&lt;/a&gt; corporation.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/11/phone-fingers-no-relation.html' title='Phone Fingers - no relation'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=417266583939097947' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/417266583939097947'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/417266583939097947'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-3668835358544339626</id><published>2007-11-15T14:22:00.000Z</published><updated>2007-11-15T17:05:34.511Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Future Of Mobile</title><content type='html'>&lt;img src="http://farm3.static.flickr.com/2359/2033360127_656a280455.jpg" alt="Future Of Mobile" width="430" height="323" /&gt;
&lt;p&gt;&amp;quot;What do Apple know about mobile phones anyway?&amp;quot; were the parting words of my mobile phone supplier as I told him that I wanted to move from him to 02 and the Apple iPhone. A good question and one that I hoped would be answered at yesterdays inaugural &lt;a href="http://www.future-of-mobile.com/"&gt;Future of Mobile&lt;/a&gt; event at London's iMax theatre.&lt;/p&gt;
&lt;p&gt;Looking through the schedule just before the event, I had a horrible thought that maybe I had been duped by the hype of the iPhone, and maybe I should have saved my money. Maybe I should have waited for my Vodafone contract to expire, ditched the &lt;a href="http://www.ipresents.co.uk/tech/2006/10/blackberry-8700v.html"&gt;BlackBerry&lt;/a&gt; and got an Android from Google and the Open Handheld Alliance?&lt;/p&gt;
&lt;h3&gt;Meet Android&lt;/h3&gt;
&lt;p&gt;Google's Dave Burke gave a great demonstration of the open source coding of Android, which is expected to appear in the second half of '08. Built on Linux, the Android shows a lot of promise, but the emulator didn't match anything that my iPhone can do. I know it's early days, and by its open source nature should allow for some innovative features, when the SDK is released along with the first Android phones next year. Don't get me wrong, I fully approve and support the OHA initiative, but as many speakers pointed out the mobile industry is huge, so there is plenty of room for new devices.&lt;/p&gt;
&lt;h3&gt;Apple iPhone Fanboy Convention&lt;/h3&gt;
&lt;p&gt;The MC of the F.O.M was &lt;a href="http://blueflavor.com/pages/about/bios/brian_fling/"&gt;Brian Fling&lt;/a&gt;. A self confessed Apple fanboy but also the author of the &lt;a href="http://dotmobi.typepad.com/dotmobi/2007/03/dotmobi_mobile_.html"&gt;.mobi developers guide&lt;/a&gt;, so I am pretty confident that he knows a thing or two about this thing called mobile. He gave a great talk on how the iPhone will change the mobile space, along with a demonstration of his &lt;a href="http://getleaflets.com/"&gt;Leaflets&lt;/a&gt; iPhone app.&lt;/p&gt;
&lt;p&gt;Brian and the other speakers of the event all said great things about the iPhone. Even speakers from Vodafone and Sony Ericsson praised it. Sure it is not perfect, the built in camera is nowhere near as good as my Nikon D70 ;-) but it is a lot slimmer and portable. It is locked to just one operator - O2 in the UK, and you can't take the battery out like I can with my BlackBerry when it goes tits up.&lt;/p&gt;
&lt;h3&gt;Show Notes&lt;/h3&gt;
&lt;p&gt;This was one of the first events where I left my laptop at home. Figuring I could get by with my shiny new iPhone and my trusty &lt;a href="http://www.moleskine.co.uk/"&gt;Moleskine&lt;/a&gt;. My Moleskine has never crashed or got a virus, but I came a cropper to it's one weak link - the pen. My pen had run out of ink!&lt;/p&gt;
&lt;p&gt;Cursing the fact that I had left my MacBook Pro at home, I tried out the notes feature of my iPhone. I am still getting used to typing on it, but as the day went on, my respect and love of the iPhone just grew and grew. On the way home I listened to the built in iPod, which fades out nicely when someone calls. It then hit me, what do Apple know about making phones -  a lot! In a market where Nokia, Sony-Erricson, Samsung, and all the others throw hundreds of different devices at us. It seems the only innovation is the colour, Motorola's pink phone being one of the major innovations of the last couple of years.&lt;/p&gt;
&lt;p&gt;Brian attended a mobile conference a couple of years ago. He came away with a list of conclusions and thoughts that a "Mobile 2.0" device should address or include.&lt;/p&gt;

&lt;img src="http://farm3.static.flickr.com/2180/2033427861_40050121b0.jpg" alt="Mobile 2.0" width="430" height="323" /&gt;

&lt;p&gt;2 years later, the iPhone ticks off nearly all the points from the list and also adds others that no one apart from Apple had even dreamed of!&lt;/p&gt;
&lt;h3&gt;A Smart phone for the masses&lt;/h3&gt;
&lt;img src="http://farm3.static.flickr.com/2234/2033430999_a10e43ea73.jpg" width="430" height="323" alt="iPhone Uniqueness" /&gt;
&lt;p&gt;It is unique. A beautiful design that works for 3 and 93 year olds. It is not perfect, far from it, for a start it doesn't come in pink, but I believe Brian is correct, it is the smartphone for the masses. It's not cheap, but neither is my computer, tv or car. I don't mind paying for good design, you can keep your free phones, thanks.&lt;/p&gt;
&lt;p&gt;Yes, I am glad I attended the first Future of Mobile, and just as glad I got the first iPhone.&lt;/p&gt;
&lt;h3&gt;Future of Mobile Notes&lt;/h3&gt;
&lt;p&gt;Apparently Carsonified will publish the slides from F.O.M at a later date. Until then check out my &lt;a href="http://www.flickr.com/photos/ipresents/sets/72157603194282415/"&gt;pics from the Future Of Mobile&lt;/a&gt; (taken on the iPhone), and here are my notes, as typed into my iPhone...&lt;/p&gt;
&lt;p&gt;09:00 How are people using mobile today?
Brian Fling Blue Flavor
One fifth of people have mobile web
LBS
Location based services&lt;/p&gt;
&lt;p&gt;09:10 Keynote: Tuning into mobile culture
Tony Fish AMF Ventures
Convergence is an out dated idea
We are now creators
The screen of life started with cinema, tv, of
Mobile is a creator and consumer
You are the author and the audience
Mashups
Digital footprint
Why are google keen to make Android?
How can others get value from your content?
Focus on uniqueness
Metadata is king&lt;/p&gt;
&lt;p&gt;09:55 Cracking the code: developing for mobile devices
Luca Passani Ad Mob
XHTml advanced - eg background image of block elements
Simple XHTML&lt;/p&gt;
&lt;p&gt;11:30 Panel discussion: Will content be King on Mobile?
Steve Page, Guillaume Peersman, Prashant Agarwal
Submit sitemap to google &amp; yahoo
Google use a nokia user agent&lt;/p&gt;
&lt;p&gt;13:30 The Future of Mobile Browsers
Charles McCathieNeville, Opera&lt;/p&gt;
&lt;p&gt;13:00 beyond WAP: Advanced browsing , Mobile AJAX, and the future of the Web
Daniel Appelquist, Vodafone
Check out dojo Ajax
Soonr
Facebook on iphone
Deb.mobi&lt;/p&gt;
&lt;p&gt;14:00 How the iPhone will change the mobile space
Brian Fling, Blue Flavor
Web 2.0&lt;/p&gt;
&lt;p&gt;15:00 Android &amp; the OHA
Dave Burke, Google&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/11/future-of-mobile.html' title='Future Of Mobile'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=3668835358544339626' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3668835358544339626'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3668835358544339626'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-7783028712576611581</id><published>2007-07-30T16:26:00.000+01:00</published><updated>2007-07-30T16:40:29.954+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='safari'/><title type='text'>XRAY cross browser web inspector</title><content type='html'>&lt;p&gt;The &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Firefox Web Developer extension&lt;/a&gt; is a must-have extension for any web developer. Yet, this developer is a bit of a Safari freak. Till a couple of minutes ago, I was torn between both browsers. Safari is not perfect, but I prefer it to Firefox and with the addition of the Free, &lt;a href="http://westciv.com/xray/"&gt;XRAY&lt;/a&gt; bookmark applet I am extremely happy. Sure I still need Firefox, just for checking web browser issues, but Safari does pretty much everything I want now.&lt;/p&gt;

&lt;p&gt;Thanks, once again, to Mr &lt;a href="http://www.zeldman.com/2007/07/30/web-design-development-iphone-ipod-links/"&gt;Zeldman&lt;/a&gt;, for the heads up!&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/xray-cross-browser-web-inspector.html' title='XRAY cross browser web inspector'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=7783028712576611581' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/7783028712576611581'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/7783028712576611581'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-875292543735270737</id><published>2007-07-30T09:38:00.000+01:00</published><updated>2007-07-30T10:11:39.121+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>New Array on the Block</title><content type='html'>&lt;p&gt;&lt;strong&gt;An Array is a container, which holds values in an &lt;em&gt;ordered&lt;/em&gt; fashion.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;(If you're using Mac OS X open up Terminal and type irb, then hit enter, to play along at home)&lt;/p&gt;


&lt;h3&gt;How to create a an Array&lt;/h3&gt;

&lt;p&gt;my_array = [&amp;apos;Ferrari&amp;apos;, &amp;apos;McLaren&amp;apos;, &amp;apos;Williams&amp;apos;]&lt;/p&gt;

&lt;h3&gt;Get the value of an Array element&lt;/h3&gt;

&lt;p&gt;my_array[0]&lt;/p&gt;
&lt;p&gt;Will return, "Ferrari"&lt;/p&gt;
&lt;p&gt;my_array[1]&lt;/p&gt;
&lt;p&gt;Will return, "McLaren"&lt;/p&gt;
&lt;p&gt;my_array[2]&lt;/p&gt;
&lt;p&gt;Will return, "Williams"&lt;/p&gt;
&lt;p&gt;my_array.first&lt;/p&gt;
&lt;p&gt;Will return, "Ferrari"&lt;/p&gt;
&lt;p&gt;my_array.last&lt;/p&gt;
&lt;p&gt;Will return, "Williams"&lt;/p&gt;


&lt;h3&gt;Arrays on the Block&lt;/h3&gt;

&lt;p&gt;A Block can loop through things. i.e:&lt;/p&gt;

&lt;p&gt;my_array.each do |an_element| &lt;br /&gt;
 puts an_element &lt;br /&gt;
 end&lt;/p&gt;

&lt;p&gt;Returns:&lt;br /&gt;
&lt;br /&gt;
Ferrari&lt;br /&gt;
McLaren&lt;br /&gt;
Williams&lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Second Block Example&lt;/h3&gt;
&lt;p&gt;my_array.each {|an_element| puts an_element}&lt;/p&gt;
&lt;p&gt;Returns:&lt;br /&gt;
&lt;br /&gt;
Ferrari&lt;br /&gt;
McLaren&lt;br /&gt;
Williams&lt;br /&gt;&lt;/p&gt;

&lt;h3&gt;Block example with index&lt;/h3&gt;
&lt;p&gt;my_array.each_with_index do |an_element, index|&lt;br /&gt;
 puts &amp;quot;#{an_element} is number: #{index}&amp;quot;&lt;br /&gt;
 end&lt;/p&gt;

&lt;p&gt;Returns:&lt;br /&gt;
 &lt;br /&gt;
 Ferrari is number: 0&lt;br /&gt;
 McLaren is number: 1&lt;br /&gt;
 Williams is number: 2&lt;br /&gt;&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/new-array-on-block.html' title='New Array on the Block'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=875292543735270737' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/875292543735270737'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/875292543735270737'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-1253080321220140016</id><published>2007-07-30T07:20:00.000+01:00</published><updated>2007-07-30T08:43:18.030+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>A fast dash with the Ruby Hash</title><content type='html'>&lt;p&gt;A Hash or Hash Table as it is sometimes called is used throughout Ruby and Ruby on Rails development. A Hash is a data structure that can hold keys and values. Similar to an array, but not ordered.&lt;/p&gt;

&lt;p&gt;(If you're using Mac OS X open up Terminal and type irb, then hit enter, to play along at home)&lt;/p&gt;


&lt;h3&gt;How to create a Hash&lt;/h3&gt;

&lt;p&gt;my_hash = {:car =&amp;gt; &amp;quot;McLaren&amp;quot;, :driver =&amp;gt; &amp;quot;Fernando Alonso&amp;quot;, :engine =&amp;gt; &amp;quot;Mercedes-Benz&amp;quot;}&lt;/p&gt;

&lt;h3&gt;Get the value of a key&lt;/h3&gt;

&lt;p&gt;my_hash[:driver]&lt;/p&gt;
&lt;p&gt;Will return, "Fernando Alonso"&lt;/p&gt;

&lt;h3&gt;Set a new value for a key&lt;/h3&gt;

&lt;p&gt;my_hash[:driver] = "Lewis Hamilton"&lt;/p&gt;

&lt;h3&gt;Return the Hash&lt;/h3&gt;

&lt;p&gt;my_hash&lt;/p&gt;

&lt;p&gt;Will return:&lt;/p&gt;

&lt;p&gt;{:car =&amp;gt; &amp;quot;McLaren&amp;quot;, :driver =&amp;gt; &amp;quot;Lewis Hamilton&amp;quot;, :engine =&amp;gt; &amp;quot;Mercedes-Benz&amp;quot;}&lt;/p&gt;

&lt;h3&gt;Add a new key value pair to the hash&lt;/h3&gt;

&lt;p&gt;my_hash[:tyres] = "Bridgestone Potenza"&lt;/p&gt;

&lt;h3&gt;Return the Hash&lt;/h3&gt;

&lt;p&gt;my_hash&lt;/p&gt;

&lt;p&gt;Will return:&lt;/p&gt;

&lt;p&gt;{:car =&amp;gt; &amp;quot;McLaren&amp;quot;, :driver =&amp;gt; &amp;quot;Lewis Hamilton&amp;quot;, :engine =&amp;gt; &amp;quot;Mercedes-Benz&amp;quot;, :tyres =&amp;gt; &amp;quot;Bridgestone Potenza&amp;quot;}&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/fast-dash-with-ruby-hash.html' title='A fast dash with the Ruby Hash'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=1253080321220140016' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/1253080321220140016'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/1253080321220140016'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-8257330575077470901</id><published>2007-07-29T16:51:00.001+01:00</published><updated>2007-07-29T16:53:19.269+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='textmate'/><title type='text'>Scratching with PeepCode</title><content type='html'>&lt;p&gt;&lt;strong&gt;My quest for knowledge about this mysterious and elusive &lt;a href="http://www.ifingers.com/tips/2007/07/ruby-ruby-ruby.html"&gt;Ruby&lt;/a&gt; and her Rails friends, has led me to bookshops, online movie libraries, &lt;a href="http://www.ifingers.com/tips/2007/07/railscasts-free-ruby-on-rails.html"&gt;Railscasts&lt;/a&gt; and has resulted in a fair bit of Googling.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;PeepCode&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://peepcode.com/"&gt;PeepCode&lt;/a&gt; is a set of movies, which do help shed light on Ruby on Rails, TextMate and other groovy stuff. Well recorded, and packed with juicy goodness, which makes them strangely addictive. PeepCode is another great tool for learning. The Ruby on Rails from Scratch series are particularly brilliant. Best of all they have some free examples, which will give you a good idea, if PeepCode is for you.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/scratching-with-peepcode.html' title='Scratching with PeepCode'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=8257330575077470901' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/8257330575077470901'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/8257330575077470901'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-8575148745742280593</id><published>2007-07-29T13:51:00.000+01:00</published><updated>2007-07-29T15:38:16.648+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xhtml'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='textmate'/><title type='text'>TextMate shortcuts for noobies</title><content type='html'>&lt;p&gt;I have been using &lt;a href="http://macromates.com/"&gt;TextMate&lt;/a&gt; as my text/html/rails editing for a week or two now. It has largely replaced BBEdit, and for the most part I am extremely happy that I switched. I have been struggling with a few aspects of TextMate though. For example, if I used the bundle to insert a &amp;lt;br /&amp;gt; tag. (Keyboard Shortcut: ctrl + return), I got a &amp;lt;br&amp;gt; tag, not ideal when working on an xhtml file.&lt;/p&gt;
&lt;h3&gt;Setting up TextMate&lt;/h3&gt;
&lt;p&gt;This is easily fixed though thanks to Soryu's excellent &lt;a href="http://projects.serenity.de/textmate/tutorials/setup/"&gt;TextMate Setup Tutorial&lt;/a&gt;&lt;/p&gt;

&amp;quot; The most important one for anyone who uses HTML will be TM_XHTML. Setting it to / will make all the HTML Bundle Snippets insert correct XHTML by closing single tags like &amp;lt;hr /&amp;gt; and &amp;lt;img /&amp;gt; &amp;quot;

&lt;h3&gt;TextMate Basics&lt;/h3&gt;
&lt;p&gt;Soryu has also written a &lt;a href="http://projects.serenity.de/textmate/tutorials/basics/"&gt;TextMate Basics Tutorial&lt;/a&gt;, which is just the ticket for TextMate noobs like my self.&lt;/p&gt;

&lt;h3&gt;Cheating with TextMate&lt;/h3&gt;
&lt;p&gt;G Design's &lt;a href="http://www.g-design.net/textmate.pdf"&gt;TextMate Cheat Sheet&lt;/a&gt; is a welcome addition to any TextMate users interior decor, or if like me your wife feels that pasting key commands on your walls spoils the interior design. Then why not put this &lt;a href="http://www.wishingline.com/notebook/archives/2007_01.php#001122"&gt;Cheatsheet&lt;/a&gt; on your desktop instead.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/textmate-shortcuts-for-noobies.html' title='TextMate shortcuts for noobies'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=8575148745742280593' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/8575148745742280593'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/8575148745742280593'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-9152981326038349056</id><published>2007-07-28T15:52:00.000+01:00</published><updated>2007-07-28T16:06:21.418+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Ruby on Rails Pluralize Tool</title><content type='html'>&lt;p&gt;Came across a great tool to find out the correct pluralization for Ruby on Rails apps. Check out Geoffrey Grosenbach's &lt;a href="http://nubyonrails.com/tools/pluralize/"&gt;Pluralization Tester&lt;/a&gt;. Which will give you the correct pluralizations for your RoR models, controllers and database tables.&lt;/p&gt;
&lt;h3&gt;Octopussy&lt;/h3&gt;
&lt;p&gt;For example, if you wanted to build a web app to hold your collection of stuffed octopi. You could load in &lt;a href="http://nubyonrails.com/tools/pluralize/octopus"&gt;octopus&lt;/a&gt; to Geoffrey's tester and will get a table showing the right names for each object.&lt;/p&gt;
&lt;p&gt;This is extremely useful for a Ruby on Rails noobie like me. Nice one Geoffrey!&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/ruby-on-rails-pluralize-tool.html' title='Ruby on Rails Pluralize Tool'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=9152981326038349056' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/9152981326038349056'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/9152981326038349056'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-2961661795292636738</id><published>2007-07-28T11:31:00.000+01:00</published><updated>2007-07-28T13:50:12.232+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Rails params</title><content type='html'>&lt;p&gt;Working with PHP, I developed a fondness for using the URL as a means of querying my MySQL database. Often using the $_POST and $_GET commands to retrieve the names and values from the URL's query string. With Ruby on Rails we use the params method.&lt;/p&gt;
&lt;h3&gt;params&lt;/h3&gt;
&lt;p&gt;I have just had the pleasure of watching the Rails from Scratch Pt1 movie from &lt;a href="http://peepcode.com/"&gt;PeepCode&lt;/a&gt;. They have a good section in the movie describing params, and how we can use it to create a hash to pass data to the view.&lt;/p&gt;
&lt;p&gt;Rails by convention uses the following path in it's URL path:&lt;br /&gt;
 /:controller/:action/:id&lt;/p&gt;
&lt;p&gt;This makes it very easy to create links either dynamically or with static queries, and we have the params method which we can use to grab stuff from the URL query string. Here are some examples which can be pasted into a :controller and then the results will be magically available in your view.&lt;/p&gt;
&lt;code&gt;
#place this in your controller which sets the id from the URL into the @message_from_params instance variable

@message_from_params = params[:id]
&lt;/code&gt;
&lt;p&gt;Then place the @message_from_params instance variable in your view:&lt;/p&gt;

&lt;code&gt;&lt;%= @message_from_params %&gt;&lt;/code&gt;

&lt;p&gt;So with a url of /machines/index/1, the message from params would be: 1. &lt;br /&gt;
Yet, Rails is clever enough to accept strings as well. So, /machines/index/1-Robots, we would get 1-Robots.
&lt;br /&gt;Get the idea? If not check out the PeepCode!&lt;/p&gt;
&lt;h3&gt;Grabbing Query Strings&lt;/h3&gt;
&lt;p&gt;So if we have a query string like this: /machines/index/robots?name=R2D2. We could then create an instance variable in our Machines Controller like this:&lt;/p&gt;
&lt;code&gt;
@name = params[:name]
&lt;/code&gt;
&lt;p&gt;Then place something like this in our view: &lt;code&gt;Name: &lt;%= @name %&gt;&lt;/code&gt; and your web browser will return: &amp;quot;Name: R2D2&amp;quot;.&lt;/p&gt;
&lt;h3&gt;Use params, NOT @params&lt;/h3&gt;
&lt;p&gt;According to the people that should know, it is important to avoid calling @params, as this is now deprecated. &lt;a href="http://weblog.rubyonrails.org/2006/4/25/use-params-not-params"&gt;Learn More&lt;/a&gt;.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/rails-params.html' title='Rails params'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=2961661795292636738' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/2961661795292636738'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/2961661795292636738'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-7751077218299236914</id><published>2007-07-27T14:53:00.000+01:00</published><updated>2007-07-27T15:38:59.564+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='user interface'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Fingers and thumbs on the iPhone</title><content type='html'>&lt;p&gt;I am itching to get my iFingers on the Apple iPhone. I can't wait, but will have to till Apple release it in Blighty. I am also keen to start developing web pages for the iPhone too, which is a lot of fun, according to &lt;a href="http://www.deltatangobravo.com/authors/dburka"&gt;Daniel Burka&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Digg on an iPhone&lt;/h3&gt;
&lt;p&gt;Daniel helped design a special part of Digg, custom made for the iPhone - &lt;a href="http://digg.com/iphone"&gt;digg.com/iphone&lt;/a&gt;. Not only that, he has kindly shared his thoughts on the design process - &lt;a href="http://www.deltatangobravo.com/archives/2007/july/idigg"&gt;Digg on an iPhone&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Honkin' Fat Finger&lt;/h3&gt;
&lt;p&gt;&amp;quot;Even more fun is developing specifically for the user input quirks of the iPhone. When your primary input device is a honkin' fat finger, it changes the way you think about links and buttons. Everything's got to be bigger... way bigger. The yellow digg box and Digg It button are about twice as large on the iPhone as on the normal website. I also made the clickable area of the Digg It button even larger than the button itself so if you click on the edge of it, you'll still get a press. You also have to make sure buttons aren't too close together so that you don't mash one when you intend to hit the other.&amp;quot;&lt;/p&gt;
&lt;h3&gt;No relation&lt;/h3&gt;
&lt;p&gt;No, Honkin' Fat Finger is no relation to me, but until I can get my iFingers on the iPhone, this is about as close as I will get to experiencing it.&lt;/p&gt;
&lt;h3&gt;A touch too much&lt;/h3&gt;
&lt;p&gt;Apple have created a site for &lt;a href="http://www.ifingers.com/tips/2007/07/apple-iphone-web-development.html"&gt;iPhone web development&lt;/a&gt; too, which is worth touching on too.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/fingers-and-thumbs-on-iphone.html' title='Fingers and thumbs on the iPhone'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=7751077218299236914' title='1 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/7751077218299236914'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/7751077218299236914'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-3735716884174357119</id><published>2007-07-27T14:23:00.000+01:00</published><updated>2007-07-27T14:48:53.220+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>Railscasts - free Ruby on Rails screencasts</title><content type='html'>&lt;p&gt;In my ongoing quest to master &lt;a href="http://www.ifingers.com/tips/2007/07/ruby-ruby-ruby.html"&gt;Ruby on Rails&lt;/a&gt;, I found another great resource to augment my limited knowledge - &lt;a href="http://railscasts.com/"&gt;Railscasts.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thrice weekly, &lt;a href="http://workingwithrails.com/person/6491-ryan-bates"&gt;Ryan Bates&lt;/a&gt; hosts a new podcast focused on a small aspect of Ruby on Rails. Short and sweet these Railcasts are a fantastic way to get to grips with Ruby on Rails, either by just watching them all, or to answer and help solve specific problems.&lt;/p&gt;

&lt;p&gt;Highly recommended.&lt;/p&gt;

&lt;p&gt;I discovered Railscasts from the &lt;a href="http://railsforum.com/"&gt;Rails Forum&lt;/a&gt;, so I thought it would be a good idea to mention this too, so, there you have it.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/railscasts-free-ruby-on-rails.html' title='Railscasts - free Ruby on Rails screencasts'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=3735716884174357119' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3735716884174357119'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3735716884174357119'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-3360175201697160372</id><published>2007-07-25T09:02:00.000+01:00</published><updated>2007-07-25T09:18:07.597+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Ruby on Rails Beginners Tip Sheet</title><content type='html'>If, like me, you are getting up to speed with &lt;a href="http://www.ifingers.com/tips/2007/07/ruby-ruby-ruby.html"&gt;Ruby on Rails&lt;/a&gt;. I am sure you are doing everything you can to reinforce your learning. I am a bit of a slow learner, but am gradually coming to terms with Rails, with the help of video tutorials, .pdfs and the internet. I fell upon the &lt;a href="http://wiki.rubyonrails.org/rails/pages/TipSheetForBeginners"&gt;Tip Sheet for Beginners&lt;/a&gt; from the &lt;a href="http://wiki.rubyonrails.org/"&gt;Rails Wiki&lt;/a&gt;. The Tip Sheet is a useful tool for helping to remember the core concepts of Ruby on Rails.</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/ruby-on-rails-beginners-tip-sheet.html' title='Ruby on Rails Beginners Tip Sheet'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=3360175201697160372' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3360175201697160372'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/3360175201697160372'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-1869412004466281239</id><published>2007-07-23T10:19:00.000+01:00</published><updated>2007-07-23T21:05:53.228+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVNx Subversion Mac OSX'/><title type='text'>Subversion Perversions</title><content type='html'>I normally work alone. Creating a web project from start to finish in a completely self-contained manner. If I make a mistake, then it's &lt;em&gt;my&lt;/em&gt; problem. However, I am just starting a new project, with another developer. So already my previous working model is out of sync, it &lt;em&gt;should&lt;/em&gt; read, "&lt;em&gt;we&lt;/em&gt; are starting a project". See the difference? Our project is also my first &lt;a href="http://www.ifingers.com/tips/2007/07/ruby-ruby-ruby.html"&gt;Ruby on Rails&lt;/a&gt; Web App, so it is vital that my noobie mistakes don't rock our team boat too greatly. Already even the way I approach the venture is different. My iron fist needs to unclench and open up like a lotus flower to welcome my new collaborator warmly. So that our sparks of creativity, will flow freely and easily. We need to allow a creative exchange that allows us both to express ourselves in harmony.  So, how do we do it, how can we create and manage this collaborative utopia?

&lt;img src="http://www.ifingers.com/i/Hands_of_God_and_Adam.jpg" alt="Hands of God and Adam" /&gt;

&lt;h3&gt;Subversion&lt;/h3&gt;
Well in the first example of the benefits of working as a team, my co-worker suggested we use Subversion, a magical "time machine" to harness and direct our creativity without damping or stifling our efforts. Once set up, Subversion will be the conduit that tracks and controls our work. Allowing me to make mistakes, but then swap back to any previous untainted revision. If I had a bad day on Tuesday, I can start again from Monday's version.

&lt;h3&gt;Subversion Concepts&lt;/h3&gt;
What follows are some notes, that I have scavenged from the online Subversion Manual. Just pointers to the concepts and terminology used by the open source version control system, that will hopefully help lead me safely in my first tentative steps with Subversion. If you too are just starting out with Subversion, I hope you find them useful, but be warned, I have no real idea where this is going to take me. So if you are feeling brave, floor your Delorean and brace yourself as we hit the critical 88mph.

&lt;h3&gt;Subversion, the book&lt;/h3&gt;
I am getting to grips with Subversion using the &lt;a href="http://svnbook.red-bean.com/"&gt;online book.&lt;/a&gt;. So, my first suggestion is to download it and get reading. Seems like a good place to start.

&lt;h3&gt;The Repositry&lt;/h3&gt;
This is the hub of the project, this is the databank where all your work is deposited and maintained. Files are checked in and out of here. Kept magicaly in sync by Subversion

&lt;h3&gt;Check out&lt;/h3&gt;
This is process of grabbing a set of files from your central Repositry and "checking them out" to your local working copy. i.e:

&lt;code&gt;
$ svn &lt;strong&gt;checkout&lt;/strong&gt; http://svn.example.com/repos/calc
&lt;/code&gt;

&lt;h3&gt;Commit/ Checking in&lt;/h3&gt;
The act of publishing your changes is known as committing (or checking in) changes to the repository. i.e:

&lt;code&gt;
$ svn &lt;strong&gt;commit&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;button.c -m "Fixed a typo in button.c."&lt;/code&gt;&lt;br /&gt;

&lt;h3&gt;Update&lt;/h3&gt;
So how does my partner, update their working copy with my changes? By using the "update" command, they can update their working copy to the same state as my last commit.

&lt;code&gt;$ svn &lt;strong&gt;update&lt;/strong&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;U button.c &lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Updated to revision 57.&lt;/code&gt;&lt;br /&gt;

&lt;h3&gt;Revisions&lt;/h3&gt;
&lt;strong&gt;From the manual:&lt;/strong&gt;
"An svn commit operation publishes changes to any number of files and directories as a single atomic transaction. In your working copy, you can change files' contents, create, delete, re-name and copy files and directories, and then commit a complete set of changes as an atomic transaction. 

By 'atomic transaction', we mean simply this: &lt;strong&gt;either all of the changes happen in the repository, or none of them happen&lt;/strong&gt;."

&lt;strong&gt;And:&lt;/strong&gt;

"Each time the repository accepts a commit, this creates a new state of the filesystem tree, called a revision. Each revision is assigned a unique natural number, one greater than the number of the previous revision. The initial revision of a freshly created repository is numbered zero, and consists of nothing but an empty root directory."

&lt;h3&gt;The Four States&lt;/h3&gt;
By talking to the repository, Subversion can tell which of the following four states a working file is in: 
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Unchanged, and current&lt;/strong&gt;
The file is unchanged in the working directory, and no changes to that file have been committed to the repository since its working revision. An svn commit of the file will do nothing, and an svn update of the file will do nothing.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locally changed, and current&lt;/strong&gt;
The file has been changed in the working directory, and no changes to that file have been committed to the repository since you last updated. There are local changes that have not been committed to the repository, thus an svn commit of the file will succeed in publishing your changes, and an svn update of the file will do nothing.
&lt;/li&gt; 
&lt;li&gt;
&lt;strong&gt;Unchanged, and out-of-date&lt;/strong&gt;
The file has not been changed in the working directory, but it has been changed in the repository. The file should eventually be updated, to make it current with the latest public revision. An svn commit of the file will do nothing, and an svn update of the file will fold the latest changes into your working copy.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locally changed, and out-of-date&lt;/strong&gt;
The file has been changed both in the working directory, and in the repository. An svn commit of the file will fail with an “out-of-date” error. The file should be updated first; an svn update command will attempt to merge the public changes with the local changes. If Subversion can't complete the merge in a plausible way automatically, it leaves it to the user to resolve the conflict.
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Getting Data into your Repository&lt;/h3&gt;
From the manual: "There are two ways to get new files into your Subversion repository: svn import and svn add."

&lt;h3&gt;Import&lt;/h3&gt;
"The svn import command is a quick way to copy an unversioned tree of files into a repository, creating intermediate directories as necessary. svn import doesn't require a working copy, and your files are immediately committed to the repository. This is typically used when you have an existing tree of files that you want to begin tracking in your Subversion repository. For example:"

&lt;code&gt;
$ svnadmin create /usr/local/svn/newrepos 
$ svn import mytree file:///usr/local/svn/newrepos/some/project \
&lt;/code&gt;

&lt;strong&gt;Note&lt;/strong&gt; that after the import is finished, the original tree &lt;em&gt;is not&lt;/em&gt; converted into a working copy. &lt;em&gt;To start working, you still need to svn checkout a fresh working copy of the tree&lt;/em&gt;.

&lt;h3&gt;Recommended Repositry Layout&lt;/h3&gt;
It is recommend that one creates a:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;trunk directory&lt;/strong&gt; to hold the 'main line' of development.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;branches directory&lt;/strong&gt; to contain branch copies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tags&lt;/strong&gt; directory to contain tag copies.&lt;/li&gt;
&lt;/ol&gt;

example: &lt;br /&gt;

&lt;code&gt;$ svn list file:///usr/local/svn/repos &lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/trunk &lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/branches &lt;/code&gt;&lt;br /&gt;
&lt;code&gt;/tags &lt;/code&gt;&lt;br /&gt;


&lt;h3&gt;Important Note&lt;/h3&gt;
This looks like being an important point to bear in mind:
"You must tell Subversion about everything else that you do. For example, if you want to copy or move an item in a 
working copy, you should use svn copy or svn move instead of the copy and move commands provided by your operating system."

&lt;h3&gt;Basic Work Cycle&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Update your working copy
&lt;code&gt;
svn update
&lt;/code&gt;
&lt;/li&gt;Make changes
&lt;code&gt;
svn add
svn delete 
svn copy 
svn move
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Examine your changes 
&lt;code&gt;
svn status 
svn diff
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Possibly undo some changes 
&lt;code&gt;
svn revert
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resolve Conflicts (Merge Others' Changes) 
&lt;code&gt;
svn update 
svn resolved
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Commit your changes 
&lt;code&gt;
svn commit
&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Status&lt;/h3&gt;
Apparently the most frequently used Subversion command is &lt;strong&gt;status&lt;/strong&gt;:

"svn status will give you all the information you need regarding what has changed in your working copy-without accessing the repository or potentially incorporating new changes published by other users."

When you run the command, you get a list of the changes, and each line is given a letter to denote the state of the change:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A&lt;/strong&gt; - The file, directory, or symbolic link item has been scheduled for addition into the repository. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt; - The file item is in a state of conflict. That is, changes received from the server during an update overlap with local changes that you have in your working copy. You must resolve this conflict before committing your changes to the repository.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D&lt;/strong&gt; - The file, directory, or symbolic link item has been scheduled for deletion from the repository.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;M&lt;/strong&gt; - The contents of the file item have been modified.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Dealing with Conflicts&lt;/h3&gt;

Do &lt;em&gt;one&lt;/em&gt; of three things: 
&lt;ol&gt;
&lt;li&gt;Merge the conflicted text 'by hand' (by examining and editing the conflict markers within the file).&lt;/li&gt;
&lt;li&gt;Copy one of the temporary files on top of your working file.&lt;/li&gt;
&lt;li&gt;Run svn revert &lt;filename&gt; to throw away all of your local changes.&lt;/li&gt;
&lt;/ol&gt;

Once resolved, let Subversion know by running &lt;code&gt;svn resolved&lt;/code&gt;

&lt;h3&gt;Commit Your Changes&lt;/h3&gt;
Finally! Your edits are finished, you've merged all changes from the server, and you're ready to commit your changes to the repository.

The svn commit command sends all of your changes to the repository. When you commit a change, you need to supply a log message, describing your change. Your log message will be attached to the new revision you create. If your log message is brief, you may wish to supply it on the command line using the --message (or -m) switch: 
&lt;code&gt;
$ svn commit -m "Corrected number of cheese slices." 
Sending sandwich.txt 
Transmitting file data . 
Committed revision 3.
&lt;/code&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
The above concepts all come from the online manual, and now I understand a little of the theory, I am ready to practice Subversion. As I develop on a Mac, I decided my first task is to download a copy of &lt;a href="http://www.apple.com/downloads/macosx/development_tools/svnx.html"&gt;SVNx&lt;/a&gt;, which is Subversion with a GUI, and built for Mac OS X.

I'll post back with my experience of using SVNx at a later time.</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/subversion-perversions.html' title='Subversion Perversions'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=1869412004466281239' title='2 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/1869412004466281239'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/1869412004466281239'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-7030750525119591479</id><published>2007-07-20T11:50:00.000+01:00</published><updated>2007-07-25T09:23:07.705+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='dry'/><category scheme='http://www.blogger.com/atom/ns#' term='rubyonrails'/><title type='text'>Ruby, Ruby, Ruby, Ruby</title><content type='html'>&lt;img src="http://www.ifingers.com/i/rails.png" /&gt;&lt;br /&gt;

No, I am not going to explore the lyrics of the Kaiser Chiefs latest sing-a-long. Instead I am going to explore something that is more RoR, than Rock and Roll. I have for the last week or so been exploring Ruby on Rails. Chances are you are already developing on it. 

But, if you too are thinking about building your own Rails web apps, here are some useful resources to getting to know Ruby on Rails.

&lt;h3&gt;RubyonRails.org&lt;/h3&gt;
The 'Mecca' for all Rails freaks. Ruby on Rails was created by &lt;a href="http://www.loudthinking.com/about.html"&gt;David Heinemeier Hansson&lt;/a&gt;, from 37 Signals. Rails was created in 2004, and was built using Ruby, an open-source scripting language, created by &lt;a href="http://www.ruby-lang.org/en/about/"&gt;Yukihiro "matz" Matsumoto&lt;/a&gt;, from Japan and released in 1995. (Mental Note: Must get a longer name for myself!) The Ruby on Rails site is a natural place to start, when delving into this constrained but natural platform.
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://corelib.rubyonrails.org/"&gt;Ruby on Rails Core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://api.rubyonrails.org/"&gt;Ruby on Rails API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://wiki.rubyonrails.org/"&gt;Ruby on Rails Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://groups.google.com/group/rubyonrails-talk"&gt;Ruby on Rails Talk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Ruby, Tie me up.&lt;/h3&gt;
The idea of constraints might be a little offputting, but in practice, I am finding these "guides" and conventions extremely useful. It only just occured to me what the "Rails" moniker means, well I haven't confirmed this yet, but &lt;em&gt;to me&lt;/em&gt; it can be taken literally. Your application benefits, just like the mythical Ruby train as it steams out of the Ruby station from these fixed tracks. Without the rails, the Ruby engine could lose it's way, plough through a bunch of html pedestrians or flatten the litte MySQL kid playing with his select statements.

Conventions and constraints are what has made Rails my new scripting platform. Sure, I know enough PHP to do some damage, but the structured platform and conventions, makes it very powerful and surprisingly natural.

&lt;h3&gt;Learning Ruby on Rails&lt;/h3&gt;
&lt;a href="http://www.rubyonrails.org/docs"&gt;http://www.rubyonrails.org/docs&lt;/a&gt; will point you in the right direction, in your quest to become a master of Ruby and it's dominatrix, Rails. I really had a lot of fun learning Ruby with help from the poignant, &lt;a href="http://poignantguide.net/ruby/"&gt;cartoon foxes&lt;/a&gt;. 

Have purchased the pdfs of &lt;a href="http://www.pragmaticprogrammer.com/titles/rails/index.html"&gt;Agile web development with Rails&lt;/a&gt; and when I get my act together will have a few Gordon Ramsay like &lt;a href="http://pragmaticprogrammer.com/titles/fr_rr/"&gt;Rails Recipes&lt;/a&gt; that I can serve up to my visitors.

&lt;h3&gt;Ruby on Rails Video Learning&lt;/h3&gt;
I am a subscriber to the VTC movie learning who have a good Rails title and also have spent the last few days learning RoR with my new Guru, &lt;a href="https://movielibrary.lynda.com/authors/author/?aid=104"&gt;Kevin Skoglund&lt;/a&gt;, and his fantastic Rails video, &lt;a href="http://movielibrary.lynda.com/html/modPage.asp?ID=324"&gt;Ruby on Rails Essential Training&lt;/a&gt; from Lynda.com.

&lt;h3&gt;Anyway, I'll leave you with the following Ruby workout:&lt;/h3&gt;

&lt;p&gt;Repeat this phrase 100 times on your blackboard/aurally/mentally.&lt;/p&gt;

&lt;p&gt;
"&lt;a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself"&gt;Don't Repeat Yourself&lt;/a&gt;&lt;br /&gt;
Don't Repeat Yourself&lt;br /&gt;
Don't Repeat Yourself&lt;br /&gt;
Don't Repeat Yourself&lt;br /&gt;
Don't Repeat Yourself&lt;br /&gt;
Don't Repeat Yourself&lt;br /&gt;
Don't Repeat Yourself&lt;br /&gt;"...
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hang on a minute, "Ruby, am I missing the point here?"&lt;/strong&gt;&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/ruby-ruby-ruby.html' title='Ruby, Ruby, Ruby, Ruby'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=7030750525119591479' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/7030750525119591479'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/7030750525119591479'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-5930738924544102615</id><published>2007-07-11T19:42:00.000+01:00</published><updated>2007-12-12T12:26:16.821Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='10.4.9'/><title type='text'>MySQL on Mac OS X Tiger</title><content type='html'>I have been toying with the idea of starting to develop using Ruby on Rails. To begin with, I knew I had the ordeal of installing MySQL on my MacBook Pro. Well, I assumed it would be a bit of a 'mare...

&lt;h3&gt;So, Where do I start?&lt;/h3&gt;

Anyone who has had any experience of Mac OS X and MySQL will have heard of Marc Liyanage. Marc has published fabulous Mac friendly &lt;a href="http://www.entropy.ch/software/MacOSx/mysql/"&gt;MySQL Binaries&lt;/a&gt; for a few years now So that's where I headed for first.

However, Marc no longer builds these binaries, "the people at MySQL started to provide very nice official binary packages".

So I trundled along and downloaded the &lt;a href="http://dev.mysql.com/downloads/mysql/4.1.html"&gt;Mac OS X 10.4 (x86) Package&lt;/a&gt;. 

I double clicked everything on the disk image, but couldn't see the database server from my old copy of the superb &lt;a href="http://cocoamysql.sourceforge.net/"&gt;CocoaMySQL&lt;/a&gt;, so I grabbed a new copy.

&lt;h3&gt;I also paid special attention to Marc's important statement:&lt;/h3&gt;

" You should at least run this command in order to secure the open master account in the default installation:"

&lt;pre&gt;&lt;code&gt;/usr/local/mysql/bin/mysqladmin -u root password new_password_here&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Well it was the &lt;em&gt;least&lt;/em&gt; I could do! But wait, there is more:&lt;/h3&gt;

"In recent distributions of MySQL, you can also run the script &lt;pre&gt;&lt;code&gt;mysql_secure_installation&lt;/code&gt;&lt;/pre&gt; instead of just changing the root password."

You know what? I typed that in, restarted my Mac OS X 10.4.9, and presto, I could connect to my shiny new MySQL database server.

Job Done, next stop Ruby on Rails...

&lt;h3&gt;Erm, don't try this home&lt;/h3&gt;
The above is in &lt;em&gt;no way&lt;/em&gt; any kind of proof-read, tried and tested tutorial. It's just a virtual piece of string, so that I can remember how to do it next time.</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/mysql-on-mac-os-x-tiger.html' title='MySQL on Mac OS X Tiger'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=5930738924544102615' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/5930738924544102615'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/5930738924544102615'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-4093806795328627101</id><published>2007-07-05T14:08:00.000+01:00</published><updated>2007-07-05T14:47:16.360+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='web apps'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Apple iPhone web development</title><content type='html'>&lt;p&gt;With much fanfare, the Apple iPhone is finally available to buy (in the USA). This much anticipated gadget is expected to sell like hot cakes, so Apple have published a &lt;a href="http://developer.apple.com/iphone/"&gt;guide&lt;/a&gt; to Optimizing Web Applications and Content for iPhone.&lt;/p&gt;
&lt;p&gt;Apple says, &amp;quot; Safari on iPhone uses the same Web Kit engine as Safari on the computer desktop. With the Safari Web Kit engine, you can develop sophisticated Web 2.0 sites and applications that will impress and delight iPhone users. To design a web application that shines on iPhone and ensures a great user experience, you'll want to:&amp;quot;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Understand the capabilities of iPhone.&lt;/li&gt;
&lt;li&gt;Follow established design practices for the web.&lt;/li&gt;
&lt;li&gt;Adopt iPhone-specific design principles.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;Time will tell how successful the iPhone is. Will it have the revolutionary effect of the iPod? I think so.&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/apple-iphone-web-development.html' title='Apple iPhone web development'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=4093806795328627101' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/4093806795328627101'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/4093806795328627101'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-4319572846973155367</id><published>2007-07-05T13:29:00.000+01:00</published><updated>2007-07-05T13:58:01.786+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Get the last record from mysql using php</title><content type='html'>&lt;p&gt;While developing a new web app, I found a nice little php function that will get the record number of the last inserted record.&lt;/p&gt;
&lt;p&gt;The manual states that mysql_insert_id will, "Get the ID generated from the previous INSERT operation", and in my experience, it does exactly what it says on the tin.&lt;/p&gt;
&lt;h3&gt;mysql_insert_id Examples&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());

 printf("View Last inserted record id %d\n", mysql_insert_id());
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Get the last id&lt;/h3&gt;

&lt;pre&gt;&lt;code&gt;

$last_id = mysql_insert_id(); 

&lt;/code&gt;&lt;/pre&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/07/get-last-record-from-mysql-using-php.html' title='Get the last record from mysql using php'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=4319572846973155367' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/4319572846973155367'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/4319572846973155367'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-8476760073911065755</id><published>2007-06-26T15:44:00.000+01:00</published><updated>2007-06-26T16:02:09.490+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css html microformats'/><title type='text'>Styling Attributes</title><content type='html'>&lt;p&gt;Styling web pages with CSS is never easy, but I found a way of styling attributes of tags. Very useful if you start dabbling with &lt;a href="http://microformats.org/"&gt;microformats&lt;/a&gt; or just want to style specific links in a certain way.&lt;/p&gt;
&lt;h3&gt;Examples&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;
a[rel="tag"] { color: #F00; }
a[href="http://ifingers.com"] {color: #FFF; background-color: #00F; }
&lt;/code&gt;&lt;/pre&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/06/styling-attributes.html' title='Styling Attributes'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=8476760073911065755' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/8476760073911065755'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/8476760073911065755'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-6992988115440975737</id><published>2007-06-13T10:38:00.000+01:00</published><updated>2007-06-13T10:42:45.351+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='css3'/><category scheme='http://www.blogger.com/atom/ns#' term='atmedia'/><category scheme='http://www.blogger.com/atom/ns#' term='acid2'/><title type='text'>One Web Acid2 and CSS3  by Hakon Wium Lie</title><content type='html'>&lt;h4&gt;CTO, Opera Software&lt;/h4&gt;
&lt;p&gt;howcome  AT opera.com&lt;/p&gt;

&lt;h3&gt;First Part - One Web&lt;/h3&gt;

&lt;p&gt;WAP being an example of bad practice. The web should evolve.&lt;/p&gt;

&lt;h3&gt;Opera Web Devices&lt;/h3&gt;

&lt;p&gt;Started in 1995. Opera for Desktop for Windows. Then in 2000 Opera for Mobile - good for Opera. Opera for Devices - in the past 12 months.&lt;/p&gt;

&lt;p&gt;Example is the Wii. Opera is the default Wii browser. A sharing experience, changing the web. One code base for all devices.&lt;/p&gt;

&lt;p&gt;The $100 dollar laptop. Cheap machine, not for public. Think less, less, less, so a child can use it. Small keys for kids. Opera is perfect for it.&lt;/p&gt;

&lt;p&gt;Similar to the Wii, no hardrive, wi-fi, mesh networking.

&lt;br /&gt;Foundation - One laptop per child.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;mini.opera.com&lt;/strong&gt; - mini is different. Small java app, abou 100k. Proxy server fetches data, compresses it to binary. Opera mini enables good surfing app. Free.&lt;/p&gt;

&lt;h3&gt;specifications&lt;/h3&gt;

&lt;p&gt;HTML5&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WHAT WG and W3C&lt;/li&gt;
&lt;li&gt;the &lt;video&gt; element&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CSS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSS 2.1&lt;/li&gt;
&lt;li&gt;CSS3 Values and Unites&lt;/li&gt;
&lt;li&gt;CSS3 page units&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Video on the web today&lt;/h3&gt;

&lt;h4&gt;Obscure video coding. Video should be made a first class web citizen.&lt;/h4&gt;

&lt;p&gt;2 problems:&lt;/p&gt;

&lt;p&gt;part 1 - the markup ie &lt;video&gt;&lt;/p&gt;

&lt;p&gt;part2 - video format&lt;/p&gt;

&lt;p&gt;Right way of encoding. Most video formats are proprietory. Open standard for video.&lt;/p&gt;

&lt;p&gt;Ogg Theora video is open format - similar to png, used by wiki.&lt;/p&gt;

&lt;h3&gt;Ogg Theora&lt;/h3&gt;

&lt;p&gt;Cousin of Ogg Vorbis from xiph.org
generator - ffmpeg2theora&lt;/p&gt;

&lt;h3&gt;CSS&lt;/h3&gt;
&lt;p&gt;CSS 10 years old. Hakon worked with Tim Berners Lee at SERN. Hakon proposed CSS.&lt;/p&gt;

&lt;p&gt;shows css zen garden as an example.&lt;/p&gt;

&lt;h3&gt;CSS3&lt;/h3&gt;

&lt;p&gt;CSS3 has been split into 30 modules. Work in progress.&lt;/p&gt;

&lt;h3&gt;Media Queries&lt;/h3&gt;

&lt;p&gt;Handheld modes is an example of a media query. Media Types include presentation mode - projector.&lt;/p&gt;

&lt;p&gt;@media handheld and (max-width; 300px)&lt;/p&gt;


&lt;h3&gt;Multi column Layout&lt;/h3&gt;

&lt;p&gt;True multi column layout. - Mozilla implememnted it now. Scales images and adds columns depending on the size of the screen.&lt;/p&gt;

&lt;h4&gt;CSS3 Multi column Layout&lt;/h4&gt;

&lt;p&gt;define number and width of columns&lt;/p&gt;

&lt;p&gt;body {&lt;br /&gt;
 column-width: 14em;&lt;br /&gt;
 column-count: 3&lt;br /&gt;
 columns&lt;/p&gt;
 
 
&lt;p&gt;Great for CSS for professional printing.&lt;/p&gt;

&lt;p&gt;CSS3 Paged Media - crop marks, multi columns, footnotes, floating elements such as images to the bottom of a page&lt;/p&gt;

&lt;p&gt;example&lt;/p&gt;

&lt;p&gt;Headers and Footers&lt;/p&gt;

&lt;p&gt;title { string-set: header content }&lt;br /&gt;
@page&lt;/p&gt;

&lt;p&gt;Page Floats&lt;br /&gt;
div.figure { float: bottom page }&lt;/p&gt;

&lt;p&gt;Cascading Style Sheets - Designing for the web - third edition. Used html and css to print the actual book. Using printsxml&lt;/p&gt;

&lt;h3&gt;A book microformat - boom!&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;set of class names:&lt;/li&gt;
&lt;li&gt;titlepage&lt;/li&gt;
&lt;li&gt;table of contents&lt;/li&gt;
&lt;li&gt;preface&lt;/li&gt;
&lt;li&gt;chapter&lt;/li&gt;
&lt;li&gt;appendix&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;semantics - borrows names from DocBook.&lt;/p&gt;

&lt;h4&gt;Web fonts&lt;/h4&gt;
&lt;p&gt;Hopefully in the next 12 months... could be wrong...&lt;/p&gt;

&lt;h4&gt;Microsoft's core fonts&lt;/h4&gt;
&lt;p&gt;Andale Mono Arial Comic Sans MS Courier New Georgia&lt;/p&gt;

&lt;p&gt;web fonts introduced css2 in 1998. Supported by Microsoft and Netscape.&lt;br /&gt;
No support for truetype&lt;/p&gt;

&lt;p&gt;i.e.&lt;br /&gt;
@ import url (http://www.&lt;/p&gt;

&lt;h3&gt;Acid2&lt;/h3&gt;

&lt;p&gt;Acid2 was made to show if IE was valid or not. Acid1 tested for box model. Safari was first to get it right. Firfox 3 will pass Acid2 in 07. Microsoft IE7 still does not pass the Acid2 test.&lt;/p&gt;

&lt;h3&gt;Web Applications&lt;/h3&gt;

&lt;p&gt;Use web standards for web applications - contrary to Jeremys presentation! Opera have developed Opera Widgets. Almost 1000 widgets available.&lt;/p&gt;

&lt;h3&gt;Google Gears&lt;/h3&gt;
&lt;p&gt;A API framwork for javascript, adding sql database to the browser. Store data off and online. Off-line access to web pages. &lt;strong&gt;More robust operations!&lt;/strong&gt;&lt;/p&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/06/one-web-acid2-and-css3-by-hakon-wium.html' title='One Web Acid2 and CSS3  by Hakon Wium Lie'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=6992988115440975737' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/6992988115440975737'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/6992988115440975737'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-5435559889327758643</id><published>2007-06-12T13:50:00.000+01:00</published><updated>2007-06-12T13:55:08.180+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atmedia'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='flickr'/><category scheme='http://www.blogger.com/atom/ns#' term='moleskine'/><title type='text'>How to be a creative sponge - John Hicks</title><content type='html'>&lt;p&gt;
Hicksdesign, based in Witney outside Oxford.
&lt;br /&gt;
Famous for Firefox and Thunderbird Logos
&lt;/p&gt;

&lt;p&gt;How do you do it? How do you get te ideas to actually design something?&lt;/p&gt;

&lt;p&gt;Lots of parts of the design process - colour, grids.

&lt;p&gt;"Designers need to be visual leeches, constantly cataloguing and recording information - Jason Santa Maria&lt;/p&gt;
&lt;h3&gt;Creative Sponges - collect creative juices&lt;/h3&gt;
&lt;h3&gt;The 3 stages of the creative sponge&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Collect&lt;/li&gt;
&lt;li&gt;Catalog&lt;/li&gt;
&lt;li&gt;Create&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Collect&lt;/h3&gt;
&lt;p&gt;Everything you collect is relevant to the design progress&lt;br /&gt;

Observe life, how does the light reflect off the walls?&lt;/p&gt;
&lt;ul&gt;

&lt;li&gt;Collect Books&lt;/li&gt;

&lt;li&gt;Penguin books - a design classic, good typeography - cheap!&lt;/li&gt;

&lt;li&gt;Collect Magazines - weekend supplements - good ideas for quotes, headers and side boxes, typography.&lt;/li&gt;

&lt;li&gt;Found Typography - Take pictures of signs&lt;/li&gt;

&lt;li&gt;Stuff off the internet - very easy to drag and drop&lt;/li&gt;

&lt;li&gt;Print and Pattern blog, johnsons thought of the day&lt;/li&gt;

&lt;li&gt;Veer - good for type - try the flont&lt;/li&gt;

&lt;li&gt;Freebies - Sign up for mailinglists - T26, Burbank&lt;/li&gt;

&lt;li&gt;T Shirts - threadless t shirts, great t shirts, colour schemes&lt;/li&gt;

&lt;li&gt;Leaflet Racks - oooh, lol they are the designers buffet lol take everything, one of each, take even the bad ones.&lt;/li&gt;

&lt;li&gt;Clothing labels and tags&lt;/li&gt;

&lt;li&gt;Packaging - breakfast cereal boxes - dorset cereals - american typewriter&lt;/li&gt;

&lt;li&gt;Photos that go wrong: Photos using other objects - take photos through a beer glass&lt;/li&gt;

&lt;li&gt;Doodles from you head - let out the stuff in your head&lt;/li&gt;

&lt;li&gt;But, don't collect websites! Approach doesn't work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Catalog&lt;/h3&gt;

&lt;p&gt;"Designers are magpies..."&lt;br /&gt;

The good old sketchbook - use Moleskine, and letraset, writing notes is as important as images&lt;/p&gt;
&lt;p&gt;John Hicks used to spurn Moleskine but now actively uses landscape Moleskine Reporter notebooks. These have great paper, and fit nicely between you and your computer keyboard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binders&lt;/li&gt;
&lt;li&gt;Box files&lt;/li&gt;
&lt;li&gt;Not an easy way to get it out again&lt;/li&gt;
&lt;li&gt;John Hicks uses iPhoto. Create hierarchical Scrapbook Folders&lt;/li&gt;
&lt;li&gt;Yojimbo - takes everything&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;The "killer app" for the web creative sponge: flickr&lt;/h3&gt;

&lt;p&gt;For the first time peoples personal collections are being shared, great groups - Pictograms and Pucblic Space Typeography&lt;/p&gt;

&lt;h3&gt;Create&lt;/h3&gt;

&lt;p&gt;Peter Blake, famous for the sergeant pepper album - goes to markets, buys objects nad rearranges them.&lt;/p&gt;

&lt;p&gt;The Fear : blank white paper&lt;/p&gt;

&lt;p&gt;The process of collecting can stimulate&lt;/p&gt;

&lt;h3&gt;Creative Cataysets&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deadlines!&lt;/li&gt;
&lt;li&gt;Change of environment - walk/drive&lt;/li&gt;
&lt;li&gt;Go to bed!&lt;/li&gt;
&lt;li&gt;Peace and quiet (go for a wee)&lt;/li&gt;
&lt;li&gt;Take a shower - hot water stimulates the brain&lt;/li&gt;
&lt;li&gt;Mind Mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Critique it!&lt;/h3&gt;

&lt;p&gt;Shows example of the London 2012 Olympics - and Daily Mail readers versions - any better?&lt;br /&gt;
Mood Boards are your friend!&lt;br /&gt;
Create a British Theme - not the empire and stuff. Italian Job, Mr Ben, Coldstream Guards, Sgt Pepper Album - look for common elements eg Red.&lt;br /&gt;
Someone else would do it and get a totally different mood board&lt;br /&gt;

&lt;h3&gt;Advantages of mood boards&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Concentrates on the concept/mood&lt;/li&gt;
&lt;li&gt;Stimulates concersation&lt;/li&gt;
&lt;li&gt;Quick&lt;/li&gt;
&lt;li&gt;Clients can make their own&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Design Patterns&lt;/h3&gt;

&lt;p&gt;Patterns are optimal - collect design patterns - check out tab design patterns on flickr&lt;/p&gt;

&lt;h3&gt;Sample colors&lt;/h3&gt;

&lt;p&gt;Dodgy phtotos can create color patterns&lt;/p&gt;


&lt;h3&gt;Finally a couple of examples&lt;/h3&gt;

&lt;p&gt;Open Doors student site - slanted text, copied colors&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Soak up everything, you never know when you are going to need it"&lt;/strong&gt;
&lt;br /&gt;- John Hicks&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://hicksdesign.co.uk/journal/be-a-creative-sponge"&gt;http://hicksdesign.co.uk/journal/be-a-creative-sponge&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://del.icious.us/jonhicks/sponge"&gt;http://del.icious.us/jonhicks/sponge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/06/how-to-be-creative-sponge-john-hicks.html' title='How to be a creative sponge - John Hicks'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=5435559889327758643' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/5435559889327758643'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/5435559889327758643'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-6749409682506522896</id><published>2007-06-08T00:29:00.000+01:00</published><updated>2007-06-08T00:35:48.311+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='atmedia web'/><title type='text'>High Performance Web Sites by Nate Koechley</title><content type='html'>&lt;h3&gt;One dozen rules for faster pages&lt;/h3&gt;

1. Share results of our research in t

Yahoo is firml committed to openness 

&lt;h3&gt;Why talk about performance?&lt;/h3&gt;

In the last 2 years, we do a lot more with web pages.

Steve Souders - High Performance 

Two Performance Flavors:

Response Time and System Efficiency

The importance of front end performance!!!
 95% is front end.
 
 Back0end vs. Front-end
 
 Until now we haveon
 
 1 Perception - How fast does it feel to the users?
 
 Perceived response time
 
 It's in the eye of the beholder
 
 2 80% of consequences 
 
 Yahoo Interface Blog
 yuiblog.com
 
 3 Cache
 
 Sadly the cache doesn't work as well as it should
 
 40-60% of users still have an empty cache
 
 Therefore optimize for no-cache and with cache
 
 4 Cookies
 
 Set scope correctly
 
 Keep sizes low, 80ms delay with cookies
 
 Total cookie size - Amazon 60 bytes - good example.
 
 1. Eliminate unnecessary cookies
 2. Keep cookie sizes low
 3. 
 
 5 Parallel Downloads
 
 &lt;h2&gt;One Dozen Rules&lt;/h2&gt;
 Rule 1 - Make fewer HTTP requests
 
 css sprites alistapart.com/articles/sprites
 
 Combine Scripts, Combined Stylesheets
 
Rule 2 - Use a CDN
amazon.com - Akamai
Distribute your static content beofre distributing content

Rule 3 Add an Expires Header
Not just for images
images, stylesheets and scripts


Rule 4: Gzip Components
You can addect users download times
90% of browsers support compression

Gzip compresses more than deflate

Gzip: not just for HTML

for gzip scripts, 

Free YUI Hosting includes 
Aggregated files
w

Rule 5: Put CSS at the top

stsylesheets

use &lt; link &gt; not @import!!!!!

Slower, but perceived loading time is faster

Rule 6; Move scripts to the bottom of th te page

scripts block rendering

what about defer? - no good

Rule 7: Avoid CSS Expressions

Rule 8: Make JS and CSS External

Inline: bigger HTML but no hhtp request
External: cachable but extra http

Except for a users "home page"

Post-Onload Download

Dynamic Inlining

Rule 9: Reduce DNS Lookups
Best practice: Max 2-4 hosts
Use keep-alive

Rule 10: Minify Javascript

Take out white space, 

Two popular choices - Dojo is a better compressor but JSMin is less error prone.
minify is safer than obstifacation

Rule 11: Avoid redirects

Redirects are worst form of blocking

Redirects - Amazon have none!

Rule 12: Tuen off ETags


&lt;h3&gt;Case Studies&lt;/h3&gt;

Yahoo
1 Moved JS to onload
2 removed redirects 

50% faster

What about performance and Web 2.0 apps?

Client-side CPU is more of an issue
User expectations are higher
start off on the right foot - care!

Live Analysis

IBM Page Detailer - windows only


Fasterfox - measures load time of pages

LiveHTTPHeaders firefox extension

Firebug - Recommended!

YSlow to be released soon.

&lt;h3&gt;Conclusion&lt;/h3&gt;

Focus on the front end
harvest the low hanging fruit
reduce http requests

&lt;h3&gt;Links&lt;/h3&gt;
nate.koechley.com/blog
nate.koechley.com/talks/2007/atmedia-london</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/06/high-performance-web-sites-by-nate.html' title='High Performance Web Sites by Nate Koechley'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=6749409682506522896' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/6749409682506522896'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/6749409682506522896'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry><entry><id>tag:blogger.com,1999:blog-13957257.post-4092253590661137779</id><published>2007-06-07T23:06:00.000+01:00</published><updated>2007-06-08T00:19:09.113+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='london'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='atmedia07'/><title type='text'>Beyond AJAX by Jesse James Garrett Notes</title><content type='html'>&lt;h3&gt;Jesse James Garrett  from Adaptive Path&lt;/h3&gt;
&lt;p&gt;Notes made at @media07, Islington, London&lt;/p&gt;

&lt;h4&gt;Their work:&lt;/h4&gt;

Flickr, Creative Commons

The elements of user experience - check it out

book also available.

jig.net - visual vocabulary

Blog - comes from one of founders of adaptive path

Jesse coined the word - "AJAX".

Web 2.0 - need bright coloured logo - lol

&lt;h3&gt;What is the web good for (or at)?&lt;/h3&gt;

Example, early TV, modeled on Radio, and Live theatre. As tv evolved, in the mid 1950's there was a flowering of activity and innovation.

10 years on the evolution of the web, similar flowering.

&lt;h3&gt;It'a a big web out there, be a part of it&lt;/h3&gt;

We are contributing to the web when we put something out there.

Most compelling example is Flickr - Because they acknowledged the existence of a larger web.

i.e. Uploaders, Web tools and publishing, prints and yahho intergration.

&lt;h3&gt;Interfaces, not pages - applications, not sites&lt;/h3&gt;

Allow people to manipulate data, away from the "page metaphor" model.

KAYAK shown as an example - aggregating results from many web sites, and manipulate results

&lt;h3&gt;Products that get better with use&lt;/h3&gt;

Web is most powerful when people are connected together.

YouTube shown as an example. Showing the band, "OK Go" - Here it goes again. Made their own video, put it on YouTube, and the video endded up on MTV.
It won a grammy! Not only did it further OK Go but also YouTube - then google bought it for 1billion dollars.

&lt;h3&gt;Delivering rich experiences&lt;/h3&gt;

In ancient greece, Ajax was a mighty warrior, a missile from the cold war. First email was from a Dutch soccer fan. lol

People want to define AJAX in a specific technical way - which misses the point. 

But can be characterised by two points:

&lt;ol&gt;
&lt;li&gt;asynchronous interaction model - we are not just trying to retrieve a page anymore&lt;/li&gt;
&lt;li&gt;Browser-native technologies - If you asked someone to create a rich interaction on the web, all the caveats such as using windows xp, with service pack 2 - lol&lt;/li&gt;
&lt;/ol&gt;

Favourite metaphor for AJAX - "Roller skates for the web!" - Bruce Sterling

Javascript creates a sense of fluidity. Replicate the feeling you get from using ggoogle maps.

The story begins in 1886, Scientific American Supplement - a new photographic apparatus. Did not work, as George Eastman, who created a continuos roll of film, instead of plates. He said, "You press the button, we do the rest".

He constructed technology to work with his film, he dubbed the product - "The Kodak". He reduced the 19 steps from the SAS article to 3 steps. Even the marketing experience was simplified. He hid the complexity from the user. It transformed the industry, unimaginable before. People didn't see the possibilities, map sites were as good as they were in 1998.

GMail was the first AJAX app. This got Yahoos attention, felt threatened because of Yahoo mail. They called a meeting, compared their stuff to the dynamic interfaces of google. Yahoo maps &lt;strong&gt;was not on the list&lt;/strong&gt;.

&lt;h3&gt;How do you create a transformative product?&lt;/h3&gt;

What do you want users to say after you have developed - "Can't live without it." Steve Jobs given as an example. "Over simplified quote".

When a new technology comes out. WordStar screen shot given as an example, and when compared to a typewriter.

i.e. video cassette recorders, How do we get past technological mindset. Then you get into the problem, and you rely on product features - showing Microsoft word with all the tool bars turned on.

The blinking unset clock

"The really great person will keep on going - and create a beautiful elegant solution, that works." Steve Jobs, 1984

Stop relying on technology
Stop relying on features
Rely on user experience instead!

Eastman could have replaced plates with film, but instead he stood back and created something special.

TiVo shown as an example, they could have just replicated the 

Diamond Rio pmp300 - first mp3 player, modeled on a cassette player. The record industry tried to ban the pmp300.

3 years later, the Apple iPod, did less, cost more but then took over the market.

The success is due to the fact that the iPod acknowledged the way that users interact with technology.

&lt;h3&gt;We respond to products as if they are people&lt;/h3&gt;

&lt;h3&gt;Products are people too&lt;/h3&gt;

We develop a powerful, emotional connection with the product.

The products that work best, are ones that have a distinct personality.

Shell is a term for user interface. 

Users only care about the user interface - the rest is magic.

&lt;h3&gt;The best Web 2.0 apps start with the user interface&lt;/h3&gt;

"Designing from the outside in" - Tim O'Reily

i.e. &lt;h3&gt;Experience Strategy&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Google calendar started out - fast, visually appealing, and joyous to use.&lt;/li&gt;
&lt;li&gt;Drop dead simple to use.&lt;/li&gt;
&lt;/ul&gt;

Google Calendar has already overtaken the no2 player.

They set a star to sail their ship buy

Apple have created an end to end system, beyond what the ipod on it's own can deliver.

Flickr experience - check out Flickr's about page!
i.e. We want to help people

ie, the role that the product plays in the lives of the users.

&lt;h3&gt;The experience is the product&lt;/h3&gt;</content><link rel='alternate' type='text/html' href='http://www.ifingers.com/tips/2007/06/beyond-ajax-by-jesse-james-garrett.html' title='Beyond AJAX by Jesse James Garrett Notes'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=13957257&amp;postID=4092253590661137779' title='0 Comments'/><link rel='replies' type='application/atom+xml' href='http://www.ifingers.com/xml/rss.xml' title='Post Comments'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/4092253590661137779'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/13957257/posts/default/4092253590661137779'/><author><name>Richard Senior</name><uri>http://www.blogger.com/profile/14853082095025685284</uri><email>noreply@blogger.com</email></author></entry></feed>