Posts

Go Paperless at Home with Google Drive

Every day, I’m handling and processing a lot of information that’s coming through that glowy rectangle that we call a computer screen. Even so, I’m having a hard time managing the few pages of paper I get in my mailbox on a daily basis.

Some of that paper is getting lost, important things that I should keep are recycled, graymail is lying on my desk indefinitely (not to mention spam), sensitive information is not handled properly… I don’t want to deal with any of this!

What I’m really targeting here is a paper-less home. I want to be able to scan, archive, shred the physical copy and forget about it… right until I need it where I must be able to find what I’m looking for quickly.

Strategy

I have a multi-function printer that has the ability to scan to a specified FTP location at the touch of a single button. From that location, some software could pick it up and automatically process it.

I evaluated Google Drive against other services and software. Here is what I found:

Feature PDF from scanner Foxit Phantom Evernote* Google Drive*
Storage location Local Local Cloud Cloud
Maximum storage size Local Local +1 GB / Month Up to 5 GB
Maximum PDF size None None 25 MB 2 MB
Maximum number of pages Infinite Infinite 100 10
OCR None Manual Automatic Automatic
Price Free 80$ 5$ / month Free

The text in the PDF must be searchable so I can find what I’m looking for quickly (that’s the whole point). That means the solution I choose must have OCR capabilities.

There is some commercial software that’s doing exactly what I want but those are targeted to businesses and cost quite a lot. Foxit PhantomPDF Standard is the cheapest PDF editor that includes an OCR engine I found but there is no way to automate the process. A real deal breaker.

Let’s be realistic when comparing the remaining two cloud services: most if not all the paper I scan is at most a few pages. Longer documents are processed through a separate workflow and will be stored somewhere else. Evernote would have worked great but the 5$/month premium isn’t justifiable if I don’t use what it has over Google Drive.

How to

I think all the scanners have to way to “one-button scan” to a target machine by now. Check the user’s manual of your scanner or multi-function printer. Once it’s done, all you have to do is to install the Google Drive client on that machine, configure it so your scanner outputs the files in the right folder and you’re good to go!

Once you press the button, the paper will be scanned, moved to the cloud, OCR’ed and archived. Don’t forget to shred the original.

Looking for something? Hit https://drive.google.com, type some keywords in the search bar and you’ll instantly get it. Google magic!

I can finally find that banana carrot muffin recipe, T4 tax form or receipt for that hard drive without going through that stack of paper that’s lying on my desk.

That makes me wonder: how do you manage your paper?

Update

2018-03-21: I moved to Office 365 (OneDrive) since because it has wayyy more features for the same price. I also use the excellent Soda PDF software (and is made in Montreal!)

Home Server Adventure

While servers are at the center of most businesses, there is also one a at the center of our digital lifestyle. A server that can store an ungodly amount of data, automatically backup all the PCs in the house, allow remote access to our files, play any kind of video file, hook up in the television, play video games, stream video files over the web to our mobile devices and make coffee (well, maybe not the latter).

Building and operating such a complex system is an adventure.

I compared solutions such as Drobo (expensive, missing features), Unix-based OS (complicated) and pre-built WHS machines (not scalable). In the end, only a custom WHS PC had the features, ease of use and scalability I wanted in a server.

Geek porn

Hardware

  • Case: Fractal Design Define R3 (a cool, silent and classy-looking case with plenty of room for hard drives and fans)
  • Motherboard: ASUS P8H67-M PRO (built-in HDMI output)
  • CPU: Intel Core i3 2100 3.1GHZ Sandy Bridge 3MB (enough for 1080p encoding)
  • RAM: Corsair 1X4GB DDR3-1333
  • Power: Coolermaster Extreme Power Plus 500W
  • Additional SATA Controller

I already had 8 hard drives totalling 12 TB worth of storage.

OS: Windows Home Server

WHS is really a file server at its core. The users, folders, permissions, backups and remote access components are all accessible from a nice dashboard that’s available via an application that you install on your laptop or desktop PCs.

That same client will handle the backup process for you. On the server side, you specify when you want the backups to be done, and it’ll turn on, perform a differential backup and turn off the machines every night. If you lose something, you can restore files individually or do a full machine restore. The machine restore is done by booting on a USB stick that you create through the dashboard. I’ve actually done it twice and it worked better than I expected.

The server can be configured to send you email alerts when there’s something wrong or needs your attention. Those alerts can range from “this machine is late on its updates” to “3 of my hard drives are melting” and everything in between. Of course, you can choose to ignore some of the alerts. To know I’ll be notified when something breaks puts my mind at ease.

