Sunday, July 21, 2024

Use Jasper Reports to Create Business Reports and Queries

If you're an IBM I or Java platform developer who was using DB2 Web Query or just looking for a nice report and form creation tool to create reports for your IBM i, you should consider learning Jasper Reports.  Check out the IBMi Jasper - project for using Jasper Reports from your IBM i system. 

Please don't hesitate to contact us regarding assistance with learning and creating reports and forms using Jasper Reports. We can also arrange training sessions on report design if you're interested in mastering Jasper Reports. Reach out to for more information.


Thursday, July 18, 2024

Upgrade Windows 11 21H2 to 23H2

 If you are a Windows 11 user and started with it early on you may not know that the initial version of Windows 11 - 21H2 is almost out of support. 

When you want to upgrade to latest Windows 11 build, you're faced with the choice to upgrade to Windows 11 23H2 or newer by upgrading or reinstalling Windows 11.

Check the following video link for steps on how to download the latest Windows 11 23H2 ISO and upgrade your Windows 11 verion in place, even if your hardware is not supported. 

How to Upgrade to Windows 11 23H2 from 21H2 or 22H2 on Unsupported Hardware

Essentially the steps are as follows
The video basically has you edit this file with notepad:

Select All text, delete contents and save file. It should be 0 bytes now. 

The hardware check will get skipped next time you run install.

**NOTE: Make sure not to allow automatic downloads. Change to "Not right now".
Downloads updates AFTER the install or upgrade and it should work fine.

Sunday, June 23, 2024

Backup and Restore PostgreSQL Databases from Command Line

 If you are using PostgreSQL on Windows, Linux, MacOS or IBM i, it's not super obvious how to back up your database on a regular basis. 

The following how-to article I created on GitHub will help you to back up and restore your PostgreSQL databases if PostgreSQL is a part of your database environment. 

Click the following link to view the article. Enjoy and let me know if you have any PostgreSQL questions.

Backup and Restore PostgreSQL Databases from Command Line

Wednesday, June 19, 2024

Running JasperReports from IBM i

For any of you looking to do reporting from IBM i. I created a wrapper around Pete Helgrens RPG Report Generator Java code that can execute Jasper Reports from IBM i. 

I have done work with Jasper Reports since 2007. JasperReports has a bit of a learning curve but well worth it if you learn to build reports and documents with it. 

This wrapper is IBM i specific, but Jasper can be used anywhere to generate reports. Have fun.

Tuesday, May 21, 2024

Configure NGINX with specific user without user needing *ALLOBJ Authority

User was seeing the following error in their NGINX log file when trying to start or restart the NGINX server via:

Errors showed up in the log file in file: /QOpenSys/var/log/nginx/error.log

Accessing error.log from 5250 command line:
WRKLNK '/QOpenSys/var/log/nginx/error.log'

2024/05/21 13:00:46 [notice] 3215038#1: signal process started                 
2024/05/21 13:00:46 [alert] 3214934#1: recvmsg() failed (13: Permission denied)
2024/05/21 13:00:46 [alert] 3215039#1: recvmsg() failed (13: Permission denied)
2024/05/21 13:00:46 [alert] 3215041#1: recvmsg() failed (13: Permission denied)
2024/05/21 13:00:46 [alert] 3215042#1: recvmsg() failed (13: Permission denied)

This seems to be related to setting up an appropriate user profile to run the NGINX server and threads under.

By default the main thread user will be the user who started the NGINX server. And worker thread jobs run under user profile: QTMHHTTP by default.

What we want is for the main thread and worker threads to run under the same user profile. See the following GitHub article for a resolution:

Saturday, February 03, 2024

Update IBM i System Time with Python

I just completed a nice example of integrating IBM i system commands with Python when you have a need to update your system time. The IBM i has a built in time sync, but in my case some of the firewalling services I used get in the way so I needed a way to update on demand via an NTP time server. And Python didn't disappoint. 

Check out this link for the Python code example:

Friday, November 24, 2023

