Layer Intromission

I'm using JTOpen JDBC driver to access AS/400 via DB2.
It works pretty well, but unfortunately it tries to be more than it should be, a JDBC driver that allows a Java application to access a DB2 database.

It interacts with the AS/400 system in a way it should not. For instance, when it's time to change the password, the driver pops-up a notification window stating that it's time to change the password and asks the user if he wishes to do it now.
If this feature seems nice, let me tell you that it is totally wrong!
First, it is a JDBC driver, not an AS/400 system administration application.
Second, this kind of promiscuity among layers has disastrous results.

When one uses a JDBC driver one expects that it operates with the database and nothing else.
When JTOpen starts getting "smart" by interacting with the system, awkward things happen.
For instance, an entire critical system can fail because the driver hang on a "password will expire soon, do you wish to change it now" message and waits for user action instead of doing what it is suppose to do: database work.
Please not that this is not a "password expired" message but a "you must change your password within x days, do you wish to do it now" question.

Here is a real example of such problem: I executed a command line batch which was hold by the JTOpen driver "would you like to change your password now" question.

JTOpen "Would you like to change your password now" User Dialog Box Question.

I got lucky because the command was issued by me, but what if it was issued by a scheduler on a Saturday morning? It would only be noticed Monday morning and a critical job would not have been performed because the JDBC driver messed up.

./M6

iSeries AS/400 Cheat Sheet

I am using IBM iSeries AS/400 a lot these days. Since I am not a specialist on such system, I've gathered some simple commands to help me to understand what's going on with my jobs and act on them when necessary.

Here's a simple list of some commands:

Working Active Jobs
Description: shows working active jobs.
Command: wrkactjob

Working Submitted Jobs
Description: shows the list of the working submitted jobs
Command: wrksbmjob

Working Object Lock
Description: shows the locks on an object, like a file.
Command: wrkobjlck (library/object)

CPU Usage Statistics
Description: shows CPU usage statistics, usually filtered to show only resource usages above 2%.
Command: who

Working System Status
Description: shows system overview usagestatus.
Command: wrksyssts

Working Disks Statistics
Description: shows disk usage statistics.
Command: wrkdsksts

Display Message Descriptions
Description: shows detailed information about the messages in a message file.
Command: dspmsgd range(messageId) msgf(library/file)

Display File
Description: shows the contents of a file.
Command: df library/file

Work with Objects
Description: shows a list of names and attributes of specified objects in specified libraries.
Command: wrkobj file

./M6

Hide Warnings in R

I've made a presentation about FRBF, an algorithm that I've just implemented in R, and I've used a small trick: I've hidden the warnings.

This is useful for demos and presentations because this way people are not distracted by non-relevant information and they can focus on what is really important.

All that is required is to use options(warn=-1) in the beginning of the script.

./M6