The State of Game Center

My happy blog post on SmartOthello for Mac conveniently skipped my journey through Game Center purgatory. While profile pictures are back, Apple is still not giving Game Center proper attention. I’ve been busy submitting bugs to Feedback Assistant – here’s a sampling:

  • There is still no way to get notified of invitations without polling (FB5990491).
  • On the Mac, turn notifications are not received (FB7659591).
  • On the Mac, there’s no way to edit your Game Center profile picture (FB7667313).

When you try to start a Game Center game on the Mac, you get the following cut off dialog (FB7668604):

mac-game-center-cut-off

(Yes, that’s the actual amount of white space.) Luckily, you can resize it to reveal some more buttons:

mac-game-center-revealed

The worst issue right now is that Apple has deprecated GKPlayer.playerID, and tells developers to use teamPlayerID or gamePlayerID instead. However, those simply don’t work (FB7662712), as the IDs keep changing even within a single game, making it impossible to e.g. cache profile images, never mind reconcile locally stored games with Game Center data. If GKPlayer.playerID gets removed in iOS 14 without fixing teamPlayerID, I will have to pull SmartOthello from the App Store.

How to Play With Friends

The whole process of finding friends to play with is way too convoluted. I’ve improved the UI in SmartOthello 3.0 to make it easy to start a game with somebody you recently played with. However, the process to first find somebody to play with is kafkaesque:

1. Tap on New Game and choose Game Center at the top.

start-game-center-game

2. SmartOthello lists recent opponents, and you can easily start a game with them. To play with anybody else, tap on Invite Friends.

after-invite-friends-long

3. This leads to a screen that has two buttons: Invite Friends and Play Now. While Invite Friends is just lightly outlined and you’re tempted to tap the boldly emphasized Play Now, that would just try to match you with somebody else who’s looking for a random opponent right then, which only really works if the app is much more popular than SmartOthello. So don’t get stuck in limbo; tap Invite Friends.

after-second-invite-friends

4. This brings you to an iMessage screen where you can send an invitation to a contact. However, the instruction “Tap + for Friends and more” is trying to give you a clue that you should tap on the ⊕ button, and then you’re finally presented with the right choices: play with contacts, friends, nearby players, or players you recently played with.

final-game-center-screen

This last screen makes sense – Apple needs to give developers a way to take users directly to that screen (FB7672633). Game Center matching was much easier when there was a Game Center app; Apple really went off-track when they decided that matching should go through iMessage.

I hope this helps others navigate through Game Center issues with turn-based games. If I’m wrong about any of these, I’d love to know! Hopefully, Apple can address these issues in iOS 14 and give both players and developers a better experience with Game Center.

SmartOthello on Mac

SmartOthello 3.0 is out, and it now also runs on the Mac. More on that below; first, we need to delve into profile pictures.

Profile Pictures are Back!

You may remember the profile picture saga from earlier versions of SmartOthello: iOS 10 removed profile pictures from Game Center just after SmartOthello was released. Those images were integral to SmartOthello’s design, so I had to add support for users adding their own images for just SmartOthello. Needless to say, not too many users did that.

Fast forward to iOS 13: profile pictures are back. Finally. While you can’t just choose any image, like you could before iOS 10, you can use Memoji and Animoji to create a suitable image (in the Settings app, scroll down to Game Center, then tap on the avatar to edit it). And as almost all users are now on iOS 13, this was a good time to make the app iOS 13 only and use the official profile pictures.

SmartOthello on Mac

SmartOthello was my test vehicle to learn Swift as well as gain experience with Game Center. (The former went well; the latter made very clear that I would not be using Game Center in SmartGo.) Now I got to use SmartOthello to test out Catalyst and the Mac App Store, in preparation for the all-new version of SmartGo. Catalyst has made significant progress since I tried it last year, and getting SmartOthello to run on the Mac was a snap. Adding it to the Mac App Store as a universal app also worked out well: buy it once, download it on iPhone, iPad, and Mac. Try it out! Practice against the five levels of computer opponents first, then invite your friends who are stuck at home to play with you.

 

Learn to Play Go Series as EPUB

The five volumes of the Learn to Play Go series are now available as EPUB, which opens them up to readers on Android and Windows. Janice Kim’s award-winning series takes the complete beginner step-by-step all the way to playing real Go.

