skyjake

Author of Lagrange and admin of geminispace.org

Link

author: @skyjake@bbs.geminispace.org

avatar: 🏕️

2025-06-15 14:51 UTC

Summer is here

Finally, it seems summer is starting here in Finland. It's the first truly warm day, a pleasant 25 C (78 F). I'm enjoying a relaxing Sunday sitting by the grill. Sausages and chicken wings sizzle on the fire, their delicious aroma wafting my way.

The kids are running around on the lawn, spraying water at each other and belting out songs from Frozen. (Yeah that's still a thing.) They are getting increasingly impatient for the sausages.

Two more weeks of work remain before vacation. I doubt I'll be much in the mood for working. This close to July, motivation tends to plummet.

I haven't programmed much during the spring months, with the little productivity I've had invested into the day job. Weeks turning into months, I haven't even missed it that much. I find that surprising. Instead, I've been busy tending to the kids, playing piano, and reading a bunch of easy-to-digest books. It feels nice activating different parts of my brain for a change.

I've always found it easy to get back to programming after a break, though. It has a certain addictive quality, working towards a larger goal in a series of small steps, exploring a problem space. The only hurdle is finding an interesting goal to aim for.

View comments

2025-04-24 09:35 UTC

Huh, got some of these AI spammy issues submitted to my Codeberg projects, as well.

Link

While the contents were somewhat credible, the "adjectivenoun"' usernames and the use of Emoji as punctuation — after every sentence, no less — were clear indication that these could be safely and promptly deleted.

View comments

2024-12-31 09:05 UTC

The last of day 2024!

The middle of the 20s is already nigh, incredibly. Any plans to celebrate New Year's Eve?

View comments

2024-09-18 17:24 UTC

The release of #Lagrange v1.18.0 is imminent. I just spent a day clearing cobwebs off the build scripts that naturally had somewhat fallen apart, not having been used for several months.

The release will contain 11 packages (6 GUI, 4 TUI, source).

View comments

2024-08-27 14:35 UTC

A new gemlog post with Gemini project updates: Lagrange v1.18 is shaping up, GmCapsule got a couple of fixes and new features, and Bubble supports Titan editing.

Return to Form?

View comments

2024-08-13 15:48 UTC

Ah, the end of summer. Enjoying a warm evening sitting outside on the patio, thinking about Titan improvements for Lagrange. I had a few moments earlier to get started on the ";edit" parameter, although it was slow-going. The vacation has purged my mental models.

2024-08-01 05:19 UTC

The summer has been crazy busy for me with family activities, so I’ve been staying mostly AFK. We managed to fly to Greece (Rhodes) for a week-long trip, which was quite fun despite various toddler antics. Thankfully we weren’t hit by a serious heat wave nor did anyone catch a virus or some other bug. The kids are staying home for a couple more weeks, but from mid-August onwards things should calm down. Maybe I’ll get to open the IDE again then…!

View comments

2024-07-07 20:53 UTC

TFW you fight with the distribution scripts and AppImage configuration for hours and finally discover that the reason why the built binaries are misbehaving is because the compiler produced invalid code with the default -O3 and everything works perfectly if manually forcing -O2.

I suppose this is because I'm using such an old compiler to do the prebuilt Linux binaries (GCC 7.5 in Ubuntu 18.04)...

On the upside, I now have a working standalone `clagrange` AppImage _and_ a binary tarball as well, for extracting to /usr/local or somewhere.

View comments

2024-05-13 10:40 UTC

BBS Turns One: A Retrospective

BBS, née Geminispace.org, was launched exactly one year ago today. I figured it would be fitting to take a brief look at the past 12 months. Hopefully this is useful as an introduction to newcomers as well as something to reminisce about for those who have been here since the beginning.

Introducing: Bubble and Geminispace.org

Before the launch, one thing that made me hesitate was that, as a father of two young children, my time and energy are rather limited when it comes to leisure activities, so is committing to a new project sensible given that I consider Lagrange as deserving most of my attention?

This was partially behind the technology choices of having the bulletin board be implemented as an extension to my Gemini server and writing it in Python, a high-level language that lets you get a lot done quickly and easily. Looking back, this was probably the right choice, because without a low friction project, the busyness of daily life — taking care of a baby — risked me getting detached from Geminispace. I know from previous experience that week-long breaks can turn into month-long ones, and suddenly a project has completely exited working memory and resuming it requires some dedicated effort.

Another concern was the relationship to Station, the original Gemini microblogging capsule. Functionally, BBS is pretty much a direct superset of Station and could serve a similar purpose in Geminispace. I didn't want Station to be abandoned, though, further worsening centralization in the network. Thankfully, Station continues to thrive thanks to its approachability and large user base, and with BBS around for longer-term topic-based discussions, Station can remain more personal and generic which suits its feature set well.

I am generally pleased with how BBS has evolved and matured over this time period. It has proved to have some productive utility, too, in the form of software issue tracking, at least for myself with Lagrange, Bubble and GmCapsule, and @Addison with /s/Rosy-Crow-Issues. I hope it has been and will continue to provide some necessary connective tissue in the Geminispace community, as one of the centralized channels that balance the decentralized self-hosted essence of Gemini.

Evolution of Bubble

"Bubble" is the name of the software that powers this capsule. It is a Gemini-based bulletin board system that can be summarized as a union of Station, Reddit, WordPress, and issue trackers like GitHub Issues.

Below I've summarized the Bubble feature updates over the past year. There have also been several patches that were applied silently save for a minor version bump on the Settings page.

2023-05-23 Bubble v2.0: Special Commands, Notification Improvements

The first update focused on enhancing the core features of Bubble, like making notifications more reliable and having them persist for a week after having been viewed, and added special commands to make posting and commenting more flexible. User account and subspace renaming was also added.

2023-05-30 Bubble v3.0: Thanks and Reactions, Private Mode, Improved Issue Trackers

The second update came only two weeks after launch, continuing quick iteration of the basic feature set. Credits go to @Morgan for the idea of the private Thanks feature, as a way of indicating one's appreciation without any risk of it becoming a public popularity contest.

2023-06-06 Bubble v4.0: Muting, Tag Filters, Monthly Archive

The third update continued rapid development by adding new ways to personalize your feeds.

2023-06-20 Bubble v5.0: Comment View, Index of Posts, Time Zones, Certificate Recovery

The initial development phase ended with the remaining essential features: viewing individual comments (and the partial discussion thread following them), index pages of all posts and comments by a user, and ways to recover your account in case you lose the client certificate.

2023-07-18 Bubble v6.0: Atom Feeds, Expanded Help

Atom feeds were added as an additional format for user and subspace feeds.

2023-11-12 Bubble v7.0: Subspace Views, Grouped Posts, New Feed Options and User Actions

After a lengthy period of just fixing bugs, the November update made substantial changes to the Bubble UI, with post grouping and new ways to view subspace activity. New feed types were also added, including a Unified Timeline for mixing comments together with new posts, and the Activity sort order was added for keeping track of old posts with recent comments.

2024-01-10 Bubble v8.0: Flairs and Locked Posts

2024-01-15 Bubble v8.1: Flair Composer, User-Defined and Moderator Flairs

The January updates gave moderators more capabilities to keep discussion in check, and also enabled users to more prominently express details about themselves via the flair system.

Notable events

In June, the capsule was renamed to "BBS" because the original name "geminispace.org" was too generic.

Credits to @jeang3nie for suggesting the new name.

In July, I started publishing monthly archives.

Bubble archives use the Gempub format that is basically a ZIP archive with some .gmi files inside. You can view these directly in Lagrange or unzip the files and open them with any Gemini client.

In August, user "a459" started dominating the front page with 10+ daily posts and got booted off the All Posts feed (until November).

In October, a vandal used a script to create 10000 fake accounts with slurs in usernames, and spammed the front page posts with dozens of likes.

I happened to be asleep while the attack was ongoing, and had a busy morning implementing new admin tools to clean up the mess. In hindsight, a simple rollback of the database to an earlier backup may have sufficed. The motivation for the attack was likely retaliation after I deleted a few racist derogatory remarks.

After the malicious posts/reactions were deleted, an account approval policy was implemented.

In November, a better solution was introduced for keeping the front page balanced.

Automatic post grouping prevents a single author/subspace from dominating the feed in a more dynamic and fair way.

In January, the US politics subspace and moderation policy were added.

Discussion about politics is prone to devolving into flamewars and talking past each other.

The live "/stats" page was added.

In addition to the total number of registered users, the Statistics page shows how many have ever posted or commented, and how many have done so in the past 30 days. I'm not actively following these metrics, though. Comparing to the only recorded data point (on January 16), today's activity is down roughly 20%, but that level of fluctuation seems normal for Gemini based on what I've seen on Cosmos.

Also in January, following a series of negative interactions and violations of the Code of Conduct, the Flairs system and post locking were introduced to improve moderation capabilities. Flairs were soon expanded to enable users to give themselves customized descriptions.

What is yet to come

I consider this first-generation incarnation of Bubble now mature enough to be serviceable for the next few years as is. It is always difficult to predict exactly what the future holds, but I would be quite happy even if Bubble never gains another feature again. (Which is unlikely, though.) This is to say, as the availability of my time increases over the next months and years, I would rather focus on Lagrange as my primary project, while doing small feature updates to Bubble here and there.

Perhaps the biggest missing potential feature that has been discussed is federation with other Bubble instances. One of my initial motivations for starting the project was to convert the skyjake.fi capsule into an instance of Bubble, and have my gemlog and (what became) BBS interoperate while remaining separate entities. This kind of federation has the potential of giving us the best of both worlds: there are the individual capsules living their own lives, but they can also work in unison as a larger collective community. However, while this is great as an idea, the technological cost gives me pause. Especially with Gemini, the attraction to simplicity is a concrete and beneficial factor, and constructing an elaborate — albeit not as elaborate as ActivityPub — mechanism on top seems counter to the ideals of Geminispace. I would expect federation to be on the back burner for a while, and if it comes to pass, it will probably be a minimum viable kind of implementation rather than something that makes separate instances truly feel functionally like a single place.

And with that, I hope your stay here on BBS and in Geminispace at large remains a pleasant one. Let's use our time to build small, nimble things that never aim to take over the world. 🥂

View comments

2024-05-06 02:19 UTC

@gritty When I open the "Play Farkle" / proceed to app link (/farkle/app), it has started responding with status 10 so I get an input prompt. A bug? The game works normally after submitting empty text in that initial query.

View comments

2024-04-20 14:37 UTC

Focus Time

A new gemlog post...! Related to the circumstances described therein, I encountered various curveballs writing this: the first iteration got deleted due to a bug in my Titan scripts (side effect of the recent GmCapsule PATH_INFO changes), and I had to pause a dozen or so times to address some crisis or other (a climbing toddler and a smashed kitchen chair among the chief concerns).

2024-02-06 19:08 UTC

Much like last year, this January and early February are turning out to be annoying, health-wise. The whole family is taking turns coming down with a cold. My own nose has been running for a couple of weeks now, which is mostly an annoyance. The real problem is that when the kids get sick they have big issues with sleeping, which means I won't be sleeping much either. Productivity has ground to a halt.

Consequently, my caffeine-break has been disrupted and I'm back on a regimen of 2-3 cups per day. To generally improve my mood, I'm also enjoying a healthy dose of retro-computing videos. There's really something about watching old Commodore computers and ancient PCs being restored to a fully working condition.

View comments

2023-12-24 21:02 UTC

Yule-Time Well-Wishings

I feel like the modern secular version of Christmas — aka Santa and gifts — is so far-removed from its original meaning that a different word should be used for it altogether.

Fortunately for me, here in Finland we continue to call it "Joulu", as in the old pre-Christian feast called Yule.

Have a fun Yule celebration, Geminauts!

*<:)

