Archive

Author Archive

Making Decisions in Small Iterations

March 7th, 2009 gorshing No comments

Earlier this year the New York Jets announced they had hired Rex Ryan as the new head coach. I have personally meet Rex on a couple of occasions so I have followed along and read many articles and comments about Rex’s decision. One gentleman in particular criticized for leaving the Ravens so quickly after the season was over; he felt as though the decision was made too hastily.

I have read about the different ways people react to circumstances, one way in classifying people is by using the DISC assessment. There are plenty of people which reside in the conscientious, meaning they will take in all sides to a story and put careful thought into what their decision is going to be. As you can obviously tell, this doesn’t play out to well for somebody in leading a professional football team. They will need to make quick decisions, otherwise, the game will be over … and probably their career. Rex knows the business of football tremendously better than any of us (I’m sure some people out there will debate that thought), and he knows exactly what he wants. He doesn’t need to take time to make a decision, he already knows what he is going after. It isn’t all that difficult to know what to do when you know what you are going after.

With Agile development this seems to carry over, the team has a common goal and we all are quick to make a decision, if we do not like what we have decided upon, then we will make another. By having small (one week) iterations this is possible and it allows us to identify the pain and adjust for it accordingly.

When I first heard about having one week iterations, I thought somebody had lost their mind. I didn’t feel as though much of anything could be accomplished. On the contrary it is very apparent of the progress getting made. We are also quick to make a decision for the sole reason of not having to live with the side effects for very long if something is not working.

Retrospectives also play a key role in this, as other team members bring to light a pain point which I was oblivious to. The reasons for myself not noticing these things are many, one of the more common is simply because they are at a different place in the project than I am. They are ahead of the pack and before I continue on and begin to feel the same pain, they identify the problem and a decision is made of what to do. On occasion a previous decision made in an earlier iteration is noted as not working as expected, we are then able to adapt quickly and change to get our work environment productive.

Categories: General Tags:

This I have done

February 9th, 2009 gorshing No comments

It seems to me this should apply to most people. I do not think I have lived by its standard, maybe it is now time for me to walk the walk.

I Do Not Choose to Be a Common Man

It is my right to be uncommon—if I can.

I seek opportunity—not security. I do not wish to be a kept citizen, humbled and dulled by having the state look after me.

I want to take the calculated risk; to dream and to build, to fail and to succeed.

I refuse to barter incentive for a dole. I prefer the challenges of life to the guaranteed existence; the thrill of fulfillment to the stale calm of utopia.

I will not trade freedom for beneficence nor my dignity for a handout. I will never cower before any master nor bend to any threat.

It is my heritage to stand erect, proud and unafraid; to think and act for myself, enjoy the benefit of my creations and to face the world boldly and say, “This I have done.”

By Dean Alfange

Categories: General Tags:

Take Care of Business

January 13th, 2009 gorshing No comments

I have begun (about a year ago) to appreciate quotes and saw this one tonight:

You can’t wait for inspiration. You have to go after it with a club. – Jack London

So what is important to you? Go do that right now and stop reading this.

Categories: General Tags:

Maven Default Profiles

January 2nd, 2009 gorshing No comments

I have been using Maven for a while now and as such I have ran into my fair share of using profiles with Maven. As there are many other articles/posts about Maven profiles I will not be providing an overview here. I would like to delve into a particular area of interest when dealing with profiles and the activation aspect.

One of the many ways a profile can be activated is by ‘activeByDefault’, I currently use this both on our CI box and Windows (typically developers) box. These basically provide system properties for a database connection information and paths to property files. There has not been a time where the activeByDefault profiles has caused us any problems at all. So I was a little apprehensive when I saw James Lorenzen’s blog entry on the problems with using these types of profiles.

James professes (by way of providing a link to documentation) when a profile is activated by any other way then the so-called default profile is turned off. So I created a simple example pom in an attempt to replicate this and in doing so I ran across the same problem as he did. For the following, I use this pom as an example.

