28 December 2012

Painless Java Config and Install for Linux

If you need to install Java on a Debian based Linux distribution, do yourself a favor and use a little shell script named oab-java6.

The oab-java script completely automates the setup of the necessary items for the installation of Java, it's damn simple to use and it completes the set up in just a couple of minutes (depending on the speed of your internet connection). The best part is that nothing gets installed until you actually install it via apt-get.

If you want to know more, then read the doc for oab-java6. It's a very quick read.

19 December 2012

Outlook 2011 for Mac Misbehavior

Recently I upgraded my work computer from Mac OS X Lion to Mountain Lion. I also updated all the MS Office apps. Everything seemed to go off without a hitch as I experienced no issues during the upgrade and all the apps I use on a daily basis haven't seemed to experience any issues... until this week.

As much as I really, really dislike the Microsoft Office products and especially Outlook, I have to use them for my work on a daily basis. Suddenly just this week Outlook began misbehaving by no longer allowing me to search for messages. Any attempt to search my inbox resulted in nothing. This quickly became a pretty big problem because the inability to search made me realize how often I rely upon this feature every day.

Upon doing some research, I found many others with this same issue, but I couldn't find a definitive solution. Digging deeper, I discovered that Outlook relies upon Spotlight to perform searches. So the solution was to reindex the messages in my inbox, right? I tried forcing this by dragging and dropping the MS Office Identities directory into the Spotlight preferences' Privacy tab and then removing it. No dice. Then I tried to simply reindex everything using mdutil:
$ sudo mdutil -i on /
Spotlight server is disabled.
Hmm, I guess I need to enable the Spotlight server:
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
Then I was able to run:
$ sudo mdutil -i on /
/:
 Indexing enabled. 
$ sudo mdutil -E /
/:
 Indexing enabled. 
This seemed to trigger some indexing, but nothing notable appeared in the Spotlight menu (cmd-space) like I've seen before when the drive is being reindexed. So the last thing I tried was to determine if there is a plist file for Spotlight. My guess was that the plist file had to become corrupted. In similar cases (I had to do this recently for the screensaver) when a plist file becomes corrupted you have to remove it and let it be recreated. So I found a plist file for Spotlight and removed it:
$ rm ~/Library/Preferences/com.apple.spotlight.plist
After rebooting the computer, I could see the reindexing immediately kick off via the Spotlight menu. After waiting three or four hours for the drive to be indexed, I can again search the inbox in Outlook. Yay!

06 December 2012

Hilarious: Devs vs. Ops

Today I stumbled upon an absolutely hilarious depiction of developer folks vs. operation folks, check it out:

05 December 2012

VIM Syntax Highlighting for Scala: A Bash One-Liner

Just for posterity, here is a Bash one-liner to download the VIM plugins to handle syntax highlighting for Scala:

mkdir -p ~/.vim/{ftdetect,indent,syntax} && for d in ftdetect indent syntax ; do wget --no-check-certificate -O ~/.vim/$d/scala.vim https://raw.githubusercontent.com/derekwyatt/vim-scala/master/syntax/scala.vim; done
Update

Here is a solution using cURL submitted by Joe:
mkdir -p ~/.vim/{ftdetect,indent,syntax} && for d in ftdetect indent syntax ; do curl -o ~/.vim/$d/scala.vim https://raw.githubusercontent.com/derekwyatt/vim-scala/master/syntax/scala.vim; done

06 September 2012

The Regenexx Stem Cell Procedure For My Left Knee



Since my last follow-up back in April I have actually had more Regenexx activity, only this time it's my left knee. So I can no longer refer to my right knee as my Regenexx knee because they have both been treated with Regenexx. The right knee was treated with Regenexx SD and the left knee was treated with Regenexx SCP. Here's the story on my left knee.

After the treatment of my right knee, Dr. Centeno demonstrated how tight the ACL is now in my right knee. It's nice and snug with no extra play in it and the tears in the meniscus have healed very well. This is exactly the result we were seeking and what allowed me to continue cycling throughout the summer. This summer my business schedule got in the way quite a bit but I still managed to ride the legendary Triple Bypasss and also my annual stop at Copper Mountain to ride in the Courage Classic.

