I spent a few years writing down my thoughts about how one should approach problems. If you're looking for a how-to guide, a cookbook, or a reference this book is not for you. If you want to learn by challenging the way you think, pick up a copy.
If you use Oracle and you use Perl, then you likely have compiled DBD::Oracle before. Typically, this is a simple "install DBD::Oracle" via the CPAN shell and you are good to go. Well, installing DBD::Oracle on 64-bit Solaris 10 on amd64 was more challenge than usual. It took me the better part of two hours to get it right and I figured if I could save someone that time then I'd be a better person -- you all know I'm always trying to be a better person ;-) heh.
So, Oracle just release amd64 Solaris10 capable client libraries with their 10.2.0.1 release -- and if you are embedding perl in an app to leverage DBD::Oracle (I'm leveraging DBD::Oracle to make connections to Oracle from within postgres via pl/perl and dbi-link), then you must have 64-bit native client libraries or you can't link them into your native 64-bit app.
So, I download the 10.2.0.1 instantclient from Oracle's download section and install it into /opt/oracle and test it:
# cd /opt/oracle
# mkdir -p network/admin
# vi network/admin/tnsnames.ora
( put in the information about your oracle listeners here )
# LD_LIBRARY_PATH=`pwd` ORACLE_HOME=`pwd` ./sqlplus
Next I run perl -MCPAN -eshell and type install DBD::Oracle and it utterly explodes in my face. No adequate ".mk" files. Hmm.. I find one at /opt/oracle/sdk/demo.mk and after much hackery (I'll recap the next two hours) I find that the ".mk" isn't just formatted incorrectly, but it now libocci relies on the C++ runtime (-lCrun -lCstd) and has a few missing library dependencies that should have been lib link dependencies: -lnnz10 -lociicus. I also believe that it compiles down a tad different when using the C++ compiler instead of the C compiler, so I opted for that. And I did it dirty.
This won't get you all the way, but it will get you a Makefile to start hacking on. Why did this take so much work? Trial and error and apparently the order you link the libraries in matters -- if you mix them up, you will get unresolved symbol resolution errors (mangled C++ names that exist in either Crun or Cstd).
This still did not setup the include paths correctly and I was forced to search and replace in the Makefile rdbms/demo with sdk/include. I added -R/opt/oracle to the LDFLAGS and LDDFLAGS. I changed the local compiler link path from /opt/SUNWspro/prod/lib to /opt/SUNWspro/prod/lib/amd64. Later on the hint that C++ was required led me to change CC=cc to CC=CC to ease other issues. This required 3 casting fixes in dbdimp.c from void pointer to const unsigned char pointer -- you'll see them when you try to compile it.
And... make.. make test... presto! Note, you could likely use the C compiler (cc) instead of the C++ compiler, but I don't have much insight into what the C++ compiler does above and beyond plain-old-cc, so I thought it better safe than sorry.
Anyway, now I have a working DBD::Oracle on Solaris 10 (update 1) 64-bit amd64 linked against Oracle's 10.2.0.1 instant client.
At no point in the history of OmniTI has it "shrunk" in size. It's a beast now and it continues to grow in fantastic ways. As such, we're are hiring.
I'm looking for a junior developer. However, I'm looking for a good junior developer. I've been so frustrated in the past with the various definitions of junior and mid-level and senior. Constantly I see an entry-level programmer come in with delusions of being an enterprise architect or a senior-level web application program because they made their own website.
At OmniTI we build big things. We regularly deal with multi-terabyte databases, sites with tens of millions of users, and distributed systems that service hundreds of thousands of transactions per second. We use a variety of technologies (mostly focused on open source). So, when someone says that they are senior, I expect them to be able to code excellently in 2-3 languages, passably in 2-3 more and learn a new language passably inside a week if needed. I expect them to be able to merge changesets between branches and resolve complicated conflicts with the same effort they put into breathing. I expect them to be able to have a client screaming on the phone while they are troubleshooting a critical issue without moistening their chair.
Luckily, I'm not actively in the market for a senior programmer right now. However, if you are a ambitious programmer that takes considerable pride in the quality of their work, are interested in a challenging work environment where you get to play with big toys, and want the opportunity to work with and be mentored by colleagues that have been presenting and teaching at conferences for the past 10 years (and happen to hold 16 time slots at this year's OSCON) then we have an opening for you.
And to give this posting a true Theo feel, here are the rules of engagement:
If you have never used a VCS (version control system) or SCM (source code management), I'll beat you with a stick;
If I hear the word "framework," I'll beat you with a stick;
If you use the word "scalable" when you should have used "high performance," I'll beat you with a stick (hint: avoid the word scalable);
If you don't know what TCP port HTTP uses by default, I'll beat you with a stick;
If you don't have a sense of humor, I'll beat you with a stick (but only I will think it's funny);
I like Tilapia. Frankly, it's probably one of my favorite white fish. However, there a only a few recipies that I like to do at home that are reliable. This past Friday night, I was tired and impatient and wanted to try something more risky and it was perfect. Here we go.. adapt as necessary:
Take three filet of Tilapia of good size (total of about 1lbs). They should be ice-cold, almost frozen.