Restore Twitter Drafts from Android Backup

In this guide, I will show you how to restore your Twitter drafts from an android backup. You will need root access for this, as the database is stored in a protected area of the file system. If you don’t have root access, there are many tutorials on the Internet. Gaining root access is beyond the scope of this guide, as every device is different.


The Backup
For this guide, I will be using a backup that was made using adb (Android Backup). Depending on the method you used to backup, the process may be different. Essentially, we need to grab the Twitter drafts database. The location of the database is: /data/data/ The file we need will have drafts.db in the name. If you have multiple accounts, you will have multiple drafts.db files, you can use to identify the correct one. This is how to extract it using Android Backup Extractor

Screenshot 2015-02-09 15.39.24-First, you need to download Android Backup Extractor & extract it’s contents.
-Then run the following command in command prompt. (obviously you will need to change parameters to match your file locations):

java -jar abe.jar unpack NAME_OF_BACKUP.ab NAME_OF_BACKUP.tar

Screenshot 2015-02-09 14.20.36-This will then create a .tar file of your backup that can easily be extracted using 7zip or winrar.
-Once you extract the tar file, you can transfer the database to your device. The drafts database will be in /apps/<twitter-id>-drafts.db


Restoring Backup
Now this part is where it gets a bit tricky. We need to copy the drafts database to the phone & set permissions so the app can read/write to the database. To get the file on the device, you can transfer via an SD card or via the web. I uploaded mine to dropbox & downloaded on the device using the web browser. Once the file is on the device, you will need to replace the current drafts database with the backup. This can easily be done using File Explorer.

Screenshot_2015-02-09-14-26-57-Make sure twitter is installed & you have logged into your account.
-Install File Explorer & the Root Add-on on your device
-Using File Explorer, copy the drafts.db to /data/data/<twitter-id>-drafts.db
-This will overwrite your current drafts, so make a copy if you want it saved
Screenshot_2015-02-09-14-27-58 Screenshot_2015-02-09-14-27-07-Set the Owner & Group to the twitter app by tapping & holding on the drafts file & choose ‘Security’. This will enable the app to read & write to the database


Screenshot_2015-02-09-14-36-10Then you should be able to launch the twitter app & your drafts will be restored. And, I should have mentioned earlier… If you just want to view the drafts without restoring them, you can use DB Browser for SQLite to browse the drafts.db.




Use OpenStreetMap on your Garmin GPS

OpenStreetMap (OSM) is a collaborative mapping wiki that anyone can make edits to, just as long as you register with the service. This means that maps can be frequently updated. Edits to OSM only take up to 2 hours to be available to everyone, whereas Garmin maps are updated on a yearly basis. Not to mention the Garmin maps are a paid upgrade. OSM is completely free!

The OSM data is not in a format that can be used by the Garmin device so we will be using pre-packaged OSM maps from These pre-packaged maps are updated on a weekly basis but since OSM is open, you are free to create your own map packages. If you’d like to create your own, more info can be found on the OSM wiki.


Here’s how to put OSM on your Garmin:

1. Format your SD card using FAT or FAT32
2. Create a folder on your SD card called Garmin
3. Download the gmapsupp.img file for your country from
4. Place the gmapsupp.img file in the Garmin directory
5. Insert the SD card into your Garmin device
6. Turn on your GPS

Your GPS should automatically load the new map. If not, you will need to go to Tools/Settings/Map/Map Info & select the OSM map. It’s also probably a good idea to disable the default map if areas overlap.


Guide: Install Lollipop on Samsung Rugby Pro/LTE (SGH-I547)

i547_600x600_xlarge_cfIn this guide, I will walk you through installing Android 5.0 Lollipop on your Samsung Rugby Pro/LTE. This will also work with the SGH-I547c (Canadian model). We will be using a custom Lollipop ROM that was made by Motorhead1991 on the XDA developer website. If you want more info about this ROM, you can check out the XDA thread.


Disclaimer: This involves writing to the flash memory of your phone. One mistake could make your device unusable. Please do not attempt unless you are sure you know what you are doing. Also, this WILL wipe your user data. So make sure to backup!

I should also mention that this ROM is still a work in progress, so not all features are working yet.


Gaining Root Access
The first step you need to do is gain root access. Towelroot by geohot makes this extremely easy. On your device go to & click on the lambda symbol (λ) to download the towelroot apk. Run the apk once it’s finished downloading. You may be prompted to go into settings & allow third-party apps. Click the ‘make it rain’ button & towelroot with then root your device. It should only take a few seconds. If your device restarts, it means that root has failed & you should try again. Then install the SuperSU app from the play store. Open it to make sure it updates it’s binaries & to verify it is working.


