More Related Content Similar to Ajaxworld March 2008 - Jeff Haynie Keynote - Appcelerator (20) More from Jeff Haynie (20) Ajaxworld March 2008 - Jeff Haynie Keynote - Appcelerator2. Jeff Haynie Co-founder & CEO [email_address] blog.jeffhaynie.us twitter.com/jhaynie linkedin.com/in/jhaynie 21. focus on the app (and ultimately, our business requirements) 33. March 31, 2005 (extended to March 2008 - better hurry up and replace) 106. client is for display (doesn’t that sound like the mainframe architecture?) 107. the way we built apps changed based on “the web” 116. massive new way of thinking about the web and apps (a lot was fueled by dot.com bubble) 135. java did change the way we built web sites (and it still continues today) 258. but lots of startups and innovative web companies thinking big 300. <html> <head> <title>Simple Ajax Login Example</title> <script language="Javascript"> function xmlhttpPost(strURL) { var xmlHttpReq = false; var self = this; // Mozilla/Safari if (window.XMLHttpRequest) { self.xmlHttpReq = new XMLHttpRequest(); } // IE else if (window.ActiveXObject) { self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); } self.xmlHttpReq.open('POST', strURL, true); self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); self.xmlHttpReq.onreadystatechange = function() { if (self.xmlHttpReq.readyState == 4) { updatepage(self.xmlHttpReq.responseText); } } self.xmlHttpReq.send(getquerystring()); } function getquerystring() { var form = document.forms['f1']; var username = form.username.value; var password = form.password.value; qstr = ‘username=' + escape(username) + ‘&password=‘ + password; return qstr; } function updatepage(str){ document.getElementById("result").innerHTML = str; } </script> </head> <body> <form name="f1"> <p>username: </p> <input name=”username" type="text”/> <p>password: </p> <input name=”password" type="text”/> <input value=”login" type="button" onclick='JavaScript:xmlhttpPost("/cgi-bin/simple-ajax-example.cgi")'></p> <div id="result"></div> </form> </body> </html> 345. <html> <head> <title>Hello World 2.0</title> <script src="javascripts/appcelerator.js" type="text/javascript"></script> </head> <body> <div on=“r:login.request then show or r:login.response then hide” style=“display:none”> <img src=“images/indicator.gif” /> processing login… </div> Username: <input type=“text id=“username” fieldset=“login”/> Password: <input type=“password id=“password fieldset=“login”/> <input type=“button” value=“login” fieldset=“login” on=“click then r:login.request” /> </body> </html> 360. <!– ExtJS Grid --> <app:ext_grid on="l:show.user.response then execute" property="rows" width="390" title=”Users”> <column property=”first” >First Name</column> <column property=”last”>Last Name</column> <column property=”phone”>Phone</column> </app:ext_grid> <!– Yahoo Calendar --> <app:calendar on="l:show.calendar then execute" title=”My Calendar" inputId=”date”> </app:calendar> <input type=“text” id=“date”/> <img src=“images/calendar.png” on=“click then l:show.calendar”/> 379. Rich Client Service r:login.request {‘username’:’joe’, ‘password’:’****’} r:login.response {‘success’:true} 390. and we have them for Java, Ruby, PHP, .NET, Python and Perl 397. package org.appcelerator.service; import org.appcelerator.annotation.Service; import org.appcelerator.messaging.Message; public class MyService { @Service(request = ”my.request", response = ”my.response") protected void myRequest(Message request, Message response) throws Exception { // service logic here } } 403. it means you can place a native object or array of objects into the response 411. RIA + SOA – that’s good but what about prototyping? 422. no more 100-page requirements documents (that never matches the end application) 440. an entirely new and better way to build the next generation of web applications 441. help us build the best RIA+SOA open source developer community www.appcelerator.org