Some Code Statistics for Broadchoice Workspace

Now that the Broadchoice Workspace has been officially released, I thought I'd post a quick entry with some code statistics. I ran the codebase through a line counting tool that gives a breakdown by file, folder, language, etc. We all know that lines of code is not a very good way to judge quality or effort, but it is still interesting in a general way. This is only lines of code, all blank lines and comments were excluded:

  • Total Lines of Code: 50,125
  • Total Files: 633
  • Lines of MXML: 10,784
  • Lines of ActionScript: 12,675
  • Lines of CFML: 7,730
  • Lines of Groovy: 8,878
  • Lines of XML: 1,757
  • Lines of CSS, HTML, JavaScript, etc.: 7,612
  • Lines of SQL: 1,089
  • Lines excluded as comments or blank: 15,778

Meaningful method names are great!

I came across (and added a bit to) a great snippet of code today in the Workspace codebase while fixing a bug on QA. The code represents just how you can use OO to encapsulate complex logic into meaningful behaviors of entities.

We have a business rule that says the following:

"The current user may save a membership in a workspace may be saved if all of the following are true:

1. The membership's user is not already a member in the space. 2. The current user is the owner of the space OR the space is marked public and the current is a member of the space's group."

Thanks to some good method names, the code is easier to understand than the English!

Here it is, in code:


if ( !membership.space.containsMember( membership.user )
     && (
        membership.space.isOwnedBy( currentUser )
        || ( membership.space.isPublic && currentUser.isAMemberOf( membership.space.account ) )
     )
)

Thanks to whichever of my coworkers originally wrote this - it was easy to modify to suit a new need!

Behind The Curtain

As you may have guessed from the content of our earlier blog posts, we're working on an AIR application that involves some sort of real-time collaboration. As you may also have guessed from the slower flow of postings since mid-August, we've been very busy working on that application!

Broadchoice Workspace blogWe're finally ready to start showing the world what we're working on and to talk about the concepts and technologies behind it. We're also taking early signups for the forthcoming limited beta program. [You can download the public release from the main Broadchoice website]

This blog post contains the first public unveiling of the application and its capabilities. The fundamental concept of the application is to provide a central way to collaborate with your colleagues (or friends). All users have a personal workspace containing files they have uploaded, a blog, a GTD-style task manager and useful bookmarks they have found.

[More]

How Do You Start a New Job?

Today is my first official day at Broadchoice, though I've been on the development list server and conference calls for a while. I thought I'd blog quickly about how I'm getting settled and see if others have their own ideas or processes that they go through for starting a new job.

  • Read up: Broadchoice has a pretty nice Intranet that contains a lot of information. So all the fun stuff like personnel forms, health insurance, tax forms (whee) and all the rest. Ahh, first day paperwork! I think the only other time I've signed so many forms is closing on a house. :-)
  • Local development: New work means a new Eclipse workspace and new Apache virtual hosts. As a new Apache convert from IIS, the one thing that I miss is the nice management console that IIS provides. The first thing I did when moving to Apache was to write a script that would automatically create new virtual hosts for me. So by filling out a short form, I add a new virtual host to my Apache config, update my hosts file, and optionally create a new Eclipse workspace by copying a default workspace.
  • Source code: If good developers are at least part artist, then source code is our clay. Like any modern development shop, Broadchoice uses source code control extensively. In our case, it's Subversion. That means hooking up to the SVN server and pulling down working copies of the relevant code.
  • Tasks: Broadchoice uses Trac to manage tasks and tickets. However, like many people I think the Trac web interface leaves a lot to be desired. Luckily, we have the Mylyn plugin for Eclipse. This great add-on lets me connect to the Trac repository from within Eclipse and manage tickets. It's great to be able to do this without leaving the IDE. It gives you little message alerts when new tickets come in, and lets you create custom queries for Tasks. So, for example, all tickets assigned to me. Or all tickets associated with a specific release number. It also offers "context" which lets you activate a ticket and then it keeps track of what files you've used while working on that ticket. Any time you go back to that task, the IDE hides everything unrelated and just shows the files that relate to that task. This is really great when you have to jump between tasks since you don't have to think about what you need to open.
  • Organization: I'm fairly anal about how I organize stuff on my computer. That means folders, usually lots of them! I've found that being a bit meticulous about setting things up makes life a lot easier later. In the past I might just create a "broadchoice" folder for documents, and dump everything in there. Later, when there are 100 files in there, I end up regretting my lack of organization. So I try to segment things off at least somewhat: corporate, employment, expenses, projects, etc. It's no extra work to drag a file into the right folder, but it makes things much easier to deal with in the future.
  • Communication: With a number of remote developers, communication is key. The development team makes a big effort to be reachable in a variety of ways. Email is an obvious one. Instant messaging is another. We also use Adobe Connect on occasion, Skype for quick conversations, and of course the good old Phone when necessary. Everyone has an iPhone, which was pretty smart on the part of management. Being geeks, everyone almost always has their iPhone with them, which means email, phone calls, and SMS are almost guaranteed to be seen and answered quickly.
  • Mindset: Starting a new job can be somewhat daunting. You're jumping into something totally new, working on things that may be completely foreign, and maintaining code that others wrote. For many, this may be scary. But I love it. The chance to break new ground and do new things is extremely exciting to me. Working with a team like this means there isn't room for shortcuts or half-measures. When you know the code you write will be scrutinized by people like Sean, you set the bar for yourself pretty high!

