Global hgignore

Rick Borup‘s excellent sessions at Southwest Fox has gotten me using Mercurial in my development. One thing Rick didn’t cover (or maybe I just missed it?) is that you can create a global hgignore file in Mercurial. If you’re working with multiple projects, that’s incredibly handy. You setup the global file just once and it’s used for any repository you have.

You’ll find the global file in My Documents and it’s named hgignore_global.txt. Put all of the standard stuff you want ignored – VFP binaries, *.zip, etc. – in this file and then you won’t have to set that up every time you create a new repository. (Rick has provided a good baseline hgignore in previous Mercurial sessions. Doug Hennig provided one as well in his ‘Lessons Learned with Version Control’ session in 2016.)

The global file works in conjunction with the local .hgignore file – Mercurial will ignore anything that is contained in either file when you attempt a commit. So if one project has some special things to ignore, you just add them to the local hgignore.

Lastly, if you’ve got one strange repository that needs to ignore the global hgignore entries? Mercurial can do that as well.


Remote Access – TeamViewer

Finally got fed up with LogMeIn’s nonsense (price & program changes) and went looking for something else.

Found TeamViewer which seems a good solution. I only need remote access to my computer when on the road at this time, which is free. Seems to work smoothly. As a bonus, it has an Android client. Will look into it’s other capabilities in the future. Interestingly, it’s got a single purchase price rather than a monthly fee.

Looked into MSP Anywhere as well. While the company and product names are really horrible (what does MSP mean? N-Solar? What does that have to do with software?) and the website is equally horrible at explaining their product and what it could do, it has some nice features. It has the standard remote unattended access and an Android client. You can also create a “calling card” (another horrible name) which is an EXE you can create and distribute to clients. They just run that EXE to give you access to their computer. Pretty slick. At $49/month it’s reasonable, but quickly ends up more than TeamViewer’s $800 or so flat price.


Since the beginning of the year I’ve been doing a bit of meditation with

I’ve got what is probably a typical programmer brain – excessively literal, maniacally analytical, obsessively procedural, and more than a bit anal. It’s a great brain for programming, dealing with computers, and just Getting Shit Done. It’s not always the best brain for working with people. Sometimes when it gets rolling on it’s track, it can be difficult to stop that train. Sometimes it jumps the tracks and careens all about the place.

I’m finding the meditation to be really helpful with that. Actually doing the meditation provides a nice sense of calmness that sticks with me through the day. It’s been really helpful with dealing with resistance that pops up in daily life and letting that occur rather than fighting it. It’s been a big help in corralling run-away brain so I can get to sleep at night.

All in all, I’m a bit surprised how much I like it.

(Hi, Todd’s brain here. I firmly reject any trace of New Age hooey-ism, but this stuff is OK.)


I’ve been using the AppendXLSX tool to create XLSX files from my Foxpro data. It works great for the most part, but occasionally I find that it builds the XLSX file but it will be a corrupt file with no data in it. After a lot of fiddling, I figure out that more than 1 date field in the file seems to cause the problem.

This quick bit of code will change the data fields in your table into character.

ALTER table (ALIAS()) Alter COLUMN (FIELD(x)) C(10)


(Does anyone know where AppendXLSX comes from? There’s nothing in the comments saying who the author is and may googling didn’t turn up anything. Whoever your are author, thanks a ton for this tool.)

Word Merges

For years and years now, I’ve been merging Foxpro data in Microsoft Word. It doesn’t always work smoothly and I’ve spent probably more time than I should walking clients through ODBC driver installs, but its always work and, hey, if it ain’t broke – don’t fix it.

Word 2016 broke it. Stupid Word 2016.

Merging Foxpro to Word 2016 gets an “Could not find installable ISAM” error. Crap. I decided it was probably time I stopped trying to merge with Foxpro data (OK, first I tried to Google a solution but couldn’t find one, THEN I decided not to use Fox data anymore).

I decided I’d just convert the Fox data to Excel in my program and then merge that. Works great, except that Word 2016 pops up a “Select Table” dialogue box and asks you to select a worksheet. Stupid Work 2016. DisplayAlerts = .f. does not stop that behavior. Stupid, stupid Work 2016.