gorshing@touch ~
$ mvn clean
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------
[INFO] Building Unnamed - com.example:ProfileProject:pom:0.1-SNAPSHOT
[INFO]    task-segment: [clean]
[INFO] ----------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] [antrun:run {execution: Testing Active by Default Profiles}]
[INFO] Executing tasks
     [echo] default profile val 54
     [echo] yep 42
[INFO] Executed tasks
[INFO] ----------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------
[INFO] Total time: 5 seconds
[INFO] Finished at: Wed Dec 31 12:29:32 CST 2008
[INFO] Final Memory: 3M/7M
[INFO] ----------------------------------------------------------------------
 
gorshing@touch ~
$ mvn clean -Pqual.val
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------
[INFO] Building Core000Build
[INFO]    task-segment: [clean]
[INFO] ----------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] [antrun:run {execution: Testing Active by Default Profiles}]
[INFO] Executing tasks
     [echo] default profile val ${default.profile.val}
     [echo] yep 69
[INFO] Executed tasks
[INFO] ----------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Wed Dec 31 12:03:01 CST 2008
[INFO] Final Memory: 3M/7M
[INFO] ----------------------------------------------------------------------

As you can easily tell, this is exactly as the documentation specifies. The key difference between my experience and his is solely based on where the profiles are located. Given the setup I am using at work, the ‘activeByDefault’ profile isn’t in the pom itself, but is in ${M2_HOME}/conf/settings.xml.

I have added the following to my ${M2_HOME}/conf/settings.xml configuration, and using this pom (same as above only without the activeByDefault profile entry).

    <profile>
      <id>default.val</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <default.profile.val>54</default.profile.val>
      </properties>
    </profile>

As you can tell in the following listing, the activeByDefault truly does what one might expect.

gorshing@touch ~
$ mvn clean
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------
[INFO] Building Unnamed - com.example:ProfileProject:pom:0.1-SNAPSHOT
[INFO]    task-segment: [clean]
[INFO] ----------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] [antrun:run {execution: Testing Active by Default Profiles}]
[INFO] Executing tasks
     [echo] default profile val 54
     [echo] some val 42
[INFO] Executed tasks
[INFO] ----------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Fri Jan 02 18:42:53 CST 2009
[INFO] Final Memory: 3M/7M
[INFO] ----------------------------------------------------------------------
 
gorshing@touch ~
$ mvn clean -Pqual.val
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------
[INFO] Building Unnamed - com.example:ProfileProject:pom:0.1-SNAPSHOT
[INFO]    task-segment: [clean]
[INFO] ----------------------------------------------------------------------
[INFO] [clean:clean]
[INFO] [antrun:run {execution: Testing Active by Default Profiles}]
[INFO] Executing tasks
     [echo] default profile val 54
     [echo] some val 69
[INFO] Executed tasks
[INFO] ----------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ----------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Fri Jan 02 18:43:11 CST 2009
[INFO] Final Memory: 3M/6M
[INFO] ----------------------------------------------------------------------

I am curious as to if this is expected results, or if this is a bug which might be resolved …. if that happens then it will most defiantly break some of my builds.

Something to look into and chew on.

Update: I asked on #maven @ irc.codehaus.org and received the following from wsmoak (these are of course her opinion):

activeByDefault was originally intended to be active only if no other profiles were explicitly activated … a cheap way to activate exactly one of a set of profiles … however I think it’s been “improved” since then. not sure exactly when/how … I generally avoid using it and don’t recommend it

Categories: Programming Tags:

New Terminal Emulator for Cygwin

December 30th, 2008 gorshing No comments

Just recently there was a post to the cygwin mailing list, I typically won’t post items like this, but I felt this was an exception to the rule.

Hi,

I’d like to introduce “MinTTY”, a terminal emulator for Cygwin that I’ve been working on for a while. It is based on the terminal emulation and Windows frontend parts of PuTTY 0.60 by Simon Tatham and his team.

Unlike PuTTYcyg, MinTTY discards PuTTY’s networking functions, which are already convered by Cygwin’s ssh and telnet packages. This results in simpler configuration, a leaner interface and small code size. MinTTY’s most obvious difference to rxvt is its native Windows interface and configuration dialog.