Learn to play go series covers
(Of 142 books in Go Books, all but 7 are now available as EPUB.)

EPUB App Recommendations

I’ve updated my recommendations of EPUB readers. On Android, I suggest you try Reasily and Adobe Digital Editions. On Windows, Readium Desktop seems to be working better than calibre. Each one comes with its own set of issues, no perfect choice out there. Please let me know what’s working for you, and keep providing feedback directly to the developers of these apps to help improve them.

App Store Confidential

Tom Sadowski was responsible for the App Store in Germany, Austria, and Switzerland from 2014 to 2019, and in his book “App Store Confidential” he provides a look behind the scenes. According to this Verge article, he’s had a falling-out with Apple, and Apple is trying to block publication of the book. The book is still available on Amazon, but only in German.

As the workings of the App Store are of crucial interest to developers, I read through it from a developer’s perspective and noted what I learned – interesting, but nothing that I think Apple should be blocking the book for. I grew up in the German-speaking part of Switzerland; for those who don’t know German, I’ve provided approximate Kindle locations below, so you can use e.g. Google Translate for more detail.

App Store Teams

For each country there are business managers and editors who are dealing with the customers as well as the developers in their region [loc 596]. The editors curate the App Store, and don’t just suggest apps, but also intend to shape the app culture.

The Discovery tab is refreshed at least twice weekly, presenting users with the most relevant, popular, and best monetizing apps [loc 609].

While the editors are working more in the background, the business managers talk with and advise developers in key accounts [loc 623]. The key accounts are based on top grossing (if you’re in the top 20, you can be sure you’re on Apple’s radar), strategic (accounts that have regional significance) [loc 638], and startups (where they’re looking at long-term monetizing potential) [loc 658].

Project Berghain

In 2016 he set up a program to help startups in Germany; in 2018 they launched Project Berghain [loc 941], where they evaluated over 300 apps, asked more questions of 20 apps, invited 10 apps to pitch-meetings in Berlin, and then decided on 5 apps that they were going to support [loc 954]. The apps were all based on subscriptions, had an innovative product, and a strong team.

Success Factors

Products, people, and passion: The **product** needs to be so good that it enriches the user’s life, and the user is willing to pay for it [loc 1034]. The **people** need to include a UI expert, a programmer, and a sales person [loc 1045], and need to have **passion** for their product.

Advertising comes last: the product needs to be convincing, otherwise marketing is not going to help [loc 1072].

For subscriptions to be successful, they need to enrich people’s lives, and convert users into paying customers [loc 1133].

How to Get Featured

Different factors help an app get featured [loc 1184]: quality, UI design, user experience, innovation, localization (the more languages, the better, as editors can then suggest the app worldwide), video and cool artwork.

To get in touch with App Store team, he suggests having somebody who is already in touch with the App Store team recommend you [loc 1240]. Keep emails short, add a short video that introduces the app, don’t mention money or other apps [loc 1256]. Possibly ask for a personal meeting. And if Apple contacts you, provide the asked for material quickly and without questions [loc 1261].

More

The book also includes anecdotes about Tim Cook visits, personal and app stories, and more on where he thinks the App Store is going. If you’re dealing with the App Store, you should find a way to read it, as you’ll come at it from a different perspective and notice details that were not important to me.

The Right iPad for SmartGo

I often get asked about getting an iPad for SmartGo Kifu and Go Books – which iPad should you get? Here are my recommendations.

iPadOS: My main recommendation is to make sure the iPad you get can run the current version of iOS (now iPadOS). Yes, SmartGo can also run on some older versions of iOS, but it’s no secret that I’m working on an all-new version of SmartGo, and that one will require iOS 13 when it’s released. (No ETA yet.) iPads are long-lived, so you want to future-proof your purchase: at https://en.wikipedia.org/wiki/IPad#History, you can see which iPads support the latest iPadOS.

Cost: Ten years ago, the original iPad started at $499. The newest iPad is now available for only $249 at Amazon ($329 from Apple). The iPad Pro is pricier, starting at $799. Note that Apple also has refurbished iPads.

