Christian Heilmann

Posts Tagged ‘yahoo’

Five things for you – an introduction to the offers of the Yahoo Developer Network

Thursday, June 18th, 2009

Yesterday I was in Barcelona, Spain and talked to a few dozen local developers about the things they can find on the Yahoo Developer Network to have an easier time building web sites and impress their bosses. Amongst other things I showed:

Barcelona by  codepo8.Yahoo office Barcelona by  codepo8.

Here is the presentation and my notes with the source of the code examples for you. You can “download the slides as a PDF (11mb) from S3”:http://chrisheilmann.s3.amazonaws.com/developer-evening-barcelona.pdf or watch them on slideshare:

Notes:

Five things for you

Today I am going to talk about five things Yahoo offers to developers. In case you wonder, Mortadello y Filemon is actually rather big in Germany – known as “Clever and Smart” hence I couldn’t resist using them.

English only

Sorry, but I don’t speak any Spanish, but there are colleagues of mine around for Q&A later who can translate if needed. Also, if I speak too fast, just shout and I will try to make it easier.

I am Chris

I’m Chris and I am a developer evangelist. As you can see I also speak with my hands a lot, but that is because I am passionate about what I do. I want to make the web an easier, more professional environment to work in and a media that people can enjoy regardless of ability or technical setup.

Get this talk and others later

This is my main web site where I publish all of the talks I give, videos and other goodies. So this presentation will end up here later on and you can re-mix it for own trainings or presentations. Creative Commons rocks.

The Yahoo Developer Network

I work for the Yahoo Developer Network which you might not have heard of before. In essence what the YDN does is offer almost everything you see on Yahoo – the data displayed and the interface elements used for you to use in your own products via APIs, SDKs and a great development framework. The YDN homepage is your first stop for all the information I am talking about today.

1) Research

Let me start by showing you some of the research we’ve done and the results we offer you to build your own solutions on. In addition to what I am showing here also make sure to chat to some of the colleagues here, as we have a research lab here in Barcelona and they are working on some really cool products.

Patterns

The Design Pattern Library is a collection of solutions to problems or tasks users of our web sites and applications had. We do a lot of user testing in labs and we ask the right questions to find out exactly what people consider the easiest way to for example pick a date in a web form. All of this research is documented in these use patterns with a description of the problem, an explanation of the solution and a cross-reference to where in Yahoo we use the solution. If you build an interface and you don’t have time or budget to do your own research, this is a great resource to use. The patterns are creative commons so please tell us if your experience differs and we can amend them.

Stencils

If you do visuals all of these patterns are also available as stencils for all major design tools. That way you can easily build and design an interface that your developers will be able to create in CSS, HTML and JavaScript.

Performance

The Exceptional Performance section of the Yahoo Developer Network is where we give you all the information how we made our web sites behave faster and more responsive. In our world every millisecond the page takes to load and display counts – we can relate every second wasted to money lost. While your sites might not be that dependent on great performance it does never hurt not to waste your visitors’ time. In this section you find tips and tricks how to tweak your server, how to write CSS and JavaScript and how to optimise images easily organised and explained in detail.

2) Flexible, professional development

As a large company we need to be professional in how we work with each other as developers. There are dozens of offices with hundreds of developers in Yahoo and we found that every developer and every office solves the same problems, makes the same mistakes and re-invents the wheel over and over again. Web development is a very undefined area and the biggest issue is that we spend 90% of our time fixing bugs rather than developing. We wanted to change that and make sure that we can concentrate on architecting our software solutions and develop and tweak them for the users’ benefit rather than fixing annoying and confusing browser bugs.

Graded Browser Support

The first thing we needed to make sure is that we define and describe the support we have for different browsers. This is a methodology and resource site we have called the Graded Browser Support and is something you can use for your product documentation and pitch, too. You cannot give every visitor of your web site the same experience regardless of browser and you actually should not even think that way as that kind of thinking is against the main principles the web was invented for. You have to make your products work for everybody, but you can give a different experience dependent on the sophistication of the visitors’ setups. This is what the GBS does. We define which browsers we support fully and test the high-end experience for. All other browsers don’t get this experience but something that works regardless.

