If you business has a need for some new apps, check out the following site: https://awesome-selfhosted.net/
This site contains lists of various self-hosted and open-source apps for Backup, Blogging, Wikis, Automation, CRM and more.
This blog serves as a platform for sharing my insights into the software industry and other topics. With modernization expertise in desktop, web and mobile development, business process automation, rpa, document management, electronic forms, automated document distribution, system architecture and integration, I aim to provide valuable perspectives and knowledge. Reach out with your IBM i, Windows, Linux or MacOS integration questions.
Email: richard@mobigogo.net Web: https://www.mobigogo.net
If you business has a need for some new apps, check out the following site: https://awesome-selfhosted.net/
This site contains lists of various self-hosted and open-source apps for Backup, Blogging, Wikis, Automation, CRM and more.
Compiling SQLRPGLE Programs that Contain Long SQL Lines
I had a need to create some SQL in the IBM ACS Run SQL Scripts and then wanted to transplant that code into an SQLRPGLE member for processing.
When I compiled the SQLRPGLE program the SQL preprocessor was giving me odd pre-processor errors.
As it turns out by default your SQL line width is most likely limited to 80-100 characters.
Resolution
The easiest fix is to make sure your SQL statement lines are less than 80 characters.
-or-
The other option is to tell the compiler to allow longer lines when specifying *LVL1 or *LVL2 for the RPGPPOPT parameter.
Here's an example using the PPMINOUTLN parameter in the CRTSQLRPGI command when creating an SQL RPG program:
CRTSQLRPGI OBJ(&L/&N) SRCFILE(&L/&F) COMMIT(*NONE) RPGPPOPT(*LVL1) DBGVIEW(*SOURCE) COMPILEOPT('PPMINOUTLN(500)')
Apparently you can skip the special compile option parm COMPILEOPT if you add a special environment variable into your current job like this:
ADDENVVAR ENVVAR(QIBM_RPG_PPSRCFILE_LENGTH) VALUE(500)
You will still need to use the RPGPPOPT parameter set to *LVL1 or *LVL2.
There are times you might want to check your public IP address from your IBM i system. Fortunately you can use the curl command and the QSHCURL command from a CL or RPG program to determine your current IP address if you're using the FREE QShell on i (QSHONI) software (https://www.github.com/richardschoen/qshoni) I created to integrate your PASE program calls to a traditional IBM i program.
Making the CL API call to curl is as simple as this:
QSHONI/QSHCURL CMDLINE('https://api.ipify.org') DSPSTDOUT(*YES)
And the results automatically show up in outfield QTEMP/STDOUTQSH for you to utilize from your CL or RPG programming.
Example IP address response written from STDOUT to the first record of the outfile: 32.1.1.22
Check out QShell on i to be able to run curl commands and much more.
If you find some interesting use cases create an issue on the GitHub site, post a comment or email me and I can publish as an example.
As PDM and SEU continue to work towards being deprecated, the goal of the Work with IBM i project is to provide a FREE, Windows-based alternative for PDM developers who are beginning the journey of moving their development workflow off the green screen and onto the desktop.
While VS Code and RDi are both excellent development environments, having options matters—especially options that preserve editor freedom of choice and allow continued use of existing PDM user options.
Flexible Editor Support
With Work with IBM i, developers can use:
The software supports online and offline editing using virtually any Windows-based editor that accepts file names via the command line. Since Notepad++ is widely used in the IBM i community, this alone is a compelling reason for many developers to adopt Work with IBM i.
Another key advantage is that SSH is not required. Many shops prefer not to open SSH ports, and Work with IBM i works entirely through standard IBM i access ports.
Project Background
I originally started this project 4 years ago as a way to gain more practice with .NET Core WinForms, but it has proven to be far more useful than initially anticipated. The core application is completely FREE to use.
Purpose and Philosophy
The primary purpose of Work with IBM i is to provide a Windows-based replacement for PDM that looks and feels similar to PDM, allowing developers to work with IBM i source members without a 5250 green screen, while maintaining a familiar, PDM-like workflow.
The goal is simplicity:
Use the best editors available on the PC, keep existing processes where possible, and avoid forcing developers to learn an entirely new development model.
Git Integration with iForGit
Work with IBM i integrates with iForGit, the subscription-based Git source management solution for IBM i that I created.
Learn more:
The Work with IBM i client app provides direct access to iForGit CL commands, allowing you to commit changes to Git repositories directly from standard source physical files.
(An active iForGit annual subscription is required for versioning features.)
Editor Configuration Options
Although the application includes a built-in text editor, many developers prefer VS Code. Work with IBM i supports VS Code along with the Code for i syntax extensions.
You can configure separate editors and viewers if desired. Supported options include:
Using RDi requires downloading source locally and editing outside the application. Detailed instructions are available here:
https://github.com/richardschoen/workwithibmipdm/blob/main/using_rdi_for_editing.md
PDM User Options Support
PDM user options are supported, provided they do not rely on a 5250 interface.
The default PDM options file is:
QGPL/QAUOOPT
This can be changed in the settings file, allowing you to reuse your existing PDM user option commands directly within Work with IBM i.
Offline Editing and Visual Feedback
The client tracks whether a source member has already been downloaded for offline editing and provides visual indicators in the UI. You can:
This editing workflow enables productive development even when disconnected from the system.
Future Enhancements
As a future enhancement, .NET developers will be able to create custom alternatives to PDM user options using a C# plugin model.
Connectivity
❗ IBM i access ports used for communication:
No SSH access is required.
Getting Started
Getting started is simple:
You’ll be connected and ready to start using PDM—on Windows.
Have fun, and please leave feedback or report issues on the GitHub project page.
https://github.com/richardschoen/workwithibmipdm
If you’re anything like me, you’re always looking for efficient ways to move files and objects between systems. Over the holidays, I needed a fast, reliable way to transfer files between two IBM i systems and a Linux system using SSH. Since scp is already part of the IBM i open-source SSH tooling, it felt like the perfect foundation for a simple utility command. That’s what led me to create the QSHSCP command and share it with others who utilize my QShell on i app.
QSHONI/QSHSCP CMDPFXPARM('-v')
KEYFILE('/home/user1/.ssh/id_rsa.ppk')
USER(user1)
HOST(myhost.com)
PORT(22)
ACTION(*SEND)
REPLLOCAL(*NO)
LOCALFILE('/home/user1/mylib.savf')
REMOTEFILE('/home/user1/mylib.savf')
DEBUGCMD(*NO)
DSPSTDOUT(*NO)
PRTSTDOUT(*NO) For more details on the FREE QSHSCP command, visit: the QSHSCP command URL
To learn more about MobiConnect and connecting all your systems and applications, visit: https://www.mobigogo.net
Email: info@mobigogo.net or richard@mobigogo.net
I received an interesting Git error today: "The remote end hung up unexpectedly".
Sounds like an unwelcome phone caller.What's your favorite MacOS app or tool ?
I wanted to start keeping track of the various apps I use or have tried so I decided what better place than a GitHub page.As businesses evolve, the ability to connect legacy systems like IBM i with modern applications, trading partners, and cloud services is no longer optional—it’s essential. For IBM i shops looking to bridge that gap without a complete overhaul, Linux on Power Systems offers a smart, scalable path forward to enhance IBM i integration and connectivity.
Why Connectivity is Key
IBM i has long been a rock-solid platform for enterprise workloads. But in a today's digital world, you need more than stability—you need flexibility. That includes real-time data exchange, modern APIs, scripting support, and access to the open-source ecosystem.
Enter: Linux on Power
With Linux on Power alongside IBM i, you can develop, automate, and integrate without disrupting your core systems.
What You Gain
Ready to Connect IBM i to the Future?
Learn more and explore documentation at:
🔗 Linux on Power Overview – IBM
Feel free to reach out with questions.
PASE (Portable Application Solutions Environment) and QShell on IBM i feels a lot like working in a Linux or UNIX environment, and there's a good reason for that.
PASE is essentially a runtime environment on IBM i that allows AIX (IBM’s UNIX) binaries to run. Since AIX is UNIX-compliant, and Linux shares much of the same philosophy and command-line behavior, working in PASE can indeed feel like working on Linux.
Here are some similarities and practical takeaways:
Shell commands like ls, cd, pwd, grep, cat, grep, etc., are available in both environments.
File system navigation behaves similarly (though the underlying file systems are quite different — IFS on IBM i vs ext4, xfs, etc. on Linux).
Environment variables like $PATH, $HOME, and others are used in both.
Scripting with shells like sh, ksh, or even bash (if installed) can be practiced in both systems.
SSH access allows terminal-based work just like in a Linux shell.
Tools like vi, awk, sed, ps, kill,nano , and cron are either identical or very close in functionality.
QShell vs PASE:
QShell is a POSIX-like shell on IBM i, but it's not a full UNIX shell. It lacks some scripting features and behaves differently in areas like redirection and process handling.
PASE is closer to real UNIX/Linux, especially when running native AIX binaries.
File paths:
IBM i uses the IFS (Integrated File System) which is different from the hierarchical Linux file system. /home/user might work, but behind the scenes, you're still dealing with IBM i objects and structure.
Access to native IBM i resources:
Native IBM i commands (like WRKACTJOB, DSPLIB, etc.) aren't directly usable in PASE without special handling via the system command.
Linux gives you muscle memory for shell navigation, scripting, and using standard UNIX tools.
PASE gives you exposure to working in a hybrid environment, where UNIX concepts meet IBM i's robustness and control.
So yes — if you're an IBM i developer looking to sharpen your skills, getting comfortable with Linux can directly enhance your productivity in PASE and QShell, and vice-versa.
If you haven't implemented source version control on your IBM i system yet, but have a need to start easily capturing source member versions of your classic source from source physical files, we have you covered.
In iForGit V1.25 a new feature has been added to handle simple source member version control for a team that isn't quite ready for using Git. And once ready for Git, the simple source management commands can still be used to manage moving source between production and development libraries if the source master versions will continue to live on IBM i in source physical files.
Developers can:
Check out a source member copy to their development or test libraries to work on the source. The source member can also be removed from the production library while being worked on if desired. Archive snapshots are always taken before and after source member checkouts so that no source ever gets lost.
Check in a source member copy from their development or test libraries after completing work on the source. The checked in source member can be removed from the development library when checked in. Or a copy of the development source can be left in the development library once checked in for further work. Archive snapshots are always taken before and after source member check-ins so that no source ever gets lost.
Capture an instant point-in-time archive snapshot of ANY source member at any time for backup purposes. This is helpful when working on a source member and you don't want to have multiple named copies of the source member lying around. Just take a snapshot and get to work on the source member changes.
A database log is kept for all archive source versions so developers can easily identify an old source member by reviewing the log file.
Getting started with source management has never been easier with the new Simple Source Management Commands built-in to the iForGit software.
For more information to make your source management life easier, visit: https://www.iforgit.com and request more info. Or feel free to email: info@mobigogo.net
Solve Your IBM i Disk Use Issues with FREE Disk Utility
In some of my previous roles I often played an extra part as Disk Cop. This often meant scouring through thousands of libraries and directories to find large files and determining who owned them and why they were being kept online. If you understand the phenomena of the ever-growing disk usage you know why Cloud platforms have grown exponentially. It's because storage use never goes down. This post will introduce you to a FREE solution for handling your disk space woes.
Most likely you might have these disk space questions:
I need to check ALL the disk space on my IBM i?
I can't seem to get a handle on our IFS files and I wonder what's taking up space?
The domain of checking free disk space used to belong to commercial utilities or the GO DISKTASKS menu, which was limited to locating only libraries. Let me introduce you to the Ncurses Disk Utility (ncdu). Ncdu is part of the open-source packages available for IBM i. To install ncdu from the PASE or SSH command line simply type: yum install ncdu Or you can install ncdu from the Open-Source Package Management option in ACS.
After installation, simply change to the appropriate directory and type: ncdu or /QOpenSys/pkgs/bin/ncdu (if the open-source package binary directory is not in your file search path) from an SSH terminal command line. Ncdu must be run from an SSH terminal via putty or your favorite SSH terminal tool.
Listing Free Disk Space for a Single Library
After installation, go to an SSH terminal and log in to the command line and run the following command to check out the QGPL library and show the list of objects descending by size. Libraries exist as a directory inside of the /QSYS.LIB directory.
ncdu /QSYS.LIB/QGPL.LIB