Motorola Droid Turbo – Disable QI charging popup overlay

I’ve had a Motorola Droid Turbo for almost a year now and one of my biggest complaints is that while wirelessly charging on a QI charger a overlay would popup every few seconds even if the screen was unlocked. Today I noticed a system app running called “Inductive Charger” so I thought maybe I can somehow mess with that app to disable the really irritating popup overlay.

Steps to disable overlay

  1. Goto Settings->Apps
  2. Swipe to the “All” tab
  3. Find the app called “Inductive Charger” and open it
  4. Click the “Disable” button

You’re done, your phone will still charge on a QI charger but you wont get that irritating popup.

PostgreSQL: Change column casting type to another type

Because there have been a few times that I have needed to adjust a column in PostgreSQL from one type of casting to another I am going to put it here so I can find it again and for anyone else that may be looking to do the same thing.

ALTER TABLE table_name ALTER COLUMN column_name TYPE INTEGER USING column_name::INTEGER

Guessing the next occurrence in a date/time sequence

Analyzing a sequence of dates to determine the best guess for when the next event will accor is something best left to statistical modeling tools, but I’m going to try and show you a very basic way to do exactly that using PHP and an array of date/time stamps.


First off the data/time stamp sample array:

$time_stamps = array(
    "5/10/2013 9:30",
    "5/11/2013 9:50",
    "5/12/2013 10:20",
    "5/13/2013 10:59",
    "5/14/2013 11:22",
    "5/15/2013 11:51",
    "5/16/2013 12:28",
    "5/17/2013 12:57",
    "5/18/2013 13:13");

Sense the object of this exercise is to guess the next occurrence we are going to need a function that analyzes the difference between the times and then gives us an average based on that difference.

 function get_average($time_array)
 {
      $total = "";
      $last = "";
      $count = count($time_array);
      for($t=0;$t<$count;$t++)
      {
           $time = $time_array[$t];
           if($t == 0)
           {
                $last = $time;
           } else {
                $diff = get_diff($last, $time);
                $last = $time;
                $total += $diff;
           }
      }
      $average = ($total/($count-1));
      return round($average);
 }

 function get_diff($time1, $time2)
 {
      $t1 = strtotime($time1);
      $t2 = strtotime($time2);
      $diff = ($t2 - $t1)/60;
      return $diff;
 }

In the above function “get_average” you will see the for loop running through the array of date/time stamps and calling the function “get_diff”. The first time the loop runs it sets the varable $last to the first date/time stamp, this is to give us a starting point otherwise when we ran the “get_diff” function it would return an error or a number based on a date out of our sample rage and would therefore make are guess extreamly inaccurate, instead of just somewhat being inaccurate. The get_diff function compaires the last date/time sample and the current date/time sample in the array and returns the differance in minutes, that time is then added to the $total. Once all the items in the array have been calculated the $total is divided by the count of the date/time stamp array minus one (1), we minus one (1) because the first value of the array is not calculated, it is just a starting point to calculate the difference of the next value in the array.

 function guess_next($date_array)
 {
      $diff_avg = get_average($date_array);
      $last_date = new DateTime(end($date_array));
      $last_date->add(new DateInterval('PT'.$diff_avg.'M'));
      $next = $last_date->format('m/d/Y H:i');
      return $next;
 }

We now have the average increase in time to base our prediction on and we can use the above function to tie it all together. We take the last date in the date/time stamp array and add the average to that date and then format it to a readable format and we are done. The next occurrence will most likely occur around “05/19/2013 13:41”.

Obviously this isn’t going to be super accurate but it will provide a “best guess” based on the data provided. If anyone has a better algorithm for guess the next occurrence in a date/time array I would love to see it.

Thanks for reading!


Full code:

 function get_average($time_array)
 {
      $total = "";
      $last = "";
      $count = count($time_array);
      for($t=0;$t<$count;$t++)
      {
           $time = $time_array[$t];
           if($t == 0)
           {
                $last = $time;
           } else {
                $diff = get_diff($last, $time);
                $last = $time;
                $total += $diff;
           }
      }
      $average = ($total/($count-1));
      return round($average);
 }

 function get_diff($time1, $time2)
 {
      $t1 = strtotime($time1);
      $t2 = strtotime($time2);
      $diff = ($t2 - $t1)/60;
      return $diff;
 }

 function guess_next($date_array)
 {
      $diff_avg = get_average($date_array);
      $last_date = new DateTime(end($date_array));
      $last_date->add(new DateInterval('PT'.$diff_avg.'M'));
      $next = $last_date->format('m/d/Y H:i');
      return $next;
 }

 $date_stamps = array(
      "5/10/2013 9:30",
      "5/11/2013 9:50",
      "5/12/2013 10:20",
      "5/13/2013 10:59",
      "5/14/2013 11:22",
      "5/15/2013 11:51",
      "5/16/2013 12:28",
      "5/17/2013 12:57",
      "5/18/2013 13:13");

 print(guess_next($date_stamps));

