PHP: about NULL vs 0

Info.Tech, PHP, Silex Framework, SQL: Structured Query Language, Web Development Comments Off on PHP: about NULL vs 0

A client reported about the data wasn’t populating… So I debug and took me hours to find out…

Background: We have this enterprise system with legacy code and we created a QueryDriver class to make the legacy, Silex DBAL & CodeIgniter works and reusable. Behind the QueryDriver, it uses vsprintf() function.

$parcelData = [];
$jobVarObj = new JobsVarsTable();
$prime_parcel = $jobVarObj->getVarValue($this->job_id, 'PRIMARY_PARCEL');


$q = "SELECT * FROM jobs_parcels WHERE JID = '%d' AND ID != '%d' AND Deleted IS NULL";
$sql = $this->getQueryDriver()->fetchAll($q, [$this->job_id, $prime_parcel]);
$parcel_data_list = $sql->getData();

In that codes above, the $parcel_data_list is always empty and I know there are 1 row results.

2 hours later…

Note: $prime_parcel = null; // if does not exists in the records, will return literal null

I just realised that printing vsprintf($q, [ $this->job, $prime_parcel ]) will gave me what I expected because when you sprintf() or vsprintf() the NULL to %d, this will convert to ZERO. But actually when I pass the query to our QueryDriver, %d and %s are actually converted to ? which the NULL become literal NULL in the query. Instead of “SELECT * FROM jobs_parcels JID = ‘123’ AND ID != ‘0’ AND DELETED IS NULL” then becomes “SELECT * FROM jobs_parcels JID = ‘123’ AND ID != NULL AND DELETED IS NULL”. So there will be no result.

So lesson learn…


$parcelData = [];
$jobVarObj = new JobsVarsTable();
$prime_parcel = (int)$jobVarObj->getVarValue($this->job_id, 'PRIMARY_PARCEL', 'n');


$q = "SELECT * FROM jobs_parcels WHERE JID = '%d' AND ID != '%d' AND Deleted IS NULL";
$sql = $this->getQueryDriver()->fetchAll($q, [$this->job_id, $prime_parcel]);
$parcel_data_list = $sql->getData();

Then it solves my 2hrs problem!!!

Ok that’s my entry for half of 2017… hehehe..


Backup your files on any Android smartphones

Android, Info.Tech, Mobile Development Comments Off on Backup your files on any Android smartphones

Alright, I stumble with Huawei LYO-L02 model which very primitive model and can’t even get a support on it. If you plug to your PC, nothing happens. You cannot access the internal storage. So the question is how do I backup the contents of my phone?

Here’s the simple steps:

  1. Install an App in your phone called “SSHD
    • after installing, create a server and set the port then add a user
    • start the server or SSHD
    • once started, it will show the IP address where your SSHD can be connected
  2. Then in your Desktop computer or laptop (PC/Mac) , install FileZilla
  3. Remember, your phone and computer should be connected to the same WiFi or network.
  4. Open your FileZilla, go to site manager and add new site
  5. Enter the IP address provided in step 1 then port, username and password.
  6. On protocol, select SFTP (SSH File Transfer Protocol) then connect
  7. After connecting, it will give an error like cannot read directory because its reading to “/” root directory. In Android, the default storage of the files will be “/storage/” so just change the address bar on Filezilla and press enter and this will show you few directories.
  8. Just find the folder you want to backup and drag to your computer.
  9. Wallah! You just backup your smartphone files.

How do you kick a benign user off your system?

Info.Tech, Linux System Administration Comments Off on How do you kick a benign user off your system?

There’s probably an easier way, but I do this:

See who’s logged into your machine — use who -u:

