Wednesday, February 16, 2011

Cambridge Flocks

Well then, it's been 7 months, what has happened with Cambridge Flocks?

Lots.

The latest version of the Migration Route tool is now available.  While I can't give out usernames / passwords, you can browse a few routes that have been submitted already.  (Make sure to have cookies enabled.) Development is largely complete though there are still some tweaks and improvements that need to be made.

To get this working:
I had to work through the usual laundry list of web technologies; HTML, CSS, Javascript, PHP, XML, AJAX and SQL.  Some of these such as HTML and SQL were familiar to me but the others required some time to get acquainted.

Cambridge Flocks is a fairly simple Google Maps mashup.  It takes a user's location, then uses the Google geocoding service to get a latitude, longitude pair.  Each location is drawn to the map.  When a user's route is complete, it's submitted to the backend database.  That's the front end.

The route browser shows a couple of routes provided by individuals who shall remain nameless (thought they have my gratitude.)  All the submitted routes for a given "class" will show up.  To make browsing easier, each route can be turned on or off.  I hope the color contrast is enough to make each route easy to pick out.

The color of each route was a puzzle that gave me pause.  I wondered how you would get colors to deterministically iterate.  Manipulating the raw hex values as a string seemed really annoying; requiring huge strings of if-then-else branches.  Ick.  Working with them as hex values didn't seem all that easy either.  Then I remember that hex values translate pretty well to base-10 and that base-10 was easy.  The code looks like this:

var color = 3355443;
//for loop starts here.

routeOptions[id] =  {
strokeColor: '#' + color.toString(16),
strokeOpacity: 1.0,
strokeWeight: 2,
map: map,
path: locationList
};
color += 102;
routePaths[id] = new google.maps.Polyline(routeOptions[id]);
//for loop ends here.

The .toString() function came in really handy by allowing to specify hexidecimal output.  

So there's more work to do but I'm fairly happy with what's here so far.

Friday, July 23, 2010

Current Projects

Current Projects
This week, I was contacted by Carolina Aragon who recently won a Cambridge Arts Council competition for a temporary art installation between Lechmere and Innman Square. While the project involves a physical installation, educational materials for Cambridge K-12 students, an interactive online map and a website, I only have to worry about the interactive online map portion.

Ideally, the map will allow each student to build a personal migration route, all the places they've lived since birth.  The map may even go as far as to show their parents and grandparents migration routes as well.  Then there will be a large map that shows the most "popular" migration routes.

Perhaps there will be a movie to show the progression of individual migrations.  Very much looking forward to this project.

Wednesday, January 20, 2010

Inertial Guidance Simulation

My development skills are in their infancy. Small projects are within my grasp. Designing and building large scale systems just isn't possible for me right now. However, higher up and further in.

In order to expand my horizons and improve my skills, I'm undertaking a development project to simulate an inertial guidance system. The simulation will be implemented in Java with visualization probably provided by the Processing environment.

I figure there are at least five components to this simulation, flight sensors, flight controls, flight environment, telemetry and guidance system.  As presently conceived, each component of the system will have it's own thread.  This is probably an overkill approach, but I don't have much experience with threads and want some.  I'm anticipating race conditions and how to design the system so they don't happen.  Another thing to explore will be if synchronous communication will be possible between threads or if I'll need to do asynchronous communication.  Aside from all this, is translating the equations for flight control into code.  Should be interesting.

Flight Controls send directions to Environment.  Environment provides data to Flight Sensors.  Guidance takes data from Flight Sensor then sends instructions to Flight Controls.  Telemetry will act a sort of syslog for Flight Controls, Guidance and Sensors by recording relevant flight data for review later. It is a write only system.

Tuesday, January 19, 2010

Resume

Summary
Recent graduate with skills in rapid prototyping, test automation and small group leadership looking for a data analyst position.

System Experience
Java, JDBC, SQL, JUnit, C++, C,
NetBeans IDE, Eclipse, Apple XCode
Windows XP, 2003, Mac OS X (Versions 10.3 – 10.6), Ubuntu Linux
Microsoft Office 2003, 2007


Qualifications

Product Testing: Implemented automated test cases to determine accuracy of senior project’s polynomial regression results. In addition to individual tests, built general test environment to run sets of test cases.
Rapid Prototyping:  Prototyped tools for managing unwieldy IBM iSeries menu hierarchies. Used Java, SQL and JDBC to query menu hierarchy tables. Visualized menu hierarchies using Graphviz.
Project Leadership: Elected by 12 classmates to lead Software Engineering class project in developing and delivering 100-page software design document describing database structure, user interface and processing functionality for a job openings distribution system 
Algorithm Development: Applied genetic algorithm to solve polynomial regression problems. When provided with a data set, algorithm generated successive generations of potential solutions. Best solutions formed basis for next set of possible solutions. Selection process continued until ideal solution was found
Requirements Development:  Reviewed existing paper-based user provisioning system, solicited requirements for a digital user provisioning system, built upper-management consensus, and wrote an IEEE standards compliant software requirements specification 
Life-cycle Management:  Studied various life-cycle models including Agile, Scrum and Extreme Programming as part of two-semester software engineering course. Learned importance of requirements and design documents in focusing development process and avoiding feature creep.


Employment
May 2009 - Aug 2009: Data Processing Intern, Charles County Public Schools, Laplata Maryland
Feb 2007 - Dec 2008: Computer Operator, Brigham Young University - Idaho, Rexburg, Idaho
Aug 2004 - Aug 2006: Network Engineer, Charles County Public Schools, Laplata Maryland
Sept 2002 - April 2004:  Studying for Associates, Brigham Young University - Idaho, Rexburg, Idaho



Additional Experience
- Vice President of a small non-profit managing ancestral property in southwestern Maine (2009)
- Area Director for the BYU-I Outdoor Activities program (2008)
- Conceived, proposed, organized, promoted and managed a University sponsored stand-up comedy event to a sell-out crowd (2007)
- Rock Climbing Area Director at Goshen Boy Scout Camps (Summer 1998)
- Organized team of 15 to dry pack $500 in food for local food pantry as an Eagle Scout project (1998)