Sunday, October 9, 2011

My Robot Friend

It's been a bit since I've posted, but fear not! Things are going well, and some exciting things are taking shape!

Work is as exciting as ever. There are new challenges almost every day it seems, yet nothing that seems to be impossible. Our systems environment is ever-changing, and the causes and motivations are numerous, but it's all in a day's work. I've also taken it upon myself to start implementing measurable quality metrics in my work, and that has been an interesting journey. I'm starting to learn a number of tools and techniques for automated building, testing, and deployment, and those are skills that should serve me anywhere on any project.

Outside work, I got the itch to do some engineering mentoring, and so I got a hold of my local high school. They don't currently have any programs like the old "computer club" that I attended when I was there (it was really just 3 or 4 of us that would hang around in the computer lab after school). However, just as I contacted them, the tech lab teacher was gearing up a team for a robotics competition called BEST. Basically, over a 6 week period, the team of high schoolers must design and build a fair-size robot (maximum 2 feet cubed) out of basic provided materials, like plywood and PVC pipes, plus an electronics kit. The robot must then perform certain game tasks in competition. I've been volunteering my time with them, and I'm really having a blast, even if there isn't all that much programming. Many general engineering principles, like designing to meet goals and building prototypes, are still useful. Maybe after the competition, I can keep something going through the rest of the school year. We'll see.

Sunday, September 11, 2011

Ten Years Ago, Today

I was in the 10th grade. The morning started off as any other, with my morning bike to school. My first class was Spanish. There were rumors of confused news reports about a small plane accidentally glancing off of the World Trade Center, but our teacher would allow no distractions. Our class plowed through the planned material.

But when I arrived at 2nd period chemistry, it was clear that this was no normal day, no small news story, and no accident. Our chemistry teacher didn't say much, and didn't attempt to teach class. We listened to the radio reports from shocked and confused journalists in New York. We heard that commercial airliners had been hijacked and crashed into the towers and the Pentagon; that both towers had just fallen; that the streets of Manhattan were rivers of dust and ash; that tens of thousands were injured, trapped, or dead.

It took time for the magnitude of the reports to crystallize in my head. This had happened on American soil? The shock was profound to me, a teenager who had never heard of a disaster of this scale in my own country during my own lifetime. The next few hours are now just a blur, but I know the question eventually solidified: what was going to be attacked next? Every feeling of comfort and safety was shattered, for myself and everybody around me.

I remember sitting with friends in the school cafeteria at lunch time. Half of the students had already left school. In my recollection, there was no official release by the administration, but our teachers were also in shock, and knew that on this day, nobody was thinking of anything else. Some kids had left or been pulled out by their parents so they could be with their families. Some kids left because they were afraid that the school might be targeted, images of Columbine High School still fresh in their minds. Other kids didn't immediately grip the gravity of the event, saw the reign of chaos in the school, and left because they smelled the opportunity for a day of freedom.

When I got home, I sat in a daze in front of the TV news reports. The hijackers had been foreign terrorists. My train of thought was, "Really? Who would want to do that to us? We're Americans! We have our faults, but no one actually hates us, do they?" There had been four planes, and one had mysteriously gone down in a field in Pennsylvania; there were hazy reports that the passengers might have fought the hijackers and forced the plane down. The whole thing was entirely surreal.

The end of the day seemed drained of hope, but over the next weeks and months, I saw the country come together in strength and hope. Out of the wreckage, miraculous stories of heroism, courage and compassion emerged. For every mention of the innocent lives lost, there were tales of the brave people that selflessly gave for their fellow human beings. That day touched the life of every American, and I like to think that we've become better for it, as a nation and a people.

Sunday, July 10, 2011

Google Map Maker

For those that don't know, Google Maps just opened up the Google Map Maker web application to allow normal users to enter data into Google Maps. After a review process, those edits can be published into the public Google Maps for the world to see. I was pretty excited when I learned about it in April, and I've been pretty active.

Recently I received an e-mail from the Google Map Maker Community Team. Because I'm "one of the top mappers in the United States," they offered to send me a free t-shirt, and invited me to the Google Geo User Summit in Mountain View. I had to regretfully decline the offer to attend the summit, but the t-shirt is pretty awesome.

From July 2011

My friends and I were trying to figure out what the map on the front is showing. At first glance, it looks like a map of the world's lights at night, but some major countries, like the US, Canada, UK, France, and Russia are not lit up. So what do the white areas represent? My speculation is that those represent major road systems that Map Maker users have added which were not previously recorded in Google Maps, but I'm not sure. Does anyone know?

Friday, July 8, 2011

Graduation Videos

Check these out! Courtesy of Munchkin, thanks friend!



Sunday, July 3, 2011