root@alphaone:~# who -u
root     pts/1        2016-12-08 11:02   .          7953 (
camilord pts/2        2016-12-08 10:59   .          7625 (

Laugh at their impending disconnection (this step is optional, but encouraged)

root@alphaone:~# echo "HAHHAHAHAHAHA... BYE!" | write root pts/1
write: write: you have write permission turned off.

Kill the corresponding process:

root@alphaone:~# kill -9 7953



MD5 File Hash for C# and PHP

Info.Tech, Software Development, Visual C# .Net Comments Off on MD5 File Hash for C# and PHP

I encountered again on how to generate MD5 File Hash in C# and compare generated C# file hash to PHP md5_file() function. This is to make sure the file integrity are maintained on copying files. It took me while to find the function but I know I have created one of my previous projects. And this time, I will post here in my blog for future use. Hehehe!

For C#:

public static string md5_file(string fileName)
    FileStream file = new FileStream(fileName, FileMode.Open);
    MD5 md5 = new MD5CryptoServiceProvider();
    int length = (int)file.Length;  // get file length
    byte[] buffer = new byte[length];      // create buffer
    int count;                      // actual number of bytes read
    int sum = 0;                    // total number of bytes read

    // read until Read method returns 0 (end of the stream has been reached)
    while ((count = file.Read(buffer, sum, length - sum)) > 0)
        sum += count;  // sum is a buffer offset for next reading
    byte[] retVal = md5.ComputeHash(buffer);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < retVal.Length; i++)
    return sb.ToString();

For PHP:


echo md5_file($filename_with_fullpath);


Hope this helps…

Thanks to:

Publishing your App to Google Play & Apple Apps Store

Android, iOS, Mobile Development Comments Off on Publishing your App to Google Play & Apple Apps Store

Now, I have completed my app, well tested and working good. So my experience and how I did it.

Google Play

Note: I assume you have subscribe Google Developer Console and paid the necessary payments.

First you need to generate/create your app key or certificate by using java keytool. In windows, you need to add the java bin path on  Windows environments path, see below:


So once you have configure this, go to you App working directory and cast the command:

$ keytool -genkey -v -keystore [APP_NAME].keystore -alias [APP_NAME_ALIAS] -keyalg RSA -keysize 2048 -validity 10000

Now that you have the key, then compile your APK with the key (most commonly called as keystore)… Note: you must be in your App working directory.

$ cordova build android --release -- --keystore="[FULL_PATH_OF_YOUR_KEYSTORE]" --storePassword=[KEYSTORE_PASSWORD] --alias=[APP_NAME_ALIAS]

That’s it, then you need to go to platforms/android/build/outputs/apk/ and look for android-release.apk and upload it on Google Developer Console. Easy enough!


Apple App Store

To be honest, apple is more daunting process. Ok, here it comes.

First of all, you need to complete the following in Apple Developers:

  1. Register to Apple Developers at
  2. Purchase Apple Developer Program for NZD 150.00
  3. Assign or invite admin and developers in your account (developers profile)
  4. Create iOS certificates for iOS Development and iOS Distribution
  5. Then create identifiers (App ID)
  6. After creating the developers profile, certificates and identifiers you may now export this to bind it to your app.
  7. In Xcode, go to Preferences then select Accounts and select your apple ID
  8. At the bottom of the dialog, click the cog icon and click Export Developer Accounts then save this file as .developerprofile  at platforms/ios/ folder of your app project

Note: You cannot test your app to real device without the above mentioned.

So if you have it all setup, you can now test run your app to your real device for testing and then publish it.

To test it on real device, plugin your iPhone/iPad to you iMac or Mac machine then on Xcode you should see your device.

Screen Shot 2016-07-13 at 1.11.37 PM copy

Just select the device and click Play button to test your app to your real device. Easy!

Now let’s proceed on publishing the app, we have two steps here. Create the app profile in Apple iTunes Connect and compile/build the app…

Apple iTunes Connect

  1. login to using your developer’s apple ID
  2. go to My Apps
  3. create new AppScreen Shot 2016-07-13 at 1.49.59 PM
  4. just tick iOS and fill up the form. In SKU field, you can fill up anything, something unique. It would be good name like if you app name is TestApp and the version is 1.0.0 then you can put SKU field as TestApp1.0.0
  5. Then click Create and will bring you to more fields to fill up. Just complete the mandatory fields.

Compile/Build the App

  1. In your app working directory, cast the command cordova build ios
  2. Open Xcode, open your App project then go to Product and select Clean
  3. Make sure you have select an iOS device in the build dropdown
  4. Then go to Product and select Archive
  5. After archiving, a dialog will popup Screen Shot 2016-07-13 at 1.29.31 PM
  6. You can click “Upload to App Store” to upload your app
  7. Click export then select the appropriate option for you appScreen Shot 2016-07-13 at 1.30.02 PM
  8. Just follow the steps and it will do it for you
  9. Once done, go to then click the App you want to publish then select the app that you just uploaded via Xcode Archive.

Important Reminders:

  1. All App Bundle ID should be the SAME on the following:
    • Xcode > Project Property > General > Bundle Identifier
    • Apple Developers > Identifiers > App ID entry
    • Apple iTunes Connect > My Apps > App entry
  2. Make sure the app bundle identifier is unique
  3. Every release, don’t forget to update your build and version

I think that’s it! Good luck…


Conclusion: I found Android as the easier way to publish app. Less hassle, not so strict and really simple.

Apache Cordova: Hybrid Mobile App

Android, iOS, Mobile Development Comments Off on Apache Cordova: Hybrid Mobile App

I was very interested learning mobile app development since 2013 but I never got a chance to learn it. When I was working at QCIT last 2013, I tried Android Native but wasn’t successful creating an app. On 2015, I attempted another study on mobile app and I did create my first android app but it was just a webview ( hahhahaa..

For those years, I never get a chance to focus learning mobile app development because my company was demanding most of my time. But this year, my company is starting to embrace mobile apps for our main system. So I volunteer to develop the app and my workmate suggested to use Apache Cordova to support multi-platform. Since I know HTML + CSS + JavaScript, then it would be my advantage.

So here are my experiences on learning Cordova and would like to share to the world who might experience the same issues that I have. Alright, let’s get started.

My objective is creating an app for android and iOS. If you are a windows or linux user, in compiling iOS app, you need a Mac to do this. But if you’re a Mac user, then you’re an awesome guy.

so first, you need to install “npm” & “nodejs” or you can follow the steps at

Once, done installing the basic stuff, all you need to do is create a project (click here). Assuming you have read the link, you must have created the project and added the platforms (android & iOS).

Then you can start coding using HTML + JavaScript. It would be easier if you use CSS frameworks. I did tried few frameworks such as:

So far Bootstrap works perfectly for my project. I tried Framework7 but it doesn’t work well. I like the design/layout but too many issues. I tried jQuery Mobile, but it didn’t play well too. Bootstrap stand among other CSS frameworks, very simple, lite and compatible on most devices/OS.

Warning: don’t use alert() function in javascript as some devices does not support this and your app will crash.

So assuming you’re done with your app, then you need to build it. First, I will talk about android. When I was developing my app, I was actually using Windows 7. So my AVD settings is (see image below):

Screen Shot 2016-07-09 at 11.30.57 PM copy






But on my Mac AVD is different, looks like this:

Screen Shot 2016-07-09 at 11.33.20 PM copy










So once you have done creating the AVD, you can run your app. But first, start your AVD first then build & run your app. Note on windows user, you need set your Java and Android path or else you will get an error. So for linux and mac, all good to go. So all you need to cast is:

$ cordova emulate android

Then you will see your app in the emulated android.

So for the iOS side of it which took me while to figure it out the issues I encountered.

First, you need XCODE in your mac or cast a command in CLI “xcode-select –install”.

Once you have XCODE installed, go to you project working directory and cast the following command:

$ sudo npm install -g ios-sim ios-deploy --unsafe-perm=true

Note for possible errors you will encounter:

  1. if you will not include the –unsafe-perm=true argument, you will get permission error and so on.
  2. Make sure all your iOS app icons are properly sized and follow Cordova icon guideline (click here). Fail to do so, will give you error about AppIcon content error…
  3. Make sure your iOS app icons are 72dpi (web standard). Fail to do so, will give you error about AppIcon content error…

If you mess up something, just cast the command:

$ cordova platform remove ios
$ cordova platform add ios

Just add and remove for some other issues and it would be fine.

So if you succeed the command “sudo npm install -g ios-sim ios-deploy –unsafe-perm=true” then you will see something like:








Then you will need to run your Xcod, go to File > Open Project and go to your app working directory then go to platforms/ios directories and look for *.xcodeproj then click open. Select what device you want to emulate, in my case I selected iPhone 6 and run my app. Result are shown below:





















That’s it… easy? 🙂 You’ll get it.. it’s not that bad…

Bash: File Server Hourly Backup Script

Administration, Info.Tech, Linux System Administration Comments Off on Bash: File Server Hourly Backup Script

Been creating bash backup scripts but every time I create for the new server, I forgot the commands and research again. This time, I’m gonna save it in my blog so that I will search it in one place. Hehehe…


cd /backup/

DATE=$(date "+%Y%m%d%H%M%S")


# find -mtime -1 | xargs cp -t --parents "$BACKUPNAME/"

find /jdrive/ -mmin -60 -exec cp --parents '{}' "$BACKUPNAME/" \;

tar -zcvf "ibackup/$BACKUPNAME.tar.gz" "$BACKUPNAME/"

rm -rf "$BACKUPNAME/"

# file and delete all files smaller than the specified filesize
find /backup/ibackup/ -name "*.gz" -size -500 -delete

# file and delete all files that are older than 45 days
find /backup/ibackup/ -mtime +45 -type f -exec rm -rf {} \;

Here you go… My home-brewed incremental backup script. We usually use duplicity but it failed us twice. So, we are using now both my home-brewed script and duplicity. Oh! by the way,  I used this script for our file server only.

POLi Payment Gateway: Why you shouldn’t use this option…

Info.Tech, Security Concerns, Web Development 2 Comments »







The first time I saw POLi payments was in Qantas Airlines New Zealand. The moment I saw asking for my Bank Credentials, I click back button ripoli_3ght away.

Why? Because POLi is asking your Access Code/Username and Password of your bank, your BANK CREDENTIALS! Imagine your hosts file has been altered by malware or any virus or your network has been hacked or exploited or your ISP has been hacked or whatever above your internet line has been altered pointing POLi payment gateway’s DNS to different server, you will be giving your bank access to the hackers. And POLi is a direct access to your bank account (your entire assets in your bank) and initiate the transaction right away. Unlike credit cards, if your card has been expospoli_2ed, then the risk is JUST your card, not your whole account in the bank then you still have time to call the bank the close it right away.

So my advise never use POLi payments. I’m not against the company or the people who created it but I am just against how the implementation or how it works.

OCZ SSD is the worst SSD!

Computer Hardware, Info.Tech Comments Off on OCZ SSD is the worst SSD!

ocz_ssdOK, let me share this to the world how bad this OCZ SSD.

Bought 3 OCZ SSD months ago. First SSD is where my OS installed, Windows 7 Professional. 2nd SSD is my MySQL Database, 3rd SSD is my Development Source Codes.

OS SSD crashed first after 6 months and undetectable. Then the vendor replaced the SSD with Samsung and works fine until now. Next is the DB SSD crashed after 9 months. Dev SSD crashed after 12 months.

How can you rely on these OCZ SSDs? I lost tons of files because of these SSDs. If you want SSD, buy Intel SSD or Samsung SSD and they are the reliable brands. Never again be fooled with those other SSDs. Too much promising yet they are all crap!


Facebook Messenger Desktop

Info.Tech, Software Development, Visual C# .Net Comments Off on Facebook Messenger Desktop

Just for fun I made a Facebook Messenger Desktop version. This can be used if you don’t want to use the browser and would be ideal when you’re at work. 🙂

The application can minimize at the taskbar notification area which will be hidden away from your other opened applications.

Disclaimer: This is not the official facebook messanger desktop version but this is just framing facebook web-based messenger.


WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in