The Yahoo User Interface library

The Yahoo User Interface library was the next big step to take towards professional development. This is a library ranging from CSS solutions, over JavaScript components up to plug and play widgets that are based on the support ideas we defined in the GBS and best practices we found in our pattern research. The YUI is where we work around all the annoying bugs and problems browsers and web technologies have to allow us to build solutions without wasting our time on wondering why they don’t work in setup xyz. By keeping all this in a base library we can fix and apply for any new technology or browser coming out. If we did all of the fixing in our sites we’d have to revisit each and every one of them when technologies change. This is not effective, hence we built ourselves a library.

The myth of the unstyled page

There is no such thing as an unstyled page in browsers. If you don’t apply a style sheet, then browsers have an in-build default style that varies from browser to browser. This makes it impossible for you to design a predictable interface. That’s why we created a style sheet that un-does all the styling browsers apply to a page. This means you can start with a clean canvas.

Predictable typography

Typography was he next hurdle. Every designer will give you font definitions in pixels and when you set the font in pixels, Internet Explorer 6 will not allow visitors to resize the text on your page to their needs. This is why we created a style sheet that resets the font of your browser to a readable minimum (again based on user testing) and has a percentage scale for you to use that relates directly to pixel sizes.

CSS layouts

Layout in HTML should not be done with tables or presentational markup but with CSS. The problem there is that browsers support the techniques we need to use to make them display our layouts in different ways. A lot of hacking has to be done to create a layout that works across the board. This is why we defined a grid structure for our sites and a style sheet that works. All we need to do now is add the right IDs and classes to a few DIV elements and we have a working layout. If you are really lazy, we even have a CSS grids builder tool for you. The CSS is hosted by us on a distributed network of servers and gets delivered to your visitors from a server near them which is great for performance. You can however host the CSS yourself, too.

Specialised solutions

The JavaScript part of the YUI is not a catch-all solution for all development tasks you’ll ever have to tackle but instead is cut up into smaller components that all do one thing and do it very well. That way you can mix and match the library components to the need of your solution and keep the footprint low.

Widgets

On top of the YUI components we built widgets that relate to the design patterns. These are the things you see on Yahoo’s pages – sliders, tabs, menus, rich text editors and the like. We even have a showcase where we proved that you can rebuild the interface of Yahoo mail by using these free and open source building blocks.

Skinning

The look and feel of all of these widgets can be changed by changing a style sheet. This is very important. You should never have to alter JavaScript simply to make a tab a different colour.

Working widgets

This is an example of one of the widgets – the autocomplete control. As you can see the widget is built to solve a pattern we found in the pattern design library and using our logger control gives you full information about what is happening to it at every step of the process of using it.

Progressive enhancement

Our widgets are built to work and to give a smoother experience only when and if the browser supports it. This means an autocomplete control will be a text box when JavaScript is turned off. A data grid or complex sortable and styled table will be a simple, accessible data table when JavaScript is turned off. That way you build working solutions for every user and you don’t promise functionality that isn’t delivered. Users trust you, if you don’t hold your promises you will lose them.

Event driven architecture

All of the widgets are built with custom events and if you want to enhance their functionality or override it you can do that at any point of the interaction journey by subscribing to the custom events that get fired. This allows you to build solutions that need to do something extra for you without compromising the underlying code. You should never change the library code as that stops you from being able to upgrade the library to a never version.

The logger control

One of the most annoying things in web development is that not every browser gives you good debugging tools. The Logger control works around that issue by providing you with a debugging console that works across all the browsers we support.

The profiler

If you wonder why your JavaScript is using up a lot of memory and slows the computer down you can use the YUI profiler to analyze what is going on inside your JavaScript and fix bottlenecks that way.

3) Documentation

Both the YUI and all of our APIs come with extensive documentation written by a professional team of tech writers.

Online and offline docs

The APIs come with a quick “get started” guide and a full documentation – in many cases even available offline as a PDF version.

Step by step introduction and examples

The full documentation comes in easy to digest chunks guiding you where you need to go to find exactly the right kind of information.To get you a quick start there are copy and paste examples of demo code.

