{"id":262,"date":"2007-11-09T10:44:44","date_gmt":"2007-11-09T18:44:44","guid":{"rendered":"http:\/\/www.laurenwood.org\/anyway\/2007\/11\/09\/web-20-technical\/"},"modified":"2007-11-12T10:43:15","modified_gmt":"2007-11-12T18:43:15","slug":"web-20-technical","status":"publish","type":"post","link":"https:\/\/www.laurenwood.org\/anyway\/2007\/11\/web-20-technical\/","title":{"rendered":"Web 2.0: Technical"},"content":{"rendered":"<p>The tech\u00adnic\u00adal com\u00adpon\u00adent of Web 2.0 includes <span class=\"caps\">XML<\/span>, Ajax, <span class=\"caps\">APP<\/span>, vari\u00adous pro\u00adgram\u00adming lan\u00adguages, plug-ins and wid\u00adgets, and the <span class=\"caps\">REST<\/span> archi\u00adtec\u00adture. All of these have a role to play in sup\u00adport\u00ading the web sites that incor\u00adpor\u00adate Web 2.0 fea\u00adtures, while many pred\u00adate the Web 2.0 phe\u00adnomen\u00adon. There are far too many inter\u00adest\u00ading tech\u00adnic\u00adal fea\u00adtures for me to talk about all of them in one post, of course, but this post should at least intro\u00adduce you to some of the more inter\u00adest\u00ading acronyms.<\/p>\n<p>\n<img src=\"http:\/\/www.laurenwood.org\/anyway\/wp-content\/uploads\/2007\/10\/technical_cloud.jpg\" alt=\"Technical Cloud\"><span class=\"caption\">Oblig\u00adat\u00adory tag cloud: this one con\u00adtains some tech\u00adnic\u00adal&nbsp;terms<\/span><\/p>\n<p>Devel\u00adop\u00ading Web 2.0 applic\u00ada\u00adtions is easi\u00ader than devel\u00adop\u00ading large enter\u00adprise-style applic\u00ada\u00adtions. The developer toolkits are a lot easi\u00ader to use, and it\u2019s much faster to cre\u00adate some\u00adthing. <a href=\"http:\/\/37signals.com\/\">37 sig\u00adnals<\/a>, who make <a href=\"http:\/\/www.basecamphq.com\/\">Base\u00adcamp<\/a>, amongst oth\u00ader tools, say they put it up in <a href=\"http:\/\/37signals.com\/svn\/archives\/000881.php\">four months with 2.5 developers<\/a> using <a href=\"http:\/\/www.rubyonrails.org\/\">Rails<\/a>, a devel\u00adop\u00adment frame\u00adwork. For developers there\u2019s now a range of lan\u00adguage options, from <span class=\"caps\">PHP<\/span> to C++ or JavaEE, with new\u00ader plat\u00adforms and lan\u00adguages like Ruby and Rails grabbing mind\u00adshare as well. People can pro\u00adgram in the sys\u00adtem they\u2019re com\u00adfort\u00adable with, and although there\u2019s a cer\u00adtain amount of snooty dis\u00adpar\u00adage\u00adment of each lan\u00adguage from pro\u00adponents of some oth\u00ader one, what mat\u00adters in the end is using the right tool for the job. I\u2019ve seen bad code writ\u00adten in Java and good code in <span class=\"caps\">PHP<\/span>, and a sys\u00adtem that does less but does it well is prefer\u00adable to my mind to one that does a lot really badly.<\/p>\n<p><b><a href=\"http:\/\/www.adaptivepath.com\/ideas\/essays\/archives\/000385.php\">Ajax<\/a><\/b> (<a href=\"http:\/\/en.wikipedia.org\/wiki\/AJAX\">Wiki\u00adpe\u00addia link<\/a>) is anoth\u00ader import\u00adant Web 2.0 tech\u00adno\u00adlogy. It\u2019s really a short\u00adhand to describe a bunch of tech\u00adno\u00adlo\u00adgies (<span class=\"caps\">HTML<\/span>, <a href=\"http:\/\/www.w3.org\/Style\/CSS\"><span class=\"caps\">CSS<\/span><\/a>, <a href=\"http:\/\/www.w3.org\/DOM\/\"><span class=\"caps\">DOM<\/span><\/a>, JavaS\u00adcript) that are tied togeth\u00ader, using the browser to cre\u00adate a rich\u00ader envir\u00adon\u00adment by tying in script\u00ading and a way to request inform\u00ada\u00adtion from the serv\u00ader without for\u00adcing the entire page to be reloaded. It\u2019s power\u00adful and inter\u00adact\u00adive and can be much faster than oth\u00ader meth\u00adods of adding inter\u00adactiv\u00adity to the web pages. There are lots of books on the sub\u00adject, which is a reas\u00adon\u00adable indic\u00adat\u00ador of the interest in&nbsp;it.&nbsp;<\/p>\n<p>Since it com\u00adbines a lot of dif\u00adfer\u00adent applic\u00ada\u00adtions, debug\u00adging can be a prob\u00adlem. Some basic rules that I\u2019ve found use\u00adful are: first <a href=\"http:\/\/validator.w3.org\">make sure your <span class=\"caps\">HTML<\/span>\/<span class=\"caps\">XHTML<\/span> val\u00adid\u00adates<\/a>, then <a href=\"http:\/\/jigsaw.w3.org\/css-validator\">make sure your <span class=\"caps\">CSS<\/span> val\u00adid\u00adates<\/a>, then use <a href=\"http:\/\/www.mozilla.com\/en-US\/firefox\">Fire\u00adfox<\/a> with the <a href=\"http:\/\/www.getfirebug.com\/\">Fire\u00adbug exten\u00adsion<\/a> to debug the rest. Once you have that work\u00ading, you can make the changes for oth\u00ader browsers as appropriate.&nbsp;<\/p>\n<p>Poorly writ\u00adten Ajax does have some prob\u00adlems, such as not being able to book\u00admark res\u00adults, or the back but\u00adton not going back to the right place. The big prob\u00adlem is the non-stand\u00adard\u00adized XML\u00adHt\u00adtpRe\u00adquest object in JavaS\u00adcript, the object that lets your page talk to the serv\u00ader and get the right inform\u00ada\u00adtion. The way it works var\u00adies between dif\u00adfer\u00adent browsers and dif\u00adfer\u00adent ver\u00adsions of the same browser (<span class=\"caps\">IE<\/span> 6 to <span class=\"caps\">IE<\/span> 7, for example). Although <span class=\"caps\">W3C<\/span> is start\u00ading to work on <a href=\"http:\/\/www.w3.org\/TR\/XMLHttpRequest\/\">stand\u00adard\u00adiz\u00ading it<\/a>, that will take some time. Anoth\u00ader prob\u00adlem is the \u201cA\u201d in Ajax \u2014 it\u2019s asyn\u00adchron\u00adous, which means that inter\u00adnet latency can be an&nbsp;issue.<\/p>\n<p>These prob\u00adlems can be solved \u2014 there are Ajax toolkits avail\u00adable which hide the XML\u00adHt\u00adtpRe\u00adquest and oth\u00ader browser incom\u00adpat\u00adib\u00adil\u00adit\u00adies, some applic\u00ada\u00adtions have figured out the back but\u00adton and the book\u00admark\u00ading <span class=\"caps\">URL<\/span> issues, the asyn\u00adchron\u00adous issues can be dealt with by break\u00ading the applic\u00ada\u00adtions up into small seg\u00adments which take into account the fact that the oth\u00ader end may nev\u00ader respond. And as a res\u00adult of these toolkits and tech\u00adniques, Ajax is now a major com\u00adpon\u00adent of many web\u00adsites, even those that aren\u2019t for Web 2.0 startups.<\/p>\n<p><b><abbr title=\"REpresentational State Transfer\"><span class=\"caps\">REST<\/span><\/abbr><\/b> is an archi\u00adtec\u00adtur\u00adal frame\u00adwork that explains a lot of why the web is so suc\u00adcess\u00adful. <a href>Roy Field\u00ading\u2019s PhD thes\u00adis<\/a> was the first place where it was codi\u00adfied (and he coined the term). Basic\u00adally the idea is that everything that you can reach on the web should be a resource with a web address (<span class=\"caps\">URI<\/span>) that you can reach with stand\u00adard <span class=\"caps\">HTTP<\/span> verbs, and that will have oth\u00ader URIs embed\u00added in it. There\u2019s more to <span class=\"caps\">REST<\/span>, of course, and I\u2019m sure the pur\u00adists will take issue with my over-sim\u00adpli\u00adfied description.<\/p>\n<p><span class=\"caps\">REST<\/span> is widely used in what I call Ajax APIs \u2014 the APIs that vari\u00adous applic\u00ada\u00adtions have that let people get access to the data. <b>Mash-ups<\/b>, where you take data from one ser\u00advice and com\u00adbine it with anoth\u00ader ser\u00advice, use these APIs all the time. The clas\u00adsic example of a mash-up was to take Craigslist rent\u00adal data and mash it with Google map\u00adping data onto a third web site (<a href=\"http:\/\/www.housingmaps.com\">hous\u00adingmaps<\/a>) without Craig\u00adlist or Google being involved to start with. There are now vast num\u00adbers of mash-ups and lots of toolkits to help you cre\u00adate them. One prob\u00adlem with mash-ups is that the people provid\u00ading the data may not care to have you take it (for example, if they run ads on their sites); the Web 2.0 solu\u00adtion to that is that if you own the data, you need to add more value to it that can\u00ad\u2019t be mashed as eas\u00adily. Amazon has book reviews on top of the basic book data, for example, so people use Amazon as a ref\u00ader\u00adence&nbsp;link.<\/p>\n<p>The concept of mash-ups goes fur\u00adther into plat\u00adforms that sup\u00adport plug-ins and wid\u00adgets. One of the appeal\u00ading things about Face\u00adbook is the fact that applic\u00ada\u00adtion developers can write wid\u00adgets to do vari\u00adous things (from the trivi\u00adal to the heavy-weight) that use the inform\u00ada\u00adtion that Face\u00adbook provides (this has pri\u00advacy implic\u00ada\u00adtions, but more about that in a later post). In a sense, this is about sites (usu\u00adally com\u00admer\u00adcial sites) using the social aspect of Web 2.0 (user-cre\u00adated con\u00adtent) to provide more fea\u00adtures to their users, and is tightly tied to the pro\u00adcess implic\u00ada\u00adtions of Web 2.0 (more about that in the next&nbsp;post).<\/p>\n<p>The <b>Atom Pub\u00adlish\u00ading Pro\u00adtocol<\/b> is fairly recent. <b>Atom<\/b> is the cleaned-up ver\u00adsion of <span class=\"caps\">RSS<\/span> and gives you a feed of inform\u00ada\u00adtion, tagged with metadata such as author, pub\u00adlished date, and title. There is now also a pro\u00adtocol to go with it, designed for edit\u00ading and pub\u00adlish\u00ading web resources using <span class=\"caps\">HTTP<\/span>. It can be used as a replace\u00adment for the vari\u00adous blog-based pub\u00adlish\u00ading APIs, which were used to allow people to post to their blogs from dif\u00adfer\u00adent edit\u00adors, but it\u2019s now obvi\u00adous that it can be used to carry oth\u00ader inform\u00ada\u00adtion as well, and not just for blogs. Since it\u2019s a REST-based <span class=\"caps\">API<\/span> that uses basic <span class=\"caps\">HTTP<\/span>, it can be used for more gen\u00ader\u00adal cli\u00adent-serv\u00ader HTTP-based com\u00admu\u00adnic\u00ada\u00adtion. A good over\u00adview is on the <a href=\"http:\/\/www-128.ibm.com\/developerworks\/library\/x-atompp1\"><span class=\"caps\">IBM<\/span> developer site<\/a>.<\/p>\n<p>One of a series on Web 2.0, taken from my talk at the <span class=\"caps\">CSW<\/span> Sum\u00admer School in July 2007. <a href=\"http:\/\/www.laurenwood.org\/anyway\/2007\/11\/web-20-introduction\/\">Here<\/a>\u2019s the series intro\u00adduc\u00adtion. Com\u00ading up next: <a href=\"http:\/\/www.laurenwood.org\/anyway\/2007\/11\/web-20-process\/\">pro\u00adcess aspects<\/a> of Web 2.0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The tech\u00adnic\u00adal com\u00adpon\u00adent of Web 2.0 includes <span class=\"caps\">XML<\/span>, Ajax, <span class=\"caps\">APP<\/span>, vari\u00adous pro\u00adgram\u00adming lan\u00adguages, plug-ins and wid\u00adgets, and the <span class=\"caps\">REST<\/span> archi\u00adtec\u00adture. All of these have a role to play in sup\u00adport\u00ading the web sites that incor\u00adpor\u00adate Web 2.0 fea\u00adtures, while many pred\u00adate the Web 2.0 phe\u00adnomen\u00adon. There are far too many inter\u00adest\u00ading tech\u00adnic\u00adal fea\u00adtures for me \u2026 <a href=\"https:\/\/www.laurenwood.org\/anyway\/2007\/11\/web-20-technical\/\" class=\"more-link\">Con\u00adtin\u00adue read\u00ading<span class=\"screen-reader-text\"> \u201cWeb 2.0: Technical\u201d<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"","activitypub_status":"","footnotes":""},"categories":[17,6],"tags":[],"class_list":["post-262","post","type-post","status-publish","format-standard","hentry","category-presentations","category-technology"],"_links":{"self":[{"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/posts\/262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/comments?post=262"}],"version-history":[{"count":0,"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/posts\/262\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/media?parent=262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/categories?post=262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.laurenwood.org\/anyway\/wp-json\/wp\/v2\/tags?post=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}