Dictionary of Basic Tesuji

The fourth and final volume of Dictionary of Basic Tesuji by Fujisawa Shuko is now available in Go Books on iPad, iPhone, and Macintosh. The project started mid 2016, and the first three volumes were published October 2016, February 2017, and July 2017. William Cobb of Slate & Shell did all the hard work of converting the books to digital format.

Four volumes of Basic Tesuji

The four volumes contain 714 problems and 3070 diagrams. But the real story is the 3743 inline diagrams: instead of deciphering text that describes alternate move sequences, just tap to see a diagram with the move sequence. This makes the digital version much easier to learn from.

Page showing inline diagram

Tesuji are moves that make the most effective use of stones; knowledge of tesuji will improve your fighting skills. This series brings together the full range of tesuji, categorized by the purpose for which they are used: invading, reducing liberties, securing eye shape, taking sente, linking up, taking away the base, and much more.

While many of the problems are hard, single-digit kyu players (and stronger) should benefit from this series. For weaker players, I’d recommend first working through the Graded Go Problems for Beginners or Black to Play! series, then read e.g. Tesuji by James Davies or Five Hundred and One Tesuji Problems by Richard Bozulich.

Edit Game Record

It’s easy for mistakes to sneak in when you use SmartGo Kifu to record a game. At move 100, you notice that you placed an opening move off by one. Or you record afterwards, from memory, and you forgot an exchange played outside the main flow of the game. How do you fix it?

Go to Move

To correct a move, you first need to get back to when that move was played. Tap and hold on a stone, then choose Go to Move.

Go to move

Adjust Move

When you’re at the move that’s in the wrong place, tap and hold on that stone until the feedback changes, then drag it to the right spot. Voilà.

Insert Move Pair

If you’ve forgotten a pair of moves, first go to the position where those moves should have been played. Then tap on the popup menu in the bottom left of the board, and tap on Edit. Tap on the Insert 2 icon, then play the two moves. Instead of creating a new variation, those moves will be inserted directly into the game.

Insert two moves

SmartGo Kifu also provides commands to delete a single move or a whole branch, if your game record needs more extensive surgery. The Macintosh and Windows versions of SmartGo provide additional features to help you fix any issues in your game records.

Double-Tap to Zoom

Such a simple feature: double-tap to zoom in on the Go board. On the iPhone, it conveniently zooms to use the full height available. So why does SmartGo Kifu have a setting to turn it off?

Double tap to zoom

When SmartGo detects a tap on the board, your intent is not clear: do you plan to play a move, or is there a second tap coming? On iOS you can tell the system to disambiguate between the two gestures – for the single-tap to succeed, the double-tap has to fail:

singleTapGesture.require(toFail: doubleTapGesture)

The price you pay is that move entry is delayed by a quarter of a second. Thus that setting gives you a choice: convenient zooming or faster move entry. Not a good choice. (But at least you now know how to speed up move entry.)

There’s a better way to solve this: always play the move right away. Then if it turns out to be the first tap in a double-tap, undo the move and zoom the board instead. Fast move entry and zoom, no setting needed. However, that means being able to cleanly undo the move (and anything else that a tap on the board might do), and in SmartGo Kifu, that would be harder to implement than what the feature is worth.

Rewriting SmartGo in Swift is still work in progress; a long journey. But thanks to less technical debt, I’m able to add features like undo, and thus make move input fast while still allowing you to double-tap. Getting rid of a confusing setting always makes me happy.

SmartGo Blog Moved

The new version of MarsEdit inspired me to finally move my blog to smartgo.blog, hosted at WordPress. Having the blog tightly integrated with smartgo.com had some benefits, but it made writing blog posts somewhat inconvenient. (To add a blog post I had to write some C++ code that then generated the blog post. Not perfect.)

The design will change, but the content is here: all 71 posts have been moved. Some greatest hits:

Some evergreen posts:

EGC Oberhof 2017

My travel plans lined up to allow me to go to the European Go Congress in Oberhof, Germany, this year. Here’s a brief summary of my experiences.

My US rating has been pretty stable at 3 dan for years, and I registered as 3 dan for this tournament. That was probably a mistake; turns out there are many European 1- and 2-dans who could compete as 3 dan in the US.

I ended up with 2 wins and 8 losses in the main tournament, 1 win and 4 losses in the weekend tournament. All my games were interesting, and I’ve learned a lot, but it’s hard not to let your tournament performance affect your mood as well as your play. The first week was also colored by jet lag and almost constant rain, which didn’t help.

