Friday, July 26, 2024

What Rhymes with IBM i ? - FastAPI

Has your team ever wanted to quickly create a web API that can access data from your IBM i or integrate with your other internal or external business systems? Or possibly you need to be able to call IBM i programs and procedures from another platform. One of the fastest ways I have found to create Web APIs is by using the Python based FastAPI framework.

With FastAPI you can simply define routes and business logic for your APIs and start testing them very quickly. I use FastAPI a lot as a first stop for prototyping API calls that I may be using in other languages.

As a first introduction to FastAPI take a look at the Python FastAPI Mock Server GitHub project I created. You can set up the server and start utilizing any CSV or JSON file as a data source for API testing. 

Give it a spin and let me know what you think: https://github.com/richardschoen/fastapimockserver

You'll be up and running with FastAPI in a matter of minutes. Have fun.

And if your team needs affordable training, mentoring or integration services for creating and implementing web APIs for your IBM i and other business systems, reach out and let's talk about your API pain points. Your team and systems will be API-enabled in no time.

Web Site: https://www.mobigogo.net

Email: info@mobigogo.net

Wednesday, July 24, 2024

Mobilize and Modernize Your Paper Based Workflows

Picture your team working seamlessly, free from the constraints of paperwork and outdated green screen or desktop apps. By adding a mobile app and modernizing your IBM i, Windows, Linux or Mainframe platform processes, you can increase efficiency, lower costs and empower your workforce to focus on what truly matters. Getting work done and keeping customers, vendors, and employees happy.

Mobile apps can serve a variety of useful purposes such as: attracting new talent and improving productivity and cashflow across the organization for different industries and scenarios.

Here are some good use cases for mobile apps: 

Field Service Management: Mobile apps can enable field technicians and delivery drivers to receive job assignments, update work status, access manuals or technical documents, and communicate with the back office in real-time.

Logistics and Supply Chain: Mobile apps can track shipments, manage inventory, provide route optimization for delivery drivers, and enable real-time updates for customers regarding their orders.

Manufacturing and Warehouse Management: Mobile apps can streamline inventory management, track production schedules, perform quality inspections, and manage equipment maintenance.

Sales Enablement:
Sales teams can use mobile apps to access customer information, update CRM systems, generate quotes or proposals, and even process orders directly from the field.

Retail and eCommerce:
Mobile apps can enhance the shopping experience by allowing customers to browse products, make purchases, track orders, receive personalized offers, and provide feedback.

Real Estate and Property Management:
Real estate agents and property managers can use mobile apps for property listings, scheduling viewings, virtual tours, client communication, service requests, payments and document signing.

Financial Services:
Banking apps allow customers to check account balances, transfer funds, pay bills, and manage investments securely from their mobile devices.

These are just a few examples, but the versatility of mobile apps makes them valuable tools across every industry for improving efficiency, enhancing customer experience, and enabling better communication and collaboration.

Reach out today to discuss your needs and learn how your business can mobilize, modernize and maximize your existing systems without ripping and replacing your existing apps.

Ask about the Affordable Mobile App service which allows your team to visualize what a new app would look like in your environment and calculate the real business value and ROI before you commit to a mobile app project. 

Web Site: https://www.mobigogo.net
Email: info@mobigogo.net


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 - https://github.com/richardschoen/ibmijasper 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 info@mobigogo.net 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
https://youtu.be/U8dPFaPprSY?si=udGDw_831lqenq4m

Essentially the steps are as follows
The video basically has you edit this file with notepad:
C:\Users\richard\Desktop\WIndows11-23h2\sources\appraiserres.dll

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.
https://github.com/richardschoen/ibmijasper

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: https://github.com/richardschoen/howtostuff/blob/master/nginx-ibmi-without-allobject-auth.md


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:    
https://github.com/richardschoen/PythonSamples/blob/master/ibmi/ibmintptimeupdate.py

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 (https://github.com/richardschoen/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.