Time for my biannual blog post! I actually have something worthy to discuss, so I figured I would share.
NorCalFlash has, for some time, been using Ray Camden's TimeTracker app to learn about cool stuff in the Flash Platform. So far, we've learned about skinning and Swiz, and some general refactoring and project structuring techniques. Ray kindly provided us the permission to fork his project for the learning experience. I've taken the time to implement all of these practices into the project, providing it with a completely new architecture, leveraging Presentation Model and Command patterns, as well as ORM via airORM. The result is a major change that will allow us to rapidly build in new features, adds enhanced skinning, and overall extensibility. Eventually, we will tackle mobile versions of the app as well!
The app is a small time tracking app that can be used by contractors, freelancers and small businesses for tracking time. Records are stored locally in the SQLite database, and currently there is no export mechanism.
Refactoring Ray's application gave me a great opportunity to really get a feeling for the command and presentation model design patterns. I recently started working with these in a much larger project, so it was nice to see how this sped up the development of the Jedi TimeTracker application, and see how much it really made a difference in the maintanability of my code. The biggest value I can currently see is how easy it is to swap out core logic without touching views, and without having to deal with large, messy controller files. Also, one could technically implement client/server storage with JTT very easily, by adding delegates for remote services instead of or in addition to the SQLite database.
I definitely encourage you to check out the code. If you're new to Swiz, command and presentation model patterns, SQLite in AIR or airORM, it's a neat little app to learn from.
The project details can be found at http://tjdownes.github.com/Jedi-TimeTracker/. The code is now in the repository, and an installer is available. You can contribute to the project by forking on GitHub and submitting pull requests! Anyone is welcome to contribute, as I initially started this project with the goal of helping people learn about Flex and AIR with an application that can be used in the real world. That being said, I'm also open to code reviews and critique!
Documentation is in the works, and members of the NorCalFlash User Group can expect more presentations using Jedi Time Tracker as the model.
Thanks again to Ray Camden for allowing us to fork his project. It's been a great learning experience!
Entries Tagged as Process & Tooling
Time for my biannual blog post! I actually have something worthy to discuss, so I figured I would share.
In the numerous conversations I've had with peers on prototyping and wireframing, various tools are often discussed. While most of these tools are decent for smaller projects, I have found them lacking for larger projects. Most seem to be copies of Balsamiq (which is a compliment to Balsamiq itself), or cost prohibitive for small and medium companies. iRise, for example, is one of the top-rated wireframing tools on the market but requires a minimum investment of $20,000. That's just a touch out of my reach.
About two years ago I came across Axure RP. I gave the trial product a spin and was impressed. I'll tell you why, and why I continue to use it today for nearly all my wireframing and prototyping needs.
First, the product works on Mac and PC (sorry Linux users). Second, the product is $589 per user. If you are looking for free or incredibly cheap, then Axure RP probably isn't for you. If you're looking for high-quality wireframing with a multitude of functionality that improves your workflow and enhances the artifacts you deliver to your team and customer, and the $589 price doesn't scare you away, keep reading.
The first thing you will notice about Axure RP is the UI. If you've ever worked with Visio it's very similar. However, the application, as a whole, doesn't feel as heavy as Visio, and is definitely simplified for a specific purpose: creating website and web application wireframes. It also provides a Sitemap panel, allowing you to easily add pages and structure to your site, and navigate through the wireframe with ease. Since the panels are fully re-sizable, you can adjust these to fit your viewport as the site's size increases. For very large projects you can pop any of the panels out and display them on additional monitors. I have found this very helpful in content-heavy sites that have many pages.
There is also a widgets panel which allows you to drag and drop components onto a page to describe the UI. The default sets are a bit limited, but Axure provides additional libraries you can add. There are also a number of libraries developed by the Axure community. AxLib, for example, seems popular. Axure also provides a good tutorial for creating your own widgets and widget libraries.
If you are working on a large project, you will likely find a use for the Masters, which are essentially templates that you can define for reuse.
Finally, Axure RP will help you document your wireframes. You can add annotations, which are customizable for your workflow, as well as comments. When you are finished your wireframe, you can generate a specification from your results with a few clicks. This specification utilizes the annotations and notes, so it does requires some up-front work. But the end result, with some practice, can potentially save tens of hours on a project!
There's a lot to learn if you want to maximize Axure's potential. Since I do not work with it daily, I still do not utilize all of it's features. I have found that the training articles on Axure's site have been very helpful in getting up to speed on new features I need, as well as learning about new stuff I didn't realize I had a need for previously.
As a final note, a question I am almost always asked on Axure: "Is the generated code for the prototypes good enough to use?". While the generated code is better than some, I am picky about my code and would never consider using it for actual development purposes. I suppose some HTML cleaner tools might be good enough to fix the code, but I generally feel it is easier to start from scratch that to try to make something work. A prototype should be considered a functional example, and not a base for starting production work.
There's a lot more I could discuss on Axure. Maybe in the future I'll post some additional articles on usage and particular features I find valuable. For me, Axure has been the most productive tool for delivering wireframes quickly and with the least frustration.
Mostly, I hope I introduced you to a tool you didn't know about and find a valuable addition to your workflow.
I wanted to create a quick list of Flex-specific plugins I find most helpful for my day-to-day Flex development. Mostly this serves as a reminder to me when I rebuild my IDE, but I thought others may find them useful too.
FlexFormatter - This is probably the plugin I use the most. In addition to highly configurable code formatting, FlexFormatter also has some excellent tools to assist in generating ASDoc comments. Installation is easy, just download and drop the jar files into your Eclipse plugins folder, then restart Eclipse.
FlexPMD - I recently discovered FlexPMD and wish I'd had this tool much sooner. The FlexPMD Eclipse plugin works with FlexPMD to help you spot and solve issues in your code. It comes with some prepackaged tests, but you can also create and customize your own. It encourages best practices code, and will help you improve your code before you push it to production. FlexPMD can be executed from ANT tasks, and there is plenty of documentation on how to integrate this into your Continuous Integration tooling.
ActionScript Framework Downloader - If you work with frameworks and other libs, this is a tool you cannot live without. It allows you to download common frameworks directly into your project with a couple of clicks. HUGE time saver! Read the installer instructions carefully, as it does require the SVN command line tools in addition to the plugin.
Flex Builder Localization Tool - Another tool I recently discovered, the Locatization Tool assists you in removing hard coded strings in your application and replacing them with calls to localization scripts.
Mylyn - Not Flex-specific, but Mylyn is a very popular plugin to assist with code versioning and issue tracking. I use it with JIRA/SVN and Trac/SVN. I won't go into it a lot here simply because so many resources already exist for Mylyn. But I do highly recommend adding it to your workflow!
If you know of any other "cannot live without" Flex plugins for Eclipse, I'd love to hear about them.
At work we use Surround SCM for versioning and Test Track Pro as our ticketing solution. Because of some of the limitations of these tools, I am writing a business case to transition to other tools and build processes. What I'd like is to hear how other folks out there are setup. If you have a few moments, I'd love it if you jotted down answers to the following:
- What is your source control management server?
- What is your ticketing system?
- Provide a high level overview of your build process
- How do you push from testing to staging to production, ensuring your build is consistent?
- What other tools do you use in your process to assist in the build, or make things easier?
- How large is your team?
- What types of projects do you work on?
- Does your development staff work on multiple projects at the same time?
- Do you enforce unit and integration testing?
- What project management process is your company using (agile, waterfall, etc)?
- What challenges have you encountered, and how have you overcome them?
If you have any other thoughts I'd love to hear them. Although I am biased (because I've used JIRA, SVN and Mylyn in the past), I am still trying to provide an objective and unbiased business case. I've jotted down some of the issues we've encountered using Surround SCM. If you use Surround and are aware of how to overcome the limitations we have experienced, please let me know!
- No automated changelists
- No workflow/IDE integration that is reliable or performant. The Eclipse plugins provided by SeaPine are notably pretty bad and this is the general consensus in our shop.
- Surround cannot move/delete files on check-in/checkout/promote
- Surround is terrible at merging changes for XML files
- Merging requires a lot of time if there are other developers working with the same codebase
- The automated merging process is inaccurate, and requires more hands-on work than other common tools
- Using Surround remotely is clunky and slow.