Some comparisons to the US Go Congress:

  • Main tournament has ten rounds instead of six. That is great, except when you keep losing.
  • Two hours per player instead of 90 minutes. I like the longer time limits, but 4-hour games are exhausting; maybe I should have used the sealed move and taken a break for lunch. Also, starting at 10 am instead of 9 am followed by a longer game caused the timing of meals to be weird.
  • Weekend tournament (five rounds, one hour time limit) is an added bonus. Also some other side tournaments not seen in the US: Chess & Go, Yose Go, Phantom Rengo.
  • Tournament times were not coordinated well with hotel meal schedules: some tournaments started at 5:45 pm, while dinner was not available until 6 pm. The nearby town had a lot of good food options, but scheduling was tricky.
  • Fewer pros, fewer lectures, fewer game reviews: The US Go Congress does a better job at organizing pro events.
  • Cheaper: I paid about as much for two weeks here as for one week at the US Go Congress.
  • More people: This was the biggest European Go Congress ever, with over 900 players.
  • You hear many more languages. I could use my German, Swiss German, Norwegian, and a bit of French, but English will carry you through without problem.

The other difference is more personal: at the US Go Congress, I know all the organizers and lots of players, and they know me. Here I’m mostly incognito. I got to know a bunch of players, but it still feels quite different.

Overall a great experience, even though I’m not happy with my results. Next year is in Pisa, Italy; 2019 is in Brussels, Belgium. My advice if you can make it:

  • Try to get there a few days early to recover from jet lag.
  • Possibly adjust your rank; seems to be at least one rank difference in the low dans.
  • Figure out your plan for 4-hour games: bananas, chocolate, energy bars, coffee, whatever it takes to keep your concentration.

Best of luck to everybody now at the US Go Congress!

SmartOthello Postmortem

SmartOthello is not dead yet, but the app has not lived up to expectations. It’s time for an assessment of this project: why I started it, obstacles along the way, and where to go from here.


I needed a project to learn Swift and to experiment with different business models. I settled on Othello for several reasons:

  • Expertise: Expert knowledge of the game, and contacts in the Othello community. (I was the 1992 US Othello champion and have played at six Othello world championships.)
  • Similar domain: A two-player board game close enough to Go that much of the foundation code could carry over.
  • Potential customers: A more popular game than Go (think of all the people playing it as Reversi on Windows).

In addition, a trademark dispute had recently been resolved, with Megahouse of Japan making more efforts to license use of the name “Othello” and the trademarked board design.


My three Go apps (SmartGo Kifu – $20, SmartGo Player – $3, and Go Books – free with IAP) were all doing reasonably well, with roughly similar profits. I had hoped SmartOthello might add a fourth leg to that stool, and thought I had several things going for me:

  • Experience: I had years of experience with Go apps in the App Store.
  • Marketing: I had a good marketing angle (former US Othello champion).
  • Design: All the existing Othello/Reversi apps in the App Store sucked. I knew I could create an app that gave players a better experience. (And some of those apps were ranked similar to my Go apps on the top grossing charts.)
  • Social: Game Center online play and leaderboards should help spread the app socially, something I didn’t have in my Go apps.


I made good progress on the app in the fall of 2015, learning Swift along the way. Not everthing went smoothly:

  • Licensing: I wanted to use the official name Othello, so I had to negotiate with Megahouse. We reached a deal on a reasonable licensing fee (10% after Apple’s cut), but I was not able to get them to agree to any business model other than a fixed paid-up-front price for the app.
  • iAd: Apple announcing the end of iAd didn’t help. So I was stuck with a paid up-front app for the first year; I figured I could re-negotiate after that (which I did, more below). However, not being free means the installed base becomes much smaller, thus Game Center play would not work as well (there may not always be a player available when you’re looking for a match).
  • Game Center: Implementing Game Center support was a mixed bag. Achievements and leaderboards were easy, but turn-based game play took a lot longer than expected, due to poor documentation, bugs, and APIs that are not fully baked. I could have implemented my own server in the time I spent getting Game Center play to work.


Those obstacles slowed me down, but didn’t stop me. (Maybe they should have.) I finally got SmartOthello released on August 15, 2016, localized into Japanese, German, and French. In my unbiased opinion, I think design, game play, and usability are the best of any Othello app on the App Store.

