Thoughts from Exploring Micro.blog

Micro.blog is an unexpected, possibly excellent, solution.

First, the obvious: setting up a blog and a theme of choice is as easy as 1-2-3 (I installed Paper, the theme I couldn’t get to work in my Hugo blog).

Second, it’s about FOSS and even better, it’s Mastodon-focused. Same community of people. The general idea is in line with how I think: when you want to vent for a few lines, it’s a post on Mastodon; when it becomes too long (over 250 characters), it switches to a blog post automatically. Both show on your blog: the vents won’t have a title, just a date, while the posts will have a title. Easy as that.

Third, working with Emacs is a breeze. Write in org, convert to markdown, copy and paste. This works very well. When pasting, Grammarly’s extension highlights errors for me.

Forth, while it costs money to host a blog on Micro.blog, it’s nothing compared to WordPress, starting at $5. It’s a good service and a good community I don’t mind supporting with money.

So what’s not good?

First, I’m dependent on a service. It works from one central location. If they shut down or get bought tomorrow, no more blogging. I’m starting to make peace with the fact that this is the case for whatever social media/blog is out there because going public with something means using the “cool” thing, which will be replaced by the next cool thing the next day, but that’s the world we live in. At least I have all my content with me in my org files.

Second, it’s confusing. Yes, it’s kind of Mastodon, but I can’t use my existing Mastodon account. Micro.blog creates its own. I can cross-post, sure, but that’s too much. I don’t want every single conversation on Mastodon posted to the blog, that’s just messy, right? So there’s a bit of a workflow issue here. For now, I’m cross-posting with my feed account on Mastodon.

Third, which is more like 2.5, are a couple of technical issues I need to work out here as I go. Things like slightly adjusting the theme (I will not settle for an AM/PM clock!), figuring out how to deal with replies/comments, and how to interact with folks on Micro.blog.

For now, I’m enjoying the exploration.

I’m sorry folks. This is not breakfast.
For me, this is not even lunch. Eek. Auto-generated description: A menu displays breakfast options including Rib-Eye Steak and 2 Eggs for $28.75 and Bistec de Palomilla and 2 Eggs for $22.74.

Note to self: Do not order a salad as part of a delivery from a non-vegan place. They have no idea what the word means, and you will always be disappointed.

Mastodon guys podcast idea

I don’t want my only “real” blog post to be about being sick, so here’s another quick update.

Feeling like myself today again, and besides the stuffy nose, things are good. The sun is out again, and I think it’s time to go out for a walk with my camera and enjoy the fresh air.

Yesterday I chatted with George and Adam about random technology things. It was fun in a way I was hoping it would: just three guys randomly chatting about a bunch of geeky topics. Of course, George and I tried to get Adam to see the light and join the #Emacs church, but all in due time. I’m sure Adam will come to the glory and light eventually.

The idea was to record and make this into a podcast. This seems like it could take off: we have the content, the schedule, and the tools. We just need to iron out a few things (like, where do we host the podcast itself? What good platform exists?) The coincidence that Micro.blog offers podcasting hosting didn’t escape me. I’ll look more into that.

Playing around with Micro.blog. More like trying to wrap my head around its mastodon relationship.

