<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 <title>Trineo</title>
 <link href="http://trineo.co.nz/atom.xml" rel="self"/>
 <link href="http://trineo.co.nz/"/>
 <updated>2012-02-17T16:24:44-08:00</updated>
 <id>http://trineo.co.nz/</id>
 <author>
   <name>Abhinav Keswani</name>
   <email>abhinav.keswani@trineo.co.nz</email>
 </author>
 
 <entry>
   <title>Railscamp NZ 2</title>
   <link href="http://trineo.co.nz/2012/02/railscamp-nz-2"/>
   <updated>2012-02-18T09:58:00-08:00</updated>
   <id>http://trineo.co.nz/2012/02/railscamp-nz-2</id>
   <content type="html">&lt;p&gt;Author - &lt;a href='http://trineo.co.nz/crew.html#ak'&gt;Abhinav Keswani&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='railscamp_nz_2'&gt;Railscamp NZ 2&lt;/h2&gt;

&lt;p&gt;The Trineo bespoke solutions team attended Railscamp NZ 2 last weekend, and had an amazing time. The event was a real success, and was appreciated by many. Really a very satisyfing feeling for me as an organiser to have seen the number of people who put aside the time and money to be there and be a part of it.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.flickr.com/groups/1922557@N21/'&gt;Check out the flickr photo group&lt;/a&gt; to get a feel for the location - right in the heart of the Kiwi alps. Misty mountains, dappled sunlight and fierce sunny rays with clear blue sky were the order of the weekend.&lt;/p&gt;

&lt;p&gt;The attendees hacked, talked, laughed, played werewolf and feasted on the fine catering that was arranged &amp;#8230; not to mention drank a reasonably large amount of craft beers that were hauled up the mountain.&lt;/p&gt;

&lt;p&gt;We met new people, made new friends, gathered with old friends from afar and it was just a blast. One particular comment summed it up, &amp;#8221;I&amp;#8217;ve never met a community that allowed me to start as a complete newby on Friday night and have developed my first project within 36 hours - can&amp;#8217;t believe the support and comraderie here&amp;#8221;.&lt;/p&gt;

&lt;p&gt;I paraphrase this slightly however one non Ruby or Rails developer who turned up got a heck of a lot out of it &amp;#8230; well done to those who helped him.&lt;/p&gt;

&lt;h2 id='what_next'&gt;What Next?&lt;/h2&gt;

&lt;p&gt;As an active member of the Christchurch Ruby or Rails community I aim to continue with our monthly christhurch-on-rails gatherings. I&amp;#8217;m also quite keen to take Team Trineo to more Railscamps if the planets align.&lt;/p&gt;

&lt;p&gt;Last year, I presented at the University of Canterbury - an exposé of a day in the life of a Ruby developer - demonstrating TDD techniques, deployment to cloud platforms and discussing how we handle user stories, iterating through frequent releases of features and seeking ongoing acceptance of our delivery from our clients&amp;#8230;a reasonably exhaustive overview.&lt;/p&gt;

&lt;p&gt;I aim to do more of the same. Christchurch NZ has seen a rough year, and I aim to put it on the map as a place with a vibrant and talented RoR community.&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>ChchForce - Spring 12 Edition</title>
   <link href="http://trineo.co.nz/2012/02/chchforce---spring-12-edition"/>
   <updated>2012-02-13T12:36:00-08:00</updated>
   <id>http://trineo.co.nz/2012/02/chchforce---spring-12-edition</id>
   <content type="html">&lt;p&gt;With the Spring 12 release of Salesforce.com upon us it&amp;#8217;s time again for Salesforce.com users in Christchurch to get together and discuss their favourite new features.&lt;/p&gt;

&lt;p&gt;Some of the fantastic new features in Spring 12 relate to improvements in reporting and with that in mind Aaron Reid from Tait Radio will demo some of the new reporting capabilities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When: Thursday March 1st 2012, 5.30pm&lt;/li&gt;

&lt;li&gt;Where: Trineo, Unit 2C, 105 Gasson Street, Christchurch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RSVP: events@trineo.co.nz&lt;/p&gt;

