Monday, December 9, 2013

Future blog posts will be at

For anyone who subscribes to this here blog, I wanted to let y'all know that I will be blogging at via the Octopress blogging framework.  I decided to keep this blog here rather than migrate it, just because it was easier and I wouldn't have to worry about comments going away, etc.

If you have any comments or problems reading things at the new blog site, please let me know!

Wednesday, September 11, 2013

The Logic of Leaving the University

I love the University of Minnesota, my department (Academic Support Resources), my team, and the incredible technical communities I'm part of.  I've pretty much spent my entire adult life at the University as an undergrad student, employee, and graduate student (1999-2013). Despite all of the great things about working for the University, I've decided that I want to do something a bit more entrepreneurial; perhaps a startup, freelancing, etc.  For this reason, I put in my 3 week notice to leave October 4th to leave ASR as an employee to pursue other opportunities.

In a nutshell

I'm leaving because the job I want does not exist. If it did, a job posting might look something like:
Wanted: Seasoned Ruby on Rails developer to contribute to open source projects and communities that can help make higher education IT more efficient. 
There is nothing I enjoy more than technical community building and creating tools to optimize the developer experience. So I figured I'd leave the University and see if I can find a job that that requires these skills.

In more detail / a few parting thoughts

I wasn't planning on this. Since May, I've been enumerating different internal options to find a way to do the things I enjoy doing most and make the changes I believe need to happen.  It turns out, that right now, it is not the time for the University to move in this direction. Instead of elaborating on the particular things that influenced my decision, I'll simply state a few recommendations I was working on pitching in hopes that others might consider adopting or challenging them.

Open source operational IT innovations

Universities should stop protecting their operational information technology IP and recognize that by proactively sharing it instead, there is a potential that technologies could standardize, operating costs could decrease, and places like the University of Minnesota could shift IT resources to focus on real technology differentiators to leverage, compete, or partner with rising technology stars like Coursera, Udacity, EdX, etc.

Build IT communities that span across multiple institutions

I also believe that by adapting and applying UMN-IT's community of practice development model to building inter-institutional open source communities, many higher education institutions could mutually advance their respective operational excellence (OpEx) initiatives: 

By open sourcing code and investing in community development, universities could accelerate the commoditization of operational technologies and reduce the costs of maintenance to make room for work that matters.

Institutions should NOT open source everything--just the mundane infrastructure oriented stuff that provides little potential for competitive advantage or strategic differentiation.  I am talking about things like configuration management tools, ETL, and data integration tools.  I am talking about most of the operational innovations that come out of internal technical communities like Code-PeopleDevOps, the IDEAA group, or other informal communities. Many institutions are solving the same complex and expensive operational IT problems over and over; open sourcing their solutions would bring down costs across the entire system.

Create a policy framework to make staff open sourcing easy

In the same way that traditional technologies being developed and licensed by the Office of Technology commercialization typically require a business plan of some kind, perhaps a similar framework could be constructed to streamline the open sourcing process.  Instead of a business plan with 5-year revenue financial projections, maybe it would be a 2-year technology roadmap and community development plan that sets targets in terms of numbers of users & institutions. Maybe it would illustrate how 1) money cannot be made off of it, and 2) why sharing it would do more good than harm. Something to make it easier.

I wish all the great people I've worked with at the University the best of luck and look forward to the next time our paths cross.

Saturday, August 31, 2013

Fixing higher education IT by open sourcing operational technologies

Problem: Too focused on the mundane
Most higher education institutions have expensive, highly varied IT Enterprises that spend far too much on mundane, operational things like ERP, workflow tools, and content management.

Need: Focus on what matters
Institutions need to find ways to shift from this operational orientation to a structure optimized for innovation on things that matter like academic analytics or online learning.

Solution: Open source operational technologies
Institutions should open source low level infrastructure oriented technologies to bring down costs via standardization. Open sourcing should be coupled with proactive efforts to build technical communities oriented around the same problem space that span multiple institutions. 

Open sourcing should not be viewed as a magical wand that will fix problems, nor should it be viewed as forgoing revenue that could have been received via software licensing. It should be viewed as a way to create communities and competencies that result in lower operating budgets and higher capacity to innovate.

Blog not just about software dev anymore...

It's about time I start using this blog to reflect the full range of stuff I'm into, not just software development. From here on out, this blog may sport such fine things as:

Management Crap (tag: management)
Having finished a master’s degree last April and the prerequisite mountain of research and writing that goes with it, I decided it’s about time to start writing some blog posts on topics of open source business models, community development, and strategies to change higher education IT.

Weird Music (tag: music)
For 8 years, every summer I get together with a bunch of musician friends together to make "a bender" album that we publish on the web at the end of it.  Though it's mostly about the process: the challenge of making a "listenable" album in a very short fixed amount of time; occasionally, gems such as Meat Coma emerge. I initially started a blog called "JingleCore: For Those Who Shit Riffs", but said to heck with that and figured I'd just publish this stuff here with the tag "music".

