Showing posts from 2014

1Password earns my money

Passwords are a headache. I tend to reuse a group of passwords, even though it is not good practice. Creating secure, unique passwords for each login I have is too big a burden.I had been aware for some years of password managers, but they seemed like a chore rather than a help. But watching my QA assistant use one to keep track of passwords made it seem worth trying. After a little bit of research I settled on 1Password for Mac.After two months all I can say is “Why do I not do this years ago?”

Objective-C gets a swift kick

Yesterday Apple announced a new programming language called Swift. It seems to be a replacement for Objective-C. For OS X and iOS programmers this is momentous.Every time I’ve tried to do some Objective-C programming, I’ve given up before too long, asking myself, “why am I using this type of language today?” Objective-C is powerful but it is an amalgam of C, C++, and SmallTalk. It uses antiquated notions and is generally painful to work with compared to other modern programming languages. It is a language oriented towards system programming, but is mostly used for application programming.Swift fixes this. Overnight, I read Apple’s e-book “The Swift Programming Language” and I like what I see. It is a modern language, comprehensive, designed to make it easier to produce solid software. I’m amazed at Apple’s ability to keep this language secret for so long. It’s not a language that, like JavaScript, was created in ten days. It must have been in development for a long time, and the peopl…

Gmail 10 years on

It is 10 years since Gmail changed what email could be. It is good to recall just how much Gmail altered what we expected from an email client. Here’s a good reminder.In the end, Gmail ended up running on three hundred old Pentium III computers nobody else at Google wanted. That was sufficient for the limited beta rollout the company planned, which involved giving accounts to a thousand outsiders, allowing them to invite a couple of friends apiece, and growing slowly from there.I recall how excited I was when I got an invite to join Gmail.

How to Write a Spelling Corrector...

…in 21 lines of code.In the past week, two friends (Dean and Bill) independently told me they were amazed at how Google does spelling correction so well and quickly. Type in a search like [speling] and Google comes back in 0.1 seconds or so with Did you mean: spelling. (Yahoo and Microsoft are similar.) What surprised me is that I thought Dean and Bill, being highly accomplished engineers and mathematicians, would have good intuitions about statistical language processing problems such as spelling correction. But they didn't, and come to think of it, there's no reason they should: it was my expectations that were faulty, not their knowledge.I figured they and many others could benefit from an explanation. The full details of an industrial-strength spell corrector are quite complex (you con read a little about it here or here). What I wanted to do here is to develop, in less than a page of code, a toy spelling corrector that achieves 80 or 90% accuracy at a processing speed of …

Why I like using Amazon Web Services

Amazon Web Services (AWS) are fast, cheap, and reliable. Usually you have to pick two out of three, but with AWS I get all three.One of my uses for AWS is a MySQL database for tracking customer sign-ups and log-ins in Poker Copilot. It is a simple way to monitor usage patterns.I’ve been moving around South America for the last ten weeks, running my business from hotel Internet connections. Every time I try to access this database, I find my access blocked, because access has to be granted to an IP address (or IP subnet) on a case-by-case basis. Each time I access the database from a different IP address I need to go into the AWS web-based console, and add my IP address (or to be precise, my CIDR/IP). Then, and only then, can I access the database.It’s annoying. Because it is secure. Well, part of a secure configuration. And I like it. If I set up an MySQL instance myself on a rented virtual server, I’d need to set up this stuff. And I’d do it wrong, because setting up and maintaining …

Learning by Teaching

Java 8 was released this week. I’ve been using an early access version of Java 8 for some months. Indeed, I wrote SeeingStars in Java 8.Java 8 includes many new features, APIs, and additional syntax. Best of all it includes lambda expressions. This is possibly the biggest update to Java ever.I’m finding it tough to learn and remember all the new stuff in Java 8. Then I recalled reading that when you teach a concept you become very knowledgeable on it. That is, teaching something is a good way to learn it very well yourself. So in light of this, I’ve restarted the Java Newsletter. For a while each week I’ll be covering a new feature in Java 8. If you use Java, I recommend signing up here.

Lessons from Apple's SSL Bug

