Posted by & filed under Operating Systems.

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: https://notepad-plus-plus.org/

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. mybackup.sh).

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

#!/bin/bash

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 https://www.cygwin.com/
  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 -rutvahz --stats --progress /cygdrive/c/ /cygdrive/d/

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

  • r = recursive, into directories
  • u = update, skips files if they are newer
  • t = times, preserve
  • v = verbose, to improve quality of transfer
  • a = archive
  • h = human-readable output
  • z = compress during transfer
  • stats = provides statistics about the transfer upon completion
  • progress = provides transfer progress % for each file (no progress is available for the full command/request)
  • 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 -rutvahz --stats --progress /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 -rutvahz --stats --progress --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 mybackup.sh and then run the following command:

./cygwin/c/path/to/file/mybackup.sh

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)
            $this->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: hosting.iaps.ca
  • 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 formdo.com, Hosting, PHP Development, WordPress.

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

formDO
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.

Clothing/Apparel
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 https://en-ca.wordpress.org/themes/. This should be done by August, along with a client login panel with further integrated support tickets, and access to invoice history.

Summer
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 www.carwrapquotes.com.

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.

We have created the following form to help you generate strong passwords for online accounts. Also 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 reset it, than to use a weak password and have your account hacked!


b0uS7xd@eXkfOPYm


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

flokah-lg

The flokah project (located at flokah.com) 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 ubudget.ca, 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 ubudget.ca 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 flokah.com, News & Updates, ubudget.ca.

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 ubudget.ca, 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, flokah.com 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 (aberdat.com) 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!

Posted by & filed under Hosting, News & Updates.

First off, we would like to wish all of our present and future clients a very Merry Christmas and Happy New Year!

In 2016, our focus will shift slightly towards our Hosting and Search Engine Optimization (SEO) services.  With this in mind, we have revamped our hosting options and reassessed our plan pricing, which is also due to our US-based services and how our Canadian Dollar matches up.  Our new hosting plans include options for a more rounded, managed solution, including WordPress updates, SEO monthly reporting, and additional costs associated to dedicated IP addresses due to IPv4 limitations.

We will be reaching out to our clients over the next few weeks to inform them of our new services, and the benefits they will provide to the future of their companies.  Our full-service SEO campaigns, coupled with weekly and monthly reporting, will provide you with a better understanding of where your website sits in terms of search rankings, why it ranks at its’ current level, and how this can be improved.  As always, content is key, and we are more than willing to aid in increasing your search rankings, and in turn increasing your impressions and sales.

A quick note on WordPress, the open source web-blogging and website platform:  Because so many sites use this platform, and due to its availability to the public, more and more WordPress websites are getting hacked due to exploits from lack of maintenance and security.  Our hosting services will now include advantageous security options to ensure your property is kept safe.

We look forward to this new year of focused dedication to our clients, their companies and their needs, while staying competitive in the web development, marketing, advertising, and hosting fields.  With over 20 years of experience, we are here to help drive your company to the top; of both your search rankings and areas of expertise.

Posted by & filed under Games.

If you have had any issues streaming from twitch.tv, here are a few steps to take as a workaround:

  1. Download and install VLC Media Player from: http://www.videolan.org/vlc/index.html
  2. Download and install Livestreamer from: http://docs.livestreamer.io/install.html#windows-binaries (click on the Installer link)
  3. Then click on START (then run in pre-Windows 7), then type in: cmd
  4. A command prompt (usually a black window) will load.  In this window, type the following then press ENTER:
    livestreamer http://www.twitch.tv/user best
    The above command loads “livestreamer”, connects to “http://www.twitch.tv/user” (where “user” is replaced with the actual user-name), and at the “best” quality.  (To copy+paste to this command-prompt window, right-click the window and click “paste”.)  Once a connection is established, the stream opens up in VLC Player.

Furthermore, if you are still having some buffering issues you may want to add an extra parameter to the command so you utilize more download threads: –hls-segment-threads # (where # is a number between 1 and 10; the default is 1).  The following is an example of this extended command, along with a prompt for the URL (we recommend saving this to a .bat file, such as twitch.bat, so you can simply open it from your desktop and copy+paste the URL):

@echo off
set /p url=”Stream from URL: ”
start livestreamer –hls-segment-threads 4 %url% best

The script prompts you for the full URL of the stream.  However, you may alter this so you only have to enter the user-name portion by changing: %url% to: http://www.twitch.tv/%url%