Gregory Simmons
Gregory Simmons is a software engineer with PC Richard & Son. He started on the IBM i platform in 1994, graduated with a degree in Computer Information Systems in 1997, and has been working on the OS/400 and IBM i platform ever since. He has been a registered instructor with the IBM Academic Initiative since 2007, holds a COMMON Application Developer certification, and was recently acknowledged with a speaker award at POWERUp23 as well as a Level 1 Contributor badge with IBM. When he’s not trying to figure out how to speed up legacy programs, he enjoys hiking, backpacking, SCUBA diving, hunting, and fishing.
-
Guru: Environment Variables – Global Variables Wearing Hiking Boots
November 2, 2026 Gregory Simmons
Sometimes a program knows one tiny piece of information that another program, several calls farther down the stack, needs to know.
The obvious solution is to add another parameter. But sometimes that requires that new parameter added to one or more programs in the call stack. Before long, we’re passing a mushroom basket through half the forest even though most of the programs along the way have no interest in what’s inside it.
There is another option that has been available on IBM i for a very long time: environment variables. IBM i supports both job-level and system-level environment variables. …
Read more -
Guru: When RNF0722 Won’t Let Your Legendary RPG Program Compile
October 12, 2026 Gregory Simmons
Some RPG programs have been around for decades. They started small enough. Then another calculation was added here, another subroutine there, a /COPY member or two, and years of enhancements, fixes, and changing business requirements.
Eventually, some of them became colossal. And let’s face it, we all have “legacy” or, as some would argue, “legendary” programs that are older than a lot of our new hires.
We all know these programs. They’re the ones everybody agrees should be broken apart someday, but they’re also important production programs that still need to be maintained today. And sometimes “today” presents a very …
Read more -
Guru: Two More Small But Handy RPG Enhancements: LIKE(*EXT) And %LOOKUPNE
September 28, 2026 Gregory Simmons
Not every trip into the field calls for hauling the whole pack, and not every search calls for scanning everything by hand. Two of the smaller enhancements in this batch of July PTFs for IBM i 7.5 and 7.6 are exactly that kind of quiet convenience: tools that let you reach for just the piece you actually need instead of doing more work than the job requires.
DISCLAIMER: The mushroom names and file/field names used in the examples below are purely to give the sample programs some context and make them more interesting. Before foraging for or consuming any wild …
Read more -
Guru: Putting Failure Handling In Its Place
August 24, 2026 Gregory Simmons
One of the things I enjoy most about procedure-driven RPG is that it encourages us to think about responsibility. Every procedure should have a clear purpose. It should perform one task well and leave unrelated concerns to other parts of the application.
That sounds straightforward enough, yet one responsibility often finds its way into nearly every procedure we write: failure handling.
If you have worked with RPG for any length of time, you have probably encountered applications where nearly every procedure begins with a MONITOR operation. The procedure performs its work, catches any exception that occurs, logs an error, returns …
Read more -
Guru: Beyond Three-Part Naming – Running SQL Across Remote IBM i Systems
August 3, 2026 Gregory Simmons
In my article Guru: Finding Data in The Forest – Exploring Three-Part Naming In SQL, I helped you to get started with three-part naming. If you have a network of IBM i systems and haven’t availed yourself of this capability, you may be surprised at just how powerful it can be. Instead of relying on data transfers, replication, or intermediate files, SQL can reach directly into remote systems as though the data were local.
That works well when you know exactly which remote system contains the data you need. But what happens when your network grows from a handful …
Read more -
Guru: Finding Data In The Forest – Exploring Three-Part Naming In SQL
June 22, 2026 Gregory Simmons
Anyone who has spent time foraging for mushrooms knows that location matters. A chanterelle found in the Pacific Northwest is not the same as one discovered in the hardwood forests of the Midwest. Experienced foragers do not simply note what they found. They record exactly where they found it: the region, the forest, and the specific location. Context matters.
The same is true in SQL. Most IBM i developers are comfortable with two-part naming. A reference like MUSHLIB.FORAGE_LOG identifies both the schema and the object. It tells SQL where to look within a single system, much like noting the forest …
Read more -
Guru: SQL Sequences In RPG Let Db2 Handle The Counting
June 1, 2026 Gregory Simmons
There is something deeply satisfying about letting the database do the counting for you. In a world where we have spent decades hand-rolling identifiers, guarding them with locks, and hoping no job collides with another, SQL sequences feel like discovering a patch of mushrooms that quietly regenerate overnight. You stop worrying about scarcity and start focusing on what matters.
In a procedure driven RPG system, this is exactly the kind of responsibility we want to isolate. Generating a new identifier is not business logic. It is not validation. It is not formatting. It is a single, well-defined action that deserves …
Read more -
Guru: Cohesion First – What A Procedure Should Be Responsible For
April 6, 2026 Gregory Simmons
One of the easiest mistakes to make in procedure-driven RPG is assuming that small procedures are automatically well-designed procedures. They are not. Size and cohesion are related, but they are not the same thing. A cohesive procedure has a single, clear responsibility. It exists to answer one business question or perform one business action. When a procedure tries to do more than that, it stops being a reusable building block and starts becoming a liability.
In procedural RPG, nothing enforces this discipline. There is no compiler warning when a procedure quietly takes on a second responsibility. There is no language …
Read more -
Guru: IBM i Job Log Detective Brings Structure To Job Log Analysis In VS Code
March 9, 2026 Gregory Simmons
Remain Software has released a new Visual Studio Code extension called IBM i Job Log Detective, and it targets a pain point every IBM i developer understands: reading job logs efficiently.
In addition to its marketplace availability, IBM i Job Log Detective is open source under the MIT license and can be found on GitHub at: https://github.com/RemainSoftware/jld
Read more
There has never been anything wrong with IBM i job logs themselves. They are exhaustive, consistent, and remarkably detailed. When something fails, the job log contains the truth. The issue has always been consumption. Large QPJOBLOG files can run thousands of lines (or … -
Guru: Managing The Lifecycle Of Your Service Programs – Updates Without Chaos
February 23, 2026 Gregory Simmons
You’ve written your service programs, organized your modules, picked your activation groups, and maybe even set up a tidy binding directory. Everything seems perfect – until someone needs to update a procedure that half the shop’s programs depend on. Suddenly, that tidy structure can feel like a trap. Welcome to the reality of service program lifecycle management.
The key principle here is simple: change with care. Any update to a service program can ripple across every program bound to it. Without a strategy, you’ll find yourself fielding calls about broken reports, failed jobs, or, worst of all, subtle logic errors …
Read more