A bit of googling turned up that I should pass a select statement to bypass the dialogue box. It looks like this then:

this.o.ActiveDocument.MailMerge.OpenDataSource(lFile,,,,,,,,,,,,”SELECT * FROM ‘Sheet1$'”)

Still not working. Stupid Word 2016. Study the google result a little more carefully, tweak the statement to this:

this.o.ActiveDocument.MailMerge.OpenDataSource(lFile,,,,,,,,,,,,”SELECT * FROM `Sheet1$`”)

Voila! Works. You can totally see the difference right? The Sheet1$ has to have a backwards quote mark around it, not a regular quote mark. WTH is a backwards quote mark? Stupid Word 2016. But it works.

Mailchimp Deadends

My client email list finally outgrew the “just use Outlook” phase and I needed something a little more robust. I turned to Mailchimp, probably because I’m cheap and Mailchimp is “free”, but quickly ran into some problems.

  • It’s free, kind of. You have to pay to use automation emails (for example, someone downloads your product and you want to automatically send them a series of emails over the next few weeks). It’s not super expensive for a small list, but you do end up paying.
  • You can have a series of emails you want to send to a subset of people (say, to all the people who downloaded your product last month but didn’t purchase). That’s easy. But if you want to send that same series again next month, the process of adding new people to that series if pretty clunky.
  • Once you have an automation series live, you can’t change it. You can edit the emails in it, but you can’t add new emails to the series or re-arrange the order of the emails.

1 & 2 I could probably live with, but #3 is a deal breaker. I’ve got a lot to learn about marketing still and need to make changes to things. So what are you using? AWeber? Constant Contact? Convertkit?

Update 5/17/2016

Constant Contact: Requires $45/month package to do email series. I’m still cheap. Next.

ConvertKit: Looks interesting, $29/month for up to 1000 subscribers.

AWeber: Looks interesting, $19/month up to 500, then about the same as ConvertKit. My list is smaller than that right now, gave it a try. Campaign feature is nice, let’s you rearrange to your hearts content. Does what I want – but… it doesn’t tell you what is going on. No numbers for how many subscribers are in the queue or how many people are at what steps. Support says it’s “in beta” and “those features are coming”. Also, discovered a bug within 1 hour – support says “we know about it, working to fix it”. So not a great start so far.

Update 5/25/16

AWeber: Tried to get into it. It just felt “off” – everything was a little hard to work with. Few things in “beta” that didn’t work quite right. Gave up.

ConvertKit: Imported it all to ConvertKit. Difference in price not that big. Based on subscribers rather than lists seems to make more sense to me intuitively which made it all a little easier to work with. Tag system and automation rules are pretty slick and useful. The Landing Page creator is very basic though – if you have any customization at all, you’ll be doing HTML/CSS work (it was some work, but I managed to strip down their landing page to it’s essentials so I could drop it into some of my existing pages). Other than that, pretty happy with it so far.

On-site Blues

I have a client that wanted me to work on-site (“to be more efficient”) which I agreed to. I haven’t done that in probably 10 years at least and overlooked several things that may have made a difference in that decision:

Travel Time: At rush hour, it’s taking just over an hour to get to and from this client. For my 20 hours a week that’s 6 hours of driving – a nearly 25% loss on my hourly rate. Oops.

Traffic: An hour of stop & go traffic is incredibly annoying. People really do this everyday? It’s horrible. I should have charged a daily annoyance fee for this.

Tools: I didn’t realize how many tools I use everyday in my programming and take for granted- large dual screens, the keyboard I’m used to, SnagIt, Thor, GoFish, IntellisenseX, speakers for┬ámusic, etc. The lack of all that makes the programming far less efficient. This lasted only one day – I now drive an hour to get to this client and promptly logmein back to my own computer. Still stuck with a small monitor, an uncomfortable keyboard, and no decent sounding music.

The client is happy though and it’s good to actually meet the people actually using my software rather than just the one person I usually work with.