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.
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.
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.
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.
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.
- 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.
- 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?