fhg
Volume 6, Number 44 -- December 13, 2006

Stuff I Didn't Publish This Year

Published: December 13, 2006

Hey, Ted:

This is regarding your recent posting titled "Quick Query over a Database File" that was published on August 23, 2006. This is truly a useless utility. There already is a RUNQRY command. Why would you post this as something that someone might be interested in? I use to wait anxiously for the next Four Hundred Guru e-mail and get really good things out of it, but this and some of the other ones posted are really not Guru material in my opinion. Next time maybe you can show them something like this: RUNQRY and press F4.

--Greg


Greg is absolutely right. That tip and some of the others that I have published are not of Guru caliber. So why would I publish such things? I'll answer that question in a minute, but first I'd like to share with you some things I didn't publish.


1. Swapping Values

Did you know that it is possible to swap the values of two similarly-defined variables without a temporary holding variable? This code fragment illustrates that technique.

D Var1            s              8a 
D Var2            s              8a 
                                  
 /free                              
     Var1 = 'ARE GOOD';             
     Var2 = 'MY GOATS';             
                                    
     Var1 = %bitxor(Var1: Var2);    
     Var2 = %bitxor(Var1: Var2);    
     Var1 = %bitxor(Var1: Var2);    

Believe it or not, after this code runs, Var1 has the value "MY GOATS" and Var2 has the value "ARE GOOD". Do you know why it works? Here's a hint: Given three strings--two original strings and their exclusive or--you can derive any of the three strings from the other two.

I think we could consider this variable-swapping tip an advanced technique, since beginning business programmers normally don't learn about bit-twiddling. In fact, I doubt many intermediate or advanced RPG programmers know this technique. By that criterion, I propose that this technique qualifies for Guru status.

But I never published it because I can't find any practical value in this tip. If you saw this code fragment, would it be obvious to you that the two variables were exchanging values? If there were no explanatory comment, could you figure out what was going on? I couldn't.

I believe it is better to avoid such "clever" code and use a temporary swapping variable. I think that using a swapping variable would be easier to understand, and to be on the safe side, I'd comment it anyway.

D Var1            s              8a 
D Var2            s              8a 
D Temp            s              8a
                                  
 /free                              
     Var1 = 'ARE GOOD';             
     Var2 = 'MY GOATS';             

     // swap the values of Var1 and Var2 
     Temp = Var1;    
     Var1 = Var2;    
     Var2 = Temp;    

2. Another Way to Derive the Exclusive Or

This bit-twiddling reminds me of another piece of abstruse information. Did you know that you can derive an exclusive or by using other bit operations? It's true. Here's the formula.

A XOR B = NOT (A AND B) AND (A OR B)

Therefore the following assignment statements are equivalent to one another:

C = %bitxor(A:B);                               

C = %bitand(%bitnot(%bitand(A:B)): %bitor(A:B));

I suppose this is an example of the kinds of facts all gurus should know, and that all aspiring gurus would want to know. It might come in handy if I were working in a language that didn't support an exclusive or operation. But since RPG, OPNQRYF, and SQL have exclusive or functions, where's the need for this technique?

3. Ignoring Extra Blanks in SQL Commands

Did you happen to know that SQL doesn't mind extra spaces around qualification delimiters? In the following example, the period is used to qualify column field names in the SELECT clause, and the slash qualifies the file name in the FROM clause.

select c.order, c.Warehouse, c.Line,
       c.comment, c.destination                 
  from mylib/SomeFile as c

Here's the same code with extra blanks.

select c.order, c .Warehouse, c. Line,
       c  . comment, c   .    destination 
  from mylib   /             SomeFile as c

I've never run this as a tip, because I couldn't figure out what difference it made. Is this knowledge useful?

4. Roman Numerals

How about a routine to build Roman numerals? Do you suppose such routines merit Guru status? I wrote the logic for this routine in pseudocode on a scrap of paper one day while watching one of my sons receive swimming instructions for Boy Scouts. The only practical value I've found for this routine is practical jokes. Email someone a report with all numerals--even the run date and page number--expressed in Roman format, then wait for your phone to ring. "Are you sure you wanted Arabic numerals?" you ask the caller. "I could have sworn you said you wanted the report in Roman numerals."

