Friday, March 25, 2011

Emails That Consume My Time #1

I routinely get emails of a "please teach me" nature. A recent one inspired me to this short play with 98% accuracy for all the meta-language involved in this general email exchange. This is it.



Actors:
       New guy (superficially technical):
       Old guy (technical by training because somebody has to actually DO things):


New guy email:
“Hi Old-Guy,

“Someone gave me your name, because they thought it’d be funny if I pestered you instead of them.”

“I have nothing to do but stand around and ask questions. Can you tell me everything you know so I can talk in these meetings and pretend of be of value? Hopefully this job is a just a stepping stone, so I’ll only be bugging you as often as I feel like it--till I get promoted.”


Old guy reply:
“Hi New-Guy,

“Sure. I have a degree in Computer Science and been studying everything I presently know the last 15 years, besides doing this job for the last 5. I can probably tell you enough to know where you’ll look intelligent in your meetings within an email or two. I assume you also are a computer scientist with my same background.”

Here is the technical documentation I put together years ago. It’s pretty obtuse, outdated, and intended to spin your head around with just enough missing data, that perchance you really did study it through you still wouldn’t have a clue.”

<1 GB word doc attached>


New guy: (next day)
“Hi Old-Guy,

“Thanks for that great documentation. I’ve read through it and think I pretty much understand it all.

“Attached is a request from my boss to pull some unheard-of-before datasets and format them into something simple enough for a monkey to understand in a PowerPoint. Would you mind pulling that together real quick… should only take you a minute or two. Appreciate it very much.”

“Also, would you mind being my secret lackey buddy, so whenever my boss asks me something I can get you to do it and make it look like I did it.”

<1 kb email attached>

Old guy: (while tying a rope around his neck)
“Hi New-Guy,

“Sure. Let me know whenever I can bury myself deeper into the pit of despair while advancing your career. It makes me feel better about my lack of appreciation and low pay.”


New guy:
"Hi Old-Guy,
"What it the ETA on that data report you are putting together for me?"


Old guy:
"Argggghhhhh..... <gag> .. <cough><cough>..... ...."

Thursday, March 03, 2011

Searching for funny youtubes for programmers and found a few:

Spaghetti Code
http://www.youtube.com/watch?v=XKzVKOso0fA&feature=related
Life Of A Programmer
http://www.youtube.com/watch?v=Bl1rmaKFep4&feature=related
If programmers have make a plane
http://www.youtube.com/watch?v=UZq4sZz56qM&feature=related
The Truth About Programmers
http://www.youtube.com/watch?v=Re2Oh4rxN6w&feature=related
A real software enginner 2 part
http://www.youtube.com/watch?v=lpJw9tWqokk&feature=related
How to deal with a programmer
http://www.youtube.com/watch?v=ZWyH8t4fZ-4&feature=related


This one is funny and weird for a Dell commercial. Can't tell for sure if it's legit.

Dell Free Software commercial advertisement
http://www.youtube.com/watch?v=RfkucaGv0oA&feature=related

Tuesday, March 01, 2011

Programmers Were Funnier Back Then

I was searching for some old UNIX humor and smarfy literature that was almost a genre back in the 80's. It was mostly witticisms and observations of very smart people making fun of and trying correct for lame management efforts of software development in the period. Some of the out-growths from it were the X-Treme model of software dev cycle modeling and general Recursive style modeling contrasted to the old Waterfall methodology.

Many of us remember the horror stories of the millions of $$$ lost on failed big projects of that time and these guys were the analyzers afterwards. Well, I couldn't find any of the text only witty literature, but I found two simple funny sites I'd thought I share. At least one was funny. Didn't want you non-programmers to think geeks weren't funny people. :)

Building Better Software looks funny and possibly informative, but Top Funny Source Code Comments actually has some true programmer style wit from old days that I fondly remember so well.... even if you can't Google it up anymore. I'm still looking though and haven't given up.

Books for Programming your Computer and your Brain