More info, as well as the latest sources and binary can be found on the project page:

http://code.google.com/p/mintty

The MinTTY discussion group can be found at:

http://groups.google.com/group/mintty-discuss

I hope you’ll give MinTTY a try, and I’m looking forward to feedback and questions. Bug reports and feature requests can be sent via the issue tracker on the project page.

Regards,
Andy

I am using it currently; and quite honestly I think for an initial release it is quite good.

Categories: Linux Tags:

Convert Local Maven Repository Into Managed

December 24th, 2008 gorshing No comments

There are developers using Maven which decide, for some reason or another, not to use a repository manager. As time progresses on they realize they need something more robust in order to manage all there releases, or possibly the team begins to grow in size. No matter the reason, there are times when a local Maven repo needs to be converted to a managed repo.

Stuart McCulloch ran into this as well and wrote a blog post on how to accomplish this. One caveat is the scripts expect the machine to be a Linux flavor, I guess if you had Cygwin installed then this would still work on Windows (albeit I haven’t tried).

Now with the latest release (1.2.0.2 at the time of writing) Sonatype’s Nexus Repository Manager comes prepackaged with a set of tools. One of which is a repository converter tool. Refer to the user story for more information.

Categories: Programming Tags:

xmllib2 and python

November 15th, 2008 gorshing No comments

I have been working with Python and libxml2 for a bit now and have found out there is little documentation out there on how to get everything working together. Also as I have very little permissions on some of the machine I work on, I need to be able to have my own installation of Python without affecting the entire system. I have put together the following steps to follow for installing your own installation of Python using least privileges (without root access) for both Windows and Linux.

One quick note about Linux, a lot of GNU Linux distributions out there might already have Python2.5, but I have not had the luck of dealing with any of these. You should check to make sure you need to install a custom installation.

Typically I would like the latest and greatest of a package, however; the libxml2 Windows package does not seem to acknowledge Python2.6 or above, so to keep everything on the same page I use Python2.5 on Linux as to match up with a Windows version also. It goes without saying, but if platform independence doesn’t matter to you then choose whichever way you would like, for myself I like to have my scripts be able to run on Linux and Windows.

Download and extract Python-2.5.2.tar.bz2 from http://www.python.org/ftp/python/2.5.2/. I typically just work out of my home directory, but to each their own.

wget http://www.python.org/ftp/python/2.5.2/Python-2.5.2.tar.bz2

Now just a simple extraction:

tar xjf Python-2.5.2.tar.bz2
 
cd Python-2.5.2

Now we need to configure the python setup. The key part is the –prefix portion, as many people out there are not too familiar with building a source distribution by hand. This basically is the location where all the binaries, libraries, and man pages will be stored. The layout under this directory will be something similar to (I kept this brief, you will have more than this):

$HOME/utils
  +- include/
       |- python2.5
  +- lib/
       |- python2.5
  +- share/
       |- man
  +- bin/
       |- python
       |- pydoc
       |- python2.5
export LDFLAGS="-R$HOME/utils/lib"
 
./configure --prefix=$HOME/utils
 
make

I use the LDFLAGS variable to keep from dealing with LD_LIBRARY_PATH, please these links for more information.

Note: On some hosts, such as Site5, you will need to ask IT Support to be put into a compiler group in order to obtain access to gcc.

Now we will install all the built binaries and libraries into the prefix directory we specified earlier.

make install

I will not get into it here, but it is possible to install multiple versions of Python side-by-side. If this is something you would like, then look into using make altinstall instead. The README file details this in the Installing section (around 75% into the file).

If all goes well, then $PREFIX/bin/python should work. I typically adjust my PATH environment variable to accommodate this:

export PATH=$HOME/utils/bin:$PATH

Installing libxml2 on Linux

As these steps follow extremely close to the preceding steps, I will make this a little more brief.

Download libxml2-2.7.2.tar.gz from ftp://xmlsoft.org/libxml2/ (a newer version might be available).

Extract the package in to a working directory.

tar xzf libxml2-2.7.2.tar.gz
 
cd libxml2-2.7.2

Then execute the following:

