My Blog

How to change Remitplus Server in Client Config

I've spent this week implementing a Cheque (yes -- that is the correct and very English way of spelling 'check') scanning solution for a client.

The basic idea is -- company receives lots of money payments by cheque, these are scanned, sorted and deposited direct into the companies bank account and the deposit information is then automatically uploaded to their back office accounting system (in this case an in house RPG IBM i application). It's been a fun project with some neat automated features which are now working nicely in production. *phew*

The clever scanning and talking to the bank bit is handled by a cheque scanner and some rather nifty software to control it, called RemitPlus by Profitstars:

RemitPlus® Remittance/LockboxTM

Electronic check, remittance, and lockbox processing solution.

dsplnk '/tmp/httpapi_debug.txt'

If you are using the IBM i HTTPAPI (LIBHTTP) opensource utilities, you already realize how easy it is to talk to a webservice from within your RPG programs.

But remember, after you have run your program, you will have a beautiful log of the entire SOAPey process stored in an IFS file in your temporary folder -- assuming you are running in debug mode.

So , in your program make sure you are turning on debug:

        // Note:  http_debug(*ON/*OFF) can be used to turn debugging
        //        on and off.  When debugging is turned on, diagnostic
        //        info is written to an IFS file named
        //        /tmp/httpapi_debug.txt
      /if defined(DEBUGGING)
         http_debug(*ON);
      /endif  

and then after you have ran it you can see the results by typing: dsplnk '/tmp/httpapi_debug.txt'

You will see a gloriously detailed log that looks something like this:

What is the best media player for Android, Apple and Windows mobile devices

So, you've downloaded some video but your standard media player doesnt seem to want to play it?

Video media comes in all shapes and sizes: AVI, MP4, MP5, MOV, XVID, yadda, yadda, yadda

​I cant be bothered with downloading a media player for each format when one player will do the lot. But with various operating systems on the devices in the walls of Castle Litten these are my favorites for my Android Phone, Tablet and also for Windows, IOS7 and Ubuntu Desktops:

For ANDROID the winner is BS PLAYER FREE

bs player free plays everythingSitting on various planes, trains and automobiles this is my favorite solution for watching media. It plays everything!

You say Tomato, I say Pomedoro

Over the last year, I've found a marked decrease in productivity during project work due what seems like a lot more life interruptions.managing life and time

I'm (a) easily distracted, (b) the king of procrastination and (c) frequently trying to multi-task to such a wide degree that I almost completely zone out and have revisit and rework things I've marked complete. Interruptions are insidious and I've discovered that its not the major breaks that break things but the small social ones. When I say 'social' I means by way of social media: emails,  texts, facebook, twitter, instagram and the list goes on.

[ and thats not even mentioning kids, dogs and the missus wanting to go for a quick lunch at the beach]

But wait... I've found a solution!

 

What is the RPG Open Access Handler all about?

What is open Access

Rational® Open Access: RPG Edition provides a way for RPG programmers to use the simple and well-understood RPG I/O model to access resources and devices that are not directly supported by RPG.
Open Access opens up RPG's file I/O capabilities, allowing anyone to write innovative I/O handlers to access other devices and resources such as:

  1. Browsers
  2. Mobile devices
  3. Cloud computing resources
  4. Web services
  5. External databases
  6. XML files
  7. Spreadsheets
  8. And more


An Open Access application has three parts:

  1. An RPG program that uses standard RPG coding to define an Open Access file and use I/O operations against the file.
  2. A handler procedure or program that is called by Open Access to handle the I/O operations for the file.
  3. The resource or device that the handler is using or communicating with.

Open Access is the linkage between parts 1 and 2. Licenced program 5733-OAR is required to use Open Access at runtime. Open Access is a full-featured version of the limited support provided by RPG SPECIAL files. It provides a way for RPG programmers to use the simple and well-understood RPG I/O model to access devices that are not directly supported by RPG.

Rob Litten - Drums the Word

OK - So I must admit to being slightly biased as Rob Litten happens to be my cousin but... Rob has grown from the gangly kid that I remember into a quite astounding musician. When he's not drumming away on any nearby acoustic surface (my granite kitchen has never quite recovered) he is either being very loud playing in his band or... in professional mode.... he earns his living by being one of England's best known drum instructors and the force behind the astoundingly successful Drums the word website and youtube video phenom.

robert litten drumming god

Rob is college trained and one of the elite few to achieve a National Higher Diploma in drum performance as well as BA(Hons) Degree in music specifically for the drum kit. A Percussion genius. Nuff said.

