Tuesday, December 28, 2010

How To: Become a Professional Developer

Twitter = Discovery



That led to this article, Staging Servers, Source Control & Deploy Workflows, And Other Stuff Nobody Teaches You.

The first paragraph reads as follows:

I worked for almost three years as a cog in a Japanese megacorporation, and one of the best parts about that experience (perhaps even worth the 70 hour weeks) was that they taught me how to be a professional engineer. Prior to doing so, my workflow generally involved a whole lot of bubble gum, duct tape, and praying. I spent a lot of time firefighting broken software as a result, to the detriment of both my customers and myself. Talking to other software developers has made me realize that I’m not the only person who was never taught that there are options superior to bubblegum. If you aren’t lucky enough to work at a company that has good engineering in its very DNA, you’re likely to not know much about them.

I consider myself incredibly fortunate, I worked for a company, well, a friend, who had all these things in mind. Not all of the mentioned mechanisms were set up mind you; it had been pretty much a one or 2 person shop before I arrived, way back in 2002. They were on the road though. Rational was the source control tool. Rational was the documentation tool. Rational was the functional testing tool. SQLUnit was the database testing tool.

My boss was this guy, Tom Wurzbach.

When he offered me a job, he sent me this link:

http://asktom.oracle.com/pls/apex/f?p=100:1:0

I saw Tom in the title and thought it was a joke of some sorts. Little did I know.

I stayed at this company for just under 3 years. I am not proud of the way I left, but that's a whole other story. That was my longest IT stint to date (+1 year at the current, yippee!).

It took me about 2 years to start to realize what I had learned at that company. In fact, I'm still realizing things now that I learned way back then.

The title? How to become a Professional Developer? I know many who wouldn't call me a professional developer...

I'm going to list the things that I have done and read in my time at that first company. I believe that set a great foundation for me and has allowed me to do all sorts of things.

1
I mentioned AskTom. Funny story (of course). I was off reading some opinion site at work. I received an email from Tom, "What are you doing?" It was rhetorical of course, he knew exactly what I was doing. Please don't read personal stuff on company time.

Point taken.

After that, when I needed to take a break, I would read AskTom. Every day. If it wasn't AskTom, it was something else technical. It was mostly AskTom though. Lots of it. More than I care to remember. Actually, I would bet that I don't remember half of it, it's all been internalized.

2
Find a mentor be it in real life or virtual. I had one sitting in front of me and I had Tom Kyte virtually. The former I didn't realize (yes, long story) until I had gone, the latter, well, he's been a mentor to a great many of you out there.

3
Read. A lot.

Don't just read stuff you agree with, read opposing view points. Don't read about stuff that just works either...if you watch Derek Jeter, he makes it look so easy, like you could go out there and do the same thing. You can't. I promise. Strangely, I have gotten a whole lot out of The Daily WTF. Mr. Kyte even took the helm for a little while some years ago. Learning what not to do is just as important as what to do.

Read the manuals. Read the concepts guide. Read the documentation. I'm shocked when I go somewhere new and they don't have an internal Oracle library set up. What if oracle.com is down? What if it's slow?

Read the New Features guide. It doesn't take long. See what's available.

Some things you should read early and often:
- The Complicator's Gloves
- Big Ball of Mud
- How To Ask Questions The Smart Way
- Why Good Programmers Are Lazy and Dumb

4
Practice. I can't speak to other vendors, but you can download any software you want from Oracle. That's enterprise class software on your little old 'puter. I've had so many databases installed I can't count. I've always had a running database, just for that quick SQL statement (like how old am I in days), or just for a quick sanity check.

I've installed Oracle database version 8i through 11gR2, many, many times (only recently on a non-windows platform though).

I've installed and run Oracle Application Server 9i through 10g.

OBIEE? 10g and 11g.

JDeveloper.

SQL Developer.

Forms and Reports.

EBS even.

