"Social Coding" in the DoD...

Posted on June 30, 2009

Going to try and keep this one brief, and it is going to be difficult. So…I have to instantly break a few things up. But, let me start with a teaser.

Innovation, in the Kit Plummer dictionary, is defined as the collection of ideas which aggregate and compound to solve problems, inherently, without necessary a priori knowledge of the problem. Ok, so given my not-so profound definition here it is easy to arrive at the idea, each individual idea, as the catalyst for innovation. Almost needless to say, without ideas – no innovation. (Here’s Princeton’s definition of innovation too.)

My current project, so dubbed the Battle Command Innovation Platform (BCIP), is attempting to bring many of the commonly found innovation tools found in the software/IT world to the U.S. Army (CERDEC COBRA). The ultimate objective is to allow the warfighters to solve their problems and host their own solutions. Imagine Amazon Web Service + Google’s AppEngine + GitHub + domain-specific languages (DSLs) + management, training and support delivered to those with the information problems at hand. Imagine four levels of complexity: full OS-level virtual machines (EC2), language-specific application framework(s) (AppEngine), traditional LAMP site-level hosting, and DSL-based wizard-driven applications. Add in to the mix, web-based API data services to front traditional stove-piped systems of records – and Voila you get the concept that is BCIP.

There are a few key attributes of BCIP that drive the whole conceptual premise. First, is the notion of “composable” apps. Yes, that composable – the software holy grail where applications can be built from lego-like blocks of functionality. But, also (and at the risk of biting the buzzbar) mashable applications where pieces of data are aggregated visually to produce new data. And, to some degree the ability to tap into existing infrastructure apps, documents and data. Secondly, and not without debate, is the idea of community. Yes, the meritocratic behavior that is sought after by hackers, projects and commercial entities alike. But, not necessarily the same kind of community as in the Open Source world. Within BCIP’s ecosystem, the community is the really only scope by the problem domain. The only membership requirement is that one has identified a problem and also is empowered to resolve it.

The end result is emergent innovation. The kind of innovation that comes from the people closest to the problems solving their problems, and sharing the solution with everyone across the enterprise. It doesn’t end with the first solution. How often have you found that somebody else has a very similar problem? By remixing (a process of changing inputs, but not functionality) your solution they now solved their problem. Compound solutions. With a solid community infrastructure the potential for recycling (a process of changing a simple piece of functionality and creating a new app) enters the fray. More compound solutions.

Ok, how’s that for a scratch? Now consider things like my employer, Accenture National Security Services, Forge.mil, and a mad dash to demonstrate the concept. It should be fun, it has been so far. I’m currently a one-man show wearing the Solution Owner, Scrum Master, QA, Biz Dev and team hats – all at the same time (yes we’re Agile). I am getting some help from some very smart people – they’ll get their due in future posts. Right now I’m working with GeoServer, OpenLayers, Tomcat, Groovy and Grails, Openfire XMPP server, Ubuntu”:http://www.ubuntu.com, Eucalyptus, AppScale, Amazon Web Services, a little bit of that, a little bit of this and GitHub:FI (Thanks Milo and Chris for getting us going).

Some of you might just be asking – do warfighters really code? Yes, yes they do. More on Carlos Castillo and Paul Lin’s COIN and intentional emergence story to come too (though Jim, my boss, has pretty much nailed it).

Hacking Smack in Groovy...

Posted on June 29, 2009

Really just testing the gist ‘embed’ feature. But, figured I shared a couple of things here:

Unfortunately, it appears that gist doesn’t support syntax highlighting for Groovy (real bummer). Hidden in my Groovy script there is a closure-based Java Interface implementation. By declaring the closure “as PacketExtension” I’m able to really simply do some cool XML magic on XMPP messages.

More to come here…as I’ll need to consume that sucka via an ExtensionProvider (me thinks).

Set GEOSERVER_DATA_DIR for GeoServer on the Mac...

Posted on June 19, 2009

Was having problems getting GEOSERVER_DATA_DIR to take using the normal environment variable are WEB-INF/web.xml tricks for the Mac installer version of GeoServer. Ultimately had to set it using the JVM options in the GeoServer.app’s Info.plist. Works great now. Pretty cool, and the little window showing the server out is cool. All made possible by Jetty…very nice.

Grails 1.1, Hudson and Maven...[Redacted]

Posted on March 17, 2009

So, I recently created a new project based on Grails 1.1, which I needed wrap with Maven. Grails 1.1 IS ready for prime time. With the maven-grails-plugin I was able to simply call ‘mvn install’ from my Hudson CI environment – even with no Grails 1.1 installation on the CI server. Very, very cool. Great work from the Grails camp!

[Note: I had to backtrack on my previous post…sorry.]