How to get IBM i command line during runtime using System Request 3

Here's a blast from the past:

I was just testing an IBM i program that is importing data from a Windows Server, converting the data, juggling it, tweaking it and when its finished playing it finally shoves it into an IBM i Database. Fun Fun FUN! But if its running interactive and I want to quickly get the command line... I'm stuck. The green screen is input inhibited. Luckily, we can easily get command line access by tweaking the system request functions of IBM i.

HACKEAT EMPTOR - obviously only grant this command line access if your system i is properly secured. You dont want any old Tom, Dick or Harry getting to the command line to do you?

The system request functions do a bunch of neat things during any interactive session - SysRq/2 shows a DSPJOB command. Luckily its super easy to change the command associated with all the system request functions.

Right now, lets quickly tweak the sysrq/2 function.

WRKMSGD MSGID(CPX2313) MSGF(QCPFMSG)

How to Reset or rebuild a Sitemap in Drupal

A sitemap is exactly that -- a map that search engines read to find what is on your website.

Sitemaps are a simple way of keeping the main search engines like Google or Bing up to date with what is going on with your website. I mean, why bother writing a website if nobody every reads it right? 

The XML sitemap module creates a sitemap that conforms to the sitemaps.org specification. This helps search engines to more intelligently crawl a website and keep their results up to date. The sitemap created by the module can be automatically submitted to Ask, Google, Bing (formerly Windows Live Search), and Yahoo! search engines. The module also comes with several submodules that can add sitemap links for content, menu items, taxonomy terms, and user profiles.

I can almost guarantee that you are reading this because you searched for something on a search engine and it bought you here. It only knows about this website because of the website map 'sitemap.xml'

The sitemap is pure XML (a kind of funky HTML) and basically lists everything that is on the website and looks something like this:

use LIBHTTP to talk SOAP to websites using RPGLE on IBM i

Thankyou -- Scott Klement!

HTTPAPI (LIBHTTP) on IBM i is the bomb. Luckily I am not boarding a plane at the moment, so I can use that kind of language without getting strip searched by some burly TSA agents.

Firstly, I have never met Mr. Klement but (like almost every IBM i Developer out there) have read many of his excellent articles about programming and tinkering with IBM i systems. Secondly, the man is a genius and I owe him a very large beer. After spending far too long investigating various techniques to get my IBM i system to talk to an external website (Authorize.net in this case) and being led down many wrong roads... I stumbled across scott's collection of open source RPGLE programs called HTTPAPI.

In Scott's words:

Download HTTP API source:

This is an RPG IV service program that uses socket calls to implement the HTTP 1.1 protocol. The HTTP protocol is the data transfer protocol that is used to transfer documents over the World Wide Web.

This service program can, optionally, also do "https" (HTTP over SSL) requests to an SSL-enhanced web server.

What happened to the Forums?

Hello websurfing chaps and chappettes,

Over the years this website has been through many, many changes – from HTML to Flash to Joomla to Wordpress and finally to Drupal. A couple of years ago, I decided to import lots of my old programming and AS400 specific documentation into the website and imported everything in Drupal ‘forums’. Primarily as an easy place to reference old technical articles and because I thought some of the older ‘RPG Programming’ questions just might help the IBM I community out there. Apart from my burbling blogs, the forums are easily the most accessed part of the website.

However, I now find myself spending (wasting) time every day deleting spam, moderating people leaving nasty comments and just basically being annoyed by the inability of some people to have sensible conversations using online forums.

So – whats the solution?

Social media is the answer. Over the last couple of years I've increasingly chosen to use Facebook and Twitter to communicate. I’ve also integrated DISQUS into every article on the website, as it has superb antispam tools built into it. Effectively the entire website is now acting like a forum with facebook and twitter being the new places for chatter and banter.

Alas Poor Boris...

This mornings refusal to start was the final straw!

So, after doing the sums and realizing that I've spent nearly fourteen thousand dollars on repair bills since owning this Landrover in just two years, and he's still going wrong on a regular basis, its time to give up. To resign myself to the sad decision to banish Boris to a life in the wilderness, outside the walls of castle Litten. I havent got the heart to sell the car to another owner, or even to trade it into a dealer and be able to look someone in the eye while saying "Yes, this is a reliable little motor and I will be sad to see it go" so its time for the car auctions.... Everybody knows that its a case of 'buyer beware' at Auctions. You can get a steaming deal or a steaming Turd. I know which category I wold put Boris into  :)

