Category Archives: technology

Out with old and in with the new

startrek-ubuntu-bootupI have been waiting a long time to resurrect an old friend of mine: my MythTV box. I built that machine ten years ago. (I’d show you the specs, but they’re locked away ON the machine in an antique mediawiki web server). It runs Root-on-LVM-on-Raid top to bottom (which, BTW, requires LILO).

It was great project to build my own homebrew DVR. But with the advent of digital cable and EVERYTHING getting scrambled, those days are gone. So it’s sat in the corner for four years. FOUR YEARS. I’m reminded of this through periodic reports from CrashPlan.

I started to get this idea in my head that I could rebuild it with Mac OSX and make it a seamless backup server. Until I learned it was too hold to not support OSX. So it continued to sit, until I learned that I could install the right bits for it to speak “Apple”, and hence become a Time Machine capsule.

So here we go! I discovered that I needed a new VGA cable and power cord to hook up the monitor. After that came in, I booted it up…and almost cried. Almost.

As I logged in, I uncovered neat stuff and some old commands I hadn’t typed in years. But suffice it to say, it is now beginning its first distro upgrade (probably more to come after that), and when done, I’ll migrate it off of being a Mythbuntu distro and instead pick mainline Ubuntu (based on GNOME).

One that is done, I hope to install docker so I spin up services needed (like netatalk) much faster and get ahold of its ability to provide an additional layer of home support for both my and my wife’s Mac laptops.

We won’t own our own information until we do

Not a week goes by when I hear some story about people displeased with how their own content has been misused. People gripe that entering stuff into Facebook no longer belongs to them. Other people copy-and-paste such stuff into other places. Things go “viral”.

I chuckle at how so many politicians act like we are still in a pre-YouTube era. They say and do stupid things in front of small crowds. Someone inevitably grabs a clip with their phone, posts it to YouTube, and it blazes across the twittersphere. Or someone makes an accusation or promise, and in minutes, a video interview from fifteen years surfaces and gets re-posted to the interwebs.

The truth is, there should be some sense of ownership of our content. If I post something, somewhere, I understand people’s desire to hold onto it and have the last word. Unless you speak it in front of someone else, and they make an independent copy, it makes sense that you should be able to effectively delete your posting. What you said and the repercussions thereof are your own issue to deal with.

The truth is, we can’t “own” anything we write anywhere unless we can wrap it using encryption technology. Essentially, if every blurb you posted was an encrypted bundle, people would have to come to you to decrypt and read it. Throw away the key, and that blurb is gone forever. For certain avenues, like everything I write on Facebook, I can understand retaining a hold on it. And if someone wanted to copy-and-paste it, it would be really nice is the encryption traveled with it. Copy it 1000 times, as long as the wrapper is in place, and you still control it.

But there in lies the rub. Encryption technology has proven far too difficult for mass consumer adoption. Just now, the web is headed towards moving all web traffic from HTTP to HTTPS to prevent intermediate snooping. This should have happened years ago. But the next big leap would be encrypting all email traffic. With people losing laptops and thumbdrives, lots of security breaches have happened. If ALL email was wrapped in encryption, privacy would be a much stronger concept. But the process of doing that is arduous. Exchanging keys, keeping your private key secure, and then entering passphrases all the time is a hassle.

Take that concept and apply it to every other medium in which you write something. Even this blog entry! It’s safe to say, such a concept won’t come to pass until it becomes effortless to prove on a terminal you are who you say you are, and to lock and unlock keys suitably. Seeing the web move to SSL is a good sign. I just hope we can migrate along these paths faster than we can figure out to integrate stuff together smoother. We must own the pipes and the traffic our data rides along.

The state of Spring so far…

I-heart-spring-AidenI have never been more excited to be a part of the Spring team as I am now. It feels like we are blazing new trails left and right. Seeing the massive turnout this week for Stephane and Brian’s “Spring Boot University”, a 3-hour session at DevoxxFR, left me awestruck. Wish I could have been there.

Everywhere I turn, people are gobbling up Spring Boot. They tell me, this is what they have been looking for. How did this happen? It’s a really neat history.