View comments

2023-11-14 17:00 UTC

Is it appropriate to celebrate 1700000000 with fireworks? 🥳

A few more hours left.

View comments

2023-11-04 10:59 UTC

My original Raspberry Pi 400 developed a problem with its USB ports. The computer would lock up if one nudged the attached cables even a little bit.

It’s been sitting on the table unused for months, yet still I felt compelled to buy a new one. And the new one works great! But it’s still sitting unused because I’m too busy with other stuff.

View comments

2023-10-27 12:44 UTC

If anything, the events of the past couple of days have gotten me back into Bubble development after a few months of hiatus focusing on Lagrange.

With Lagrange v1.17 in a decent shape, I might as well forge ahead with my Bubble to-dos. There is a bunch of bugs to fix and a couple of new features to add.

View comments

2023-09-10 16:02 UTC

I've been caffeine-free for a week now, having successfully (and rather painlessly) eased myself off of coffee. I feel... fine? My energy levels are stabler. Quality of sleep has improved.

It would probably be wise to repeat this every few months. Can't wait to get back to enjoying the occasional cup, though. ☕️

View comments

2023-08-29 06:51 UTC

@betabube Emails sent to your email notification address are bouncing because the "betabube.xyz" domain is not found. I've reset your email address for now to prevent further errors.

