DiffPDF – A tool for comparing PDF files

Posted on: February 21st, 2018 by Olu No Comments

Hi folks,

I just want to talk a bit about a handy tool I tried recently. It’s called DiffPDF and, as the name implies, it helps you compare PDF files for textual differences. It is provided by Qtrac Ltd.

I tried it because I had two large PDF files generated by a similar process and wanted to see if they were identical. DiffPDF did a decent job at comparing the two files. It gives a page-by-page analysis of the comparison so you can easily view at a glance what pages differ. The user interface is quite intuitive and the application is easy to use.

You can try out the application free using a trial license by going to Qtrac’s website http://www.qtrac.eu/diffpdf.html and downloading an appropriate version. After 20 days, a license is needed.

One downside I can see for this app is that it only supports Windows.

So, if you ever need to compare PDF files quickly, try DiffPDF. That’s it for now.

How to Completely Uninstall PyCharm on macOS

Posted on: February 21st, 2018 by Olu No Comments

Hi folks,

Quick tip today. I will share how to completely uninstall PyCharm on a Mac. Why may you want to do this? The other day there was an issue with my PyCharm installation. It was always getting stuck on ‘Indexing…’ on opening a particular project. So, I thought, perhaps installing a fresh updated copy will help. Here are the steps I followed to completely uninstall the existing copy:

1. Go to Applications > right click PyCharm > move to trash

2. open a terminal and run the following: find ~/Library/ -iname “*pycharm*”

verify that all of the results are in fact related to PyCharm and not something else important you need to keep. Then, remove them all using the command: find ~/Library -iname “*pycharm*” -exec rm -r “{}” \;

I was able to install a new version and it worked like a charm. That’s all folks.


Complete uninstall on Mac – IDEs Support (IntelliJ Platform) | JetBrains. https://intellij-support.jetbrains.com/hc/en-us/community/posts/206593875-Complete-uninstall-on-Mac

How to make MacOS Remember your SSH Passphrase

Posted on: February 18th, 2018 by Olu No Comments

Hi folks,

Here’s a quick tip on how to make your macOS remember SSH passphrases. If you use public/private key authentication to access servers, you probably wouldn’t want to have to enter the passphrase every time you access the server. To make your client store the passphrase, all you have to do is enter the following into  ~/.ssh/config

Host *
    UseKeychain yes

Once you do this, you would need to enter the passphrase once and afterwards it will be remembered. This was tested on macOS High Sierra.

That’s all for now. Happy coding.



macOS keeps asking my ssh passphrase since I updated to Sierra. https://superuser.com/questions/1127067/macos-keeps-asking-my-ssh-passphrase-since-i-updated-to-sierra

Introduction to PhantomJS

Posted on: March 14th, 2017 by Olu No Comments

Hi folks,

In this post I briefly go through how to navigate pages using PhantomJS perhaps while writing automated UI tests, scraping web pages, etc. To facilitate this we will use the example code supplied by PhantomJS itself [1].


Let’s look at the first chunk of the code

"use strict";
var sys = require("system"),
    page = require("webpage").create(),
    logResources = false,
    step1url = "http://en.wikipedia.org/wiki/DOM_events",
    step2url = "http://en.wikipedia.org/wiki/DOM_events#Event_flow";

