dist-jar.sh

Tonight I created a shell-script to allow our developers to add jar files to our Ivy repo. As java on Linux developers, we use rpm packaged jars (see jpackage.org).

The shell-script will take in a host and a list of rpms and/or jars. For the rpms, it will extract the jar files to a cpio archive, then copy the jars to the repo.

So for example, if you download antlr-2.7.6.noarch.rpm from jpackage and want to add the jars to your ivy repo, it’s as simple as this:


./dist-jar.sh --host ivyrepo.foobar.com antlr-2.7.6.noarch.rpm

DONE! Next step is to make this a little less dependent on our internal buildsystem so that it is useful for other ivy users.

Happy Thanksgiving everyone.

shell scripting

I’m not very good at writing shell scripts, mainly because of my ignorance to the power of the shell. Today I learned you can write a pretty complex shell script as an ssh command. For example,

ssh $REMOTE_USER$h /bin/bash << EOF
[ -d $Build ] || {
echo "ERROR: Build environment $Build missing" >&2
exit -1
}
...
EOF

I found that cool.

IVY phase 1 integration complete

I finished integrating ivy into our project. As you know we were developing on linux using jpackage rpms which is a great way to install java on your linux box. But we hit a snag when we had to work in different branches with different jar dependencies. So we introduced ivy to our ant build process. I know “Why not use maven?” Because I don’t like it. That’s why. For an interesting comparison of maven and ivy click here.

My next goal is to create some scripts that will allow me to specify a set of jpackage rpms, and have the ivy repository populated and autogenerate the ivy.xml files in the repo.  This will ensure when we build our rpm of java code, we develop against the same versions that we will ship with.

Time for bed, been a long day.

python to SOAP service

I’m working on a python to SOAP client. I’m planning on using ZSI – The Zolera Soap Infrastructure to implement it. This will be an interesting foray into python as I’ve never written anything more than a simple script, hopefully python + SOAP is better than Java + SOAP.

To make it more interesting we have python clients talking via XMLRPC to our server, which will then make a SOAP call. My biggest fear will be performance and SOAP service uptime.

networking saga (parte dos)

I spent 2 hours and 15 minutes on the phone with my father-in-law helping him get the Linksys WAP54G connected to his Linksys WRT54G router. I set it up at my house first so I got get the steps down, and since it was configured for DHCP, I assumed it would get an address once he got it home.  WRONG!

After several resets, both 30 and 60 seconds, I gave up and contacted technical support.  So here I am doing a live chat with Linksys technical support while on the phone with my father-in-law passing him the commands to run.  I had a PC connected to the router, and the access point connected to the router.  Turns out you can connect the PC directly to the access point and configure it at the base ip address of 192.168.1.245 (after a 30 second reset with the power on of  course).

Once we got the access point configured as a wireless repeater, we unplugged it, and moved it downstairs to the basement.  Plugged it into the wall for power, and all lights indicated a go.  We logged on to the machine downstairs (about 10 feet from the access point), and saw the wireless connection utility say “Very Low 11Mbps”.  I was about to flip my lid as we were at the 2 hour mark already. I had him disconnect from his network, and refresh the list of available networks. We then saw 4 out of 5 bars.  I was getting happier but didn’t want to get my hopes up yet.  I asked him to connect to that one.  BINGO!  Connection utility reported “Excellent 54Mbps”. ROCK ON!

Somedays I hate being a computer geek in a family of non-geeks.  Ah, who am I kidding, I love this stuff.

networking saga

After spending Sunday afternoon setting up a wireless access point I decided to resurrect my wired router (Linksys BEFSR41) and connect it to my wireless router (Linksys WRT54G). I used up all my ports on the wireless router and didn’t want to buy a hub. I tried a few months ago to get the wired router to work but to no avail. Turns out I was plugging the WAN port from the wired router to a numbered port on the wireless router. This works but creates two different networks. I wanted a single network.

The solution was to connect a numbered port from the wired router to a numbered port on the wireless router. You also need to disable DHCP on the wired router. That’s it. It works great, I now have 3 free ports.

Family computer specialist

One of the biggest drawbacks to being a software engineer and computer enthusiast, is that you become the de facto computer expert in the family. I spent a good part of today setting up a Linksys WAP54G access point in wireless repeater mode.

The Linksys WRE54G range expander bit the bullet because of lightning, so it needed replacing. A new one would be $81 at newegg.com whereas the WAP54G was on sale for $56 at newegg.com. I have had good luck with Linksys products, but lately their “easy setup” makes my life more difficult. I find it far easier to browse to the device, set the configuration and go. The easy setup works for basic stuff, but for more advanced things like making the access point work in repeater mode not so much.

After about 3 hours of trial and error, and several forum searches, I was able to get the access point to connect to the wireless router (a Linksys WRT54G). I got great wireless connection downstairs almost 90% before it was typically 30%. But this access point wasn’t for me, it was for my father-in-law. So I’ll have to spend at least another 2 hours on the phone walking him through what I did to get it to work with his Linksys router. I’ll post on that later this week.

I’m sure many of you computer geeks out there can relate to being tech support, network admin, hardware specialists for your extended family 🙂

Ivy dependency management

We started our project using jpackage.org rpms. This works great as long as you don’t have to maintain more than one branch at a time and want to upgrade the jars in those branches.

jpackage rpms install java jars in /usr/share/java/ with a version and a non-versioned symlink. e.g. struts-1.2.9.jar and struts.jar. The utilities offered in jpackage-utils are quite handy for Linux java development, we used build-jar-repository to build our lib directories during build time. This is nice as you can say build-jar-repository –symbolic project/libdir/ hibernate3 struts …

But the problem occurs when you need to upgrade struts for branch B, but still need to build branch A using an older version of struts.

Many of you are probably saying, well maven does this. But I’m not fan of maven, I’m just not so don’t even go there. We use ant as our build tool and it is quite capable, except we wanted maven’s dependency management of jars. We don’t have the time to gut our build system to replace it with maven. One of our engineers suggested Ivy. Ivy ROCKS! I created a rudimentary repo with the jars we need, and got our ant build file connected to ivy fairly quickly. I want to retain some of the simplicity we had with our jpackage setup, so I’m writing some utility scripts. Yes I know these scripts aren’t portable, but I don’t much care as I work on Linux, and deploy on Linux.

I’ll keep folks posted on how this goes. But if you’re an Ant shop and despise maven, consider using Ivy.