tag:blogger.com,1999:blog-43635600521971269572009-02-21T02:27:01.164ZKusiri Tech BlogMatthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.comBlogger42125tag:blogger.com,1999:blog-4363560052197126957.post-51983829551127380272008-09-17T13:25:00.004+01:002008-09-18T00:23:42.640+01:00Amazon SimpleDB/dev<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__SXO44Cw3ZE/SNGM-d76GzI/AAAAAAAAADg/rgkCzhpfY8Q/s1600-h/logo.jpg"><img style="display:block; margin:30px auto 10px; text-align:center;cursor:pointer; cursor:hand; border:none;" src="http://3.bp.blogspot.com/__SXO44Cw3ZE/SNGM-d76GzI/AAAAAAAAADg/rgkCzhpfY8Q/s320/logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5247130045679016754" /></a>
<p><a href="@matthewpainter%20Thanks%20Matt!%20SimpleDB/dev%20[rocks!%20/%20doesn'twork*!%20/%20whatsthat?]%20(delete%20as%20appropriate%20;-)">Matt</a> has created a local instance of Amazon's <a href="http://www.amazon.com/SimpleDB-AWS-Service-Pricing/b?ie=UTF8&node=342335011">SimpleDB</a>. It allows you to develop for SimpleDB if you don't have a SimpleDB account and helps you reduce the costs of SimpleDB development if you do have a SimpleDB account. Originally enough he has called it "<a href="http://code.google.com/p/simpledb-dev/">SimpleDB/dev</a>". It is an open source project and it is available <a href="http://code.google.com/p/simpledb-dev/">on Google Code</a> today.</p>
<h4 style="margin-top: 30px; margin-bottom: 10px">Develop for SimpleDB without a SimpleDB account</h4>
<p>SimpleDB is still in limited <a href="http://en.wikipedia.org/wiki/Software_release_life_cycle#Beta">beta</a>. You can register for the beta online and Amazon are adding people to the service as capacity becomes available but <a href="http://twitter.com/rjurney/statuses/911575834">not everyone has an account yet</a>.</p>
<p>SimpleDB/dev runs as a server on your local machine and replicates the SimpleDB API as specified in <a href="http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/">Amazon's technical documentation</a>. This means that you don't have to wait for your SimpleDB account in order to write your SimpleDB applications.</p>
<h4 style="margin-top: 30px; margin-bottom: 10px" >Reduce the costs of SimpleDB development (and develop offline)</h4>
<p>Amazon's pay-as-you-go pricing is <a href="http://www.amazon.com/Why-Use-AWS%3F-home-page/b/ref=sc_fe_l_1?ie=UTF8&node=15763371&no=3440661&me=A36L942TSJ2AJA">great for production services</a> (you only pay for what you use). But it makes development expensive: every time you want to test a change in your application-code against SimpleDB, it costs you.</p>
<p>So even if you already have your SimpleDB account, then using SimpleDB/dev means that you can do your development without paying (money) for all your mistakes. Once you know that your code works, deploy to SimpleDB and pay for real usage of your application. Using SimpleDB/dev also means that you can develop for SimpleDB while offline.</p>
<h4 style="margin-top: 30px; margin-bottom: 10px" >The technical bits</h4>
SimpleDB/dev is written in Python and replicates the SimpleDB REST API. SimpleDB/dev implements every SimpleDB query-action and includes a large suite of tests, created from the query examples provided by Amazon. Implementation of the SimpleDB SOAP API is on the list of outstanding things to do. SimpleDB/dev is released under version three of the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU General Public License</a> and contributions to the project are welcome - just contact Matt through <a href="http://code.google.com/p/simpledb-dev/">the Google Code page</a>.
<h4 style="margin-top: 30px; margin-bottom: 10px" >Some background (for my <a href="http://blog.kusiri.com/2008/05/i-do-nt-understand-what-it-is-you-do.html">mum</a> and dad - "Amazon! Don't they sell books?")</h4>
<p>Amazon launched as an online bookstore in 1995 but have become a lot more than that since then. Electronic and many other goods are now sold through the online store and with the advent of the <a href="http://www.amazon.com/Kindle-Amazons-Wireless-Reading-Device/dp/B000FI73MA">Kindle</a>, Amazon have also become a hardware manufacturer.</p>
<p>In 2002 they got into the business of reselling computing - actual computing: processor cycles and storage et cetera. Instead of buying, hosting and managing your own servers, you (if you are an internet company) can have Amazon host and manage your servers for you. And instead of paying upfront for the privilege, you only pay for what you use (with utility computing you get utility bills). </p>
<p>There are a number of different <a href="http://www.amazon.com/AWS-home-page-Money/b?ie=UTF8&node=3435361">Amazon Web Services</a>:</p>
<ul>
<li>a computing service (<a href="http://www.amazon.com/EC2-AWS-Service-Pricing/b/ref=sc_fe_l_2?ie=UTF8&node=201590011&no=3435361&me=A36L942TSJ2AJA">Amazon Elastic Compute Cloud</a>)</li>
<li>a storage service (<a href="http://www.amazon.com/S3-AWS-home-page-Money/b/ref=sc_fe_l_2?ie=UTF8&node=16427261&no=3435361&me=A36L942TSJ2AJA">Amazon Simple Storage Service</a>)</li>
<li>a queuing service (<a href="http://www.amazon.com/Simple-Queue-Service-home-page/b/ref=sc_fe_l_2?ie=UTF8&node=13584001&no=3435361&me=A36L942TSJ2AJA">Amazon Simple Queue Service</a>)</li>
<li>and a database service (<a href="http://www.amazon.com/SimpleDB-AWS-Service-Pricing/b/ref=sc_fe_l_2?ie=UTF8&node=342335011&no=3435361&me=A36L942TSJ2AJA">Amazon SimpleDB</a>).</li>
</ul>
<p>The story goes that Amazon had this huge, web-scale infrastructure to serve the online store, which was under-utilised for most of the year - the run up to Christmas being the exception; this 'Christmas capacity', gave rise to the idea of reselling redundant computing during the rest of the year. I don't know if the story is true but I think that it explains the concept quite well. Anyway, the initiative has taken-off in a big way, and Amazon Web Services now account for <a href="http://www.techcrunch.com/2008/01/30/amazon-earnings-call-details-web-services-use-up-more-bandwidth-than-amazoncom-the-kindle-is-a-hit/">more traffic</a> (in terms of bandwidth) than the retail store.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-5198382955112738027?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com3tag:blogger.com,1999:blog-4363560052197126957.post-73448402404947879492008-08-04T11:56:00.015+01:002008-08-04T15:26:25.138+01:00Marc Benioff and web-suffix inflation<p>On Friday, <a href="http://en.wikipedia.org/wiki/Marc_Benioff">Marc Benioff</a>, CEO of <a href="http://www.salesforce.com">Salesforce</a>, wrote an article for <a href="http://www.techcrunchit.com">TechCrunchIT</a> proclaiming <a href="http://www.techcrunchit.com/2008/08/01/welcome-to-web-30-now-your-other-computer-is-a-data-center/">the arrival of Web 3.0</a>. </p>
<p>In the article, Benioff claims that the next iteration of the web will see increasing numbers of applications being developed on multi-tenant cloud-computing platforms (like his own). He also borrows an argument from <a href="http://en.wikipedia.org/wiki/Vic_Gundotra">Vic Gundotra</a> to say that Web 3.0 applications will not require a compromise to be made between computation, storage and ease of application deployment on the one hand and application accessibility and functionality on the other hand. </p>
<p>Benioff previously talked about Web 3.0 in his keynote at Dreamforce Europe. There he put the story of the evolution of the web in the following terms,</p>
<table style="width: 75%;">
<tr><td>Web 1.0</td><td>Killer internet apps</td><td>Everyone can access</td></tr>
<tr><td>Web 2.0</td><td>User generated content</td><td>Everyone can publish</td></tr>
<tr><td>Web 3.0</td><td>Platforms</td><td>Everyone can innovate</td></tr>
</table>
<br />
<a href="http://www.flickr.com/photos/andrewfogg/2732045580/" title="Web 3.0 - Cloud Computing Platforms as a Service by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3278/2732045580_7083868f54.jpg" width="500" height="268" alt="Web 3.0 - Cloud Computing Platforms as a Service" /></a>
<br />
<br />
<p>Apart from the <a href="http://www.techcrunchit.com/2008/07/21/the-techcrunch-web-tablet-project/">Techcrunch Web Tablet Project</a>, there are only <a href="http://www.techcrunchit.com/2008/07/15/the-new-apple-walled-garden/">two</a> <a href="http://www.techcrunchit.com/2008/07/05/the-mysterious-grey-box-on-gmail/">other</a> articles on TechCrunchIT that have generated more commentary than this one. There is definite resistance amongst commentators towards web-suffix inflation, viewing it as marketing hype. Benioff is obviously not concerned about this - Platform as a Service <span style="font-style:italic;">is</span> a sufficiently significant new development in his view to warrant an increase in the web version number. I am inclined to agree with him although I did enjoy playing with the <a href="http://dack.com/web/bullshit.html">Web Economy Bullshit Generator</a> that I found amongst some of the negative comments. </p>
<p>Of note, the very first comment from <a href="http://www.techcrunchit.com/2008/08/01/welcome-to-web-30-now-your-other-computer-is-a-data-center/#comment-3087">Pete</a>, links to a YouTube video that shows <a href="http://en.wikipedia.org/wiki/Eric_E._Schmidt">Eric Schmidt</a> answering the question "<a href="http://www.youtube.com/watch?v=T0QJmmdw3b0">What is Web 3.0?</a>" </p>
<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/T0QJmmdw3b0&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/T0QJmmdw3b0&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
<br />
<br />
<p>The most novel aspect of Schmidt's answer is his assertion that Web 3.0 applications will be distributed virally, which will be, as he says, "a very different application model". </p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-7344840240494787949?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-3321618780219519352008-07-30T12:40:00.001+01:002008-07-30T12:40:56.399+01:00Fuel Conference: Ryan Carson<p>So...quite a long time ago now (6 weeks) I went to Ryan Carson's <a href="http://www.fuel-conference.com/">Fuel Conference</a>, which was a conference all about marketing with and the marketing of Web 2.0 applications and services. </p>
<p>I recorded some great content that day (pictures, draft blog posts, video) and it is about time that I shared some of that. Writing it all up also allows me to reflect on some of the things that I learnt. </p>
<p>Looking at the blog posts that I drafted on the day, I can't tell where my own comment leaks into my record of what the speakers had to say. I have tried to convey the gist of each speaker's message, in a nutshell, with my own thoughts mixed in - hopefully I haven't misrepresented anyone. </p>
<p>Ryan gave the first presentation, here is what he had to say.</p>
<a href="http://www.flickr.com/photos/andrewfogg/2713735555/" title="Nobody cares about your marketing message by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3105/2713735555_5e0598177d.jpg" width="500" height="433" border="none" alt="Nobody cares about your marketing message" /></a>
<ul>
<li>Nobody cares about your marketing message. </li>
<li>Nobody cares about your company. </li>
<br />
<li>People do care about people: the real people behind your company. </li>
<br />
<li>So...</li>
<ul style="list-style-type: none;">
<li>...be honest</li>
<li>...and be accessible
<li style="font-weight: bold">as a person!</li>
</ul>
<br />
<li>Your customers want to talk to you.</li>
<li>Your customers want to talk <em>with</em> you.</li>
<li>Consider <a href="https://www.wesabe.com/">Wesabe</a>: on the front page of their website is a link inviting you to <a href="http://www.wesabe.com/page/talk">Talk to Marc, CEO of Wesabe</a>. The link takes you to a page with a phone number and the hours that Marc is available to take calls. [I don't know anyone who has talked to Marc this way.]</li>
<br />
<li>In practical terms, how do you be accessible?</li>
<ul>
<li>Use <a href="http://www.seesmic.com/">Seesmic</a>: asynchronous video conversations</li>
<li>Use <a href="http://twitter.com/">Twitter</a>: public instant messaging, status updates with history</li>
<li>Use <a href="http://qik.com/">Qik</a>: video streaming from a (Nokia) phone</li>
<li>Use <a href="http://uservoice.com/">UserVoice</a>: great site for gathering user feedback, [I have used this to give feedback on <a href="http://slimtimer.com/">SlimTimer</a>, which I love]</li>
<li>Use <a href="http://www.facebook.com/">Facebook</a>: social networking site</li>
<li>Use <a href="http://www.plurk.com/">Plurk</a>: Twitter competitor, like Twitter but more visual, supports comments and emotions (?) [username] [is/loves/likes/shares/gives/hates...]</li>
</ul>
<br />
<li>You have a community as soon as you have one person who cares about you.</li>
<li>You should Tweet as often as you have something interesting to say.</li>
<li>Once you open up and become accessible there is no going back.</li>
</ul>
<br />
<div style="display:block; margin:20px auto 20px; text-align:center;" id="__ss_486516"><h3><a href="http://www.slideshare.net/carsonified/the-new-rules-of-business?src=embed" title="The New Rules of Business">Ryan's slides: "The New Rules of Business"</a></h3><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=ryans-fuel-talk-1214463196593972-8&stripped_title=the-new-rules-of-business" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=ryans-fuel-talk-1214463196593972-8&stripped_title=the-new-rules-of-business" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="color:#999999;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">view <a href="http://www.slideshare.net/carsonified/the-new-rules-of-business?src=embed" title="View The New Rules of Business on SlideShare">presentation</a> (tags: <a href="http://slideshare.net/tag/ryancarson">ryancarson</a> <a href="http://slideshare.net/tag/fuelconf">fuelconf</a>)</div></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-332161878021951935?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com1tag:blogger.com,1999:blog-4363560052197126957.post-65458271014754172772008-07-01T11:01:00.014+01:002008-07-03T11:42:18.254+01:00iSalesforce<p>So, a couple of months back, Matt and I went over to San Francisco for Google IO - the Google developer conference. We were also planning to catch up with some of our friends at Salesforce while we were out there and so thought that it would be fun to build some more integration between the two companies' technologies. About a week before we set out, the team sat down for a brainstorming session and we came up with iSalesforce - affectionately named in homage to Salesforce and iGoogle. </p>
<object style="display:block; margin:20px auto 20px; text-align:center;" width="425" height="344"><param name="movie" value="http://www.youtube.com/v/G1c7JabwWzY&hl=en"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/G1c7JabwWzY&hl=en" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>
<p>The idea was to build a customisable desktop / homepage much like iGoogle but within Salesforce using the new Visualforce technology. Here's an outline of some of the things that it can do, </p>
<ul>
<li>Users can add and remove functional components to/from a page and arrange the components on the page via drag and drop</li>
<li>Components can be Google Gadgets or Visualforce pages, which effectively means anything you can display on a web page - including Salesforce dashboards</li>
<li>Different arrangements of components can be saved in separate workspaces</li>
<li>State is saved in Salesforce so that customisations are not lost between sessions</li>
<li>Components are setup and controlled using Salesforce custom objects</li>
<li>Rights and priveleges can be controlled using Salesforce roles and profiles if required</li>
<li>This is all achieved without once having to enter Salesforce application setup</li>
</ul>
<p>After we had started building iSalesforce, and just before we went out to San Francisco, I was browsing the Salesforce IdeaExchange and came across the following two Ideas "<a href="http://ideas.salesforce.com/article/show/72686/Home_Tab_customizable_by_EndUsers_like_iGoogle">Home Tab customizable by End-Users like iGoogle</a>" and "<a href="http://ideas.salesforce.com/article/show/26021/Drag_and_Drop_for_Dashboard_Editing">Drag and Drop for Dashboard Editing</a>" with 490 and 2,910 votes respectively. With custom homepages now available and using the unofficial reports API, iSalesforce could fix both those Ideas. I pointed this out to Mark Trang and Thomas Tobin from Salesforce and they encouraged me to offer iSalesforce as a solution. Neither Idea is on any product roadmap and Ideas are often closed by people other than Salesforce themselves, which is something I didn't know. </p>
<p>You might therefore be reading this post having followed a link from one of those two Ideas. If iSalesforce is something that you would like to use then leave a comment below or email <span style="font-weight:bold;">iSalesforce[at]kusiri.com</span>. Visualforce pages cannot yet be packaged for the AppExchange so we cannot simply release iSalesforce onto the AppExchange. There are, however, other ways of making Visualforce applications available to people and if there is enough interest in iSalesforce then we'll spend some time doing that. </p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6545827101475417277?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com2tag:blogger.com,1999:blog-4363560052197126957.post-55470726113461627852008-06-30T16:12:00.022+01:002008-06-30T17:25:40.411+01:00Bill's last day<p>It was Bill Gates' last day at Microsoft on Friday. We (half) considered wearing black armbands to commemorate the event. </p>
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2625221390/" title="Microsoft homepage on Bill's last day by andrewpeterfogg, on Flickr"><img style="float:left; margin:auto 20px 20px auto;" src="http://farm4.static.flickr.com/3198/2625221390_f053e058cc.jpg" width="250" height="176" alt="Microsoft homepage on Bill's last day" /></a>
<p>The <a href="http://www.microsoft.com">Microsoft</a> home page was almost entirely taken over by the advertisement of a Bill-retrospective. </p>
<br style="clear:both" />
<a href="http://www.flickr.com/photos/47944915@N00/2624398227/" title="Install Microsoft Silverlight by andrewpeterfogg, on Flickr"><img style="float:left; margin:auto 20px 20px auto;" src="http://farm4.static.flickr.com/3066/2624398227_315c3d1064.jpg" width="250" height="176" alt="Install Microsoft Silverlight" /></a>
<p>If you clicked through to watch the videos, then you were taken to an "Install Microsoft Silverlight" page - a nice final touch I thought. Proves that I still haven't installed Silverlight yet. </p>
<br style="clear:both" />
<p>Amongst all of the press around the event my favourite has to be an article by <a href="http://blog.seattlepi.nwsource.com/microsoft/bio.asp#bio18359">Todd Bishop</a>, who reproduced the full text of an email from Bill Gates entitled <a href="http://blog.seattlepi.nwsource.com/microsoft/archives/141821.asp?source=rss">Windows Usability Systematic degradation flame</a> - it is well worth reading. </p>
<p>My message to Bill, <blockquote>"So long and thanks for Microsoft Excel - OneNote is pretty good too."</blockquote></p>
<p>- - - - - - - - -</p>
<p><span style="font-style:italic;">Disclosure: I used to work at <a href="http://research.microsoft.com/">Microsoft Research</a>.</span></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-5547072611346162785?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-11220655858223013182008-06-27T17:44:00.003+01:002008-06-27T17:54:12.186+01:00Salesforce Content<p>I have some outstanding blog posts to catch up with; principally from Ryan Carson's <a href="http://www.fuel-conference.com">Fuel Conference</a> but I also came across this neglected post that I started at the <a href="http://www.salesforce.com/dreamforceeurope/">Dreamforce Europe</a> conference. To explain: I have got into the bad habit of starting blog posts without finishing them. I get the majority of the content down but then fail to finish and publish. I'll have to see what I can do about that.</p>
<p>Anyway, I have some photographs of the Salesforce Content screens and I thought it was worth putting them out there for others to see.</p>
<p><span style="font-weight:bold;">Tim Barker</span>, who is the product manager for Salesforce Content, was presenting and these are some raw notes that I made during the presentation along with some photographs of the screens. </p>
<p>I met Tim last year when we were doing some work for one of the large banks. We were looking at a way of automatically aggregating and managing content to deliver to users in Salesforce. There was no API for Salesforce Content back then, which meant that it was a bit of a non-starter for us - as we needed to dynamically insert content into Salesforce. I asked Tim the API question again at the end of his talk - and unfortunately there is still no API for Salesforce Content. </p>
<p>The Ajax UI is a bit of a departure for Salesforce. And a welcome one at that. I met <span style="font-weight:bold;">Dani Pletter</span>, who was the Lead UI Architect on Salesforce Content, when I was out in San Francisco for Google IO. He is now working on a major redesign of the main Salesforce UI so I think we can expect more good Ajaxy stuff like Content in the main app. We showed him some of the things we have been working on (<a href="http://blog.kusiri.com/2008/05/k-framework-1-zero-configuration-flex.html">K-Framework</a>, iSalesforce) where we have been trying to reshape the way that you can interact with Salesforce. </p>
<p>Tim began his talk by explaining some of the inspiration for the different aspects of Salesforce Content: search with keywords (Google), preview before download (YouTube), tag content (Flickr), filter search results (Expedia), rate and review (Amazon), create custom alerts (Yahoo! Alerts). </p>
<p>The pictures aren't great and I apologise for that but you can see the screen details.</p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2616241858/" title="Salesforce Content - workspace by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3165/2616241858_28d5b2aaac.jpg" width="500" height="335" alt="Salesforce Content - workspace" /></a>
<p>Every user has a <span style="font-weight:bold;">workspace</span> that displays featured content, top content, recent activity, and popular tags. </p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2616241934/" title="Salesforce Content - filters by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3136/2616241934_eddf144910.jpg" width="377" height="500" alt="Salesforce Content - filters" /></a>
<p>It is possible to build <span style="font-weight:bold;">filters</span> to narrow the set of content displayed</p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2615413689/" title="Salesforce Content - preview by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3141/2615413689_34b3e24bfe.jpg" width="500" height="278" alt="Salesforce Content - preview" /></a>
<p>You have a full <span style="font-weight:bold;">preview</span> of the document available to you in the browser before you download it. </p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2616242026/" title="Salesforce Content - version tracking by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3041/2616242026_3d80d42a2e.jpg" width="500" height="268" alt="Salesforce Content - version tracking" /></a>
<p><span style="font-weight:bold;">Version tracking</span> is supported</p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2616242074/" title="Salesforce Content - voting by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3114/2616242074_a897c5d16d.jpg" width="500" height="268" alt="Salesforce Content - voting" /></a>
<p>Content can be <span style="font-weight:bold;">vote</span>d on and <span style="font-weight:bold;">comment</span>s can be added</p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2615413829/" title="Salesforce Content - subscribe to content by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3243/2615413829_fe2848e076.jpg" width="500" height="268" alt="Salesforce Content - subscribe to content" /></a>
<p>Users can <span style="font-weight:bold;">subscribe</span> to a document's feed which will alert them of any changes to the document. It is possible to subscribe to either a workspace or a document and control the frequency of alerts.</p>
<br />
<br />
<a href="http://www.flickr.com/photos/47944915@N00/2615547935/" title="Salesforce Content - tagging by andrewpeterfogg, on Flickr"><img src="http://farm4.static.flickr.com/3005/2615547935_d0a935f3b8.jpg" width="500" height="398" alt="Salesforce Content - tagging" /></a>
<p>Content can be <span style="font-weight:bold;">tag</span>ged. There are three types of tags: open tags (anything goes), guided tags (user can create their own tags or select from the suggested list), restricted tagging (users can only tag content with suggested tags). </p>
<br />
<br />
<p>All of the information about the document is stored in Salesforce. Document workspace membership, for example, is controlled through Salesforce user profiles. It is also possible to obtain feedback and data on content usage. Salesforce Content is available in Customer and Partner portals. </p>
<p>There is no limit to the size of documents that can be uploaded, there is no restriction on bandwidth, there is no restriction on the file types that can be uploaded. Pricing is based on total storage across an org. Uploaded content is handled differently with respect to preview and search <span style="font-style:italic;">et cetera</span> - for example, the text in .doc, .pdf and .html documents is indexed for search. The use of content in workflow and approval processes will come later in the year. </p>
<p>Salesforce content comes from the acquisition of <a href="http://www.koral.com">Koral</a>. Salesforce themselves use Content across their 3,000 users and collated and published about 15,000 documents as part of the initial roll-out.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-1122065585822301318?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-69318880229458395272008-05-30T00:27:00.002+01:002008-05-30T00:39:09.979+01:00Live (Brief) Blog: GWT Extreme!<p><strong>Ray Cromwell (<a href="http://timepedia.org">Timepedia.org</a>)</strong></p>
<p><a href="http://code.google.com/p/gwtquery/">GwtQuery</a> (aka GQuery) is jQuery ported to <a href="http://code.google.com/webtoolkit/">GWT</a>. Sweet! It has some extra features though - compile time selector parsing, and optimisation by transforming into document.querySelectorAll() on Safari 3.1, on Firefox, Opera & older safari it uses the xpath document.evaluate(). On IE <8 it uses DOM & regexps - urgh, but necessary.</p>
<p>Generators - feature of deferred binding. It replaces requested type with generated calss definition, like in Ruby. Nice!</p>
<p>GwtQuery uses annotations and compilation to get a 5:1 code size decrease when compared to jQuery. The code is lean and readable, increadibly impressive. It's being released as an alpha today - definitely having a look at this asap!</p>
<p>Also demoed are a high performance graphics API for GWT, and a chart API - <a href="http://timepedia.org/chronoscope/">Chronoscope</a>. Seeing 1 million rectangles animated in a browser, and 1 million points animated on a graph using javascript is impressive, I have to say.</p>
<p>Syndroid is interesting. It allows you to write gadgets in a restricted API and compile to Dalvik, JS or (in the future) AS3.</p>
<p>An interesting GWT to SWF technique was shown, and although a hack was pretty awesome. I wonder if there's a future in this?</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6931888022945839527?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-18600968324439855572008-05-29T22:29:00.004+01:002008-05-29T22:48:12.869+01:00GWT and Appengine<img src="http://code.google.com/appengine/images/appengine_lowres.jpg" style="float:right"/>
<p>So, Google seems to be missing a trick at IO. Surely with all the GWT stuff and Appengine stuff we've seen, you would imagine that there would be some sense of integration? How about using GWT with Appengine with a python backend? Seems sensible, right? So I'm not the only person who thought this: enter <a href="http://code.google.com/p/python-gwt-rpc/">python-gwt-rpc</a>.</p>
<blockquote>
<p><i>The server side infrastructure for implementing gwt services in python without json. GWT for Google App Engine.</i></p>
<p>This is simple small library, for use both GWT (Google Web Toolkit) and GAE (Google App Engine) technologies together. This is a tool for simple and quick integration between google-app-engine and google web toolkit, without using json as a communication protocol. if you use this library you can write GWT services implementation in Python, with full support of transfer primitive types, custom object types and exceptions objects, with full type translation. This is first code written by me in python :), I'm java developer so maybe I do some wrong. Please report me any problems and suggestions.</p>
</blockquote>
<p>So I asked at the GWT API talk about this, and nothing is timetabled yet, although he said it was a logical step.</p>
<p>The good news is that GWT has some integration with other AJAX Apis, <a href="http://code.google.com/p/gwt-google-apis/">gwt-google-apis</a>.</p>
<blockquote>
<p><i>The Official Google API Library for Google Web Toolkit</i></p>
<p>This package is a collection of libraries that provide access to Google APIs and products to developers building applications with the Google Web Toolkit (GWT).</p>
<p>Initially, we are providing support for Google Gears, the recently-launched developer product that extends the browser to allow developers to make web-based applications function even while offline.</p>
<p>We are planning to add support for other Google APIs, but there are many APIs to support, so this will not happen overnight. If you'd like to get involved building support for your favorite Google API, please read the Making GWT Better guide, and then drop a note on the GWT Contributor Forum..</p>
</blockquote>
<p>We saw some gadget, gears and maps examples. Looks cool!</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-1860096832443985557?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com2tag:blogger.com,1999:blog-4363560052197126957.post-30792553030450015752008-05-29T21:32:00.002+01:002008-05-29T21:53:26.529+01:00Live Blog: Inside the Android Application Framework<img src="http://www.mytago.com/gfx/7538c789ce7b47395c5b1e7cb882bf00.jpg" style="float:right"/>
<p><strong>Dan Morrill (Google)</strong></p>
<p>Android is not just a framework - it's a complete OS. </p>
<p>An android APK is an android package, which is a collection of components. Components share a set of resources. An "Activity" is a discrete chunk of functionality. A task is a collection of activities. Activities are an encapsulation of a particular operation, and are implemented as a concrete class in the API. They run in the process of the APK which installed them. A task is a runtime record of a sequence of activities, which has a UI history stack - they are what users on other platforms know as "applications".</p>
<p>Android processes are linux processes. 1 Process per APK, 1 thread per process - by default. All (most) components interleave events into the main thread. A process is strated for a given user ID when needed - binding to a service, starting an activity, binding to a contentprovider, etc. Process keep running until killed by the system, possibly to free up memory.</p>
<p>Activities has several states, and lifecycle methods are called upon transitions. There are three general phases:
<ul>
<li>
Starting up
<ul>
<li>onCreate() : first method called during lifetime</li>
<li>onStart()/onResume() : signals that execution is beginning</li>
<li>onResume() : signal that a pause has been undone - you are the top level app</li>
</ul>
</li>
<li>Normal execution
<ul>
<li>onFreeze() : save UI state</li>
<li>onPause() : loss of focus and possible impending shutdown</li>
</ul>
</li>
<li>
Shutting down
<ul>
<li>onStop()/onDestroy() : final shutdown and process termination</li>
<li>Not guaranteed to be called</li>
</ul>
</li>
</ul>
</p>
<p>Each thread has a looper to handle a message queue. Events from all components are interleaved into Looper. Loopers cannot accommodate multi-threaded access. They are designed to play nicely with MessageHandlers. </p>
<p>Views use Loopers messages to fire events. Since Loopers are 1:1 with threads the view tree is too.</p>
<p>There are two ways to start a service - explicitly, until explicitly shut down, or implicitly, until the last client unbinds.</p>
<p>Processes are spawned by the special "Zygote" process. Process + pre-warmed Dalvik VM == responsiveness. Process runs under userID unique to system - process + userID == security.</p>
<p>Each application has a unique userID, and each has direct access only to its own data. Other apps resources are available only via defiend APIs that are explicitly exposed.</p>
<p>All this can be confusing, but it's for the noble goal of speed. Serialization is slow, as are memory transfers - so CPU is not the bottleneck.</p>
<p>Process management is transparent to code, almost always. Lifecycle is seamless, but data sometimes isn't.</p>
<p>Binder is a general process IPC mechanism. It's implemented as a kernel module and a system lib. There are generally two entry points: Bundles and Parcelables. A parcelable is a class which can marshal its state to something Binder can handle. Standard Java serialization has semantics parcelables wouldn't use. </p>
<p>Bundles are type safe maps - containers of primitives. Simple data passing APIs use Bundles. Used for onFreeze().</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-3079255303045001575?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-44237243632839113962008-05-29T20:26:00.003+01:002008-05-29T20:30:45.897+01:00AJAX Apis<p>Just a tiny post to draw attention to all the different <a href="http://code.google.com/apis/ajax/">AJAX APIs</a> that google now offers. I'm particularly fond of the new <a href="http://code.google.com/apis/ajaxlibs/">libraries api</a>, which allows you to get libraries from Google's servers, like jQuery - with smart versioning, caching, etc.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-4423724363283911396?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-65933476452672388202008-05-29T20:07:00.007+01:002008-05-29T20:17:30.637+01:00Flash/Flex tools from Google<img src="http://www.oclc.org/research/holidaycard/images/flex-logo-small.jpg" style="float:right"/>
<p>One thing that is worth bringing your attention to from IO is that the big G and Adobe have made public a set of libraries for ActionScript 3, i.e. Flash CS3 or Flex 3, called <a href="http://code.google.com/p/as3corelib/">corelib</a>.</p>
<blockquote>
<p>The corelib project is an ActionScript 3 Library that contains a number of classes and utilities for working with ActionScript 3. These include classes for MD5 and SHA 1 hashing, Image encoders, and JSON serialization as well as general String, Number and Date APIs.</p>
</blockquote>
<p>You can also see <a href="http://as3corelib.googlecode.com/svn/trunk/docs/index.html">the docs</a> online, and there are <a href="http://code.google.com/p/google-ajax-examples/">some examples</a> on code.google too.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6593347645267238820?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-63031965821640780012008-05-29T18:08:00.001+01:002008-05-29T18:13:16.879+01:00Live blog: Keynote: Imagination, Immediacy and Innovation... plus a little glimpse under the hood at Google<img src="http://www.techcrunch.com/wp-content/googleio_logo.png" style="float:right"/>
<strong>Marissa Mayer, Vice President of Search and User Experience</strong><br/><br/>
First off we get a montage of artist themes for iGoogle. Why is it interesting for developers? Because it was built on top of the iGoogle API. <br/>
<br/>
Google have been focussing on "the ordinary and the everyday", e.g. iGoogle. Gadgets are a new form of distribution and a new way to reach people. What are the most used app on the web? Social networking, blogs, news, search, homepages and mail. <br/>
<br/>
Occram's Razor for design: the simplest design is probably right. Why is the Gogole homepage so simple? "We didn't have a webmaster and I don't do HTML" - Sergey. When they tested the design, the users didn't do anything for minutes. They asked why - "I'm waiting for the rest of it". In 99 this style of website was unheard of. <br/>
<br/>
When you do a query today, you hit around 700 servers. Andrew has videoed the details about what happens here with the Google infrastructure, so I refer you to that! Suffice to say that the point is that the users don't need to know the complexity of doing a search query, just the be presented with the easiest interface, validating Occram's Razor for logic.<br/>
<br/>
Google run bucket tests on tiny differences, and through metrics and stats they can say which one is a better user experience. The example is the whitespace under the logo on the search results page. Metrics are interesting, using "user happiness" through repeat searches, etc. Turning design into a science.<br/>
<br/>
"If I had asked people for what they had wanted, they would have said faster horses." - Henry Ford<br/>
<br/>
One experiment saw a 20% fall in searches when the latency doubled. Similarly, in Google maps, when they decreased the page size from 110K to around 60K, they had a 30% increase. YouTube shows users uploaded videos straight away, whereas Google Video makes people wait 24-48 hours, which is one reason that YouTube is more successful, with a steeper learning curve.<br/>
<br/>
With search the feedback loop is quick, so people learn quickly, going from novice to expert in only a month or so. It's important to understand the learning curve and to make the experience great for new users and experts, not catering to either to the detriment of the other.<br/>
<br/>
Its incredible to think about the sped of advancement. Mobile phones, for example, in the last 10 years. <br/>
<br/>
Cross language information retrieval is a big thing for google. The end game is to make searching independent of language, and they're starting to get there with Google Language search.<br/>
<br/>
"A healthy disrespect for the impossible." - Larry Page. Search is an impossible problem to solve perfectly, but you can keep improving. Disambiguation is a great example - does dr mean doctor, drive or Dominican Republic? Google Health is another example of an impossible problem, but even by approximately solving it you can make a huge difference in people's lives. Google Book Search too. It's important not to get caught up in the difficulty - divide and conquer.<br/>
<br/>
"Be scrappy, revel in constraints."<br/>
<br/>
An interesting constraint is translation of Google. They tried to use a professional services firm, but this failed. They ended up using user volunteers to help translate Google, through a link on the preferences page... They now have 250K translators! There is an easter egg on the translate - the language "Bork bork bork!", as spoken by the Muppets' Swedish chef. They have over a million page views in this language every day!<br/>
<br/>
Google brainstorm ridiculous problems to help the creative juices keep flowing. For example, "Should web build a suspension bridge between two buildings?" Such brainstorms brought around Street View, and Book Search. The imagination is a muscle, and this, and the 20% time exercises it, and keeps Google healthy.<br/>
<br/>
"Do not let the urgent drown out the important."<br/>
<br/>
Google does read your emails about features and problems! They listen to this feedback, as well as the automated feedback.<br/>
<br/><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6303196582164078001?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-62042415863942735182008-05-28T23:13:00.007+01:002008-05-29T08:28:04.770+01:00Using GWT to Build a High Performance Collaborative Diagramming Tool<img style="margin:0px auto 10px;float:right; width:40%" src="http://www.itmill.com/res/images/toolkit-gallery/gwt-extend.png" border="0" alt="" />
<h2>Alex Moffat and Damon Lundin (Lombardi)</h2>
<p>JavaSript is the scripting language that sits in your web browser and enables many of the interactive web applications that we all know and love. </p>
<p>Google, however, don't write very much JavaScript. They have written a tool instead called <a href="http://code.google.com/webtoolkit/">Google Web Toolkit (GWT)</a> that writes JavaScript out of a Java application. This means that Google developers can write their web applications in Java rather than JavaScript, which is a good thing. Java and JavaScript are very different. </p>
<p>I'm not the best person to explain the differences between JavaScript and Java but I'll give it a go: Java is a robust, strongly typed, compiled, language that can be written and debugged in a mature Integrated Development Environment (IDE) like Eclipse or Netbeans. JavaScript is...err...none of those things. More importantly, when writing JavaScript your JavaScript code may run differently depending upon the browser that your user is running - writing JavaScript that is compatible across all the different flavours of browser can be painful, to say the least. </p>
<p>Because of GWT, Google developers don't have this problem. They just have to write their Java application and GWT handles the rest. Rather than just being smug and keeping this to themselves, they have made GWT available to the community under an open source license (the <a href="http://www.apache.org/licenses/">Apache license</a>) and are actively promoting and evangelising about it. </p>
<p>This may seem somewhat obscure but it is going to result in a massive efficiency saving in the development of web applications. Which is good news for us all. </p>
<p>One topic not addressed in anything that I saw today is how GWT is going to fit into the AppEngine strategy. </p>
<p><a href="http://www.lombardisoftware.com/">Lombardi</a> have created a SaaS diagramming tool (a sort of Visio for the web) called <a href="http://www.lombardisoftware.com/bpm-blueprint-product.php">Blueprint</a> using Google Web Toolkit (GWT). The application is written entirely in JavaScript generated by GWT. </p>
<object width="425" height="355" style="display:block; margin:0px auto 10px; text-align:center;"><param name="movie" value="http://www.youtube.com/v/4ww_R6Ep7Gw&hl=en"><param name="wmode" value="transparent"><embed src="http://www.youtube.com/v/4ww_R6Ep7Gw&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6204241586394273518?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-78145018624345001902008-05-28T21:24:00.002+01:002008-05-28T21:27:27.147+01:00Rapid Development with Python, Django and Google App Engine<img src="http://www.awkwardalliteration.com/wp-content/uploads/2007/09/django.png" style="float:right; width:25%"/>
<strong>Guido van Rossum (Google)</strong><br/><br/>
Best practices for using AppEngine with Django. Appengine does one thing well: runs webapps. It only handles HTTP requests: think of it as an RPC server. Resources are scaled automatically - requests may go to the same process, serially, or different processes, in parallel or serially. There is a highly scable datastore based on BigTable - not SQL, there are no joins.<br/>
<br/>
An application is a directory and everything underneath it (symlinks are followed!). Application metadata is in a app.yaml file, which maps URL patterns to request handlers, and seperates static files from program files. The SDK emulates the deployment environment.<br/>
<br/>
Request handlers are invoked like CGI scripts. Environment variables give request parameters, and response is written to stdout. CGI is not slow (in this case)! Modules remain loaded, and main() is called for each request. Can use module globals for caching. CGI doesn't mean clumsy! WSGI support is layered on top of CGI.<br/>
<br/>
Some talk now about app engine project setup, although I prefer the <a href="http://code.google.com/p/google-app-engine-django/">google-app-engine-django</a> project boilerplate. One interesting point is that Django 0.96.1 is preloaded, which is pretty old, and that there are some slight differences between local and deployment.<br/>
<br/>
One interesting point about main.py is that here you can arrange to have your version of Django loaded, to replace the old 0.96.1 version bundled in. Also, in settings.py you can set DEBUG to true when os.environ['SERVER_SOFTWARE'].startsWith('Dev').<br/>
<br/>
Aha! He recommends <a href="http://code.google.com/p/google-app-engine-django/">google-app-engine-django</a> too! :o)<br/>
<br/>
Unit tests: you have two options. DocTests or unittests. DocTests are string literals which define a sequence of console command - result conditions. Unittests are modelled on JUnit. You can created fixtures to be loaded into the datastore also.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-7814501862434500190?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-21785808825040145342008-05-28T20:45:00.003+01:002008-05-29T08:28:48.945+01:00Building an Android Application 101<h2>Speaker: Jason Chen</h2>
<br />
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://code.google.com/android/images/emulator-hvga-p.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://code.google.com/android/images/emulator-hvga-p.png" border="0" alt="" /></a>
<p>Poor Jason Chen, he wasn't having any luck with his presentation. About 15 minutes in, Eclipse hung on him and caused his Mac to 'grey-screen'. He had to reboot and then Eclipse literally took about five, maybe ten minutes to restart. </p>
<p>Anyway, he got going again in the end. He did a walk through of how to build an Android application using the Android plugin for Eclipse and the Android emulator. (See my <a href="http://blog.kusiri.com/2008/05/google-io-keynote.html">earlier post</a> for the keynote demo of Android.</p>)
<ul>
<li>XML is used to control the layout of the application.</li>
<li>Android applications have the concept of activities and intents. An application can perform a number of activities and can express a number of intents. When an application expresses an intent, for example - "view a photo", the Android system handles the matching of the application expressing an intent to an application that can perform a relevant activity. There is a loose coupling between intents and activities. </li>
<li>The matching of applications expressing intent with applications able to satisfy those intents with relevant activities is all transparent to the end user. </li>
<li>Storage and persistence options<ul>
<li>Preferences</li>
<li>Flat files - file system access</li>
<li>SQLite - full SQL database for your application if you are using relational data. </li>
<li>Also possible to implement your own content provider</li></ul></li></ul><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-2178580882504014534?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-40930858491652565802008-05-28T20:30:00.003+01:002008-05-29T08:31:01.646+01:00Extend the reach of your Google Apps environment with Google APIs<h2>Speakers:Jackie Bodine, Ryan Boyd (Google) and Ron Hess (Salesforce.com)</h2>
<br />
<p>I've just witnessed Ron Hess do a demo of the what looks like the latest incarnation of the Salesforce paid-time-off application - that old favourite. It now has Salesforce-server to Google-server calendar integration demonstrating how you can use the Google APIs to access Google services from your own web application. Steve Fisher, Senior Vice President at Salesforce, originally wrote the code that runs this application. </p>
<p>Update: I just learnt from Ron that, while related, this was not in fact the Paid Time Off application.</p>
<br />
<object width="425" height="355" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"><param name="movie" value="http://www.youtube.com/v/J18zXjGpvgo&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/J18zXjGpvgo&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-4093085849165256580?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-37412071646415711352008-05-28T20:11:00.004+01:002008-05-28T21:25:59.369+01:00Live blog: Extend the Reach of your Google Apps Environment with Google APIs<img src="http://currentedtech.com/wp-content/uploads/2008/03/google_apps6464.jpg" style="float: right; width:25%"/>
<strong>Jackie Bodine, Ryan Boyd (Google) and Ron Hess (Salesforce.com)</strong><br/><br/>
"Radish" device is shown off first, a Google 20% project. An entirely wireless solar-powered schedule display, that retrieves the calendar events for the room from the Calendar API. Nice project!<br/>
<br/>
What APis are available? Calendar, Contacts, Documents List, Spreadsheets, provisioning, migration, reporting and single sign on. AtomPub is used, with GET, POST, PUT and DELETE, although Google extends this with a data model and batch mode. A standard atom feed is shown, with some extra fields, with the gd prefix. <br/>
<br/>
Google Calendar Sync (for Outlook) is an example of an app built on top of the APIs. You can Create Edit, Delete Calendars and Events, as well as change your ACLs. <br/>
<br/>
Two types of auth, ClientLogin (user/pass) and AuthSub (web token).<br/>
<br/>
There is a very simple Api, three lines of code are all that are required in dotNet to upload a document. There are client libraries for dotNet, Java, Python and objectiveC. There are more details on code.google.com.<br/>
<br/>
Another example is the Google Email Uploader, built on top of the email migration Api.<br/>
<br/>
Some talk now about <a href="code.google.com">code.google.com</a> and the resources that are available.<br/>
<br/>
Spreadsheet API capabilities are both by cell and by row. <br/>
<br/>
JSON-in-script output format is used by the APIs - a callback is made when the data is available in JSON format. If the data is only available to people from your domain, you can write a proxy that will authenticate with a non-user account.<br/>
<br/>
Some talk now about appengine, and using the python library. Authentication ties in nicely with apps.<br/>
<br/>
Ron Hess is up now to talk about connecting platforms in the cloud. Some hype for force.com first :o) Ron talks about the collaboration between Google and Salesforce, bringing Google Apps into Salesforce. Salesforce use Google Apps internally, and also use an HR app internally. They want to track vacation requests in force.com and the calendar event in Google. Ron shows how when you change time off in the force.com platform, the change ripples through to the Google calendar. He then shows the Apex code used to create the integration.<br/>
<br/>
Last of all is the Google Solutions marketplace, which allows you to advertise tools you have built that use Google apis.<br/>
<br/><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-3741207164641571135?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-66088465373454652152008-05-28T19:30:00.002+01:002008-05-29T08:30:03.507+01:00Google IO Keynote<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__SXO44Cw3ZE/SD3_lgvdlsI/AAAAAAAAAC4/X1SqePXfnTA/s1600-h/IMG_1581.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/__SXO44Cw3ZE/SD3_lgvdlsI/AAAAAAAAAC4/X1SqePXfnTA/s320/IMG_1581.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5205597764219410114" /></a>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__SXO44Cw3ZE/SD3-twvdlrI/AAAAAAAAACw/tGzEFJqwpLI/s1600-h/IMG_1587.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/__SXO44Cw3ZE/SD3-twvdlrI/AAAAAAAAACw/tGzEFJqwpLI/s320/IMG_1587.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5205596806441703090" /></a>
<p>So Matt and I are both at Google IO (Google's developer conference) today and tomorrow and are both going to be live blogging the event. Matt is quicker at getting his content up but I've got a video camera...</p>
<p>On a related note, I used Apple iMovie for the first time today. It has got automatic upload to YouTube, a very useful feature. I expect that it is using the YouTube API, one of the Google APIs that is being discussed today.</p>
<p>The keynote is being chaired by Vic Gundotra, Google's Vice President of Engineering. Arrington had a <a href="http://www.techcrunch.com/2008/05/27/3000-developers-to-converge-on-google-io-tomorrow-heres-what-to-expect/">preview of the main announcements</a> last night. </p>
<p>Gundotra began with the words "What does Google have to do with developers?" The answer is that Google wants to make the internet better for developers. The internet is Google's ecosystem (I thought he said 'geekosystem' but I must have misheard him) and making the internet better is good for Google. Making the internet better will allow developers to write better web applications. Better web applications attracts more users onto the internet. More users on the internet means more Google searches, which in turn means more advertising revenue for Google. Simple. Next question. </p>
<p>The most exciting part of the key note for me was the demonstration of Android. I apologise for the camera shake but the demo is well worth seeing. Look out for the integration of Google Street View with the on-phone compass (towards the end of the video).</p>
<object width="425" height="355" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"><param name="movie" value="http://www.youtube.com/v/xTIfGCLKIXA&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/xTIfGCLKIXA&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>
<p>Other announcements were the release of the latest version of the Google Web Toolkit (see <a href="http://blog.kusiri.com/2008/05/using-gwt-to-build-high-performance.html">post</a>) and the general availability of the AppEngine. Pricing for the AppEngine was also announced. It will remain free to use for the first 500MB of storage and the first 5 million pages views. </p>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__SXO44Cw3ZE/SD4AmQvdltI/AAAAAAAAADA/m1nY4VYe85A/s1600-h/IMG_1602.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/__SXO44Cw3ZE/SD4AmQvdltI/AAAAAAAAADA/m1nY4VYe85A/s320/IMG_1602.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5205598876615939794" /></a><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6608846537345465215?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com1tag:blogger.com,1999:blog-4363560052197126957.post-61664447715720105972008-05-28T19:25:00.005+01:002008-05-28T19:39:11.930+01:00Live blog: Google IO 2008 Keynote<img src="http://www.google.com/intl/en/press/images/io_logo_yellow.jpg" style="float: right"/>
<strong>Vic Gundotra, Vice President, Engineering</strong><br/><br/>
In a room packed of Google advocates, with terrible wifi access. Apologies first from Vic for the terrible queuing situation and the lack of seats in the auditorium. People sitting on the floor will be a frequent sight I feel.<br/>
<br/>
What has Google got to do with developers? Moving the web, and web development, forward is critical to the entire ecosystem, and Google is committed to it. Vic is going to talk about how Google is going to facilitate this. <br/>
<br/>
Back to the era of the mainframe. Powerful computing for its day, but not accessible. General public didn't have access to the mainframe, and even people who had access had a slim slice. Deployment of software was easy - dumb terminals. <br/>
<br/>
The PC era came about. The power of the mainframe was given up, but the computing power was accessible. Deployment, however, was a nightmare. Dumb terminals, to powerful client.<br/>
<br/>
The emergence of the Netscape browser gave us the web. Deployment became easy again. But we went back to a dumb terminal, and the power of the PC was lost. Clouds are required to run the apps like Amazon. This is out of the reach of most developers, so the massive compute power becomes inaccessible again. <br/>
<br/>
How can we get round this? Well, make the cloud more accessible, and the client more powerful. (Can anyone say Appengine & Gears?) Connectivity has to be kept persuasive. There is an explosion of conenctivity at the moment - just look at mobile broadband.<br/>
<br/>
But what are Google's motives? There are two reasons. Google was born in the era of the web, it was the only platform it has ever known. A standard by concensus. From standards like HTML and CSS grew apps upon apps. There is a debt due to Open Source software. Google was only able to get where it is because it stood on the shoulders of OSS giants, and it owes OSS. Secondly, it benefits Google economically. The richer the web, the more users, the better the experience, the more Google benefits. A healthy ecosystem is good.<br/>
<br/>
<strong>Making the client more powerful.</strong><br/>
<br/>
Why did it take so long for XmlHttpRequest to become ubiquitous? Why so long for HTML5? We need to speed up the evolution! So here we have it: Gears. Think of Gears as a bleeding edge HTML5 implementation. Google is deeply committed to HTML5, and hints that Gears will become redundant when HTML5 is adopted widely.<br/>
<br/>
SVP of Engineering from MySpace is introduced to demo. So it's a demo showing how they can take the mail facility of MySpace offline, and add some searching functionality and some added sorting. Simple to develop, and simple to use, but big benefit. It's available now. <br/>
<br/>
<strong>Keep it persuasive.</strong><br/>
<br/>
The marketplace for mobile apps is very fragmented right now - at least 14 different platforms to build for. Google believe the browser will be the entry point for many applications in the future - but not now due to hardware limitations. So Google developed Android, an open source stack for mobile devices. Steve Horowitz, the engineering director for Android is up now to talk about the platform. Android is a complete stack to build a mobile phone, that they will give away to the mobile market. A WebKit browser is built into Android, as well as key apps (think address book, etc.). They have a concept called "views" which are built upon browser app (e.g. Maps) which you can extend to make your own apps. Now a demo of the phone. Wow! Looking good. Icons are nice, usability seems excellent. They have a "spaces" like concept with the background, with drag n drop gadgets. You can created new gadgets that are shortcuts. They have very similar gestures to the iPhone. A maps demo, very similar to iPhone again, and a pacman game. Street view is demoed next which is nice. But wait! A compass mode, where it will change the direction of the view based on your direction. Nice!<br/>
<br/>
<strong>Making the cloud more accessible.</strong><br/>
<br/>
Round of applause for Amazon for opening up their infrastructure first - taking the lead. And Google followed, opening the infrastructure in the form of Appengine. Appengine takes away the pain of sysadmin stuff - setting up Apache, MySQL, Linux, etc. etc - and also sorting out the hosting. The design goals were to make it easy to create the app, scale the app, and free to get started. <br/>
<br/>
So a little demo of Appengine. You develop locally with the SDK, then deploy, and then launch. If you've designed it with scale in mind, you can scale with no further work to millions of users. Some examples of apps built on appengine so far. TweetWheel, and laterloop are the examples used, along with an app devloped oin a weekend to help in the aftermath of the China quake. <br/>
<br/>
Areas of work coming up: offline processing, rich media support, additional infrastructure services. <br/>
<br/>
Two new APIS for AppEngine announced! A memcache API and a image manipulation API. Also the first guess at billing costs. Always going to be free to start with, but beyond that 12c/core-hour, 18c/GB-month, 13c/GB-transferred out, 18c/GB-transferred in.<br/>
<br/>
AppEngine is now open to everyone! Brilliant news for everyone :o)<br/>
<br/>
<strong>Make it more accessible.</strong><br/>
<br/>
Mark Lucovksky, Technical Director of GData/AJAX APIs is up. Talking about accessing (read/write) the user created data from Google services using Atom through the GData API, and AJAX RESTful APIs. So a demo up using a blogger blog. First up: add a YouTube video. Javascript example, very nice result. The videos come up in a column, with a lightbox style when you click on one. You can dynamically search for videos in page too. An RSS feed is next, in two forms - slideshow and text. A news ticker example follows. All customisable using CSS that is publicly documented. Yet another example, using a celebrity map! Possibly the most interesting is the final demo, the translate API, allowing you to translate any part of your page dynamically.<br/>
<br/>
<strong>Making development easier.</strong><br/>
<br/>
Talking about Google Web Toolkit here (GWT). GWT is a Java => HTML + JS compiler essentially, with a set of tools to enable this. Bruce Johnson, Engineering Manager for GWT is up. GWT gives you the leverage to make JS applications happen. One of the best features of GWT is that it compiles HTML/JS to be compatible with all major browsers. GWT has a hosted mode, where you can use the app in a development mode. Just to underline if you don't know, GWT is so cool. It makes Java relevant again for the web. <br/>
<br/>
Blueprint is the example of GWT used here, which is a diagramming tool. Impressive tool, feels like a desktop app.<br/>
<br/>
GWT 1.5 RC is available today! Java 5 language support is now available :o)<br/>
<br/>
One important point is that the resultant javascript does not have to be maintable, as the Java is. This means that the compiler can go to extreme lengths to create fast code. <br/>
<br/>
800 Open Source contributors helped make this possible. Thanks to them!<br/>
<br/>
<strong>Making the web more social.</strong><br/>
<br/>
Google is responding to the consumer's desire to be more social online, as seen in the last 5 years. David Glazer from OpenSocial is up. Two things are coming together to make the social wave crest. First is consumer desire. Second is that the web is enabling. Taking the same idea the fuelled the web, connecting documents, to people. It will take three things: Identity/OpenID, Authorization/OAuth, Apps/OpenSocial. What is OpenSocial? A set of APIS, a reference implementation, and a community. Last night OpenSocial Spec 0.8 was pushed last night. Shindig is an Apache project, which is a reference implementation for OpenSocial which is currently being developed. <br/>
<br/>
Nat Brown CTO of iLike is up to talk about OpenSocial. iLike is a music social discovery service. They realised that they wanted to focus on the music, not on the social network. Showing an example of an OpenSocial gadgets in hi5. Talking about how they have such gadgets on myspace, orkut also. Reaching many more users now, through this application syndication.<br/>
<br/>
Back to David. Growth from 0 users last November, and there is now a reach of 275M users, with 20K developers and 50M installs. Good figures! So many containers who are implementing - too many to name... Yahoo, Salesforce, iGoogle, bebo,..... <br/>
<br/>
New in OpenSocial 0.8 is a RESTful version, and coming up in the future is a template language based on XML.<br/>
<br/>
Google Friend Connect is a way for developers to easily leverage OpenSocial.<br/>
<br/>
<br/>
<br/>
Google is committed to Open standards and innovation... and that's it!<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6166444771572010597?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com1tag:blogger.com,1999:blog-4363560052197126957.post-45057934980371934182008-05-28T18:00:00.002+01:002008-05-29T08:30:38.120+01:00Road block at registration for Google IO<p>Long, long queues for registration at Google IO. The worst I have ever seen at a conference. You would think that Google would be used to handling such large numbers of users.</p>
<p>The pricing structure is more like that of other parts of their business too: low cost, high volume.</p>
<object width="425" height="355" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;"><param name="movie" value="http://www.youtube.com/v/_6Kk2cqkPCc&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/_6Kk2cqkPCc&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-4505793498037193418?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-29295327924842964352008-05-16T12:10:00.003+01:002008-05-28T20:11:23.503+01:00The Detroitisation of Silicon ValleyInteresting article
<a href="http://liftlab.com/think/laurent/2008/04/17/is-silicon-valley-the-new-detroit/">here</a> from Laurence Haug.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-2929532792484296435?l=blog.kusiri.com'/></div>Andrew Fogghttp://www.blogger.com/profile/13945844632952343363noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-64579553326808459552008-05-10T15:33:00.006+01:002008-05-28T19:34:17.124+01:00The Launch<img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand; float: right" src="http://4.bp.blogspot.com/_qbppCcBJCl0/SCW16alfC9I/AAAAAAAAAAM/359dhsaD8mk/s320/Dreamforce+Europe+2008.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5198761360042691538" />
<p><strong>So Kusiri has officially opened for business!</strong><p>
<p>We launched at Dreamforce Europe 2008, a small launch, no stand or fanfare but it was good to start talking about our products and ideas.</P>
<p>The highlights; for me it was the positive response we have got from Adobe and Salesforce.com to our K-Framework demo. The demo was designed to illustrate a new way to approach developing in Salesforce.com and really show that flex is a great tool, the reoccurring feedback was how great it was to have a totally custom and cool Salesforce.com interface while retaining all the flexibility of the original app, that combined with some of the whizz you can add with flex made an impression. Which was good!</p>
<p>So now that we have launched what are we doing next. First and most importantly we are working with some great clients, this is giving us an opportunity to build more to the K-Framework product as we encounter real world use cases. We are meeting with Adobe, Google and Salesforce.com over the next couple of weeks to talk about how we can best work together and as always we continue to develop really cool technology.</p>
<p>Thank you to everybody who has helped over the last coupe of months to get us to this point and watch this space your going to hear a lot more about us over the next couple of months!</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6457955332680845955?l=blog.kusiri.com'/></div>Davidhttp://www.blogger.com/profile/12306008409407078808noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-64088579365923605452008-05-08T16:06:00.004+01:002008-05-08T16:31:23.853+01:00Iteration three live: www.kusiri.com<p>Just a quick blog post to say that the third iteration of <a href="http://www.kusiri.com">www.kusiri.com</a> is live, and has been for a day or so now! We're much happier with this iteration, which is awesome :o) We are firm believers in iterative design, and our own projects are no exception! The only thing now is it would be great if Google would index it. (There is an accessible text version that Google should be indexing FYI.... you'll see it if you turn off javascript!) As you may know, we have been looking into why this is the case, and hope to have this sorted soon.</p>
<p>Andrew will write more about the design after we've finished at Dreamforce and has a minute. In the mean time, why not drop us an email or leave a comment to let us know what you think!</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-6408857936592360545?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-18304647985932065492008-05-08T14:37:00.004+01:002008-05-08T16:01:16.179+01:00Live Blog: Visualforce: User Interface as a Service: What User Experience Will You Build?<p>Andrew Fawcett, CODA Group International<br/>
Ron Hess, Salesforce<br/>
Andrew Waite, Salesforce</p>
<p>Ron Hess kicks off with the Safe Harbour statement as per usual. Visualforce is coming in '08 (GA). About 25% of the crowd have already tried out vVisualforce. Visualforce is all about creating any experience you want, on any device (as long as its html/pdf). You can take parts of salesforce UI, if you like.</p>
<p>Made up of three building blocks - pages, components, controllers. Clearly salesforce are following the standard MVC pattern. Pages are basically a XHTML template with bind fields linking into the controllers. A component is a reusable piece of UI, which is referenced using a namespaced tag in the template. Salesforce have 50 standard components you can use. Controllers are either standard (think CRUD of sobjects), or custom. Controllers are naturally written in APEX.</p>
<p>Template snippet:</p>
<pre name="code" class="xml">
<apex:page/>
...
<c:myComponent attribute="{!bindvar}"/>
...
</apex:page>
</pre>
<p>Three types of controllers : standard, custom, extensions.</p>
<pre name="code" class="xml">
<apex:page standardController="Contact"/>
<apex:page controller="MyController"/>
<apex:page standardController="MyController" extensions="MyClass"/>
</pre>
<p>Andrew Waite takes over. Requests a URL which doesn't exist - this prompts you to create the page. When you've asked for the page to be created, it opens the page and stubs the template for you. Having demonstrated the standard component reference, he starts editing it in the in page editing. Some nice code completion. And we have Hello World! So he's now added a standard controller on the apex:page tag in the template, <code>standardController="Account"</code>, and a apex:detail tag, and adds an id into the query string. Ta da! It's worth noting that the detail component is aware of the custom object the page is referencing without configuration.</p>
<p>And quickly adding a custom component:</p>
<pre name="code" class="xml">
<c:caseBubbles account="{!account}"/>
</pre>
<p>So now he's demoing a custom Controller demo. Apex code, very javaesque. Some nice getter and setter generation at compile time (upcoming feature). Very standard controller, much like any controller you see in Java. Note that bind variables in the template translate to getters in the controller. </p>
<p>One final look at PDF generation, which is just setting an attribute on <code>apex:page</code>. Another thing to note is the use of dot notation in the templates, e.g. <code>account.quote</code> - you can traverse an unlimited amount with the dot notation. They work out when the template is compiled what data is required to streamline their data fetching for a template.</p>
<p>Back to Ron. Just a quick word on zip file resources, where you can upload an archive and reference files in it in templates.</p>
<p>Andrew Fawcett now takes the stage to talk about CODA. Coda is all about accounting. They started working on CODA2GO in November, so a quick release for their v1. A few points: they wanted to maximise use of standard components, standard CSS styling, AJAX etc. Essentially minimum custom code, aspecially when cross browser problems could come up.</p>
<p>Back to Ron to close. Page Level Security also available going to be in Summer 08.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-1830464798593206549?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0tag:blogger.com,1999:blog-4363560052197126957.post-27881696069216573272008-05-08T14:33:00.002+01:002008-05-08T14:36:55.686+01:00Live Blog: Apex, Visualforce & Beyond<img src="http://www.techcrunch.com/wp-content/forcestack.png" style="float:right; padding-left: 10; padding-bottom:10"/>
<p>Steve Fisher, SVP Platform</p>
<p>Salesforce want to make every admin an app developer: point and click tools to build any application. This spans model, view and controller.<br/> <br/> Salesforce want to provide seamless integration with any app, any device, connected or disconnected. Salesforce currently handle 62M API calls per day, and 1.6M outbound messages per day. They currently have an offline edition also, although only about 2% of the room had tried it. Coming up are async processing, RSS, and custom objects & tabs offline.<br/> <br/> They have 1.4M lines of custom apex code, 7,900 triggers, 3,000 webservices, 12,000 classes and email-to-apex. Coming up are custom controllers, dynamic apex, async apex and batch apex.<br/> <br/> A focus is trying to ensure every user had a productive and enjoyable experience. They have inline editing, search lookups with filters and a drag'n'drop calendar. Coming up in 2008 are new list views, auto-complete for lookups, public tags and a wysiwyg page editor.<br/> <br/> They have 8,300 developer preview pages in visualforce now. Coming up it will go GA with the PDF, custom controller, custom pages, custom components, and multi-language features.<br/> <br/> Free developer sandboxes are currently available, as well as a metadata api and an eclipse plugin. Coming up will be more metadata goodness, pushbutton promotion from sandbox, sandbox partial data copy, and a sandbox for every developer.<br/> <br/> Currently there are 40k apps installed from appexchange, 400 ISVs, 70k leads delivered to partners. In 2008 we will have partner licence management, online sales channels for salesforce products & ISVs, and more personalisation and community.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4363560052197126957-2788169606921657327?l=blog.kusiri.com'/></div>Matthew Painterhttp://www.blogger.com/profile/05076839319844054087noreply@blogger.com0