stay-at-home-servers3

Additional software

While the OS already does all the filesharing heavy lifting, there is additional software required in order to transform this file server into a media server.

First and foremost, XBMC. This free, open-source, multi-platform and extensible media center application is the choice of geeks and enthusiasts since 2003. Boxee is based on it. It was the only logical choice.

StableBit DrivePool combines the free space of any number of hard drives into one big virtual pool drive. Additionally, it can duplicate data from one drive to another and integrates in the WHS dashboard much like the now deprecated Drive Bender feature of the previous version of WHS. Thanks to this, I’m not living in constant fear of my data becoming corrupt if I have a hard drive catastrophically failing.

With all those hard drives running constantly all day long, it can get hot in there. That’s why I also use StableBit Scanner to monitor the temperatures and SMART data of the HDDs. It hooks into Bit Flock (a hard drive health analysis tool) to inform you that your drives are unhealthy before they break. I recently installed additional fans in the case because I kept receiving emails telling me the temperature of the hard drives was too damn high. If not for that add-on, things might have gone ugly.

StableBit Scanner for all your HDD monitoring needs

Since I use my iPad a lot, I also found some applications that add iOS “friendliness” to the server:

  • XBMC can receive AirPlay content
  • AirPrint printing with FingerPrint from Collobos Software
  • AirVideo for streaming media files on the iDevices locally and across the Interwebs
  • The XBMC Constellation app for iPhone and iPad is a great way to browse files and doubles as a remote.
  • Having iTunes installed allows me to backup my phone and tablet wirelessly on the server instead of my PC (those backups can take a considerable amount of space, up to 64 GB in my case)

Remote control

I bought a Logitech wireless keyboard that proved unreliable because of the 10′ distance between the television (where the receiving dongle is) and the sofa.

After much trial and error, I finally found a Microsoft Media Center Keyboard on eBay which use an IR receiver that works great… with a little bit of tinkering. By default, you can’t use that IR transceiver in Windows Home Server because it’s based on Windows Server 2008 R2 and the drivers are not available for that OS. Fortunately, they are for Windows 7 x64 and the easiest way to make this work is by following the instructions on this site.

On top of this, I used LM Remote KeyMap and XBMC custom keyboard.xml to assign the multimedia keys of the keyboard to functions that are actually useful.

Automatic content download

Having a PC to play all kinds of files is nice, but it’s no fun if you have to constantly feed it with new files manually. That’s why I tried to automate the content download process as much as I could.

Most Torrent clients have the ability to use RSS feeds to download files. uTorrent has a great tutorial on how to do this and showRSS is a good place to get the feeds. That way I can watch my TV shows when I want, as soon as they are available.

If you’re more into podcasts, using Juice would be the way to go.

Gaming features

I have installed a SNES emulator and the games can be launched directly from XBMC. I can use my Xbox 360 controllers with the help of the Xbox 360 Wireless Gaming Receiver I have. It’s a bit of a pain to install though because the drivers for this thing are not available for the Servers edition of Windows.

Offsite backup

While I’m protected against loss of data in the case of a hard drive crash, the important data to be stored elsewhere if I want protection against fire or natural disasters. CrashPlan is a service that can securely store an unlimited amount of data in the cloud. In my case, unlimited really means 6.5 TB of data but with my 2 Mbps upload bandwidth, it might take some time to do so I’ll be sending the most important data such as my pictures and documents in there first.

Any minute now

Conclusion

That server is still a wonderful ongoing adventure: I try to add a new feature every month or so. For those who are wondering, its name is Spock (you know, because he holds a lot of data and is half file server, half media center) and while it’s not making coffee yet, I’m working on it. 😉

CISSP Groupies @ Plaid CTF

I was invited by Montréal computer security team CISSP Groupies to participate in the Plaid CTF hosted by Plaid Parliament of Pwning (PPP).

While not a security guru or 31337 h4x0r like most of my teammates, I’m very interested in computer security and was really excited about this competition.

We finished 31st which is lower than what the team is used to, but we did represent Canada by being well ahead of our country’s second team (yay! first in Canada! :P).

Props to the Groupies, the PPP team, Foulab and everyone who participated in this CTF! I had a blast, learned a lot and can’t wait for the next event! 😀

Challenges

View the challenges

Download the challenge files

Photo Gallery

Time Lapse

Plaid CTF “Torrents” write-up

Note

This post is about a challenge from the Plaid CTF computer security competition. Check out this blog post for more information about the competition in general.

Challenge (200)