Sadly, Boris will leave me in negative equity as I expect to be upside down on my car loan to the tune of something like $9000 when I consider the trade value for 2006 LR3's.

It's time to bite the bullet, and find a cheap but reliable run around until I get the outstanding loan payments cleared. I've already got my eyes on a cheap, little motor that is reported to be reliable, looks funky and fits kids, dogs and other beachlife clutter inside.

More about Herman Later

 

Talking to Authorize.net using XML, RPG from IBM i

So, for the last few weeks I've been working on adding credit card handling to a legacy RPG application with an static HTML website over the top. The application code itself was written in the eighties and has evolved through a number of different versions of RPG (a mix of RPG2, RPG3, RPG400 and even a liberal splash of RPGLE) so I've had an enjoyable task of taking a bunch of old code, re-factoring to RPGLE/free and then adding some funky web services.

Now I've added the Authorize.net CIM functions and windows to my website pages, I can manually test the payment process. Now, the authorize.net documentation is not for noobs and makes an awful lots of assumptions, so implementing this technique on IBM i (AS400) using RPG, without a modern PHP Server on the front, is not as clear as it seems.  After reading everything I could on the various SOAP, XML, JAVA, RUBY techniques - I've opted for the XML route.

The next step is setting up the XML conversation to this lovely IBM i System talk to Authorize.net. After two days of googling, reading, studying, prototyping, re-prototyping, going down dead ends, trying sample code that doesn't work and repeating moaning and smacking my forehead with a wooden paddle.

So I want to

Shall we Disqus why Drupal Comments are Dead?

Spammers... I bloody hate them.

Over the last few weeks, I've had a rash of spam attacks. The modules I was using to modulate spam (Mollom, Antispam, Botcha) worked very well in blocking the huge portion of it. The downside was a big upsurge in CPU utilization on my webserver and finally getting a 'cease and desist' warning from the website abuse folks over at ICDSOFT. *sigh*

So, rather than continue to fight the evil Spam OverLords I decide to travel a different route and let someone fight the battle for me. Why handle the website comments myself when I can let an third party handle them for me.... after a little investigation I was left thinking "Facebook comments or something else to handle it?"

Facebook integration is cumbersome and my memories of doing it last time were not something I want to play with again. There is not enough hours in the day.

DISQUS is very cool.

Enough Said.

Integration of DISQUS in a Druapl7 install is simple. Grab the module from here and plop it into Drupal, then create an APP over on disqus.com for your website and add the APP Keys into your Drupal and VOILA fully managed commenting service. 

Instruction from Disqus are easy to walk through:

 

Latest version of RPG is RPG7.1 right?

 

RPG is not a Rocket Propelled Grenade

RPG2 is that Logic Cycle Thing

RPG3 is the System/38 version

RPG400 is the revamped RPG3 that came with AS400

​everything after that is RPG... unless its ILE then its RPGLE or sometimes RPG4, or its free format so its RPGLE /Free... or its SQL so its RPGSQL or SQLRPGLE... or as many people call RPG/Free - RPG FIVE..... aaaargh

Why doesn't IBM just have a simple version number for each iteration of the wonderful IBM RPG programming language?

IBM i 7.1 Technology Release 7


I love the enhancements to RPG with IBM i V7.1.7. RPG finally looks and reads like a normal modern language. With the advent of this latest version of IBM i, RPG has been neatly upgraded to be a fully free format language. This is a long overdue and a significant change to the language itself. 

RPG gets a facelift with IBM i 7.1 TR7

I'm loving the new changes to RPGLE with IBM i 7.1 TR7 (that is Technology Release 7). Not to be confused with the awesome Triumph TR7, the sexy pop-up headlight car from the eighties, but I digress...

  • Removal of many unnecessary specifications like F, or P
  • /free /endfree is gone
  • the long procedure and variable names are gone and replaced by dcl-pr instead

Looking at RPG code in the editor, and it actually looks like a modern language *shock*

RPG upgrade with ibmi 71

IBM, quite predictably, is pushing the use of Rational Developer for i (RDi) as all the new coding functions are not available from SEU, PDM or SDA etc. Green screen is dying, get with the program. RDi (Rational Developer for IBM i) is supposedly solid and has been rewritten from the ground up to be smooth and error free. IMHO - it needs to be $free to be an explosive success. Can you hear me IBM?

Rational Developer for i V9: RPG & Cobol Tools + Modernization Tools + Java Tools

SQL RPG and the annoying compile COMMIT *NONE thing