This service is "smart" enough to know to convert long posts to blog entries, while providing a quick link on Mastodon. Short posts will show fully on Mastodon (and in the Micro.blog's direct feed of the community).

It's interesting how it works, sort of a mix of Mastodon and a blog in one. I think I like.

@grueproof @joel

First Post on Micro.blog

I’m testing Micro.blog to use for quick blog-like updates. If you’re reading this on Mastodon, it means cross-posting is enabled correctly from Micro.blog to Mastodon.

This post is written in Emacs org-mode, which I will convert to Markdown, then copy-paste to Micro.blog. The website (blog) I opened with this service is jtr.micro.blog. It was very easy to find and install a theme I like. Ironically enough, Micro.blog is using Hugo, which is what I’m trying to replace.

Please forgive typos, I’m recovering from COVID and my brain is floating on different cold medicines.

This is another test post, to see what posts here do with my existing mastodon account which I created for feeds. fosstodon.org/@jtr_feed

The problem with Signal

No, I don’t mean the new “hack” from Cellebrite, which still seems to make waves1. There’s a more fundamental issue at hand, a result of Signal being secure, not because it’s flawed somehow.

Privacy as Ownership

I’ve been thinking about privacy for a while, if that’s not evident from my recent blog posts. The word is so widely used these days it lost tangible meaning. What does privacy even mean anymore?

To me, privacy is the option to share information. To have a choice. This post I’m writing right now, for example. I can keep it to myself, deep in my journal pages, where it will never be shared. Or I can push it to my repository on GitLab, which will cause Netlify to pull it and build a post on its virtual Hugo environment, with DNS pointing to my domain, for the whole world to see.

In order to have this choice, I first need to own my data. In the old days, I used to have a blog on WordPress.com. There was no local copy; I’d just log into the website, work on my draft, and publish. I never truly owned my data, despite whatever WordPress might say. They could have shut down my account without a second thought, and all of my posts would have been gone forever, no matter how loud I’d yelled. No data ownership, no choice, no privacy2.

Can I Own my Data on Signal…?

At this point, you can see what I’m getting at: with Signal, I don’t own my data. Sure, my conversations are end-to-end encrypted. Sure, no one besides me and the person I’m talking to, not even Signal, can read these conversations. But the WordPress problem I described above still exists: I don’t own the conversation.

Even though the conversation itself is stored locally in a database on my phone, it is fully encrypted (as it should be), and even if I decrypt it (in a similar manner Cellebrite did3, it is still not laid out conveniently. It looks like lines in a table. After all, it’s a database you’re looking at.

As far as I know, Signal doesn’t have the option to export conversations4. To do so would be a security risk for sure, especially for non-informed users who just want to have an encrypted chat client on their phone. However, I believe there’s room for such a feature, perhaps with limited access. Maybe for developers or folks who want to build Signal from source, which I think is still possible (Signal has their repository on Github).

Footnotes

1 If you’re curious if there’s truth in these claims, start by reading Signal’s official response and follow up on Reddit for a few entertaining remarks.

2 You could argue that having my post hosted on GitLab is not much different than WordPress, and you’d be right, with one important exception: all my posts are local before they ever get pushed to GitLab. GitLab, and the post you’re now reading, are just a copy of my original content, which I do my best to preserve with encrypted backups. If GitLab closes my account tomorrow, I won’t lose anything. I could probably relocate to a new repository within the same day.

3 The retracted blog post on their site showed how they decrypted the local database on an Android device. In a way, it was pretty informative. The big problem with it was that it was no hack at all: they described a way to decrypt the information using an unlocked phone. The equivalent of breaking into a house after you have already unlocked the front door with the key you happen to have.

4 There’s an option to creak a local encrypted backup, but this backup is meant to be used with Signal. If you don’t have Signal, you can’t use this option.

I was listening to some Brahms music and I was thinking I should find myself some more, but I forgot how hard it is to get a proper classical music CD.

Searching is always difficult, and then my NYPL card doesn’t work anymore. When I do find a CD, I need to pick it up from the library and record the tracks to mp3 of flac files.

Why not just listen to streaming music? Because it seems every musician and his grandma create some Brahms cover (this is much worse of course for Beethoven, or Mozart) and you end up listening to some electrical guitar mix with drums that some 20-year-old thought was cool.

Comment from 2024-12-12: Since then, I’ve learned and subscribed to Idagio, an online lossless streaming service that keeps my classical music cravings satisfied

Schedule Post… My first “Tex-Mex” (totally isn’t, thankfully) is breakfast. It was pretty good: scrambled egg (a single one, thank you very much), a few tomatoes, spinach cut on top, a strip of sriracha at the bottom, and zaatar on the whole thing. Love it 📷:

Auto-generated description: A flatbread in a pan is topped with scrambled eggs, spinach, and cherry tomatoes.

Making it was a bit cumbersome because I prepped the egg first, then I had to watch the pan. Then I warmed up the spinach and tomatoes, and finally, I put everything in the wrap and put it on it to warm up. I think there’s a better way to do this; it feels like I did it backward.

Belladonna of Sadness, 1973 - ★★★ (contains spoilers)

This review may contain spoilers.

This movie is not fully animated. At least not in the traditional sense. Most of the motion in the movie consists of the camera panning over long strips of paper showing the progression of the story from right to left. This is not to say there is a complete lack of animation. There's enough of that, and though basic, it fits in its elementary - and at times primal - methodology. You'll need to watch this one with an open mind and a healthy dose of patience.

This mechanism is important to how the movie delivers the story. It allows a gradual change in the tone and mood of what's going on. In a certain scene, for example, a crowd of people seems content, but as the scene goes on, the faces shift, the colors darken, and an angry mob emerges. This kind of transition is often reinforced with sounds and colors, another important element of storytelling. The red of passion and violence (of which there is a lot), the pink of beauty, the green-yellow of evil and sickness, and even the black of nothingness for a pause.

I mentioned passion and violence. This movie swims in those. Nudity is not hidden nor implied. drawings of breasts, vulvas, and penes dance on the screen while orgies of all genders and even a couple of animals blend into violent rivers or red. The cliche elements are here: sex is evil (the devil is shaped like a large penis); pleasure is sin; women corrupt. It's all there and might rub certain folks the wrong way. This is also a good point to mention that rape is a part of this movie. If this is a hard line for you in movie watching, I'd sit this one out.

But this movie doesn't dwell on cliches, and just as I was about to roll my eyes, the movie ask something I didn't see coming.

"Who says anger and hatred are ugly," the devil asks Jeanne after she sold her soul to him. The scene is painted with colorful butterflies, while soft bells chime in the background. Jeane lays naked after, having an orgasm of a lifetime. Can such a thing be fundamentally evil? And if not, are we evil for teaching it is? It's an uncomfortable question to ask, and I was happy to see that not only the film didn't shy away from it, but chose it as a focal point. There is no peace without war, and there's no haven without hell.

The movie draws a direct connection to women in the French Revolution, not too long after they were considered to be witches. The fear of men of women is everywhere in this film. There's a woman who wants to have sex with her husband more often but knows contraception is against god. they are too poor to afford to have more kids. She decides to use contraceptives anyway (a gift from Jeanne, who is called a witch at this point) and finds happiness not just for her husband but for herself.

It's not a coincidence that at the end, when the "witch" Jeanne is burned at the stake, it's not a stake at all: it's a cross. She suffered continuously by the hand of the people she worked hard to serve and help with the aid of the devil. These were the same folks who stood silent while she was burned alive.

An interesting question is not "was this woman evil," but the underlying one: is the devil, who helped the woman and through the abilities, he gave her helped the people, evil, or is it god, who's teachings caused such an artifact of beauty good will be destroyed? Are we born into sin, or are the teachings of the priests the ones who turn us into monsters?

There was nothing evil about Jeanne: not at the beginning of the movie and not at the end. Even when she thirsts for revenge and goes after the people, perhaps blamed for the Black Death in the film, one has to recall the nightmare she spent her waking life living. Why wouldn't she want revenge? Wouldn't we? Don't we?

Belladonna of Sadness, 1973 - ★★★ (contains spoilers)

This review may contain spoilers.

This movie is not fully animated. At least not in the traditional sense. Most of the motion in the movie consists of the camera panning over long strips of paper showing the progression of the story from right to left. This is not to say there is a complete lack of animation. There's enough of that, and though basic, it fits in its elementary - and at times primal - methodology. You'll need to watch this one with an open mind and a healthy dose of patience.

This mechanism is important to how the movie delivers the story. It allows a gradual change in the tone and mood of what's going on. In a certain scene, for example, a crowd of people seems content, but as the scene goes on, the faces shift, the colors darken, and an angry mob emerges. This kind of transition is often reinforced with sounds and colors, another important element of storytelling. The red of passion and violence (of which there is a lot), the pink of beauty, the green-yellow of evil and sickness, and even the black of nothingness for a pause.

I mentioned passion and violence. This movie swims in those. Nudity is not hidden nor implied. drawings of breasts, vulvas, and penes dance on the screen while orgies of all genders and even a couple of animals blend into violent rivers or red. The cliche elements are here: sex is evil (the devil is shaped like a large penis); pleasure is sin; women corrupt. It's all there and might rub certain folks the wrong way. This is also a good point to mention that rape is a part of this movie. If this is a hard line for you in movie watching, I'd sit this one out.

But this movie doesn't dwell on cliches, and just as I was about to roll my eyes, the movie ask something I didn't see coming.

"Who says anger and hatred are ugly," the devil asks Jeanne after she sold her soul to him. The scene is painted with colorful butterflies, while soft bells chime in the background. Jeane lays naked after, having an orgasm of a lifetime. Can such a thing be fundamentally evil? And if not, are we evil for teaching it is? It's an uncomfortable question to ask, and I was happy to see that not only the film didn't shy away from it, but chose it as a focal point. There is no peace without war, and there's no haven without hell.

The movie draws a direct connection to women in the French Revolution, not too long after they were considered to be witches. The fear of men of women is everywhere in this film. There's a woman who wants to have sex with her husband more often but knows contraception is against god. they are too poor to afford to have more kids. She decides to use contraceptives anyway (a gift from Jeanne, who is called a witch at this point) and finds happiness not just for her husband but for herself.

It's not a coincidence that at the end, when the "witch" Jeanne is burned at the stake, it's not a stake at all: it's a cross. She suffered continuously by the hand of the people she worked hard to serve and help with the aid of the devil. These were the same folks who stood silent while she was burned alive.

An interesting question is not "was this woman evil," but the underlying one: is the devil, who helped the woman and through the abilities, he gave her helped the people, evil, or is it god, who's teachings caused such an artifact of beauty good will be destroyed? Are we born into sin, or are the teachings of the priests the ones who turn us into monsters?

There was nothing evil about Jeanne: not at the beginning of the movie and not at the end. Even when she thirsts for revenge and goes after the people, perhaps blamed for the Black Death in the film, one has to recall the nightmare she spent her waking life living. Why wouldn't she want revenge? Wouldn't we? Don't we?

Watched & Liked

Watched & Liked

Curious about these

Curious about these

Of TiddlyWiki, Emacs, And Digital Gardens

A post from my old blog from about 3 years ago, where I discuss digital gardens, tiddlywiki, and Emacs.

I read a good argument in a NYTimes opinion piece by Laura Vanderkam in favor of flexible work hours.

The article contains a couple of interviews with people who adjusted to work with flexibility. Here’s the part that resonates with me:

I hope we can begin to understand that, for many, work is a collection of tasks, not a collection of hours in a certain place. And time is a finite resource, but one that cannot always be neatly divided into “work time” and “free time.” Taking time for yourself during the work day doesn’t make you lazy, and working a bit on vacation doesn’t make you a workaholic. Dispensing with strict time boundaries should also mean ditching the guilt you might feel for either. In org-mode, I measure time by clocking in and out of tasks. These can take days, weeks, or months. Other projects repeat and become routines. I don’t particularly care “when” these hours take place. The nature of the job, not to mention COVID-19, have long deemed most of the “where” irrelevant. I often work outside my dedicated work hours, sometimes as early as 5 in the morning or as late as 9 in the evening. The flip side of this is taking long lunch breaks or leave the office a bit early. It goes both ways.

One of my good work “hacks” are quick naps, from 10 minutes to about half an hour. In return, these breaks allow me to be alert and productive at work, often working beyond the minimal requirements of a certain task. I enjoy what I do, so what’s the big deal?

New York’s Last Movie Clerk Knows More Than You Do nytimes.com

Read: www.nytimes.com

DMing for the first time in 25 years

Last weekend, I ran a DnD session. Three curious players stepped into a fantasy world I created for the first time in over 20 years, took whatever plans I had for them, shredded them to bits, and apparently left satisfied and wanting more. So if you’re curious, this is a chance to understand what’s the fuss about from a perspective of a guy who’s starting it all over again.

DnD (easier to type than D&D) is a phenomenon that has seen a renaissance in the last decade or so. I believe that’s because most of the folks who played the game as teens (myself included) are now old enough to pass the hobby down to the kids: either their own or those who matured after the 90s.

Because DnD is essentially an act of communal storytelling, you can make it whatever you want. This means you don’t have to be a kid to participate; the story can be adult-oriented with everything you’d expect from a good book. While DnD is usually set in a medieval fantasy world, it doesn’t have to be this way (one such example is the unsleeping city, a DnD setting in modern-day New York City).

To me, the story aspect of DnD is primary to everything else, which means the people who create it are of utmost importance. I was on the lookout for a while. I couldn’t just pick a random group online and join a game: sharing the world inside my head is an invitation to a private, intimate domain. I had to pick and choose people that I felt I could open up to and be comfortable with.

The requirements from these people were not easy, especially during these times of COVID. They needed to be geeky, even dorky. They needed to be open-minded and comfortable exploring darker themes, sexual elements, and questionable philosophies. I needed people who are familiar with the game and understand that I haven’t led an adventure in over two decades and that I don’t have the vocabulary they do for medieval terms or the knowledge of the rules. It was also important to me to meet these people face to face and talk to them over a drink or two, pick their brains, and see if they have what it takes1 (more accurately, if I have what it takes). In short, I had to make new friends.

I said led the game, and this is somewhat misleading. A better description of a DM (dungeon master) might be a host. Just like a host, the DM invites the players to play (in my case, the invitation extended to my physical home and the one in my mind). Once the players come, the DM serves as a foundation of a story for the players to take and do what they wish. A good host tries to make their guests feel comfortable and open up, be themselves, and have a good time; a DM’s role should be the same.

Usually, a good game session is full of good laughs, excitement, and a table with snacks and drinks. When a successful meeting ends, the players may ask when is the next session, and the gang you’ve brought together keeps exploring the world you’ve all just built together in chats until the next meeting. These were the moments that gave me satisfaction beyond just the joy of the game. It was the kind of happiness you feel after you feed a group of hungry people with homemade food.

There is more to being a DM than just being a good host. In fact, there is so much more I’d like to talk about just from this one gaming session, I don’t even know how to start (that’s right, I didn’t even start yet). DnD is a game spread over hundreds of pages of content and rules; yet, when it came to just sitting down and creating an adventure, I found that I was drawing from my intuition and past experiences and not so much from the official content. It felt as if there was very little there for me, and the little that I found was not what was needed2.

How does one create a good story? How do you even know you want to? And when you have an idea, how do you bring it to life? Do you just write down a list of bullet points? Start typing until smoke comes out of your fingertips? Do you draw the map first, or do you create NPCs (Non-Player Characters)? Do you know why there are monsters there, and are they automatically the “bad guys”? How do you tell a good story, and how do you roleplay?

I haven’t a clue. Seriously, I don’t. However, asking these questions is rewarding. It’s the stuff that would get your juices flowing and your imagination working as it hasn’t in years.

What I hope to do is to explore what I’ve done so far (which is both barely anything and way too much to write about at the same time) and recapture my passion for this game.

Footnotes

  1. These are my requirements, which may be a bit much. Those who just want to pick up the game and play can find it in many places online, from Twitch to roll20 to meetup groups. You can always try to play first and learn what you feel comfortable with later.

  2. The DMG (Dungeon Master’s Guide) is filled with good advice and rules, not to mention other additions like Xanathar’s Guide to Everything or Tasha’s Cauldron of Everything. This is not what I’m talking about here, as it will hopefully become clear. There’s an excellent discussion on Reddit about this, as well.

Org ID, Org Attach & Better Folder Names

You might have heard of org-mode header IDs. By default, these are Universally Unique Identifiers (UUIDs). In this post, I want to talk about what they are, why I use them (and you should, too), and how to make them into slugs: human-readable IDs that make more sense. This will be a long explanation of what I discovered in org-mode, so buckle up!

What are UUIDs and why should I care?

The org-mode manual doesn’t exactly point at header IDs unless you know where to look. Because of this, a casual user of org-mode might overlook these powerful organizational tools.

In org-mode, we can link to a file and a head directly: <path to file>/parent header/header, but this is risky because we refile (move) headers between files; old projects get archived, meeting notes get moved under other relevant projects, etc. This means that any links using a path like the one above will break1.

For this reason, we have header IDs: Org-IDs. They require that we include org-id in our init file (as part of org-mode’s modules), and then we can generate them for any header by calling org-id-get-create:2 “create an ID for the current entry and return it. If the entry already has an ID, just return it.”

By default, org-id-get-create creates a string of random numbers and letters: a UUID. Now, every time we want to reference the header, we link to the UUID instead of the header’s path, like so: [[id:our UUID here][description here]].

This is great, but these UUIDs are a string of random characters that make no sense to us. A header with an ID like 05576976-a33c-11ec-9da6-020017000b7b doesn’t tell us anything. We will return to this problem in a bit, because first I want to discuss another great (and perhaps overlooked) org-mode feature that makes this even more problematic.

Referencing to files with Org-Attach

Org-mode comes with a built-in attachment mechanism called org-attach. You can summon it with C-c C-a when inside org-mode under a header. Org-attach was one of the features I always knew existed but never used.

We already have a system to navigate and organize our files ingrained deep into our mind, be it Finder, Windows Explorer, or whatever GUI file manager we have in front of us. For us dedicated Emacs users, there’s of course the excellent Dired.

What’s more though, org-attach is using some seemingly weird system to store our files deep in folders that don’t make sense to us, and the only way to find them later is to use org-attach again to go to these attachments (by calling org-attach with C-c a, then choosing f or F, depending on the case). At least, that’s what I thought.

Assuming you haven’t tweaked your org IDs, org-attach will nest an attachment under three folders. First, the default data folder, which is where all the attachments are stored. Second, under it, a folder with the first two characters of the header’s UUID. Then, third, a folder with the rest of that UUID as its name.

This is a bit confusing, so let’s break it down a bit. Again, the following workflow assumes you don’t have any settings affecting org-attach. Launch Emacs with -q if you have any doubts:

  1. Go visit an org file, and navigate to one of its headers.
  2. Summon org-attach with C-c C-a. This will bring up a menu. For now, just use the first option, a.
  3. Next, org-attach will ask you which file you want to attach. Navigate to one and select it. Don’t worry, this will create a copy. The original will stay where it is.
  4. With the point on the header you just worked with, which should now have an :ATTACH: tag, summon org-attach again, but this time call option F, which will open the directory the file is in with Dired.

What you’re going to see is that you’re inside your org file’s folder, inside a data folder, and then inside a weird two-letter folder, and then inside a long string representing the rest of the UUID. Something like this: /home/user/orgfiles/data/ab/f4b2cf-4b38-45ec-9333-346b42861d24.

I’d argue that this way of creating attachments would cause newcomers to Emacs to prefer other methods for storing their files. It looks odd, and it doesn’t make sense when you need to find something later. That’s too bad because you’re missing out on org-mode’s excellent ability to organize your projects with their files attached right to them, of course, but this habit also comes after years of using org-mode (at least that’s how it was in my case).

If only you could make these folders make sense. Well, this is Eamcs. Of course you can.

From Org-IDs to Timestamp Slugs

The idea is simple: change how these IDs are created in org-mode by modifying org-id-method. By default, its value is a UUID. But we can change it to ts3: (setq org-id-method 'ts). That’s it. The next time we create an ID using org-id-get-create, it will produce something like 20220315T083403.413614. Still a bit confusing to read, but much better than UUIDs! The format is: year, month, date, followed by T for time, and then the current time down to the fraction of a second. Why do we need it broken down to these tiny time fractions? To guarantee we get different org-ids if we create several of those sequentially.

This will set up our unique IDs as timestamps4, but we still need to configure org-attach to use them. Because org-mode is set up to use UUIDs by default, org-attach is set to create directories that are meant to work with UUIDs. The directory structure is determined by org-attach-id-to-path-function-list. Specifically, it points to two functions: org-attach-id-uuid-folder-format and org-attach-id-ts-folder-format. You can go into org-attach.el and see that they break down the folder structure in a pretty straightforward way: the UUID function (which is the one used by default) takes the first two characters of the UUID and makes a parent folder out of those (as seen above), while the ts function takes the first six. The first six characters make sense because they include the year and the month.

By default, if we use the above example of 20220315T083403.413614 as a timestamp, we will get the following directory structure: /home/user/orgfiles/data/20/220315T083403.413614: the first two digits are for first two digit of the year: 2022. This is not very useful, as you will need to use org-mode until the year 2100 for a new sub-folder to be created!

This is what happened to me, and it required some head-scratching and diving into org-attach to figure out. I tried to mess around with the functions in org-attach directly, but that didn’t go well. Eventually someone on IRC pointed me to what I missed: what needs to be changed is org-attach-id-to-path-function-list. It is as simple as changing the order of the functions on this list, so org-attach will know to use the ts function first.

Together with org-id-method, which we defined above, we can write the whole thing like so:

    (setq org-id-method 'ts)
    (setq org-attach-id-to-path-function-list
    '(org-attach-id-ts-folder-format
    org-attach-id-uuid-folder-format))

Now when you use org-attach, it will use the ts function and create the following directory (to use the example above): /home/user/orgfiles/data/202203/15T083403.413614. This makes much more sense. You could also build your own function that would look like org-attach-id-ts-folder-format, perhaps for using the first 4 characters to create a parent directory for the year only. You will just need to make sure your custom function shows up first in org-attach-id-to-path-function-list.

A few Extra Things

I mentioned I used an excellent package called org-super-links. In a nutshell, this package automates creating org-IDs, linking them to an org-header, and creating a backlink from that header to the one linking from it. You should read Karl’s post about it and how he uses it to get a better idea than what I’m letting on here if you’re interested. As a matter of fact, if you want to get some more background, read the previous post mentioned above and you’ll see I’ve been trying to change org-IDs into timestamp slugs for a while. So much so, in fact, that I wrote my own function to do that for me until I discovered org has a system built-in already. As it goes with Emacs though, there’s no wrong answer. The previous attempt took me deeper into Elisp, which was a fun learning experience in itself.

With org-super-links, the process above is quicker because I don’t need to deal with org-id-get-create. I just search for the header I want to link to, and everything’s created automatically: an ID for the header I’m on, an ID for the header I’m linking to, a link linking to that ID at my marker, and a backlink at the header I am linking to pointing back to the header I’m on. You’d probably need to read that last one again. The bottom line is that if you’re serious about organizing your org headers, you should probably check out this package.

Another post that’s been floating around since 2017 by Matthew Lee Hinman approaches org-mode IDs from a different angle: exporting to HTML. In the post, Hinman explains that if you use IDs in your org file, you will also benefit when you export it to an HTML file: the header links you will use will link where you need them to go, and that’s even after you move headers around.

I’m actually using HTML more and more at work when I want to export my org-mode files into KB articles that go into wikis. This is especially helpful when you include a table of contents: the headers in the TOC will not break if you use IDs. This is maybe a bit more of a niche use, but having a TOC in a how-to article makes a lot of sense, and org-mode creates one for you by default when you export to HTML.

Footnotes

1 As a matter of fact, I think breaking links to headers and losing information is one of the reasons for org-roam’s popularity. Of course, the new versions come up with a lot more than just linking notes across a database, but at its core, I think this is why people started adopting it.

2 In newer versions of Emacs, using org-id-get-create (C-c l) can automatically generate an org-id for a header, if one doesn’t exist, provided that org-id-link-to-org-use-id is set to t. This can be done in the init file in Emacs.

3 Emacs documentation specifies a third method, org: “Org’s own internal method, using an encoding of the current time to microsecond accuracy, and optionally the current domain of the computer. See the variable ‘org-id-include-domain’.” This generates what seems to be a random string of text that is also not human-friendly. I’m not sure about the computer’s domain part, but this might be interesting for folks who have several computers on a domain using Emacs.

4 Giving headers unique IDs as timestamps is also useful because it leaves “clues” to help locate lost information later. For example, when you create a project with this unique ID, and later on you forget what it was, you can use the date to clue you in. It gives you another layer of search on your agenda (“202203” for example) to show all the projects created in March, provided you create an ID for each project, which you totally should. Because this is a simple text string, you can also use this outside of Emacs with other scripts to automate tasks that will look for this ID. It opens a world of options now that you have a range of unique IDs that you understand in your head, AKA, slugs. Also, it just looks better.