Posted by & filed under WordPress.

Run the following SQL scripts from phpMyAdmin, or other SQL program. Be sure to change ‘http://www.oldurl‘ and ‘http://www.newurl‘ values.

UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl','http://www.newurl');

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl');

UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl');

Posted by & filed under News & Updates.

Due to the COVID-19 outbreak, the flu, colds, car accidents, radiation from sun exposure, bumps, scrapes, bruises, and all forms of cancer, we at IAPS have your, and our, safety in mind. For those reasons, we work remotely from home and encourage everyone to avoid illness by eating healthy, getting some exercise, and thinking positively. There is no need to panic!

This year at IAPS, we plan to release our new version of flokah, our small business management web platform, and our eagerly-awaited formDO project, that lets you design your own custom management software (CMS) using forms and built-in reporting options. We also recently created and released a new logo 🙂

Our digital doors are always open, and we will continue to provide quality services and products.

Posted by & filed under Operating Systems.

Edit [2020-08-14]: we have made some changes to this guide based on user feedback.

Over our years providing software development services, we have used many different file backup techniques, including: manually copying files, running Windows backups, 3rd-party software solutions, Rich/Robo Copy, shell scripts (which we’ll talk about), and we even tried one of those external hard-drive software bundles, like WD Passport.

We reluctantly installed Windows 10 on our main computers, figuring that Windows 10 has now had ample time to get most of the kinks worked out, and to our surprise “Backup and Restore” from Windows 7 is being deprecated, and the “Backup and Restore (Windows 7)” in Windows 10 seems to fail no matter what was tried. The only option is to use their new backup option, File History, which we use to an extent.

However, we ran into issues with File History when trying to select specific folders under the AppData directory. It didn’t seem to target them properly and the only way to add them was to add the entire AppData directory, instead of specific directories from within.

So now we create our own backup scripts using a file-transfer command-line tool called rsync.

rsync is an open source utility that provides fast incremental file transfer. rsync is freely available under the GNU General Public License and is currently being maintained by Wayne Davison.

It’s a bit of a process to get this setup on Windows, but it’s worth it. If you have a linux system, then you already have rsync installed by default.

  1. Download and install Notepad++; used to instill proper line-endings for the shell script we will create.
  2. Download, install, and configure Cygwin; this program simulates a shell in Windows, and also provides rsync as an option during installation.
  3. Go through some rsync command-line examples.

1. Notepad++

Notepad++ is a great tool for quick notes and file editing/previewing. It allows for multiple documents to be open at once, and it remembers unsaved documents for you. You can download Notepad++ from here:

We will use this program to create a shell file (.sh extension) that we can run from Cygwin. Notepad++ helps us solve an issue where regular text files created in Windows have different line ending characters (\r\n) than those that are used in a Unix/Linux environment (\n).

