Top IT Business in Southern Florida

Business Leader Media publishes an annual ‘top 100’ small business roster for southern Florida. Tech companies on this list include

  • Datacorp.  A services partner with strong relationships with Microsoft, Cisco and Citrix.
  • United Data Technologies.  A services business with an established customer base in education and government.
  • Bayshore Solutions.  A web design company based in Tampa.
  • AAJ Technologies.  A Microsoft Gold Certified Partner in Fort Lauderdale with an established customer base in healthcare and government.
  • Palindrome Consulting.  A Microsoft Gold Certified development partner based in north Miami.  Also partners with Cisco, Citrix, VMware, HP and Apple.
  • Retail Technology Experts.  A Retail Pro certified partner.
  • Nu Info Systems Inc.  A complete software solutions provider based in Jacksonville, previously in the Inc. 500.
  • QuinnCom A web development company in North Palm Beach.
  • Dedicated IT.  Another Gold Certified Microsoft Partner in West Palm Beach providing a helpdesk and support.
  • International Consulting Group.  Partnerships include IBM, Cisco, Shoretel, Microsoft, Dell and VMware.
  • Kuster Computers.  Provides hosted Microsoft Exchange and desktop installation services.

DD-WRT

DD-WRT is a popular open source router firmware package originally developed for the Belkin WRT54G.  The package caught my attention as it allows a cheap old router to be reused as a client wireless bridge.  The download page has an excellent utility for identifying which routers are compatible.  To flash my router I needed to use TFTP. First I established an Ethernet connection with a static, not dynamic IP address, then I downloaded the Linksys GUI tftp client. There are some comments on the DD-WRT wiki about Windows 7 using CTCP, but I did not have this issue. Instead the challenge with a Belkin router is to initiate the file transfer immediately after the router starts responding after a power cycle.  The other issue I discovered is that not all bin files listed as compatible actually are: some bin files successfully upload but then are ignored.  My problem, however, was resolved by some detailed notes on the wiki which recommended dd-wrt.v24_generic-8184.bin for my hardware.

If the upload is successful the router responds for a few seconds while the upload is flashed, and then the connection is lost as the router restarts and DD-WRT defaults to 192.168.1.1 instead of 192.168.2.1. Reconfiguring the static IP address and browsing to the new default address revealed DD-WRT successfully loaded on my device.

ping-ddrt linksys-tftp

Resizing an LVM swap partition

I tested this on a lightly loaded Ubuntu 8.04 server.

free
swapoff /dev/vg01/lv_swap
lvextend -L+500M /dev/vg01/lv_swap
grep swap /etc/fstab # find the UUID for the existing swap space
# remake the larger swap using the same UUID as before
mkswap -U fc7f369e-c655-4a35-a227-a7c725a2b9bc  /dev/vg01/lv_swap
swapon /dev/vg01/lv_swap
free

linux-iscsi with NetApp

SLES includes an iSCSI initiator, linux-iscsi.  The initiator is configured using a daemon that is managed just like any other service, with a script in /etc/init.d/ and configuration files in /etc. After installing linux-iscsi using YaST I edited /etc/iscsi.conf to set the DiscoveryAddress and ran ‘/etc/init.d/iscsi start’ to start the service (‘chkconfig iscsi on’ ensures it is restarted after a reboot also). Logging onto my NetApp filer I could see the SLES initiator also logged in (‘igroup show’), and was able to create and map a LUN to the host. Back on the host ‘iscsi-ls’ yielded nothing useful, so I downloaded and installed the linux host utilities from NetApp’s support site.  ‘sanlun show all’ now shows the lun-pathname and local SCSI devicename (eg. /dev/sdx) to which it is mapped. Oracle’s Orion benchmark  indicates a random I/O throughput dramatically better for the iSCSI LUN compared to using a VMware virtual disk.

sqlunit & dbUnit

Now that I have my database schema creation and maintenance automated with Incanto and dbMaintain I have been looking at testing tools for stored procedures. Perhaps the best known for Oracle PL/SQL are Feuerstein’s utPLSQL and subsequent Quest Code Tester for Oracle. Other options include plunit, PLUTO and ruby-pl-spec. My main requirement, however, has been to invoke tests from an Ant project continuously integrated using Hudson and for now I have started using sqlunit, which is both mature and portable across different databases, as well as allowing relatively simple testcases to be specified in entirely XML.

My build-common.xml now contains












classname="net.sourceforge.sqlunit.ant.SqlunitTask"
classpathref="sqlunit-lib"/>

In addition to sqlunit I’ve found
dbUnit to be a useful tool for complex data setup prior to running a test.
Initilization of the dbUnit ant task is done as follows:












