Technology
10 Back To School Android Apps Not On Everyone’s List
by Jon Westfall on Aug.23, 2010, under Android
So there are a lot of Android Back to School app lists floating around (like this one and this one) and most pull out the same old “back to school”-esque apps (Dropbox, Evernote, etc..). Now these aren’t awesome apps – they’re just way too common to be “discovered”. Here’s my top 10 list of apps – many you might not have ever heard of. You can find them all in the Market, just search by name:
10. LauncherPro
Because the stock launcher is just not as cool
9. AnyPost
Sometimes you want to shoot a cool picture out to everyone through ping.fm – Twitter followers, facebookees, gchat status watchers, that guy you know who uses buzz, etc..
8. App Protector Pro
So you can let others play with your phone without wondering if they found that sextmessage
7. c:geo
If you don’t geocache, you might want to start – it’s a fun way to explore your new campus (or your old one).
6. CallTrack
When was the last time I called Mom asking for money? When was the last time I called Mom period?!? Or when Mom says “You never call”, you can reply “Yes, I do, 2 Wednesdays ago about 9 PM”.
5. Google Translate
Know what the foreign kids are saying
4. PicSay
Because funny stuff will happen, and this can add the extra laugh to make your facebook photo post hilarious!
3. StopWatch (
Sometimes you need to time stuff, in lab classes, in real life, etc…
2. ThrottleCopter
A quick game, that’s addicting, and free.
and Jon’s #1 App:
1. 3Banana Notes
Easily sync up stuff on your phone to computer. For example, jot down that hotties phone number while chatting in class, sync it, and later when your phone is dead, you can call her and ask her to bring you to a power source!.

Android’s Sneaky SIM Security
by Jon Westfall on May.24, 2010, under Android, Articles, Technology
Android has more than a few oddities lurking inside its code, and this is one I recently found that hopefully will alleviate any worries you may have about your phone if you should ever replace your SIM card.
About 3 weeks ago, on my way to work, my 8 year old T-Mobile SIM card, which had been through about 20 phones with me, up and died for no reason other than old age. I went to a T-Mo store in Manhattan later that day and got a new SIM (for $20) and popped it into my Nexus One. This is when I found that apparently, Android doesn’t like new SIM cards! The phone booted up, told me I’d need to re-enter my Google password, and promptly rebooted. After 3-4 boot cycles, I entered my google password fast enough to satisfy the phone. Once it had my password, the boot cycle stopped. This boot cycling could have been due to a third-party software install or could just have been a fluke – but it hasn’t done it since I popped in my credentials.
Tonight I took out my G1 for the first time since the new SIM, popped my SIM into it and had even weirder behavior – Nothing happened. No Market updates, no sync updates, and NO error messages! The thing didn’t prompt for a password – in fact the only way I knew something was wrong (besides wondering where my e-mail was) was to go into Data accounts in the settings menu and see exclamation marks next to sync status. Since I’m running Cyanogen Mod, and had the previous experience, I popped open the Dev Tools app and cleared my Google password. A few moments later the G1 prompted me for my google password and upon entering it, all was right in the world: Sync started, market downloaded apps, etc..
So there you have it – Android does care about your SIM card, and apparently has some built-in protection for sync’ing new data to your phone if someone should pop out your SIM and put their own in. However this isn’t really showcased, and manifests itself in different ways. If you should need to replace your SIM and find your sync suddenly dead (or a reboot loop), find a way to clear your google password and re-enter it if you aren’t prompted to do so. Hopefully that will fix things!
Hack Usermin to Encourage Users to Read Policy Updates!
by Jon Westfall on Mar.03, 2010, under Technology
Had an interesting situation at work recently that required a bit of hackery to make sure that everyone on the research team was on the same page. Since 95% of the actual work (everything but documentation) occurs through a central Usermin-powered portal, I had the idea to build a “nag” screen that I could periodically make users acknowledge before they’d be allowed into the system. Ideally, the system is used infrequently, only when policy changes are done that require everyone to know the new policy immediately. The system is pretty simple:
1. User Logs In, and if updates are present, they are shown the update page.
2. User reads the update, and enters a “codeword” on the update page. This is so the updates can be securely displayed (on our documentation site) while the update landing page remains static.
3. User isn’t bothered again until the next update.
The code isn’t too difficult, so I’ll post it below. Warning though: Webmin/Usermin/Virtualmin are written in PERL, and I’m a PHP sort of person, so this is a mix of both!
Step 1: Modify Usermin to Point to Landing page
The system works by having a file written to a non web-accessible server directory once the person enters the correct codeword. When I need to issue a new update, I simply delete the username-named files and everyone needs to enter a new codeword. Below is the code that you’ll have to put in Usermin’s miniserv.pl file, which on my system is located at /usr/local/usermin-1.420. You’ll also want to decide first where you want to store your “nag” files. I put them under a special directory in /var, however you can put them anywhere you’d like that the webserver can read/write to them.
The following code is inserted around line 3532, right after the post-login script statement (&run_login_script…):
#Check Nag Screen, see if we need to nag user (Added by JW on 3/2/2010)
local $nagfile = “/var/nagfiles/” . $authuser;
if (-e $nagfile) {
syslog(“info”, “%s”, “Successful Nag Check for $authuser from $acpthost”) if ($use_syslog);
}
else {
my $url = “https://landingpage_server/updates.php?user=” . $authuser;
&write_data(“HTTP/1.0 302 Moved Temporarily\r\n”);
&write_data(“Date: $datestr\r\n”);
&write_data(“Server: $config{‘server’}\r\n”);
&write_data(“Location: $url\r\n”);
&write_keep_alive(0);
&write_data(“\r\n”);
}
You’ll want to modify the URL and the nagfile location to suit your own installation. Once you save the file and reload Usermin, it will take effect.
Step 2: Create the Landing Page
I wrote a pretty simple PHP page that shows some text (using an include file) and a form, and then writes a file with the user’s username to the directory of interest. It also logs the interaction for auditing purposes. Below is my code, see the inline comments on what you need to edit/change
<?php
// Jon’s Nag Screen for Usermin. Usermin will redirect people here if Jon clears out the /var/nagfiles/ directory of username files.
// This file shows the update notice, and asks users to read and agree by entering the codeword, which is changed with each update!// CHANGE this to whatever you want the codeword to be.
$codeword = “swimmer”;if (isset($_POST['submit'])) {
// Do Form Processingif ($_POST['codeword'] == $codeword)
{
// Good, right codeword, now write the login file and redirect them// CHANGE this to the directory you’re putting the nag files into. make sure that directory is writable to Apache!
$filename = “/var/nagfiles/” . $_POST['user'];
$ourFileHandle = fopen($filename, ‘w’) or die(“can’t open file”);
fclose($ourFileHandle);
$ourFileHandle = fopen(‘/var/nag.log’, ‘a’) or die(“can’t open file 2″);
$logentry = “Valid Codeword Entry by ” . $_POST['user'] . ” at ” . date(“F j, Y, g:i a”) . “\n”;
fwrite($ourFileHandle, $logentry);
fclose($ourFileHandle);// CHANGE this to be the location of your Usermin installtion.
header(“Location: xyz.com:20000″);
} else {
// Bad, wrong codeword!
$ourFileHandle = fopen(‘/var/nag.log’, ‘a’) or die(“can’t open file 2″);
$logentry = “Invalid Codeword Entry by ” . $_POST['user'] . ” at ” . date(“F j, Y, g:i a”) . “\n”;
fwrite($ourFileHandle, $logentry);
fclose($ourFileHandle);
print(“Wrong Codeword! Please hit the back button in your browser and try again!”);
}
}
else
{
// Show Info Screen
?><!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”><head>
<meta content=”en-us” http-equiv=”Content-Language” />
<meta content=”text/html; charset=utf-8″ http-equiv=”Content-Type” />
<title>Important Updates</title>
<style type=”text/css”>
.style1 {
text-align: center;
font-size: xx-large;
font-family: Arial, Helvetica, sans-serif;
}
.style2 {
text-align: medium;
font-size: large;
font-family: Arial, Helvetica, sans-serif;
}
.style3 {
text-align: center;
}
.style4 {
font-family: Arial, Helvetica, sans-serif;
}
.style5 {
font-family: Arial, Helvetica, sans-serif;
font-size: x-large;
}
</style>
</head><body>
<p>IMPORTANT!</p>
<p>New Lab Policies have recently been issued. In order
to access the Usermin, you must do the following:</p>
<p>1. Visit <A HREF=”http://update.page.com/page.html” target=_blank>This Page on the Wiki</A> detailing the changes.</p>
<p>2. Enter the codeword (provided on the page above) in the box
below and press Submit. You will then be redirected back to Usermin where you should
now be able to log in.</p>
<p><font size=2>Note: By entering the valid codeword and pressing submit, you affirm that you have read the updates, will follow the policies, and are not a zombie.</font></p>
<form method=”post”>
<div>
<span><strong>Codeword: </strong> </span><br />
<input name=”codeword” type=”text” /><input name=”user” type=”hidden” value=<?=$_GET['user']; ?>><br />
<br />
<input name=”submit” type=”submit” value=”submit” /></div>
</form></body>
</html>
<?
}
?>
That file can be named updates.php (or whatever you want) and placed in a location that users can access.
Step 3: Create Directories, Set Permissions, Test
The last step is something you may have done already – create directories to house your files (/var/nagfiles in my example) and set the permissions to allow the Apache Webserver (and Usermin) to write to those directories.
Once the system is running, adding updates is a pretty straight forward process: Update your update page, change the codeword in updates.php, and delete all of the username-named files from /var/nagfiles. Users will now get the nag screen again after they login for the first time after updates. You may also want to periodically purge the log file, depending on how busy your usermin portal is.
While not explicitly written, this hack probably will also work with Webmin. Be sure to be careful with automatic updates to those products though – you may have to re-integrate your code into miniserv.pl after each update.
If this has been a useful document for you, please let me know, I’d love to see other people implementing creative solutions to balance ease of use and ease of policy notification!
I’m Posting From The MVP Summit, and Sorry, There Will Be No Meaningful Content
by Jon Westfall on Feb.17, 2010, under Technology
So I am at the MVP Summit, in a room with a bunch of interesting people, and sadly I can’t give you any updates on the content (Other than to say Jack Cook is talking about suits right now, and no, suit isn’t a slang word for anything). But here are a few things I can talk about:
- It’s great to see everyone as usual
- Don Sorcinelli can apparently morph into a laptop bag. Be careful when he does this.
- The move to Bellevue is a nice change in terms of location, eventhough we aren’t able to bum around downtown Seattle.
- The reception last night (The “Welcome Reception”) was horribly executed. The room was way too small, the food kept running out, and there was no way to hold a conversation with more than 2 people without blocking someone or something.
- Everything is supposed to be 100% green, which is great from an ethical standpoint, despite all the gas that was used to get me here from NYC.
I’ll try to get some pics for the blog, although I didn’t bring my camera (for some reason I’m not sure; but I do have a phone with a camera in it!). But for now I’ll just show this picture from Windows Phone 7 Series (.com):
Being a Geek Means Sometimes Having To Explain Yourself
by Jon Westfall on Jan.06, 2010, under Technology
Got an interesting phone call this morning from a company that sells Voice over IP (VOIP) hardware and accessories on a Business to Business basis. They had my name in their customer database and were quite confused as the company name I had listed was simply “Jonathan Westfall”. The conversation went something like this:
Sales Rep: Hi, this is X from Y, and I was wondering if your previous voice over IP hardware purchases were for yourself or a company
Me: Uh… OK
SR: Yes, I know it’s an odd question, but you’re in our database and your company is just listed as “Jonathan Westfall”, and we were wondering if you had purchased the equipment for a company.
Me (realizing the purchases they are referring to): Oh yea… I think you’re talking about some Voice over IP equipment I purchased last year… it was for personal use.
Now at this point I probably should explain myself. About 2 years ago I read an article talking about Asterisk, and thought “Hey, that sounds kinda cool”. I had been interested in phone/computer interactions for a long time (ever since trying to turn a computer into an answering machine, with software I never got working quite as well as I’d liked). So I did a bit of research on Asterisk and decided to teach myself how to set it up and, by extension, how Voice over IP worked. I took some of my geek “fun money” and spent about $200 on various hardware (that I still have in case I need to wire up an office worth of phones) and devoted an old machine to be my Asterisk box. I put phones in practically every room of a small ranch house (connected over wireless bridges as I didn’t have Ethernet hookups in the rooms), built custom equipment boxes that packed a wireless bridge, voice over IP box, and power strip into a compact package, and hooked up my Asterisk box to the outside world using a service called CallWithUs. After around 3 months I realized that the setup wasn’t exactly needed in a household of 2 people and a cat, and the bandwidth on my Sprint wireless card (which I was using for internet) wasn’t sufficient to run VoIP with any good quality. So I packed up my equipment and decommissioned the server. It was a great experience – I learned far more about VoIP than I knew before (and thus could wire up an office if I felt like it now…), and had a lot of fun for $200. Haven’t played around with it much lately so that’s why it wasn’t on the top of my mind when this sales rep called. So back to the conversation:
SR: Uh… so the purchases were…
Me: Yea, just for me. I’m a geek, and I got interested in VoIP a few years ago and decided to teach myself how it worked. So those are the purchases you’re seeing, they were just personal use.
SR: Well.. that’s actually pretty cool. You have no idea how valuable those skills you learned are going to be!
Me: Yes, I hope so. So I’ll keep your company in mind if I ever need anything, thanks for calling.
I didn’t have the heart to tell her that this geek was also a psychologist who was quite happily working in a profession quite far away from VoIP phones (Other than the fact I have a VoIP phone in my desk drawer at work right now… just for fun).
Give Yourself A Present: Less Commercial E-mail
by Jon Westfall on Dec.18, 2009, under Technology
So how do you give yourself this present of less e-mail? You Unsubscribe to legitimate commercial e-mail! And this is the best time of the year to do it. Why? Well because everyone you have any sort of relationship is trying to sell you something this time of year. So you’ll have plenty of opportunities to take the 2 seconds per e-mail item to open it, scroll to the bottom, and hit “unsubscribe” or “manage my e-mail preferences”.
Now I’m sure some people think “Yea… they’ll just send me more!”. While this was true of illegitimate SPAM e-mail in the past, legit companies (the ones who are likely to make it to your inbox) should honor an unsubscribe request. I’ve been designating 2-3 weeks a year “unsubscribe” weeks where each commercial e-mail I see that I’d rather not in the future gets the unsubscribe ax. Over the last year I’ve noticed a marked decrease in e-mail traffic. Most weekend days I get only 5 or so e-mails a day, all legitimate and all directed just at me. On Weekdays, I’ve seen commercial traffic decrease from 3-4 pieces a day down to perhaps 1.
So for the next week go through and unsubscribe (and report illegitimate SPAM as usual to your provider or filtering software). You’ll enjoy the lower inbox counts all year long!
Awesome Simple Tool: File Thingie
by Jon Westfall on Nov.02, 2009, under Technology
Hey, here’s a nice gem I found this morning. On a few servers of mine I keep files for each domain under one central tree (e.g., /web/domain1.com , /web/domain2.com, etc..). Most of these files are static HTML (just for quick domains or inside jokes), and whenever I need to edit them I fire up notepad or an HTML editor, download the page. Update it. Then upload it back. A lot of work! So last week I started exploring ways to manage multiple domains off of one CMS. However this was a bit complex when really all I needed was an online file manager that could edit things in a WYSIWYG editor.

Today I found File Thingie, which offers just that. I installed it under the web root (/web/) and can now access all my static HTML files easily, making minor edits. It offers password protection, and TinyMCE support for editing. If you have a set up like mine and want a quick manager/editor, check it out!
Using Mail Merge With Custom FROM: Addresses in Word/Outlook 2007 or Word/Entourage 2008
by Jon Westfall on Oct.29, 2009, under Technology
The following was written for my lab group at work, however it strikes me as something everyone may benefit from. Mail Merge is an awesome tool, and this makes it much more useful when a group shares an incoming e-mail address that replies should be directed to (e.g., sales@ or info@ etc.. instead of the individual who sent the mail). I’ve had to sanitize some of the screenshots to remove private information, however it shouldn’t detract from the overall message!
You’ll need:
- A copy of a mailing list, in either excel format or CSV.
- Microsoft Word
- Microsoft Outlook or Entourage
- An SMTP username & Password to send out through SMTP Servers that require encryption.
First-Time Setup
You’ll do these steps once per computer you use this on. I’ve broken them down by Outlook 2007 or Entourage 2008, with screen shots. The basic process is…
Outlook 2007:
- In Outlook, click on "Tools" then "Account Settings"
- Click New to set up a new e-mail account
- Choose "Microsoft Exchange, POP3, IMAP, or HTTP", and click "Next"
- Click "Manually configure server settings or additional server types", and click "Next"
- Choose "Internet E-mail" and click "Next"
- Fill out the information in the box as is appropriate using your group e-mail and a valid username and password that can authenticate to the SMTP server. Then click "More Settings"
- After hitting "More Settings", choose the "Outgoing Server" tab and configure as follows (Assuming you need SMTP Auth):
- Then click the "Advanced" tab and configure as follows if you need to specify SSL or TLS:
- Click "OK", click "Next", then click "Finish". On the accounts box, select the new POP3 account you just created and click "Set as Default" so that the box looks like this:
- Hit "close". You should now be set to use Mail Merge. Be sure to change your default back when done (See below for this step under "cleanup")
Entourage 2008
- In Entourage, click on Tools, then Accounts.
- Click on New, then Mail
- Click on "Configure Account Manually"
- Choose "POP" then click "OK"
- Configure your account like the setup below, putting in your SMTP username and password:
- Click on the button under SMTP Server that reads "Click here for advanced sending options"
- Configure as follows depending on your server, the following is for one that requires TLS encryption:
- Click OK, and return to the Accounts window. Select your new account and choose "Make Default". You’ll want to change this back later:
- Close the Accounts window, you should now be ready to mail merge!
Running the Mail Merge (After Setup)
Word 2007/Outlook 2007
- Open Word, Choose "Mailings" tab from the Ribbon, and click "Start Mail Merge", Then choose "Email Messages"
- Next choose "Select Recipients" and then "Use Existing List". In the dialog that pops up, select the CSV file containing the mailing list:
- Clicking on "Edit Recipient List" should show you something like this:
- Click OK. Now you need to use "Match Fields" to make sure that title, firstname, lastname, and e-mail address are all matched up properly (The file in my example doesn’t have headings on the rows, so the first row values (my information) is what Word feels is the best identifier of each field):
-
With everything all matched up, you can now type your letter including Merge fields as you’d like. Here’s my example:
-
After you have everything written, click on "Preview Results" and you can see the "live version" that your readers will receive:
- Once you’re satisfied, hit "Finish and Merge", then "Send e-mail messages"
- In the box that pops up, find the e-mail column in the the "to:" drop down. Enter a subject as well, and hit OK
- Mail Merge will rev up and spit a bunch of files into your Outbox in Outlook, and these will eventually go out to the masses
- Cleanup: Remember to go to tools -> Account Settings and change the default back to your usual email account instead of the account you created in the "First Time Setup" above!!
Word 2008 / Entourage 2008
- Open Word 2008 and choose "Tools" then "Mail Merge Manager"
- In the window that opens, choose "Form Letter" under "Select Document Type", then under "Select Recipient List" choose "Open Data File"
- Chose the CSV file that contains your mailing list.
- Drag and drop placeholders where you’d like them in your mailing. Here’s my example:
- Under "Preview Results" click "View Merged Data" to see the resulting e-mails
- Click "Generate e-mail messages" on the "Compete Merge" tab. NOTE: If Entourage is not your default mail client, this button will be grayed out. To make Entourage your default mail client, go into Entourage preferences and click the button that says "Make Entourage my default mail client".
- Fill in the appropriate values in the Mail Recipient dialog, and click "Mail Merge to Outbox":
- Because the world is a scary place, Entourage pops up a warning message like this below. Go ahead and let it send your mail since you know what script sent it!
- Cleanup: After the mail merge is done, you’ll want to go to Tools -> Accounts and set your e-mail default back to your original account so that you send as yourself and not as the group e-mail address you used for mail merge.
So there you have it, mail merge to any particular list you have, with a custom FROM header.
Migrate A Google Sites to a Google Apps Installation
by Jon Westfall on Oct.21, 2009, under Technology
After much gnashing of teeth and cries of angst, I was able to move a Google Site to a Google Apps Installation. In the end, it was actually really simple…
The first approach was to use the Google-Sites-Liberation tool, published recently on Google code, which looked very promising. However I soon found 2 issues with our particular domain (This one and this one) which unfortunately prevented me from using the tool. I also didn’t have much time to devote to debugging it. Desperate, I pieced together the following method through a few inferences and forum posts. It’s pretty simple: Copy the site from your account to your apps account!
You’ll need to be an “owner” of the site you’re trying to migrate to do this, and will probably need GMail enabled on the destination apps installation, here are the steps:
1. Log into the google site you want to migrate and bring up sharing properties.
Next, share the site to your Google Apps account’s e-mail address
2. Log into your Google Apps GMail and you should find an e-mail telling you that you’ve been added as an owner to the original site:
3. Click on the link (you may want to sign out of your original GMail account here so that you enter the site as your Apps identity). You should see your Apps e-mail address in the upper right, not your GMail address. If you see the GMail address, sign out and then click the link again from your Apps GMail.
4. click on “More actions” then “Manage Site”
5. Click on General in the left link bar.
6. On that page, click “Copy This Site”
7. The dialog box for copying should be for your Apps domain, not for regular Google Sites, it should look something like this (With your apps installation name where I’ve blacked out):
8. Click Copy Site (Unchecking revisions if you have a lot of them, and site members if you don’t want them), and you should now have an exact copy of the Sites site in your Apps installation!
9. You’ll probably want to close off editing of the old site to the new, if applicable to you. Now pop some champagne and enjoy!
Add Facebook Friend’s Birthdays to your Calendar Automatically
by Jon Westfall on Oct.11, 2009, under Articles, Technology
Lifehacker recently published an article detailing a few ways to help remember the things you actually care about, as opposed to those you don’t but remember anyway (such as the MVP of the 1996 All-star game). One of the little gems that was tucked in the article was the application fbCal which integrates your Facebook Birthdays and events with the calendar of your choosing. I have this now set up on my Google Calendar and am extremely happy as it’s A) always up to date and B) putting information where I’ll actually look for it, not where I don’t look (e.g., a sidebar on facebook.com)
To get it set up, all you need to do is install the fbCal application to your facebook account and allow it offline access (So you’ll have two prompts to hit “OK” to when installing):
Once it’s installed, you can then choose how to export your calendar. The tool exports in the standard iCal format, so it’s easily imported into desktop PIMs like iCal on the Mac and Outlook on the PC. It not only includes birthdays, but can include events as well:
Since I use Google Calendar, I clicked on the Google Calendar link and was taken to my calendar, then asked if I wanted to add the new fbCal calendar to my list of calendars. It adds as a shared calendar, which means that it will automatically update whenever I add a friend (Or I guess if a friend changes their birthday!). It gave a very long and annoying name to the calendar, so I changed that by drilling into settings and changing the name:
Now on my Google Calendar main page, I have the FB Birthdays calendar, which I can toggle on and off as desired:
All of this took around 10 minutes, and the feed took about an hour (for some reason) to show up in my calendar. Now it’s working just fine and I thought it was cool enough to share here! Happy calendaring!





