Sales were underwhelming. Some possible contributing factors:

  • Press: I had created a press kit and reached out to press, but didn’t manage to get much coverage. August may not have been the best time to launch.
  • Go Players: I expected to be able to get some of my Go customers interested in Othello, but turns out there’s little crossover interest between the two games.
  • Othello players: My contacts in the Othello community were not as relevant as I thought, for several reasons:
    (1) The community of serious Othello players is very small.
    (2) There are some strong Othello analysis apps on Android, and thus most strong players are using Android, not iOS.
    (3) The core Othello community doesn’t really connect much with the general game-playing public, which is my audience.
  • Megahouse: I had expected Megahouse to help promote the app in Japan, a major Othello-playing country. Nothing.
  • Unlicensed apps: Lots of apps in the App Store continue to use the name Othello without being properly licensed. Megahouse has had little success getting those apps removed.

So the launch was not perfect. But it got worse.

iOS 10

  • At WWDC 2016, Apple announced that the Game Center app was going away, and that Game Center match-making was going through iMessage. This was ominous, but at least during the beta period, things worked reasonably well.
  • When iOS 10 was released in September, the avatar pictures disappeared. As the design of SmartOthello was heavily based around the avatars, I had to create my own bandaid for that.
  • Together with the cumbersome match-making using iMessage, I think the loss of the avatars was the death-knell for Game Center. (It‘s still technically alive, but without any improvements in iOS 11, it‘s not the technology to bet on.)
  • I had heard people complain about App Store search for years, but my Go apps always ranked reasonably well in search. With SmartOthello, search was a clear problem. Adding a space to change the app name to Smart Othello actually helped a bit, which is ridiculous. (The licensing restriction of not being able to include Reversi in the name also hurt.)
  • Since SmartOthello was a $2.99 app, I could at least benefit from Search Ads, but not enough for the app to get real traction.

Advertising and sale

  • In November 2016, I got the chance to advertise at the Othello World Championship in Japan. The resulting bump in sales? Minuscule. Again, it shows a disconnect between the serious player community and the general public I’m trying to reach.
  • I got permission from Megahouse to run a $0.99 sale over the holidays. More sales, slightly less profit. Back to $2.99.

Free with IAP and ads

  • By April 2017, I got the agreement with Megahouse renegotiated, allowing me to experiment with different business models and prices. So I tried free with ads and in-app purchase.
  • That experiment failed miserably. Sales went from low to near zero. While usage of the app went way up, I was not able to get the number of downloads that would be needed for the ads to generate significant revenue, and too few users upgraded to the Pro version. (My ads may have been too nice, and I may have included too much in the free version, but without more downloads, experimenting with those parameters would be futile.)
  • It’s possible this business model might have worked better when I first released the app and it got its initial attention; it’s much harder to generate interest with a new business model than with a new app.


  • Swift worked out really well. I’m very happy with the Swift foundation I got from the Othello project, and the conversion of my Go apps to Swift is continuing.
  • I’m glad I figured out issues with Game Center before trying to integrate that into my Go apps. At least that disaster was averted.
  • From an App Store perspective, Othello is more different from Go than I expected. The audience seems to consist more of casual players rather than people interested in a specific game, and as such they are probably less willing to spend money on the game. Thus my experience with Go was not as valuable; also, any conclusions based on this Othello experience might not transfer back to Go.


I still love how the SmartOthello app turned out, and I will leave it in the App Store, giving it a chance to get noticed and grow over time. There’s much more I could do with it, but I can’t afford to invest more development effort into it at this point. Major changes (such as replacing Game Center, for instance) will have to wait until I get the Go apps converted to Swift and updated for iOS 11, get Go Books available on other platforms, and more: it will be a while.

SmartOthello will go back to paid shortly. Grab it for free while you can.

Highest Possible Pinnacle?

DeepMind announced that AlphaGo will no longer compete: “This week’s series of thrilling games with the world’s best players … has been the highest possible pinnacle for AlphaGo as a competitive program. For that reason, the Future of Go Summit is our final match event with AlphaGo.”

This reason is rubbish. Could AlphaGo repeat its string of 60 victories in no-komi games? Could it win a match giving handicap stones? If AlphaGo wanted to keep competing, there are many more challenges left for it to conquer.

DeepMind used Go as a very successful testbed for its deep learning algorithms: a testbed that has measurable outcomes and can generate its own test data. Winning against the world’s best doesn’t make that testbed obsolete. DeepMind said that this year’s version was using ten times less computing power than last year’s AlphaGo. Could they improve the algorithms by another factor of ten? Hundred? Thousand? Yes, by all means push into other domains and apply what you’ve learned, but don’t abandon the testbed. You have ideas on how to improve your learning algorithm for medical diagnosis or self-driving cars? Testing the effectiveness of those improvements will be a lot harder than in Go.

I’m glad the DeepMind team is publishing a set of 50 AlphaGo self-play games, and that they’re working on a teaching tool. But not pushing AlphaGo forward competitively is a mistake.