Unfortunately we noticed how loose the ACL was in my left knee. Performing a simple Lachman test indicated a remarkable amount of slippage, so we decided to get a MRI on the left knee to check it out. After doing so, we were able to see that the ACL was definitely intact, but that there were some spots around the meniscus and the medial collateral ligament that were experiencing some wear and tear. I have never suffered any injury to my left knee, but I do experience stiffness in it. Given the success I had with Regenexx SD on my right knee, I decided to have my left knee treated with Regenexx SCP as well. I just had the final injection eight days ago. Right after the injection I experienced quite a bit of pain and discomfort and the range of motion in my left knee was far from 100%. Here's the breakdown of the treatment:

July 5 - Receive prolotherapy injection and micro-damage to the left ACL, MCL and meniscus. This is basically an injection of dextrose directly into the ACL along with some additional micro-damage using needles. This all causes irritation to the areas that are being targeted for treatment because it causes the red blood cells to flood into the area to heal the irritation and damage. Although it's a weird feeling during the injection right into the ACL, this treatment didn't slow me down one bit with regard to cycling.

August 1 - Receive another prolotherapy injection and micro-damage to the left ACL, MCL and meniscus again. Same thing as one month before.

August 28 - Blood draw to use for the stem cell plasma injection.

August 29 - Receive the stem cell plasma injection to the left ACL, MCL and meniscus. This injection was painful and immediately afterward I had a very difficult time putting any weight on my left leg. In fact, I went home and used crutches for two days until the pain subsided enough to begin walking.

Today, a little over one week after the injection, I have nearly 100% range of motion back and I am starting to walk longer distances. I am still having some trouble at night so I put a pillow between my knees to try to level out my left leg a bit. I've already started doing some light spinning on my road bike with it on my trainer. So far, everything is tracking similarly to my experience with my right knee. Now it's just a matter of following the regimen from the doctor and allowing the treatment take effect.

The Regenexx SCP procedure that I had performed on my left knee last week was less than half the cost of the Regenexx SD procedure. I had no injury in the my left knee, just wear and tear from getting older. But I'm hopeful that I will experience the same outcome as my right knee. I look forward to the day where I can run many miles without knee pain.

06 July 2012

Agile and DevOps, A Perfect Match

Through the years in my career, I have spent a fair amount of my time advising customers on Agile software development. Having practiced various Agile methodologies since the late 1990s, I've witnessed many implementations of Agile, both successful and not so successful. In more recent years, the notion of Agile has expanded across organizational boundaries and given way to a newer concept known as DevOps. While these two topics dovetail nicely and my years of past experience are relevant here, interesting questions always arise. Consider the following question that I received recently:

Question

What are the migration milestones in building out a DevOps group?

I suggest that this question be reframed a bit. For an organization to enter the world of DevOps means that one must adopt a mindset that is focused on agility in the processes and the methods used to execute those processes. It is very important that you identify the best way of carrying out that mindset across your organization and that it include not only software engineering, but also the customer, the business folks, quality engineering, test automation, release management, security, operations, system administration, etc. DevOps is about a fundamental reorientation to provide software in a more effective manner beginning with design and going all the way to production deployment.

Remember SOA?

I will draw an analogy here to a recent trend in software architecture. The concept of a service-oriented architecture (SOA) embodies a set of principles for designing and developing software. It's the 'why', not the 'how' of software architecture (i.e., SOA is a means to an end, not an end in itself). Numerous vendors took the SOA term and twisted this notion into a wrong-headed marketing message that basically said, 'Buy our software and you will be doing SOA'. I spent a lot of time dispelling this myth over the last several years, encountering much resistance along the way. But make no mistake, SOA is not a technology problem.

If someone asked me about forming a SOA group inside their company, I would tell them that they already have one and it encompasses the customer, the software architects, the software engineers, the quality engineers, the release engineers, the security experts, and the operations folks. There is no need to assemble a brand new group. Would you advocate the formation of an Agile group inside a company? I certainly would not because interpreting a methodology in such a literal fashion seems to me like you are already driving the car into the ditch and through the corn field. When I was a kid I learned a term for stuff like this, an Arkansas screwdriver (also known as a hammer). Just because you can doesn't mean you should.

Over the years, I have worked with many companies to get them on the road toward designing applications by using SOA. When I do this, I lead the customer toward the identification of folks across the organization who can participate in this effort. I was certainly not alone in this effort and this style as there are many others doing the same/similar thing. Although we operated on the idea that we were coaching customers to develop apps using SOA via Agile methodologies, I now realize that we were also already leaning toward DevOps. (Based on my research, this is really how the DevOps movement came to be what it is today.)

A Perfect Match