I think I've hit on most of the major things I've done in preparation for starting here at Broadchoice. Anyone have other tips or advice?

That's no moon. It's an ArgumentCollection

Raymond Camden here, and if you don't know by now, I have to warn you that I'm something of a Star Wars junkie. I've been at Broadchoice for a few months now as the VP of Software Development. My primary job is going to focus on the Collaboration Platform and application development. I'll be working hand in hand with the other fine folks on this blog and I hope to share as much as possible from behind the scenes.

Frankly I feel like the Padawan here. I've a great deal of respect for my coworkers, both those on and off this blog. I'll also admit to sometimes even feeling a bit overwhelmed. But the flip side to that is that I feel like I've learned more in the last few months then I've learned in years.

I think many ColdFusion developers get by - shoot - even have big successes - without having to push themselves. The ColdFusion platform is incredibly powerful and lets folks who have little to no formal programming experience achieve great things. That's a double edged sword. We can do a lot more than get by. I hope to share those things that are new and different to me in hopes that others can learn by them as well.

Brian Kotek Here, and Regarding this Blog: I Object

Greetings and salutations, most of all to the fellow esteemed members of the Broadchoice development team, a.k.a. the ArgumentCollection. I'm Brian Kotek, the newest (I haven't even officially started yet!) member of the team, though I've actually known most of these guys for years. I couldn't ask for a more talented collection (ha ha) of people to be working with.

I'm a Systems Architect here, and the plan is for me to head up a product line known as the Demand Accelerator. I'll blog about it in more detail once I myself have a better understanding of everything it does. But in essence, it makes it simple for enterprises to communicate down their distribution chains and marketing channels, and quickly see the results of their efforts in the way that matters most: return on investment.

I'll be pushing the zen of Test-Driven Development here, since a lot of the work will involve refactoring an existing system to make it a full-fledged product here at Broadchoice. Yes, you heard correctly: a company that not only understands the benefits of refactoring, but encourages it! Did I mention this job is going to be awesome?

You can expect to hear more from me as we forge ahead. It will be an interesting experience having two blogs. But it makes sense to post about work-related topics here since management is so open to letting us discuss what we're doing.

Until next time, I'm sure I speak for the whole company, Fraggles and Dozers alike (inside joke), when I say the world can expect some pretty great things from this talented and dedicated crew!

I'm Sean Corfield and I came here for an argument

As you might guess, we held a contest at Broadchoice to name the blog and the fact that "ArgumentCollection" got the most votes probably tells you a lot about the team! I'm excited to work with these guys - I've admired their work for years and they are very talented so I'm expecting the bar to be raised several notches. And they're nice guys to boot.

I'm the Chief Systems Architect at Broadchoice and my role is to help coordinate the work that Joe, Brian, Ray and Nico do so that we can all be as effective as possible and to ensure that we don't duplicate effort as we blaze our respective trails through the three core product verticals: Behavioral Analytics, Demand Acceleration and the Collaboration Platform. Underpinning each of these is a core set of services and objects that support each of these verticals and, from a code point of view, that's my main focus.

[More]

I'm Joe Rinehart and I build software.

First!

Welcome to ArgumentCollection, Broadchoice's engineering blog. Sean Corfield's given us the OK to start posting to it, and it looks like I beat the other guys to the punch. Over the next week or so, expect to see us start posting content on the technical ins-and-outs of what we've got going on at Broadchoice: we've been given a technical carte blanche on content, so expect some nitty-gritty tech posts. I'll soon be posting technical content on the ins-and-outs of work I'm doing involving Spring, Hibernate, and Groovy, but wanted to take this post to introduce myself.

I'm Joe Rinehart, engineering lead for the Broadchoice Behavioral Analytics platform. In this role, I lead server-side development of the Broadchoice Behavioral Analytics product, working closely with Nicolas Lierman to provide a innovative ways for you to investigate and analyze how your users use your Web properties. Our engineering teams focus heavily on using on own tools: the Behavioral Analytics product is actively being integrated into Broadchoice's Demand Accelerator and Collaboration Platform, setting them above their competition by allowing you to examine user behavior and high-level effectiveness in realtime. The Broadchoice Behavioral Analytics server, however, is more than a reporting suite for our own products. As a standalone product, it will allow you to integrate your own software and Web applications using the same industry-standard technologies such as Java, Ajax, and XML, that we use to integrate with our other products. Broadchoice Behavior Analytics will enable you to apply realtime behavioral analytics to your own software both in a transparent manner and at a level of granularity that's completely within your own control.

Working with Broadchoice is new environment for me. For years, I've largely been in consulting roles, working with products like Adobe Flex and ColdFusion to provide data collection and visualization tools to private industry and the United States government. While consulting I've created and contributed to open-source projects supporting my customer's goals. The best-known of my open source work is the Model-Glue framework for ColdFusion, used to power the Web tier of enterprise applications developed by companies such as Adobe, Inc. and The Mayo Clinic. I've presented at software conferences worldwide and have published articles in industry journals, including a recent article for Dr. Dobb's journal focusing on exactly the type of Rich Internet Application I'll be supporting at Broadchoice. Working with the Broadchoice Behavioral Analytics platform is allowing me to apply the lessons I've learned from all of my past experience, from consulting to open-source to publication, to a product that I'm excited to help bring to market.

BlogCFC was created by Raymond Camden. This blog is running version 5.9.1. Contact Blog Owner