2013-09-07

really ... don't do it!

Tempting. Very tempting. But first ...

Nice eye catching advert as seen at linkedin.

Anxious to quickly solve an issue? Go ahead, reboot that box. The phone is ringing with plenty of other attention time sinks just waiting to ... sink your time. So reboot, and move on to the next issue.

But first ...

Putting out fires can be quite fun. For a little while, at least. Nothing makes the day go by faster than staying busy.

But if one simply spends all their time and energy on fire fighting, there is no time left over for ... actual fire prevention. Prevent the fire from getting started in the first place, and amazingly, actual productive work time begins.

First things first, kudos and props are due to Steve Litt and his book Troubleshooting Techniques of the Successful Technologist. Anyone thinking of a career in programming or engineering, and no, that does not include civil engineers, that is slightly different ... maybe another topic for  later ... but first ... much benefit and wisdom can be gleaned in Mr. Litt's book.

The ...Technologist is book is some pretty heavy stuff. If one is looking at earning a EE sheepskin, you're one of the target audiences. If that isn't the case, his other troubleshooting titles, with not quite as much depth in engineering level subject matter, might be a better fit.

Or, one can wing it. And hope to get lucky. I've had the privilege and honor of  working with many different technicians, electrical engineers, programmers, developers ... and can not count myself among the elite crowd of perhaps the one person out of twenty, or more like the one out of one thousand with a natural, instinctive ability for troubleshooting. The rest of us have to work at it.

Every time I find myself in a rush, forgetting the training, experience ... I've taken a wrong turn or three more times that I would care to admit. And while a wrong turn can eventually get you to a right solution, and plenty of other learning experiences along the way, time spent is ... time spent. Its gone, it is not coming back, life does not present any do over opportunities when it comes to how one spends their time.

So now its time for some specifics. There was the mention of privilege, honor, and work mates. But unfortunately, for a few of them, the "privilege" part was ... not so much. More like a challenge. One in particular, when getting reports of "clients experiencing issues", pops into the application server host, and try this. Try that. Didn't help. Change something. Change something else. Add a thing or two. Maybe three, or even five. Delete a couple things. Tweak a configuration file, or twenty of them.

Eventually, after a couple of hours, or could be a couple of days later, Mr. Trouble Shooter (Spreader?) smugly pops into the team office and "mentions" trouble for something, and it just has to be the database, and pressing for more information, Mr. Tee does not offer any helpful details at all. Even though he's the actual source of three or four other new problems. "I'm not sure what is going on. Nothing has changed. The clients just started getting errors."

Really. Yep. Nothing at all changed. Eventually, a replacement team mate for Mr. Tee gets stuck trying to undo the all the recent damage on the application server host, and there is a reason they don't allow me to access that particular server with admin rights. The less I work on a Windows sever, generally, the healthier it stays. But there are still lots of servers where I could achieve similar damage results.

Problems don't just show up all by themselves. Maybe a server crashes, a full swap partition is one possible cause for an operating system lockup. Or perhaps a misplaced foot trips and yanks out a power cord. Or a programmer decides a change is needed, and does some kind of data update. Or a usage tipping point, we didn't buy enough CPU to handle 400 concurrent client sessions, or didn't buy enough memory, or an unknown software bug causes a program to hang onto a limited resource well after its no longer needed, and it just plain demands more. 

Cause and effect. Its not effect and cause, like saying the temperature increase in the morning causes the sun to appear above the horizon. 

So, to properly troubleshoot, what do you DO? The immediate first answer, DO NOTHING. That's right, NOTHING is the correct answer. Of all the tools available for diagnosing troubles, signal meters, packet sniffers, blinky lights, blinky lights that don't seem to be blinking right (yes ... more on that one later ...) the most important item in the troubleshooter's toolbox is ... the troubleshooter brain.

Diving right into the try this, try that, what happens when we do so and so ... will usually lead to more trouble. Take a step back, a deep breath, and think. Not do.

