Wednesday, July 20, 2011

Assessing Fickleness

I always have trouble finishing side projects because I get bored with them quickly.  Lately I have been trying to decide what I want to play with next so I an informal assessment against myself to find out what I am interested in.  Here are the results:

Game programming     xxxxxxxxxxxx
Graphics                       xxxxxxxxxxx
Clojure                          xxxxxxxxxx
Groovy                          xxxxxxxx
Ruby                              xxxxxxx
Android                          xxxxxx
iOS                                 xxxxx
Grails                              xxxx
Flex                                 xxxx
Gaelyk                             xxx
Java                                 xx
JavaScript                       x
HTML5

It wasn't very scientific, I basicaly did a "Face mash" where I compared every technology in pairs and pick the one I liked the most.  Since game and graphics programming are especially prevalent with Clojure, Groovy or Ruby, I decide perhaps I should do with Android.  That logic leads to this grouping:

Game programming     xxxxxxxxxxxx
Graphics                       xxxxxxxxxxx
Android                        xxxxxx

Clojure                         xxxxxxxxxx
Groovy                         xxxxxxxx
Ruby                             xxxxxxx


iOS                               xxxxx
Grails                            xxxx
Flex                              xxxx


Gaelyk                          xxx
Java                              xx
JavaScript                    x

HTML5

It should be noted Android only beat iOS by one and that was probaby due familiarity with the programming language.  Android's Java is easy for me to grok and be productive.

What does this mean?  Almost nothing.  We'll see in the morning I suppose.

Monday, July 18, 2011

Gaelyk cool but Tutorial for 'delete' lacking

I saw Tim Berglund talk about Gaelyk last week at ÜberConf and I decided tonight to start building something and deploy it.  Basically I am starting to folow some dietary guidelines and workout plans as outlined by Frank Sepe in his "TRUTH" book.  I figured tracking my diet and workouts would be more fun if I built a Gaelyk app for it so I started "Eat, Lift and Move" web app.  Obviously eat and lift make sense but I wanted something general for Run, Bike, Walk part of the program and came up with Move.  Yeah, we'll see if I stick with it.

In any event my first iteration on it resulting in a cruddy little app for Eat.  http://eat-lift-move.appspot.com/

It took me like 3 hours to get there but probably more than half of that I was trying to figure out how to frickin' delete 'eat' entries.  The tutorial talked about deleting via 'keys' and deleting entities directly.  Not enough info to encode a 'Delete' link in a cruddy little HTML table.  Old school baby!

But I finally figured it out.  The key is using the KeyFactory http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/KeyFactory.html

On the entity there is an implicity 'key' field that you can encode for a web link via 'KeyFactory.keyToString()' and then later on when parsing the parameters you can 'add water' to it by calling 'KeyFactory.stringToKey()'.  Once you have the actual key you can do key.delete().  But nowhere in the little tutorial did it tell me that.

I still like Gaelyk and plan to play with it more.  It's like the code I wrote 10 years ago but less of it.  Deployments are free and I don't have to invest much to get going.  Even deploying a Grails app public seem like too much work initially.

I might actually see this project through!  Not likely but we'll see.

Posting my code to github -> git@github.com:twcrone/eat-lift-move.git

list.gptl
>>
...
<tr>
<td>${eat.year}-${eat.month}-${eat.day}</td>
<td>${eat.name}</td>
<td>${eat.protein}</td>
<td>${eat.carbs}</td>
<td>${eat.fat}</td>
<td>${eat.calories}</td>
<td><a href="/eat/delete?id=${KeyFactory.keyToString(eat.key)}">Delete</a></td>
</tr>
...
<<

delete.groovy
>>
import com.google.appengine.api.datastore.*
import static com.google.appengine.api.datastore.FetchOptions.Builder.*

def keyStr = params.id

if(!keyStr) {
throw new RuntimeException("Key for delete was null")
}

def key = KeyFactory.stringToKey(keyStr)
key.delete()

redirect "/"
<<

Sunday, July 17, 2011

UberConf 2011 Aftermath