./configure --prefix=$HOME/utils --with-python=$HOME/utils/bin/python
 
make
 
make install

Installing libxml2 on Windows

To get libxml2 working on Windows, it is as trivial as downloading a package from http://users.skynet.be/sbi/libxml-python/, it automatically detects an installation of python and installs itself.

In some future posts, I’ll go over using libxml2 with python.

Categories: Linux, Programming Tags:

We Need Their Money

October 31st, 2008 gorshing No comments

During a recent lunch outing a discussion came up about one of our clients who doesn’t have enough money for a particular technology related item, but other renovations are happening and people within the group are getting mad. Of course the discussion turned to what all was set forth in the budget and how the IT division was hurting. The typical response is all too common, “There is a pot full of money over there, but we can’t touch it.”

We as programmers need to understand the business side of things, one of which is budgeting. I have made the mistake of assuming everybody is familiar with budget; not only just what they are in general but truly how to use one. Most people understand a budget is used to assign a name for a certain amount of monies, but some of the key ideas behind using a budget is you track throughout a specified time what you actually spend and most important of all the ability to adjust the budget the next time around.

I would like to touch lightly on the first point. If I were to put myself on a diet, I would start out with two things: to write down what I plan on eating, and then to write down what I actually eat. This makes it easier to see if I am really following what I had originally set out to do. Living by a budget is very similar. You absolutely must keep track of what you actually spend, otherwise assigning categories does not do any good. With this said there are key instances where adjusting the budget is crucial.

My wife and I have staunchly lived off of a budget for almost two years. At the end of every month we come together as a couple and decide how we will spend our money for the following month as well as to review the current month’s budget to see how well we did (see which categories we were either short or long on). There are few cases where we have to go over a category in our budget. We have identified a few categories which we deem critical, this means we will (and have) moved money from a noncritical category to the critical category. To get back on topic, in the business world few categories, IT included, are not a critical category and as such it will be difficult to get money moved over to the IT budget.

I view this as a good thing to have in place, I would definitely be in a bad mood to learn some of the IT monies which are needed and instead to be used to make a new awning or some other basically useless item. Developers need to appreciate this particular ‘red tape’ as it is a protection put in place for the company.

With all that said, it is also something we must learn to negotiate with. I do feel most of our needs (note: I did not say wants) are legitimate and came before others. How to battle this bureaucracy is subjective which I will not get into, and this differs dramatically from organization to organization, but is something we must learn to accomplish.

Categories: General Tags:

Do You Completely Understand?

September 26th, 2008 gorshing 1 comment

Almost on a weekly basis I get frustrated at other technical people because they do not see value in the things I see value in, or the miss the point. I am quick to judge them and point my finger at them for the blame. Through my recreational reading I have come to believe it is none other than my own doing.

Mark Cuban points out that you do not deserve his time if you are quick to respond with “you just don’t get it”. As he explains it, you are the one at fault if find yourself using this phrase. You must completely understand a subject in order to explain it to other people, then if still feel yourself falling back to the aforementioned phrase that is a tell-tale sign you do not completely grasped the subject you are explaining.

Reginald Braithwaite says the single most important thing to improve your programming career is to give presentations. This is something just recently I have truly enjoyed attending (within the last year). I completely agree with this and feel most presentations I have seen, the presenter either does not completely understand the problem at hand nor do they feel motivated by the topic. My understanding and appreciation of these individuals and what they go through has had a major turn around. I have had the fortunate opportunity of knowing on a personal level a few people who have presented items at my local JUG.

I would like to encourage others to present topics as well. So many people feel as though they do not fully understand a topic as well as others; and this is true. There are few, if any, topics I know better than anybody else, however; this is about improving yourself as a developer and I know first hand your local SIG (special interest group) would be excited to have more people provide presentations.

Categories: General Tags:

Comparing Maven Repository Managers

August 29th, 2008 gorshing No comments

This seems to do a pretty good job at comparing, as far as a feature matrix, three of the top repository managers for Maven.

I know for sure developers from Nexus and Archiva have made sure this is up-to-date.

Categories: Programming Tags: