Crosswords 0.3.7: Adaptive Layout, Animations, and Arrows

Howdy folks,

It’s GNOME Crosswords release time again! This is a big release with a lot of changes. Most importantly, I was able to find some time over the holidays to do some long-overdue refactoring of the core game code.

crosswords: 143 files changed, 12619 insertions(+), 5834 deletions(-)
libipuz:     41 files changed,  2345 insertions(+),  736 deletions(-)

A number of early design decisions haven’t panned out, and these decisions  held us back from doing some very basic things with the code. While not directly impactful on the user, this refactoring unlocked some long-overdue features. In addition, loading puzzles and puzzle sets are noticeably faster now.

In this post, I’m going to cover the mobile work, Arrowwords, the hackfest, and the new preferences dialog. Let’s take a look at what’s new:

Adaptive Layout and Animations

In the previous release, I tried to make Crosswords adapt to different screen sizes. It wasn’t all that usable, so I worked more on it this cycle.

First, the good news: I cleaned up a lot of the layout bugs, and (thanks to Carlos) got some form of touch screen keyboard input working. The end result is that I changed the appinfo file to indicate we supported all screen sizes and inputs, which means it should be available on all platforms.

I also had to put all the parts of the game into a custom container widget to get the spacing right. Once that was done, it was trivial to add some animations to it. It turns out AdwAnimation is really cool — and much easier to use then I had expected. I added animations to keep the puzzle centered and to align it vertically as appropriate. Here’s how resizing  now looks:

I’m pretty impressed with how easy it was to do things like this with GTK4.

Unfortunately, despite these changes, it’s not all good news. I don’t think the final results are compelling enough for mobile devices. The touchscreen input is flaky, and the onscreen keyboard isn’t great for crossword puzzles (and is so big!) I never really figured out how input was supposed to work together, and ended up just guessing until it mostly worked. I could really use better documentation on the onscreen keyboard! Or if someone explains it to me, I’m happy to write documentation for future users.

As I don’t actually have a mobile device that runs GNOME and I don’t have a touch screen, I’ve reached the limits of what I can do without additional help. I’d love feedback or advice from anyone who knows more about this space.

Arrowwords

As part of the refactoring focus, I added a bunch of new puzzle types to libipuz (more on this in a future post!) One of these puzzle types was Arrowword puzzles — a crossword style more popular in northern Europe. This had been a semi-regular request and turned out to be easier to implement than expected. We were able to get something going relatively quickly.

I wrote the cell code, Federico helped with the svg overlay arrow rendering, and Philip helped with the testing and downloader. The end result is attractive:

Arrowword Crossword

Puzzle Sets

Due to the big holiday refactor, I was able to add a few small features I’ve wanted to add for a while. First, I changed Puzzle Sets to be opt-in. We’ve ended up accruing so many of them that it makes sense for people to choose the ones they want to play.

Along the way, I added extensions  to the puzzle sets to tag them so users can see more information before trying them. Here’s the dialog to select them.

Puzzle Set selection dialog

Additionally, I added an option to let you hide puzzles that have already been solved. This was another requested feature as the list of puzzles can get quite long.

Finally we show how many puzzles remain unsolved in the main screen. This should have been a simple feature to add, but the old code base made it surprisingly hard to implement. With the rewrite, this was only a few lines of code:

New Main screeen
The new main screen

You can also see an “Add More Puzzles” button in that screenshot.

Hackfest

We held a virtual hackfest a few weekends ago! Four people showed up, and we focused on getting this release out the door. We got most of the last release blockers done during it. Davide added Italian puzzle sets and translations, and fixed the packit CI. Rosanna finished the GNOME Mini Crosswords set and started a new, alphabetically-themed one. Federico documented how to run crosswords out of podman and got the Arrowword SVG overlay themed and working. I landed the final fixes for the tagging, and landed a bunch of build fixes to the puzzle sets.

It was a lot of fun. I will try to hold another one at the end of the next release cycle.

GNOME Mini Crosswords

What’s next?

  • We’ve wanted to add autodownload-on-start for a while, and it should be possible to do that now.
  • I don’t love the current preferences dialog. It could use some design attention and tweaks.
  • And finally, I plan to switch back to work more on the Crossword Editor. It’s overdue for some love.

Until next time!

Crosswords: Puzzle update

Happy New Year, Crossword-lovers!

This is a minor update in preparation for a bigger release in the next few weeks. We’ve done a lot of exciting work on Crosswords over the past few months that’s almost ready for release. However, there are a few things available already that I wanted to highlight early.

Puzzles