&lt;p&gt;And as always if you need to be bribed drinks and nibbles will be provided.&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Gmail Integration Battle - Cirrus Insight vs Appirio Cloudworks</title>
   <link href="http://trineo.co.nz/2012/01/gmail-integration-battle---cirrus-insight-vs-appirio-cloudworks"/>
   <updated>2012-01-17T09:58:00-08:00</updated>
   <id>http://trineo.co.nz/2012/01/gmail-integration-battle---cirrus-insight-vs-appirio-cloudworks</id>
   <content type="html">&lt;p&gt;Author - &lt;a href='http://trineo.co.nz/crew.html#df'&gt;Dan Fowlie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For those who believe in the cloud the combination of using Google Apps for email and Salesforce.com for CRM is all too common. Here at Trineo we&amp;#8217;ve been using both products for years but the integration of the two products over that time has been sadly lacking. Salesforce.com&amp;#8217;s own &amp;#8216;integration&amp;#8217; with Gmail is far too cumbersome requiring users to bcc an email to a specific address. At last two partners have brought good integrations to market.&lt;/p&gt;

&lt;h2 id='cirrus_insight'&gt;Cirrus Insight&lt;/h2&gt;

&lt;p&gt;In late 2011 Cirrus Insight came to my attention. This was exactly what I&amp;#8217;d been waiting for. The ability to view contextual information pulled from Salesforce.com inside Gmail based on the email you are ready. Cirrus Insight displays Lead or Contact information, related activities, opportunities and cases. If the information doesn&amp;#8217;t exist you can create a new Lead or Contact, and associate the email you&amp;#8217;re viewing with the record. All this information is displayed in a sidebar to the right of your email with a Salesforce look and feel.&lt;/p&gt;

&lt;p&gt;The integration works as a browser extension so is simple to install but only works with Chrome and Firefox.&lt;/p&gt;

&lt;p&gt;Cirrus costs US$9 / user / month but has an introductory special&lt;/p&gt;

&lt;p&gt;&lt;a href='http://www.cirrusinsight.com/'&gt;Install CirrusInsight&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='appirio_cloudworks'&gt;Appirio Cloudworks&lt;/h2&gt;

&lt;p&gt;Cloudworks has been around for a year or two but has been hard to track down. Youtube videos have existed showing a great looking product but when I&amp;#8217;ve made enquires with Appirio I&amp;#8217;ve never been able to actually get a trial or use the product. Perhaps given a hurry up by Cirrus Insight that all changed last week when Cloudworks debuted on the Google Marketplace.&lt;/p&gt;

&lt;p&gt;Cloudworks is a Gmail Contextual Gadget so embeds itself underneath your email content. It provides very similar functionality to Cirrus Insight but also has Chatter feeds. As a contextual gadget Cloudworks will work with any browser. Installing Cloudworks is slightly more involved for an administrator but once setup it&amp;#8217;s easy for each user to setup their connection to Salesforce.com and start displaying and adding information from within Gmail.&lt;/p&gt;

&lt;p&gt;In addition to Gmail, Cloudworks provides a sidebar for Google Calendar.&lt;/p&gt;

&lt;p&gt;Cloudworks costs US$4 / user / month for Standard Edition and US$6 / user / month for Enterprise Edition.&lt;/p&gt;

&lt;p&gt;&lt;a href='https://www.google.com/enterprise/marketplace/viewListing?productListingId=77+1312804298559105341&amp;amp;pli=1'&gt;Install Cloudworks&lt;/a&gt;&lt;/p&gt;

&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;It&amp;#8217;s great to see these products that customers have been craving finally come to market. It&amp;#8217;s a shame that Salesforce.com didn&amp;#8217;t build an official integration like this a long time ago.&lt;/p&gt;

&lt;p&gt;After using the 2 products side by side (literally with Cirrus Insight to the right of an email and Cloudworks underneath) I&amp;#8217;d give the slight edge to Cloudworks at this time. They are both very good products but Cloudworks is slightly cheaper and offers a little bit more functionality.&lt;/p&gt;

&lt;p&gt;No longer can it be an excuse that it&amp;#8217;s too hard to keep the CRM up to date!&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Force.com Migration Toolkit + VIM = Goodbye Force.com IDE!</title>
   <link href="http://trineo.co.nz/2011/12/force-com-migration-toolkit---vim---goodbye-force-com-ide"/>
   <updated>2011-12-14T14:45:00-08:00</updated>
   <id>http://trineo.co.nz/2011/12/force-com-migration-toolkit---vim---goodbye-force-com-ide</id>
   <content type="html">&lt;p&gt;Author &lt;a href='http://trineo.co.nz/crew.html#lm'&gt;Luke McFarlane&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Up until now I have just about always used the Force.com IDE to retrieve, edit &amp;amp; deploy Apex &amp;amp; Visualforce code (amongst other things). There has always been a part of me, however, that feels a little left out when I see other developers using tools like VIM &amp;amp; GIT. As a Force.com developer I have always wanted a chance to become proficient at using these tools myself (VIM in particular), and before long I found myself looking into ways this might be possible.&lt;/p&gt;