Resolving ODBC and SSL Issues with IBM i

 If you are an IBM i / AS400 developer and use ODBC, you've possibly had a need to connect to the IBM i using ODBC with SSL. 

Well this last week I tried using SSL for the first time on Linux, Windows and MacOS.  Each of them had their unique connectivity challenges. 

Check out the following links for info on how to possibly resolve your SSL issues: 

How to set up IBM i Access ODBC Driver for MacOS to use an SSL Certificate

How to set up IBM i Access ODBC Driver for Windows to use an SSL Certificate

How to set up IBM i Access ODBC Driver for Linux to use an SSL Certificate

Saturday, January 22, 2022

Use SQL to Query any IBM i File to an Output File

If you're an AS/400 - IBM i developer you no doubt remember the days of OPNQRYF, GSORT or writing temporary files with a custom RPG program to create a summary file or some other temporary work table. 

I think you'll appreciate the simplicity of this CL command utility for taking any SQL based query and creating an output file from the results. 

The CL command is called QSHQRYTMP and it's part of the QShell on i utilities  - QSHONI ( I created for interacting with QShell and PASE apps from RPG, COBOL and CL. As a helper command the command does not require QShell or PASE, but it seemed like QSHONI was a good place for the command to live.

Here's a sample of how easy it is to create a new file from an SQL query with QSHQRYTMP:

QSHONI/QSHQRYTMP SQL('select * from qiws.qcustcdt where LSTNAM  = ''Henning''') OUTFILE(QTEMP/SQLTMP0001) EMPTYERROR(*YES) PROMPT(*NO)                        

Temp file QTEMP/SQLTMP0001 was created from query. 0000000001 records.

Notice that you need the extra single quotes on character values because CL commands require you to double things up when passing single quote delimited values like a character based query string.

There are also 3 data areas that get automatically created in the jobs current QTEMP library. These data areas return the temporary table name and record count info in case your process needs to know these values. 

QTEMP/SQLQRYCNT - Query Result Record Count
QTEMP/SQLQRYFIL - Query Result File Name
QTEMP/SQLQRYLIB - Query Result Lib Name

QSHQRYTMP consists of a single CL command and CL command processing program that takes advantage of the power of the RUNSQL CL command to do most of it's work. 

I hope you enjoy using this command for creating SQL result files on-the-fly.  I have found it very useful.

Saturday, December 12, 2020

Install and configure Cron Scheduling on IBM i

IBM just released a cron scheduler for IBM i. They released cron, via the 'cronie' RPM package with Anacron, too. If you're not familiar with cron, it's a scheduling mechanism for open source platforms such as Linux and now it's available for IBM i.

This package can be a good way to schedule your open source jobs or even your IBM i CL commands and jobs that need to run on a regular basis.

Check out my quick start tutorial on using cron with IBM i. Using Cron Scheduling with IBM i

Getting Started with MariaDB on IBM i

IBM recently released a current version of the MariaDB database to run natively in PASE on IBM i. The software installs in minutes on IBM i via the Yum-based Open Source Package Management process which is part of Access Client Solutions (ACS). This means that MySQL is once again being fully embraced as a valid IBM i database for storing data for PHP applications such as WordPress. No need to look elsewhere to host your PHP applications and MariaDB data.

If you're interested in using MariaDB on IBM i, check out the following tutorial I created on Github that can be used to quickly install and get started with MariaDB on IBM i. Install MariaDB on IBM i

Thursday, November 26, 2020

Document Your Business and Technical Processes with MkDocs

If you thought documenting your business processes and application code was too hard or tools were too expensive, you should check out the FREE Python based MKDocs offering.

What a great way to start documenting all your company's common business knowledge in one place.

MkDocs is an open source Python static site generator for creating documentation using simple Markdown based text documents. Simply edit your MarkDown content files and they are available to anyone in the company who has access to the site.

No database required.

This is a quick way to establish one or more departmental knowledgebases with shareable business and system process documentation.

An MkDocs project directory structure could also be turned into a git project if desired so the entire site would be versioned in a git repository.

I created a quick getting started guide for IBM i, but MkDocs works on any platform.