It turns out that robots, like humans, are cheap and do not like paying for their movies and music. We were able to intercept some torrent downloads but are unsure what the file being downloaded was. Can you figure it out?

The file is a wireshark capture containing a torrent transfer between 2 peers. We had to extract the data inside the pieces and sort them in the right order.

Solution

My solution is not as pretty as Squall’s or Michael’s but I’m pretty sure I’m the only one crazy enough that did it with Powershell instead of Python.

[powershell]# Ask tshark
$raw= & ‘tshark.exe’ -r torrent.pcap -R ‘bittorrent.piece.data’ -T fields -e bittorrent.piece.index -e bittorrent.piece.data -E separator=/s

# Split into pieces
$data = @{}
$raw -split ‘[nn]’ | ForEach-Object {
$packet = $_ -split ‘ ‘
if ($data.ContainsKey($packet[0])) { # There are 2 packets for each piece so we concat them here
$data.set_Item($packet[0], (‘{0}:{1}’ -f $data.get_Item($packet[0]), $packet[1]))
} else {
$data.Add($packet[0], $packet[1])
}
}

# Sort and concat
$HexString = [String] ”
$data.GetEnumerator() | Sort-Object Name | Select-Object Value | ForEach-Object {
$HexString += (‘{0}:’) -f $_.Value
}

# Convert hex to byte
$count = $hexString.Length
$byteCount = $count/3
$bytes = New-Object byte[] $byteCount
$byte = $null

$x = 0
for ( $i = 0; $i -le $count-1; $i+=3 )
{
$bytes[$x] = [Byte]::Parse($hexString.Substring($i,2), [System.Globalization.NumberStyles]::HexNumber)
$x += 1
}

# Write in a file
set-content -encoding byte ‘output’ -value $bytes[/powershell]

It was a bzipped file with a mp3 and a key containing the answer: t0renz0_v0n_m4tt3rh0rn.
Fun was had.

Transfer files from iCab Mobile to your PC with Powershell

I’m a big fan of iCab Mobile that I use everyday on my iPad as a Safari replacement. Among other awesome features, this browser has the best HTML5 video downloading I’ve seen.

Unfortunately, the device’s 16 GB fills up quickly and I have to transfer the files some place else quite often.

While I could use something like DownThemAll for Firefox to download the files to my PC, I’d much rather be able to automate the process with a script. This looked like a great opportunity to sharpen my Powershell skills.

[powershell]
<#
.SYNOPSIS
Downloads all the files from a iCab Mobile server
.DESCRIPTION
Connects to a iDevice with iCab Mobile running a Import/Export server and downloads all the files to the specified destination
.NOTES
If the file already exists, it will be skipped.
Files are not deleted on the device once downloaded
.LINK
http://spacebar.ca/?p=3153
.EXAMPLE
.Get-ICabMobileFiles.ps1 192.168.0.101
.EXAMPLE
.Get-ICabMobileFiles.ps1 192.168.0.101:8080 C:UserssimonDesktopicab
.PARAMETER server
The ip address and port of the iCab Mobile server. Default port is 8080
.PARAMETER destination
The local destination folder on your computer, without trailing slash. Will use current folder if none is specified
#>

param (
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
[string] $url=’10.42.13.104′,
[Parameter(Position=1, Mandatory=$false, ValueFromPipeline=$false)]
[string] $destination=(Get-Location -PSProvider FileSystem).ProviderPath
)

Import-Module BitsTransfer
$web = New-Object System.Net.WebClient
if (-not ($url -contains ‘:’)) {
$url = ‘{0}:8080’ -f $url
}
$html = $web.DownloadString(‘http://{0}/Download.html’ -f $url)
$regex = [regex] ‘(?i)&lt;a href=”([^”]*)”&gt;([^&lt;]*)’
$matchdetails = $regex.Match($html)

while ($matchdetails.Success) {
$source = ‘http://{0}/{1}’ -f $url, $matchdetails.Groups[1].Value
$dest = ‘{0}{1}’ -f $destination, $matchdetails.Groups[2].Value
Write-Host (‘Downloading {0}… ‘ -f $matchdetails.Groups[1].Value) -NoNewline
if (-not(Test-Path $dest)) {
Start-BitsTransfer -Source $source -Destination $dest -Prio Foreground
Write-Host ‘Done’
} else {
Write-Host ‘Already downloaded’
}
$matchdetails = $matchdetails.NextMatch()
}[/powershell]

I’m aware that this probably isn’t the best way to do it (I’m looking at you, regex!) but I’m fairly new to Powershell so if you have any comments, please share 🙂