A little bit of history

The Spring Framework started lean and mean. It was a fantastic way to integrate critically needed tools through its profound power of dependency injection. Some people criticized this as hype, but the community’s massive adoption proved the vitality of this approach. Coding was fun! Demo apps are one thing, but people were using Spring Framework to build large, complex systems. Complex systems need lots of components. Existing APIs like JMS, JDBC, and other things came with the need for lots of plumbing. These APIs were way too low level. And thus was born JmsTemplate, HibernateTemplate, and my personal favorite: JdbcTemplate.

But that was not all. Building web apps with Spring MVC was hot. It made testing app controllers nice and easy. You weren’t obligate to run web-based acceptance tests through complex controls. Instead, you could isolate things. Nonetheless, as the needs of the community grew, so did Spring. To help different parts of Spring grow and evolve and now slow down the core framework. other projects were formed. Spring Security, Spring Data, Spring Integration, Spring Batch, and more. At one point, people expressed their dislike for “spring.jar” containing everything. The Spring team chopped things up into finer grained JARs so you could grab what you needed. Then we had too many JARs. What?!?

As the power and might of Spring grew, so did its learning curve. People were asking which project to use. How to integrate them together. What version of Spring Integration with the version of Spring Framework I’m using? How do I even start using Spring MVC? What steps do I need to carry out?

Spring Boot is born

platform-spring-bootThus was born Spring Boot. Spring Boot brought forth a series of critical concepts.

  • Pre-pick the versions of Spring and other libraries so you don’t have to
  • Auto-configure boilerplate stuff like Spring MVC, Security, Integration, etc.
  • Remove key beans if you define your own
  • Accelerate Spring’s power of externalization of properties to Warp Factor 9!
  • Add on DevOps-ready metrics

A big hurdle was mixing together different libraries. If I have Spring Framework 4.0.1, what version of Spring Integration should I pick? Simple: pick one version of Spring Boot, and both of those dependencies are pre-picked for you. Boot doesn’t stop there. It extends into lots of key 3rd party libraries. This decision was so popular, that Spring IO was created to reach out and harmonize the versioning of 380+ libraries.

A big issue (especially for me, a non-web guy at the time), was standing up Spring MVC. First, you had to put certain bits into web.xml. Then you needed to stand up view resolvers, message converters, controllers, and a whole cadre of other components. You really needed to understand Spring MVC to do it and to do it right. Spring Boot stepped up to the plate and said, “don’t worry, we’ve got you covered”. Add “spring-webmvc” to your project, and Boot will create all that stuff for you. You just create a controller that returns view names, and you’re up and running.

danielskullNo form of automation can ever cover every circumstance. Sooner or later, developers need to break out of the framework’s default position. And this is where LOTS of tools fail on a massive scale. There are two common outcomes: 1) Don’t permit such customization and hamstring future developers or 2) Add so many extension points that the simple use case vanishes. Spring Boot introduces option 3) Drop bits of auto-configured stuff when you create your own. This is known as backing off, and has moved the bar forward on app and framework development really far. New applications and new frameworks will surely adopt this approach to expansion because it just makes sense. If you build a framework and don’t shoot for this, someone starting after you might catch up and pass you because they will.

Something I’ve needed for years before I wrote Java for my day job was externalization of application properties. I dealt with development, test, and production environments. Rebuilding apps for each target was wasteful. So I hand wrote code for that. Spring Framework has always had powerful support for properties files, but Spring Boot took that feature and accelerated the options. Having APP_ENV and -Dapp.env both map to @Value(“${app.env}”) String appEnv or class ApplicationProperties { public void setAppEnv(String env)… } is sheer genius can cannot be understated. People talk about 12-factor apps and high tech wwizbang manifestos, but this concept is simple to grok and applicable just about everywhere. You could be running a close network solution (which I did at my old job) with no cloud involvement and find this technique the Right Thing To Do.