Might have a manager, or worse, director, or some other individual way higher up the food chain dancing around and pounding on your desk, if you still have one, demanding a fix yesterday. Better yet, last week. And you best be sure to attend the "how could we have done better" meeting set for tomorrow, and be prepared to fall upon your sword, or toss a team mate under the bus.

Learn proper troubleshooting technique. It requires clear logic, your basic Yes/No, or Go/No Go check, there is no Grey area. At least that is how it should be- trying to find a bottleneck or put a finger on which overused resource is causing "the system is slooooow" complaints is one of the more challenging scenarios.

Verify the problem. If you can't verify, you can't be sure if a "fix" is an actual fix. Find and correct the problem, fixing symptoms is not fixing the root cause of the trouble.

For a specific example, at community college a professor in a Java class, students running the lab programs, everything worked fine, for a while, and then ... not. Turns out a close handle call was absent from the code, so everyone that ran a servlet was ... surprise, holding onto a limited resource well after it was no longer needed. Reboot. Problem Solved.

Or not. The reboot frees up those connections, but the underlying problem, the cause, is still present. Maybe there's a JSP setting to increase file handles, or something similar, but that is a symptom fix, not a problem fix. Double the handles, maybe double the working life time. Something like that.

In a House episode, *maybe* it was Season 8, Dead & Buried, Hugh Laurie's character says, "Death is a consequence, not a symptom. If its not a symptom it's not relevant". Or something very close to that, and oh how true it is. Brilliant. Cause and effect.

So gather up the info. Write down the symptoms. Elaborate on the symptoms. List out where the trouble might be. As Mr. Litt often states, "Narrow it down". And don't neglect the logic part- does it make sense? If unit X really is the source of the trouble, is it used by another system? And are symptoms present in the other system(s) as well? And verify the problem. If you can't reliably and predictably reproduce the problem there is no way to ensure that a fix is indeed an actual problem fix.

Yes, a reboot is a quick solution. But it also clears the system memory, running processes, and other bits of information. Which just might hold important clues (symptoms) of the root cause of the problem.

And yes, can't forget about the Blinky Lights. I do have the privilege of counting that one of one thousand elite troubleshooters as a coworker, and a good friend. One night, a good while back, perhaps 02:00 (that is 2AM for everyone else) the phone rings. This is a true story.

  • Hello?
  • The janitor says the computer lights are blinking funny in the training room.
  • Ummm OK then. Well, since the janitor has obviously diagnosed a system problem, then he is certainly welcome to fix it.
  • zzzzzzz .....
I would have soooo wanted my two minutes back. Plus the fifteen or twenty minutes it takes to get back to dream state sleep. Also have to share the trouble ticket we got one day, "Line printer. Printing one line at a time." Hmmmm.

Sounds like its functioning as designed.

Also can't count the number of times we get an email, "I'm getting an error. Do you see anything going on in the system?" Really? You have an error. And my attention.

But would the additional ten seconds needed to paste the error text, or twenty seconds to grab a screen shot of the error dialog box (and save it in high colour bit map format what does a jpeg mean anyway, can we also test the mail server under a heavier work load) ... is that expecting too much? I can help you, but you have to help me to help you too. Something like that.

Buzzing all over the farm looking for a needle in a haystack is not a productive use of time. In fact, the farm might not even be in the right county. Or village. Or wrong haystack, that might be a challenge too.

But first ...

2013-07-06

virtual box

Virtual Box
Ah, another dependency picture. Graph.

But first,what's that mean?

Take a glance at the code, note the lines adding  nodes to the graph, placing a few attributes on the nodes.

URLs, like the  one on "Virtual Box", takes the visitor to the Downloads web page for the Virtual Box software.

Similarly, the "boot .iso" URL leads to the Fedora Project download page where one may grab a (roughly) CD sized .iso image to use for booting a desktop to install Fedora.

Well, not exactly. The image is just an image, but the php code should render, for instance, with a tool tip on the "dkms" node showing some of the packages needed to get all this working. Or, for that particular node, a mouse over should reveal some of the pieces to get the Virtual Box guest additions working in the guest system.