2023-08-12 07:41 UTC

@Mirari Your email notification address is not working:

User unknown in local recipient table

View comments

2023-08-02 08:38 UTC

It's time to de-weed the #Lagrange to-do list. There are about 250 items on the list and I'm pretty sure I haven't even looked at the bottom 150 in the last twelve months. Some items are already taken care of and some have become obsolete. Some are too ambitious/far-flung to keep around in the list.

I'm pretty sure I'll find enough small stuff to put together a v1.17 before focusing further on the v2.0 features.

View comments

2023-07-27 05:49 UTC

Testing a toot via bbs.geminispace.org.

This is supposed to go out through the u/skyjake Atom feed via feed2toot.

2023-07-09 19:27 UTC

Welcome to Bubble @solderpunk!

View comments

2023-07-03 13:05 UTC

I was mostly AFK last week, as we were on a vacation trip with the family. Let's say it was... eventful? Our 11mo soon-to-be-toddler wasn't really pleased with any of it. I suppose relaxation isn't really on the table when traveling with small children. 😓

It'll take a few days to recover from the trip, but this is a good opportunity to catch up on TV shows I've missed in recent months, like Last of Us and The Mandalorian S3.

View comments

2023-07-02 11:06 UTC

BBS Archives

I've added a Gemfeed page for the Bubble archives exported from BBS.