Size: The regular 9.7″ iPad was a great size, and the newest version features a 10.2″ screen. The 10.5″ iPad Air and the 11″ iPad Pro give you more screen without adding much size or weight. The screen on the 12.9″ iPad Pro is magnificent, but it’s not quite as portable as the smaller ones. With the 7.9″ iPad mini you pay more to get a smaller screen; I’d only recommend that one if portability is paramount.

Storage: 32 GB is fine for SmartGo, no need to get more. There are many other reasons to get more storage, e.g. for photos and videos, or movies for long flights, but go games and books are small and won’t impact your storage. (Can’t recommend old iPads with 16 GB, as a significant part of that is used by the system.)

Speed: For SmartGo Kifu and Go Books, speed is not currently a major factor, but I hope to take more advantage of processing power in future versions. There are apps that are based on Leela Zero or KataGo that will use all the processing power that you can give them. If that’s important to you, look at the processor: the 2018 iPad Pro with an A12X will be fastest, followed by the 2019 iPad Air (A12) and the regular 2018 iPad (A10). Note that the iPad Pro is likely due for a refresh this year.

Accessories: No accessories are needed for SmartGo. But if you want the iPad to take over more of the functions of your PC, you may want to add a keyboard cover. The newest iPad supports the Smart Keyboard, but that one requires you to perform origami each time you set it up, while the keyboard on the iPad Pro is a snap to set up. All the newest iPads support the Pencil, but the Pencil for the iPad Pro attaches and charges magnetically, which makes using it much more convenient. So if these are important, I’d recommend an iPad Pro, as it’s a significant improvement, but the difference in price is also very significant.

Hope this helps you decide on the right iPad for you. The newest iPad at $249 is a steal, and will easily pay for itself thanks to Go Books.

A Month with Mac Pro

I’ve now enjoyed my Mac Pro for over a month. Why did I decide on that computer, and how is it working out?

iMac

My late-2014 5K iMac was five years old: it still worked, but was increasingly limiting. The internal 500 GB SSD was too small, and even with the external 1 TB SSD I kept bumping into limits, wasting time cleaning out cruft. Ports were another issue: no USB-C ports, not enough ports in general, and I have yet to find a 100% reliable USB hub. The retina screen is still perfect, and my wife will likely get many more years out of this computer, but as a daily developer workhorse, it was getting long in the tooth.

I was sorely tempted to upgrade to an iMac Pro two years ago. However, while the current iMac Pro might be a great choice for many developers, for me it had a few drawbacks:

  • GPU not upgradable: I’d have to decide up front how much to invest in this rapidly evolving technology.
  • No way to drive the non-XDR 6K monitor that Apple is surely going to release any year now.
  • Ports not future proof: Thunderbolt 3 / USB-C will remain relevant for many years to come, but new standards will surely emerge in the next decade.

My apps

I’m a developer, not a video professional, so the case for a Mac Pro is not as clear-cut. My main work right now is on the all-new version of SmartGo, about 70k lines of Swift and growing. The shipping version of SmartGo for Windows is 166k lines of C++; SmartGo Kifu is a mix of C++, Objective-C, and Swift. So while there are other tasks that benefit from a multi-core CPU (e.g. running Go or Othello simulations overnight, or converting 140 Go books to ePub), speeding up Xcode builds is the main benefit.

Modern Go programs are based on neural nets, which benefit a lot from a powerful GPU. However, my current development focus is on user interface, not on stronger play, so with GPUs still improving rapidly, I want to delay investment in a powerful GPU until I really need it.

Specs

Basically, I maxed out SSD and CPU (within halfway reasonable budget constraints), and plan to upgrade memory and GPU as needed.

  • 3.2 GHz 16-core Xeon W, turbo boost to 4.4 GHz: Slightly slower than the 12-core, but turbo-boost speed is the same.
  • 48 GB RAM DDR4 ECC at 2933 MHz: I figured this would be plenty for a while, and so far memory has not been an issue.
  • 4 TB SSD: I don’t want to keep bumping against that limit.
  • Base GPU: More than powerful enough for what I need now.

In addition, the expandability of the Mac Pro may lead me to:

  • Add more ports: If I need more USB ports, or some other port comes along that is helpful, I can just add a card for that.
  • Add internal SSD: I currently have a 2 TB SSD hanging off the internal USB port (for nightly backups); when I need more, I can add a PCI card with extra SSD storage.
  • If/when Apple switches to ARM, it’s conceivable that Apple would create a card with an ARM processor for the Mac Pro.
  • The unknown: Having PCI Express card slots available keeps options open for the future.

