tag:blogger.com,1999:blog-41280522024-02-08T08:25:45.249-08:00Knots and Notes from a GUI TeamCollaboration notes of a GUI team trying to migrate enterprise level legacy apps into 21st century distributed weblicationsMitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-4128052.post-46361747517413491692011-03-25T07:13:00.000-07:002011-03-25T07:22:33.627-07:00<div dir="ltr" style="text-align: left;" trbidi="on"><span style="font-size: large;">Emails That Consume My Ti</span><span style="font-size: large;">me #1</span><br />
<br />
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.<br />
<br />
<br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">Actors:</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"> New guy <em>(superficially technical):</em></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"> Old guy<em> (technical by training because somebody has to actually DO things):</em></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">New guy email:</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“Hi Old-Guy,</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“Someone gave me your name, because they thought it’d be funny if I pestered you instead of them.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“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.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">Old guy reply:</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“Hi New-Guy,</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“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.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">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.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;"><1 GB word doc attached></span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">New guy: (next day)</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“Hi Old-Guy,</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“Thanks for that great documentation. I’ve read through it and think I pretty much understand it all. </span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“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.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“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.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
<1 kb email attached></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">Old guy: (while tying a rope around his neck)</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“Hi New-Guy,</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;"><span style="color: black;">“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.”</span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">New guy:</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="color: black; font-family: Calibri;">"Hi Old-Guy,</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="color: black; font-family: Calibri;">"What it the ETA on that data report you are putting together for me?"</span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><br />
</div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="color: black; font-family: Calibri;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="font-family: Calibri;">Old guy:</span></span></span></span></div><div class="MsoNormal" style="margin: 0in 0in 0pt;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="color: black; font-family: Calibri;"><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"></span></span></span><span style="color: #1f497d; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-themecolor: dark2;"><span style="color: black; font-family: Calibri;">"Argggghhhhh..... <gag> .. <cough><cough>..... ...."</span></span></div></div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com1tag:blogger.com,1999:blog-4128052.post-34435406223812541832011-03-03T19:50:00.000-08:002011-03-03T19:50:51.655-08:00<div dir="ltr" style="text-align: left;" trbidi="on">Searching for funny youtubes for programmers and found a few:<br />
<br />
Spaghetti Code<br />
<a href="http://www.youtube.com/watch?v=XKzVKOso0fA&feature=related">http://www.youtube.com/watch?v=XKzVKOso0fA&feature=related</a><br />
Life Of A Programmer <br />
<a href="http://www.youtube.com/watch?v=Bl1rmaKFep4&feature=related">http://www.youtube.com/watch?v=Bl1rmaKFep4&feature=related</a><br />
If programmers have make a plane<br />
<a href="http://www.youtube.com/watch?v=UZq4sZz56qM&feature=related">http://www.youtube.com/watch?v=UZq4sZz56qM&feature=related</a><br />
The Truth About Programmers <br />
<a href="http://www.youtube.com/watch?v=Re2Oh4rxN6w&feature=related">http://www.youtube.com/watch?v=Re2Oh4rxN6w&feature=related</a><br />
A real software enginner 2 part<br />
<a href="http://www.youtube.com/watch?v=lpJw9tWqokk&feature=related">http://www.youtube.com/watch?v=lpJw9tWqokk&feature=related</a><br />
How to deal with a programmer<br />
<a href="http://www.youtube.com/watch?v=ZWyH8t4fZ-4&feature=related">http://www.youtube.com/watch?v=ZWyH8t4fZ-4&feature=related</a><br />
<br />
<br />
This one is funny and weird for a Dell commercial. Can't tell for sure if it's legit.<br />
<br />
Dell Free Software commercial advertisement<br />
<a href="http://www.youtube.com/watch?v=RfkucaGv0oA&feature=related">http://www.youtube.com/watch?v=RfkucaGv0oA&feature=related</a></div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-56814775650755776742011-03-01T07:23:00.001-08:002022-09-27T08:34:14.684-07:00<div dir="ltr" style="text-align: left;" trbidi="on"><h2>Programmers Were Funnier Back Then </h2>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.<br />
<br />
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. :)<br />
<br />
<a href="http://www.stellman-greene.com/">Building Better Software</a> looks funny and possibly informative, but <a href="https://www.techiedelight.com/best-comments-source-code-ever/">Top Funny Source Code Comments</a> 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.</div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-26370938104669741452011-03-01T06:46:00.000-08:002011-03-01T06:46:41.766-08:00<div dir="ltr" style="text-align: left;" trbidi="on"><h1>Books for Programming your Computer and your Brain</h1><br />
O'reily Books and any software programming published books you might want are <a href="http://my.safaribooksonline.com/">now offered online</a> 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.<br />
<br />
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.<br />
<br />
Speaking of computer books, what is the single most influential programming book? Don't know? <a href="http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read">Well find out</a> or cast your vote.<br />
<br />
Does anyone remember the "<a href="http://en.wikipedia.org/wiki/A_New_Kind_of_Science">A New Kind of Science</a>”? 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 href="http://blog.projectconnections.com/kimberly_wiefling/2010/04/overcoming-last-century-thinking.html">a project management website </a>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 "<a href="http://www.amazon.com/Chaos-Making-Science-James-Gleick/dp/0140092501/">Chaos: Making a New Science</a>" and Waldrop in "<a href="http://www.amazon.com/Complexity-Emerging-Science-Order-Chaos/dp/B001PO699G/">Complexity: The Emerging Science at the Edge of Order and Chaos</a>."<br />
<br />
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 <a href="http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Dstripbooks&field-keywords=science+and+sanity">Science and Sanity: An Introduction to Non-Aristotelian Systems and General Semantics</a> by <a href="http://en.wikipedia.org/wiki/Alfred_Korzybski">Alfred Korzybski</a> which has my vote for best overall paradigm busting, human engineering, Zen enlightening book. Of course <a href="http://www.amazon.com/Zen-Art-Motorcycle-Maintenance-Inquiry/dp/0061673730/ref=sr_1_1?s=books&ie=UTF8&qid=1298990329&sr=1-1">Zen and the Art of Motorcycle Maintenance</a> is still probably worth reading to a young mind.<br />
<br />
But you can get Korzybski's book <a href="http://esgs.free.fr/uk/art/sands.htm">free online</a>.<br />
<br />
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.<br />
<br />
Happy programming! Remember to feed your brain!</div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-57347810103467199472011-02-17T06:17:00.000-08:002011-02-17T08:29:11.707-08:00<div dir="ltr" style="text-align: left;" trbidi="on"><span style="font-size: x-large;">For God's sake people, keep your business logic in one place! - Part II</span><br />
<br />
So what's the big deal about keeping your business logic in one place?<br />
<br />
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.<br />
<br />
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.<br />
<br />
The simplest and possibly the most frustrating is simply the customer saying to himself, <br />
<br />
<blockquote><em>"Hmmm... these numbers don't look right. I was expecting something a little different. I bet something's wrong with the data."</em> </blockquote>So they write up a trouble ticket or send you an email or IM you with this deep logical distrust of your data.<br />
<br />
What do you do? <br />
<br />
Well, you can do like most IT people do. Say, <br />
<blockquote><em>"Nope, the data looks good here. Must be something on your end"</em> </blockquote>If that don't work, <strong>option #2</strong> is,<br />
<blockquote><em>"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."</em></blockquote><span style="font-size: x-small;">(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.)</span><br />
<br />
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.<br />
<br />
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 <strong>option #2</strong> and give them the company salute--that's where you shrug your shoulders and mumble <em>"mmi-donno."</em><br />
<br />
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.<br />
<br />
And if there is <strong>no</strong> problem, <strong>THEN</strong>, 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.<br />
<br />
NOW..... <br />
<br />
If you had obeyed my simple rule of <strong>For God's sake people, keep your business logic in one place!</strong> you could pleasantly schedule a half hour meeting with the customer, share your desktop, and go, <br />
<blockquote><em>"Well let's look and see if we can find your data problem Mr. CussToMe"</em>,</blockquote><br />
pull up the whole data flow and go, <br />
<blockquote><em>“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!"</em></blockquote><br />
And your job would be done. <br />
<br />
Now isn't that a lot nicer?</div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-15445157945674208562011-02-17T05:22:00.000-08:002011-02-17T06:32:10.536-08:00<div dir="ltr" style="text-align: left;" trbidi="on"><span style="font-size: x-large;">For God's sake people, keep your business logic in one place!</span> <br />
<br />
<br />
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.<br />
<br />
<br />
<span style="font-size: large;">You guys understand fully what "Business Logic" is right? Are you sure? Well, think about it</span>.<br />
<br />
<br />
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.')<br />
<br />
<br />
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!<br />
<br />
<br />
The exception (or better understanding) of that rule that:<br />
<br />
<strong>Business Logic = anytime data itself is CHANGED</strong>,<br />
<br />
<br />
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).<br />
<br />
<br />
<span style="font-size: large;">You do fully understand what "Meta Data" is right? Are you sure? Well, think about it</span>.<br />
<br />
<br />
"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."<br />
<br />
<br />
So, all meta-data CAN be altered, changed, adjusted, transformed, and slung about however you want. <br />
<br />
<br />
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.<br />
<br />
<br />
So, let’s recap.<br />
<br />
<br />
The main lecture point here was going to be: For God's sake people, keep your business logic in one place.<br />
<br />
<br />
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.<br />
<br />
<br />
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! <br />
<br />
<br />
Business logic: Anytime data itself is changed.</div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-13786639384241493132011-02-11T12:27:00.000-08:002011-02-11T12:27:29.663-08:00<div dir="ltr" style="text-align: left;" trbidi="on"><span style="font-size: large;">Teradata Express Tools and Connection Drivers</span><br />
<br />
VS C++ Express - compiler by Microsoft for compiling Stored procedures and UDTs in <br />
Teradata<br />
<a href="http://www.microsoft.com/express/Downloads/">http://www.microsoft.com/express/Downloads/</a><br />
Teradata Express download tools including Ole data providers<br />
<a href="http://www.teradata.com/downloadcenter/">http://www.teradata.com/downloadcenter/</a><br />
</div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-4693665177476471952011-02-11T09:20:00.000-08:002011-02-11T09:20:47.036-08:00<div dir="ltr" style="text-align: left;" trbidi="on"><span style="font-size: x-large;">Build Your Own Enterprise Data Warehouse</span><br />
<br />
<span style="font-size: large;">Ingredients:</span><br />
<ul style="text-align: left;"><li>1 Teradata </li>
<li>1 Oracle</li>
<li>1 Informatica</li>
</ul><div style="text-align: left;"><br />
</div><div style="text-align: left;"><span style="font-size: large;">Teradata Express 13 for Windows: </span></div><ul style="text-align: left;"><li>Sign up, get email link from Teradata and download and install: <a href="http://www.teradata.com/t/teradata-express-13-0-windows/">http://www.teradata.com/t/teradata-express-13-0-windows/</a></li>
<li>Get the FAQ: <a href="http://www.teradata.com/t/express-faq.aspx?id=12290">http://www.teradata.com/t/express-faq.aspx?id=12290</a></li>
<li>Teradata Education Network:</li>
<ul><li> <a href="http://www.teradata.com/t/ten-lander.aspx?id=5690">http://www.teradata.com/t/ten-lander.aspx?id=5690</a></li>
<li>Teradata, creating tables: <a href="http://developer.teradata.com/database/articles/what-you-need-to-know-before-creating-a-table-in-teradata">http://developer.teradata.com/database/articles/what-you-need-to-know-before-creating-a-table-in-teradata</a></li>
<li>Teradata Data Mover (TDM): A tool for moving database objects: <a href="http://developer.teradata.com/tools/articles/intro-to-tdm-create-your-first-job">http://developer.teradata.com/tools/articles/intro-to-tdm-create-your-first-job</a></li>
</ul></ul><strong>Teradata Support Links and User Forums</strong>:<br />
Teradata Support Links<br />
<ul><li><a href="http://www.teradata.com/t/">http://www.teradata.com/t/</a></li>
<li><a href="http://www.teradata.com/DownloadCenter/">http://www.teradata.com/DownloadCenter/</a></li>
<li><a href="http://www.info.teradata.com/">http://www.info.teradata.com/</a></li>
<li><a href="http://www.teradatamagazine.com/">http://www.teradatamagazine.com/</a></li>
<li><a href="http://www.teradata.com/t/demos/">http://www.teradata.com/t/demos/</a></li>
<li><a href="https://tays.teradata.com/web/guest/home">https://tays.teradata.com/web/guest/home</a></li>
</ul>Teradata User forms<br />
<ul><li><a href="http://developer.teradata.com/">http://developer.teradata.com/</a></li>
<li><a href="http://www.teradata.com/t/user-groups//">http://www.teradata.com/t/user-groups//</a></li>
<li><a href="http://www.teradataforum.com/">http://www.teradataforum.com/</a></li>
<li><a href="http://www.tek-tips.com/">http://www.tek-tips.com/</a></li>
</ul><span style="font-size: large;"></span> <br />
<span style="font-size: large;">Oracle 10g for Windows (or Linux):</span> <br />
<div>Obtain and install from you company or get an easy Express edition: <a href="http://www.oracle.com/technetwork/database/express-edition/downloads/index.html">http://www.oracle.com/technetwork/database/express-edition/downloads/index.html</a></div><div> </div><span style="font-size: large;"></span> <br />
<span style="font-size: large;"></span> <br />
<span style="font-size: large;">Informatica:</span> <br />
<ul style="text-align: left;"><li>Obtain download from your company or download 8.1 through Oracle and install. </li>
<li>Known as Hyperion Data Integration Management Release 11.1.1.1.0 Informatica Power Center 8.1.1 </li>
<li>These are 2 large files requiring acceptance agreement.</li>
<li>Keys are free from Oracle here: <a href="http://www.oracle.com/ocom/groups/public/@ocom/documents/webcontent/161646.zip">http://www.oracle.com/ocom/groups/public/@ocom/documents/webcontent/161646.zip</a> Derived from this page here: <a href="http://www.oracle.com/us/support/licensecodes/hyperion/index.html">http://www.oracle.com/us/support/licensecodes/hyperion/index.html</a></li>
</ul> <br />
<strong>Hard Part--Configuring the connection string to Oracle for the repository and editing the tnsnames.ora.</strong> 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. <br />
<br />
<div><strong>Tips:</strong></div><ol style="text-align: left;"><li>Alias HAS to be FULL domain name (i.e. ms.aus.amer.dell.com)</li>
<li>Service name HAS to be FULL domain. (i.e. ms.aus.amer.dell.com)</li>
<li>Instance = name only (i.e. ms)</li>
<li>All this can be changed in text only in the tnsnames.ora file</li>
<li>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.</li>
<li>DO NOT use the help in Informatica on this suggesting "World", etc. It only confuses the issue. </li>
<li>A good resource on this is <a href="http://www.databasejournal.com/features/oracle/article.php/3092461/Connecting-with-Oracle.htm">http://www.databasejournal.com/features/oracle/article.php/3092461/Connecting-with-Oracle.htm</a></li>
<li>Many many googled people have this problem and I found no real solid answers. (lots of different answers)</li>
<li>Example tnsnames.ora file:</li>
</ol><blockquote><div style="text-align: left;"># tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora</div><div style="text-align: left;"># Generated by Oracle configuration tools.</div><div style="text-align: left;">EXTPROC_CONNECTION_DATA.amer.microsoft.com=</div><div style="text-align: left;"> (DESCRIPTION=</div><div style="text-align: left;"> (ADDRESS=</div><div style="text-align: left;"> (PROTOCOL=IPC)</div><div style="text-align: left;"> (KEY=EXTPROC0)</div><div style="text-align: left;"> )</div><div style="text-align: left;"> (CONNECT_DATA=</div><div style="text-align: left;"> (PRESENTATION=RO)</div><div style="text-align: left;"> (SID=PLSExtProc)</div><div style="text-align: left;"> )</div><div style="text-align: left;"> )</div><div style="text-align: left;">ms.amer.microsoft.com= </div><div style="text-align: left;"> (DESCRIPTION =</div><div style="text-align: left;"> (ADDRESS = (PROTOCOL = TCP)(HOST = mycomputer.amer.microsoft.com)(PORT = 1521))</div><div style="text-align: left;"> (CONNECT_DATA =</div><div style="text-align: left;"> (SERVER = DEDICATED)</div><div style="text-align: left;"> (SERVICE_NAME = ms.amer.microsoft.com)</div><div style="text-align: left;"> (INSTANCE_NAME = ms)</div><div style="text-align: left;"> )</div><div style="text-align: left;"> )</div></blockquote><div style="text-align: left;"></div><br />
<strong>Useful tools:</strong> <br />
<div>CMD LINE:</div><ul style="text-align: left;"><li>TNSPING <alias in tnsnames file></li>
<li>LSNRCTL <enter></li>
<li>LSNRCTL help <enter></li>
<li><a href="http://ora-12154.ora-code.com/">http://ora-12154.ora-code.com/</a></li>
</ul><div><strong>Install tips:</strong></div><ul style="text-align: left;"><li>Uninstall any previous Oracles and delete all registry keys, reboot then delete all folder structures and temp files.</li>
<li>During install uncheck the "Create Starter Database".</li>
<li>Take in all defaults except switch to character sets to UTF-8 under tab option.</li>
<li>When completed, run the Database Configuration Assistant in program files from Windows Start.</li>
<li>Next run the Net Config Assistant. Walk through defaults and Finish!</li>
<li>Check services.msc and see if Oracle products are running. </li>
<li>If included in license, log on to your admin through browser with <a href="http://machine_name.domain_if_included:1158/em">http://machine_name.domain_if_included:1158/em</a></li>
</ul><strong>Running:</strong> <br />
<ul style="text-align: left;"><li>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.</li>
<li>Then I fire up TOAD (software frontend for Oracle) and configure it to my new database.</li>
<li>Schema = Login name; Instance</li>
<li>This is where you get to config your tnsname.ora file. This guides your TOAD to services. Examples are in sample folder.</li>
<li>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.</li>
<li>Example: (ADDRESS=(PROTOCOL=TCP)(HOST= mycomputer.amer.microsoft.com)(PORT=1521))</li>
</ul><strong>Help:</strong><br />
<div>Some help and guidance available here but I don't recommend going the Windows Server 2003 and VMWARE route as described.</div><div><a href="http://jiri.wordpress.com/2010/03/17/informatica-powercenter-up-and-running-in-less-than-30-minutes-and-yes-its-free/">http://jiri.wordpress.com/2010/03/17/informatica-powercenter-up-and-running-in-less-than-30-minutes-and-yes-its-free/</a></div><br />
<div> </div><br />
<div> </div></div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-43987910433807711172011-01-04T14:53:00.001-08:002011-01-04T14:53:57.913-08:00Used to head up a GUI team. Been a while. See if I ever do it again. Maybe.Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-895614172003-02-22T11:18:00.000-08:002011-02-11T09:32:47.163-08:00<div dir="ltr" style="text-align: left;" trbidi="on"><span style="font-size: x-large;">Orchestrating Data for the NEW Experts</span><br />
<br />
Consider this definition of expertise and by implication, an expert. <br />
<br />
<blockquote>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. <br />
from http://carlisle-www.army.mil/usawc/Parameters/96autumn/harig.htm (emphasis mine.) </blockquote><br />
[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. <br />
<br />
[*deleted some content here*] <br />
<br />
That's a pretty tall order. <br />
<br />
A FUSION of ALL the information to form a single PICTURE. (and a picture, I think should be the final result.) <br />
<br />
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." <br />
<br />
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. <br />
<br />
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. <br />
<br />
[Just thinking out loud with my keyboard... thanks for listening.] <br />
<br />
mitch <br />
<br />
<br />
</div>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-877442352003-01-20T12:42:00.000-08:002003-01-20T12:42:00.536-08:00hi, how are you?Anonymousnoreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-877423482003-01-20T12:03:00.000-08:002003-01-20T12:03:01.413-08:00<p>First hellos to the AIS GUI team. Hope all is well in ooey-gooey land.</p>
<br />Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-80660534287017438762002-08-15T13:02:00.000-07:002011-01-31T20:39:26.708-08:00<p>The best way I've found to understand operators is always to first learn how to <b><i>read</i></b> them out loud.</p><br /><br /><p>A summary on how can you read some pointer and class operators (*, &, ., ->, [ ]) that appear in the previous example: <br /><br /><pre><br /><br />*x can be read: pointed by x<br /><br />&x can be read: address of x<br /><br />x.y can be read: member y of object x<br /><br />(*x).y can be read: member y of object pointed by x<br /><br />x->y can be read: member y of object pointed by x (equivalent to the previous one)<br /><br />x[0] can be read: first object pointed by x<br /><br />x[1] can be read: second object pointed by x<br /><br />x[n] can be read: (n+1)th object pointed by x<br /><br /></pre><br /><br /><br /><br /><br /><br /></p><br /><br /><p>...some code with inline explanations on defining methods <i>outside</i> of the code itself... this always threw me off before.</p><br /><br /><pre><br /><br />// example of defining a method outside of the class<br /><br />// using prototype and scope operator<br /><br /><br /><br />#include <iostream.h><br /><br /><br /><br />class CRectangle {<br /><br /> int x, y;<br /><br /> public:<br /><br /> // set_values is a prototype only, defined below<br /><br /> void set_values (int,int); <br /><br /> int area (void) {<br /><br /> return (x*y);<br /><br /> }<br /><br />};<br /><br /><br /><br /> // set-values defined here using :: scope operator<br /><br /> // notice a, b variables are placed into x, y<br /><br /> // which are private scope with CRectangle class<br /><br />void CRectangle::set_values (int a, int b) {<br /><br /> x=a;<br /><br /> y=b;<br /><br />}<br /><br /><br /><br />int main() {<br /><br /> CRectangle rect;<br /><br /> // set_values is called, passing 3 and 4<br /><br /> rect.set_values (3,4);<br /><br /> // rect.area() sees x,y variables as set_values<br /><br /> // has changed their values per arguments we <br /><br /> // passed to it<br /><br /> cout << "area: " << rect.area();<br /><br />}<br /><br /><br /><br /></pre><br /><br />Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-10253022558617924262002-04-29T21:05:00.000-07:002011-01-31T20:39:26.826-08:00<h3>MFC Approach</h3><br /><br /><p><br /><br />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): <br /><br /><ul type=disc><br /><br /><li><br /><br />Use AppWizard to create a set of C++ starter files and associated Windows resources — a starter application that you can build and run immediately.<br><br></li><br /><br /><li><br /><br />Use the resource editors to construct the objects that make up the user interface, such as menus and dialog boxes.<br><br></li><br /><br /><li><br /><br />Use elements of the development environment to generate and edit application-specific code:<ul type=disc><br /><br /><li><br /><br />The text editor<br><br></li><br /><br /><li><br /><br />ClassView<br><br></li><br /><br /><li><br /><br />ClassWizard<br><br></li><br /><br /><li><br /><br />WizardBar</li><br /><br /></ul><br /><br /></li><br /><br /><li><br /><br />Build, browse, test, and debug your project files — then add more code.</li><br /><br /></ul><br /><br /><p><br /><br />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.</p>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-90018852964397634972002-04-10T21:34:00.000-07:002011-01-31T20:39:26.900-08:00<h1>Chapter 1. - Basic C Programming</h1> <br /><br /><br /><br /><h2>How to Write a C Program</h2><br /><br /><p>To use a class you include the header file. <br /><br />The iostream is the standard library. <br /><br />Use <pre>#include <iostream></pre> to do so. <br /><br />The main() return type is int and 0 returned indicates success.<br /><br /><pre>using namespace std</pre> encapsulates all the library to prevent<br /><br />same name conflicts.<br /><br />A class is a user-defined data type.<br /><br />A class is typically divided into two parts: <i>header file</i> and<br /><br /><i>program text file</i>.<br /><br />A predefined class object <i>cout</i> outputs to terminal with "<<"<br /><br />operator.<br /><br />Use <pre>#include <string></pre> to include the String header class<br /><br />file. <br /><br /><pre>cin >> objName</pre> takes input and puts it into <i>objName</i><br /><br />object (variable).<br /><br />Character literals use single quotes like <pre>'\n', '\t'</pre> for<br /><br />newline and tab indications.<br /><br /></p><br /><br /><br /><br /><h2>Defining and Initializing a Data Object</h2> <br /><br /><p><br /><br />To define an object, name it and give it a data type. (note* author uses word "data object" in place of word variable always.)<br /><br />Initialize a data object with <pre><br /><br />int objName = 0;<br /><br />OR<br /><br />int objName( 0 );<br /><br /></pre>.<br /><br />C++ 4 basic data types are:<br /><br />Boolean, Character, Interger, and Floating Point. <br /><br />A template class allows us to define a class without declaring data<br /><br />types. Three members of class <i>complex</i> are 1.Float 2. Double. 3.<br /><br />Long Double and done like:<br /><br /><pre><br /><br />#include <complex><br /><br /></pre><br /><br />Boolean and Constants declared respectively like:<br /><br /><pre><br /><br />bool go_for_it = true;<br /><br />const int max_tries = 3;<br /><br />const double pi = 3.14159;<br /><br /></pre><br /><br /><br /><br /></p><br /><br /><h2>Writing Expressions</h2><br /><br /><p><br /><br />int numbers are truncated with NO rounding off.<br /><br /><blockquote>The % operator has always confused me. The author didn't<br /><br />help here either. After wrestling with it the best way I've found to<br /><br />understand it is by reading the statement with <b>"divided by . . . the<br /><br />remainder equals . . ."</b>. An example: 5 % 2 = 1 reads "five divided<br /><br />by two leaves a remainder of one." Linguistic read outs tend to explain<br /><br />meanings... why authors don't utilize it more I'll never<br /><br />know.</blockquote><br /><br /><pre>cnt = cnt + 1</pre><br /><br />is the same as<br /><br /><pre>cnt++</pre><br /><br />...both add one to cnt<br /><br />And <br /><br /><pre><br /><br />cnt = cnt + 2<br /><br /></pre><br /><br />is the same as<br /><br /><pre>cnt += 2</pre><br /><br />...both add two to the current object value of cnt<br /><br />There is a prefix and a postfix version of this. <i>++cnt</i> adds an<br /><br />increment of one BEFORE the object is evaluated. <i>cnt++</i> does so<br /><br />AFTER object is evalutaed.<br /><br /><br /><br />Object names (variables) are case sensitive, so to test for like a<br /><br />letter "n" input, use:<br /><br /><pre>if ( objVar == 'N' || objVar == 'n' ) <br /><br />//proceed on...<br /><br /></pre><br /><br />A conditional expression is considered as evaluating to FALSE if the<br /><br />value returned is 0. This means that arithmathic operations can be used<br /><br />as on/off boolean flags or switches. The parallel to this is an boolean<br /><br />object can evaluate to a zero (0) or a non-zero (anynumber). These are<br /><br />used for counting like in loops, conditional branching and recursions.<br /><br />So, if X % 2 = <i>anything</i>, then it equals TRUE. Read this like:<br /><br />"Is there a remainder?"<br /><br /><br /><br /><pre><br /><br />&& // logical comparison check for AND; like a question<br /><br />|| // logical comparison check for OR; again, like a question<br /><br />! // logical NOT<br /><br /><br /><br />== // logical test of equivalence<br /><br /> = // this is an ASSIGNMENT of a VALUE<br /><br /></pre><br /><br /><ol>ORDER OF PRECEDENCE<br /><br /><li>logical NOT<br /><br /><li>arithmatic (*,/,%)<br /><br /><li>arithmatic (+, -)<br /><br /><li>relational (<, >, <=, >=)<br /><br /><li>relational (==, !=)<br /><br /><li>logical AND<br /><br /><li>logical OR<br /><br /><li>assignment<br /><br /></ol><br /><br /><br /><br /><ol>LITERALS (note* escape character works for only the 1 next<br /><br />character)<br /><br /><li>'\n' newline<br /><br /><li>'\t' tab<br /><br /><li>'\0' null<br /><br /><li>'\'' single quote<br /><br /><li>'\"' double quote<br /><br /><li>'\\' backslash<br /><br /></ol><br /><br /><br /><br />Remember - 0 equals FALSE and FALSE equals 0<br /><br /></p><br /><br /><h2>Writing Conditional and Loop Statements</h2> <br /><br /><p>Most of this is standard loop syntax and logic. The WHILE loop and<br /><br />FOR loop are the primary two. There also is the SWITCH condition check<br /><br />that is equivalent to if-else-if clause, like:<br /><br /><pre><br /><br />switch (objPerson)<br /><br />{<br /><br />case "Fred":<br /><br /> cout << "Hi Fred.\n";<br /><br /> break;<br /><br />case "Joe":<br /><br /> cout << "Hey Joe!\n";<br /><br /> break;<br /><br />case "Bob":<br /><br /> cout << "Whoa Bob!!\n";<br /><br /> break;<br /><br />default:<br /><br /> cout << "What is your name?\n";<br /><br /> break;<br /><br />}<br /><br /> <br /><br /></pre><br /><br /><i>break</i> keyword serves to kick you out of the testing.<br /><br /><i>continue</i> keyword in a loop kicks you out of that iteration ONLY.<br /><br />The looping will <b>continue</b> till a break or a condition is<br /><br />satisfied.<br /><br /></p><br /><br /><h2>How to Use Arrays and Vectors</h2><br /><br /><p>Two types of arrays. <b>Built-in Array</b> (specify type of element, a name, and a dimensiion.) and <b>Vector</b> (a class object where the vector header file must be included).</p><br /><br /><p>Vectors are included as a class. They do not support initialization<br /><br />from a list. Author confuses me somewhat on this, but shows to use the<br /><br />normal built-in array to then initialize a vector class.</p><br /><br /><h2>Pointers Allow for Flexibility</h2> <br /><br /><p><i>Author explains this poorly. I went to the <a href="http://www.cplusplus.com">Cplusplus dot com</a> tutorial for a good explanation.</i></p><br /><br /><p>In simple terms: the ampersand before a variable name means this is<br /><br />the <i>ADDRESS</i> that holds the variable (object) value, NOT the value<br /><br />itself like normal. This is called <i>Dereference</i>. The asterisk<br /><br />before a variable makes that variable (object) a POINTER type object,<br /><br />and NOT a regular variable. It <i>instead</i> <b>points</b> to another<br /><br />variable instead of actually being a normal variable itself.</p><br /><br /><p>The confusion comes from two aspects. <ol><li>Pointer objects are often<br /><br />used to point to Addresses of other objects. Thus both of these operants<br /><br />are <i>usually</i> but not neccessarily used together. <li>Pointer<br /><br />objects can be directly created by using the asterisk also, but it just<br /><br />happens to be an asterisk to do this. It's not the same meaning as when<br /><br />attached to the variable name. <i>It is an asterisk used in a different<br /><br />way.</i></ol></p><p>Examples: <pre><br /><br />At this point, and following with the same example initiated above where:<br /><br /><br /><br /><br /><br />andy = 25;<br /><br />ted = &andy;<br /><br /><br /><br />you should be able to clearly see that all the following expressions are true: <br /><br />andy == 25<br /><br />&andy == 1776<br /><br />ted == 1776<br /><br />*ted == 25<br /><br /><br /><br /></pre></p><br /><br /><h2>Writing and Reading Files</h2><br /><br /><p><pre>#include <fstream></pre> ...is required. To open a file for output we define an ostream class object and pass it the name of the file to open. <br /><br /><pre><br /><br />// seq_data.txt is opened in the output mode<br /><br />ofstream outfile( "seq_data.txt" );<br /><br /></pre><br /><br />Confirmation that the file is properly opened and can be tested by the "true" value of the class object. <pre><br /><br /><br /><br />if ( ! outfile) // if evaluates to false, file could not be opened<br /><br /> cerr << "Oops, unable to save session data!\n";<br /><br /><br /><br />else<br /><br /> // ok, outfile is open, write the data<br /><br /> outfile << usr_name << ' '<br /><br /> << num_tries << ' '<br /><br /> << num_right << end1;<br /><br /></pre><br /><br />"end1" is a predefined manipulater from the iostream library that<br /><br />inserts a newline character and flushes the output buffer.... the "cerr"<br /><br />prints straight to the screen - NOT buffered. There is also an APPEND<br /><br />mode for i/o stuff and also other manipulaters in the iostream such as,<br /><br />"hex", "oct", and "setprecision(n)".<br /><br /></p><br /><br />----- END -----<br /><br /><h4>note*</h4><br /><br /><p>This ends my notes on the first chapter of "Essential C++". Due to<br /><br />the density of some of the material, I may go through the Cplusplus<br /><br />online tutorial before going further in this book. But I still like the<br /><br />outline here and the looks of the up and coming chapters so I'll be back<br /><br />for "chapter 2 - Procedural Programming" soon.</p>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-60170871884378837602002-04-10T18:26:00.000-07:002011-01-31T20:39:26.930-08:00<h4>Compiling from command line with Microsoft Visual C </h4> In summary, if you want to compile a unique C source code file into an executable like for example test.cpp and you have already executed VCVARS32.BAT it would be enough to write at the command line: <br /><br /><pre>CL test.cpp</pre> <br /><br />that would generate the file test.exe.<br /><br /><p>...trying again to explain simply.... CL is actually a file called CL.EXE that comes with Visual Studio.... all you are trying to do with the VCVAR32.BAT file (it also comes with the VCStudio and is in BIN folder) is to set the computer's environmental variables so you can execute that CL.EXE compiler program from the root (e.g. C:\).... all this does is saves you from having to type in the whole path everytime you want to run the compiler (ala C:\Program Files\Microsoft Visual Studio\VC98..blah blah whatever...).... get it?</p><br /><br />Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-2583482730937545122002-04-10T18:25:00.000-07:002011-01-31T20:39:26.975-08:00<h3>Compiling from command line with Microsoft Visual C </h3><br /><br /><br /><br /><br /><br /><p>Visual C supports the possibility to compile 32 bits programs with no need to use the integrated development environment, simply from the comman line. <br /><br /><p>For that, first of all we need that a series of system environment variables be suitably defined. More concretely they are the variables %INCLUDE% and %LIB% that define the directories where the include and library files are, as well as it is also recommendable to add the directories where the executable file that we need to compile are to the path. <br /><br />Luckily, during the initial installation of Visual C a BAT file called VCVARS32.bat would have been automatically created defining all these environment variables for us. This BAT file is located at the subdirectory BIN that hangs from the directory where you have installed Visaul C , that by default would be something similar to: <br /><br /><pre>C:\Program Files\Microsoft Visual Studio\VC98\BIN </pre><br /><br />Maybe this file is already being automatically executed whenever our operating system starts up, to know that we can just try this test: from the command line type: <br /><br /><pre>set INCLUDE</pre> <br /><br />if the system shows a series of paths separated by commas the file has already been executed. If a message telling that the environment variable has not yet been defined (is not defined) is shown you will have to execute the file ,b>VCVARS32.bat</b> manually.Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-90360463786564276962002-04-09T15:06:00.000-07:002011-01-31T20:39:27.002-08:00<a href="http://cseng.aw.com/book/toc/0,3830,0201485184,00.html"><h4>Structure of This Book.</h4></a><br /><br />A Note on the Source Code. <br /><br />Acknowledgments. <br /><br />Where to Find More Information. <br /><br />Typographical Conventions. <br /><br />1. Basic C Programming. <br /><br /><br /><br />How to Write a C Program. <br /><br />Defining and Initializing a Data Object. <br /><br />Writing Expressions. <br /><br />Writing Conditional and Loop Statements. <br /><br />How to Use Arrays and Vectors. <br /><br />Pointers Allow for Flexibility. <br /><br />Writing and Reading Files. <br /><br /><br /><br /><br /><br />2. Procedural Programming. <br /><br /><br /><br />How to Write a Function. <br /><br />Invoking a Function. <br /><br />Providing Default Parameter Values. <br /><br />Using Local Static Objects. <br /><br />Declaring a Function Inline. <br /><br />Providing Overloaded Functions. <br /><br />Defining and Using Template Functions. <br /><br />Pointers to Functions Add Flexibility. <br /><br />Setting Up a Header File. <br /><br /><br /><br /><br /><br />3. Generic Programming. <br /><br /><br /><br />The Arithmetic of Pointers. <br /><br />Making Sense of Iterators. <br /><br />Operations Common to All Containers. <br /><br />Using the Sequential Containers. <br /><br />Using the Generic Algorithms. <br /><br />How to Design a Generic Algorithm. <br /><br />Using a Map. <br /><br />Using a Set. <br /><br />How to Use Iterator Inserters. <br /><br />Using the iostream Iterators. <br /><br /><br /><br /><br /><br />4. Object-Based Programming. <br /><br /><br /><br />How to Implement a Class. <br /><br />What are Class Constructors and the Class Destructor? <br /><br />What are mutable and const? <br /><br />What is the this Pointer? <br /><br />Static Class Members. <br /><br />Building an Iterator Class. <br /><br />Collaboration Sometimes Requires Friendship. <br /><br />Implementing a Copy Assignment Operator. <br /><br />Implementing a Function Object. <br /><br />Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-82964171892876880262002-04-09T15:00:00.000-07:002011-01-31T20:39:27.027-08:00<h4><a href="http://www.codeproject.com/interview/stanlippman14nov2001.asp">The Code Project - An interview with Microsoft's new Visual C Architect Stanley Lippman - Interviews</a></h4><br /><br /><p>The author of the primary book <img align="right" src="http://www.awl.com/cseng/titles/0-201-48518-4/0201485184.E.jpg"> I am using on this adventure is Stanley Lippman who recently has taken the Microsoft Visual C++ Architect positon.</p>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-70719995892705016992002-04-09T10:33:00.000-07:002011-01-31T20:39:27.043-08:00<h3>Pointers in C++</h3><br /><br /><p>Pointers in C++ are a major conceptual stumblingblock. Lippman's book was very confusing on this. And even Bruce Eckel left me confused. My third resource, <a href="http://cplusplus.com/doc/tutorial/">C language tutorial</a>, by Juan Soulié finally gets it right explaining <b>C++ pointers</b>.</p><br /><br /><br /><br /><p>This following simple paragraph made all the difference in the world clarifiying the declaration of a pointer [e.g. int * mypointervariable ] versus <i>using</i> a pointer variable to access the <i>value</i> of the variable being pointed to [e.g. variable2 = *mypointervariable] or loading an address into a pointer variable [e.g. mypointervariable = &addressOfVariable] made all the difference in the world!<br /><br /><blockquote><br /><br />I emphasize that this asterisk (*) that we put when declaring a pointer means only that: that it is a pointer, and does not have to be confused with the reference operator that we have seen a bit earlier and that is also written with an asterisk (*). They are simply two different tasks represented with the same sign. <br /><br /></blockquote><br /><br /></p><br /><br /><p>Thanks Juan Soulié!</p><br /><br />Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-74932784152516732752002-04-03T09:59:00.000-08:002011-01-31T20:39:27.055-08:00<h3>Jello World</h3><br /><br /><pre><br /><br /><br /><br />#include <iostream><br /><br />#include <string><br /><br />using namespace std;<br /><br /><br /><br />int main() <br /><br /> {<br /><br /> string user_name;<br /><br /> cout << "What is your name: ";<br /><br /> cin >> user_name;<br /><br /> cout << '\n'<br /><br /> << "Hello, "<br /><br /> << user_name<br /><br /> << "... and goodbye! \n ";<br /><br /><br /><br />return 0;<br /><br />}<br /><br /><br /><br /></pre><br /><br /><p>This runs fine in VC++ using the <i>iostream</i> only, I guess by refering to the standard class only <i>std</i> instead of the Microsoft <i>stdfx</i> class ???</p><br /><br /><p>This sample comes from one of two books I'm using: <b>Essential C++</b> by <i>Stanley B. Lippman</i> ISBN 0-201-48518-4 from Addison-Wesley <a href="http://www.aw.com/cseng/series/indepth/">C++ In-Depth Series</a>. The other book is <i>Bruce Eckel's</i> <b>Thinking in C++</b> which can be downloaded free from his <a href="http://www.bruceeckel.com">site</a> and bought in bookstores.</p><br /><br /><p>The covererage in this sample code is the <i>"#include"</i> command (or is it a keyword?) that brings in an object. The <i>iostream</i> itself is the standard C++ library of objects and is what gives understanding to the <i>cin</i> and <i>cout</i> keywords; notice the directions of the brackets used for each. Also the <i>int</i> TYPE declaration on the function MAIN() is declaring what will be the data type of the return value. In this case RETURN is zero, thus signaling success. Anything non-zero indicates failure. The RETURN 0 doesn't have to be specified as here if the keyword VOID is used instead of INT. That's what VOID means - nothing returned; whereas here just the fact that MAIN() has nothing in its () brackets - that itself declares that the function has no RETURN.</p><br /><br /><p>Also note the use of NAMESPACE to restrict these specific keywords used as coming from the STD library only.</p><br /><br /><p>String characters are shown proper format along with the "newline" (backslash N) declaration.</p>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-42773863406190411252002-04-03T09:35:00.000-08:002011-01-31T20:39:27.067-08:00<h3>Hell-oh Whirled</h3><br /><br /><pre><br /><br />#include <iostream.h><br /><br />void main() <br /><br />{<br /><br /> cout << "Welcome to C++ \n";<br /><br />}<br /><br /></pre><br /><br /><p>This runs fine in compiled in Microsoft Visual C++ studio. If you change <i>iostream.h</i> to <i>iostream</i> only, it errors out with no understanding of the <i>cout</i>.</p><br /><br />Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0tag:blogger.com,1999:blog-4128052.post-68391969367959270212002-04-02T09:32:00.000-08:002011-01-31T20:39:27.086-08:00<h2>C++ . . . </h2><br /><br /><p>I've always known that the true heavy duty programmers code in C++ (assuming we're past the age of the elitist Assembly programmers) and I've always tried hard to avoid learning it (as in REALLY learning it, not just Visual C++ write a few components per instructions kind of thing). I hate JAVA (it's so dang popular and <i>hip</i>, not to mention <b>slow</b> and NOT so cross platform as everyone likes to think. And Visual Basic is just too darn distanced from any <b>real</b> Object Orientated code that it's frustrating to learn that <i>GUI-drag n' drop-ActiveX-controls-box-drawing</i> crap. And all these VB guys that I know don't seem to have a programming clue - so what the heck are they doing?</p.<br /><br /><br /><br /><p>So I'm biting the bullet and experimenting and logging my progress learning C++. We'll seeing if I'm wasting time, fooling myself, or pursuing (what I believe is) the true heart of all the programming languages [note*] .</p><br /><br /><br /><br /><p>The following posts should log my progress and serve to prompt me to continue my development. My goal is to end this experiment in 6 weeks to see what progress can be made with a crash course self-taught method such as this.</p><br><br /><br /><br /><br /><p style="font-size:-1">note* Java and C# are both based on C++, and VB is just a giant work around to avoid it.</p>Mitch Sandershttp://www.blogger.com/profile/14597165342154268660noreply@blogger.com0