Exploring Google App Engine with Restlet and Objectify

Warning: this post is excessively geeky for my usual audience. Non-programmers, feel free to skip.

I've been doing a little more exploration with Google App Engine. I've used it before, first for my Weasley Clock, and also for one of my classes, Object-Oriented Analysis and Design. In that OOAD class, my team and I had a short amount of time to build an Android app backed by a RESTful web service on GAE. We ended up using JAX-RS/Jersey as a RESTful framework, JAX-B for server-side XML serialization, and JDO for the datastore API. Then on the Android client, we used the Apache HTTP client and SAX parsers. That worked out alright, but recently I've wanted to explore what other options are out there.

I've been interested in Restlet for a while; in OOAD, I explored that first before moving to JAX-RS. It seems to be a pretty comprehensive solution. They provide both server and client libraries for many platforms, with flexible configuration for many needs, such as filters. What turned me off last time, and almost again this time, was that the source code for the "first application" example didn't work out of the box. I had to decide which version of the library I needed, download four different editions, and figure out which .jars to put where. Then for a long while, I was stuck on an interesting bug. Apparently, GAE doesn't support chunked encoding (whatever that means), so their current stable 2.0.8 libraries won't work for GAE/Android communication. Their 2.1m5 libraries have a workaround, but one must manually specify that entities must be buffered (once again, what?). I also paired their 2.0 "first application" example with 2.1m5 libraries without realizing that there was a difference, because their wiki wasn't clear about which version of the sample application you were looking at.

So far, I would say that Restlet is a well-built library for RESTful communication, both server and client-side, but their documentation and examples could really use some organization help. The answers are on their site, but sometimes they seem to be hidden away in dark corners of the wiki.

After I got the Restlet "first application" working, I wanted to bolt on datastore support. I wanted to try something other than JDO, and so looked at JPA. However, these both seem to be cumbersome and ill-fit when it comes to the GAE datastore. Then somehow I stumbled across Objectify, a relatively thin library that works on top of the datastore low-level API. Some of the attractive features were a less-cranky Key interface, using POJOs instead of GAE-specific Entities, and GWT compatibility without DTO's. I did have trouble with that GWT part for a while, because I thought that my POJOs still needed to be annotated with java.persistence.Entity. I think that was causing problems when the DataNucleus Enhancer went and did its magic; the server-side class looked different than what GWT was expecting on the client side, which ended up throwing a SerializationException. However, I finally figured out that stored entities don't need the Entity annotation. The only thing that the POJOs need is a java.persistence.Id annotation on the primary key field.

I have yet to really explore this thoroughly, but so far both libraries seem to be doing their job and playing nicely. The best part was not having to write DTOs! I did have to fight with both libraries for a while, but hopefully this post will help somebody else avoid those pitfalls.

Thursday, June 23, 2011

Hit the Ground Running

My time between finishing school and starting work was relaxing, but too short, of course. I did keep myself busy with projects, planning for our first camping trip of the season, and preparing for work. I was able to get some stepping motors to ressurrect the Wesley clock. I finished all of the software last summer, but still haven't gotten around to building the darn thing!

I started work the week before Memorial Day, so it was a fairly relaxing time to come in. So far I like the people, and the work is interesting. My co-workers are a pretty tight-knit group and have some nice traditions. "The Phat Club" is an agreement among about a dozen people to bring in breakfast for everyone else once a week on a rotating basis. Every day at a certain time, everyone who isn't busy with something will take a short walk down to the "snack room" to stretch our legs and shoot the breeze. Some of us even took an afternoon off to see a Rockies game. That was a lot of fun!

One thing that's in stark contrast to my previous experiences is the level of isolation. Communication is restricted in order to protect proprietary information, so we can't have cell phones inside our building. It's a little unnerving, but it's a necessary evil and I'm learning to adapt. But there also seems to be some technological isolation. I don't know if it's just my project, but there's a lot less use of libraries and frameworks than even some of my school projects; instead, everything is built from scratch. It's well-built from what I can tell, but open-source frameworks have the advantage of public scrutiny, industry approval and large support communities. Working on this project could certainly be a learning opportunity in relying on my own design and coding ability, but I will need to spend time outside work to keep my finger on the pulse of the industry.

Wednesday, May 18, 2011

On Endings and Beginnings

I forgot to mention a couple of other interesting notes concerning graduation and the like. The most exciting news is that I've transferred out of active drilling status in the Army Reserve and into the Individual Ready Reserve, otherwise known as inactive reserve. That mean's I'm essentially out of the Army; they can still call me up if I'm needed, but the circumstances would have to be extraordinary. I don't have to go to monthly drills, I just go for a once-a-year "muster" to make sure I'm still alive.