And the "Download" tab at fedoraproject.org presents the default Fedora install, with the Gnome desktop. Which is fine, but if one uses a Windows desktop, a lot, as I must do, the K desktop, or KDE, will be somewhat more familiar territory. Gnome is alright, but my preference is KDE for a few reasons, will go into those soon. But first ... the code ...


<?php

require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();
$gv->addEdge(array('virtual box' => 'startup, install'));
$gv->addEdge(array('boot .iso' => 'startup, install'));
$gv->addEdge(array('boot .iso' => 'burn CD'));
$gv->addEdge(array('burn CD' => 'startup, install'));
$gv->addEdge(array('startup, install' => 'update'));
$gv->addEdge(array('update' => 'dkms' ));
$gv->addEdge(array('dkms' => 'vbox GA' ));
$gv->addEdge(array('startup, install' => 'httpd' ));
$gv->addEdge(array('httpd' => 'virtbox.php'));
$gv->addEdge(array( 'virtbox.php' =>'pretty picture' ));
$gv->addNode('virtbox.php',
        array( 'URL'      => 'virtbox.php.html' ));
$gv->addNode('virtual box',
        array( 'URL'      => 'http://virtualbox.org/wiki/Downloads' ));
$gv->addNode('boot .iso',
        array( 'URL'      => 'http://fedoraproject.org/en/get-fedora-options' ));
$gv->addNode('vbox GA',
        array( 'URL'      => 'https://forums.virtualbox.org/viewtopic.php?f=29&t=15679' ));
$gv->addNode('httpd',
        array( 'label'    => 'httpd php graphviz' ));
$gv->addNode('dkms',
        array( 'tooltip'    => 'gcc devel dkms' ));

// draw it
$gv->image();

// *or* dump the gv object. cant do both, rats.
//print '<h4>$gv object</h4><p style="white-space:pre;">';
//print_r ( $gv );
//print "</p>\n";

?>


Note the comments, either let the .php page render the image, or one may turn on the commented code lines to see a dump of the $gv object, with an inline css style attribute so that the text for the object is a bit more legible.

As mentioned in the comment, can't do both the image and other stuff. Oh well, there's always a trade off. Maybe will figure out a way to get the graphviz image into a .php page along with other content, but there is always other important things to see, do, and learn. But first ... 

One could take the boot image .iso file, fire up a CD/DVD burn program and create a boot CD or DVD, go into the BIOS settings and put the optical drive above the hard drive in the boot order list. A totally optional step.

But in the amount of time it takes to burn a DVD, one could just about have Fedora, or Ubuntu, or Mint, or SUSE, or any distribution of linux installed, booted, and a running a new desktop. Perhaps it was Steven Wright who said "Any place is walking distance, if you have the time." Way, way back in 1984 or sometime around then. Maybe we'll go look that up for a proper credit. Soon. But first ...

Skip the waste of making another coaster, and the time. Avoiding a CD or DVD burn step completely by setting up a virtual machine in Virtual Box, point the drive to the  boot image file, and in a moment or three the install is underway.

No hassles with trying to set up a dual boot scheme on your desktop, no mucking about with making a dual boot system work, and keeping it healthy. Updates to your desktop OS may very well break a dual boot setup.

The Fedora Live boot file is easier. Fewer choices, less complicated. Following the KISS principle (Keep It Simple, Silly!) is one way to get a linux host up and running, quickly, without too much fuss. A full DVD boot .iso presents many more install options, perhaps selecting a web server if that is the desired direction one wants to go, and/or a workstation with a few (or several) developer platforms.

All at just the right price. Your time is the price, be careful how its spent. Its one of the things that does not have a "do over" option. Time is a precious resource, and once its used, its gone, there are no take backs.

Now for the downside. The Live boot file is the quick path, and choosing KDE also has drawbacks. KDE does include a web browser, Konqueror, while Gnome has Firefox "out of the box". Overall, firefox is the better browser, but KDE includes a few GUI admin tools, like a runlevel editor, an item not easily added in Gnome.