The point is, Oracle makes it super-easy to test-drive this stuff and learn it. You have no excuses, the means to your end are out there.

5
Test. I spent a good year at the first job writing nothing but SQLUnit tests. I hated it, every minute of it.

But guess what, it was good for me. You know why?

I had to build scripts to populate and teardown the database.
I had to build SQLUnit tests to login, because we used VPD and nothing worked without a valid login.
I had to build hundreds of little tests. 7 to 10 of them for each procedure or function.

What did all that testing buy me? Well, I know what errors are thrown when you pass in NULL. I know about no_data_found and a host of other errors.

If I were in charge and I got to hire a junior programmer, I would make them build test cases for their first year.

So I have 5 ways to become a professional developer. I have no doubt there are more and someday I'll probably add to the list. Feel free to find the comments and add your ideas on the topic.

Friday, December 17, 2010

Fun Day

Today was the day of my presentation.

Around 4:30 this morning, as I was trying to fall asleep, I had wondered whether I would wake up or not in time. I did, but it took me 2 hours to wake up from not sleeping much. I was a tad nervous. Fortunately I didn't have to get up in front of people, I just had to talk into the phone. The downside to that is that I was just talking into a phone.

I'm probably what you would call a "people person" and over my many moves as a kid, reading people is something I do fairly well. Not seeing them puts me at a disadvantage...but I digress.

The topic of my presentation was twitter and how it can be used to help you professionally. More precisely (and named by Ms. Malone), Professionally Speaking in 140 Characters or Less: How Twitter Can Help Your Career. I've benefited greatly from my use of twitter, I just want to share that with others in the hopes they they can find value out of it. A popular misconception of twitter is that people twit about taking a shit. Well, I haven't seen one person tweet about that...although I'm sure someone has. I like to think that I follow a classy bunch of folks.

Anyway, here is the final presentation, if you would like to download it. Here's the prezi twitter presentation, but it will be changing if not completely trashed.



While riding the high of my first presentation in almost 3 years, @surachart posted this:



A couple of months ago I had been contacted about a profile for Oracle Magazine. I wonder if this was the one?



Page can be found here. Online version of the magazine can be found here.

So, it was a super cool day for me. I celebrated by having 2 Sierra Nevada India Pale Ales (and unlocking 2 new badges) and then falling asleep (crashing) around 9:30 PM.

Tuesday, December 14, 2010

Monday, December 13, 2010

OBIEE 10g: Replace Column or Table in LTS

Even though I'm working hard on learning 11g, I still find little things in 10g that help.

Case in point, I was going through and trying to clean up the physical and BMM layers. Our physical model will now be shared between multiple projects. So how best to do that?

Using aliases along with naming conventions and display folders can help. By doing this, I will be able to "unhook" the source table from any and all joins. The goal is to keep these free...the aliases will be used to join to their respective tables (aliases).

The naming will be something like:
Dim_<source_table_name>_<subject_area>
Fact_<source_table_name>_<subject_area>
Outrigger_<source_table_name>_<subject_area>
Bridge_<source_table_name>_<subject_area>
To further organize them, I will put them in a Display Folder.



I'm just going to create one called "New."

I'm using the SH schema here, so it should be easy to follow along.

Next up, I'm going to create aliases for all my tables. For the sake of brevity and my sanity, I'm only going to use SALES, PRODUCTS, and TIMES.



When I initially started to clean things up, I would screenshot the Column Mappings section of the Logical Table Source. Fun right? There has to be a tool for this. Sure enough...

OK, this post has been sitting here all day...I'm cutting to the chase now.

So I've hooked up (joined) all my new tables. Now I just want to replace them. I could do it by hand, but what fun would that be. Here's the source for SALES.



If you go to Tools -> Utilities, you'll see this screen and the fun little tool we'll use for this exercise:



Now make sure you select "Replace whole table." On the left side, select the table you want to replace, on the right side, select the table you will replace it with.



Hit Next.