I have to say, it's bittersweet leaving the Army. I really enjoy doing my job there, and I enjoy the camaraderie. If I were keeping myself in better shape and moving forward in my military career, I would have a strong reason to stay. But on the other hand, it's really the right thing for me right now. My entire life is changing; I'm moving from primarily being a student to the working world. My situation in the Army was also supposed to change, as I was being forced to change units. For one thing, changing units would mean re-establishing my reputation as a good soldier. The fact that I'm a habitual PT failure means that I have a hard time gaining good graces with NCO's and officers until I've fixed their commo a few times. For another, being forced to change yet another thing in my life right now is difficult to fathom. And besides, it might be nice to see what it's like to live life without the Army. If I really find that I miss it, I can probably get in shape and go back.

The other thing that I wanted to mention was from the Engineering Recognition Ceremony. The Peak Brass Quintet played the graduates on to the floor with the traditional "Pomp and Circumstance," but after a while I realized they were working in other music too. It blended very well, so it was hard to tell at first, but they added some phrases from the Star Wars soundtrack as well as the Zelda video game soundtrack. It was subtle and tasteful, and I thought it was totally appropriate for a room full of über-nerds. Nice touch!

Monday, May 16, 2011

Alma Mater

Apologies for the late post, but I've been a madman up until last week. After spring break, I had to kick all three of my class projects into high gear. In senior project, I had been spinning my wheels on a particular problem, and finally called in our Google sponsor, Scott, to help me out. We and the rest of the team had a couple of late-night hackathon sessions, and really made some huge progress. After Scott showed me how to incorporate my own PaintWeb tools the right way and started me on a selection system, I was able to make some nice enhancements to our 2D canvas and toolset. In the end, we handed off a senior project that I'm proud to put my name on, and proud that AgentSheets will carry forward.

In Object-Oriented Analysis and Design, our group wrapped up our design and did our three week-long iterations of development, and ended up with a decent proof-of-concept; an Android app for managing chores, along with a RESTful web service backend. We had planned a lot more, but with only 3 weeks to develop, it's difficult to get a finished product. And finally, my Data Mining teammate and I were able to wrap up our medical insurance mining project gracefully, even if we didn't find the juicy patterns we were looking for.

So that's it. I've graduated from the University of Colorado at Boulder, College of Engineering and Applied Science, with a Bachelors of Science in Computer Science. It was an excellent experience, and I'll always be happy to call CU my alma mater.

The graduation ceremonies were pretty much as expected; fairly boring in-and-of-themselves, but emotionally meaningful as a rite of passage. Many of my family and friends were able to make it for the Engineering Recognition Ceremony, and then for the University Commencement, I had Ashley, Chris and Holly cheering me on. After that, Ashley threw me a party at her mother's house, and I got to see so many of the people I love! Ashley and Holly collaborated to make my cake a special surprise, a reference to the game Portal. All of the photos are online for your viewing pleasure!

Since then I've mostly been taking it easy, cleaning the house a bit, catching up on my personal projects, and the like. I did have one exciting adventure, though; our senior project sponsor Scott invited us to Google I/O Extended at the Google Boulder office. It was a blast! I mean, sure, it was just sitting around watching live videos of the real thing in San Francisco, but I got to meet people from industry, get a feel for their attitudes and opinions, learn about what Google's been up to and where they're going, and even got a swag bag! If I can't make it to San Francisco next year, I'll definitely have to see about coming back to Extended.

As far as future plans, I expect to stay at Northrop Grumman for the time being. I could eventually see myself pursuing a Master's degree, but for now, I'm excited to see where life in the working world takes me. It's a wide world out there, just waiting for me!

Sunday, March 27, 2011

The Internet Game

I've been thinking about how to teach fairly young kids about how the Internet works, and I've come up with a game. I think this would be appropriate for 3rd to 5th grade or so. I call it "The Internet Game."

Begin by separating about a third of the class to be "computers," then the rest are "routers." (This could also be half and half, which would make it easy for the two groups to switch roles after a while.) The computers get into a large circle, with the routers all standing inside.

The computers get to write simple "packets" on index cards, addressed with To, From, and Message. These packets have to be sent to other computers. These could be free-form, write messages to whoever you want; or there could be a rule that you must send a message back, which would simulate a client/server request and response. The routers must pass the packets so that the packets get closer to their destinations. The routers aren't allowed to move from their spot, but they can spin to face other people.

For a more advanced version, one could split the computers into clients and servers, and assign specific server roles. One student could be the search engine, which would send back information about other servers. Pages sent from servers to clients could have "links" to other pages on other servers. The teacher could choose a router to break (sit down?), forcing packets to be routed around. The routers could be arranged a certain way to produce bottlenecks.