TUESDAY

Helped in Android Workshop - Ted Neward (asssted by Howard Lewis Ship)

I'd been messing with Android for about a month trying to prepare for this and was actually helpful the first half of the day.  Without an actual device and some heads up on the workshop project, the SMS stuff in the afternoon left me struggling to keep up.  Learned a cool way to test SMS without an actual device by starting up another emulator and using its id as the phone number to send a message to.

Android is very easy to get going with coming from a Java background.  IntelliJ IDEA worked much better for me than Eclipse but Ted used command line for whole thing which worked well.  I eventually fell back to IntelliJ though since it was what I was used to.


WEDNESDAY

*Effective Groovy - Hamlet D'Arcy

Best preso I saw and the conference.  Hamlet went through many of the items in "Effective Java" and made footnotes on the "Effective Groovy" items that lined up.  Great stuff.  I plan to go through this with my team at Lexmark.

Code Generation on the JVM - Hamlet D'Arcy

First two libraries were Java based and less interesting to me but he followed them with Grails, Groovy++ and a couple more things about AST transformations that were interesting.

New Ideas for Old Code - Hamlet D'Arcy

He gave some good tips on dealing technically and socially with maintaining an legacy code base or situations where you don't like the code you are working with on a daily basis.  He even went into how you deal with individuals that fight against TDD, Groovy and other technologies that we typically know are good but are hard to convince traditional developers to adopt them.

*Gaelyk Intro and Workshop - Tim Berglund


This was my first time seeing Tim talk and he was a lot of fun.  He gave a good overview of Gaelyk (Groovy development on Google App Engine).  He followed with a workshop where there were less than a dozen of us that stuck around for but he helped us build our own "Technology Radar" app with Gaelyk.  Most fun workshop I did at conference.

Developer Productivity Power Ups on Mac OSX - Matthew McCullough

Great stuff here...I think.  Matthew thinks and talks too fast for me to follow.  He covered so much that I will have to go back through the slides one by one and google each item to figure out what they are.  No ding on Matthew, I just can't keep up with him.


THURSDAY

Thinking in Git - Matthew McCullough

I was pretty tired in this session and as I said before, Matthew covers things too quickly than I can mentally follow I am afraid.  That aside, I got some real gems from his talk.  I have been struggling with using Git on SVN for several months.  I hope to soon be able to full Git and become more comfortable.  I'm an old SVN dog though.

JRuby in Depth (part 2) - Neal Ford

I went to the second part becuase I figured the first part would be too basic but the second part was too basic also.  He may have been watering it down for his audience.  I have already messed with JRuby a bit and learned little here other than that Neal thought Charles Nutter (creator of JRuby) should stop messing with Mirah (Ruby flavored Java language he is working on) and focus on JRuby.

Grails Workshop (part 1 and 2) - Dave Klein

I was assisting for this workshop and felt pretty confident with the material.  It was slow for me (obviously) but from the participants comments etc. I think they all appreciated Dave's pace.  If you are looking into Grails, Dave's "Grails Quick Start" book is a bit dated but goes slowly and is easy to follow.  I guess it should be called "Grails Easy Start" but that doesn't sound very cool.  Don't get me wrong, it's great book.  Lots of "Quick Start" books don't do as good of job of helping new users.  I suggest his book/sessions to anyone starting to look into Grails.

Griffon preso - Andres Almiray

Andres is a fun presenter.  I saw him talk on Griffon a year and a half ago and wasn't surprised by anything.  Griffon is a well thought out abstraction of Swing GUI apps (for me).  I'm still not convinced there are enough resources out there to use Griffon effectively without building a working knowledge of Java Swing first.


FRIDAY

*Active MQ - Bruce Snyder

I would say this was my favorite technical talk.  Bruce is a great speaker and REALLY went into ActiveMQ.  We almost derailed him with questions and comments.  Not much else I can say.  This was the most technical preso I saw at ÜberConf.

*Active MQ, Common problems and solutions - Bruce Snyder

