Reid Miller

[yet another geek's blog]

My Experience with "Mission Impossible: Hardening Android for Security and Privacy"


There's an excellent guide written by Mike Perry at the Tor project blog titled Mission Impossible: Hardening Android for Security and Privacy. My article will be a summary of my experience following the guide, departures I made from his instructions, and hurdles I encountered with my devices. My main departure from the guide is that I don't push all my traffic through Tor. However, the guide's recommendations to use Cyanogenmod, Privacy Guard, an application firewall, and filesystem encryption go a long way toward taking control of information coming from your Android device.

My Hardware

I have an Asus Transformer (TF101) tablet and HTC One Mini (M4) cell phone that I may provide specific details for, though my notes should mostly be generic.

Fix Overheating Compaq CQ50 Laptop

I was given a Compaq CQ50 laptop which was overheating over the course of 30-60 minutes and reaching a temperature where overheating protection kicked in and the laptop abruptly shut down.

Thumbnail of CPU and GPU temperatures before fix

A quick search for a solution turned up many results. Many revolve around the GPU overheating specifically. I combined a few approaches. I could not find a technical manual for the internals of the CQ50 but there are a few disassembly videos on YouTube. I liked a video posted by ThibaultServices best. Disassembly to get at the relevant parts was more involved than I anticipated: CPU heatsink/fan, GPU heatsink, and rear case plastic. Here is a picture of everything once it has been disassembled.

Compaq CQ50 disassembled on a table

I made three changes which I feel were effective.

Memory concerns using the Database Toolbox in MATLAB on 64-bit Linux

Until recently my experience with large matrices of data within MATLAB had been limited to data that I preprocessed into CSV files via other programming languages and imported into MATLAB. I've been working on an application for one of my graduate courses that clusters ~30000 individuals based on ~60480000 timeseries measurements stored in a MySQL database. It seemed best to use the Database Toolbox to query the database directly.

Some Annoyances After Updating to Ubuntu 13.10

Several years ago I promised myself that I'd be content with Ubuntu Long Term Support (LTS) releases. Fussing with bi-annual standard releases was OK during university, but now my sensibilities have changed. I don't need bleeding edge. I only need reliability and productivity.

I couldn't tell you why I decided to upgrade my Ubuntu 12.04 LTS installation to Ubuntu 13.10 a couple days ago. I should have listened to the LTS promise I made myself. It all started with an ill-timed power failure during the middle of dist-upgrade.

Migration from Drupal 6.26 / CiviCRM 4.1.6 to Wordpress 3.5.1 / CiviCRM 4.3.3

Recently, other technical volunteers were pushing for Wordpress at an organization I do volunteer work for. This article is not Drupal vs. Wordpress. I found an enlightening Smashing Magazine article during our discussions which addresses that topic. At the end of the day, the simple fact that a vast majority of the volunteers were pushing for Wordpress was enough to justify the switch. It allowed others to take on more responsibilies. Ask any strapped volunteer, more help is worth it.

However, I was tasked with a lot of the finer points of migrating article content smoothly and switching our CiviCRM database over. I'll catalog my process in the hopes that it may help others in a similar situation.


  • Drupal 6.26
  • CiviCRM 4.1.6


  • Wordpress 3.5.1
  • CiviCRM 4.3.3

Common memory leaks in Java

My co-worker and I were debugging a bug in my codebase, which implements Axis1, the other day. We ended up finding an issue with a static implementation of Vector in org.apache.axis.utils.XMLUtils.

Syncing Windows client to Ubuntu Linux Server in Unison

 Unison is an excellent cross-platform file synchronization utility.

  1. My brother and I were syncing large binary files, so version control systems are out of the picture.
  2. We also wanted updates to come from either his or my desktop without having to place the desired files on the server for a uni-directional synchronization like rsync.
  3. It needed to be a cross-platform utility.

Consuming Exchange Web Services with Java using Glassfish and Metro: Creating an email message with MessageType

Moving in the “slowly but surely” spirit of my Exchange Web Services article series, my fourth article will address the most common task in messaging: creating an email message. My example below is mostly a translation of the C# example in an MSDN article titled Creating an Exchange Web Services Client Application.

Consuming Exchange Web Services with Java using Glassfish and Metro: Creating an ItemType Data Access Object

In my previous article, Consuming Exchange Web Services with Java using Glassfish and Metro: Using ExchangeServicePortType with Authentication Credentials, I went through cleaning up the creation of Exchange Web Service stubs. Then we put our generated code to good use and created an authenticator to return an ExchangeServicePortType with authentication credentials. This ExchangeServicePortType will serve the the base for all future SOAP requests. Each method of ExchangeServicePortType generates the corresponding SOAP request and returns Java objects populated by the SOAP response.

However, due to the xsi:nil error mentioned last article, we will be overloading each method of the ExchangeServicePortType. There may be other techniques out there, please comment and share them with me. This is the most straightforward way I've found to do it though.

At the end of this article we will create a data access object which returns a List of ItemType objects representing the items in your Inbox.

Consuming Exchange Web Services with Java using Glassfish and Metro: Using ExchangeServicePortType with Authentication Credentials

In my first article, Consuming Exchange Web Services with Java using Glassfish and Metro: Creating the Web Service Client, we left off having created a corrected exchange.wsdl, messages.xsd, and types.xsd files. From those files, we generated the web service client and copied the .java source files from the build into our project's source directory.

Consuming Exchange Web Services with Java using Glassfish and Metro: Creating the Web Service Client

Recently I was given the opportunity to write an online email client at my job. Throughout the application, at key points of contact, we will integrate message creation for students to seamlessly contact instructors, advisors, classmates, fellow club members, etc. Also, we wanted a full email client worked into the application. My point is, there are good reasons for writing the email client. This is not just some pipe dream.

Technology Background

Here's the technology background for this work:

Email Server: Exchange 2007 SP1 (with Exchange Web Services enabled)
Programming Language: Java 1.5 or later
Application Server: Oracle Application Server 10g (production)
  Glassfish v2 (local development)
Web Service Stack: Glassfish Metro (guide for deployment on OC4J later)
Development IDE: NetBeans 6.1 (guide for Eclipse 3.4 later)

Upgraded to Drupal 6

I upgraded the site to Drupal 6.3 today. I lagged a little behind but I was waiting for all my modules to be at least development releases and preferred that a majority be stable releases. So far the only one I've had trouble with is my Flickr module which was at alpha1 when I installed it. Hopefully I can get it back up and running soon. I rather enjoyed it.

My Graduation Countdown

I graduate on Saturday, May 17, 2008 at 2:00pm from the University of St. Thomas with a degree in Quantitative Methods and Computer Science, and a minor in Journalism and Mass Communication. Each day I remind my co-workers of the number of days till my graduation. They joked that I should have a millisecond countdown. So running through May 17, I will have a graduation countdown in the right hand column of my blog.

Wubi - It works. It's easy. It's Ubuntu Linux.

I am a big Ubuntu fanboy. The Ubuntu (and other *buntu flavors) developers really got the distribution right. I have 3-4 different Ubuntu-related RSS feeds in my reader. One of them told me about Issue 8 of Full Circle Magazine, a free Ubuntu magazine. Inside there was an article on an interesting new project, Wubi, an Ubuntu installer for Windows.




Running Drupal cron jobs on GoDaddy hosting

05/31/2010 Update: Between the time I originally posted this article and now, Drupal has continued to grow in popularity and GoDaddy's drop-in applications are super-easy. Although the article is still valid for those who've done their own installations, if you're starting from scratch then using the drop-in applications may be easiest.

Running Drupal's cron.php in GoDaddyI [heart] Drupal. And for those of you interested in aggregating content, you know that Drupal needs a regular cron job (a scheduled task) to update your aggregated items. The easiest way to do this is schedule a curl All Drupal sites have that cron.php file by default and when you run it, any cron jobs configured in your Drupal project will be run.