Atom Versus ARM, huh?

Posted on March 17, 2009

As the Netbook market continues to evolve – so has the technical specifications that drive the smaller form-factors and architectures. I actually don’t believe that ARM has any place in the Netbook market.

Here’s why. I spend a considerable amount of time developing for the Gumstix platform. The Gumstix runs OpenEmbedded, a cross-compile environment for many embedded processors – most notably, the ARM family. Without going into great detail ARM != x86 (Intel stuff). The cross-compile dance is required to build all the Linux pieces specifically for the ARM architecture on a (normally) x86-based machine. While OpenEmbedded supports many of the pieces, that normally doesn’t cut it. If it is not a supported package the process (project creation, make manipulation and cross-compiling) is just gross. Now, coming from an embedded background I’m used to that. The Linux community in general is not. I can’t speak for the Winders folks, but guessing not. :)

Sure, the ARM platform will get you lower power consumption/longer battery life. But, at the cost of CPU/RAM resources, and the above mentioned architecture mess.

To be honest I’m not sure the ARM even has a place is micro devices like the Gumstix.

The fit-PC2 shows just how close we could be from a form-factor perspective to the Gumstix with an Atom-based(x86) processor and 1GB of RAM. Shoot, just get rid of the connectors and we’re damn close.

The fit-PC2 runs a full-blown Ubuntu environment, which means no cross-compiling.

The downside is that the fit-PC2 requires 12V and consumes ~6W. For many applications that may just work…leaving the door open for the ARM platform. But, I just have to wonder how long before we see 1+GHz Atom-based platform running off of 3.3-5v at 1-2W. Lights out ARM.

But, the ARM fights back. The BeagleBoard an almost viral phenomenon parented by TI is proving that the ARM is a valid, general purpose platform.

Again, I’m waiting with intense curiosity…I have to believe Intel is hard at work (probably with Apple’s interest in mind) on a super low-power high-performance processor that will bridge the gap and extinguish the need for cross-compiling.

All this stuff said, I do understand the deltas between the truly embedded architectures. I’m just a software engineer who appreciates the OS and application side of things and really want to see a simpler means for eliminating the void between desktop and mobile platforms.

GoDaddy Email + PGP = NoDaddy!

Posted on March 02, 2009

After way too much time spent by me and a PGP support guy I finally came to the conclusion that GoDaddy was mucking with the SMTP side of things – to the point where I couldn’t send an encrypted email. I’m already a tad bit disgusted with GoDaddy’s “Girls Gone Wild” marketing slant. So, this new revelation that there is some inherent need to not allow me to send encrypted emails is a bid awkward. Remember just because you may being using SSL to send mail, it is only SSL’ed/encrypted between you and their relay. (I could be wrong here, and it wouldn’t be the first time – but, I’m just too lazy to find out. Plus I’d like to think there is more to me wanting to leave GoDaddy besides their sleeziness.) The problem is that the PGP Desktop/email proxy wasn’t able to do its thing based on the email configuration. I happen to be on a Mac and using Apple Mail, which at first I was willing to drop the blame on. But, after switching to a new provider the PGP Desktop client configure everything transparently with no issues. It did do a number on my Gmail configuration – disabling TLS there. But, all I had to do was turn it back on, and disable the PGP auto-configure option.

So…if you are hoping you’ll be able to sign and encrypt emails for a domain hosted through GoDaddy – get ready for a battle, or a switch.

OpenEmbedded not Intrepid (Ubuntu)...

Posted on January 31, 2009

I’ve run in to many different issues trying to build OpenEmbedded or recipes on Ubuntu 8.10 Intrepid. The list kept getting longer, with fixes to some and workarounds to others. Just setup a new 8.04LTS (server) VM and all works clean, straight-out-of the box. Back to progress…and thanks to the Gumstix mailing list for not responding to my question, forcing me to give this a shot. ;)

Gumstix, Wifistix and a WPA-configured Airport Extreme...

Posted on January 23, 2009

I ran into a bit of an issue trying to connect a suite of Gumstix computers to my local Airport Extreme (WPA2) WAP. The fix is really simple; I just had to add a “proto” configuration in the /etc/wpa_supplicant.conf file:

network={
        ssid="yourSSID" 
        proto=WPA2
        #psk="your_passphrase" 
        psk=bf83f4c896110b115bee8ff77b372f844435108950476a51667dd1b4a97e5b98
}

The rest of the directions here are still good.

Groovy or Ruby? Part Deux...

Posted on January 13, 2009

I’m sure there’s a lot of fuss over the Why He Chose JRuby over Groovy article that wormed its way yesterday. I couldn’t help but smile while reading it.