DevOps-ready controls and metrics is something area always begging for. System administrators, program managers, business analysts, and others are always asking for this extra metadata about our apps. Being able to spit out a first cut of this by simply adding one dependency to an application is phenomenal. Then being able to craft your own metrics and controls with little effort ramps your app up to production ready and Management Friendly by providing them the warm fuzzy metrics for clients without breaking the bank of technical debt.

Where are things now?

With Spring Boot spreading across the Java ecosystem over the past two years, it really is exciting to see how much fun people are having building apps. They focus on the end game, not setting up infrastructure. Hearing chatter like “Using Spring Boot is like pair programming with the Spring team” (@starbuxman) and “Spring Boot is just what we need” is cool. I get excited to go the Nashville JUG and talk about some piece of Spring, not just because it “looks good”, but because I can sincerely point out how using it is simply fun! Isn’t that what real software is supposed to be? Functional, carries business value, and at the same time, fun to build and release? It almost feels like Spring Boot introduces yet another rennaisance to application development.

3021OS_mockupcover_normalI have been quite pleased that my previous book, Python Testing Cookbook has earned double the advance over the past three years (and keeps making me money!) But I jumped out of my chair when the first statement for Learning Spring Boot came in last month and showed that over 400 people had bought a copy. My excitement to write about Spring Boot was paralleled by my instinct that people would want to learn about Boot’s secrets.

There is a lot of action happening in the Spring team as we continue to blaze trails we couldn’t foresee five years ago. Many of our key decisions in the past have put us on a strong  footing to continue pushing the envelope for the future in both application power as well as ease of development. The community experience of putting out new features, getting feedback, and generally building something better each and everyday that helps thousands of people solve problems is both inspiring and humbling. There’s no other place I’d rather be working.

Happy coding!

How open source has commoditized computers

mac-snow-whiteAs I type this blog entry, from my wife’s newly purchased MacBook AIr, I marvel at the power of open source. Thanks to open source, we are no longer bound to a particular vendor, operation system, or anything else.

My wife’s old netbook was the last machine in this household that ran Windows. Back when we got married and lived in a smaller house, the desktop computer in the living room ran Ubuntu LInux. It took my wife little effort to learn how to drive that machine, considering she primarily used computers to browse the internet and a little bit of picture management when making Shutterfly books.

I introduced her to OpenOffice (later migrating to LibreOffice) for writing. I then threw in Dropbox and gave her her own folder to keep her own written works. With all these in place, it didn’t even take a whole day before she was up and running, editing her manuscript on the new Mac.

By moving to a handful of open source projects, the need for a particular vendor evaporated. Now we can pick a machine based on more important things like: quality, performance, and tools. I got her a maxed out 13″ MacBook Air (8GB memory , 512GB SSD disk).

Suffice it to say, she is definitely happy. You can even see the decal she just ordered up above! I have gone in and done a couple extra steps, like installing Crashplan to back things up. I am also installing Homebrew in case I need this machine as a backup development workstation. I also flipped on remote login support so I can ssh into this lightweight laptop as needed. It truly is a thing of beauty. Ahh! Goodbye Windows!

Is your brain made up of square or round cells?

I’m an engineer. Both of my brothers are engineers. My dad was an engineering professor until he retired. One of his brothers was an engineering professor. My two cousins are engineers as well. Bottom line: I know everything about the engineering way of life and and engineer’s mentality.

Or so I thought.

I met the woman of my dreams six years ago, and we got married a year later. She is a scientist. From the get go, I knew we were perfect together. But I didn’t really know what a scientist was. I figured we must be relatively compatible. And we are in many ways. But it took dating a scientist to discover what an engineer was. Because they’re different. (I also didn’t know how bad my own memory was until I met someone with perfect memory.)

My wife doesn’t understand how I can add up a stack of numbers together in my head. Or how I can do a back-of-the-envelope estimate on financial growth without finding an HP-12C. She also doesn’t understand why I can hear a math equation or law of physics once and never forget it. How in the world can I tap these keys on my laptop and make a web site magically produce “42”. (And she doesn’t get “The Hitchhiker’s Guide to the Galaxy”!)