Friday, July 19, 2013

Install ruby-oci8 + Oracle instant client in < 20 minutes

I can't count the number of times I've lost hours installing Oracle drivers for Ruby so I can use the ruby-oci8 gem.  I just managed to do it in 16 minutes.  I challenge readers of this post to time themselves and edit the gist/add a comment, so others waste less time doing this!

The bash script:  (manual intervention required): 

Sunday, May 5, 2013

Ruby for non-programmers and managers: Why Ruby...and a few tips on how to get started

There is a ton of other MUCH more useful stuff on the web about learning ruby & rails...This is my attempt at writing up something useful to help a few non-programmer friends get up and running with Ruby on Rails and something I can cite in the future when non-technical people ask me about Ruby.

Why Ruby (the programming language)?

Most developers will tell you, "Ruby is so dang nice cause it's elegant, expressive, and X, Y, Z".  It's true.  As a non-programmer, however, you're probably saying, "Who cares?".  Here are a few alternative perspectives.

Because it's being adopted at a very fast pace

The first graph below illustrates that Ruby has a relatively low percentage of jobs with this skill in their descriptions.  However, the second graph shows the precipitous ~5000% growth its seen in the last few years. Ruby is an up and coming language.  This is a good thing.  The more widely a language is spoken and written, the more valuable it becomes.

Because Ruby is a really productive and maintainable language

On AstonJ's blog post about "what's so special about ruby", he has 3 examples of the same functionality in PHP, Python, and Ruby.  By word count, we're at 32,26,25 words (respectively), so one might say that Python and Ruby are at parity in terms of conciseness and power.  However, take a closer look at that code.  Even if you don't know a damn thing about programming, the Ruby code is very readable, whereas the others seem pretty weird to a non-programmer.  The non-programmer perspective on why this matters is that when brain's spent less time decoding complex syntax, they are freed up to work on more interesting problems like solving business problems.

If you want to learn's what I'd recommend

  • First and foremost: Get a working Ruby environment up and running! Don't read for hours and hours without trying the examples. ( i suppose you could use TryRuby...but...) Having made this mistake myself many times, I firmly believe that reading without coding is like skimming through a grammar book on Swahili and expecting that if you do it long enough, you'll eventually speak Swahili, NOT TRUE.  Always balance your reading with your writing.
  • Peruse and study the many awesome things on this sample learning plan. There are a bazillion good resources for new programmers there including TryRuby, RubyMonk, and the Learning to Program book.
  • As far as book publishers go: I love Pragmatic Programmer, they publish great books on Rails.  The Agile Web Development on Rails is the quintessential book for learning Rails.  As AstonJ says, however, learning Ruby before Rails can be a good way to go. 

Getting a Ruby Environment Setup: Workstation

  • If you are using Windows, get a Mac...or use VirtualBox + Ubuntu + for your base OS.  The rest of these instructions might not be that good cause I use a Mac, sorry, :(.
  • If you are using Mac, get homebrew

Getting a Ruby Environment Setup: Command Line

  • Install git (`brew install git`)
  • Use homebrew to install rbenv (a tool that lets you run multiple versions of ruby)
  • Install Ruby with rbenv (likely something like `rbenv install 1.9.3-p327`) 
  • Install Ruby on Rails: `gem install rails`

Once the Dev Environment is Setup: Tinker

One of the worst things you can do as a programmer is code in the dark, i.e. code without knowing what it's doing.  The more visibility you have into the program you are writing the better off you'll be.  Rails provides numerus tools to help with this.  My favorites:

  • rails console: For interacting with the models + helpers associated with your Rails app
  • ruby debugger or pry For dynamically interacting with your Ruby program while it's running.

Other learning resources

  • + (for older versions of Rails)
  • RailsCasts (short videos)
Okay.  That's enough.  

Saturday, December 1, 2012

Booya: Iron Fixture Extractor 1.0.0

Booya! Announcing Iron Fixture Extractor 1.0!

I posted about this tool several months ago, when it was just a wee baby, and I'm posting again because it's grown up to become part of the bread and butter of our development process and has had many features, bug fixes, and test coverage added.

This tool has been absolutely critical in building the app we're working for building complex fixture sets dynamically from our deployed staging app and incorporating into our test cases to ensure the app operates correctly with all of the crazy data nuances.  It has allowed us to leverage our business analysts deep data knowledge and make our tests reflect reality better.

I also rewrote the README to be a bit more useful:

I hope others find this tool useful...

...when your data is too complex for factories, you don't want to manually maintain fixtures, and you don't want to take the risk of missing the edge-cases resident in real data:

Iron Fixture Extractor.