Developing Arrowpointe Maps (the tools)
It’s been a while since I blogged, so I thought I’d get back into it by talking a bit about the tools used to develop Arrowpointe Maps in the hopes that you might find this useful for your own development and that you might comment here about your tools of choice and what makes them great.
The Stack
Although you access the application via a Web Tab in Salesforce.com, Arrowpointe Maps is actually hosted with OpSource, one of the 2 pre-certified Salesforce.com hosting providers, and is running on a LAMPS (Linux/Apache/MySQL/PHP/Salesforce) stack.
Ideally, this entire stack will be replaced by Force.com. Someday it might. At this time, however, Force.com just isn’t ready to take on all of this and Apex Code, especially, doesn’t have the flexibility or community of something like PHP. I look forward to improvements being made to all of the Force.com components and hopefully Arrowpointe Maps can eventually be a showcase application running 100% on the platform.
Another architecture I really like is Adobe’s Flex technology. Both Salesforce & MapQuest have really good Flex integration. I really like this approach and you might start seeing some Flex output in future releases.
Web Services
All the business data resides in the user’s Salesforce.com database. We connect to Salesforce.com via the API to access configuration information as well as business data for mapping purposes. The application leverages the end-user’s Salesforce.com session, so all authentication is piggy-backing off of the Salesforce.com security model, which is really nice. Because Arrowpointe Maps is certified, we get a Client ID that gives us API access to Professional Edition orgs too.
We use the MapQuest JavaScript API (Tiled Maps). MapQuest’s API is really well put together, is accurate and reliable. I’ve been very pleased with it. They are rolling out new functionality all the time and I do my best to incorporate the most useful pieces with each release.
I will be looking to incorporate more useful web services into the mix as the product expands. Programmable Web is the best resource I know for a comprehensive listing of web APIs.
Development Frameworks
xAjax is an open source PHP library for building Web-based Ajax applications. It makes it dead simple to perform an AJAX server call, do the heavy lifting in PHP and then return HTML and JavaScript to the page without an entire refresh. It has allowed me to keep the bulk of the logic in the comfort and power of PHP and only using JavaScript where I need to.
Prototype is a JavaScript Framework that aims to ease development of dynamic web applications. If you do any JavaScript development, this is a must have. It provides many useful methods for working with the DOM and has been written to be cross-browser compatible. It’s worth using if only for its $ function.
The Yahoo User Interface Library (YUI) is a set of utilities and controls, written in JavaScript, for building richly interactive web applications using techniques such as DOM scripting, DHTML and AJAX. I use it in a few random places in Arrowpointe Maps. YUI is the most well documented user interface framework I have seen and it’s been taken up well in the development community. I highly suggest it.
I am not using these JavaScript frameworks, but I came across them in my research and they have good reputations:
Other Development Tools
Eclipse is an open source community whose projects are focused on building an open development platform comprised of extensible frameworks, tools and runtimes for building, deploying and managing software across the lifecycle. It is my main PHP development environment and Salesforce also has their Force.com IDE in Eclipse, which is useful. There are a number of “projects” that I use in Eclipse, but some of the standouts are:
- Web Tools Platform
- PHP Development Tools
- Subclipse: Plugin to support connectivity to a Subversion (SNV) code repository.
- Mylyn: Provides task management functionality in Eclipse. I utilize the Trac connector to connect to my Trac system that I use to manage my defect & enhancement request tracking.
I use DevGuard for professional SVN hosting. It’s pretty cheap and provides good tools for managing my code in a secure place. It also includes the Trac project management system that sits on top of SVN and it all integrates very well into Eclipse. This services are similar to what Google Code provides, but it keeps the code private and is not open-source.
Arrowpointe Maps is distributed via the AppExchange. The AppExchange makes it simple for any Salesforce prospect, customer or developer to download the application for free, no questions asked. Now they have what they need to connect to me and this allows me the flexibility to enable/disable access to the application as necessary.
Firebug integrates with Firefox to let you edit, debug, and monitor CSS, HTML, and JavaScript live in any web page. I use it every single day for a multitude of reasons. I highly recommend it.
References
- MapQuest’s API Reference and Forums: I go here almost everyday. They are migrating everything to the developer site I linked to. Currently, most of their documentation is in their Technical Resource Center.
- Salesforce’s API Reference: Used pretty regularly, especially as I delve into more obscure areas of the API and special use cases.
- Force.com Cookbook: I use this pretty rarely, but it has some really good examples in it, so I keep it handy.
- PHP Manual: I downloaded the CHM file from this page and I use it multiple times every single day. It’s the best resource for PHP information. If you visit the same documentation online, each page has other developers adding comments, so you get some rich information.
- W3Schools: My one-stop shop for the official reference to HTML, JavaScript, the DOM and CSS. I used it a bit to learn XML too. I go here almost every day.
- Prototype Documentation: The API docs for this most useful JavaScript framework.
- YUI Documentation: Yahoo has documented their Yahoo User Interface Library very well.
- Google: When at a loss, use Google to find examples of what you are trying to do. I try and corroborate most of the examples I find from a few sources before applying it to my development.
Some other, random tools I use that make my development/work life easier are:
- Snag-It: Taking screen captures and for light image editing.
- Jungle Disk: Mount Amazon’s S3 storage service as a drive and backup files to it. It encrypts all the files stored there.
- Trillian: multi-protocol instant messaging client.
- Jing Project: Create demonstration videos. From the creators of Snag-It.
What about you? For developing applications (especially Salesforce-related ones) what tools are you using and recommend?