Crosswords 0.3.6: “The Man from G.N.O.M.E”

Note: a half-written version of this blog post was accidentally published earlier, and was briefly picked up by The [Publish] and [Preview] buttons are unfortunately right next to each other 🙁


It’s time for another GNOME Crosswords release! This one is particularly exciting to me as it brings a lot of new content. The major highlights include new puzzles, a new distribution channel, and the start of adaptive behavior with an eye to working on mobile. It’s available for download in flathub.

New Puzzles

First — and most important — is the addition of new puzzles. We added three more puzzle sets from different sources. I wrote to a number of crossword creators in the local FOSS community and asked if I could include their puzzles in this release. Thanks to Bob, Carl, and dew.mountain for kindly agreeing to add their puzzles to the distribution.

Next, Rosanna and I sat down and together wrote some quick mini-puzzles. These were pretty  fun to create, so hopefully we can build a good collection over time. Let us know if you’re interested in helping us.

Finally, I wrote to Māyā of Auckland to ask if they minded if I included their puzzles. Māyā writes cryptic crosswords that are of a very high quality — and that are a lot of fun to solve. They very kindly agreed to let me distribute them, so I’ve included ~90 cryptics.

This adds up to over 100 new puzzles available in this version.

Adding these puzzles took a surprising amount of time. They ended up highlighting a half-dozen or so bugs in the code base, and lead to substantial rewriting of a number of sections. In detail:

  • One of Bob’s puzzles came in puz format and used circled letters, so I added circle support to the puz importer. This is used fairly commonly. Now that we support it, I’m noticing circles a lot more in the wild.
  • Some of Māyā’s puzzles were made available in JPZ format. As a result, I finally wrote a convertor for this format. I also refactored the convertor to make it possible to add other formats in the future.
    NOTE: I did not have a lot of jpz puzzles to test while writing this. If you have some, please try this feature out and let me know if it doesn’t load correctly.
  • Māyā’s puzzles also thoroughly broke the enumeration code. The old regex-based parser wasn’t good enough to handle them, so I wrote a state-machine-based parser to handle this properly. There were really cute enumerations in those puzzles like:

    After first first exchange, 10 relates to blood vessels (7-)
    Solo star of this? Yes and no (3,3,4, couldn’t be parsed with the old approach.
  • These puzzles also forced me to get much more strict about the text handling. The ipuz spec allows a subset of html in certain tags, and you certainly run into puzzles with this in the wild. Complicating matters, you also come across random ampersands (&) that weren’t escaped, as well as other random entities.I wrote a simple html_to_markup() function that parses html (as best as I can) and converts it to valid GMarkup tags to pass to labels. This is mostly a matter of handling entities and escaping unknown tags, but there were definitely some subtleties involved. If someone has a better version of this functionality, let me know. On the other hand, maybe this implementation is helpful to someone else out there.

Thanks again to these puzzle authors!

Adaptive layout

The next big feature we added is making Crosswords work well at different screen sizes. I had a couple requests to make this work on mobile devices and Sam did a great design, so we tried to make this plausible. Unfortunately, there’s not a lot of formal guidance as to what’s needed here, other than to support small screens. I’d love if the GNOME Mobile folks would put together a checklist of things to support, as well as instructions as how best to test / simulate that environment without having dedicated hardware.

Nevertheless, we now support smaller screens! Here’s a video of it in action.

To make this work proved to be pretty tricky, as that packing is impossible to do with a standard GtkBox layout. The challenge is that that scrolled window holding the grid needs to have vexpand=TRUE set, but also have a maximum size so that the clue at the bottom doesn’t extend beyond the grid. I finally gave up and wrote a custom widget to do this sizing:

Note: I got a lot closer to a working solution with constraints, and was really impressed with how well they worked. Emmanuele has done a fantastic job with them. There’s a bit of a learning curve to get started, but they’re definitely worth a second look if you haven’t tried using them before. They’re more powerful than regular box-based solutions, and ended up being easier to maintain and experiment with.

For the sizing behavior to feel right, I also wrote code to restore the window size on restart. Fortunately, there’s a great example of how to do this in the tutorial. Unfortunately, the example doesn’t work correctly. After figuring out why, I wrote an MR to fix the documentation. Unfortunately I don’t know vala well enough to update that example, maybe someone who does can help me update it?


One more fantastic contribution arrived  towards the end of the release cycle: Davide and Michel packaged Crosswords for Fedora. I had never actually tried to install the game locally, but meson magically worked and they got it built. Now, running ‘sudo dnf install crosswords‘ works with f36/f37. As it’s Fedora, I may have to spend some time next cycle to straighten out all the licenses across the code base and puzzles, but that’s time worth spending.

One spooky Halloween-themed bug came with this work: word-list-tests test failure on s390x. That’s a category of bug I never expected to have to deal with ever again in my life!

In general, I’m really excited about the future of flatpak and what it means to the larger Linux ecosystem. I will continue to focus my efforts on that. But having it on Fedora is nice validation, and hopefully will lead to more people solving crosswords. I’d love it if other distros follow suit and ship this as well.

Odds and Ends

Other fixes this cycle include:

  • Massive cleanup to event code (Federico). This was huge, and moves us to a simpler event system. Really appreciated!
  • Also, Federico let me call him a couple Saturdays to get general design advice
  • New setting to avoid changing crossword direction when arrowing through the grid (Jonathan and Rosanna)
  • Mime types defined for ipuz, jpz, and puz files (Davide)
  • Cleanup of the color and contrast of shapes in cells (Jonathan)
  • New Italian translation (Davide)
  • MacOS fixes and testing (Vinson)
  • Loads of bug fixes (all)

Until next time!

Crosswords 0.3.5: Border Styles

It’s time for another GNOME Crosswords update. We’ve been busy since GUADEC and have managed to add quite a few user-visible features. We also fixed a bad bug where undo would break autosaving and added French translations. Buckle up, as this release goes to eleven!

As always, this is available on flathub.

Border Style

The first big feature in this release is recoloring the borders between cells. We previously had a single color (black) between the cells no matter what cell type it was. The recoloring is a subtle change, but I think it makes the puzzle look a lot smoother. We go with light borders between open cells, darker borders between blocks, and a really dark border around the outside. We also interpolate colors between cells with a background color explicitly set and to emphasize the cursor. Getting the details right took a good number of iterations but I’m happy with the ultimate effect.

This also validates the decision to create a widget for each border segment, as it made this a lot easier to implement. We use CSS styles to manage all the color combinations.

Border style comparison: new (upper-left) vs old (lower-right)
Highlight of border colors
Border styles with colored backgrounds
Acrostic puzzles also look cleaner

SVG Overlay

The next big feature we added was an SVG overlay over the puzzle. This lets us add graphics that extend beyond the borders of the existing widgets. Doing this lets us finally support enumerations in puzzles.

What’s an enumeration? Some crosswords let you know how many words follow a clue. It does this by putting hints in parentheses. It can also indicate punctuation where appropriate. As an example, (2-6,7) matches “GO-FASTER STRIPES” in 7dn in the puzzle below. In paper crosswords, solvers will often mark these hints in the grid with a pencil. We now do that on their behalf.

Enumerations rendered in the grid

We can also use the svg overlay to support barred crosswords. These puzzles look really cool – though are notoriously difficult to create and solve. I don’t know if we’ll get a good source for these until we seriously improve the editor, but I ported an existing one to .ipuz for testing purposes.

Barred crossword

Multi-character Support

I wasn’t fully happy with the state of editing when the IJ digraph support landed a few releases ago. The input method ended up being pretty obscure. As a result, I added generic multi-character functionality to the game. This feature will let you enter an arbitrary number of characters in a single cell. This is necessary for rebus-style crosswords which you occasionally find in the wild. It can also be used for the Dutch IJ as a more standard entry. You can enable this mode this by typing Ctrl-<period> or Escape.

Rebus-style crossword

This adds exciting functionality for fellow, faux, heavy-metal enthusiasts! We can now enter multi-character glyph. Behold:

Not the real answer, but close!

I’ve always wanted to do a puzzle with “SPıN̈ALTAP” as an answer. The N-diaresis doesn’t have its own unicode glyph and requires a combining character to work (u308). This feature lets you type it into the puzzle.

Keyboard Preferences

I’ve been involved with GNOME long enough to have a healthy suspicion of preference dialogs, and I resisted adding one for a long time. Unfortunately, there’s one preference that I’ve found I can’t avoid. Some people really like their online crossword widget to skip over letters when entering and some like them to overwrite letters — and there’s not a lot of compromise between the two sides. This has been the biggest behavior request I’ve received since releasing this game.

One of the goals this cycle was to refactor the internal state mechanism to make it cleaner (design doc). Along the way, it made this behavior change a lot easier to write.

This concept is so hard to explain! Anyone have suggestions for better text?

GNOME Contributor’s Puzzle Set

One last thing worth mentioning is a new puzzle-set (repo here). Since starting this project, I’ve had a few people send me puzzles to include, and we haven’t had a good place to put them. I created this as a place to ship puzzles from the wider GNOME-community. To start with, we’re including a handful of mini-puzzles and have started adding some standard ones. As soon as we get a bit more critical mass I’ll ship it via flathub.

If you’re interested in trying your hand at writing a crossword, this is a good way to make it available. Let me know if you’re interested.


Thanks to Federico for massive help and advise with the PlayState refactor, and for providing an SVG widget for the overlay. Hopefully GtkImage will get scalable SVG support in the future.

Thanks to Bob for finding and fixing a number of memleaks, and to the translators for language support.

Thanks to Zana and Carl for contributing puzzles.

And thanks to you for reading this far!

Download on FLATHUB


GNOME Birthday Cake

It was really lovely to get back to GUADEC. I loved being around old friends and meeting the new faces within the project. The venue was stellar and I thoroughly enjoyed a lot of the talks this year.

For me, my favorite talks were the progressive webapps talk by Phaedrus Leeds, Federico’s meme-filled talk on accessibility, and Rob’s talk about the Endless deployment to Oaxaca, Mexico.

[Note: I hope someone goes back to the youtube videos and adds timestamps / links to all the talks. It would be easier to find and browse  them. ]

On my part, I gave a talk on GNOME Crosswords and participated on a panel on how to get a Job with Free Software. The crosswords talk in particular seemed pretty successful. It had a great article written about it in (thanks Jake!), which lead to an increase in bug reports and crossword contributions.

One observation: it felt that attendance was down this year. I don’t know if it was Covid or Mexico, but some combination led to a smaller crowd than usual. I saw that there was a mini-GUADEC in Berlin as well (which I’ll assume was a lagging indicator of the above and not a cause.)

If we continue to have remote GUADECs in the future, I hope we can find a way to do a better way of connecting people across the conferences. One of the real advantages of GUADEC is it is a place for the project to unify and decide on big things collectively, and I’d hate for us to develop schisms in direction. I didn’t feel particularly connected to the folks in Berlin, which is a shame. I’d love to see them again.

Hopefully a few more of us can get together in Riga next year! But if we can’t, I hope we can find better ways to be more inclusive for remote events and individuals.

Crosswords Bof

Crosswords BoF
Crosswords BoF at GUADEC

There was enough interest from the Crosswords talk that we were able to hold an impromptu BoF on Saturday. Seven people showed up to work on various aspects of the game. We tested the existing puzzles, wrote some new puzzles, and added some additional features. Great progress was made towards UTF-8 support for the WordList, and some initial Printing support was coded.

More importantly, we were able to clean up a bunch of small papercuts. We tweaked the colors and controls, and also added acrostic support. The end result is a lot of visual tweaks to the game that improves the playability and appearance.

Acrostic puzzle featuring the new colors and crossed-out clues

I took a bunch of these improvements and packaged it up into a new release. It’s now available on Flathub.

Thanks to Rosanna, Neil, Federico, Heather, Jess, Dave, and Caroline for their contributions!
Download on FLATHUB


Mexico was lovely as always. I’ve always  wanted to visit Guadalajara, and it definitely met my (already high) expectations. It was a walkable city with lots of hidden spots and surprises in store. I’d love to go back sometime with a bit more time, and really explore it more thoroughly.

Guadalajara Cathedral and environs
Guadalajara Cathedral and environs
Arcos Vallarta near the venue
Arcos Vallarta, near the venue
Agave field in Tequila, Jalisco
Agave field in Tequila, Jalisco
GNOME Birthday party at Bariachi – a mariachi bar extrordinaire!
GNOME Birthday party at Bariachi – an amazing mariachi bar!
Cozy little bookstore
A cozy little bookstore
Guadalajara at night
Guadalajara at night

Crosswords 0.3.3: Double Dutch

It’s time for another GNOME Crosswords release! This time we had a focus on I18N support. I also got patches from another new contributor – Philip – who added some nice improvements, dutch-language support, and a downloader.

New features include:

  • A preferences dialog to let you filter puzzle sets by language. This gives us a way to only show puzzles either in your current language or in all languages. It opens the door for puzzle sets and downloaders in different languages.
  • Translation support. We have Dutch and Spanish translations now. It would be great to see more languages available for the next release.
  • Don’t grab focus when clicking on a clue. This was a small change that had a big impact on playability.
  • Copy/Paste support for the grid.
  • Undo/Redo support for the game.
  • Use the shiny new libadwaita AboutWindow.
  • Input now works on MacOS, making it fully playable on that platform.
  • Dutch-language crosswords work with the ‘IJ’ cell.

Wait, what’s that last one???

Amazingly enough, it turns out that Dutch crosswords allow an ‘IJ’ digraph in the same cell. This is an interesting twist on the crossword, as you can add an ‘I’ and ‘J’ character independently, as well as together.

Dutch puzzle showing IJ cell
Dutch puzzle showing an ‘IJ’ cell

To support this, I added a Quirks object that can be used to modify the behavior of the game. Beyond Dutch support, I started adding support for rebus-style crosswords as a second quirk. I imagine having to add more as we add additional language support.

Fortunately, we already supported strings within answers so this wasn’t too hard to implement. However, I’m not 100% sure I got the input controls correct. If you’re a Dutch crossword solver, I’d love to hear from you. I also hooked up the quirks to the help overlay so it only shows the special input mode when you have a puzzle that needs it (or are running it in Dutch).

I also added another extension to the .ipuz implementation to specify the locale of puzzles. We use that to filter puzzles, and add the quirks.

Lessons learned:

I thought I’d write down the things that I got stuck on this cycle in the hopes it saves other people time in the future:

Recoloring SVGs

GtkImage has the really convenient ability to recolor images when the appearance changes from light to dark. As far as I can tell, that functionality isn’t exported, so to use it you have to load the svg as a symbolic icon. Despite the documentation, it’s pretty finicky to get that correct so make sure to read all the documentation carefully. In addition, GtkImage really wants the image to be icon sized. You can override that with gtk_image_set_pixel_size().

recolored locked puzzles
Thanks to Sam for the new icons, shown here recolored.

Translating keyfiles with meson

We use keyfiles (aka, .desktop files) as a config file format to define the puzzle sets. These config files have user-visible strings added to them them, and then are compiled into a gresource file. This was surprisingly hard to get translated. Some notes:

  • xgettext supports –keyword=Keyword and -kKeyword to define custom keywords to translate. Unfortunately, despite being documented otherwise, msgfmt only supports –keyword=Keyword. Don’t use -k.
  • Meson doesn’t allow you to pass the language type to xgettext for an arbitrary file. In order to force it to use the correct type, I had to name my config file, and rename it to puzzle.config post-translation.
  • There’s no way for meson to have a compile-time dependency on the po files for i18n.merge_file(). In order to test it, I had to remove the translated desktop file in order to force rebuild it after every translation change. Meson 0.64 is supposed to fix this.

What’s next?

  • I’m giving a talk at GUADEC! Come hear the details of how this game was built and some interesting facts about crosswords. Sadly, I’m scheduled at the same time as the always-popular gnome shell update, but hopefully a few people will be interested in what I have to say.
  • To fully support internationalization, we need to support other languages for the wordlist. There’s an open bug for it. The work here shouldn’t be too hard, but will require a decent amount of work to make sure we’re multi-byte clean.
  • And as always, if you are interested in writing and publishing crosswords, let me know!

Download on FLATHUB


Crosswords 0.3

I’m pleased to announce Crosswords 0.3. This is the first version that feels ready for public consumption. Unlike the version I announced five months ago, it is much more robust and has some key new features.

New in this version:

  • Available on flathub: After working on it out of the source tree for a long while, I finally got the flatpaks working. Download it and try it out—let me know what you think! I’d really appreciate any sort of feedback, positive or negative.

  • Puzzle Downloaders: This is a big addition. We now support external downloaders and puzzle sets. This means it’s possible to have a tool that downloads puzzles from the internet. It also lets us ship sets of puzzles for the user to solve. With a good set of puzzles, we could even host them on These can be distributed externally, or they can be distributed via flatpak extensions (if not installing locally). I wrapped xword-dl and puzzlepull with a downloader to add some newspaper downloaders, and I’m looking to add more original puzzles shortly.

  • Dark mode: I thought that this was the neatest feature in GNOME 42. We now support both light and dark mode and honor the system setting. CSS is also heavily used to style the app allowing for future visual modifications and customizations. I’m interested in allowing  css customization on a per-puzzle set basis.

  • Hint Button: This is a late addition. It can be used to suggest a random word that fits in the current row. It’s not super convenient, but I also don’t want to make the game too easy! We use Peter Broda’s wordlist as the basis for this.
  • .puz support: Internally we use the unencumbered .ipuz format. This is a pretty decent format and supports a wide-variety of crossword features. But there’s a lot of crosswords out there that use the .puz format and a I know people have large collections of puzzles in that format. I wrote a simple convertor to load these.

Next steps

I hope to release this a bit more frequently now that we have gotten to this stage. Next on my immediate list:

  • Revisit clue formats; empirically crossword files in the wild play a little fast-and-loose with escaping and formatting (eg. random entities and underline-escaping).
  • Write a Puzzle Set manager that will let you decide which downloaders/puzzles to show, as well as launch gnome-software to search for more.
  • Document the external Puzzle Set format to allow others to package up games.
  • Fix any bugs that are found.

I also plan to work on the Crossword editor and get that ready for a release on flathub. The amazing-looking AdwEntryRow should make parts of the design a lot cleaner.

But, no game is good without being fun! I am looking to expand the list of puzzles available. Let me know if you write crosswords and want to include them in a puzzle set.


I couldn’t have gotten this release out without lots of help. In particular:

  • Federico, for helping to  refactor the main code and lots of great advice
  • Nick, for explaining how to get apps into flathub
  • Alexander, for his help with getting toasts working with a new behavior
  • Parker, for patiently explaining to me how the world of Crosswords worked
  • The folks on #gtk for answering questions and producing an excellent toolkit
  • And most importantly Rosanna, for testing everything and for her consistent cheering and support

Download on FLATHUB

Introducing GNOME Crosswords

GNOME Crosswords

Howdy folks! I want to announce a game for GNOME that I’ve been working on for a few months.

I’ve always enjoyed solving Crossword puzzles. It’s something I grew up doing as a kid, and we continue to do them as a family at the dinner table at night. I’ve wanted to try my hand at writing crosswords for a while, but there isn’t really a good tool available for doing so, and certainly no free software ones that work well with a recent GNOME release. I recently bought myself a lovely new Fedora-loaded Lenovo, and after it arrived, I thought I’d take a shot at writing such a tool.

Over the past four months or so I managed to get something worth releasing. The code is available here. It should build on relatively recent Linux distributions, though it does need libadwaita from git (toasts!). I also put together a flatpak file for testing here (no repo yet, as getting that set up defeated me). Once I’m more confident that the puzzles are solvable and fun I plan to publish it to flathub.

A dog's day
Non-traditional grid

Guardian cryptic No 28,605
The Guardian Daily Cryptic with reveal answers enabled


It’s still early, but it already has some fun features:

  • Puzzle Sets. The heart of the game is the Puzzle Set. It’s a collection of crossword puzzles that are tied together by a theme. Solving a puzzle unlocks more puzzles. I currently have one puzzle set (“Cats and Dogs”) with nine puzzles in it, but I have a few more puzzle sets planned. It contains mostly traditional puzzles, but I threw in a cryptic to keep people on their toes.
  • Nontraditional shapes and styles: I wanted to make something a bit little more whimsical and fun, as well as the more traditional puzzle grids. So I added support for colors and shapes as well. My son had fun doing pixel art to create some of the grids.
  • Reveal mistakes: For when you get stuck! It also supports checksums for puzzles that don’t include the solution.
  • Scalable grid: Currently the UI only exposes four sizes, but we have all the pieces to scale crosswords to different sizes.
  • Support for the .ipuz spec: This spec supports a ton of things, and I don’t support it fully yet, but most of the crossword part of the spec is included. There aren’t a ton of .ipuz files floating around, but you can use puzzlepull to download the Guardian Daily puzzle if you want to try some other examples.

Puzzle Set
The first Puzzle Set

Crossword Editor

GNOME Crosswords Editor

As part of building this app, I realized that creating grids was as big a part of the app as writing the actual game itself. To facilitate that, I started writing a crossword editor as well. It’s in the early stages, but it already has one of the most important features: a tool to create the initial grid. Making puzzles that fit well together is surprisingly hard. To make it easier, I wrote a crossword solver that quickly suggests words to fill in the grid. I’m proud of the design – it’s able to efficiently suggest options out of a list of 500K words really quickly (<1 μs on my machine). I was able to use it to build an autofill dialog that can recursively fill in a section of the puzzle when making a grid.

I still have more work to do on the editor and it’s clear that the autofill dialog isn’t a panacea, but it helped me figure out out some tricky corners. Here’s a video of the autofill dialog in action:


I especially want to thank Rosanna and my kids for play-testing this and suggesting clues, as well as their patience while I was writing it. Thanks also to Federico for giving great advice, great code, and for being a star. Matthias for helping me relearn GTK and explaining GtkIMContext. Also, the example code in GNOME Builder was immensely helpful for getting this started.

What’s next?

There are a ton of features I’d like to add to this game. It really needs printing support, which should be relatively easy. I’d also love to see it get internationalized (and not just translated) – are crosswords in non-Latin languages a thing? And I’ve seen enough of Benjamin‘s GUADEC presentations over the years to know GTK can do something cooler than popup a dialog when you finish a crossword.

But the most important thing is that the game needs to be fun! For that, we need more puzzles and the existing puzzles need to be better. If you’re interested in joining me in creating a good set of puzzles for Linux, try the game out and let me know.


I gave a talk on the History of GNOME for GUADEC 2017. (Slides are available here, and hopefully the video feed will be posted soon.) It was a great trip down memory lane, and I really enjoyed putting this talk together. I didn’t include my final thoughts in the slide so I thought I’d include them in this post:

  1. First, we didn’t appreciate how much work this was  when we started. We have totally beaten win95, but the expectations bar has risen every year
  2. We have done a helluvalot of great work, and largely kept pace with expectations. This has been an amazing accomplishment and we should be proud of what we’ve done.
  3. The future for GNOME is more important and more promising then it has ever been

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.

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!


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.


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!


*tap* *tap*  Is this thing on?


It’s been too long since I blogged, but this is a great reason to post. I am so proud of everyone who put this release together. Everyone worked so hard on everything, and the pride and artistry comes through in every corner of the desktop.  Kudos go to everyone involved; the engineers for their craftsmanship, the designers for their persistence and vision, the marketing team for telling such a great story, the web team for making a home we can be proud of, and everyone else who’s cared about the project and helped shape it along the way.

Having been around for every major GNOME release this is by far the smoothest dot-zero we have ever done. The commitment to excellence this time around was amazing and the enthusiasm has been infectious.  I am already excited to see what’s planned for 3.2.