Code generated documentation

In addition to this the YUI also has a JavaDoc style documentation which is generated from comments in the source code. This means it will always be up-to-date even if there are quick fixes in the code. The tool to create the documentation from JavaScript code is also available.

Cheatsheets

Another nice service the YUI has is a zip of PDF cheatsheets for all the different widgets. These are A4 sheets with all the necessary information to get you started and find out how to quickly change an implementation of a certain widgets.

Forums, lists, blogs and videos

If you are still stuck or are just not a person receptive to code or text there’s the YDN theater with lots of videos of presentations, screencasts and demos. There are forums, mailings lists and other forms of communication with the teams available in the communities section

4) Things to impress your Boss with

One of the things I am always trying to make sure is that you can go to work tomorrow and tell your boss about some things you can use to save the company money and time or just impress him/her. So here are some ideas.

Build an own search engine with BOSS

Yahoo BOSS is an API that gives you access to the search index of Yahoo. You can display results from Yahoo, re-order and display like you want and mix the results with other data. That way you can easily build a vertical search engine. Furthermore the data includes information not displayed in the normal Yahoo search results like microformats, RDF information, delicious tags and keywords.

Research keywords for your market

Using the keywords in the BOSS data I was able to quickly build Keywordfinder. What it does is searching Yahoo for a keyword you enter, return the 20 first results, get the keywords users entered to find these sites, rank them for you and give them back in order of relevance. You can use this to see what terms you should have in your titles, headings and copy to get more search engine love.

Create a performance report and recommendations for your site

YSlow is a Firefox extension that automatically tests web sites against the best practices Yahoo found in the exceptional performance section. You can easily find the issues and get inline tips how to fix them. One really impressive part is smushit, which optimizes all your images as a batch and allows you to download them as a zip to replace the original ones.

YQL to remix the web

YQL and especially the YQL console is a terribly easy way for you to access APIs of Yahoo and third parties without knowing much about their authentication, parameter structure or return data. By using YQL remixing the web is as easy as accessing a database. For more detail, check out this presentation on YQL

How about a YQL demo?

This web site about Barcelona does not contain any content on the server but pulls all of the data from third party locations – Wikipedia, Flickr, Upcoming.org and Yahoo weather. The layout was done using the YUI grids builder and the following is all the code that is needed for it to be what it is:

PHP:


