Tenuki: a new iOS OGS client

Thanks for the update about “undo”, and the new Themes!

Love the themes!
Would also appreciate some themes by @brubrubrubru if they are interested in a collaboration <3

Should be pushing this out tomorrow morning, just want to test a little more to make sure there aren’t any showstoppers first since there’s a lot changed under the hood (I meant to leave this as a draft but clicked publish prematurely :sweat_smile:)

If you haven’t updated to the latest TestFlight build, you’ll still need to in order to get properly-updated badge numbers.

Totally open to any theme contributions! I use the same theme format as GitHub - SabakiHQ/Shudan: A highly customizable, low-level Preact Goban component..

1.6.1

Bugfixes etc

  • Some major performance improvements. Should help a lot, especially on busy game lists or animating to late-game 19x19 games

  • Due to the oddities of live-updates and TestFlight releases over the holidays, I’m not sure animated stone placement (snapping down in place from above the board, not animating to the fuzzy position) made it in to the previous build with themes and undo requests. It’s definitely in now, and for simplicity’s sake there’s now a single animate toggle instead of two. We’re also no longer playing drop-in animations if the board diff is very large (e.g. scrubbing from the beginning to the end of a game)

  • Removed player avatars from the list of online friends when clicking ‘New Game’. There was a rendering bug; removing the avatar both is faster than fixing things properly and matches OGS’ UI

  • When there’s an undo request, we show a little undo symbol over the stones that would be undone. We now don’t show that marker on a vertex if you’re not looking at the latest game state (e.g. where that stone doesn’t exist)

Known issues

  • I upgraded to a new major version of React, which is what enabled a bunch of our performance improvements but might cause some instability. Keep an eye out!
2 Likes

New build is out!

3 Likes

Some feedback for the iPad version:

  • Landscape mode is really buggy
  • Pen input somehow skips the move confirmation and results in buggy states
  • Notifications work great, maybe some way to limit them would be nice, like only inform me every 30 min if it’s my turn in a correspondence game

Yeah, iPad support is very much currently “at your own risk”. I care about it a lot, and am particularly curious to sort out the pen issues (the goban component also doesn’t currently support external mice, which is annoying to me), I just haven’t had the time to sit down and properly dedicate to polishing it yet.

More nuanced notification logic is interesting. I’ll have to think about what’s reasonable and not overly complex. I personally want to be notified on every single move, so at some point I might come back with ideas to ask for feedback :joy:

1 Like

I have been playing go with Tenuki all week and I am compelled to highlight two features:

  • Real time notifications
  • The green status symbol when looking at your game list

These two features mean I have been able to play way more correspondence moves when my opponent and I can find each other at the same time. Tenuki is enabling me to play more go :grin:

1 Like

Feedback: Notifications when I have conditional moves lined up

  • I use conditional moves in correspondence games
  • I found that Tenuki sends a push notification every time it’s “my turn” even if I already have conditional moves for my opponent’s last stone. This means I’ll get, say, three notifications in a row for the same game while my opponent plays out a joseki.
  • Instead, I would expect to be notified only when it is my turn and I do not have a conditional move for the given board state

I can’t speak for what is available in the api or what other apps do, but this is just my two cents for what sounds intuitive to me :innocent:

I appreciate the kind words! Glad you’re enjoying the app so much and it’s helping you play more!

That’s a really interesting point about conditional moves. What you want makes perfect sense. I suspect it’s possible, but will be a bunch of work, currently the server has the ability to read full game data but is pretty “dumb” about anything other than “is it your turn?”. I haven’t touched any of the data model around conditional moves before, so it probably won’t happen until I sit down to also implement conditional moves in the client, but hopefully that’s something I can get in!

2 Likes

New (live-update) build! Really excited about some of this stuff.

@godeon This should hopefully make iPads feel a bit better, even if a lot of the layouts will still be unoptimized. Apple Pencil support should hopefully be less janky, and the change to swipe behavior should make the iPad screens feel less (for lack of a better word) jiggly.