This was a follow up to his ActiveMQ talk and was also excellently technical.  Some presos and NFJS feel very shallow but this felt like he really had a deep knowledge that he was willing to share with us.  He also took several of our addresses/business cards and offered to mail us a copy of his "ActiveMQ in Action" book.  My evaluation might go down if I don't get a book in the mail this week.  ;)

Message and Concurrency using Spring - Bruce Snyder

Friday afternoon I was starting to slow down.  This was the last talk I got to attend but it felt like a lighter version of his ActiveMQ talks from the morning.  He did touch on RabbitMQ a small bit but I can't remember much new here.  But blood was rushing to my tummy from a big lunch though.


In conclusion:

Top 5 sessions that I attended:

1)  Effective Groovy - Hamlet D'Arcy  MOST USEFUL 
2)  Active MQ - Bruce Snyder  MOST TECHNICAL
3)  Active MQ Common problems and solutions - Bruce Snyder
4)  Gaelyk - Tim Berglund
5)  Gaelyk Workshop - Tim Berglund  MOST FUN

I enjoyed Android and Grails workshops but I'm biased...I was helping in them and I already had some knowledge of the technologies.  One great thing about ÜberConf was that I didn't go to any "stinkers".  Most NFJS conferences I have gone to in the past, I have wandered into at least one preso that I left early or wished I had left early.  I had to sort the evaluations and I only saw a couple "flaming" evaluations.

All in all, the best NFJS conference I have attended and the most exhausting one I have worked at.

Hopefully I can see my buddies (Erik Weibust, Dave Klein, Ben Ellison) again and SpringOne2GX this year.  But for now, I'm just going to try to recover some sleep and find ways to use what I learned before I forget everything!

Thursday, July 14, 2011

ÜberConf 2011 coming to an end

I got a rare opportunity this year to attend the ÜberConf in Denver, Colorado.  At the Columbus NFJS event, I helped set up and some other minor things and kept pushing the organizer, Jay Zimmerman, to let me help in Denver.  It worked.

I arrived Sunday at 4pm and began working at 5pm.  Wow.  I earned it this year.  That first night Ben and I worked on binders etc. until 1:30 am.  We got up Monday morning relatively early and began working of flash drives.  Throughout the day we did session handouts, projectors and general room arrangement.

Monday didn't end until 10:30 or so I think.  Tuesday the first wave of the conference began.  I helped in the Android workshop and Ben the iOS workshop.  Good times.  I was helpful the first half of the day but the second half we were doing SMS messaging among other things and I was at a bit of a loss there.

Honestly I had only messed with Android for a month or so since Jay said I could go if I helped with that session.  Not bad to do with a Java background.  iOS sound more sexy to me though since I'm a Mac guy.

In any event, with one day left I am tired but excited about some things I learned.

Now if I could only remember some of it!

Friday, July 1, 2011

Maybe I'm a Artsy Fartsy dude

So...I've been wondering a while what makes me tick as a programmer.  I like lots of technologies but I can never get too interested in one for long enough to get very deep.  I used to be driven by work requirements to learn new technologies and it thrilled me.  But nowadays, most work driven technologies bore me.

So I had a heated argument with an old office mate over beer today.  Typical....he loves JavaScript and I prefer Flash.  I've used Flex for UI development and I liked it.  But even THAT has bored me to the point where stepping away from Flex almost 9 months ago was a pleasant idea.  I had become the Flex/UI guy and rarely got to write much server code.  That was okay because most server code has been Java in my career up until recently.  Java bores me.  But now I get to do Groovy.  Which is nicer but it has started to bore me now as well.

Okay, I digress but isn't that the point of a blog.  Digression without consequences.  Anywho, my argument about Flash vs. JavaScript got me longing to piddle with Flex again, so after a few hours trudging through some Android code to call our REST interface, I blew the dust off my old ActionScript 3.0 Animation book.  Fortunately for me my Flex 3 book was at the office so I incidentally starting drawing a red circle as a Flash sprite.