Preparing SD Card
Next, let’s prepare the SD card with the files that you are going to need. This can be done on a computer, or directly on the device. If you are going to do it directly on the device, you will need a file browser to move the downloaded files to the SD card. The app I used is FX (File Explorer), but any file browser with copy & paste will work. Here are the files you will need:

TWRP- (Custom recovery) (Used for rooting. Not necessary if you don’t plan on rooting the new ROM) (Custom Lollipop build for SGH-I547) (Package containing Google Apps)


Installing TWRP
The next step is to install TWRP. TWRP is a custom recovery that we’ll be using to backup the current state of the device, as well as flash the custom lollipop build. The easiest method, I found, was to flash TWRP using Flashify because it can be done directly on the device.

  1. Install Flashify on your device from the Play Store. (We will use this to flash the TWRP custom recovery image)
  2. Flash TWRP recovery image using the file on your SD card that we downloaded earlier.
  3. Once TWRP has been flashed, reboot your device into recovery. (Can be done within the flashify app or by powering down & pressing the volume up, home, & power buttons all at once.)


Screenshot_2015-01-17-14-42-34It is important to backup your data!!! I can’t stress that enough! In order to install the new lollipop build, you WILL need to wipe your device. So backing up is crucial. It will also give us the chance to restore should something go wrong. To backup, choose the backup option in TWRP. If your SD card is big enough, I would suggest backing up everything. If not, you can backup one by one & offloading to your computer in-between.


Flashing ROM, GAPPS, & Rooting
Screenshot_2015-01-17-14-41-44Screenshot_2015-01-17-14-42-29Now for the final step, flashing the custom ROM & GAPPS. We will be using TWRP for this as well, so if you’ve gotten out of it, reboot your device into recovery mode. Before installing, wipe your device by going to Wipe > Factory Reset > Swipe to Factory Reset. Now go back to the main TWRP screen & click install. Change the source to the external SD card. Choose the exodus-vanir zip. Then add the gapps. And if you want root access on the new install, add the SuperSU zip as well. Swipe to install!


Lollipop on Samsung Rugby Pro SGH-I547cInstallation shouldn’t take too long. Once it is finished, reboot your device. It may seem to get stuck on the Vanir boot screen, that is normal. It should eventually finish booting & you will be running Lollipop on your Samsung Rugby Pro. Now go play outside! ;p


Bohd’s 2015 NYE House Party Mix

Track List:

  1. Rachel Row – Follow the Step (Justin Martin remix)
  2. JackLNDN – And What
  3. Mr FijiWiji – Let Me Out
  4. Meramek – Stepping Stones
  5. EDX – Breathing
  6. SCNDL – The Munsta (Nitro Fun remix)
  7. Insan3lik3 – Bliss
  8. The Beatangers – What’s That Sound
  9. Mausi – My Friend Has a Swimming Pool (The Magician remix)
  10. Audien – Iris
  11. Kaskade – Lick It
  12. Hot Mouth – Totally Worth It
  13. Savant – Bananonymous
  14. Savant – Wildstyle
  15. Neelix – Coloured Light (Simon Patterson remix)
  16. NOK – Write a Song

Use Proxmox VE To Turn Your Old Computer Into A Virtual Machine Server


If you are a computer geek like me, chances are you have a few computers lying around just collecting dust. Why not put them to good use and create a virtual machine server out of them?

You could install Ubuntu or CentOS, setup VirtualBox and configure some virtual machines and waste time configuring scripts; or you could install Proxmox VE, setup some virtual machines and be done with it. Proxmox VE is an open-source, Linux based, virtualization platform. It is free to use and very simple to install. Just download the Proxmox VE ISO, burn it to a disk, and run the setup on your machine. Installation only takes about 3-5 minutes and it is very easy to add virtual machines and appliances. Just login to the web interface from any computer on the network and upload an operating system image to the Proxmox VE system. They also make it easy to install an appliance from one of their virtual appliance templates.

Another thing that is really great about Proxmox VE is clustering. Thats right… clustering. With Proxmox VE you can setup multiple servers on the network and put them in a cluster to provide centralized web management for all the servers. With clustering, you can also move virtual machine instances from one server to another to another to another and so on to get the optimal configuration and the most performance out of your hardware.

Oh, and BTW, you can also schedule backups of your virtual machines.

Internet Status Indicator – Arduino Project

In this project, I made a device that shows internet status using LEDs. I used red and blue LEDs because it went well with my overall design, but you may use any colours you like. Keep in mind that different LEDs have different forward voltage and current and may require different resistors. To calculate the resistance needed, check out

This device works by the arduino sending a ping command to a program called GoBetwino every 90 seconds. GoBetwino then pings the specified server and returns either a 0 or -1 to the arduino. 0 meaning the server was pinged succesfully and -1 meaning it failed. The arduino will then turn on the right colour of LEDs indicating the status of the internet. I have also programmed the arduino to send an email command to GoBetwino if the internet has been out longer than 1 minute. I have wired all of this into my custom computer case that I made from two Ikea picture frames.