1.6.2

New Features

  • We previously let you swipe forward to move to the next puzzle or correspondence game. Now, on the puzzle screen, you can also swipe back to go to the previous puzzle. So the back button takes you back to the puzzle collection list, swiping takes you to the previous puzzle

  • We now sync your data across instances of the app! Your read status (for chat messages and ‘study’ tab games), puzzle collections (which collections are ‘favorited’, which puzzles have been completed, and the last completed puzzle for any given collection), and settings (minus push notification settings and beta vs prod server selection) should now stay in sync across multiple copies of the app. You will experience some one-time data loss for this migration — sorry about that, but with the caveat of ‘beta software’ I couldn’t justify the extra time to build a migration tool vs working on other things. This is using the OGS server’s “remote storage” feature, so theoretically other apps could tie into the same data storage for tracking puzzle completion.

Bugfixes etc

  • Swiping back/forward should be much more native-feeling now, in that we don’t let you do it unless you’re very close to the edge. This should make the puzzle screen much more usable, as well as all iPad views

  • Making a move in a puzzle now scrolls the text back to the top

  • For a while now, there’s been a nasty layout bug where the game analysis view would have a scrollable goban instead of fitting all on one screen. This has been driving me crazy, since it works perfectly fine in my dev builds but not production builds. I think I finally figured it out.

  • We should be handling all sorts of cursor events on the goban much better — Apple Pencil should be more reliable, Bluetooth mice on iPads should work, and there should be (at least slightly) fewer errant stone placements when double-tapping or pinching to zoom in

  • Fixed the app badging logic. Previously, the server was sending wrong numbers, and opening the app without making a move would cause the badge count to be cleared. I think the server badges might still be slightly wrong (too high), but at least when opening/closing the app it should be consistent now.

  • Solving a puzzle always adds its collection to your list of ‘recents’. I recently introduced a bug that caused this to not work, but it should be fixed now.

Open question about that last point: right now, the section at the top of the “puzzles” tab represents both “collections you’ve solved puzzles in” and “puzzles you’ve actively favorited”. Even if you actively remove a collection from the list, if you solve another puzzle in it, it gets shoved back onto the list. This behavior makes sense to me — if you keep solving puzzles in a collection, you probably want to be able to find it — but would love to know if that is annoying or counter-intuitive to others that there’s no way to permanently say “I DON’T care about this collection (even though I keep solving puzzles in it)”

2 Likes

Aww, I was very excited to implement Apple Pencil hover support, but it turns out my iPad is a year too old to support hover. Unfortunately I don’t think I’m gonna ship something I can’t test myself, so even though the next build will have some more Apple Pencil fixes (you’ll notice in the current build both sound effects and the analysis view don’t work quite right with the Pencil), no “hover the pencil above the screen to see stone previews” support unless someone wants to buy me a very generous gift :joy:

1 Like

Okay, lmao, I somehow blew through my monthly live-update budget already. Since my bundle size is now literally half of what it used to be, something wonky must be up. Either way, things may be slow to get new updates out as I figure out a better solution (or just fall back to TestFlight).

It feels like it’s been longer than usual without an update! There’s a new build in review with Apple, among other things it migrates us to a new live-update system on infrastructure I control so we won’t be hit by usage limits. Will post changelog when it’s live.

1 Like

1.7.3

As a warning, this build has several major refactors (most notably internationalization), so please do let me know if any new issues arise. In particular, let me know if you find any space where instead of ‘normal’ text you see a random sequence of letters.

This update also switches to a new live-update system. You will need to download off of TestFlight (version 1.6.1 build 37). We no longer prompt you to update to the latest version, it happens automatically, but you may still need to open/close the app a few times to get the latest update. The version number that shows at the bottom of the settings page should now reflect the version numbers I’m using here, which will make it easier to tell if you’re on the latest version or not (it will show “builtin” when using the built-in TestFlight version)