&lt;p&gt;As the title of this post suggests, it is indeed possible using the Force.com migration toolkit. The toolkit is available under the Setup -&amp;gt; Develop -&amp;gt; Tools menu in any Salesforce organisation, and it is a command line utility for scripted deployment of application metadata.&lt;/p&gt;

&lt;p&gt;The toolkit looks quite powerful in itself, and upon first reading the documentation I noted that certain metadata components such as List Views are available whereas they are not available in Eclipse or changesets. It looks as though this may come in very handy for managing complex migrations &amp;amp; release cycles in the future. For now though, I am focused on learning how to use the toolkit for simple Apex &amp;amp; Visualforce retrieval &amp;amp; deployment.&lt;/p&gt;

&lt;p&gt;The Force.com toolkit is Java/ANT-based, and uses XML build files and package files to tell ANT what Salesforce organisation to connect to, and what metadata components should be pushed/pulled. I started out by making an empty project directory to use as a template for new projects. Lets call it &amp;#8216;emptyProject&amp;#8217;. My emptyProject directory contains build.properties to store parameters such as username/pass, a &amp;#8216;data&amp;#8217; directory containing &amp;#8216;package.xml&amp;#8217; (explained later), and the following build.xml file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;project name=&amp;quot;Retrieve &amp;amp; Deploy all Apex/VF&amp;quot; default=&amp;quot;retrieve&amp;quot; basedir=&amp;quot;.&amp;quot; xmlns:sf=&amp;quot;antlib:com.salesforce&amp;quot;&amp;gt;

    &amp;lt;property file=&amp;quot;build.properties&amp;quot;/&amp;gt;
    &amp;lt;property environment=&amp;quot;env&amp;quot;/&amp;gt;

    &amp;lt;!-- Shows retrieving code; only succeeds if done after deploy --&amp;gt;
    &amp;lt;target name=&amp;quot;retrieve&amp;quot;&amp;gt;
      &amp;lt;!-- Retrieve the contents listed in the file data/package.xml into the data directory --&amp;gt;
      &amp;lt;sf:retrieve username=&amp;quot;${sf.username}&amp;quot; password=&amp;quot;${sf.password}&amp;quot; serverurl=&amp;quot;${sf.serverurl}&amp;quot; retrieveTarget=&amp;quot;data&amp;quot; unpackaged=&amp;quot;data/package.xml&amp;quot;/&amp;gt;
    &amp;lt;/target&amp;gt;

	&amp;lt;!-- Shows deploying code &amp;amp; running tests for code in directory --&amp;gt;
    &amp;lt;target name=&amp;quot;deploy&amp;quot;&amp;gt;
      &amp;lt;!-- Upload the contents of the &amp;quot;data&amp;quot; directory without running any tests --&amp;gt;
      &amp;lt;sf:deploy username=&amp;quot;${sf.username}&amp;quot; password=&amp;quot;${sf.password}&amp;quot; serverurl=&amp;quot;${sf.serverurl}&amp;quot; deployRoot=&amp;quot;data&amp;quot;&amp;gt;
      &amp;lt;/sf:deploy&amp;gt;
    &amp;lt;/target&amp;gt;

&amp;lt;/project&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This build file has two targets: &amp;#8220;retrieve&amp;#8221; &amp;amp; &amp;#8220;deploy&amp;#8221;. The retrieve target retrieves all metadata components as described in &amp;#8220;data/package.xml&amp;#8221;, and the deploy target does exactly the same but deploys all these components to the server. Each of these targets can be run by executing &amp;#8220;ant retrieve&amp;#8221; or &amp;#8220;ant deploy&amp;#8221; respectively from the terminal.&lt;/p&gt;