Here is a schematic for this project using multiple LEDs:

Here is a simpler schematic using only 2 LEDs:

Here is the arduino sketch:

// This script is to be used in conjuction with GoBetwino to check
// if the internet is working on the machine the arduino is attached
// to. Get GoBetweeno at
// Variables:
const int ledRed =  6;  // pin for Red LED
const int ledBlue =  10;  // pin for Blue LED
const char PingCMD[] = "PING";  // command configured in gobetwino for pinging
const char EmailCMD[] = "EMAIL";  // command configured in gobetwino for emailing
const int DefaultPingInterval = 90000; // how often should the ping command be excecuted
const int netOutTime = 60000;  // minimum internet outage time for email to be sent
const char emailAddy[] = "";  // the email address to send emails to
// Nothing below this line should be changed unless you know what
// you are doing.
int incomingByte = 0; // for incoming byte from serial
int FirstLoop = 1;  // for indicating first loop
int waitingforSerial = 0;  // for indicating if script is waiting for response from serial
int PingInterval = 0;  // for storing ping interval
int LastWasBlue = 1;  // for determining if last color was blue
unsigned long currentTime = 0;  // for storing current time
unsigned long timerStart = 0;  //  for storing the time at which the timer started
void setup() {
  Serial.begin(9600);  // begin serial at 9600 baud
  pinMode(ledRed, OUTPUT);  // set ledRed pin as output
  pinMode(ledBlue, OUTPUT);  // set ledBlue pin as output
void loop(){
  currentTime = millis();  // set current time to millis
  unsigned long timePassed = currentTime - timerStart;  // get time difference between currentTime and timerStart
  if (FirstLoop == 1)  // if script is on first loop
      digitalWrite(ledRed, HIGH);  // turn red led on
      digitalWrite(ledBlue, LOW);  // turn blue led off
      FirstLoop = 0;  // set FirstLoop to 0
      PingInterval = DefaultPingInterval;  // set ping interval to default
    if (waitingforSerial == 0)  // if waitingforSerial is 0
      delay(PingInterval);  // delay script by PingInterval
      Serial.print("#S|");  // send ping command to serial
      Serial.print(PingCMD);  // "    "     "     "    "
      Serial.println("|[]#");  //"    "     "     "    "
      waitingforSerial = 1;  // set waitingforSerial to 1
      if (Serial.available() > 0)
        incomingByte =;  // read the incoming byte
        if (incomingByte == 48)  // if server was pingable
          if (timePassed >= netOutTime)  // if timePassed is greater than or equal to wait time
            if (LastWasBlue == 0)  // if last color was not blue
              Serial.print("#S|");  // send email command over serial
              Serial.print(EmailCMD);  //"    "     "      "     "
              Serial.print("|[]#");  //"    "     "      "     "
          digitalWrite(ledBlue, HIGH);  // turn blue led on
          digitalWrite(ledRed, LOW);  // turn red led off
          PingInterval = DefaultPingInterval;  // reset PingInterval to default value
          LastWasBlue = 1;  // set LastWasBlue to 1
          waitingforSerial = 0;  // set waitingforSerial to 0
          timerStart = 0;  // reset timerStart
        if (incomingByte == 49)  // if server was not pingable
          digitalWrite(ledRed, HIGH);  // turn red led on
          digitalWrite(ledBlue, LOW);  // turn blue led off
          PingInterval = 5000;  // lower ping interval to 5s
          waitingforSerial = 0;  // set waitingforSerial to 0
          if (timerStart == 0)  // if timer has not already started
            timerStart = millis();  // set timerStart to current time
          LastWasBlue = 0;  // set LastWasBlue to 0

sketch_jun28a.pde (3.77 kb)
Schematic_bb.svg (416.32 kb)
Schematic_schem.svg (94.70 kb)
Schematic-Simple_bb.svg (253.87 kb)
Schematic-Simple_schem.svg (65.96 kb)


DIY Computer Case using Ikea Ribba Picture Frames

Last weekend, I made a trip to Edmonton to go shopping at Ikea. While I was there, I picked up a couple of picture frames from their Ribba line to make a computer case that I can show off on my wall.

As soon as I got home, I started working on this project. I started by taking the frames apart. I then mounted the motherboard and hard drive to the thick, cardboard backing. After that, I put some blue LEDs in to give a cool glowing effect. But since the motherboard was too thick to mount in just one picture frame, I joined two frames together using a couple of hinges. I think the final product turned out great! Here are some pics:


Idea courtesy Hak5

Hak5 – Building a photo frame computer case, your iPhone jailbroken picks, Multi-monitor PC setups…