SQL has been a major game changer in the RPG programming world.

I first played with SQL back the golden days of RPG3 and RPG400 when we were all wrapped up in using Commitment Control. Journalling files and making changes to data in our RPGSQL programs before issuing a COMMIT or ROLLBACK was exciting and new. Roll forward a few years and database access times have massively increased and the entire concept of commitment control is not something we focus on so much in the RPG programming world.

Because of this history, in modern RPG4 SQL programs, we still have to tell the program not to use commitment if we don't want to use it. This also means you can use embedded SQL in RPG4 programs without journaling your files.

COMPILE TIME PARAMETER

The easiest way is to enter the create parameter of COMMIT(*NONE) thing so it turns it off after the first commit without the isolation level nonsense.

CRT RPG SQL

Upgrade my written CV to an 'Infographic Resume'

The peeps at Vizualize.me say:

We believe that the traditional text resume is boring, lengthy and long overdue for a makeover. We are creating an online resume format that is beautiful, relevant and fun. We want to enable people to express their professional accomplishments in a simple yet compelling personal visualization. Our vision is to become the future of resumes.

Sounds groovy right?

The Vizualize website is in open Beta testing so I had to go and have a look... and its brilliant. Within seconds I had clicked a button to login with my Linkedin profile and the Vizualize website simply asked me if I wanted to import my resume from Linkedin and BOSH! It created this awesome infographic, with a cool URL (http://vizualize.me/nick.litten) and active pop-ups showing my work history.

IBM RPG sub-procedures are very saucy indeed

This morning I got question from an old RPG3 chum of mine:

I know a couple of questions they will ask me, what are the different parms used on sub-procedures like *OMIT/*Nopass. Didn't we use those any way? I thought we were writing programs that did or did not necessarily get parms depending what called them using those keywords? To be honest, I know I can look it up but what the bloody hell is a sub-procedure?

My answer started off little then got into the huge waffling email stage. Bear in mind this is a very high level overview and not designed to get into the nitty-gritty of anything. Anyway, I just decided to copy/paste it here for future reference.

 


 

*OMIT/*NOPASS makes parameters funky

*OMIT - Lets you send a parameter as a value or as *nulls

Lets you use the *OMIT keyword when calling you program. So, if you just dont want to pass anything, you can say *OMIT - I think it just passes *NULLS and in the program that is being called you would say something like 

if %addr( parm1 ) = *NULL ;
  parmvalueinprogram = 'something';
else ;
  parmvalueinprogram = 'parm1';
endif ;

 

Essential Software for the IBM i Developer

Last week I was asked to help the Network Team to create an installable pc-image for a Win7 rollout to refresh the software builds for the IBM i Developers and other IT Techies. It's an exciting time at my clients site... with the haggle looking flustered and excited all at the same time.

 NOTE: HAGGLE is the collective term for a group of aging RPG programmers.

So, while everyone is frantically backing up their old XP machines, before getting the new image pushed down here, is a quick list of the software that's being added as part of the base machine - Windows 7 Enterprise [64Bit] and these are the goodies that I like to use when I'm wearing my 'IBM i Developer Hat':

 

IBM i Access for Windows

Client Access IBM i Access delivers the strengths and capabilities of IBM i to the desktop through easy-to-use screens and wizards. Since IBM i Access delivers new releases simultaneously with IBM i, desktop users can start using the new capabilities immediately. Loading it direct from the IBM i Server's IFS share means that the latest version is always easily accessible:

\\your-ibm-i-server-name\QIBM\ProdData\Access\Windows

Then decide if you want to install the 32 or 64 bit version... simple!

Gunnar RPG Computer Glasses

Gunnar glasses for RPG Programmers

My first memories of wearing glasses were from my pre-teens; my Mum taking me down the local opticians to collect my big brown plastic NHS specs. Some seriously horrible, big brown plastic things. This led to years of school ground taunting being called a speccy-four-eyes and finally refusing to wear them and spending years squinting at blackboards or copying off people next to me… then into my late teens and invention of personal computers and my inevitable attraction to keyboards and monitors… my eyesight took a turn for the worse. By the time I was thirty, I was properly shortsighted (-5 in both eyes) and glasses and/or contacts were just a part of life.

I wish Gunnar optics were around in those days.

I’ve been thinking about wearing glasses specifically for computer work recently, and just today I realized that Gunnar have some glasses called the GUNNAR RPG. So, obviously, as an RPG Programmer they are designed for me!

Pages