There’s a summary here of Apple’s recent SSL bug in iOS.This sort of subtle bug deep in the code is a nightmare. I believe that it's just a mistake and I feel very bad for whoever might have slipped in an editor and created it.Here's a stripped down that code with the same issue:extern int f();int g() {
int ret = 1; goto out;
ret = f();out:
return ret;
If I compile with -Wall (enable all warnings), neither GCC 4.8.2 or Clang 3.3 from Xcode make a peep about the dead code. That's surprising to me. A better warning could have stopped this but perhaps the false positive rate is too high over real codebases?I fired up AppCode, the world’s best Objective-C IDE, which happens to also support C. I added the code snippet above, and it instantly and correctly highlighted the line “ret = f();” as unreachable code.Lessons I take from this:Use a state-of-the-art IDE that has excellent real-time code analysis tools. Don’t ignore the warnings it gives unless you have a really good …

Doing A/B Testing? Read This

This article claims that "MOST WINNING A/B TEST RESULTS ARE ILLUSORY”. I agree.Please ignore the well-meaning advice that is often given on the internet about A/B testing and sample size.
For instance, a recent article recommended stopping a test after only 500 conversions. I’ve even seen tests
run on only 150 people or after only 100 conversions [5]. This will not work. The truth is that nearer 6000
conversion events (not necessarily purchase events) are needed.andAlmost two-thirds of winning tests will be completely bogus. Don’t be surprised if revenues stay flat or even go down after
implementing a few tests like these.Read it all here (PDF).

From Dental Technician to Board Game Designer

Here’s a profile of Klaus Teuber, who left his unhappy life as a dental technician after creating the most famous and successful board game of recent decades.Pete Fenlon, the C.E.O. of Mayfair Games, said, “Our volume of sales will be such that, over time, [Settlers of] Catan could, in terms of gross revenue, be the biggest game brand in the world.”I’m a big fan of the game. I’ve bought it in 3 languages and I’ve also bought the iPad version.

Poker Copilot now working with nj.partypoker

I forgot to mention this in the most recent update. Poker Copilot now supports nj.partypoker. Here’s what you need to do:Download and install the latest update, 4.22 from Poker Copilot’s Preferences, select “Poker Rooms” and make sure “Party Poker support” is enabledPlay on nj.partypoker and win (hopefully!)Step 3 is optional. :)

How Not To Implement Card-Shuffling Software

This one is a classic, from 1999. I like it. It illustrates the value in openly publishing critical sections of highly important code:Poker is a card game that many people around the world enjoy. Poker is played at kitchen tables, in casinos, and cardrooms -- and more recently, the Web. A few of us here at Reliable Software Technologies play poker. Since many of us spend a good amount of our days online, it was only a matter of time before some of us put the two interests together. This is the story of how our interest in online poker and software security mixed to create a spectacular security exploit.

SeeingStars: Demo Video

Here’s the demo video for SeeingStars:I wrote the script for this on the boat to Uruguay yesterday. On the boat back to Buenos Aires today I tightened it and worked on the accompanying video from a video recording I had made earlier of PokerStars with SeeingStars.Instead of using my own voice with the microphone on my MacBookPro, I decided to try an professional voice-over service, called VoiceBunny. Within an hour I had the voice track recorded on professional equipment by a voice that is apparently “English (England), Middle Age (40-65), Male”. Let’s see how it goes…I’m hosting the video on Wistia, a company I like using for hosting because it allows a lot of fine control over how the video is presented, and has excellent aggregate stats on which parts of the video are most watched, where people drop off, and so on.

SeeingStars: People are downloading it, using it, and giving feedback

I haven’t yet informed the SeeingStars mailing list that it is available. I’m enjoying the soft launch approach: I blog that it is available, and that’s all. Everyday a few more people download it. A couple of people have given good feedback. The current sales: $0. Ah yes, that’s the weakness to the soft launch approach!There are three things preventing a full launch:The website is not quite ready; we’re hosting on a WordPress site, run by WPEngine, and we haven’t quite worked out how to automate the some things that I want to have automated from day 1. My WordPress guy is working on it.It doesn’t work with 10-player tables. I thought PokerStars had abandoned 10-player tables, but that must just be the case for PokerStarsES, which is the Spain-specific version of PokerStars that I’m restricted to as a resident of Spain. I’ll need to think about a clever way to deal with this, perhaps while travelling later today by ferry from Buenos Aires, Argentina to Montevideo, Uruguay.I have to co…

SeeingStars Beta Updated

SeeingStars Beta 1.03 is now available to download.What’s Changed:Improved card recognitionFixed up the menu bar displayRemoved unneeded console panelTightened up the size of the SeeingStars windowDownload the update now.