EC2 Proxy/VPN

Today I ran across a post talking about using Amazon’s EC2 service as a VPN to secure your wireless connection when on a public wi-fi. I read through the how-to and figured I’d write up my much easier and quicker way of doing basically the same thing, plus I think it maybe a bit cheaper.

  1. Create a EC2 instance, you don’t need anything fancy just the very basic.
  2. After you’ve created a EC2 instance and downloaded your key pairs setup your ssh tunnel on your system by doing the following:
    1. Download PuTTY
    2. Download the PuTTYGen tool
    3. Convert the amazon EC2 key pair you downloaded to a ppk file.
    4. Under the Sessions section put the default user name for you EC2 instance followed by the EC2 instance URL in the “Host Name” section. (exp. [email protected])
    5. Click and expand the “SSH” section and click on the “Auth” section
    6. Under the “Auth” section click the “Browse…” button under the “Authentication parameters” and find the key pair that you converted to a ppk file using PuTTYGen.
    7. Under the “SSH” section click on the “Tunnels” section.
    8. Under the “Source port” input a random port like 7070.
    9. Choose the “Dynamic” radio button and leave the “Auto” radio button selected.
    10. Click back on the “Session” section and under the “Saved Sessions” give your session a name and click the “Save” button.
    11. Now click the “Open” button at the bottom of the window and you should now have a SSH tunnel to your Amazon EC2 instance.

Using the command line SSH:
– Open the tunnel by using a command like this –> ssh -C2qTnN -D [Random Port] ec2-user@[EC2 Instance URL] (exp. ssh -C2qTnN -D 7070 [email protected])

Now that you have the tunnel running all you have to do is point your browser/software to use the SOCKS proxy 127.0.0.1:[Random Port You Selected]. (exp. 127.0.0.1:7070)

Anti-Virus Test

Today I decided to test out a number of the anti-virus scanners that are floating around the internet. I didn’t do a very in-depth test, just gathered a archive of 3765 viruses and tested each anti-virus scanner to see how many of the viruses it found and how many files it scanned.

Note: Some of the viruses had files archived in side of them so the scanned number will sometimes be higher then the number of files I listed above.

Microsoft Security Essentials (Scanned: 3799, Found: 3668)
* Quick scan.

Kaspersky Anti-Virus 2010 (Scanned: 3851, Found:3680)
* Requires reboot after install.
* Slow scan.

Sophos Anti-Virus (Small Business) (Scanned: 3772, Found: 3631)
* Is designed for a management environment (10+ systems) and not a SOHO environment.
* Bad scan reports.

Sunbelt Vipre (Scanned: 190, Found: 13)
Don’t know what happened with this but it wouldn’t scan more then 190 files.
* Quick install.
* Requires reboot after install.
* By default it doesn’t scan inside archives.
* Can’t scan archives inside other archives.

F-Secure Anti-Virus (Scanned: 3757, Found: 3698)
* Requires reboot after install.
* Minimal interface
* If system has low memory it disables email scanning and other advanced process monitoring by default.

Avast Pro (Scanned: 3796, Found: 3644)
* Requires reboot after install.
* Quick install.
* Really quick scan.

Panda Cloud Anti-Virus
I stopped the scan after letting it run for about 10 min. and it had only scanned 233 files and only found 150 infections.
* Quick install
* High CPU usage.
* Requires network connection
* Very very slow scan.

ESET NOD32 (Scanned: 3739, Found: 3622)
* Quick virus database update.
* Very fast scan.

ClamAV for Windows (Doesn’t support scanning one file or directory)
* Easy install
* Can’t scan individual files or directory’s

Avira AntiVir (Scanned: 3773, Found: 3716)
* Quick scan.
* Bit high on system resources

AVG Anti-Virus (Scanned: 3774, Found: 3702)
* Somewhat slow install.
* Low system foot-print.