I don’t understand how she can track every variant of Gibb’s Free Energy equation. I once knew a bunch, but I think my chemistry professor showed me one too many, and I lost them all. Poof! I also don’t understand how she can visualize genetic solutions. One thing she loved was organic chemistry. I don’t understand how she can remember all those formulas, rules, and exceptions. And it’s the exceptions that count! She had a professor that once gave a lecture with about two seconds pause on each slide. Saying little more than “yep” followed by clicking to the next slide. For material not in the textbook. That wasn’t handed out as a supplement. That appeared on a final. Yikes!

When it comes to chemistry, she told me they’re essentially making it all up. She had to memorize who knows how many exceptions, but clearly indicated they haven’t found them all. When I realized that we haven’t licked quantum physics, and hence been able to predict the behaviors of chemistry, I think I saw an intersection of what she and I know!

Over time as we have grown closer to together, we finally figured it out. My brain cells are square and hers are round. The stuff she knows doesn’t fit in my brain and vice versa! Information has different shapes and is simply impossible for any one person to know. I believe this is the way God intended things to be. Sort of humbling really.

I thought of this fact as I was checking links from my twitter minions this morning and reading about dark patterns for the first time. I noticed that a lot of my current knowledge, assumptions, and skill is steered by picking up the smallest bits of info posted more often in social channels than read in books.

As I write technical material at work for some of our software products, our editor sometimes asks, “where did you get that?” I pause and think, because I didn’t read it in one place. Instead I heard it mentioned in a few podcasts, read some links over the past couple years mentioning it, and saw parts of it on a wikipedia article. I collated it in my mind and wrote it down to quickly bring some other developer up to speed. Noticing that none of these channels was available sixteen years ago makes me wonder how the heck I survived back then!

gitk has vi key bindings

As I’ve pointed out before, it is in your very best interest to learn vi. It may be a cryptic editor to you, but everything uses it’s most basic navigational key bindings (h-j-k-l => left-down-up-right). I just fired up gitk so I could rapidly look at the log messages I had made regarding my manuscript for Darklight, and without even thinking, traipsed through them using vi key bindings. Nice!