Blah blah blah, which translates into the column mappings. Since we are replacing the source table with a copy of itself, this part is easy.

Here you get a nice summary of what the tool will actually be doing.



Hit Next and voila!



Now, what does this buy you?

Since you are now sharing your physical layer with multiple Subject Areas, you've added a layer of abstraction to protect yourself. Let's say a new column was added to SALES. After you've updated your physical layer, you are now free to either keep the others the same or add it to that particular Subject Area. For my (mythical/theoretical) example, I just need that new column in one Subject Area, so I'll just need to pull that into the BMM and I'm done.

An even better example would involve joins. Maybe Subject Area 1 is based on one particular set of joins and the others are not. This should allow you to easily handle this kind of scenario.

I do apologize for this post breaking up as it did. I had the best intentions in the world this afternoon. Hopefully I got the gist of the tool across, if not, yell at me and I'll update it later.

Professionally Speaking...

Last year I submitted an abstract to ODTUG on using social media to increase productivity. It was one of those whims as the deadline for submissions was, that day believe. It got rejected.

I've pondered doing this presentation for quite awhile, but haven't had the energy or drive to do so...not to mention a venue, I need a venue.

On an email exchange following a previous FMT Systems webinar, So, Tell Us What Really Happened at OOW 2010!, I threw my idea out as a possible topic (I should really stop doing that). Of course Hope Malone, the Marketing Director, thought it was a great idea. So here I am.

Ms. Malone, at my behest, gave me a much better title (if not longer!), Professionally Speaking in 140 Characters or Less - How Twitter Can Help Advance Your Career. That's 92 characters if you are counting.

This is a topic I am very passionate about. Social media in general and Twitter specifically have been very good to me, both personally and professionally. I wish that more Oracle folks would use Twitter, there are just a handful right now who are actively engaged...which I believe is unfortunate. So if you have time on Thursday, December 16th, click on the link above and sign up. At the very least, you can heckle me or just laugh at my strange voice.

I'll also be test driving Prezi, cool-not-PowerPoint presentation software. Actually, you can get a sneak preview here (without my wonderful voice):

katezilla: 6

Today is Kate's 6th birthday.



It's becoming a trend, I wrote about it last year too.

Of course, almost 6 years ago, they said she wouldn't live this long. As Kate is wont to do, "Up Yours Doc!" (If she could actually give the middle finger, I have no doubt I would have taught her by now.)

It has been an interesting year for all of us. We had hoped for some direction early in the year with our visit to the Tridas Center...only to be severely disappointed. She pulled another one of her Houdini stunts with The Reaper this summer (7, 6, 5, 4, 3, 2, 1+0). Last month, we finally got a diagnosis, PDD-NOS.

So, Happy Birthday Kate!.

Thursday, December 9, 2010

OBIEE 11g: Getting Started - Part I

A few weeks ago I procured some nifty hardware. Slowly but surely I've begun to build out certain VMs. Currently, this one computer serves as 4:

* Host - Ubuntu 10.10
* Guest - Ubuntu 10.10 - running my wiki, subversion and other documentation type things.
* Guest - Windows XP - Work. This is a VM specific to my current client.
* Guest - Oracle Enterprise Linux 5.5 (Carthage) 64bit. This is my OBIEE 11g playground I'm trying to build out. I have installed the 11gR2 database. I have run the repository creation utility (rcu) that installs the metadata for WebLogic and finally I have installed and (mostly) configured OBIEE 11g.

I'm barely using 10 GB of my 24 available. I so happy.

Anyway, I've configured my database to automatically startup/shutdown when the VM is started/shutdown. I followed Dr. Hall's guide here. Now I'm in the process of getting WebLogic configured to do the same thing automagically. (I should never have shut it down once I got it running...)

Believe it or not, I'm reading the documentation. 11g is a drastic change from 10g, especially with the integration of WebLogic. It's a downright beast.