classname="org.dbunit.ant.DbUnitTask"
classpathref="dbunit-lib"/>

Building a Tomcat 6 Appliance

TurnKey have done a great job of putting together a collection of open source software appliances using Ubuntu JeOS 8.04.  Unfortunately TurnKey’s Tomcat appliance uses only Tomcat 5.5, instead of Tomcat 6 featuring Servlet 2.5 and JSP 2.1 support, which was released in March 2007.  On the plus side, however, Turnkey have also published their appliance core, which you can use as the basis of your own appliances.  The core includes Webmin at port 12321 and SSH.  Turnkey appliances are distributed with no password for root so make sure to set it as as possible.  The hostname for Turnkey Core is ‘core’, but that can be changed by editing /etc/hostname.

Tomcat 6 has been backported to Ubuntu 8.04, so it is easy to add, just edit /etc/apt/sources.list.d/sources.list and uncomment hardy-backports universe, then:

apt-get update
apt-get install tomcat6 # ~70MB

Note Tomcat6 is run with CATALINA_HOME set to /usr/share/tomcat6 and CATALINA_BASE set to /var/lib/tomcat6. If you read the Tomcat RUNNING.txt doc (available at /usr/share/doc/tomcat6-common/RUNNING.txt.gz) you’ll see that Tomcat6 is looking for libraries in CATALINA_HOME/lib and not CATALINA_BASE/lib. Since it is ignored, the presence of a CATALINA_BASE/lib directory is, at best, confusing.

Tomcat defaults to port 8080 and 8443.  As Tomcat is being run on the appliance as root we can change the ports to 80 and 443 by editing /etc/tomcat6/server.xml.

The tomcat service is managed using /etc/init.d/tomcat6 [start|stop], not bin/shutdown.sh.  Remember to turn off tomcat security or configure it for each application.  Turning off security is done by editing  /etc/init.d/tomcat6 and changing TOMCAT6_SECURITY=no.

There is a tomcat6-admin package also, but I do not use, and have not tested it.  To deploy a war file I simply copy it into /var/lib/tomcat6/webapps, eg.

apt-get install wget
cd /var/lib/tomcat6/webapps
wget http://.../...jar

Hudson

This week I’ve been upgrading from CruiseControl to Hudson.  CruiseControl has served well for the past eighteen months, completing hundreds of builds with only the occasional restart.  Once configured with a couple of XML files CruiseControl is low maintenance, but my impression is that now Thoughtworks is offering a commercial product it is no longer getting as much attention as its competitors.  Hudson in particular is an open source CI solution that has received good reviews, and with the need to configure new Maven projects I thought this a good time to switch.

The best way to use Hudson seems to be with a dedicated VM including any infrastructure required to test the project being built, in my case for example Java 6, Maven2 and a dedicated instance of Oracle XE.  Although it is possible to simply start Hudson from the command line it makes more sense to install it as a service, and this is exactly what the Debian/Ubuntu package does.  I use Hudson with a Nexus maven repository, with settings.xml stored in …/tools/_usr_share_maven2/conf/, so far it seems to be working well.

dbMaintain

Since reading about database refactoring some while ago I’ve been seeking to adopt a tool to support automated tracking and application of database changes.  The best known solution for this is LiquiBase (fka Sundog Refactoring Tool), with over 10,000 downloads of LiquiBase Core recorded on SourceForge as I write this.  In order to adopt LiquiBase on an existing project, however, I was faced with replacing dozens of SQL DDL scripts with LiquiBase specific XML files.  There is a generateChangeLog command, but it has limitations: for example it does not recognize the primary key of Oracle index organized tables, and the output is not arranged anything like the documented best practices.

Instead, for now, I have adopted a newer tool called dbMaintain, which was presented at a Belgian Java User Group last April (see below) and a ServerSide news article last July.  dbMaintain provides similar functionality to LiquiBase, but instead of XML it simply passes through native SQL scripts using JDBC, making it much easier to adopt with confidence on an existing project.  I did run into one known issue with setting the default schema, but I’m happy to say Tim Ducheyne responded to my emails and provided a fixed snapshot within days.  I hope this project gains momentum, and I’m looking forward to the next release.

Technorati Tags:

PS. Other less mature alternatives include SQL based Thoughtworks dbdeploy and Carbon Five’s c5-db-migration.  Another custom XML based solution is MIGRATEdb.  Sony Pictures Imageworks have ported ActiveRecord migrations to Scala and there is a relatively inactive port of ActiveRecord migrations to Groovy called Bering.

Posts navigation

1 2 3
Scroll to top