&lt;p&gt;The &amp;#8216;data&amp;#8217; directory is where all the code will be placed (e.g. Apex classes will be placed in data/classes). In the data directory there is the following package.xml file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;Package xmlns=&amp;quot;http://soap.sforce.com/2006/04/metadata&amp;quot;&amp;gt;
    &amp;lt;types&amp;gt;
        &amp;lt;members&amp;gt;*&amp;lt;/members&amp;gt;
        &amp;lt;name&amp;gt;ApexClass&amp;lt;/name&amp;gt;
    &amp;lt;/types&amp;gt;
    &amp;lt;types&amp;gt;
        &amp;lt;members&amp;gt;*&amp;lt;/members&amp;gt;
        &amp;lt;name&amp;gt;ApexPage&amp;lt;/name&amp;gt;
    &amp;lt;/types&amp;gt;
    &amp;lt;types&amp;gt;
        &amp;lt;members&amp;gt;*&amp;lt;/members&amp;gt;
        &amp;lt;name&amp;gt;ApexTrigger&amp;lt;/name&amp;gt;
    &amp;lt;/types&amp;gt;
    &amp;lt;version&amp;gt;23.0&amp;lt;/version&amp;gt;
&amp;lt;/Package&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The toolkit is package based, which means that for any target we need to specify the &amp;#8216;package&amp;#8217; of metadata components that it will retrieve/deploy. This package.xml file simply says that we want it to retrieve/deploy all (hence the &amp;#8217;&lt;em&gt;&amp;#8217;) apex classes, triggers and Visualforce pages. Each of these metadata types will end up being stored in their own folders (&amp;#8216;classes&amp;#8217;, &amp;#8216;triggers&amp;#8217;, &amp;#8216;pages&amp;#8217;) within the &amp;#8216;data&amp;#8217; directory.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Coupled with the VIM editor, I can now retrieve, edit, and deploy Force.com code all within the terminal.. nice! In the future, I hope that I will be able to (with the help of some of my very talented Trineo co-workers!) develop some kind of VIM plugin that allows me to bind a keyboard shortcut to trigger the ANT build script from within VIM. Not to hurry though, I still need to start learning to use VIM (&lt;em&gt;pulls out vim graphical cheat sheet&lt;/em&gt;)!&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>What Is Cloud Computing?</title>
   <link href="http://trineo.co.nz/2011/11/what-is-cloud-computing"/>
   <updated>2011-11-17T11:49:00-08:00</updated>
   <id>http://trineo.co.nz/2011/11/what-is-cloud-computing</id>
   <content type="html">&lt;p&gt;All round good guy &lt;a href='http://www.diversity.net.nz'&gt;Ben Kepes from Diversity&lt;/a&gt; has teamed up with Rackspace to put together a very good 101 video about Cloud Computing. Check it out:&lt;/p&gt;
&lt;div&gt;
&lt;object height='315' width='560'&gt;&lt;param name='movie' value='http://www.youtube.com/v/hjrdThuwpZ0?version=3&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed src='http://www.youtube.com/v/hjrdThuwpZ0?version=3&amp;amp;hl=en_US' allowfullscreen='true' type='application/x-shockwave-flash' allowscriptaccess='always' height='315' width='560' /&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;As Ben points out - nobody genreates their own electricty anymore so why run your own datacentre!&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Do You Do Dot Com?</title>
   <link href="http://trineo.co.nz/2011/11/do-you-do-dot-com"/>
   <updated>2011-11-09T13:26:00-08:00</updated>
   <id>http://trineo.co.nz/2011/11/do-you-do-dot-com</id>
   <content type="html">&lt;p&gt;Salesforce.com today released Do.com, a simple project management tool, into public beta.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/do1.png' alt='Do' /&gt;&lt;/p&gt;

&lt;p&gt;Do.com is the result of an acquisition that Salesforce.com made a few months back when they acquired Manymoon.com. Based on Manymoon, Do.com has been rebuilt in HTML5 and now runs on Salesforce.com&amp;#8217;s Heroku platform.&lt;/p&gt;

&lt;p&gt;Do is simple and elegant. Concepts are loose and users won&amp;#8217;t get forced into entering a number of mandatory fields just to create a task. Do goes with a less is more approach and in a lot of instances the detail is actually hidden unless you explicitly want to see it.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/do2.png' alt='Do Screenshot' /&gt;&lt;/p&gt;

&lt;p&gt;For me the exciting part of Do.com is the gmail integration. Most requests from clients arrive via email so being able to create a task with a single click will be a real time saver.&lt;/p&gt;