By the way, yes, I use git’s command line all the time, but for my manuscript I have been writing detailed log messages, aka multi-paragraph commit messages. I usually don’t do that on software, so my railroad diagram (git log –graph –pretty=”format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'” –abbrev-commit –date=relative aliased as git lg) is usually enough.

Willing to recheck your assumptions?

I remember growing up how I HATED fruitcake. My dad was a fan of it, but I sure as heck wasn’t. It’s kind of awkward, because my dad and I eat the craziest stuff that neither my mother nor my two other brothers cared for. The biggest? Pickled herring. I love that stuff. And I haven’t found anyone other than my dad who will wander within ten feet of it.

My in-laws strangely enough tend to be a tad on the picky side. This means that I am the “bold” one that will probably eat just about anything. It is up to me to introduce my 3-year-old daughter to fried fish. She seems to dig it, but my wife, try though she has, just can’t take it. My sister-in-law says she’ll eat tilapia, which I find to be the most bland fish out there (reason she’ll eat?)

This was all floating in my head as the Christmas holiday season approached. I wondered why I didn’t like fruitcake as a kid. I reviewed other things I didn’t like at the time, like walnuts, cheesecake, and blue cheese dressing. I love those things now!

Taking a gamble

So I decided to take a gamble. I hunted online for a highly recommended fruitcake, not one of those mass produced ones found at the grocery store. I stumbled across Assumption Abbey Fruitcakes, handmade by some monks in Missouri. I got online and ordered one.

It arrived yesterday afternoon. Picking it up was hard! The thing weighed in at 2 pounds. I chilled it for a few hours according to directions. The whole day, I kept thinking in my head, “I bet it’s going to taste great!” Yesterday evening, after putting the kids to bed, I cut a piece and sat down to taste this big and expensive gamble. It was fantastic!

I realized one of my assumptions, that I didn’t like fruitcake, was just another lingering relic of my childhood. I’m glad I cleared that up, because now I plan to enjoy one of these every year. My wife said she wasn’t interested, so I guess it’s all mine!

Any assumptions holding you back?

Are there any assumptions that are holding you back, either in life or in software development? Any particular bit of technology that was horrible four years ago, but you have heard people making great strides in lately? Maybe you should revisit it, and recheck those assumptions.

Looking forward to speaking at Atlanta Spring User’s Group

If you visit, you can sign up for my talk I plan to give on Spring Roo and Micro Cloud Foundry in January. I’m excited to travel down there, rub elbows with Spring enthusiasts and co-workers alike, and talk about some good ole’ Spring stuff.

For those of you that are coming, I plan to bring some goodies to add to the door prizes as well. Look forward to seeing you ASUG!

Why you should learn vi

I periodically run into new developers. It’s a wonderful opportunity to see what other people are doing  and what areas they work in. It always amazes me at how limited my own work and pursuits are in the grand scheme of things. I feel like I diversified myself at my old company by working on many different projects for different customers. In my current position, it seems like I get handed many tasks that aren’t closely tied together. But when I speak to others, it seems like there is an even wider range of things that are out there! Software really is amazing.

Inevitably, we want to know what tools we each use, what platforms we develop on, and the love/hate people have for Microsoft/Apple/Google comes out as well. I have never seen things go as viscous as things do in political discussions, but there are strong opinions everywhere in the arena of software and our tools. Of course, I always end up mentioning I use vi. A lot. Usually at least one, if not half of the people I speak to use it as well. Guess what? The other half use a GUI editor. Might I add, that they sniff that their GUI editor is more befitting our modern era. Heck, back in grad school, that was MY thinking. Someone mentioned they used vi, and I thought they were whacko. As succinctly stated, vi was created for terminal editors and predates the window-based revolution. (BTW, sometimes I find one person that uses emacs. I’m just saying.)

Of course, they’re right. vi DOES predate the era of windows. I don’t know why this implies pre-windows was somehow the dark ages, but that is the sense that I get. In this moment, if I’m feeling more confident in my choice of vi than my other colleagues, I put a foot forward and explain why. It’s the only editor that is always available no matter how I access a remote, non-windows server. That is it. Login in to a terminal server and then ssh to your box, and all you have is a shell. Trying to open a GUI texteditor requires:

  • You must use ssh correctly, so that it forwards X port requests to your local box. No extra arguments, and this doesn’t work. Oh, you used a terminal server? Sorry. Do not pass Go, do not collect $200.
  • You must have a local X server running.If it’s windows, that means buying some commercial software and having it open correctly (or already be open).
  • Your remote server must have this editor already installed. You want a specialized editor just like your development environment? You may have to go install it everywhere. What if you your development machine and target server are two different operating systems?
So, that is my argument in favor of vi. Having used it to manage lots of machines during my career, it’s commands are ingrained in my fingers, and I can use it effectively. Therefore when I’m on my development machine, I use it there to for some types of editing.
But what if I need to do some really intense editing of Java of Maven configuration files? Or other XML stuff? That is when I turn to my IDE. The reason it’s valuable to me is that is more than an editor. If provides shorts to API calls, automated running of unit tests with a set of keystrokes, and built-in refactorings. If I was dependent upon it just for editing, I would drop my IDE in a heartbeat.
Amidst all this discussion about why I use vi, and why you should too, let me answer the title of this post with something completely different. Why should you should learn vi? Because just about any tool out there knows the basic vi commands as well.
  • Visit Gmail? You can use “j” and “k” (i.e. down and up) to navigate through your list of email messages without moving to the mouse. 
  • What about Google Reader? Same thing. 
  • “But I don’t use Google! They are evil.” It doesn’t stop there. Checkout Twitter. You can hop from tweet to tweet using the same thing.

Next time you visit a web app, checkout if it responds to vi commands. You might be surprised. Perhaps this sounds like a self-fulfilling prophecy or old technology holding on for too long, but there is something to be said for efficient patterns that are still heavily used more than 40 years after invented.