There are two updates to the puzzle sets. First, George Ho kindly agreed to add his puzzles to the contrib puzzle-set. He’s written ten fun puzzles with the promise of more in the future! I really enjoyed solving them. There are also a few additional not-for-distribution ones available at his site.

loplop puzzle set

George has put together a truly impressive dataset of cryptic crossword clues. He’s gathered and categorized half-a-million clues over twelve years of puzzle data. I’m really impressed with this work and I’m looking to integrate some of that data into the Crossword Editor this coming year.

Second, I updated the xword-dl plugin to work with latest version of that app. Those folks have been really busy the past few months, and over ten more puzzle sets were added to it, including our first German source (Hint: a German translation would be appreciated). Our launch screen has gotten a lot fuller with both downloaders and shipped puzzles: we now have over 50 possible puzzle sets for playing across three languages.

Despite the ritual pain and suffering  with pip to get it building in a flatpak (NB: still relevant), I managed to get it updated. I’m really impressed at how that project grew in 2022. Great work!

These are available at flathub.

Developer Documentation

Federico gave me an early Christmas gift this year! He set up a developer guide for Crosswords to be built automatically from CI. It’s gorgeous, and hopefully will entice folks to join the rest of us working on the app.

A major goal I’ve had while writing this is to keep it well documented. A few weeks ago, Federico wrote beautifully about the power of documentation. As the game has grown past 30KLOC I’ve found it super valuable to reread what I wrote when revisiting older code sections. Writing the design docs has had a clarifying effect too: I had to write the WordList docs before I could finish that code, and I refresh my memory from it every time I have to touch it.

However, one thing I didn’t have was a good way to tie it all together. Now that we have this site, it’s possible to explain how things fit together. I spent some time this vacation putting together some introductory docs to make it easier to get started with the code base. If you have any interest in contributing, check them out.

What’s next?

We are gearing up for a big release in a few weeks with a lot of changes. They’re mostly internal cleanups, but these changes are already making some new features much easier to write. Here’s a preview of one them that’s in progress:

Can you guess what this will be?

The other thing I’d like to do is to hold a virtual hackfest this weekend. The exact time and date is still TBD pending some availability, but I’ve been meaning to get together with a few folks to work on some of the code together. I don’t know how well this will work virtually, but its worth a shot to open it up to a wider audience.

If you’re interested at all in word games and free software, feel free to drop by #crosswords. While there, let us know if you’re interested in the hackfest. All people are welcome. Come add a feature, add a translation, or try your hand at writing a puzzle. Or just hang out and tell us your favorite clues.

Until next time!

Download on FLATHUB

Endless and GNOME

Hello! Long time, no post.

Endless + GNOME = Love
Credit to Georges Stavracas

As you may have heard, Endless joined the GNOME Foundation Advisory Board last week.  We appreciate all the kind words of welcome we have received and are looking forward to strengthening our ties with this community. This has been a coming for a bit, and I’m looking forward for us to contribute more over the coming year!

On a personal note, this is really exciting to me. It’s been a couple years since I’ve had the pleasure of being on the Advisory Board, and I’m looking forward to working with the Board again. I’ve wanted to bring the two organizations closer for a while, and we got a glimpse of what was possible at the Design Hackfest in Rio last month.

Who we are and what we do:

Quite simply, we are trying to empower the world! Our mission is to make computing universally accessible, and to solve the barriers of cost and connectivity to the entire world. It’s a bold and ambitious goal, but we are absolutely serious about accomplishing this. There are billions of people who don’t have access to a computer, and would love to have one.

What’s that mean in practical terms? It means we are making a great computer that works at as low a price as we can make. It means constantly keeping an eye on cost while still providing a great value and experience to our users. It means that we want to provide a great OS and fantastic desktop to our users.

20160204140930
Wiring in Rocinha.

And it means that we have to think about a lot of things that many of us don’t think of: Things like connectivity, cost, and robustness are paramount in that environment, and that drives everything we do.

Endless is Hiring!

We can’t do this alone. We are looking for some great engineers to join our team. If this mission sounds great and you’re interested in working with us, let us know! We are looking for people who are passionate about bringing a great desktop to the rest of the world while developing some high-quality Free Software. We have a number of openings available:

  • Application Software Developer: Part of providing a great computer experience is to provide offline applications and content to users.
  • Cloud / Distributed Systems Architect: Help build the service that powers our offline content.
  • Kernel Engineer: We want to run on as many different types of cheap devices as possible. This job will help bring us to laptops, desktops, and all sorts of crazy ARM devices.
  • Internal Tooling Developer: We need someone to help maintain and build our internal build tools and create some new ones.
  • Software Engineer: Don’t see the job you’re looking for? We’re always looking for fantastic engineers of all types!