The Service Management program


For a nice tutorial showing a Virtual Box install see the SysAdmGirl Fedora 17 video, at under ten minutes, it will be time well spent.

SysAdmGirl shows Fedora 17, while 18, and (really soon now) Fedora 19 will be the primary offering at the fedoraproject download page. Oh well, there is usually a downside to everything. Fedora 18 does fit into an 8GB disk, barely, although going for a 10GB partition won't hurt. Its always good to have a bit of spare disk space in the back pocket for any system admin.

For the system memory, a one GB virtual machine is plenty of room for linux. If memory is tight on the host machine, smaller is OK but when it comes to memory, more is generally better. Especially when using a 64 bit operating system.

There are reasons for going the x64 route, but saving memory is not one of them. If the hardware does not support x64, oh well, x86 works fine. Giving the virtual guest host a full 1GB of memory is not required, and do not give it that much unless at least 4GB of RAM is available on the host machine.

One thing I do like to do on a virtual machine setup for linux, shave a bit of space from the main partition and give the space over to the swap partition, bring it up to a full 2GB. That is 2GiB, as in 2048MiB. And one could spend an hour, even more, setting up additional partitions and mount points for guest OS. But first ... more on that later.

And do not expect a particular Fedora flavour to have a particularly long life span, a new version comes out every few months, a downside of choosing Fedora. But when creating a virtual machine, for Linux, do take a moment and glance at the System properties.

One thing to point out, on the Motherboard tab note the section "Extended Features", there is a check box "Hardware clock in UTC Time". Be sure to leave that checked, its quite important. Most any unix server will have its clock on Universal Coordinated Time, a critical point with operating systems, and one of the (many) reasons unix can be a better OS than ... the competition.

Be sure to stay tuned, more on that, and lots of other things too. But first ...

2013-07-05

php graphviz

But First ...
There are always lots of things on the to-do list.

Like learn a new language ... maybe even a spoken one, not just a slightly different way to talk to the machine, in pretty much the same old (or new(ish)) way.

Or try out something new. But first ... there's always a catch.

Its time to paint the garage floor. But first, the car has to be moved. Oh, the couch is in the way as well, will have to take care of that first. But the vinyl collection has to go somewhere, the couch moves much more easily (well, that's relative, can "easy" be mentioned in the same sentence with "moving" ... ) without two hundred pounds of not yet recycled plastic ... and the floor has to be really clean so the epoxy paint can stick, for a period of at least a fortnight ...

The But First dependency diagram, or graph, was drawn with just a few lines of php code. Really. And a couple of php packages too, but first ...

 
<?php

require_once 'Image/GraphViz.php';
$gv = new Image_GraphViz();
$gv->addEdge(array('Paint garage floor' => 'but first ...'));
$gv->addEdge(array('move car' => 'sweep floor'));
$gv->addEdge(array('store LPs' => 'move couch'));
$gv->addEdge(array('move couch' => 'sweep floor'));
$gv->addEdge(array('sweep floor' => 'mop floor'));
$gv->addEdge(array('mop floor' =>'paint floor'));
$gv->image();

?>


Got the first ink-ling for that diagram in an O'Reilly book, one that has been sitting on the shelf for ... a really long time, Mastering Algorithms with Perl. Its probably out in at least a second, if not third, edition. See Chapter 8, Graphs. Maybe its time to go see if those later editions do exist, or not, but first ...

The graphviz package has lots of other stuff. With an addNode(... call attributes can be set, i.e. 'URL' => '...' turns the node into a clickable link. Different shapes to represent the node, the font, font size, fill color, quite a few more items are in there. See graphviz shape docs for the details.

With php, just the graphviz-php package is not quite enough, there is a php-pear-Image-GraphViz "Interface to AT&Ts GraphViz Tools" package which includes the Image/GraphViz.php file. And not to mention setting up httpd for php, but will leave that one for another day.