O'reily Books and any software programming published books you might want are now offered online for only $22 a month. What a deal! I remember weekly going to the bookstore and agonizing over what $40 or $50 book I would buy that week. I ended up giving boxes away to Goodwill or the local library and still have boxes in the attic of technology books that are pretty much obsolete now, like dHTML, JAVA, old Hacker crap and XML/XSLT. Some of which have value I guess as classics maybe, but now 10 books a month for $22 or all you can get for $44 is nothing to spend for a diehard need-the-latest programming junkie.

Ownership is a thing of the past. Get what you need when you need it and that's all you need. Just do it. It's 2011 folks. Paper books is a thing of the past and knowledge is virtually free.

Speaking of computer books, what is the single most influential programming book? Don't know? Well find out or cast your vote.

Does anyone remember the "A New Kind of Science”? It supposedly was a total game-changer and paradigm shifter -just to throw out a few world changing clichés. It came out in 2002 by Stephen Wolfram and I've not heard a word about it since until coming across a project management website claiming to have the author's life changed from three books with this being one of them. The other two are old classics that conceptually I agree, the ideas break down old mental constructs, but the books themselves are essentially dull. They were entlighting maybe in the late '80s when I read them. But now, I could almost write a more enlightening read of Chaos theory and Complexity theory than James Gleick does in "Chaos: Making a New Science" and Waldrop in "Complexity: The Emerging Science at the Edge of Order and Chaos."

Still though, these are essential concepts to work into your psyche if you have the adaptive flexibilities still. (Most people lock in somewhere between 10 and 22 I think.) Better yet, I would just read Science and Sanity: An Introduction to Non-Aristotelian Systems and General Semantics by Alfred Korzybski which has my vote for best overall paradigm busting, human engineering, Zen enlightening book. Of course Zen and the Art of Motorcycle Maintenance is still probably worth reading to a young mind.

But you can get Korzybski's book free online.

By the way, I wrote Robert Pirsig a letter back in the early 90's I think--sending him a small manuscript I wrote that I thought at the time was parrellel in thought with ZAMM. He did write me back, explaining he gets too much fan mail to read it all, but yes he saw the parrellel of what I sent him. I never did publish that short piece of wisdom I wrote, but I guess I could have intro'd it with Pirsig's back-handed compliment.

Happy programming! Remember to feed your brain!

Thursday, February 17, 2011

For God's sake people, keep your business logic in one place! - Part II

So what's the big deal about keeping your business logic in one place?

Well, for starters, you're going to save your company a lot of money down the road and save probably yourself or another programmer tons of headache every time a little thing goes wrong.

So what can go wrong? Well, if you've been in the reporting business, or written many programs that actually got used, or built out any infrastructures for businesses to hold and move and display their data (like I've been doing the last 15 years) then you know that there's plenty that can go wrong.

The simplest and possibly the most frustrating is simply the customer saying to himself,

"Hmmm... these numbers don't look right. I was expecting something a little different. I bet something's wrong with the data."
So they write up a trouble ticket or send you an email or IM you with this deep logical distrust of your data.

What do you do?

