This Site & Me
I'm a technologist, mobile specialist, experienced software developer, author, public speaker & an SAP employee. My thoughts, ideas, rants, comments & most of the code you'll find here are my own. Feel free to use any of this, but be sure to identify the source.
Topics You'll Find Here
This site contains content on a bunch of different topics including Mobile, Mobile Development, IBM Lotus Domino and other topics that strike my fancy. I've written a couple of mobile development books, so mobile and mobile development tend to dominate.
Like What you See?
Like what you see here? Found something useful?
If you benefited from anything I've posted here, please think about buying one of my books or taking advantage of one or more of the ads on the page.
- Category: Miscellaneous
For years, I've had this problem in Microsoft Outlook where Outlook will populate only the country field for select contacts. I've never done it purposefully, but somehow either because of some weird sync process or other reason, I had a bunch of contacts with no address, only a country set for them.
Figure 1 – Michael Palin Contact Card (NOT his real contact information)
Anyway, this has been bugging me for some time and I've been too lazy to fix this manually. So, with all the Outlook integration code I've been doing lately, I decided I'd write an app that whacks the Country fields value (there are 4 of them: mailing, home, work and other) from every Outlook contact.
I've posted the Delphi project code to GitHub. The app basically opens a memo field and processes all of the contact records, blanking out the country if it's 'United States of America'. I got the code working then cleaned up my contact list.
Thought about it a bit and realized that I could have done a better job with the code. I made separate blocks of code to check each country field individually, turn out that there isn't (that I could find) a way to retrieve a contact record field value by name, so I don't think there's a better way to do this. Also, whenever the app whacks a country field, it saves the record. I could have easily tracked whether a change was made and save only once, but I didn't.
- Category: Miscellaneous
As I mentioned in my previous post, I'm helping a friend with some Microsoft Outlook integration and came across the need to access the list of meeting and email categories defined within Outlook. Microsoft has done a great job of documenting the object model for Outlook, so it's quick work in Delphi to open an OLE connection to Outlook and get a listing of the Categories. The code's below, but I also posted the complete project to GitHub.
Here's the code:
category, outlook, ns: OLEVariant;
i, numItems: Integer;
// initialize a connection to Outlook
outlook := CreateOLEObject('Outlook.Application');
// get the MAPI namespace
ns := outlook.GetNamespace('MAPI');
numItems := ns.Categories.Count;
output.Lines.add(Format('Found %d items', [numItems]));
if numItems > 0 then
for i := 1 to numItems do
category := ns.Categories.Item[i];
// category.Name is the name of the category
// category.CategoryID is an internal, unique ID for the category
output.Lines.add(Format('%d: %s: (%s)', [i, category.Name,
The output object is a TMemo component on the app's main form, so it is used to list all of the categories when the app initializes. The app doesn't do anything with the categories, this is just an example of how to retrieve them.
- Category: Miscellaneous
Until recently, I've always kept my main set of contacts on my personal mobile device and used Exchange ActiveSync to synchronize it with my mobile device. When I joined Forrester, I decided to keep my work stuff separate from my personal stuff. So, rather than have all of my personal contacts available to me while at work, I let my work account sync my work PIM data to my device through its normal means and used a separate process to sync my person PIM data to my device as well.
Since I carry an Android device, I looked around and found an open source solution called Go Contact Sync Mod (http://googlesyncmod.sourceforge.net/) that works pretty well. I could have the sync run automatically, but for now I'm running it manually. One of the things I noticed when I run it is that it was showing an error indicating that it had found empty calendar entries in Outlook. I didn't know I had empty calendar entries nor did I know you could create empty calendar entries, but apparently my pst file had a bunch of them.
I looked around for a while and didn't find a solution for deleting those empty entries, and I couldn't 'see' them in Outlook, so I decided to write some code to solve the problem. I'd been helping a friend with some Outlook automation, so I had the basis of what I needed to make this work. I'm a big Delphi developer, although I'm pretty upset with Embarcadero right now, so it gave me a chance to dust off my Delphi skills and write some code.
I'm not going to go through everything here, but I've posted the code to GitHub at https://github.com/johnwargo/Kill-Empty-Outlook-Calendar-Entries. Basically you can open the project in Delphi then build and run it, or you can use the pre-built executables I've included in the repository. Enjoy!
- Category: Microcontrollers & Single Board Computers
My son and I finished assembling our Million Color Flashlight http://makezine.com/projects/million-color-hsl-flashlight/ on Friday night, so I was cleaning up my workshop last night and decided to assemble something I had lying around. I've been sponsoring different kickstarter projects for Arduino-based products and a kit I had in my shop was for the RasPiO Duino, an Arduino prototyping board you program by attaching it directly to the GPIO pins on a Raspberry Pi.
Here it is all assembled, it was fun to practice my soldering skills:
I think this would be an excellent addition to any elementary or middle school class on microcontrollers. It allows someone to learn how to program the Arduino with limited computer hardware (just a $35US Raspberry Pi, keyboard, mouse and monitor). I'm going to see if I can come up with an interesting project for this thing soon.
- Category: Miscellaneous
The whole "There's an app for that" was fun for a while, but now it's time for us to be able to do things without needing an app. A good example of an early implementation of this is with Google Now where it automatically figures out that I've parked my car and gives me directions back to it. With no action on my part. Here's an example:
The phone new it was connected to my car as I was driving, it also knows where my home is and that I'm not at it. So it figures that I probably want to be able to get back to my car once I need to go home and simply takes care of that for me.
That's awesome, useful technology that requires no action on my part. That's smart computing if you ask me.
- Category: Miscellaneous
For years I've wanted to be able to use voice to interact with the systems around me. I want to be able to talk to my computer as I'm working and in the house I want to be able to interact with everything in my house as I do things. I'm spoiled, I guess, by all of the Science Fiction books and stories I've read throughout the years.
I first got interested in this when I heard about Wildfire, a virtual assistant that ran within your computer. What was interesting about Wildfire (as I understand it) was that it was essentially a PC on a card that sat inside your PC and processed all voice inputs then acted on them. It was expensive and essentially required that you had two PC's, one inside the other.
I've waited and waited and waited for a system that I could just… interact with. I tried Dragon Naturally Speaking (didn't work for me) and constantly watched the industry for my perfect solution.
Much later, we got Google Now and Siri, both very capable voice interaction systems. They're awesome and very useful, but this isn't something I want on my mobile device, I want it in my surroundings – everywhere. Anyway, with these smartphone-controlled systems, they work great and save me a lot of hassle when I need to get something done and I'm tied up.
The problem is that I have to dig my phone out of my pocket to use it and that's not always possible. I carry my phone with me when I'm away from the house, but generally it's on my desk during the day (while I'm working) and still there when I go 'home' at the end of the day. I'm old, I didn't grow up keeping my phone with me at all times. Also, having worked at BlackBerry and being constantly connected taught me that I should put it down every night and ignore anything on it until the morning. I laugh when people call my mobile at night instead of just using my home number – not likely to catch me on the mobile at night unless I'm out of the house.
Another aspect of this is that I ultimately needed something that anyone in my family could use at any time. My wife doesn't carry her phone around with her when she's in the house either, and we have two children that don't have mobile phones, so we needed something that went with the house, not a person.
Anyway, this is a post about the Amazon Echo so I'd better get to it, right?
Last November, Amazon announced the Amazon Echo – a voice interactive system that sits on a counter or desk and waits to act upon your every command. Simply say "Alexa" (or "Echo") and she'll respond and try to deliver an answer to any question you give her or act upon any command she understands. I LOVED the idea and immediately (like 30 minutes after the announcement) requested access.
I waited. And continued to wait. I waited a really long time (more than a month) and never heard anything back from them. Disappointed.
About a month later, I had some family in town and mentioned the Echo to my brother. He immediately hopped online and requested his Echo. I assumed, wrongly, that since I got on the list day-one, that I'd get my Echo WAY before he did, so I didn't worry about letting him in on my little Echo secret.
Wrong! He got his Echo about a week or so later. Ugh!
Apparently, much to my chagrin, Amazon RANDOMLY selected the people who got the early Echos. I'm not sure they told me that when I requested mine, but who reads those disclaimers anyway, right? So, unlike most any get your new product process and most any product ordering scenario, Amazon didn't deal with requests on a FIFO basis, they simply randomly pulled names out and sent them their Echo's.
This was really frustrating. I wanted something like the Echo for so long and I was finally going to get my chance, but there was pretty much no way for me to get one. Sigh.
I started surveying my friends and found out that many other people got theirs – most having requested theirs after I requested mine.
So, like any able bodied American, I started complaining. I emailed Amazon Customer Service and was politely told that it was a random selection process. Frustrating. I started tweeting about it, making as public of a scene as I could without tarnishing my name to much and within about a week or so, Amazon sent me an email with information that would 'allow' me to order an Echo. I plunked down my order as fast as I could only to learn that my Echo wouldn't ship for months. Everybody else requested theirs, got an email allowing them to order very quickly then got their Echo in no time. For me, I had to wait months for an invite then another set of months to actually receive it.
Not really handled very well by Amazon.
Anyway, I finally got my Echo and I LOVE it. I'll write more about it here when I get a chance.
As much as I'm complaining about Amazon, I understand why they did what they wanted. I'm pretty sure they made me wait to get an Echo simply because I requested one as soon as I learned about it. When testing mass market devices like this, you want some early adopters, of course, but what you really want is a wide sampling of users – and sending Echos to the thousands of first-day orderers would not help them get a sampling of non-technical folks. They had to let word of mouth get interest generated for the everyday people, so they could have a better test.