While working at IBM I did quite a bit, and obviously I can't really show or display most of
what I did while there, but I'll try to explain and show what I did as much as possible.
My accomplishments there break down into 5 categories:
Debugging code, both java and C++
Managing, debugging performance issues, and writing SQL for SQL Server
Writing internal tools used by hundreds of employees
Training on advanced topics
Troubleshooting network or appliance issues
Debugging Code
This is fairly self explanatory, but essentially we have multiple products that would have bugs which
needed to be investigated. This included crashes from C++ code, stack traces from java code, errors in
the server messagelog, etc. The easiest problems were tracing an issue from a java stacktrace. The
hardest ones were also with java, but only because they were memory leaks in the Geronimo J2EE server
version we were using and debugging involved getting a memory dump, opening it in a java profiler to
figure out what was gong on, and then hacking activeMQ (the JMS library used) to create a patch for the
version we already had released.
SQL Server: Managing, debugging performance issues, and writing SQL
This was great experience since a lot of the databases jumped up to 1 TB or over.
Managing the databases involved fine tuning permissions and the server for the applications in use.
Debugging performance was mostly just profiling, checking execution plans, indexing, and providing
locking hints when deadlocking popped up under load. Most code was written in store procedures
for loose coupling and better performance, although some queries were unavoidably dynamic and were
created through hibernate.
Internal Tools
I kept up a little suite of applications I wrote for inner-office efficiency which became widely used
throughout the division. While some of them were more for fun or personal use, many were extremely
complex including a KBA submission and approval system, a wiki written from scratch,
and a search engine for searching company records. All of these except for one were deployed as
a web application for ease of use. The only one that was not was unfortunately too specific to be
discussed here.
The KBA system was a response to the fact that no good approval system was in place. Using my program,
people could submit a KBA for a particular product that would then be approved by those who know most
about that particular product and could verify it for accuracy. Upon approval, it would then go to the
documentation team to be written for the customer facing system. A screenshot of it is below.
The Wiki was in response to a need for a centralized information center for products, tweaks, tricks,
general knowledge, explanations, etc. While several good systems already existed, I really wanted
something that would integrate into my already existing portal and that I could use a company LDAP login
for. None really existed that seemed good enough, so I just wrote my own. It basically has categories that
can be nested, and articles can be linked into one or more categories. Each article can be edited by
anyone using an integrated WYSISYG editor, but changes are tracked and anyone can view the article history or revert changes.
Screenshots are below.
Here is a screenshot when viewing the change history and a particular revision
The Search tool was probably the most used and most complicated of anything. It consisted of a backend
search engine based on the Apache SOLR project, which then indexed data from customers, the KBA system,
the WIKI I wrote, and more. Results could be rated which increased their search priority. I also
duplicated google suggest for the search box (see the screenshot) so you could view similar past searches
from what you had typed already. The data searched was inserted into a MySQL database and indexed by
posting XML to SOLR using perl and python scripts. The scripts were automated with cron jobs and
would connect to other servers via
API calls or spider already existing web services and parse out the relevant data.
The data display was also intelligent and would not only display data appropriately for it's type,
but would allow translation of highlighted text (by using ajax calls to the server which then
would hit google translate) and formatting of email chains to remove redundant data.
Check out the screenshots below.
Training
This was actually one of the most stressful things I did. I volunteered to provided some SQL Server and
generic database concepts training to about 20 employees. Because only a few people per team could
attend, I decided to video record the training in 2 hour intervals in lecture form, and take questions
in between each interval. This way, people not attending could watch the video later and ask questions
from those that attended. I went through basic database theory through real world performance concepts
specific to SQL Server. In the end, I transcoded the video to FLV format and put them on my portal for
anyone to view on the company network.
Networks and Appliances
Due to our product line, I received advanced experience in just about everything you can imagine including
firewalls, routers, transparent proxies, spam filters, web filters, IPS/IDS, anomoly detection systems,
centralized desktop control, server security, VPN technology, cisco switches, and scanners. My favorite
appliance is the Proventia M because it's so versitile. It's basically everyting mentioned above
rolled into one which makes it extremely complex but extremely fun to play with. As you can guess,
diagnosing packet captures was pretty common, but other fun things included diagnosing network routing
or design issues, writing custom security checks for the IPS module, and configuring high availablity
with failover capabilities between two appliances.