I started getting interested again...I grabbed a Flash Games book and started flipping through it.  Then I dug up an old Computer Graphics for Java Programmers and began to surmise how I might modernize this by writing Groovy versions of the samples.  Even began plotting how Groovy might get slow and Scala might be better when I start wanting to do some concurrency with multiple objects moving about the screen.  Then I started looking for resources on Android graphics, Objective C animation and revisiting my whim of learning OpenGL...

So maybe it's not that I need to find a particular language, or framework to interest me.  Maybe I just need to do more graphics.  Less text boxes and XML parsing and more sprite animations, 3d texturing and transformations.  A simple 3d gray box spinning around on the Android simulator gave me more thrills than the thought of implementing a REST client for work with my long lost friend, Flex.

Maybe it's not Flex or Flash.  Maybe I REALLY like shiny, flashy, eye candy thingies when coding.

Or this is all moot...I could be bored with this all in the morning...

I'm bored

Seems like I finally have a project with alot of things I have always wanted to do...

For the server code we are using Groovy (mostly) and Grails.  We practice TDD where our builds have code coverage > 80% as a standard.  Clean Code (by Uncle Bob) is our team coding standards 'bible'.  Yes, it is not really 'coding standards'.  But I think most coding standards are like trying to cure the symptoms of bad code with perfume.  What we really want is code that is easy to maintain and a joy to modify.

We have gotten rid of several of our mandated technologies from management that have no technical merit.  No more Liferay, ImageNow, Maven, Java (mostly), Spring XML config or Oracle.  No we use simper technologies like Tomcat 6, Grails, Groovy and PostgreSQL.  Unfortunately, we are still not *allowed* to use Flash since Steve Jobs said "Flash is dead" and our management thinks that means we shouldn't use the Flex framework anymore.

The last thing is a sore spot with me.  Lexmark still has several good projects that use "Flash".  They use Flex for very nice RIA front ends.  I spent close to 4 years getting pretty good with Flex.  Probably more than I wanted, since I still like writing server side code etc.  So I when I was told we weren't going us Flex, I was open to diving back into JavaScript, HTML and CSS after years of avoiding it.  Well, maybe not interested in CSS.

I find myself still avoiding the JavaScript though.  Our UI guys are doing a great job with ExtJS but still get tripped up with browser issues, mostly IE8 now, and nothing I hate more than browsers.  So I find myself longing for the clean, consistent framework I enjoyed and beginning to remember why I gladly stopped writing JavaScript close to a decade ago.  I don't want to be a JavaScript ninja.  Investing intellectual capital in CSS styling to avoid IE issues.  Or avoiding language constructs core to JavaScript that simply suck.  Or trying avoid the sea of unused reserved words.  Or probably the worst...not good way to run JavaScript unit tests in a build and show test coverage.

JavaScript bashing aside...I'm bored.  Our project is pretty basic at this point.  We are in the final months and not a ton of coding.  Mostly configuring security.  Testing integration with external systems.  Dealing with UI bugs caused by browsers, ExtJS4, CSS, JavaScript, localization or whatever.  Thankfully I have motivated JavaScript ninjas doing most of that.

So bored that I gladly picked up the ball to do some ill-advised story for using MS Office as the conversion technology for our doc to PDF work.  We already use JODConverter to manage LibreOffice, which works fine and has thought given to how we are using already.  The fidelity is on ly 50% what our customers want however and some customers will pay for better.  And rather than bying something, which is what we SHOULD do, we are going hack up some way to use office behind some queuing mechanism since MS Office was built for single user automation only and you can only convert one Word, one Excel and one Powerpoint at a time with a given instance of MS Office.

I'm currently using Groovy library, Scriptom, that runs on top of a Java COM library called Jacob.  But more fun that chasing weird browser UI bugs or integrating with some external implementation of OpenAM.  I think I will need to use queue or maybe even batching for the conversions.  Fun exercise, I think, although means I have to run on a Windows VM and I am a Mac guy now, 4 years reformed but I still fall off the wagon occasionally because of business requirements.

Regardless coding still can be fun.  Maybe I'll throw a little Flex UI on top of my conversion engine.  ;-)