New features

  • Add support for labels in SGF files that are using SGF version 3 or below (“L” instead of “LB” nodes)

  • Previously, Tenuki could import SGF files either through the in-app file picker or by selecting Tenuki from the iOS system “share” sheet, but it would not show up as an option when selecting “Open In…” on a SGF in Files.app. It should now properly show up as an option.

  • Your settings for whether the OGS and SGF game lists in the ‘study’ tab are collapsed now persisted across app loads / tab changes

  • Your games in the game list should now animate position (when e.g. your opponent makes a move in a correspondence game while looking at the game list)

  • The app has been internationalized, meaning the hooks are in place to support additional languages. No concrete plans to actually support a first non-English language, but I wanted to rip that band-aid off now so it’s a possibility in the future. Please feel free to reach out if you’re interested in helping translate!

Bugfixes etc

  • I changed our system for live-updates, it should be less janky going forward (no more opening and closing the app to get prompted to update, no more running out of bandwidth)

  • Fixed a regression where adding/removing SGF games would require changing tabs to take effect

  • Hopefully fixed an audio session bug that meant sometimes other audio would be paused on opening the app

  • In the new game menu, sometimes the green “online” dot wouldn’t render for players with long names, despite them obviously being online (or else they wouldn’t be in that list)

  • Fixed some more Apple Pencil weirdness. Pencil moves should consistently play sound now, and the Pencil should work properly in analysis views

  • The loading spinner in the settings page is now centered

  • Fix bug stopping new challenges from showing up in the games list until you changed tabs

  • Lots of improvements to stone removal view: the layout no longer scrolls on phones and has a landscape iPad-specific view, the time remaining display is now correct, and if you were watching a live game when entering stone removal mode we now properly show the stone sealing warning without requiring you to leave the game and come back

2 Likes

I got a piece of TestFlight feedback from someone with their phone set to Russian with a screenshot of the automatch time control screen showing random strings of letters (i.e. non-localized text). I don’t have a way to figure out who this is or reply to them, but if you happen to be reading this: can you go the settings page and confirm what version it says you’re running? I’m curious if this issue still happens when/if your app has been updated to version “1.7.3” instead of “builtin”.

Thanks!

Folks might have noticed that the app’s icon badge count might be too high after getting push notifications. i.e. the number was larger than the number of games it was your turn in, and if you opened and closed the app the badge count would fix itself.

I just pushed out a server change that should fix that, would love to hear if anyone’s still experiencing an app icon badge that doesn’t match the number of games where it’s their turn.

One more push notification server update that doesn’t require a client update — you should now get a lovely stone sound instead of the default push notification sound!

2 Likes

New live-update out!

1.7.7

New features

  • We now support showing move numbers on the board! By default, while looking at the analysis view or SGF view, when looking at a variation line, the stones will be numbered on the board starting from the start of the variation (you can disable this in settings). You can also open the bottom-left menu and select “Toggle Kifu Mode” to number all stones in the game, like a kifu. (For simplicity’s sake, I also ripped out all the OGS settings from the analysis menu — conditional moves, variations, etc — that aren’t yet implemented).

  • When in an analysis view, you can still tap the “Next: [stone]” button to change the color of the next stone, but you can now also long-press (or right-click) to ‘lock’ it, so every stone you place will be that color until you tap the button again.

  • Navigating the node graph, we now ‘remember’ the path you’re taking, so if you scrub backwards until you reach a branching point and then scrub forward again, the ‘selected’ variation will be the one you most recently looked at rather than the topmost one. If you use the ‘go back to last branching point’ button or the ‘back to beginning’ button, we will erase that. Hopefully the net result of this is something you won’t consciously notice but will feel ‘more right’.

  • Triggering a pull-to-refresh now plays a subtle haptic buzz

  • We now try to include incoming challenges when we show badge counts. This will happen consistently in-app in the ‘games’ tab. The app icon should include this in the badge count after opening the app, but after you get a push notification it won’t, until I get around to updating the server logic.

  • We now play a custom push notification sound effect! You’ll hear a nice go stone being snapped on the board.