I also developed the algorithm to convert Roman numerals to Arabic while waiting to meet my dad in a store one day. The resulting subprocedure is in the code referred to by the last link. Am I getting anywhere near Guru level yet?


5. Have Computer, Will Sudoku

Does it take a guru to write a program that solves Sudoku puzzles? I wrote such a program when I got stuck while trying to solve a Sudoku puzzle. I wondered if perhaps the puzzle had more than one solution, so I decided to write a program to find out. I also wondered if RPG were able to handle the challenge, so I decided to write the program in RPG.

My program has some academic interest in that it has two subprocedures--DoDigit and Try--that call one another. That is, DoDigit calls Try, which calls DoDigit, which calls Try, which calls DoDigit, which calls Try, and so on, down to 163 levels of call stack. It prints all possible solutions to a puzzle. I never published the program, because I doubt that employers are clamoring for Sudoku-solving computer programs.


6. Linked Lists

During an odd moment I pondered the question, "Is it possible to implement linked lists in RPG?" After all, I had found linked lists to be useful in Pascal programs back in the olden days when I was younger and pursuing my computer science degree. Here is an exploratory program I wrote to pursue that idea. I concluded that it is possible to write RPG code to implement linked lists, but it is not practical. I leave it to the interested reader to develop the idea farther.


Answering Greg's Question

Enough of that esoteric stuff. Why did I publish the QF command? For one reason: Based on e-mail I had received from readers of this newsletter, I thought some of you would find it useful. I get e-mail from people who are out there on the leading edge, but the overwhelming bulk of it comes from people who are trying to solve everyday problems. Among the questions I was asked recently are "What is a prototype?" and "How do I get the code you published from my PC to the iSeries?"

I answer some of these requests by providing a link to a site that answers the question at hand. I answer others with a short explanation and maybe some sample code. For every question I answer, there are many that I never answer. It's not that I'm important, but that I'm busy trying to make a living and raise a family. I just don't have much time.

During 2007, I hope to address the needs of iSeries professionals of all skill levels. I will do my best to provide a good mix of practical tips. I invite anyone whose finds little or nothing of value in these pages to send me some tips that they deem of value. If we think they are of value, we'll publish them.



Sponsored By
PRODATA COMPUTER SERVICES

ServerProven Tool Virtually FREE!

                                           DBU...database access made simple
                                           DBU Audit...log changes & views made via DBU
                                           DBUnifier...unify database apps & dump DFUs!
                                           RSP...RPG Server Pages for Web enablement
                                           STE...Stored Procedure Test Environment
                                           SQL/Pro...query & reporting tools

All NEW ServerProven products that are virtually FREE with IBM's rebate offering!

Sign up to Win a Video iPod
800.228.6318
www.DoDBU.com



Senior Technical Editor: Ted Holt
Technical Editors: Howard Arner, Joe Hertvik, Shannon O'Donnell, Kevin Vandever
Contributing Technical Editors: Joel Cochran, Wayne O. Evans, Raymond Everhart,
Bruce Guetzkow, Brian Kelly, Marc Logemann, David Morris
Publisher and Advertising Director: Jenny Thomas
Advertising Sales Representative: Kim Reed
Contact the Editors: To contact anyone on the IT Jungle Team
Go to our contacts page and send us a message.

Sponsored Links

CYBRA:  No source code changes required with CYBRA's MarkMagic Auto-ID software
SafeData:  Specializing in providing data backup and disaster recovery solutions
COMMON:  Join us at the Spring 2007 conference, April 29 – May 3, in Anaheim, California

 


 
Subscription Information:
You can unsubscribe, change your email address, or sign up for any of IT Jungle's free e-newsletters through our Web site at http://www.itjungle.com/sub/subscribe.html.

Copyright © 1996-2008 Guild Companies, Inc. All Rights Reserved.
Guild Companies, Inc., 50 Park Terrace East, Suite 8F, New York, NY 10034

Privacy Statement