I'm not entirely happy with the general formatting of the pages, but it should suffice for now. I also toyed with generating a more book-like Gempub, but ultimately decided it wasn't worth it to make a completely different kind of rendering of the posts just for the exports. Now the implementation can use the same code for regular viewing and exporting.

BBS Archives

2023-06-23 06:28 UTC

Hmm, the new Bubble comment page could still need some tweaking. At least it should integrate the per-page notification list and maybe move the OP section always to the bottom, so the Later Comments are immediately visible. At the moment, the placement depends on comment sort order.

The formatting of the comment itself should probably be changed to be same as on the main post page, i.e., move metadata below the content, but still keep the "Comment on:" at the top.

View comments

2023-06-13 19:05 UTC

I'm trying to get more into a multi-window workflow with my personal use of Lagrange. Since the app was initially created with a single-window GUI, that's what I still typically tend to use.

It's quite handy to keep two windows open, like now while writing this I can type in one window while keeping another open for unrelated things. (Like SpellBinding. 🙂) You could do the same with split view mode, but I like to the keep pinning enabled to help with hierarchical navigation, so the splits can cooperate.

I have a feeling that if I purposefully keep using multiple windows, there are new bugs to discover...

View comments

2023-06-11 10:25 UTC

Slowly getting Lagrange v1.16.4 out the door.

To be clear, it's still stuck on the doorstep, not quite out the door yet.

I've been trying to fix several small glitches/annoyances recently, but the nature of a truly cross-platform app is that doing changes on one platform will cause subtle issues on other platforms. Doubly so when dealing with a custom GUI toolkit.

It's much like juggling lots of balls, or herding wild cats, or possibly juggling a bunch of cats.

View comments

2023-06-03 10:24 UTC