if (sys.args.length > 1 && sys.args[1] === "-v") {
    logResources = true;

In the first line we create an object of sys module which we use later on to check the number of arguments. That’s useful if your script is going to accept arguments. The important bit, though, is the page = require(“webpage”).create() line. That creates a page.


Next, to open a page, we use code like


setTimeout(function() {
    console.log("### STEP 1: Load '" + step1url + "'");
}, 0);


That is, we call open() method on the page object. Notice how we wait for 0 seconds before making this call. For subsequent calls one waits for longer periods of time.


Next, to click a line on a page, we can use code like

setTimeout(function() {
    console.log("### STEP 3: Click on page internal link (aka FRAGMENT)");
    page.evaluate(function() {
        var ev = document.createEvent("MouseEvents");
        ev.initEvent("click", true, true);
}, 10000);


Notice how we create a MouseEvents object and call initEvent method on that object, passing “click” to it. Then we dispatch the event on the selector we want to click.


Finally, in a PhantomJS script, it’s good to close out the page and exit PhantomJS. We do that using code as shown below:

setTimeout(function() {
    console.log("### STEP 5: Close page and shutdown (with a delay)");
    }, 100);
}, 20000);


To see a more full-fledged example, check out Amir Duran’s excellent example of using PhantomJS to log in to Amazon [2]. The PhantomJS website [3] also has lots of good examples demonstrating usage. That’s all for now. Happy coding.



1. Page Events example. https://raw.githubusercontent.com/ariya/phantomjs/master/examples/page_events.js.

2. How to login Amazon using PhantomJS – Working example | Code Epicenter.

3. Examples | PhantomJS. http://phantomjs.org/examples/

Bash Scripting Introduction

Posted on: February 17th, 2017 by Olu No Comments

Hi folks, this article is meant to be a really short introduction to Bash.

First, what is Bash? Bash is a Unix shell and command language developed by Brian Fox for the GNU Project as a free software replacement for the Bourne shell [1]. Bash is the default shell on most Linux and macOS systems. Bash has even been ported to Windows as it is supported natively in Windows 10 and through Cygwin and MinGW. A Bash script is a file containing one or commands and can be very useful to automate commands that you may otherwise have to type out yourself each time on a terminal. Without further ado, let’s dive in.


Interpreter Directive

A common way to write Bash scripts is to add an interpreter directive as the first line of the file, e.g.

This way, once the file is made executable, a user can execute the file directly from a terminal and it will be executed with Bash automatically.


Variable assignment

Variable assignment is done as follows:

x="some tuff"

Note that there shouldn’t be space between the letter and the = sign.

Referencing variables


echo y is $y


If conditions

Here is an example of how to write an if statement.

if [ $x == "some stuff" ]
echo some stuff


If/else conditional statement

if [ $x == "stuff" ]
echo some stuff
echo some other stuff


If/else if/else clause

if [ $x == "foo" ]
echo some stuff
elif [ $x == "bar" ]
echo some other stuff
echo the last stuff


myArray=(1 2 3)


While Loop Through an Array

myArray=(1 2 3)
while [ "x${myArray[count]}" != "x" ]
echo element is ${myArray[count]}
count=$(( $count + 1 ))


You can find much more details in Mike G’s excellent BASH Programming website [2].



1. Bash (Unix shell) – Wikipedia. view-source:https://en.wikipedia.org/wiki/Bash_(Unix_shell) [16/02/17].

2. BASH Programming – Introduction HOW-TO. http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html [16/02/17].

Incredible Brick Breaker 1.2. is Launched

Posted on: January 11th, 2016 by Olu No Comments

Hi folks,

We’ll like to announce that Incredible Brick Breaker 1.2 has been released. This is a minor update and contains a fix for the bug where the app crashes on navigating from the Main Menu to the About page and back to the Main Menu. Some usability improvements were also implemented.

As always, we like to know what you think about the game. Fell free to contact us. And if you haven’t yet installed the game, get it from Google Play.

Yinkos Grocery List App 2.1 is Live!

Posted on: November 16th, 2015 by Olu No Comments

Hi folks,

We’re pleased to announce that Yinkos 2.1 is out.

This update includes usability improvements like making Backup and Recovery easier to access for your shopping lists. There is also a bug fix for a bug with using the Barcode scanner. This version also uses a more up-to-date version of the Android SDK for a more modern look. The online shopping aspect has been removed from this version and will likely be rolled out as a separate app soon.

Get it from Google Play.

Incredible Brick Breaker 1.1 is Launched!

Posted on: October 12th, 2014 by Olu No Comments

Hi folks,

First, I’ll like to say thanks to everyone who has installed Incredible Brick Breaker so far. It’s a pleasure to see others enjoying the game as much as we are. Now to the point at hand. Incredible Brick Breaker 1.1 is out! It went live last night.

This release includes a few bug fixes to navigation within the app. In the near future we should be including a few more feature to spice up the game even further. As always, we like to know what you think about the game. Fell free to contact us. And if you haven’t yet installed the game, get it from Google Play.

Yinkos Grocery List 1.39 is Live

Posted on: October 3rd, 2014 by Olu No Comments

Hi Folks,

It’s sure been a while, but rest assured, there are several new features in the pipeline.

For now, a bug-fix release has just been published. Yinkos 1.39 includes some fixes to for a bug affecting Facebook login on some devices.

Get it from Google Play


Incredible Brick Breaker is Launched!

Posted on: September 10th, 2014 by Olu No Comments

Hi Folks,

Good news! We have just launched an awesome Brick Breaker game on Google Play. It’s called Incredible Brick Breaker! This game is so incredible, it will knock your socks off.

You will play with fast balls, long paddles, chase after really cool power-ups while you keep the ball from hitting the ground.

Incredible Brick Breaker is a great game to play when you need something to pass time, e.g. when on the bus on the way to work, on lunch break, etc.

Try it out on Google Play today! It’s free. Get it on Google Play.