Having been a part of the dialog in both Ruby and Java/Groovy camps (including seriously over-heated mailing list exchanges) it somewhat surprises me that anyone would “pick” any language/platform in the blanket sense. Although I would tend to shy away from Java (and thus Groovy) I know it has its place firmly rooted in many enterprises, applications, and appliances. Ruby for me, and my developers, is more about simply doing something we like to do (very fast) and seeing a high-rate of success. The details are left for others to banter about, like Why He Chose JRuby…

I wish there was some scientific, empirical evidence that could quantify the developmental performance rates of both Ruby and Groovy. Any of you PhD candidates out there…sign up.

Here’s a thought: use whatever makes sense. If your developers have a rich background in Java, don’t push Ruby on them and expect great things. If your developers are willing to “adapt and overcome” throw a few prototype Ruby projects out there, providing the opportunity for them to grow horizontally. Whenever I come across the Java/Ruby arguments I always see the same thing. The Java crowd always comes off as ultra-conservative to the point of stubbornness. The “other” crowd always comes off as passionate and eccentric to the point of juvenile.

Parting shot – the debate/argument is more about the communities than the tech. Look deep into what’s happening in each, and who the players are.

Private GitHub Project, to Public Local Repo...

Posted on January 12, 2009

I have a couple of “customer” projects hosted at GitHub – which are restricted to Private access. GitHub does a excellent job of utilizing SSH keys to manage developer access, based on each computer that requires access.

But, I need a way to provide “local” access to development and deployment code. One of my projects involves mass deployment of the software to many platforms (as many as 500 at a time). So…I obviously need to optimize the fetch/deploy workflow to accommodate.

What I’ve done is fairly simple, and has been documented under other use cases. This is just my spin on it.

Start with “cloning” the GitHub repository to a local working copy:

  1
$ git clone git@github.com:kitplummer/private.git

Since, my development machines are Macs I can use the built-in Web Sharing feature to expose a web-accessible remote shared environment.

  1
  2
  3
$ mkdir ~/Sites/shared.git; cd ~/Sites/shared.git
$ git --bare init
$ git remote add shared ~/Sites/shared.git

Now, I need to “push” my working copy into the newly created shared repo:

  1
  2
$ cd [location of private.git repo]
$ git push shared master

There’s one simple step required to make the shared repo available (from the webserver):

  1
  2
$ cd ~/Sites/shared.git
$ git-update-server-info

And, voila. There are some hook tricks which I don’t necessarily want. I’m choosing to just manually push the current working copy to the shared environment whenever necessary for deployment.

To get the repo from the webserver: http://localhost/~[kplummer]/shared.git

Slider...Ruby-based Terminal Presentations.

Posted on January 06, 2009

Thanks to David Goodlad for going to RubyConf and talking about embedded Ruby and taking the time to put together this lil gem called slider. Just too cool.

I’ve gone and added a few things to make it work for me a bit better – check it here @ GitHub.

Here’s a quick screencast:


Slider, Take Two…Ruby-based Presentation in a Term. from Kit Plummer on Vimeo.


I noticed the first time the video plays through – it goes really fast. Weird. Haven’t seen that before.

Forerunner 30x in Linux...

Posted on December 30, 2008

I’ve been ‘toying’ with using my Garmin Forerunner 30x training GPSes in Linux. I’d been having all kinds of problems getting gpsd to work with it. Neither my 301 or 305 units are “supported” by gpsd – but, there was plenty of posts floating in the Interstew that led me to believe it could be done.

The key ingredient was this dandy diddle:

$ sudo mount -t usbfs none /proc/bus/usb/ 

I accidentally found it in an Ubuntu forum and to my surprise I was quickly able to get gpsd working.

Now, on to the fun stuff – reading gpsd from Ruby. :-)

This Is Why I Love Open Source...

Posted on December 29, 2008
checking whether to support zlib... using included version
checking for libusb... checking for libusb-config... true
checking for usb_interrupt_read in -lusb... yes
checking for random stuff to make you feel better... failed

To protect the innocent I’ll keep the app protected…but, I just love the embedded humor. And to top it all off ”./configure” failed to find anything random to make me feel better. Geez.

Maven-License-Plugin, Nice but Still Maven...

Posted on December 12, 2008

Any time I have to figure out a new Maven I cringe with sour anticipation. This go ‘round is with the maven-license-plugin. All things considered my expectations were pretty low.

This is one of those good news/bad news stories.

The good news is that I was able to get the plugin integration into my Maven structure very quickly. The bad news is that it took me forever to get things going through all of my Modules correctly. In fact, one of the modules is a Grails project – which still isn’t getting its .gsp files checked. Figuring out the “exclusion” list is still a work in progress. But, here’s the deal. The element true doesn’t work through to modules.