I expect the Mac Pro to be reliable for many years, and if something goes wrong, it will be easier to repair than a computer crammed behind a large screen.

Monitor

I’m used to dual monitors: a 4K monitor next to the 5K iMac (a Dell P2415Q 24-inch 4K monitor, which is surprisingly good). I’d love a 6K monitor, but the 6K Pro XDR is not for me. The iMac is overdue for an SSD-only update and visual refresh, and at that point it would make a lot of sense to also release standalone screens in the same form factor. However, Apple’s timing is famously unpredictable, so I decided to go with the LG 5K for now to avoid being dependent on Apple’s plans. If they do release a 6K monitor for mere mortals, I’d be happy to replace the 4K by a 6K screen.

Performance

For developers, staying in the zone is crucial, and being able to reduce the build-run-debug cycle has really helped. Compared to my old iMac, build and run speed has improved by a factor of 2 to 3, and build times have become much more predictable. For my 70k lines of Swift, launching on an iOS device (connected by USB) after a small change takes 6-7 seconds, and a full build takes less than 30 seconds, more than good enough. I feel like I’ve gotten a lot more done this last month than in prior months.

Price

Yes, it was a very expensive machine, but I do expect to get at least 7 to 8 years out of it. (I got 7 good years out of my 2006 Mac Pro.) The 6% cash back when buying with the Apple Card before December 31 helped; also, if you’re in the market for a Mac Pro, make sure you talk to the business rep at your local Apple Store to see if you can get a discount.

Summary

A month in, the Mac Pro has been everything it was supposed to be: fast, reliable, silent, unflappable. It looks gorgeous, but I hardly even notice it – it just sits quietly below my desk helping me focus on my work.

Using Strong Go Programs on Macintosh

SmartGo for Mac is not playing strongly, as computer play is using my own pre-AlphaGo engine. However, like SmartGo for Windows, you can use GTP (Go Text Protocol) to connect to strong engines to play against.

The most recent version of SmartGo for Macintosh (0.8.18) includes some improvements in how it handles GTP engines. It’s not perfect, there’s much more to be done, but hopefully it will tide you over while I keep my focus on the new SmartGo for iOS.

The first step is downloading and installing the computer go engines you want to connect to. Here are three I’ve tested with SmartGo for Mac, from easy to hard to install. All assume that you’re somewhat comfortable using the Terminal app; check out this iMore guide if you’re new to the command line.

Pachi

The easiest way to install Pachi on the Mac is using Homebrew (which you probably have to install first). Follow these instructions:

https://brewinstall.org/Install-pachi-on-Mac-with-Brew/

Leela Zero

Find Leela Zero on Github, scroll down to I just want to play with Leela Zero right now, and follow the Homebrew instructions. You’ll also have to download a file with network weights; the link is in that same section.

KataGo

Installing KataGo is more complicated, as you have to compile it yourself. Follow the instructions for Linux at https://github.com/lightvector/KataGo.

smartgo-mac-gtp-preferences

Setting Parameters

Once you’ve installed an engine, you need to add it to SmartGo. Choose SmartGo > Preferences in the menu and click on GTP. Then click on the + icon and navigate to the executable of the engine you want to add. SmartGo uses the engine name to guess reasonable parameters, then tries to run the engine to get its name and version. If you see a green checkmark with the name and version, you’re all set. Otherwise, edit the parameters sent to the GTP engine (the third column in the table). The following basic settings work for my setup:

Leela Zero: -g –playouts 1000 –noponder -w /usr/local/Cellar/leela-zero/0.17/best-network/40b_257a_64k_q

KataGo: gtp -model /Users/anders/work/katago/cpp/models/model.txt.gz -config /Users/anders/work/katago/cpp/configs/gtp_example.cfg

Leela Zero and KataGo take a while to initialize, so even just getting name and version initially can take a minute, and SmartGo may time out. If it does, just try starting a game against the engine anyway (File > New Game, specify the engine in the dropdown for Black or White), and see if it works.

I hope these instructions get you pointed in the right direction. I’m sorry none of this is as easy as it should be.