$root = ‘http://query.yahooapis.com/v1/public/yql?q=’;
$city = ‘Barcelona’;
$loc = ‘Barcelona’;
$yql = ‘select * from html where url = ‘http://en.wikipedia.org/wiki/’.$city.’’ and xpath=”//div[@id=’bodyContent’]/p” limit 3’;
$url = $root . urlencode($yql) . ‘&format=xml’;
$info = getstuff($url);
$info = preg_replace(“/.*|.*/”,’‘,$info);
$info = preg_replace(“/ ” encoding=”UTF-8”?>/”,’‘,$info);
$info = preg_replace(“//”,’‘,$info);
$info = preg_replace(“/”/wiki/”,’”http://en.wikipedia.org/wiki’,$info);

$yql = ‘select * from upcoming.events.bestinplace(5) where woeid in ‘.
‘(select woeid from geo.places where text=”’.$loc.’”)’.
’ | unique(field=”description”)’;
$url = $root . urlencode($yql) . ‘&format=json’;
$events = getstuff($url);
$events = json_decode($events);
foreach($events->query->results->event as $e){
$evHTML.=’

  • urls->url->content.’”>”’.<br $s->title.’” src=”’.$src.’”>

  • ‘;
    }

    $yql=’select description from rss where ‘.
    ’ url=”http://weather.yahooapis.com/forecastrss?p=SPXX0015&u=c”’;
    $url = $root . urlencode($yql) . ‘&format=json’;
    $weather = getstuff($url);
    $weather = json_decode($weather);
    $weHTML = $weather->query->results->item->description;

    function getstuff($url){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    $buffer = curl_exec($curl_handle);
    curl_close($curl_handle);
    if (empty($buffer)){
    return ‘Error retrieving data, please try later.’;
    } else {
    return $buffer;
    }

    }?>

    Doing multiple searches with a single HTTP request

    Another powerful option YQL gives you is to collate multiple API calls into a single request. Say for example you want to search the web for “vicky, cristina, Barcelona” and also for each of the terms on their own. This can be easily done with YQL in a single statement:

    select * from search.web where query in
    (‘vicky’,’cristina’,’barcelona’,’vicky cristina barcelona’)

    The result can be seen here and this is the PHP code that creates this demo:

    
    $root = ‘http://query.yahooapis.com/v1/public/yql?q=’;
    $yql=”select * from search.web where query in (‘vicky’,’cristina’,’barcelona’,’vicky cristina barcelona’)”;
    $url = $root . urlencode($yql) . ‘&format=json’;
    $search = getstuff($url);
    $search = json_decode($search);
    $search = $search->query->results;
    $vHTML = ‘’;
    $bHTML = ‘’;
    $vHTML = ‘’;
    $aHTML = ‘’;
    foreach($search->result as $i){
    $tmpl = ‘
  • clickurl.
    ‘”>‘.$i->dispurl.’
    )

  • ‘;
    if(preg_match(‘/vicky/i’,$i->abstract) &&
    !preg_match(‘/cristina/i’,$i->abstract) &&
    !preg_match(‘/barcelona/i’,$i->abstract)){
    $v[]=$tmpl;
    };
    if(preg_match(‘/cristina/i’,$i->abstract) &&
    !preg_match(‘/vicky/i’,$i->abstract) &&
    !preg_match(‘/barcelona/i’,$i->abstract)){
    $c[]=$tmpl;
    };
    if(!preg_match(‘/vicky/i’,$i->abstract) &&
    !preg_match(‘/cristina/i’,$i->abstract) &&
    preg_match(‘/barcelona/i’,$i->abstract)){
    $b[]=$tmpl;
    };
    if(preg_match(‘/vicky/i’,$i->abstract) &&
    preg_match(‘/cristina/i’,$i->abstract) &&
    preg_match(‘/barcelona/i’,$i->abstract)){
    $aHTML.= $tmpl;
    };
    $vHTML = @join(’ ‘,array_slice($v,0,3));
    $bHTML = @join(’ ‘,array_slice($b,0,3));
    $cHTML = @join(’ ‘,array_slice($c,0,3));

    }
    function getstuff($url){
    $curl_handle = curl_init();
    curl_setopt($curl_handle, CURLOPT_URL, $url);
    curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
    $buffer = curl_exec($curl_handle);
    curl_close($curl_handle);
    if (empty($buffer)){
    return ‘Error retrieving data, please try later.’;
    } else {
    return $buffer;
    }

    }?>

    You can also do the whole thing in JavaScript:


    5) Partnering

    The really interesting thing is that all of this is open for you to add your own data to. Using a simple XML document called an open table you can make your information available in YQL for other developers.

    You can host this XML file yourself if you don’t want the whole world to know yet. For example this open table can be used in a statement like this:

    use ‘http://eatyourgreens.org.uk/yql/nmm-search.xml’ as nmm;
    select * from nmm where category = ‘art’ and
    searchterm = ‘”tower bridge”’

    This gives developers access to all the information about the objects in the National Maritime Museum in London!

    If you want your open table to show up in the console via our team (we do review them for security and quality) all you need to do is add the table to github.

    Open Hack London 2009 – my presentation and quick review

    Monday, May 11th, 2009

    This weekend was Open Hack London and I spent the whole weekend in between presenting, being interviewed by Le Monde, Internet Magazin, Create or Die, O’Reilly and Reuters TV and helping hackers to get around the barriers they faced in reaching their goal of building a great hack in 24 hours.

    My talk

    I was very lucky to be able to present YQL as my topic for the tech talks as it is a no-brainer to make hackers that have 24 hours to understand the value of using YQL for their API data access. After all a simple “select * from {source} where {condition}” gets you very quickly to where you want to go instead of having to read API docs, get access tokens and then filter programatically.

    I had prepared several YQL driven demos to explain the power of the API, with most probably the simply flickr photos by location or search API and the simple kitten display example in JavaScript being the most useful.

    The slides were available on memory sticks for all attendees, and now are also on slideshare:

    There’s also a quick 40 second introductory video available:

    Seriously though, the talk was filmed and we will put it up on YDN as soon as the 2.6GB of high definition footage are converted and edited.

    All in all I was very satisfied how the Open Hack turned out. I love that English hackers seem not to be too fussed about trying to impress but really take hack days as an opportunity to build what they always wanted to build and not have to ask anybody for permission. The only thing you heard were technical questions and I was very surprised to see that instead of people building small, individual hacks to impress their peers people almost immediately started forming groups, distributed tasks and went for it come rain or lightning strikes.

    The list of submitted hacks shows some of this. Personally I was very impressed with the range of hacks. There was a lot of breaking out of boundaries of the desktop PC/web world, people hacked hardware, mobile interfaces and many an iPhone was in use.

    I can’t comment on all, but here are some of my impressions:

    Winners

    • Best government hack – They work for EU (Paul Battley and Julian Burgess) was a great and simple idea that makes a massive difference to the web resource it was built on. That the EU commission didn’t think of adding a translation interface is almost criminal neglect.
    • BBC backstage – Boss of Myspace (Kurt J, Yves Raimond and Benjamin Heitmann) makes Myspace a more interesting resource for me in terms of music. I am sure there are lots of awesome bands on it, but I am very annoyed with music starting automatically and me having to wait for a long time for a page to finish loading and rendering. The dbtune add-on is very interesting and I hope they take that idea further.
    • Hardware award – open security (Alistair MacDonald, Nigel Crawley and Mr Duck) I have no clue about Mr. Duck, but Alistair (except for blowing the main fuse of the room soldering) and Nigel have done an awesome job with this. In essence, it is an Arduino based RSA key. I loved it!
    • Best Mozilla hack – Intellisearch (Chris Brett,Laurence Hole and Matthew Ross) The winners of Dundee University hack day this year have done it again. By refining this hack which allows users to search the web without using a keyboard or have refined motor control. The really impressive part of this hack is also that the team reverse engineered the interface as it was not available as a Canvas control. Great accessibility mixed with using bleeding edge technology.
    • Best local hack – London Undersound (Dan W). I loved this one but I cannot find a link to it! What it did was to read out your Oyster card information and mashed it up with Last FM. It also showed you a graph of how many tube stations of the total amount you visited already turning using the tube into a game
    • Best FireEagle – Guestpass (Dale Lane) (presentation) Dale had a pretty cool idea of allowing short term access to FireEagle by providing a token system that allows you to give friends access to your FE information. This lowers the barrier to this great system and keeps simple one-off users from having to understand all the security measures in FE.
    • Guarnidad hack – Billtweets (Rob McKinnon) Public and private information fighter Rob McKinnon did a great job of scraping the government sites with bill information and giving us a way to track the changes and information about them on Twitter.
    • Most Awesome Hack – Fabulous Human Powered Browser (Adam Cohen-Rose, Dan Fitzgerald, Matthew Smith, Joyce Stack, Neomal Jinappriya and Sankatha Bamunuge). Not much to say about this one, except that it was awesome. I loved the interface idea of rolling on a scooter through the room to scroll a web site.
    • Hacker’s choice and Best in Show – OpenCycle (Premasagar Rose and Tom Leitch). Premasgar did it again – using Pipes and YQL this hack scrapes the mailing list archives of FreeCycle and turns it into a web interface. In a second phase they are planning to write a GreaseMonkey script that overlays free products over ebay results – great idea.
    • Good Beer Map by Chris Neale and Iain Collins was what it says on the tin – it takes the good beer guide and turns it into a map application with geo search. Cheers.

    Non-Winners:

    • Social Aggregator by Syd Lawrence, Sam Clarke and Alex Teugels and George Brocklehurst’s XFM Profile detector both create social graphs and connections and allow you to find out more about people by following links with the rel=”me” attribute. Both are great ideas but somehow it feels strange to have to go through scraping and finding mf data when all these systems do have APIs. Good job though!
    • My “deer in headlight award” would have gone to Shevek who has created a visual studio style interface for Hadoop. Proper audience baffling there.
    • GeoPong by Marko Mrdjenovic and Marko Samastur was a quite irrelevant but lovely hack that showed geolocated images overlaid over satellite maps as a pong ball with two paddles playing with it.
    • Mobile Steel was a hardware hack that allowed the hack team Henry Senior, Daniel Sikar, Hans Fraiponts and Peter De Keyser to control a steel guitar with an iPhone. Sadly enough the presentation was terrible. With this kind of hack, just show what it does and then explain how you made it.
    • RightNahoo! by Dan Counsell, Nik Fletcher, Keith Duncan and Danny Greg was nothing that new – basically a local geo search aggregator over several services. What I loved was the interface. All written in native mac code it just looked sweet and making shaking the iphone the start of the whole process was a nice touch.
    • Kisses by Mary Rose Cook was intriguing, too. A comparison engine scraping the web for data. For sure the most feisty presentation, cool stuff.
    • iBoe by Hans Fraiponts, Xflame (come on!), stef and Peter was a small robot controlled via a laptop with an iphone. Sweet, but could become more interesting if it learns as the description on the hack trackr promises :)
    • Newspan by Mark Norman Francis, Richard Boulton and James Aylett is a bayesian filter for RSS news, making it easier for you to filter your daily news intake down to what really matters to you. A really ambitious project that could become very useful.
    • Bad API by Andrew Betts was an interesting testing tool that simulates different API failures, thus allowing you to test your apps against these problems.

    Hacks I like very much but by hackers that forgot to leave us URLs, grrr

    • PlaqueHack had me very interested. From what I gathered (guys where is the friggin URL???) Simon Harriyott, Marvin Barretto, Jez Nicholson and Frankie Roberto took a national heritage DB of plaques with names of famous people in the UK and mashed them up with geolocated photos. This would be a cool app for a London tourism site.
    • Tweet my Ride by Salim Virani and Saalim Chowdhury was the great idea of cab sharing via twitter with local lookup and matching of twitter user locations. Now if we had a link I could talk about it…
    • KitHub by Ed, Fabien, Aurelie and Anna was an annotation interface for photos of physical design objects with threading built from scratch with YUI3. Nicely executed and I hope this will get released. A url would help.
    • Street Tag by Murray Steele and Ben Griffiths allowed overlaying photos in Google Street View and storing their location. Good fun that could actually be used for displaying ads

    One thing that made me really happy was how well the band was received. The guys from Pornophonique were very impressed and had a great time playing.

    Can’t wait for the next hack day, which incidently is on Friday with the students of Sunderland university showing off what they produced in the last few months.

    Seven things Yahoo offers developers – my talk at the developer evening at La Cantine in Paris,France

    Thursday, April 30th, 2009

    I just came back from Paris where I talked apparently very animated to around 50 developers about all the goodies Yahoo offers developers:

    I like to move it, move it

    I’ve spent the ride on the Eurostar editing the recording of the talk. I simply used Audacity and the built-in microphone of my MacBook Pro so the quality is not stunning but does the trick.

    I like being in Paris, developers have very good and challenging questions there, the coffee and food simply rocks and I can be in and out in a matter of hours without having to wait at airports and spend hours in the air being unable to use my laptop. We’re now waiting for feedback what other talks people in Paris want us to give and I am sure I will be back before long.

    Things to use, find and share – my Yahoo7 Open Session in Australia

    Sunday, April 26th, 2009

    Some days ago (I lost track with all the travelling and time differences) I gave the first talk at Yahoo7’s Open Sessions in their ludicrously beautiful offices in Sydney, Australia.

    me presenting YQL

    In order of appearance I talked about:

    TTMMHTM:Macs, IE6, hacker spaces, pixar vs. dreamworks and travel nightmares

    Thursday, April 2nd, 2009

    Things that made me happy this morning:

    Let’s start with filthy anti-propagandaa cool comic about macs:

    Man gets electrocuted by his computer but fails to acknowledge it as it is a mac