So I ended up with something like this:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
<excludes>
    <exclude>**/pom.xml</exclude>
    <exclude>**/webtest/**</exclude>
    <exclude>**/web-app/**</exclude>
    <exclude>**/test/reports/**</exclude>
    <exclude>**/products/**</exclude>
    <exclude>**/plugins/**</exclude>
    <exclude>**/*.log</exclude>
    <exclude>**/*.jar</exclude>
    <exclude>**/*.properties</exclude>
    <exclude>**/*.dtd</exclude>
    <exclude>**/*.tld</exclude>
    <exclude>**/*.txt</exclude>
    <exclude>**/*.gif</exclude>
    <exclude>**/*.png</exclude>
    <exclude>**/target/**</exclude>
    <exclude>**/*.class</exclude>
</excludes>

And according to the docs this:

  1
  2
  3
  4
  5
<mapping>
    <kml>XML_STYLE</kml>
    <gsp>XML_STYLE</gsp>
    <launch>XML_STYLE</launch>
</mapping>

Should provide the added file extension handling needed for my Grails project. No va. Well, actually it worked once…in typical Maven fashion.

Ok, enough of the negativity. The plugin is awesome. It has the ability to specify a different header for each module, and maps many different comment styles to different language/texts. Just be sure to not use a header that is already commented out. ;) As soon as I resolve my issues I will update.

Just Finished...Masters of Software Engineering.

Posted on December 07, 2008

definitionofdone.JPG

Quite literally I just submitted my team’s final project deliverables, putting the final touch on a long and arduous process. Time to celebrate…or just do nothing for a bit. The Wii awaits!

ROI

Now, to determine if it really was worth it. I don’t suspect I’ll be able to understand the real value, in terms of productivity, or position within an organization. I believe, more than anything, the act of trudging through something to the end is more enduring than any one course, project, paper, or task. So, if nothing else I HAVE finished. I feel like I now have earned my right to just work.

Though, the financial ROI may not reveal itself for sometime. Between loans, and a stale employment progression path – I’m not to excited about the near-term. But, as Lyndon B. Johnson stated: Education is an opportunity. So, then if I follow Seneca’s famous equation all I need is to be prepared and I’ll will arrive at Luck.

Still Not Prepared

For those that may be familiar with my opinion of current CS programs will know that I have a belief that graduates are ill-prepared (at the fault of academia) for the working world as a software engineer. I am now also of the belief that traditionally trained project managers are ill-prepared to lead software engineering projects. I am most definitely not saying the those graduating from Masters of Software Engineering projects are guaranteed success – just that it is more probable. I would also assert that a software developer without formal software engineering training/education will not make a suitable software engineering manager (though I’m not precluding that I have/will). I’m still missing a few pieces, but am in hot pursuit of those. ;)

I have no idea who originally said it but the old adage “failing to prepare, is preparing to fail” rings very true to me. So, I shall do everything I can to provide the preparedness to Seneca.

Academic Downturn

Right in the middle of my academic work, my university pulled the plug on the Masters of Software Engineering program. Obviously, they were not able to support the program with quality students or teachers/professors. Other unis like CMU are light-years ahead in terms of both students and faculty. But, if this uni can maintain one??? It is not my intent to dog my peers (for they are working professionals like me, employed at places like Microsoft, EA, Lockheed Martin, etc.). There simply were too few quality (software engineering skilled) backgrounds to provide value across the board (multi-directional). A real program would’ve weeded out the weak – potentially saving the program, by exclusiveness. But, too late for that. The solution was to simply make the once program a track under an IS/IT program. I’m not sure why this makes sense. But, if CMU does it – then it must include logic somewhere.

It is hard for me to swallow a downturn. It really is just an issue of quality losing to quantity. As more become unemployed I can only imagine that this will get worse. But, then maybe all of those that turned to IT in the late 90’s to cash in on the .com rollercoaster will finally get the deserved boot. No different than the automotive industrial self-inflicted crisis we must endure – so be it that we have to watch the fat get chucked from our IT organizations. Unfortunately, much of this fat will just blame those who’d been carrying them anyway – and turn to re-education. Again the academic dowturn will be one of quality not, quantity.

It is Worth It!

Anyway…I’d offer those that actually read this, the encouragement to pursue a Masters degree. And, even more so in times bordering on desperation (in terms of employment). Differentiation is important…and not from a networking perspective. It is a social learning activity – and counters the “it isn’t what you know, but who you know” principle. Who you know will get you work, what you know will keep you employed. Lastly, what you know is highly dependent on continued learning. A Masters degree is but one way to continue learning; a very creditable method. I applaud my peers for sticking with me, tolerating my “Agilizing”, and putting in the effort. Congratulations to you all too!