Getting back to the original question, I would not approach DevOps any differently than I have approached the coaching of customers into the use of Agile methods. Continue to coach customers in this manner and you will be successful. Only now, we have even more information and wisdom telling us that this is not just for software engineers. This is a fundamental change for an organization and should be broken down as described on the Agile Admin blog like so:
I tend to think about DevOps in the same way that I think about Agile or even SOA, but with a bit more reach across the organization. That is, DevOps is a set of principles for designing, developing, testing, deploying and supporting software. Each role will utilize different tools but they will all be involved in the overall software development lifecycle. DevOps is also a means to an end, not an end in itself. Some of it's main differences are that it cuts across an organization even further to include many roles and people, and it considers software development as a full lifecycle instead of only focusing on the software until its a teenager and then throwing it over the wall to operations and hoping it survives.

The Value of DevOps to the Business

Finally, the value of DevOps to the business is often misunderstood or not understood at all. Historically, the business side has treated software development as someone else's problem. The perception has often been that the propeller heads down the hall are responsible for the software, not the business side. This has always struck me as terribly short-sighted, especially for a company that would not make money without its software.

Consider another analogy here to depict this situation appropriately. Businesses love to equate themselves to sports teams and I've heard this one before, so I'll use the idea of a pro cycling race team (please forgive my cycling fever during this Tour de France season). A pro cycling team operates in a smooth, fluid manner handling anomalies as they arise without disruption. Like any good team it has the following characteristics:
  • A clear direction with clear support and resources from the business side
  • Team members have a good relationship with one another and with supporting companies or organizations
  • The team monitors many external factors that effect their performance and their success
Although a pro cycling team has its recognizable personalities in the riders, there are many more people behind the scenes who make them successful. Without the entire team working as one they will not be successful or will be less successful than they planned. The team sponsors, the directors, the managers, the mechanics, the masseuses, the assistants, the domestiques, and the recognized riders all must be in tune and ready for success. They each have well-defined roles and operate in tandem across organizational gaps to be the very best at everything in pro cycling. I don't believe that these teams would be successful if they did not include everyone in the orchestration. There's also certainly a lot of luck that needs to be on their side to be successful, quite like the business world.

A company that relies on its software to make money is very much the same. Consider the following comparisons:
  • Just as a pro cycling team has a clearly defined direction, so should a company that relies upon software. This message needs to be tuned appropriately to fit different areas of the business, but the overarching message remains – create a machine to make money.
  • Just as a pro cycling team has clear support from the business side to stay on top of the technology in its field, so should a company that relies upon software. This means that time must be dedicated to the craft of building software, continued education where necessary, the purchase of materials (books, publications, etc.) and tools, etc. Do you want excellent, highly talented mechanics, masseuses and domestiques or just mediocre ones?
  • Just as a pro cycling team forms close relationships between team members, so should a company that relies upon software. This doesn't just apply to folks who work in the same department. The most important relationships are those that span boundaries and break down barriers between departments within an organization.
  • Just as a pro cycling team learns to execute flawlessly together, so should a company that relies upon software. Consider that the software a business relies upon to make money is the bike and the rider that a pro cycling team chooses. Do you think that the pro cycling team just arbitrarily decides how to prepare and train for events? Or do you think the pro cycling team has a strict, regimented formula to its training and preparation? A business that relies upon software to make money should also have a strict, regimented formula for crafting, testing, deploying and supporting it's software. Without this level of capability, the ability of the business to make money on a consistent basis is hamstrung by its own processes or lack thereof.

Conclusion

The bottom line is this: A business that deems its software to be critical needs the ability to get that software to market in a consistent, repeatable manner every time. Period. How can this be achieved without involving all of the parties who touch that software in some way?

04 June 2012

How to Change JDK Version From the Command Line

Today I was trying to figure out how to quickly change the JAVA_HOME environment variable from the terminal using the /usr/libexec/java_home command-line utility. I looked at /usr/libexec/java_home --help but didn't pay close attention to the usages because I was in on the phone. As my friend Martijn Dashorts pointed out, there's a manpage for this utility. I am embarrassed to admit that I didn't even think to check for a manpage! My idiot moment for the day, I guess. Here are the two aliases I created:
alias setjdk16='export JAVA_HOME=$(/usr/libexec/java_home -v 1.6*)'
alias setjdk17='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7*)'
Put these aliases in your ~/.bash_profile or ~/.profile, reload the profile and you're ready to go. BTW, if you haven't switched from iTerm to iTerm2 yet, you should do it now ;-).