Google Mobile SEO Changes

Even though webmasters were warned far in advance that neglecting mobile traffic to their websites would impact their rankings, it was still a shock for me to experience a halving of my traffic. And therefore a halving in my website revenue. I’ve had massive drops like this in the past, ignored them, and then found that rankings/earnings had returned to former levels as Google tweaked their algorithm (i.e. fixed what they broke). Continue reading Google Mobile SEO Changes

Speeding Up Workflow WIth IBM RDi

IBM RDi can help you work faster. But you can’t just start using it and expect to experience huge increases in productivity. You have to know how to get the most out of this tool.

I use the following “tips” every day to increase my productivity.

The Outline View

Using the outline view allows you to navigate source quickly and accurately. Jump to the start of subroutines by clicking on them, or expand them to find all lines of code with an exsr for that subroutine. Continue reading Speeding Up Workflow WIth IBM RDi


The javascript split method splits a string into an array of substrings. Consider the following code:

var string1 = "blue+++green+++yellow+++fuchsia";
var colours = string1.split("+++");

The result is that colours is an array with elements that contain “blue”, “green”, “yellow” and “fuchsia”.

Wouldn’t it be great if there was a split built in function in RPGLE? Sorry, there isn’t. You will have to write your own.

Or copy mine: Continue reading RPGLE Split

RPGLE SQL Update A Substring

You are coding an rpgle program. Suppose you have a field that is 20 characters long and you want to update position 5 of it using embedded SQL. I know what you want to do. You want to

update yourFile set substr(field1, 5, 1) = ‘1’ where blah

But you can’t. It’s not allowed.

However, there is a shamefaced workaround that will get the job done: Continue reading RPGLE SQL Update A Substring

Commenting Source In RDi

I’m talking about commenting your source with references to projects. Each project we undertake is assigned a 5 digit project reference number. Code changes made for a particular project are commented with this reference. The reference number fits conveniently in positions 1 to 5 or the source, whether coding in fixed format or free.

Does this describe the way you annotate your code changes? If so, read on. Continue reading Commenting Source In RDi

SQLCODE = -507 SQLSTATE = 24501

You have probably specified that your SQL cursor is for read only, and then tried to update a row in your table using that cursor. If so, just replace the “for read only” bit of your cursor declaration with “for update”. It’s a bit like “update or delete without prior read or chain”.

…or it could be that you have defined multiple cursors for the same file, their use conditioned on different criteria, and you haven’t opened the cursor you are trying to update.


The cursor identified in the update or delete statement is not open. The application program attempted to execute an UPDATE or DELETE WHERE CURRENT OF cursor statement at a time when the specified cursor was not open.

Find In IBM RDi

The Find facility in IBM RDi might seem a little strange if you are coming from a green on black SEU background. In SEU you will type in the search term, press F16 and keep pressing F16 until you find the occurrence of the search term that you want.

In RDi, though, you will press ctrl + f to open up the search box and start typing. Matches are found without having to press F16. Imagine that you have found the first occurrence of the search term in RDi and you want to find the next. In SEU, you would press F16, but doing so in RDi causes weirdness. What you should do instead is either click the Next button (next to the Find box), or close down the Find box and then press F16. Continue reading Find In IBM RDi

Service Entry Points – Green On Black

We have a web application written in RPG. We have written RPG programs that construct the HTML, the finished pages get sent to the browser, and when the user performs an action, page variables are sent back to the server (the IBM i). There is a background job running in batch that processes these requests. If this background job is busy when another request arrives, a new background job is spawned. If there is a lot of activity, it’s not uncommon for a few background jobs to be running at the same time, each serving its own requests. Continue reading Service Entry Points – Green On Black