I still don't know the difference between the Administration Console and Enterprise Manager. But I'm hacking away, as usual.

Since I'm trying to automate this whole thing, I don't necessarily want to use either of those tools. I want to start up the server and have everything running. Here's where I'm at now:



How did I get there you ask?

I opened up a shell and then navigated to:

/obiee/user_projects/domains/bifoundation_domain/bin

In that directory you will find startWebLogic.sh
[oracle@obiee ~]$./startWebLogic.sh
You'll be prompted for a username and password; weblogic is the username and whatever you entered for the password upon installation.

From the Administration Console, I go to bifoundation_domain -> Environment -> Servers



Click on the Control tab, select bi_server1 and select Start:



Awesome. What's a freaking Node Manager?

Here's the text for easier reading:
* For server bi_server1, the Node Manager associated with machine localhost.localdomain is not reachable.
* All of the servers selected are currently in a state which is incompatible with this operation or are not associated with a running Node Manager or you are not authorized to perform the action requested. No action will be performed.
Great...I need to start something else?

Back to the docs.

That took me down a rabbit hole ending up at the wlst (web logic scripting tool and all the examples are in windows).

I looked around the file system for config or log directories to see if I could spot something. Somehow I ended up in:

/obiee/wlserver_10.3/server/bin

Makes sense right?

In there, 2 files: setWLSEnv.sh and startNodeManager.sh

Run setWLSENv.sh first and you get this:
[oracle@obiee bin]$ ./setWLSEnv.sh 
CLASSPATH=/obiee/patch_wls1033/profiles/default/sys_manifest_classpath/weblogic_patch.jar:
/obiee/jrockit_160_17_R28.0.0-679/lib/tools.jar:/obiee/wlserver_10.3/server/lib/weblogic_sp.jar:
/obiee/wlserver_10.3/server/lib/weblogic.jar:
/obiee/modules/features/weblogic.server.modules_10.3.3.0.jar:
/obiee/wlserver_10.3/server/lib/webservices.jar:
/obiee/modules/org.apache.ant_1.7.1/lib/ant-all.jar:
/obiee/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:

PATH=/obiee/wlserver_10.3/server/bin:
/obiee/modules/org.apache.ant_1.7.1/bin:
/obiee/jrockit_160_17_R28.0.0-679/jre/bin:
/obiee/jrockit_160_17_R28.0.0-679/bin:
/usr/kerberos/bin:
/usr/local/bin:
/usr/bin:
/bin:
/usr/X11R6/bin:
/home/oracle/bin

Your environment has been set.
Now run startNodeManager.sh (too much output, you don't get to see it).

Finally, back to the Administration Console, select bi_server1 again and click on Start:



Much better message this time.

And now I wait...

A minute or 2 later:



Voila!

Or so I thought. I navigated to Answers and was greeted with the wonderful 500 - Internal Server Error



I'll worry about that one tomorrow. It's a start though.

Thursday, December 2, 2010

Win an Exadata Database Machine!

It's not a joke. No, there is no way to win one, yet.

Wouldn't it be nice to have one of these bad-boys in your home office though?



That was my original thought when I posed the question to The Twitter.



After a few replies I realized the absurdity of my thought to have my own private Exadata.

What about small businesses though? Non-profits doing research?

Wouldn't that be a great PR move? A way to give back to the community.

I have ulterior motives, of course. I may be helping out a friend on a database for autism research. If you don't know already, my daughter was recently diagnosed withPDD-NOS, which is...well, it's sort-of autism. I just call it autism though so I don't have to go into the details.

Wouldn't it be great to build out something like that on top of the latest, and greatest, hardware/software combination around? For kicks, I could ask about OBIEE as the reporting layer. (See how selfish I am?)

Anyway, just an idea. I'm full of ideas (or shit as most would say).

What do you think? I'm sure Oracle has tons of charities or causes they support. Would this be a worthwhile cause for Oracle?

As Jake would say, find the comments.