• You are currently browsing the Christian Heilmann blog archives for November, 2009.

  • Archive for November, 2009

    Chris’ travel tips – Tokyo, Japan

    Saturday, November 14th, 2009

    Some time ago I asked people on twitter if I should start writing about my travel experiences here in addition to the technical info I am giving. As my job right now consists mostly of traveling it would be fun to give some very personal insights about what you can do where. So here goes.

    I went to Tokyo on a quick trip to meet with Yahoo Japan office and be a booth babe for us at the Web Directions East conference. I also ended up giving a presentation at a Pecha Kucha night.

    All in all my experience is a bit tainted as I was sick and couldn’t do much, but here are some things that might be of interest for you if you ever go here.

    high tech toilet flushSuper Lemon SodaTokyo by  you.Tokyo by  you.P1090790 by  you.P1090783 by  you.P1090770 by  you.P1090752 by  you.Tokyo by  you.

    • There are no flying cars – sorry, but my Bladerunner inspired impression of Tokyo is off. No flying cars, no robot dogs. The area we stayed in (Asaka, the Ana Intercontinental Hotel in between the US and the Russian embassy) actually reminded me a lot of Hong Kong.
    • You are off the grid in terms of mobiles – neither my personal T-Mobile HTC did a beep nor the company Vodafone 3G Blackberry. American colleagues have working iPhones though but I shudder to think how much the roaming costs.
    • Japanese mobiles are totally different – for starters, a lot of people watch TV on their phones.
    • There is no way to pay with credit card or cash machines – you can get money in the hotel though and it is totally normal to carry a month’s UK rent in cash Yen with you all the time – nothing gets stolen here.
    • Connectivity is good – In the hotel you have to pay for internets (but that is like in America – to my mind it should always be free) but cafes have free wireless. Wireless on the other hand seems to be not that common in offices and hotels.
    • Public transport is ace – we arrived in Narita airport and there is a good train connection to the city. The undergrounds is pretty easy to navigate and not too expensive. Still, Hong Kong beats it :) Taxis are ubiquitous but pricy – they start at 710 Yen and then go up quickly. Taxi doors in the back are opened by the driver, so wait for it. Marvel at the awesome GPS they have – like an animated Google street view.
    • Everything is ridiculously expensive – deal with it. It is like coming to London for the first time, just more painful.
    • There are coffee vending machines everywhere – hot and cold canned coffee and soft drinks are available on almost every street corner.
    • You can get along with English, but some Japanese sentences will help you a lot – taxi drivers for starters will not speak any English, bring a Japanese print out of the map you want to go.
    • The food rocks – you can eat anything and your body will not hate you for it.
    • Opening hours are odd – whilst you would expect the hotel to be the safe haven for the end of the evening you are sadly mistaken. Ours had no bar and after 9 the small shop and bakery inside it was already closed. You come back to the hotel to sleep, not to party (or if you got lucky, both).
    • Don’t blow your nose in public – which was a bitch with me having a bad cold. You do see a lot of people with face masks. This is not as we expect to stop the bearer from getting germs but is actually something people do when they have a cold to prevent others from getting infected. OK, whoever knows a bit about the efficiency of these masks can dispute the whole idea, but it shows just how much Japanese people care about not bothering others with their respiratory problems.
    • People are terribly helpful – even if they don’t understand you they consider it a flaw on their part and won’t ask for more details. This can be very confusing and I myself feel very uncomfortable with this.
    • The streets and public places are safe – you see a lot of cops hanging around and I for example saw people falling asleep in cafes with their money and their mobiles on the table. In the UK they’d have woken up naked as people would’ve nicked the lot.
    • Chopstick skills are needed – you’ll hardly find forks and knives outside of hotels. Eating sushi with your hands is expected though. You will get a hot towel before every meal.
    • Toilets are high tech – you have heated seats (very much loved by every woman I talked to about this) and spraying facilities in almost every toilet. With spraying facilities I mean bidet-style fountains that wash your bum. They can be adjusted both in angle and strength and don’t stop automatically – you need to press the stop button. I was confused by this the first time and waited for quite a while for the flood to stop which it didn’t. Not all are labeled in English, so some experimentation is necessary. Some toilets even have fake flushing noise generators to cover any flatulence. Again, this is a hint what not to do in public.
    • Finding an English speaking doctor can be hard – I just came back from a trek to 3 hospitals as the international SOS centre gave me the address of a nearby hospital but there was no English speaking doctor present. As professionals, they won’t touch you without being able to give a proper examination (you know half of the job is asking the patient what the issue is). In the end I found a service that provides translation on the phone for you. Any hospital knows that number so ask them to talk to the doc and you over the phone to work out. An examination plus medication was 4800 Yen, so not too bad.
    • There are a lot of all-night shops – offering drinks, pretty decent prepacked food, magazines, toiletries, magazines and even medication. Seven Elevens are the most common ones.
    • You do stand out – no matter what you do. Whilst people don’t stare (as I found to be a very common thing on my travels in India) you can try as you might but you will always be a Gaijin which used to be a rude word about foreigners but has become quite normal by now.
    • Hotels are very comfortable and high quality – like anywhere in Asia (at least I have been) US and especially UK hotels could learn from the stuff you get here in your rooms. Great beds, good TV set, mini bar, dry cleaning, iron, towels, pajamas, good shampoo+conditioner+body wash – all of these are normal.
    • Bring business cards – I collected them by the bundle here and managed not to bring mine which was quite a boo boo.
    • Public transport and lifts can be very packed – but don’t worry, even if you feel that you might crush people around you it will not happen.
    • People are beautiful – Japanese people have a very high standard of clothing and personal grooming. It is very easy to look scruffy here. Having said that, club-gear and young folk might dress in things that confuse you but just you wait – sooner or later all of that will come to the west, too. Then again the T-Shirts with random English or German sentences you see on engrish.com can be found, too.

    That’s it for my first impressions. Check my flickr photos for some impressions and hopefully this is of use for you. Also feel free to comment with things I have done wrong if you are a local :).

    Love what you do and they will listen – my Pecha Kucha talk for Webdirections East in Tokyo

    Wednesday, November 11th, 2009

    In a few hours Web Directions East in Tokyo will kick off with a Pecha Kucha presentation night. This means that every speaker gets to show 20 slides in 20 seconds each (I first thought the whole presentation was 20 seconds) and it is all good fun and speedy. Here are my slides that I will show as I am not speaking at the conference – I will be just a booth babe. Eye candy, so to say.

    Notes

    1. I am Chris and my job is to make developers happy.
    2. I travel the world talking to people about simple solutions to big problems.
    3. And I love my job.
    4. To me, the web is not about sites and code.
    5. It is about information – data.
    6. The web is full of great information and tools that help us deal with information.
    7. All we need is a simple way to reach that information.
    8. And remix it.
    9. Once we have the data we can build great interfaces that help everyone to consume that data.
    10. All this needs passion.
    11. And collaboration.
    12. When we all – world-wide – work together towards the same goals, our job is easy.
    13. This means re-using what other people have done.
    14. This is not cheating – on the contrary, it is a cleverer way of dealing with a problem that we all have.
    15. Using systems that have proven to work means they can be constantly upgraded and secured.
    16. Working together on systems that by make it easier and more secure to use our products protects our users.
    17. So before you build something, look around what was already done and can be re-used.
    18. If you build something, give it out for free.
    19. You will reach more people like you and get feedback on improvements that you had no idea about.
    20. Together we can build the future, each on our own can create a nice present.

    A Speakerrate comments badge or another reason to love Twitter

    Tuesday, November 10th, 2009

    Another reason to love Twitter: You ask for APIs and you get them. As requested in my Tweet, speaker rate acted very quickly and build an API
    for latest comments – and here is my thank you. Using a bit of YQL magic and some JavaScript I put together a badge to show off the latest speakerrate comments on your page:

    Speakerrate Badge Test by  you.

    Check out the demo page of the badge and get the source and read the docs on GitHub.

    Usage:

    Simply add a DIV with a link to your speaker page on speakerrate:

    <div id="speakerratebadge">
    <a href="http://speakerrate.com/speakers/3543-christian-heilmann" id="speakerratelink">Rate me on Speakerrate</a>
    </div>

    Then add the script and call the init() method:

    <script type="text/javascript"
    src="http://github.com/codepo8/speakerrate-badge/raw/master/speakerratebadge.js"></script>
    <script type="text/javascript">
    speakerratebadge.init();
    </script>

    You can also provide a few options to the init() method to change the look and features of the badge:

    <script type="text/javascript"
    src="http://github.com/codepo8/speakerrate-badge/raw/master/speakerratebadge.js"></script>
    <script type="text/javascript">
    speakerratebadge.init(
    {
    amount:3, /* amount of comments */
    styled:true, /* Boolean if the style here should be pulled and applied */
    headerText:'Comments:' /* Text of the header above the comments */
    }
    );
    </script>

    If you need different styles, just use styled:false or override the ones applied.

    The developer evangelism handbook is now available in print from Lulu.com

    Monday, November 9th, 2009

    When I released the developer evangelism handbook it was quite a success but a lot of people asked for a print version. I’ve asked a few publishers if they are interested but the common consensus was either “too short” or “too niche”. I’d be happy to prove them wrong so I used Lulu.com for publishing the book myself. So if you are not a fan of the free online version, go over there and get your copy.

    The Developer Evangelism Handbook is now available on Lulu.com by  you.

    Of Hamsters, Feature Creatures and Missed Opportunities – my talk at Fronteers 2009

    Thursday, November 5th, 2009

    The outline

    In this session Chris Heilmann will show how some of the traits we have as developers keep us from evolving and our market from maturing. Instead of picking and choosing from already amazing products we tend to want to build and maintain everything ourselves – and fail at keeping up the quality leaving both security holes and carwrecks on the information superhighway behind. There is another way and Chris will show just how much more fun we can have with the web if we use systems that are available for us for free, remix the web with simple meta-mixing systems and liberate our developer minds from the barriers technology throws at us. If you always thought that there has to be more to our jobs than fixing bugs, this session is for you.

    Slides

    The audio recording

    You can download the MP3 of the talk at archive.org – 42MB.

    Following are the notes which will resemble what I am talking about…

    Remember, remember the 5th of November…

    First of all, how cool is it to have a conference on Guy Fawkes? Whoever can recite the “V” alliteration later on flawlessly I will buy a beer for.

    Hamstering

    Here’s a thing that happened in my garden in London the other day. My friend keeps putting bird feed in the garden to, well, feed the birds. She also wonders why she keeps having weeds in her garden. Well, the reason is this: a squirrel keeps coming and takes the bird feed and buries it a meter away from the bird feeder (video of the theft). This is stupid as we keep replenishing the bird feed anyways. However in the mind of the squirrel it is a safe idea to keep a cache. Luckily we humans are cleverer, right?

    No. One very human trait we have is that we want to collect things – especially when they are free. If you followed my exploits this year you’d have seen that I travelled – a lot. What I found myself doing is collecting both inflight sock and toothpaste packs and little soap/shampoo/body lotion bottles. I am amazed just how many of these things I accumulated without ever needing them.

    This is exactly what we do with knowledge and code examples. I have about 20GB of e-books on all kind of technical subjects. All of these I haven’t looked at for years as most of the topics are outdated. However, we accumulate knowledge and think we do a great job once we found the solution to end all solutions. That doesn’t work any longer. We should not fill up our head with useless information about how some browser fails to do one thing or another. This secured our jobs during the first .com crash but it is time to let go.

    Amazing resources

    Nowadays we have amazing resources for beginners to learn what we are doing. The times of copy and paste and then try to understand someone else’s code is over. We should not put random stuff on the web. Both the Opera Web Standards Curriculum and the WaSP interact curriculum needs your input.

    Evolving the web

    Our job as developers is to evolve the web to something more than it is now. However, we are not really concentrating on that. There are a few things that are in our way.

    Specialising without caring about the consequences

    One thing is that we tend to become specialists in a certain area and forget about the others. Web development is a task of working together with other specialists to build amazing interfaces that make a change in people’s lives. If you are not passionate about a certain aspect of it, don’t do that job – instead partner with somebody who is passionate about it.

    Fanboys.

    The amount of energy wasted every day fighting each other on forums, mailing lists and other resources about which technology is best and what library to use pains and bores me. It is not helpful and it doesn’t make any sense to try to make the world fit your tool of choice.

    Be a librarian

    Good developers should be like librarians. You don’t need to know everything, but you need to know where to find the right information at the right time.

    Use libraries

    And for that, use libraries like Dojo, jQuery, YUI, mootools or whatever to work around the browser problems so that you can concentrate on what you want to build rather than how it fails.

    Libraries fix browsers

    Our main enemy to build cool products are browsers. The technologies and standards that drive the web are dead easy – we just don’t have time using them as we spend most of our time testing and wondering why browsers don’t implement them in a predictable manner. This is where libraries come in and my plea here is to use them. Using libraries you can write predictable applications built on a base that can be altered for all the browsers to come – if you build towards the browsers in use today you build for the past. We’ve done that before and paid dearly for it.

    Use don’t abuse libraries

    Libraries give you an amazing amount of power to do quick solutions. Be aware that when you use them though, you use them wisely. Do not mix HTML, CSS and JavaScript in the same script. This creates unmaintainable solutions and we had years and years of those.

    The feature creature

    The first time I heard about the feature creature was in 2004 here in Amsterdam at the PHP conference. I loved the image of every developer having a little creature on their shoulder that keeps telling us what we should be doing. Most of the time the feature creature tells us that whatever is out there is not nearly as good as the thing we can come up with. It also keeps telling us that whatever we do needs more features. This leads to something I call the feature loop.

    The feature loop

    As developers we are driven to writing simple, elegant and clever solutions for complex issues. Then we do the right thing and release those to the whole world. Then we do the wrong thing by listening to everybody who wants to have an extra feature and support for some very esoteric edge case. We add all of these extensions and build something complex again that another developer might find and simplify again.

    Breaking the loop

    The only way to break this vicious circle is by broadening our horizons and being cleverly lazy. I talked about this before in detail at the web expo in Prague. In essence what I am saying is that a lot of what we think is our job to do has been done for us already. And now I am going to show you some of these things.

    Missed opportunities

    The thing is that by building on tested and working solutions we can build faster, more secure and working solutions. While we think that we need to squeeze the last out of everything we do ourselves very successful web sites are being built in other countries where developers are very pragmatic of what has to be done. Questioning an out-of-the box solution is a good safety measure but you also need to draw the line at trying to replace them. Instead, why not add to the already existing system – all of them are open source!

    The other thing we keep forgetting as web developers is that the technologies we are experts in right now reach much further than the browser world.

    Our technologies are hot right now

    Mobile development, W3C mobile widgets, iPhone development, TV widgets and applications running inside Facebook, Yahoo or iGoogle are all based on CSS, HTML and JavaScript and run in much more defined and easier to use environments. We can take our knowledge and finally work without the sword of damocles of bad browser support hanging over our head.

    Changing the idea of what the web is

    The web is not web sites, it is not even code. Deep down all of it is about data and information. The Yahoo homepage for example moved from a directory of bookmarks to a portal full of third party content to a starting point for users where they can mix and match content of the web to their liking. This goes as far as now allowing people to update Facebook from the Yahoo homepage or you to write an application that is shown on it.

    Building with components

    Interfaces like that are only possible when you move away from the old idea of having a single page but you think of small components in the interface that could hold whatever the end user pleases. This is were we run into issues with the web standards, but that is another talk.

    Based on APIs

    All the data to remix and show is available for us on the web already – offered as APIs and listed on sites like Programmable Web.

    Kobayashi Maru

    Looking at the sheer amount of APIs – over 1500 right now – and knowing full well that all of them were built by developers with the feature creature on their shoulder it seems impossible to use a lot of them at the same time as you need to read up on all the documentation, get developer keys, learn the authentication and so on. We have that same problem internally at Yahoo, which is why we tackled it.

    YQL is there for you

    YQL is a meta language for the web that over a single, simple REST service turns the whole web into a giant database for you to explore and take part in. Let’s see some examples:

    Photos from Flickr?

    select * from flickr.photos.search where text = "cat"

    Headlines of the New York Times?

    select * from nyt.article.search where query="spontaneous combustion"

    Latest commits on a GitHub repo?

    select * from github.repo.commits where id='yql' and repo='yql-tables'

    Latest headlines of the Volkskrant?

    select title from html where url="http://www.volkskrant.nl/" and xpath="//h2[@title]"

    Latest “English” headlines of the Volkskrant?

    select * from google.translate where q in (select title from html where url="http://www.volkskrant.nl/" and xpath="//h2[@title]") and target='en'

    Updating Twitter?

    use 'http://www.yqlblog.net/samples/twitter.status.xml';
    insert into twitter.status
    (status,username,password)
    values (
    "In your fronteers, blowing ur mindz",
    "codepo8",
    "didyoureallythinkIshowit?"
    )

    Updating WordPress?

    insert into wordpress.post
    (title, description, blogurl, username,
    password)
    values
    ("Test Title", "This is a test body",
    "http://ajaxian.com", "codepo8", "iedoesitright")

    Updating the internet?

    delete&nbsp;from&nbsp;internet&nbsp;where&nbsp;user_agent="MSIE"&nbsp;and&nbsp;version&nbsp;< 8;
    – Not yet, sorry

    Search one term in Google, Bing and Yahoo?

    select&nbsp;*&nbsp;from&nbsp;query.multi&nbsp;where&nbsp;queries='
    select&nbsp;*&nbsp;from&nbsp;microsoft.bing&nbsp;where&nbsp;query="Jimmy&nbsp;Hoffa"&nbsp;and&nbsp;source&nbsp;in&nbsp;("web");
    select&nbsp;*&nbsp;from&nbsp;google.search&nbsp;where&nbsp;q&nbsp;=&nbsp;"Jimmy&nbsp;Hoffa";
    select&nbsp;*&nbsp;from&nbsp;search.web&nbsp;where&nbsp;query&nbsp;=&nbsp;"Jimmy&nbsp;Hoffa"
    '

    You can do all of this in the REST API

    https://query.yahooapis.com/v1/public/yql?q={uri-encoded-query}&#38;
    format={xml|json}&#38;
    diagnostics={true|false}&#38;
    callback={function}&#38;
    env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys

    Things you can do in YQL

    • You can mix and match whatever you want.
    • You can sort and limit.
    • You can extend with your own data tables by writing a schema and putting it on GitHub.
    • You can store information on the YQL servers (the cloud, the cloud)

    Where’s the catch?

    • 10k hits an hour (20k with oAuth).
    • 100k hits a day.
    • Data is cached for 15 minutes (soon customisable).
    • Execution limit on the server is 30 seconds (for now).

    That’s all!

    An example – loading photos for a location from Flickr

    Find Amsterdam

    select&nbsp;*&nbsp;from&nbsp;geo.places&nbsp;where&nbsp;text="amsterdam"

    Define Amsterdam and get photos taken there

    select&nbsp;*&nbsp;from&nbsp;flickr.photos.search&nbsp;where&nbsp;woe_id&nbsp;in&nbsp;(
    select&nbsp;woeid&nbsp;from&nbsp;geo.places&nbsp;where&nbsp;text="amsterdam"
    )

    Get all the information about these photos

    select&nbsp;*&nbsp;from&nbsp;flickr.photos.info&nbsp;where&nbsp;photo_id&nbsp;in&nbsp;(
    select&nbsp;id&nbsp;from&nbsp;flickr.photos.search&nbsp;where&nbsp;woe_id&nbsp;in&nbsp;(
    select&nbsp;woeid&nbsp;from&nbsp;geo.places&nbsp;where&nbsp;text="amsterdam"
    )
    )

    Get only what we need

    select
    farm,id,secret,owner.realname,server,title,urls.url.content
    from&nbsp;flickr.photos.info&nbsp;where&nbsp;photo_id&nbsp;in&nbsp;(
    select&nbsp;id&nbsp;from&nbsp;flickr.photos.search&nbsp;where&nbsp;woe_id&nbsp;in&nbsp;(
    select&nbsp;woeid&nbsp;from&nbsp;geo.places&nbsp;where&nbsp;text="amsterdam"
    )
    )

    Select format JSON, define a callback and copy and paste the URL.

    http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.info%20where%20photo_id%20in%20(select%20id%20from%20flickr.photos.search%20where%20woe_id%20in%20(select%20woeid%20from%20geo.places%20where%20text%3D%22amsterdam%22))&#38;format=json&#38;diagnostics=false&#38;env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&#38;callback=flickr

    Copy into a script src and write some DOM scripting to display

    &lt;script&nbsp;type="text/javascript"&gt;
    function&nbsp;flickr(o){
    var&nbsp;f&nbsp;=&nbsp;document.getElementById('flickr');
    var&nbsp;out&nbsp;=&nbsp;'';
    var&nbsp;photos&nbsp;=&nbsp;o.query.results.photo;
    for(var&nbsp;i=0,j=photos.length;i&lt;j;i++){
    var&nbsp;cur&nbsp;=&nbsp;photos[i];
    out&nbsp;+=&nbsp;'&lt;li&gt;&lt;a&nbsp;href="'&nbsp;+&nbsp;cur.urls.url&nbsp;+&nbsp;'"&gt;&lt;img&nbsp;src="http://farm'&nbsp;+
    cur.farm&nbsp;+&nbsp;'.static.flickr.com/'&nbsp;+&nbsp;cur.server&nbsp;+&nbsp;'/'&nbsp;+
    cur.id&nbsp;+&nbsp;'_'&nbsp;+&nbsp;cur.secret&nbsp;+&nbsp;'_s.jpg"&nbsp;alt="'&nbsp;+&nbsp;cur.title&nbsp;+
    '"&gt;&lt;/a&gt;&lt;/li&gt;';
    }
    f.innerHTML&nbsp;=&nbsp;out;
    }
    &lt;/script&gt;
    &lt;script&nbsp;type="text/javascript"&nbsp;src="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos.info%20where%20photo_id%20in%20(select%20id%20from%20flickr.photos.search%20where%20woe_id%20in%20(select%20woeid%20from%20geo.places%20where%20text%3D%22amsterdam%22))&#38;format=json&#38;diagnostics=false&#38;env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&#38;callback=flickr"&gt;&lt;/script&gt;

    And you have a mashup!

    Well, to a degree. You can see that it pulls photos from Flickr and shows them on a page.

    You also have FAIL

    As much as we love it, JavaScript is not reliably available in browsers and cannot be trusted for providing very important content. Or can it?

    Moving JavaScript solutions server-side with YQL execute

    Open data tables providing YQL with data can contain JavaScript that will be executed on the server to convert information. That way you can take the script just shown and make it a server-side conversion. The benefit of this is that you are not bound by client security flaws and you have full language support, including E4X for XML. The earlier script will thus become the following:

    var&nbsp;amt&nbsp;=&nbsp;amount&nbsp;||&nbsp;10;
    var&nbsp;query&nbsp;=&nbsp;'select&nbsp;farm,id,secret,owner.realname,server,title,'+
    'urls.url.content&nbsp;from&nbsp;flickr.photos.info&nbsp;where&nbsp;'+
    'photo_id&nbsp;in&nbsp;(select&nbsp;id&nbsp;from&nbsp;flickr.photos.search('+
    amount&nbsp;+&nbsp;')&nbsp;where&nbsp;';
    if(location!==null){
    query&nbsp;+=&nbsp;'woe_id&nbsp;in&nbsp;(select&nbsp;woeid&nbsp;from&nbsp;geo.places&nbsp;where&nbsp;text="'&nbsp;+
    location+'")&nbsp;and&nbsp;';
    }
    query&nbsp;+=&nbsp;'&nbsp;text="'&nbsp;+&nbsp;text&nbsp;+&nbsp;'"&nbsp;and&nbsp;license=4)'
    var&nbsp;x&nbsp;=&nbsp;y.query(query);
    var&nbsp;out&nbsp;=&nbsp;&lt;ul/&gt;;
    for&nbsp;each(var&nbsp;cur&nbsp;in&nbsp;x.results.photo){
    var&nbsp;li&nbsp;=&nbsp;&lt;li/&gt;;
    var&nbsp;a&nbsp;=&nbsp;&lt;a/&gt;;
    a.@["href"]&nbsp;=&nbsp;cur.urls.url;
    var&nbsp;img&nbsp;=&nbsp;&lt;img/&gt;;
    var&nbsp;url&nbsp;=&nbsp;'http://farm'&nbsp;+&nbsp;cur.@farm&nbsp;+&nbsp;'.static.flickr.com/'&nbsp;+
    cur.@server&nbsp;+&nbsp;'/'+cur.@id&nbsp;+&nbsp;'_'&nbsp;+&nbsp;cur.@secret&nbsp;+
    '_s.jpg';
    img.@["src"]&nbsp;=&nbsp;url;
    img.@["alt"]&nbsp;=&nbsp;cur.title;
    a.img&nbsp;=&nbsp;img;
    li.a&nbsp;=&nbsp;a;
    out.li&nbsp;+=&nbsp;li;
    }
    response.object&nbsp;=&nbsp;out;

    This, embedded in an open table means you can retrieve photos from Flickr as a UL now using the following YQL statement:

    use&nbsp;"http://github.com/codepo8/yql-tables/raw/master/flickr/flickr.photolist.xml"&nbsp;as&nbsp;flickr;
    select&nbsp;*&nbsp;from&nbsp;flickr&nbsp;where&nbsp;text="me"&nbsp;and&nbsp;location="uk"&nbsp;and&nbsp;amount=20

    You can then display the photos returned either with PHP:

    &lt;?php
    $url&nbsp;=&nbsp;'http://query.yahooapis.com/v1/public/yql?q=use%20%22http://github.com/codepo8/yql-tables/raw/master/flickr/flickr.photolist.xml%22%20as%20flickr;%20select%20*%20from%20flickr%20where%20text=%22me%22%20and%20location=%22uk%22%20and%20amount=20&#38;format=xml&#38;diagnostics=false';
    $ch&nbsp;=&nbsp;curl_init();
    curl_setopt($ch,&nbsp;CURLOPT_URL,&nbsp;$url);
    curl_setopt($ch,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1);
    $output&nbsp;=&nbsp;curl_exec($ch);
    curl_close($ch);
    $output&nbsp;=&nbsp;preg_replace('/.*&lt;ul&gt;/','&lt;ul&gt;',$output);
    $output&nbsp;=&nbsp;preg_replace('/&lt;/ul&gt;.*/','&lt;/ul&gt;',$output);
    $output&nbsp;=&nbsp;preg_replace('/&lt;?.*?&gt;/','',$output);
    $output&nbsp;=&nbsp;preg_replace('/&lt;!--.*--&gt;/','',$output);
    echo&nbsp;$output;
    ?&gt;

    Or you can of course use JavaScript:

    &lt;div&nbsp;id="jsflickr"&gt;&lt;/div&gt;
    &lt;script&nbsp;type="text/javascript"&nbsp;charset="utf-8"&gt;
    function&nbsp;flickrlist(o){
    var&nbsp;ct&nbsp;=&nbsp;document.getElementById('jsflickr');
    ct.innerHTML&nbsp;=&nbsp;o.results;
    }
    &lt;/script&gt;
    &lt;script&nbsp;type="text/javascript"&nbsp;src="http://query.yahooapis.com/v1/public/yql?q=use%20%22http://github.com/codepo8/yql-tables/raw/master/flickr/flickr.photolist.xml%22%20as%20flickr;%20select%20*%20from%20flickr%20where%20text=%22me%22%20and%20location=%22uk%22%20and%20amount=20&#38;format=xml&#38;diagnostics=false&#38;callback=flickrlist"&gt;
    &lt;/script&gt;
    

    Be part of the movement

    If you have other practical solutions like that, please write them and add them to the GitHub repository so they can become part of the interface.

    Read the YQL documentation

    Other than that you can read the YQL docs, there’s a YQL Blog and a Forum available. See you there.

    Be clever, not busy

    I think it is time we find solutions like libraries and YQL for our problems rather than doing everything by hand. Spend your time on making the web fun for humans, not on pleasing machines. If you are clever, you are allowed to be lazy. Replacing the web would be tough, so use it well.