Three Pillar Software Acquires CloverLeaf Consulting

Fairfax, Virginia, September 15, 2009– Three Pillar Software, Inc. (Three Pillar), a leading provider of comprehensive product outsourcing solutions headquartered in Northern Virginia, is pleased to announce the acquisition of CloverLeaf Consulting (CloverLeaf).

Home Page

Home Page

NVTC Selects Three Pillar Software as "Hot Ticket Award" Finalist

Fairfax, Virginia, June 30, 2009 – Fairfax-based software development and IT consulting leader Three Pillar Software was selected as a finalist by the Northern Virginia Technology Council (NVTC) in the “Hottest Bootstrap” category for its annual NVTC Hot Ticket Awards.

Writing Oracle Heirarchical Queries

Oracle provides an easy way to deal with a hierarchy relationship within a database, through a type of query called a hierarchical query. The query allows you to use the hierarchy relationship as the criteria for showing records. Here is a simple version of this query using the EMPLOYEES table from the HR sample schema.

HTTPS Client Authentication solution for the Suds SOAP library

We recently came upon the need for a Python SOAP client library that supported SSL client authentication (client-side certificates). When surveying the various options, we liked SOAPpy, but it had a bug in its support for SOAP complex types that required us to switch to Suds, which is also a very nice framework.

Suds does not support client certificates directly, and neither does urllib2, the URL-opener library it depends on. However, httplib, which is used at the core, does support HTTPS client authentication. Fortunately, somebody found a workaround for urllib2, and we were able to combine that with a trick of our own to integrate it with Suds. Here it is:

A dependency injection pattern for mod_python

Dependency Injection is a software design pattern well-known to software engineers, made more popular in recent years by tools such as Spring. I won't try to explain the pattern in it's entirety, but the basic idea is that rather than an object finding dependencies itself (the Service Locator pattern), the object is created by some sort of container and given the dependencies by the container.

3D Visible Approach: Shedding Light on the IT Black Box

A common complaint we hear from our business clients is that IT is a black box within their organization. They send requirements in, have very little communication for long periods of time, and eventually are delivered an application with approximately half of the requested functionality or enhancements. Whether a VP of Operations allotting $75 of a $600 million dollar budget to IT or the CEO of a start up ISV whose livelihood is dependant on successful product development, the frustration and uncertainly is equally painful and unnerving.

Packaging Linux Software with RPM by Design

When writing software for Linux systems, it's often wise to plan on packaging your software using RPM. Having an easily installable package for your software lets you install and maintain your software using a suite of automated tools. Many software developers don't plan on building RPMs from their sources, but instead rely on operating system distribution vendors and third-party enthusiasts to package their software. This is possible thanks to the flexible nature of RPM's build system, but if you plan ahead, you can have your own build scripts produce RPMs, gaining more control over the packaging in the process.

Applications & the Economy

These days, it seems like every time I turn around I am being asked how the economy is affecting Three Pillar Software. I'm cautiously optimistic as I answer, we have more business and a larger pipeline now than we have ever had. To some degree, that may simply be a result of our new focus on developing business. Until just a few months ago, Three Pillar had grown from myself to our current state almost exclusively through being opportunistic.

Commit Discipline and Comments: Be Kind to the Future

Suppose you are happily coding away, about to finish a new feature on a shiny new product. You attempt to run your code when an ugly exception rears up from the middle of some code that you call, but did not write yourself. You attempt to use your team's version control software to figure out who wrote that code, and what sort of changes have happened to it that might be the source of the problem. Alas, your version control software reveals that Joe, who left the project months ago, wrote the code throwing the exception.

Syndicate content