I'm not in the education field, so I don't know what primary schoolers are being taught about the Internet, or how. I know interactive games are much more interesting than drawing diagrams on a chalkboard. This game seems a little reminiscent of the Telephone Game, used teach very young primary school kids about rumors. I would be shocked if something like this Internet Game doesn't exist, but a quick Google search didn't turn up anything like it. If you're an educator, or otherwise, please let me know what you think!

Friday, March 11, 2011

Release Mode

School is in full tilt, with no sign of letting up through Spring Break. In senior project, we're now into what we software engineers call "Release Mode." We're coming up to The Big Deadline, and we're churning out code and documentation as quickly as we can.

We have a number of big features in Volumizer that are still not quite the way we want, but we don't have time to really do all of them justice. It's not for lack of trying, mind you; I don't function as well without sleep as some of my fellow students, but I haven't been getting my full, comfy 8 hours a night for the past couple of weeks either. I get up, start working on this or that project, maybe go to class, program more, and roll into bed. There's just too little time left to make any more huge changes. We tested with users, found our weak spots, and we'd be golden with two or three months more. But that's the breaks, I guess. Software has one distinct similarity to fine art: it's never finished, only abandoned (to quote Da Vinci). We just have to finish up the most important stuff, and leave any future work to our sponsors.

I'm still quite proud of what we've accomplished. Our project would've been nearly impossible 5 years ago, bleeding edge 2 years ago, and even today is part of the first generation of 3D programs for the mainstream web. Even with its limited range of functionality, it still lets anyone who can use a paint program make their own 3D models. We've dealt with changing internet specifications, buggy development browsers, and a ton of other eye-opening experiences. We can now say with confidence, "Yeah, I've done that before." And that's worth everything.

Monday, March 7, 2011

Pet Pictures

I present you with some shameless animal pictures:


Apollo really enjoyed the mud pit at the dog park. Until he got home, that is.


Marley thought my drink was delicioso!


A pile of sleepy.


Can you tell that these two like each other?

Al hasn't been posing for as many photos, but worry not, he's still stalking around the house.

Wednesday, February 9, 2011

Hyperconnectivity

My wife says I have a problem. She may be right.

During tonight's project to get all of my electronics charged and software updated, I discovered that I've collected an astounding array of "computers" in the last few years. When I think about it, I use all of these on a somewhat regular basis, because they all have their particular niche.



From left to right: 
  • HP Pavilion dv9700 gaming laptop (dual-boot Win7/Ubuntu)
  • Barnes & Noble nook e-reader (Android)
  • custom-built gaming desktop (Win7)
  • (same screen) VNC session to media server in living room (Ubuntu)
  • G1 smartphone (Android)
  • Apple Macbook 13" mid-2010 model (OSX Snow Leopard)
  • Asus Eee PC netbook (Ubuntu netbook edition)

Thursday, February 3, 2011

Beginning of the End

I'm finally into my last semester at CU. I've been working toward my BS in Computer Science for a total of six and a half years now, and I will finally have my piece of paper in a couple of months. It's a great feeling to be this close, and yet somehow I've avoided catching Senioritis, that contagious feeling of apathy that sometimes hits high school and college students towards the end of their studies. I think the things that are really keeping me grounded are a) our senior project, which has been interesting and challenging, and b) the fact that I have a job waiting for me.

My team's senior project, Volumizer, has seen some fairly major progress in the last two months. We've swapped out our rudimentary, homebrew 2D canvas for an open source solution called PaintWeb, and that gives us a lot more tools and functionality. The downside is that trying to interface with PaintWeb is a little difficult for what we're trying to do with it. It's very tightly integrated, and trying to pull it apart for our needs has been mostly unsuccessful. At the moment, we've just hidden away the parts we don't want. However, we've started alpha testing Volumizer with our classmates, and the results have been mostly positive! (By the way, the latest version of Google Chrome that came out today finally includes WebGL support, so you don't have to use a developer version of a web browser to check out our project!)

My other classes, "Data Mining" and "Object-Oriented Analysis and Design," have started out at a good pace, and are very interesting. I've been looking forward to OOAD for a while, because it teaches not just how to write software, but design good, robust, maintainable, "beautiful" software. Coming up with clever, elegant solutions one of my favorite aspects of writing software. In addition to these, I'm taking a beginning guitar class that just started this week. I've been slowly getting myself back into playing music, but this class should really jumpstart the process. I've been meaning to pick up guitar for a while, but it's very different from anything else I've every played.

I'm still looking forward to my job at Northrop Grumman. It's still contingent on an extensive background check, but I expect that will go smoothly. Now I just need to savor my last few months of school, and prepare for being a full-time bread winner.