Did some old-fashioned UI debugging to fix a couple of issues with Lagrange's multi-window behavior. One issue seemed to be an SDL bug, but it may have been a problem only on macOS.

View comments

2023-06-01 11:47 UTC

What's in a Name

The domain name of this capsule has been a topic of discussion.

I've already added an introductory text to the Help page that sheds some light on what's the deal here, but to further alleviate potential confusion, I've decided to switch this Bubble instance over to a subdomain.

@jeang3nie suggested using "bbs", and I agree that is a nice choice because:




Thanks to some improvements in the GmCapsule server, I've redirected the main domain to bbs.geminispace.org. All URLs in the old domain should redirect to the corresponding bbs URLs.

Using a subdomain not only clarifies the purpose of the capsule, but gives motivation to add more subdomains for other things. For starters, I've added a Tinylog convenience redirection URL:

gemini://tinylog.geminispace.org/username

For example: @skyjake@bbs.geminispace.org

While I'm not planning to use the main domain geminispace.org for anything directly, it could be pretty nice for Tinylog user names. AFAICS, there is no mandated 1:1 mapping between the Tinylog author capsule and the URL where the tinylog is actually hosted, but @bacardi55 can set me straight on this.

View comments

2023-05-31 19:27 UTC

After getting used to editing content on Bubble using Lagrange, it feels so clunky to use `ssh` and `nano` to update the skyjake.fi capsule.

View comments

2023-05-29 20:44 UTC

Almost time for Bubble v3. This week's update will be wide-ranging and has a couple of new feedback mechanisms in addition to the plain old Likes. But importantly, the style of feedback will be customizable in the site config and user settings.

I will update the capsule to v3 sometime tomorrow. A little teaser: 🙏🔥🛂

View comments

2023-05-28 07:53 UTC

Bubble commit 6d7b8eaf

Multiple people have requested an option to disable the Likes mechanism on Bubble. A site-wide configuration option and a per-user setting for this are coming in v3.0.

View comments

2023-05-26 19:44 UTC

I've got "✏️ 3 drafts" staring at me here, but lots of coding to do. ☺️

It's nice having a place to keep gemlog ideas and general thoughts floating around until there's a suitable moment to finalize them. Since I'm on multiple devices/OSs, keeping drafts only on one would be cumbersome.

I realized I can copy-paste the composer preview output and upload that to the gemlog so I can draft posts on Bubble and still publish them on the original site.

2023-05-24 19:42 UTC

I think I've been approaching this Bubble notification suppression the wrong way. What I actually want is for all the enabled types to be emitted, so they can be grouped/combined together in a smarter way when rendering.

For starters, I'll set up proper priority tiers for the notification types and ensure that from each grouping only the highest priority one is actually shown. The others can be silently discarded.

Also, the flags determining which notifications you have enabled weren't checked half the time, so there's that, too. 😅

View comments

2023-05-23 14:34 UTC

Planning to upgrade GS.org to Bubble v2.0 in a few hours. Fingers crossed!

View comments

2023-05-22 12:19 UTC

Bubble has now been running on Geminispace.org for a week, and I think things are going rather well. Here are some technical and non-technical observations.

One Week on Bubble

View comments

2023-05-21 08:06 UTC

Whenever I make a new Lagrange release, I wonder if it makes sense to start distributing the binaries via Gemini as well. It would be pretty trivial to offer downloads via git.skyjake.fi.

Could give it a try at some point.

View comments

2023-05-20 19:08 UTC

The Lagrange v1.16 release announcement has been written, so unless something explodes in testing v1.16.0 should be available tomorrow (Sunday 21st).

With some of the past releases, it has taken me several days to properly describe all the changes. Thankfully, this release is smaller so I managed to write the post in an hour or so.

View comments

2023-05-19 19:04 UTC

Making some nice progress with Lagrange v1.15.10 now.

Come to think of it, it has been almost a month since the previous release and this is not strictly bug fixes, so I might as well semver it to v1.16. Not gonna have any huge new features, though.

View comments

2023-05-19 14:26 UTC

In addition to the user and subspace exports, I'm thinking of doing a monthly Bubble export feature with all the posts that were made during a time window, or were commented on, across the entire site.