Feel free to mail me or ping me on IRC if you have any questions!

Changes…

Today is my last day at Red Hat.

I’ve been here for almost fifteen years, and it’s been a heckuva ride. I’ve seen GNOME and the Linux desktop grow from from pretty minimal beginings to what it is today.

RHAD Labs logo
The beginning…

Looking back on it, I’m so proud of the work that the Red Hat desktop team has accomplished during this time. We absolutely moved the bar on what was possible and enabled so many things. So many technologies that are basic building blocks of the modern Linux desktop were incubated within this group. Many of the things that people take for granted didn’t start in a vacuum but started because someone stepped up to make it happen.  Just off the top of my head dbus, metacity, gtk2, aiglx, systemd, pulseaudio, pango, cairo, gconf, orbit, gio/gvfs, gnome-shell, hal, NetworkManager, evince, PolicyKit and so many more got their start here.  Along the way, we made lifelong friends and built communities around these projects, to the point where others have taken them far beyond their humble beginnings.  To me, that’s what makes Free Software so awesome, and the Free desktops in particular so special.

GNOME Love

I am looking forward to being a part of the GNOME community in the future as a civilian, though I won’t be fixing any more TreeView bugs. (-:

The team is now in Christian Schaller’s capable hands and the engineering group at Red Hat is stronger than it has ever been. I’m looking forward to watching from the sidelines to see what they do next!

Passages

  • meta: It has been a long time since I’ve written anything. Being a father has taken its toll on my free time, and I got out of the habit of writing. As has happened every time I have hit a dry spell in the past, I count on the same thing to get me started up again. I change software! This time to the WordPress instance at http://blogs.gnome.org/jrb. The old, elisp-based version I borrowed from Federico wasn’t working out for me anymore. We will see if this one does any better. I’m counting on gnome-blog to help keep it updated too. Many thanks to jdub for helping me get the old entries imported.

    I have tried to keep the visual style of the old page — namely that of a ChangeLog entry. Nevertheless, I have made concessions to the modern web. ChangeLog entries should probably do the same. (-:

  • birthdays (GNOME): GNOME is now 10! Amazing. It has definitely been a long and strange trip. Dave’s recollection of Project Bob is a good memory. I’ll add my own:

    The first time I met most of the people working on GNOME (at that time) was in Linux Expo in 1998. gnome-0.20 was just about to be released. This version featured a newly written Wanda the fish applet to play with. There was a demo machine there with someone showing off the coolest feature in in GNOME at that time, namely embeddable drawers. People were dragging them into the panel, and creating crazy shapes and figures. Naturally, it was buggy like crazy. Sopwith was sitting on the machine next to it and had logged in remotely, surreptitiously hacking on the panel, trying to fix the bugs people were hitting. When the panel (or an application) would crash, he would quickly restart them, making it seem more stable than it was.

    Looking back on it, we had know idea of what we were getting ourselves into. I am sure if we knew back then what we know now, there is no way anyone would have started writing a desktop. It sure was a lot of fun though!

  • life (Eleanor): Eleanor has grown! She is sixteen months old, and is now spending her days running around the house, terrorizing the dog. She gets into a lot of mischief, but is very, very sweet. Zana and I don’t see her changing day by day, but just this weekend we had to put another box of clothes into the attic that she had outgrown. Her hair length is stuck somewhere in the middle of her back. It gets longer as she gets taller, but never quite seems to grow.
    Eleanor and Uncle Ed
    Eleanor and Uncle Ed

Thu 06 Nov 2003

  • GConfPropertyEditor: I was unable to sleep last night, and ended up staying up until 4:30 in the morning watching reruns of “Who’s Line is it Anyway” and working on my rewrite of the GConfPropertyEditors. Now that James Henstridge has done work on bug #69639 I have a lot more interest in getting this into the GNOME library stack. I’m not 100% sure that I’ve gotten the interface right, but it should be good enough for a lot of cases. It has the potential to turn a number of capplets into simply glade files. If I get a couple of simple examples working, I’ll mail it to gnome-hackers.

  • GNOME: I was unable to sleep tonight and worked on my candidacy statement. I’m pretty bad at writing these things, but they get easier as it gets later.

  • books (Four Quartets): I recently picked up Four Quartets (by Lawrence Durrell) from the library. I enjoyed his younger brother’s books a lot as a kid and read a good fraction of them. I thus grew up with a health skepticism towards the arrogant and pretentious ‘Larry’. It is pretty dangerous to learn about people from their younger sibling. Still, I always wondered what the more (less?) famous brother’s books were like, so I started reading it.

    I am unable to describe how incredibly good this book is. It is intensely lyrical and extremely detailed, sucking me into the moment on every page. I’m reading through it slowly, enjoying every step it takes, not wanting it to end.

    I remember hearing a quote from a professor of Shakespeare. He had spent a lifetime studying Shakespeare’s plays and knew them all intimately. He loved his work, loved teaching, and loved being a professor. However, he said that he would happily give up all he ever learned about Shakespeare, if he could just get the chance to read “Romeo and Juliet” again for the first time.

    This book definitely feels like it should be read once, and treasured. I hope (expect!) that it ends as well as it begins.

  • sleep: I wish I could sleep more.

Fri 10 Oct 2003

  • work: I’ve been wrestling with rhgb for the last week or so. I’m still not really satisfied that we’ve gotten all of the kinks out of it, but it’s much better than it was last week. We’ve gotten it to the point that it doesn’t slow down the boot much more than it booting without it (on the order of 6 seconds on my test computer.) I’m much happier with the approach we’re taking now that kudzu doesn’t conflict with the X server. With some luck we can get a nice GTK+ front-end to kudzu in the future.

  • book: I am reading ‘Changing Planes’ by Ursula Le Guin. It’s very light and easy to read, and I am enjoying it much. It is also entirely predicated on a pun. This is more in keeping with a junky Piers Anthony novel than her other books. Additionally, it is explicitly airport reading material which leaves an ever-so-slight bad taste. Perhaps I should be saving it for a trip somewhere.

  • Bookworm: Everytime I think I’m getting closer to finishing this, I find a new bit that needs fixing. Zana is getting quite impatient. This weekend, it will be usable.

  • GNOME: There’s an upcoming summit in New York. I hope we get a decent turnout. It’s very last minute, though.

  • google: I’m losing the google battle for the term ‘Blandford’ to my Dad. I need more links to my page.

Fri 12 Sep 2003

  • GNOME (2.4): It’s out. It wasn’t the prettiest release thus far, but it’s in good shape. I have big plans for 2.6. But first…

  • GTK+ (2.4): This is in danger of slipping a bit. I really need to finish my GChildWatchSource patch and get it into glib. I’m pretty excited about it. It’s a pretty tricky piece of code, and I’m happy about how it looks right now. Need to reply on the list.

    (GtkTreeView): Kris and I came up with two optimizations for the GtkTreeView that will make an enormous speed difference in some common cases. I spent a bit of time arguing with Owen about how to enable the optimization (I wanted it to be automatic — Owen wanted the programmer to explicitly turn it on) and it’s going to result in a lot of people handling their column-sizing by hand. But off the cuff testing shows that we can handle about 100K rows of model per second instead of the 7K per second we were doing before.

  • Birthday: I don’t know what it says about me, but Zana gave me a great birthday present. A cotton robe, a box of Myntz, three pairs of really comfy socks, and a hand-knit pair of wool socks. I must be officially old, getting excited about socks.

Mon 25 Aug 2003

  • GNOME: Had a surprisingly productive day building packages. Libtool still makes me contemplate taking up self-flagellation as a hobby, though.

  • Maintenance: I had to leave work a bit early to get my car from the repair shop. A gasket in the oil tank started leaking. As is typical with the problems with cars, it was $15 to get a replacement part and $250 to install it.

  • Bookworm: With the house much more under control, I’m back to working on Bookworm again. I’m really not happy with the interface, but it’s functional. A surprisingly large number of people (like three) have asked for it recently, so I am going to try to get it somewhat usable. I had an enjoyable discussion with Seth about the nature of Assistants, and how they should work in GNOME.

Wed 13 Aug 2003

  • Moving: Trying to put all the pieces of my life back together after the movers managed to spread them all over the new house. Lots of things went wrong. Lots of things went right. When all is said and done, I love the house and being back in New England. One thing that didn’t go so well was how the Mortgage turned out. I was very disappointed with the Walden Mortgage company of Concord, MA. If anyone is in the market for a loan in that area, I would not recommend them.

  • GNOME: I am also really enjoying back in the swing of things with GNOME. I’ve finally gotten the control-center back somewhat under control. It sounds like a broken record, but I really need to get a good chunk of it cleaner for 2.6. Mime-system, here we come…

  • Trips: I won two free tickets to anywhere in the continental North America in the company raffle. As I need to travel soon, I’m planning on going to visit Federico for a couple days. Should be a lot of fun. I’ve never seen Mexico City before — I’m quite psyched!