Well, you can do like most IT people do. Say,
"Nope, the data looks good here. Must be something on your end"
If that don't work, option #2 is,
"That would be something caused by so-and-so process at my source. Sorry I can't do anything. But here's the name of the guy that might be able to help you."
(Options #1 and #2 basically are just "he-did-its" pointing North and South, upstream or downstream, to somebody else in line... an ancient IT tactic going back to the pyramid-building Jewish slaves in Egypt.)

But ultimately, if the customer is hard-headed, and other distracting "emergencies" don't pop up instead, it'll come back around to you and you'll have to investigate whether or not the data is getting screwed up somewhere. And where do you go? Well, you have to go top to bottom, beginning to end or where the data starts to where the data ends. And why? Because business logic is everywhere.

Now, if you are just a reporting geek, then that's not so hard because IT hasn't given you any real access to see all the magic they do. (Remember how the Wizard of Oz preferred to hide behind the curtain?) In that case you use option #2 and give them the company salute--that's where you shrug your shoulders and mumble "mmi-donno."

If you're IT, or a reporting geek with privileges, then you have to chase down the problem. And since you or someone else was stupid or lazy enough to toss the business logic all over like an angry baboon slinging feces on the walls, then you get to hunt and dig and use your genius analytical skills and your vast amount of extra hours to try and figure this thing out.

And if there is no problem, THEN, you get to try and hold the hand of the customer and explain over and over again all the different places the data changes at and prove to him that 2 + 2 is supposed to equal  5 and if you're lucky another crisis will crop up and this customer will go away.

NOW.....

If you had obeyed my simple rule of For God's sake people, keep your business logic in one place! you could pleasantly schedule a half hour meeting with the customer, share your desktop, and go,
"Well let's look and see if we can find your data problem Mr. CussToMe",

pull up the whole data flow and go,
“Well, here 2+2=4, ... and next right here 2+2=4, and downstream further yes, 2 plus 2 still equals 4... now we get to the BUSINESS LOGIC layer... hmmmmm ... ah yes... well what's this? Ole' Bobby here must have changed my code! Because it says here that 2+2-5. Heck, I’m pretty sure that’s not right. I'll fix it right away Mr. CussToMe. Thank you for bringing this to our attention. Wow, if only we had someone with your brains working for our team!"

And your job would be done.

Now isn't that a lot nicer?

Labels: , , , , , ,

For God's sake people, keep your business logic in one place!


For God's sake people, keep your business logic in one place. Don't be spreading it all over the board. Some in stored procedures, some in the views, some in the extraction-transformation-load layers (ETL), and some in the presentation layer, yet again some in an Excel by end consumers.


You guys understand fully what "Business Logic" is right? Are you sure? Well, think about it.


Anytime data itself is CHANGED (added, subtracted, recalculated, interpreted, ignored, or even RENAMED--yes, even renamed--because when you 'alias' a data field you've just given it YOUR understanding of what that field means in your mind--giving it 'business logic.')


Here’s an easy example of the last one. Certain data has three fields: Svc_BUID, Cust_BUID, and Order_BUID. You (the data-mover/code-writer middle man) figure, "Hey, this is all Services data, so obviously these people want to see the service business unit ID, so I'll alias that field--",SVC_BUID as 'BUID'." You just added Business Logic. Bam!


The exception (or better understanding) of that rule that:

Business Logic = anytime data itself is CHANGED,


is when you are dealing with the META-data. THAT is ok to mess with and you can spread that all over the board without scattering the golden rule of integrity in good data design ( keep your business logic in one place, in case you forgot already).


You do fully understand what "Meta Data" is right? Are you sure? Well, think about it.


"Meta" is ancient Greek for "above" or "over." Meta data is that abstracted concept of any information that isn't the information itself, but is ABOUT the information. (You have to squint one eye and tilt your head a bit to fully get this.) Meta-data is all that wonderful stuff that a database surrounds the actual data with. So yes, meta-data is the data type itself (int? varchar? nvarchar?), whether it's in XML, or a RDBMS, or on-the-fly bits, all the history of when, who, and where data came from, and again it is also the field name itself--which is the border of the data itself-- and actually belongs in BOTH categories--"data" AND "meta-data."


So, all meta-data CAN be altered, changed, adjusted, transformed, and slung about however you want.


That, in fact, IS the job of the pure IT person. To make one storage point of data properly talk to another storage point of data without actually changing the data itself. These "storage points" of data are things like the Oracle, the SQL Server, the Informatica process, the DTS package, the spreadsheet, even the PowerPoint or the ".txt", ".doc", ".xml", ".html", or ".dat" file type. (Even whether it's Unicode, ASCII, ANSI, UTF-16 etc. character type.) That is all meta-data.


So, let’s recap.


The main lecture point here was going to be:  For God's sake people, keep your business logic in one place.


But, we really had to back up and clearly define what business logic is. And to do that we had to clearly understand the difference between data and meta-data.


So if you’ve changed the data, you’ve added Business Logic. If you’ve changed the meta-data, good for you, hopefully it works, do it anywhere and everywhere you feel like. It doesn’t matter. For God's sake people, keep your business logic in one place!


Business logic: Anytime data itself is changed.

Labels: , , , , , , ,

Friday, February 11, 2011

Teradata Express Tools and Connection Drivers

VS C++ Express - compiler by Microsoft for compiling Stored procedures and UDTs in
Teradata
http://www.microsoft.com/express/Downloads/
Teradata Express download tools including Ole data providers
http://www.teradata.com/downloadcenter/
Build Your Own Enterprise Data Warehouse

Ingredients:
  • 1 Teradata 
  • 1 Oracle
  • 1 Informatica

Teradata Express 13 for Windows:
Teradata Support Links and User Forums:
Teradata Support Links
Teradata User forms
 
Oracle 10g for Windows (or Linux):
Obtain and install from you company or get an easy Express edition: http://www.oracle.com/technetwork/database/express-edition/downloads/index.html
 
 
 
Informatica:
 
Hard Part--Configuring the connection string to Oracle for the repository and editing the tnsnames.ora. You won't know you have problems with this untill you are installing the Informatica and it is trying to connect to your existing Oracle.
 
Tips:
  1. Alias HAS to be FULL domain name (i.e. ms.aus.amer.dell.com)
  2. Service name HAS to be FULL domain.  (i.e. ms.aus.amer.dell.com)
  3. Instance = name only (i.e. ms)
  4. All this can be changed in text only in the tnsnames.ora file
  5. Configing the install though requires ONLY the full name.  (i.e. ms.aus.amer.dell.com) since SERVICE_NAME and ALIAS are now the same.
  6. DO NOT use the help in Informatica on this suggesting "World", etc. It only confuses the issue.
  7. A good resource on this is http://www.databasejournal.com/features/oracle/article.php/3092461/Connecting-with-Oracle.htm
  8. Many many googled people have this problem and I found no real solid answers. (lots of different answers)
  9. Example  tnsnames.ora file:
# tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
EXTPROC_CONNECTION_DATA.amer.microsoft.com=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=IPC)
      (KEY=EXTPROC0)
    )
    (CONNECT_DATA=
      (PRESENTATION=RO)
      (SID=PLSExtProc)
    )
  )
