Dion Hinchcliffe's Web 2.0 Blog
Web 2.0 University

Blog Feed

Subscribe By E-Mail

Enter your email address:

Delivered by FeedBurner



Web 2.0 Expo San Francisco 2008 Speaker

Enterprise 2.0 Conference 2008 Speaker

Web 2.0 Strategies 2008 Speaker

    follow me

    Dion's Facebook Status

    Recent Readers

    Web 2.0 Ajax SOA Power Panel

    Web 2.0, Ajax and SOA Power Panel with Dion Hinchcliffe and Jeremy Geelan
    Click above to watch a SYS-CON Power Panel discussion on Web 2.0, Ajax, and SOA with Dion Hinchcliffe, Jeremy Geelan, and other industry notables including SOA Web Services Journal Editor-in-Chief, Sean Rhody. Taped on Dec 7th, 2005 from the Reuter's TV studio in Times Square.

     

    Public Calendar

    Seven Things Every Software Project Needs to Know About Ajax

    posted Monday, 25 September 2006

    It's been approximately 18 months since Jesse James Garrett fatefully coined the term that would go on to nearly reinvent the face of Web development.  A lot has happened in the last year and a half, including the Web 2.0 phenomenon getting into high gear, the creation or resurrection of many a company building or using rich Internet technologies, and the proliferation of really great dynamic, online software.  It's clear that Ajax as a name, a concept, and a popular browser development technique is here to stay, and our Web applications will never be the same again.

    While most of us know that the Ajax approach was fairly well known before the term ever came about, the timing was apparently just right for the idea of Ajax to capture our imagination and apply such a pithy name to an important new development trend.  And just as powerful browsers, high-speed connections, online software trends, and development tools were reaching the sweet spot that needed to form for Ajax to be popular, so also came the embrace of a world extremely interested in turning their boring, static Web pages into full-blown, sophisticated applications.  Since then, I've heard of or seen literally hundreds of Ajax products, tools, utilities, debated the disruptive potential of Ajax, speculated about how Ajax will be the face of our SOAs , and even watched as RIA technologies in general have risen up that truly complement the few things that Ajax does not do well, such as multimedia.

    The Ajax Road Ahead | Ad Hoc Apps | SaaS | Global SOA

    Along the way, the Web development community has learned a lot about Ajax including its strengths and weaknesses, appropriate uses, and its inevitable foibles.  So to inaugurate the first print edition of a dedicated Ajax print periodical (see below for details), I thought I'd share my perspective on what I think we've learned in our 18 month journey to remake the face of the Web and the browser.  Ajax has indeed helped give us the next major new platform for software, almost certainly forever surpassing our desktop operating systems as place we develop and use most of our software applications, consumer and business both.  As always, this merely represents my opinion...

    What Every Software Project Needs to Know About Ajax

    1.  The Browser Was Never Meant For Ajax.  About a week into your first Ajax serious application you'll discover that Ajax pushes the browser nearly beyond its limits and there are definite lower engineering tolerances to get used to. The fact is, without powerful 3rd party development tools, designing clean Javascript software of any size requires some genuine discipline and effort.  So too does Ajax debugging applications in multiple browsers (a real headache), and doing any serious background processing or threading can require heroic measures, particularly if you're mixing in other components that use the rather limited number of simultaneous timers available.  The good news: Simple Ajax -- sprinkling in a little DHTML -- is much less daunting than Ajax In The Large.  But be warned and be prepared to scale up your level of development and testing effort significantly with each doubling or trebling of your application size.
    2. You Won't Need As Many Web Services As You Think.  I used to think that going the Ajax route required the development of a bunch of new Web services in order to feed the application data and provide a backing store.  In reality, I'm finding a great many projects are quite happy to scrape HTML and/or use plain old HTTP POSTs to existing service endpoints that have no formal Web service structure.  This is further turning the tide towards Ajax by making it very, very easy to "dip your toe" into Ajax development and reuse almost any preexisting HTTP service on the back end instead of SOAP or REST/WOA.  While this can encourage poor architectural choices, it does make very incremental conversion to Ajax almost effortless and turns out to be a natural thing to do, though it can certainly lead to headaches later.
    3. Ajax Is More Involved Than Traditional Web Design and Development.  The loss of HTML user interface conventions, the almost limitless potential for hidden or latent functionality, the programmatic creation of page elements instead of declarative, and other intrinsic aspects of the Ajax approach throw out much of what we know about Web design and development.  Web designers must much more deeply understand the capabilities of the DOM, Javascript, CSS, and how the browser renders graphics, layouts, and elements.  Developers find testing both difficult and tedious.  Though tooling is continuing to improve across the board, it will take years for the industry to develop best practices, lore, patterns, and shared knowledge to make Web application development straightforward.  Huge kudos to folks like Yahoo!'s Bill Scott for trying to fix many of these problems -- particularly the loss of GUI standards -- by actually moving the state of the art considerably forward with things like the Yahoo! UI Design Patterns libraryThe bottom line: Ajax development, at least for now, usually takes quite a bit longer than traditional Web development and requires a higher level of skill.
    4. Ajax Tooling and Components Are Still Emerging and There Is No Clear Leader Today.  Though Dojo is getting one heck of a running start, the race is very far from over.  For instance, the Dojo framework itself is still just at version 0.3.  And close at its heels are an amazing range of tools, frameworks, and component libraries.  Though OpenAjax will make this mosaic of products play nicer, most developers will get deep experience with two or three of them and stick with them. For now, I would say deeply committing to a particular product is usually not the best idea.  Innovation, competition, and market leadership is likely going to bounce around for a while.  In the meantime, be sure to check out script.aculo.us, Prototype, Google Web Toolkit, Yahoo! UI Library, JackBe, Zapatec, Bindows, Nexaweb, General Interface, Backbase, ActiveWidgets, and last but not least Microsoft Atlas. There are many others and I encourage you to look at Max Kiesler's roundup of 50 Ajax frameworks, with many others in the comments (and growing).  Finally, Microsoft's Harry Pierson has diligently taken me to task for my Ajax spectrum comments, noting that Microsoft actually has more serious experience fostering an interoperable component community than just about anyone else.
    5. Good Ajax Programmers are Hard to FindZimbra's Scott Dietzen has lamented recently about the real difficulty in finding good Ajax talent.  See point #3, but building sophisticated Ajax applications requires more computer science skills much more than it does Web design skills.  And I find that experienced programmers tend not to enjoy Javascript programming and debugging. This too shall pass, but not for a few years, and not for a good while in the Bay Area. :-)
    6. One Must Actively Address Ajax's Constraints of the Browser Model.  Though the final result can be very rewarding, Ajax is not a perfect Web development approach and it has a few genuine weaknesses.  One is that it tends to break the model of the Web including preventing users from bookmarking content, breaking the use of the Back button, and more.  Fortunately, smart folks like Brad Neuberg have addressed much of this, as long as you're willing to put out the effort and understand why it's important to recover this functionality.  Ajax also lacks much of what still makes desktop software a strong contender; the ability to run disconnected from the network and access to local disk storage, though Flash local storage and the upcoming Apollo platform can help address this.
    7. Ajax Is Only One Element of a Successful RIA Strategy. As I've written before, the addition of RIA platforms such as Flex, OpenLaszlo, and WPF/E to a RIA strategy is virtually required to properly exploit the range of capabilities you'll want robust online applications to have.  This is particularly true around rich media support such as audio and video -- which Ajax is virtually incapable of -- but even such mundane things as good printing support.  These are all things that the more sophisticated Flash-based RIA platforms really shine at and are easier to program in to boot.  Ajax will increasingly get a serious run for its money from these platforms, particularly as they provide back-end server support for things like server-side push, formal Web services, enterprise environments, and more.

    There are certainly other things software projects should know about Ajax but this is plenty of crucial food for thought.  Looking ahead, we see the growing trend of in-browser mashups which is making the habit of combining pulling together -- entirely on the fly -- sets of Ajax components, Javascript snippets, and Flash widgets from all over the Web into a new set of often user-generated ad hoc software .  Backed by the growing Global SOA , online Ajax components such as Google Maps, that can be referenced over the Web by a line of Javascript, and you have a recipe for an increasingly emphasis on assembly and glue instead of "green field" development of RIAs.  This is an important use of the Web that I've called the "mashosphere " for the lack of a better term, which ushers in a whole new era of dependency and configuration management problems.  The rich palette of software components and high value services on the Web will be a irresistable siren call for developers and expect more and more Ajax applications to be mashups in one form or another.

    But all of this talk of the evolution of Ajax does bring up some exciting new industry events... 

    AjaxWorld Magazine Premier Print Edition - OpenAjaxAnnouncing The Premier Issue of AjaxWorld Magazine - Print Edition 

    OpenAjax Please do pardon the shameless self-promotion here at the end of this piece, but this is also important Ajax community news.  I've been the editor-in-chief of SYS-CON's AjaxWorld Magazine for a while now and to herald the rise of Ajax, we've just expanded it to a full blown print magazine with the premier issue coming out at the all-star AjaxWorld Conference and Expo and Ajax Bootcamp next week in Santa Clara, California.

    For the cover story of the premier print issue, I worked with the OpenAjax Alliance -- a big thanks to IBM's Jon Ferraiolo and Joseph Becker -- to get a premium article series on both the strategic and technical direction of this significant and important new development in the Ajax world.  OpenAjax holds the promise of true Ajax component interoperability, consistent tool support, and much more.  I've urged Microsoft to consider joining -- they're one of the major holdouts -- and they've promised to seriously consider it after they get Atlas shipped, so hopefully we'll see nearly 100% industry support soon.  Thus, the story of OpenAjax has been one of the bigger Ajax stories of the year as the number of vendors on board continues to grow in leaps and bounds, never mind the relatively light hand and welcome avoidance of a heavyweight standards approach to Ajax interoperability.

    I'll be blogging more about Ajax and less about Web 2.0 here in the next week or so as coverage of AjaxWorld and the many exciting announcements and information begins to flow forth.

    Happy Ajaxing and hope to see you next week in California!

    links: del.icio.us    



    AddThis Social Bookmark Button

    1. Bob Tulloch left...
    Tuesday, 26 September 2006 8:54 am

    Over the last six months I've been shifting an application designed for CD ROM onto the web and I'd agree with all six points. The essense of Ajax is simple to execute but creating/finding the controls to create a seamless rich user experience is hard graft. The lack of good Ajax programmers is simply down to the fact that it's very hard. Anyway please look ar http://www.EuropeanHospitalRegist er.com to see the fruits of a self taught Ajax code monkey.


    2. Kurt Cagle left...
    Tuesday, 26 September 2006 11:40 am :: http://www.oreillynet.com/pub/au/203

    Dion,

    This is superb. One of the facets that I see being increasingly important with AJAX is the growth of the component space, something which I talk about fairly extensively in my own talk at the conference. AJAX is, to me, a way point in the evolution of web applications, with increasingly sophisticated third party web components being developed that web developers can introduce cleanly into their application without necessarily understanding what's happening underneath. We're not quite there yet - the notion of declarative binding structures needs to be made more pervasive both in terms of programmatics and in terms of software developer expertise first, but its pretty evident to me that this is where AJAX is going.

    I'll see you at the conference - looking forward to seeing a copy of AJAXWorld magazine, and tap me if you're interested in articles.

    -- Kurt


    3. Brad Neuberg left...
    Wednesday, 27 September 2006 1:10 pm

    Hi Dion! Nice article; thanks for the mention in your post.

    I can't wait till I can grab a copy of AjaxWorld. Back in the day I used to be addicted to JavaWorld, greedily absorbing all of its information when a new one came out. The excitement I used to have for Java has been replaced by the Ajax collection of technologies, so I can't wait to read it. Also email me info on article submission and what you offer for new articles, and also info on upcomming issue 'themes' if you guys are going to have themed monthly magazines like I think the old JavaWorld used to have.

    In terms of the articles content, I would add that its important to seperate Ajax in the Large from Ajax Magic Pixie Dust, as you mention. Ajax Magic Pixie Dust is when you lightly sprinkle Ajax onto an existing site; it does not require as many skills and is appropriate for some things, but there is a limit to the exciting things you can do and the competitive advantage gained. Ajax In The Large is when you bite the bullet and do full scale software engineering on the client side; this is the stuff of Google Maps and GMail. Google Maps just wouldnt have the pizzaz and usability it does if it was a lightly Ajax enhanced MapQuest (remember them? They used to be the king of the roost until Google Maps and its Ajax breakthrough... I even had to look their name up because I had forgotten it).

    I was a Java server side programmer for ten years, and I have to admit that Im having alot more fun with Ajax and JavaScript, so I think traditional programmers can make the transition and even have fun. Decent JavaScript developers are also finally getting good pay; back when Ajax was called DHTML you couldnt even get work doing this stuff -- people would look at you crazy when you brought it up and say "DHTML? Didnt that die a few years ago?"

    Ajax In The Large requires something that most client side folks arent familiar with, but which server side developers are very comfortable with: software engineering.

    Just a real world note on software engineering applied on the client side. I just finished the HyperScope project, which is a re-implementation of parts of Douglas Engelbarts groundbreaking Augment system onto the contemporary web using Ajax. We brought over extensive new hypertext abilities to the web, such as being able to dynamically include pieces of remote web pages right into your page, called transclusions, all using Ajax. We have a whole host of cool new kinds of hypertext, all without having to download a new browser using the power of DHTML and Ajax -- check out here for details: http://codinginparadise.org/weblog/2006/09/douglas-en gelbarts-hyperscope-released.html . I had to have extensive unit tests using JSUnit; a robust architecture using OOP and interface-like design to minimize complexity; things like client-side XPath and client-side XSLT to do the advanced addressing and hypertext in a performant way; and so on. I had to apply traditional performance optimization strategies and partition the software into seperate packages using Dojos packaging to minimize coupling and keep things understandable. I think folks over emphasize that Ajax is hard, but if you use your traditional server side skills when doing Ajax In The Large than you will be fine. JavaScript doesnt make it easy to do some of this because it doesnt have first class support for important programming in the large primitives, but using stuff like Dojos packaging and a standard syntax to connote private class variables, such as preceding them all with an underscore like MyClass._privateProperty, then you will be fine.

    Best,

    • Brad Neuberg


    4. jsghiugs left...
    Saturday, 14 October 2006 2:26 am

    <A HREF="http://ssxinjing.blog.sohu.com/">悯泯之音</A><A HREF="http://ssxinjing.spaces.msn.com/">黑色幽默</A><A HREF="http://blog.sina.com.cn/u/1245104862">心静的白话字</A><A HREF="http://sssxinjing.blog.hexun.com/">最后一口</A><A HREF="http://riji.163.com/weblog/page/xianguovcp">我爱电影</A><A HREF="http://xnianjing.blog.163.com">我爱电影</A><A HREF="http://xxweilai.blog.com/">想想未来</A><A HREF="http://hi.baidu.com/yytiantang">喜剧不俗</A><A HREF="http://ssxinjing.blog.tom.com">尘埃博客</A><A HREF="http://qiubotl.bokee.com">秋菠太老博客</A><A HREF="http://pingpangyuan.tianya.cn/">乒乓博客</A><A HREF="http://tangshi.livejournal.com/">唐诗博客</A><A HREF="http://tianhoo.livejournal.com/722.html">免费手机铃声</A>


    5. Matias left...
    Tuesday, 17 October 2006 1:31 pm :: http://confronte.blogger.com

    Hi! Great post!

    Last week we have laumch our new AJAX enabled site: http://confronte.com.ar It's a price comparison site for Argentina. Hope you like it. Any comment will be apreciatted.

    thanks! matias


    6. Yihong Ding left...
    Thursday, 19 October 2006 6:46 pm

    Hi Dion,

    Very nice article. By the way, have you seen the invitation letter we sent you a week before about organizing a new workshop together? If you have time, please consider it. The deadline of proposal submission is tomorrow.

    thank you,

    Yihong


    7. zhonmgyao left...
    Friday, 20 October 2006 11:35 pm

    <A HREF="http://www.jjzlw.com">尖锐湿疣</A> <A HREF="http://www.zgpqw.com">排铅</A> <A HREF="http://www.hpvzl.com">尖锐湿疣</A> <A HREF="http://www.cnkuaile.com">成人用品</A> <A HREF="http://www.jjzlw.com/jjzl/yyzl/231803.htm">尖锐湿疣治疗</A> <A HREF="http://www.cnaizheng.com">中国癌症网</A> <A HREF="http://www.cnaizheng.com/zl/azzl/feiai/Index.htm">肺癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/weiai/Index.htm">胃癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/ganai/Index.htm">肝癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/shenai/Index.htm">肾癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/shidao/Index.htm">食道癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/zigongjing/Index.htm">子宫颈癌& lt;/A> <A HREF="http://www.cnaizheng.com/zl/azzl/ruxianai/Index.htm">乳腺癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/luanchao/Index.htm">卵巢癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/zhichang/Index.htm">直肠癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/jiechang/Index.htm">结肠癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/pifuai/Index.htm">皮肤癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/jiazhuangxian/Index.htm">甲状 腺癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/yixian/Index.htm">胰腺癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/qianliex/Index.htm">前列腺癌< ;/A> <A HREF="http://www.cnaizheng.com/zl/azzl/pangguang/Index.htm"&g t;膀胱癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/guai/Index.htm">骨癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/biyanai/Index.htm">鼻咽癌</A> <A HREF="http://www.cnaizheng.com/zl/azzl/naoliu/Index.htm">脑瘤</A> <A HREF="http://www.xinyaow.com">癌症</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291824.htm">乳腺癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291723.htm">肺癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291522.htm">胃癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/281617.htm">食管癌</A> <A HREF="http://www.xinyaow.com">肿瘤</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291553.htm">直肠癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291707.htm">结肠癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291714.htm">肝癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291835.htm">宫颈癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291837.htm">脑瘤</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291839.htm">甲状腺肿瘤</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291845.htm">胆囊癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291849.htm">胆管癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291937.htm">前列腺癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291836.htm">白血病</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291833.htm">鼻咽癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/012037.htm">肾癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291951.htm">恶性淋巴瘤</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/291955.htm">皮肤癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/012024.htm">喉癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/012017.htm">舌癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/011718.htm">胰腺癌</A> <A HREF="http://www.xinyaow.com/xinyao/zhongliu/012039.htm">膀胱癌</A> <A href="http://www.cnkang.com">中国康网</A> <A href="http://www.cnkang.com/news/index.htm">资讯中心</A> <A href="http://www.cnkang.com/nrjk/index.htm">男性健康</A> <A HREF="http://www.cnkang.com/nxjk/index.htm">女性健康</A> <A HREF="http://www.cnkang.com/lxjk/index.htm">两性健康</A> <A HREF="http://www.cnkang.com/dzjk/index.htm">大众健康</A> <A HREF="http://www.cnkang.com/myjk/index.htm">母婴健康</A> <A HREF="http://www.cnkang.com/jbdq/index.htm">疾病大全</A> <A HREF="http://www.cnkang.com/zyzy/index.htm">中医中药</A> <A HREF="http://www.cnkang.com/yxzs/index.htm">医学知识</A> <A HREF="http://www.cnkang.com/yaox/index.htm">药学知识</A> <A HREF="http://www.cnkang.com/yaopin/index.htm">药品大全</A> <A HREF="http://www.cnkang.com/zzqk/index.htm">杂志期刊</A> <A HREF="http://www.cnkang.com/sitemap.htm">健康网</A> <A HREF="http://www.cnaizheng.com">癌症</A> <A HREF="http://www.cnaizheng.com/zl/kayw/kazy/Index.htm">抗癌中药</A> <A HREF="http://www.cnaizheng.com">肿瘤</A> <A HREF="http://www.cnaizheng.com/zl/kayw/jnl/Index.htm">胶囊类</A> <A HREF="http://www.cnaizheng.com/zl/kayw/pjl/Index.htm">片剂类</A> <A HREF="http://www.cnaizheng.com/zl/kayw/wjl/Index.htm">丸剂类</A> <A HREF="http://www.cnaizheng.com/zl/kayw/kfyl/Index.htm">口服液类</A> <A HREF="http://www.cnaizheng.com/zl/kayw/sjcj/Index.htm">散剂冲剂</A> <A HREF="http://www.cnaizheng.com/zl/kayw/zjl/Index.htm">针剂类</A> <A HREF="http://www.cnaizheng.com/zl/kayw/wyyl/Index.htm">外用药类</A> <A HREF="http://www.jykjw.com/pifu/niupixuan/index.htm">牛皮癣</A> <A HREF="http://www.jykjw.com/pifu/baidianfeng/index.htm">白癜风</A> <A HREF="http://www.jykjw.com/pifu/yulinbing/index.htm">鱼鳞病</A> <A HREF="http://www.jykjw.com/pifu/zhiyixing/index.htm">脂溢性皮炎</A> <A HREF="http://www.jykjw.com/pifu/tuofa/index.htm">脂溢性脱发</A> <A HREF="http://www.jykjw.com/pifu/bantu/index.htm">斑秃脱发</A> <A HREF="http://www.jykjw.com/pifu/shizhen/index.htm">湿疹</A> <A HREF="http://www.jykjw.com/pifu/yinshibing/index.htm">阴虱</A> <A HREF="http://www.jykjw.com/pifu/paozhen/index.htm">带状疱疹</A> <A HREF="http://www.jykjw.com/pifu/huchou/index.htm">狐臭</A> <A HREF="http://www.jykjw.com/pifu/qingchundou/index.htm">青春痘</A> <A HREF="http://www.cnwenmi.com">中国文秘网</A> <A HREF="http://www.39jy.com">皮肤病</A> <A HREF="http://www.jykjw.com">皮肤病医药网</A> <A HREF="http://www.39jy.com/pifu/niupixuan/index.htm">牛皮癣</A> <A HREF="http://www.39jy.com/pifu/piyan/index.htm">脂溢性皮炎</A> <A HREF="http://www.39jy.com/pifu/bantutuofa/index.htm">斑秃</A> <A HREF="http://www.39jy.com/pifu/baidianfeng/index.htm">白癜风</A> <A HREF="http://www.39jy.com/pifu/yulinbing/index.htm">鱼鳞病</A> <A HREF="http://www.39jy.com/pifu/zhiyixing/index.htm">脂溢性脱发</A> <A HREF="http://www.39jy.com/pifu/yinshi/index.htm">阴虱</A> <A HREF="http://www.39jy.com/pifu/paozhen/index.htm">生殖器疱疹</A> <A HREF="http://www.39jy.com/pifu/pifuxuan/index.htmm">皮癣</A> <A HREF="http://www.39jy.com/pifu/shizhen/index.htm">湿疹</A> <A HREF="http://www.39jy.com/pifu/cuochuang/index.htm">青春痘</A> <A HREF="http://www.39jy.com/pifu/manchong/index.htm">螨虫</A> <A HREF="http://www.cnaizheng.com">中国癌症网</A> <A HREF="http://www.cnkang.com">健康</A> <A HREF="http://www.txboke.com">播客天下</A> <A HREF="http://www.274.com.cn">华东信息网</A> <A HREF="http://www.99yikang.com/pifu/niupixuan/index.htm">牛皮癣</A> <A HREF="http://www.99yikang.com/pifu/baidianfeng/index.htm">白癜风</A> <A HREF="http://www.99yikang.com/pifu/yulinbing/index.htm">鱼鳞病</A> <A HREF="http://www.99yikang.com/pifu/zhiyixing/index.htm">脂溢性皮炎</A> <A HREF="http://www.99yikang.com/pifu/tuofa/index.htm">脂溢性脱发</A> <A HREF="http://www.99yikang.com/pifu/bantu/index.htm">斑秃脱发</A> <A HREF="http://www.99yikang.com/pifu/shizhen/index.htm">湿疹</A> <A HREF="http://www.99yikang.com/pifu/yinshibing/index.htm">阴虱</A> <A HREF="http://www.99yikang.com/pifu/paozhen/index.htm">带状疱疹</A> <A HREF="http://www.99yikang.com/pifu/huchou/index.htm">狐臭</A> <A HREF="http://www.99yikang.com/pifu/qingchundou/index.htm">青春痘</A>


    8. weqw left...
    Wednesday, 27 December 2006 6:36 am

    II http://www.hurtyk.pl II <a href="http://www.pokuje.bez.pl">pokuje bez</a> II wytrzem[/URL] II


    9. qweqw left...
    Wednesday, 27 December 2006 7:23 am

    II http://www.hurtyk.pl II <a href="http://www.pokuje.bez.pl">pokuje bez</a> II wytrzem[/URL] II


    10. Thomas Solar left...
    Sunday, 14 January 2007 3:04 pm :: http://www.heizweb.de

    Good Ajax Programmers are Hard to Find. - i just can agree. normally i am looking for a developer whop will work for me. but until now i didn´t find a good partner for programming with the right price. there are a few good ones but therefore i don´t have the money. but i am sure that more and more people will learn and there will come out more good workers.

    thx for the nice article anyway


    11. roman left...
    Friday, 2 March 2007 9:26 am :: http://fresh-directory.com/

    Thanks, This is a wonderful, insightful and uplifting case of a revealing infrastructure implementation of Open-Source & Free Software. Keep up these useful pieces.