Bugfixes etc

  • A bunch of pages had a loading spinner shoved in the top-left of the screen, they should now consistently be centered

  • The move tree view should now work properly with Apple Pencil. This also makes it so you can long-press on a node to trigger the equivalent of a right-click, which doesn’t do anything right now but has been one of the things blocking me from starting to build out features like forking games and sending variations through chat

  • If you are the second player to pass in a correspondence game, we no longer auto-progress to your next game, so you can handle the stone calculation phase

  • For the purposes of the games list and app badge, during stone calculation phase we now consider it “your turn” if you have not accepted the current stone arrangement and “not your turn” if you have

  • The haptics that play on move confirmation were not respecting the settings “haptics” toggle, they now do

  • The sound effects are now being served at 48kHz instead of 96kHz, which should sound practically identical and reduce bundle size

  • I made a refactor to our OGS REST network layer that should reduce some network noise

  • Active landscape iPad games were not showing time indicators

1 Like

1.8.5

New features

  • We now support viewing and sending variations!
    • If you long-press a node in the node graph (or right-click if you’re using a mouse on iPad or Mac), you will have the option to send it to your opponent, or save it privately (which sends it as a ‘personal’ message, that will show up either in the ‘notes’ tab in Tenuki or in your personal chat on the first-party client).
    • If you click on a variation name in a chat message (or the notes page), it will load the respective analysis page. This is currently janky on iPad if you are viewing the notes page in landscape, I need to make some underlying changes to our router
    • Push notifications for chat messages containing a variation will now properly display the variation name in the push notification body
    • I’m particularly pleased with being able to send private variations to yourself, since the official OGS client supports viewing these even if it doesn’t support creating them!
  • You can now click the move number headers in the chat window to go to the corresponding move number. This doesn’t yet work for games with analysis disabled
  • Added a bunch of coordinate-related settings: you can disable board coordinates, you can move them to outside the board, and you can select alternate coordinate systems. 1-1 coordinates currently look pretty junky, I need to come up with a better way to handle double-digit Sinitic numerals
  • When looking at analysis views (the magnifying glass icon on an OGS game or puzzle, or the SGF viewer), if there is at least one non-main-line variation, we now show those moves on the map (the next ‘main line’ move is a correctly-colored dot, and variations are given lowercase letters). Placing a stone in any of those locations will navigate to that variation in the tree rather than create a new variation. There is a settings toggle for this, as well as a separate toggle to show the ‘next move’ preview dot even when there are no variations (on by default)
  • When looking at analysis views, you can optionally enable a ‘pattern matcher’ that tries to identify a name for the current move and display it above the board. If there is an associated Sensei’s Library page, it will be a clickable blue link. Disabled by default, you can enable it in the bottom-left menu of an analysis page, or set it on by default in settings.
  • When importing an SGF via iOS file picker, the file picker window now only shows SGF files and text files
  • We now properly respect the “analysis and conditional moves disabled” flag. No more cheating, if anyone has been sneaking by with this!

Bugfixes etc

  • You should no longer receive push notifications when you send chat messages
  • Hopefully finally knocked out the bug causing the list of favorited puzzle collections to not show up until you favorited a new collection
  • Some of the theme work I did accidentally caused grid intersections to appear underneath stone-less labels, which looked ugly. Fixed the CSS.
  • Did a bunch of work reducing the code bundle size and lazy-loading code. Won’t affect filesize, but it should noticeably reduce ‘cold start’ load time (opening the app fresh)
  • I think (but am not positive) the previous release got rid of stone-placement animations. If so, they’re back

Things to watch out for

  • The performance work I did include some wide-sweeping changes, so it’s very likely there are some bug regressions, particularly in the stone calculation view
3 Likes