ms.amer.microsoft.com=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mycomputer.amer.microsoft.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ms.amer.microsoft.com)
      (INSTANCE_NAME = ms)
    )
  )

Useful tools:
CMD LINE:
Install tips:
  • Uninstall any previous Oracles and delete all registry keys, reboot then delete all folder structures and temp files.
  • During install uncheck the "Create Starter Database".
  • Take in all defaults except switch to character sets to UTF-8 under tab option.
  • When completed, run the Database Configuration Assistant in program files from Windows Start.
  • Next run the Net Config Assistant. Walk through defaults and Finish!
  • Check services.msc and see if Oracle products are running.
  • If included in license, log on to your admin through browser with http://machine_name.domain_if_included:1158/em
Running:
  • First thing I do is log in through browser and copy the SYSMAN user and give my self a new login. Simple name with same password. Add rights if wanted.
  • Then I fire up TOAD (software frontend for Oracle) and configure it to my new database.
  • Schema = Login name; Instance
  • This is where you get to config your tnsname.ora file. This guides your TOAD to services. Examples are in sample folder.
  • Port = 1521; Server = <full name from set up>; Config for the Listener can be found in web front-end on front page link. It gives the network data needed for tnsnames.ora file.
  • Example: (ADDRESS=(PROTOCOL=TCP)(HOST= mycomputer.amer.microsoft.com)(PORT=1521))
Help:
Some help and guidance available here but I don't recommend going the Windows Server 2003 and VMWARE route as described.

  

 

Tuesday, January 04, 2011

Used to head up a GUI team. Been a while. See if I ever do it again. Maybe.

Saturday, February 22, 2003

Orchestrating Data for the NEW Experts

Consider this definition of expertise and by implication, an expert.