&lt;p&gt;There is talk of API&amp;#8217;s and being able to build extensions for Do.com. This will be a big step towards closing the loop with other systems. And of course there is a mobile app. Tighter integration with Salesforce.com would have been great, I&amp;#8217;m sure that will come.&lt;/p&gt;

&lt;p&gt;Check out Do.com today!&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Changing of the guard</title>
   <link href="http://trineo.co.nz/2011/11/changing_of_the_guard"/>
   <updated>2011-11-09T09:00:00-08:00</updated>
   <id>http://trineo.co.nz/2011/11/changing_of_the_guard</id>
   <content type="html">&lt;p&gt;Author &lt;a href='/crew.html#ak'&gt;Abhinav Keswani&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trineo is a small and nimble crew, and we pride ourselves on having a tight, adaptable and very capable team. Trineo &lt;em&gt;is&lt;/em&gt; the team.&lt;/p&gt;

&lt;p&gt;Over the last two years, we&amp;#8217;ve recruited three University of Canterbury students and have employed them as part time staff as they complete their degrees.&lt;/p&gt;

&lt;p&gt;Today we introduce &lt;a href='/crew.html#gs'&gt;Greg Signal&lt;/a&gt; as our current intern, and with great pride we see &lt;a href='/crew.html#jg'&gt;Jack Galilee&lt;/a&gt; make the transition to a full time capacity in our Bespoke Solutions team.&lt;/p&gt;

&lt;p&gt;Luke, Morgan and Jack are core team members, and we look forward to bringing Greg into the fold.&lt;/p&gt;

&lt;p&gt;Onwards&amp;#8230;&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Does the Private Cloud Exist?</title>
   <link href="http://trineo.co.nz/2011/11/does-private-cloud-exist"/>
   <updated>2011-11-08T17:44:00-08:00</updated>
   <id>http://trineo.co.nz/2011/11/does-private-cloud-exist</id>
   <content type="html">&lt;p&gt;Author &lt;a href='http://trineo.co.nz/crew.html#df'&gt;Dan Fowlie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The term &amp;#8216;private cloud&amp;#8217; has been used a lot in the last year or so. Some say the private cloud doesn&amp;#8217;t exist but in most cases the term is being used to simply relabel the status quo. Cloud is the buzz word so traditional vendors are jumping in and calling their datacentre a &amp;#8216;private cloud&amp;#8217;.&lt;/p&gt;

&lt;p&gt;So does private cloud really exist? YES!&lt;/p&gt;

&lt;p&gt;But I&amp;#8217;ve never heard of it&amp;#8217;s existence&amp;#8230;..&lt;/p&gt;

&lt;p&gt;By definition a private cloud should have the same characteristics as a public cloud but be private. A public cloud is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalable&lt;/li&gt;

&lt;li&gt;Multi-Tenant&lt;/li&gt;

&lt;li&gt;Fast to provision&lt;/li&gt;

&lt;li&gt;Location and device independent&lt;/li&gt;

&lt;li&gt;Predictable, usage based costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The public cloud exists because the global marketplace has the scale to make it work. So in that context I think the private cloud can exist in a corporation large enough to support all of the characteristics of public cloud. So imagine this scenario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Corporation X is multinational and has offices all around the world&lt;/li&gt;

&lt;li&gt;Employee Y who works in a small department of one of the regional offices needs to spin up a new landing site for a marketing campaign. The campaign will be short lived but may peak quite high&lt;/li&gt;

&lt;li&gt;Using the company intranet, the necessary computing power is sourced with the ability to scale, and is paid for using internal monopoly money&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this definition the private cloud can and maybe does exist. In the meantime beware of the false private cloud!&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Javascript Remoting: How It Works</title>
   <link href="http://trineo.co.nz/2011/11/javascript-remoting-how-it-works"/>
   <updated>2011-11-08T13:20:00-08:00</updated>
   <id>http://trineo.co.nz/2011/11/javascript-remoting-how-it-works</id>
   <content type="html">&lt;p&gt;Author &lt;a href='http://trineo.co.nz/crew.html#lm'&gt;Luke McFarlane&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my &lt;a href='/2011/08/javascript-remoting/'&gt;previous blog post&lt;/a&gt; I briefly explained how Javascript remoting can be used in Force.com to provide fast, asynchronous communication between client &amp;amp; server. This time I would like to explain how it works at more of a technical level.&lt;/p&gt;