We’ll use Notepad++ to set the line endings of our shell script to be that of Unix decent. Open Notepad++ and create a new file, then click on Edit > EOL Conversion > Unix (LF), then save your file with a .sh extension (eg.

In the very first line of that file, write the following:


All remaining commands will go below this line.

2. Download, install and configure Cygwin

Cygwin provides a local shell (command-line) environment with configuration for many of the same capabilities as you’d have on a Linux OS or Mac machine, and this program will allow us to run the rsync command.

  1. Go to
  2. Download your supported executable (.exe), 64 or 32-bit, file from the links found under the section Installing Cygwin.
  3. Open the file to begin the installation process…
  4. During installation, you will be asked which modules to install; you can use the search box at the top to help locate the modules we need. Find and select both ssh and rsync.
  5. Once installed, open the Cygwin terminal.
  6. If you make a mistake or need to install additional modules, you may run the Cygwin installer again to select additional modules.

3. Rsync commands

To view all accessible drives from Cygwin, type the following in your Cygwin terminal:

 cd /cygwin/

From here, we can access our files on our main drives, and plan our backup strategy. Let’s take a look at a rsync command that copies everything from C-drive to D-drive:

rsync -auvhPW --stats /cygdrive/c/ /cygdrive/d/

The above command uses some very specific options/flags, which are explained below, starting with -auvhPW:

  • a = archive, includes -r (recursive, into directories) and -t (times, preserve)
  • u = update, skips files if they are newer
  • v = verbose, to improve quality of transfer
  • h = human-readable output
  • z = compress during transfer (removed)
  • P = equivalent to –partial –progress (providing file transfer progress %)
  • W = copy files whole (equivalent to –whole-file)
  • stats = provides statistics about the transfer upon completion
  • Other flags can be found, and are described, on the rsync website.

This first example will copy all files from your user (MyUserName) /Documents/ folder on your C-drive, to a folder called /Documents/ on your D-drive, which can be an external hard drive, USB stick, etc.:

rsync -auvhPW --stats /cygdrive/c/Users/MyUserName/Documents/ /cygdrive/d/Documents/
  • exclude ‘folder/file’ = allows you to dictate which files or folders to skip during the sync. You may chain –exclude flags to ignore multiple directories:
rsync -auvhPW --stats --exclude 'Private' --exclude 'SemiPrivate' /cygdrive/c/Users/MyUserName/Documents/ /cygdrive/d/Documents/

You may run the above commands right from the Cygwin terminal, or – especially if you have multiple rsync commands – you can save those commands to and then run the following command:


Posted by & filed under PHP Development.

Through our years of programming, we have optimized and re-optimized our code in attempt to make things easier for us, and to reduce redundant code.

During our endeavours, we implemented an abstract class containing a function that returns a new object instance:

abstract class i_object {
    final public static function i() {
        return count(func_get_args()) ? call_user_func_array(array(new static, '__construct'), func_get_args()) : new static;

You can then create your business logic class like this:

class user extends i_object {
    public $id;
    function __construct($id = null, $populate = false) {
        $this->id = $id;
        if ($populate)
        return $this; // * important
    function populate() {
        // populate from db

Then, when you want to create a new “user” object:

$user = user::i($id, true);

We check for arguments in i_object::i(), so the object is then instantiated with those same params.

* It is imperative that you return $this; in the __construct function of the class extending the abstract class.  If omitted, nothing will be returned when calling ::i().

Posted by & filed under Hosting, News & Updates.

Please note that access via FTP is no longer permitted, as at March 7th, 2017 @ 12:01am EST.

The following describes how to configure SFTP access for a cPanel user.

Aside from logging into cPanel and using the File Manager tool to manage your website files, you can also connect via SFTP, not to be confused with shell access, which is prohibited.

Create your SSH Keys

You will first need to setup your SSH Keys:

  • While logged into cPanel, click on “SSH Access” under the “Security” section, then click on “Manage SSH Keys”:
  • If you do not have any Private Keys setup, click on “Generate a New Key”.
    • You may keep the Key Name as “id_rsa”, or change it to something more specific.
    • You will be asked for a Key Password, which is optional but highly recommended.  You will need this password each time you use the key.
    • Key Type: RSA
    • Key Size: 4096
    • Click “Generate Key”.
  • From the “SSH Access” page, click “Manage” beside your new key, listed under “Public Keys”:
    • The “Authorization Status” should be listed as “not authorized”.
    • Click “Authorize” to permit access using this key.
  • From the “SSH Access” page, click “View/Download” beside your key in the list of “Private Keys”:
    • Scroll down to the bottom of this page to where it says “Convert the … key to PPK format”.
      • If you supplied a password during creation of this key, enter it here.
    • Click “Convert”.
    • Then scroll down to the bottom of the page, and click “Download” to download the “.ppk” Private Key file.
    • DO NOT share your Private Key with anyone.

Configure your Connection

In FileZilla, setup your connection as follows:

  • Host:
  • Protocol: SFTP – SSH File Transfer Protocol
  • Logon Type: Key file
  • User: your cPanel username
  • Key file: the “.ppk” key-file you downloaded from cPanel.
  • Example:

Once you click connect, you will be prompted for the key password you set while generating the SSH Key.

That’s it!  Your connection and transfers are now secure.

Posted by & filed under, Hosting, PHP Development, WordPress.

This year we will be upgrading our hosting services by more than doubling speed, ram and space, which is expected to occur early March.

We will be releasing our flagship project, formDO, late April!

flokah (ubudget)
We have some really awesome updates prepared for this project, which will be released shortly after the launch of formDO; most likely sometime in May or June.

We are now selling light-weight, polyester hoodies for CAD$35, available in 2 colours (dark grey, beige), and 5 sizes (S, M, Lg, XL, XXL). All hoodies come with a pressed “iaps” logo, placed over the heart. For more information, please contact us. We plan on setting up a shop page for our apparel in early Spring, which is when we plan on introducing collared golf shirts into our product line.

Blankslate/Patternfly WordPress Theme
As per our post in October of last year, WordPress PatternFly (Bootstrap) Theme, we will be applying this theme to our own website, and also releasing it to the public via This should be done by August, along with a client login panel with further integrated support tickets, and access to invoice history.

This summer will commence our first application and integration of formDO into a small farming business, located just outside London, Ontario.

Posted by & filed under PHP Development, WordPress.

Over the past few months, we have been working with PatternFly, which is built on Bootstrap, to provide an enterprise look and feel to our data management applications. To our surprise, or not, we found zero (0) WordPress themes supporting PatternFly. While utilizing the open source WordPress theme Blankslate, we have put together a nice little WordPress PatternFly theme. You can see it in action at

We plan on publicly releasing this theme, once we tighten everything up, but for now, if you would like a copy to use or play around with, please let us know. This theme-package comes complete with a child theme for you to provide overrides. We also recommend using the following plugins, in order of most important to least important, although not required:

  • Theme My Login – Template overrides have been provided within the packaged parent theme. You may further override these templates by copying them, from TML itself or from the parent theme, to your child theme.
  • Wordfence Security – Security is always a good idea! This should actually be listed first, but it’s not.
  • Debug Print R – Because debugging is sometimes necessary, and this makes debugging easier to read.
  • Nav Menu Roles – Easily set a nav menu item to only display based on logged in status and role.
  • Slim Stat Analytics – To accompany your Google Analytics.
  • Widget Logic – Great way to limit widget visibility.

Posted by & filed under Notices & Alerts.

We highly encourage everyone to use passwords with at least 9 characters, containing uppercase and lowercase letters, numbers, and, if permitted, special characters.

Recommended Password Storage Solutions

KeePass is great little program for managing personal passwords, and LastPass works great to manage passwords for teams.  They are completely different from each other, and KeePass does have a slight learning curve to it, while being more geared towards people that want to have an offline password storage system.  Comparatively, LastPass integrates well with your browser, provides user/team-based permissions to password sets, and has a user-friendly interface.  We have experience with both of these options.  However, we do prefer KeePass.  The best part is, both of these solutions are FREE!

The Generator

The below form generates strong passwords for online accounts. Keep in mind that if you ever lose a password, you can easily reset your password using the “Forgot Password?” form found on most websites. It’s better to lose a strong password, and have to reset it, than to use a weak password and have your account hacked!


Posted by & filed under, News & Updates, PHP Development.


The flokah project (located at has gone through 3 stages of development.

The first was more than 10 years ago, when we first started creating invoices. The system was very simple back then, having only the ability to create clients and invoices. It was called cConsole; “Client” Console.

At that time, Simply Accounting cost about $80, and we didn’t want to spend money when we could just create our own system, with consideration to the fact that we didn’t need anything close to the number of features a full accounting system would provide.

Then, in December of 2011, we converted the simple cConsole system, which was built on our own framework (of which we tried to release as a development platform) into what we called ubudget. The ubudget name was actually taken from a friend, more like an acquaintance, that wanted to create a budgeting system. We felt they wouldn’t go through with the development, so we took it upon ourselves, or at least the name.

Unfortunately, the name never really fit the product, and ubudget -the client/project/invoicing system-, even though released at, never really gained traction. This was also due to our lack of advertisement. We had a website, told a few friends, but none of our friends had huge email listings for people at Harvard…

Regardless of its’ mainstream popularity, of lack thereof, we’ve been using ubudget every single day to manage our company. And over the past 5 years we added features and changes that we needed for expansion, and to ensure we stayed organized. With ubudget you could create project tasks, documents, kanban board, track expenses, create a budget, generate income reports, track recurring services, point-of-sale, worklogs, and import csv data. All changes were promoted to and accessible to everyone, for free!

All of that was well and good, but it was missing something. And it wasn’t until we decided to get rid of our custom UI, replacing it with Bootstrap about 2 months ago, that we realized just how much could be accomplished by adding in 1 small feature: a dashboard! The dashboard is where you can see a snapshot of your projects, tasks, upcoming billings, yearly income, and also provides a way to quickly create invoices in just a few clicks.

One of our earliest suggestions for ubudget was to have the ability to create invoices in bulk, and send out all the email notifications in one shot. However, as good of an idea as this is, it has not been fully implemented. But, with the addition of the dashboard, invoice creation takes less than 1/4 of the time as it used to. The addition of a mature dashboard was a huge time-saver and we are very happy that we finally managed to streamline invoicing.

So, with new functionality, a new UI, stronger security, and complete user isolation, we are proud to present flokah, ubudget’s predecessor.

We set a go-live date of June 15th, 2016…and as it turns out, it will be released on time! 🙂

Posted by & filed under, News & Updates,

Over the past few months, we have been hard at work at client-offices, and on multiple client projects.

We finally had a chance to revisit, as that project has not been touched in over 2 years. Not only has the look and feel changed, but the name as well. “ubudget” falls short when defining what it actually is. However, “flokah” seems to fit a lot better and we will stick with that name for now. We also managed to scoop up the .com, so within the very near future, will be running the new version of ubudget. Each user will be notified, then migrated, and notified once more upon completion.

Journal Imports and our new Client Portal won’t be available for use within flokah until August.

Our Point of Sale system ( is on the back-burner until we finish our current project, “actpath”. actpath is our CMS builder, and it’s awesome, and we can’t tell you more than that.

Lots of good things to come, always!