Information management and manipulation are replacing knowledge acquisition and inference. The exponential growth of information and the methods for acquiring it have transformed the meaning of expertise. In the past, an expert was the repository of facts. Experts "learned" how to become experts by acquiring those facts and by learning how to distinguish truth. But there are now too many facts, too much stored information, too many sources. Experts are now defined by their ability to recognize underlying patterns so that new facts can be acquired and integrated. Experts learn how to match these underlying patterns or heuristics to new data sources in order to advance composite knowledge.
from http://carlisle-www.army.mil/usawc/Parameters/96autumn/harig.htm (emphasis mine.)

[thinking out loud] ...in the context of trying to remap the user interface (and by implication the mental structural approach that one must take to use our software), trying to find a way to present data (within the database) to a user to COMPOSE new knowledge is no easy task,..... just trying to store that data is no small matter either.

[*deleted some content here*]

That's a pretty tall order.

A FUSION of ALL the information to form a single PICTURE. (and a picture, I think should be the final result.)

And if I understand it right, we're trying to build not only the databases to hold this information, but also the tools for the intelligence community to reconcile and FUSE this information together into that picture. We're not trying to make the picture ourselves. We're trying to provide the tools to make it easy to create that picture. Or as the quote from above says, for these experts to "match these underlining patterns."

Patterns are hard things to grasp. It's possibly the highest level of abstract thinking. Patterns themselves are abstract entities, and matching one pattern to another to form new knowledge (aka 'Intelligence') is that much more abstract and therefore difficult. Making tools to capture these abstracts is that much more of a meta-thinking predicament to try and get around. Making software, i.e. computer logic with GUIs, has got to be that much more difficult.

I propose we step back a bit from our present products package and try and view the overall complete purpose of what we are trying to accomplish with our software and what computational tools we want to present to the our customers and to the Intelligence Community in general. With a recapturing of our primary focus, I think we can create now the tools of the future. It will take some creative thinking and a willingness to step up our overall vision of what it means to make a fusion system that allows for the intelligent hybridization of new knowledge.

[Just thinking out loud with my keyboard... thanks for listening.]

mitch


Monday, January 20, 2003

hi, how are you?

First hellos to the AIS GUI team. Hope all is well in ooey-gooey land.


Thursday, August 15, 2002

The best way I've found to understand operators is always to first learn how to read them out loud.



A summary on how can you read some pointer and class operators (*, &, ., ->, [ ]) that appear in the previous example:



*x can be read: pointed by x

&x can be read: address of x

x.y can be read: member y of object x

(*x).y can be read: member y of object pointed by x

x->y can be read: member y of object pointed by x (equivalent to the previous one)

x[0] can be read: first object pointed by x

x[1] can be read: second object pointed by x

x[n] can be read: (n+1)th object pointed by x









...some code with inline explanations on defining methods outside of the code itself... this always threw me off before.





// example of defining a method outside of the class

// using prototype and scope operator



#include



class CRectangle {

int x, y;

public:

// set_values is a prototype only, defined below

void set_values (int,int);

int area (void) {

return (x*y);

}

};



// set-values defined here using :: scope operator

// notice a, b variables are placed into x, y

// which are private scope with CRectangle class

void CRectangle::set_values (int a, int b) {

x=a;

y=b;

}



int main() {

CRectangle rect;

// set_values is called, passing 3 and 4

rect.set_values (3,4);

// rect.area() sees x,y variables as set_values

// has changed their values per arguments we

// passed to it

cout << "area: " << rect.area();

}





Monday, April 29, 2002

MFC Approach





Once you’ve completed your initial application design, you’ll typically perform the following tasks to develop the application with the development environment and the Microsoft Foundation Class Library (MFC):





  • Use AppWizard to create a set of C++ starter files and associated Windows resources — a starter application that you can build and run immediately.





  • Use the resource editors to construct the objects that make up the user interface, such as menus and dialog boxes.





  • Use elements of the development environment to generate and edit application-specific code:




    • The text editor





    • ClassView





    • ClassWizard





    • WizardBar








  • Build, browse, test, and debug your project files — then add more code.






The steps tend to be iterative: You’ll go back and forth between editing the user interface and writing code all through the development process. You can also do the steps in a different order, depending on your working style.