&lt;p&gt;First, we create a remote method within our Apex controller. The method must be global, static, and use the @RemoteAction annotation:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@RemoteAction
global static String getHelloWorld() {
	return &amp;quot;Hello world&amp;quot;;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Great! Now we can make an asynchronous call to this remote method via Javascript in our Visualforce page:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
	var message = &amp;#39;&amp;#39;;
	
	function getHelloWorld() {
		HelloWorldController.getHelloWorld(handleGetHelloWorldResult);
	}
	
	function handleGetHelloWorldResult(result, event) {
		if(event.success) {
			alert(result);
		} else {
			alert(&amp;#39;Oh dear, the remote call failed: &amp;#39; + event.message);
		}
	}
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When we call the Javascript function &amp;#8216;getHelloWorld&amp;#8217; the remote method is called by passing a callback function. When it completes the callback function &amp;#8216;handleGetHelloWorldResult&amp;#8217; is called which will either handle an error (e.g. if the Apex within the remote method throws an exception), or else display the result &amp;#8216;Hello World&amp;#8217; via an alert.&lt;/p&gt;

&lt;p&gt;This is Javascript remoting in its most simplest form. Of course there are many ways in which we can extend this functionality. If we wanted it to return &amp;#8216;Hello &amp;#8217; and then the user&amp;#8217;s name, for instance, we can just give the remote method a name parameter:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;global static String getHelloWorld(String name) &lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We would then pass this in when we call the method in Javascript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;HelloWorldController.getHelloWorld(&amp;#39;Bob&amp;#39;, handleGetHelloWorldResult)&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Javascript remote methods can also return Objects &amp;amp; Lists/Arrays, and these are all accessible via the result in the callback function.. Nice! Unfortunately, this doesn&amp;#8217;t work in the other direction. It is not possible to pass non-primitives from the page back to the remote method.. Not so nice! I normally get use delimited strings to get around this shortfall.&lt;/p&gt;

&lt;p&gt;We can easily provide feedback that something is happening in the background by showing a spinner on the page. In this case we would add a line to the &amp;#8216;getHelloWorld&amp;#8217; function to show the spinner, and then hide it again at the end of the callback function.&lt;/p&gt;

&lt;p&gt;Javascript remoting.. where have you been my whole life?!&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Proudly announcing Railscamp NZ 2012</title>
   <link href="http://trineo.co.nz/2011/11/proudly_announcing_railscamp_2012"/>
   <updated>2011-11-04T18:06:00-07:00</updated>
   <id>http://trineo.co.nz/2011/11/proudly_announcing_railscamp_2012</id>
   <content type="html">&lt;p&gt;Railscamp NZ 2012 is being held in February 2012, at the &lt;a href='http://www.mtcheeseman.co.nz/summer'&gt;Snowline Lodge on Mt Cheeseman&lt;/a&gt;. For those who don&amp;#8217;t know about this place, it&amp;#8217;s really quite something. A remote location, perched in the majestic Southern Alps of New Zealand - attendees will be housed in the comfort of an alpine lodge while enjoying incredible surroundings.&lt;/p&gt;

&lt;p&gt;Trineo is really pleased to sponsor 7 of our team to attend the camp, to sponsor tees for the camp attendees, and proud of the great event sponsorship provided our partner &lt;a href='http://heroku.com'&gt;Heroku&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A huge shout out to the event organisers who have put in a lot of work to get this up and running:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href='http://twitter.com/malclocke'&gt;Malcolm Locke&lt;/a&gt; of &lt;a href='http://wholemeal.co.nz'&gt;Wholemeal Ltd&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href='http://twitter.com/parndt'&gt;Phil Arndt&lt;/a&gt; of &lt;a href='http://resolvedigital.com'&gt;Resolve Digital&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;our very own &lt;a href='http://twitter.com/wasabhi'&gt;Abhinav Keswani&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out full details of the event &lt;a href='https://groups.google.com/forum/#!topic/railscamp/acoKELE6o-c'&gt;here&lt;/a&gt;.&lt;/p&gt;</content>
   <author>
     <name>Abhinav Keswani</name>
     <uri>http://trineo.co.nz/about.html</uri>
   </author>
 </entry>
 
</feed>