I keep thinking these monthly archives would be similar to mailing list archives. They don't have to be presented in the same way, but they could be made available as static browsable Gemtext files on some different server.

View comments

2023-05-18 15:11 UTC

Let's try some Lagrange dev liveblogging

I think if one already has a gemlog on their own capsule, they probably don't want to write too many long-form posts here. But the /u/ feeds are well-suited for microblogging, too, without the need for any custom scripting, SSHing, or other such solutions.

The use case is exactly the same as on fedi, I suppose, but I don't feel like spamming a lot of low-level dev details there.

View comments

2023-05-15 20:35 UTC

I should try combining entries from u/skyjake into my old gemlog page at

Link

View comments

2023-05-15 09:41 UTC

Re: Who Likes the Likers

CircaDian:

[...] I think a low-barrier-to-entry feedback mechanism is important for Gemini, then briefly mention why I think “thanks” is the right action and “like” is not.
What I mean by “thanks” vs “likes” is that “thanks” are a private message to the post author, while “likes” are public and might be used for filtering/discovering content.

Thank you Morgan for the suggestion. This is certainly food for thought.

The gamification of social media and the resulting negative downstream effects are something we all should be keenly aware of. The larger a network becomes, the more the forces multiply and this becomes bigger and bigger of a problem.

When it comes to Bubble/GS.org, scale-wise there's plenty of time to consider appropriate improvements. I'm thinking the classic Like mechanism isn't too bad in this context, but making it a step more private — and perhaps psychologically healthy — is to hide the names of the likers from everyone except the post author.

Discovery algorithms are a topic unto themselves, but I don't think these become relevant until the scale is so large that the feed of posts is too busy to keep track of. I will keep thinking on this, though.

View comments

2023-05-14 22:33 UTC

How about we test a poll?

Bubble's polls have neat bar graphs done with box drawing characters. How is this working for everyone:

View poll

2023-05-13 21:26 UTC

I've been so focused on Bubble that I entirely forgot to water my Astrobotany plants. Thankfully they are still alive. 🌳

2023-05-13 20:21 UTC

The site has been up for a couple of hours now and nothing has exploded. 😅 I'm getting some email notifications, too, which is quite nice.

2023-05-13 17:37 UTC

Introducing: Bubble and Geminispace.org

I have begun a new Gemini project:

💬 Bubble

It is a Gemini-based bulletin board system that can be summarized as a union of Station, Reddit, WordPress, and issue trackers like GitHub Issues. It is implemented as an extension module to GmCapsule, my Gemini server.

Although I have written Bubble primarily for my own needs, it is also purposefully designed to be generally useful for other individuals and communities. Therefore, it has multiple objectives and target audiences:





That may seem like a lot of ground to cover, but in practice these use cases have much in common. The same post & comment thread structure is used everywhere, and features like post tagging and user @-mentions are available throughout the capsule.

A few features worth highlighting:








Bubble v1.0 is about 4000 lines of Python, written enthusiastically over a two-week period. (For comparison, GmCapsule itself is 1900 lines.) Everything is very nascent and there are some sharp corners, but generally things should be functional.

Geminispace.org

The Bubble instance you are on now is called Geminispace.org. It is a sister site to skyjake.fi: you may note that these are on the same IP address and now share the same server certificate. I am running Bubble here primarily for dogfooding purposes, but with the ambitious goal of sunsetting the Lagrange GitHub issue tracker and moving the issues here instead:

Link

There is a lot to say about large corporations trying to control the Git hosting ecosystem, and while better alternatives like Codeberg exist, it has always struck me as a fundamental conflict to have to depend on the Web for a core part of Gemini software development. The combination of Gemini + Email + Git seems a much better fit for Gemini projects. The more I can stay away from the web browser, the better. Bubble is still somewhat rudimentary in its current state but with some further work, I believe it has a chance to be quite a nice tool for issue tracking, fully in Geminispace.

Bubble can be configured for open registration of new users, and Geminispace.org currently allows that. You are welcome to come kick the tires with me and see how the platform evolves! Personally, I'll probably try posting more via u/skyjake and see how that feels.

View comments


Source