in #photo
1.0'' • f/10.0 • 16.0mm • ISO 6400 • show original

Today I wanted to shoot a long exposure photo.
This was the best.
I noticed in post that I had shot with a high ISO value. That was really not needed by the situation. It was just a mistake on my part. Which made the photo rather grainy. Next time I shoot long exposure in low light, I need to remember to fix the ISO as well.
in #photo
1/200 • f/2.0 • 16.0mm • ISO 100 • show original

Another photo shoot. Another best photo.
This time I avoided a shallow depth of field and instead choose a photo where I think the framing made it enough interesting.
in #photo
1/30 • f/2.2 • 16.0mm • ISO 1000 • show original

I decided I want to try photography as a hobby.
One way I might practice that is to go out on a shoot and post the best image from that shoot here on my blog.
This is the first.
Edited with Darktable (adjusted white balance).
Ran 5.34 km in 29:32 (05:32 /km).
Ran 5.33 km in 30:03 (05:38 /km).
Ran 5.38 km in 31:09 (05:47 /km).
Ran 3.83 km in 23:29 (06:07 /km).
Ran 3.83 km in 22:45 (05:56 /km).
Ran 5.24 km in 30:48 (05:53 /km).
in #newsletter
This month I've not spent much time on hobby projects at all. The main reason is probably that I've not...
in #race
Ran 11.80 km in 01:05:34 (05:33 /km).
Ran 5.57 km in 32:50 (05:53 /km).
in #race
Ran 30.44 km in 02:53:19 (05:41 /km). My goal was sub 3h, and I did it. I felt strong during...
Ran 5.31 km in 30:00 (05:39 /km).
Ran 5.28 km in 29:48 (05:39 /km).
Ran 5.19 km in 30:10 (05:48 /km).
Ran 7.71 km in 43:16 (05:36 /km).
Ran 7.35 km in 46:16 (06:17 /km).
Ran 16.02 km in 01:31:10 (05:41 /km).
Ran 3.87 km in 21:43 (05:37 /km).
Ran 5.26 km in 31:12 (05:56 /km).
Ran 5.24 km in 29:40 (05:39 /km).
Ran 12.52 km in 01:12:24 (05:46 /km).
Ran 5.27 km in 30:04 (05:42 /km).
Ran 17.18 km in 01:39:21 (05:46 /km).
Ran 3.83 km in 22:31 (05:52 /km).
Ran 3.80 km in 22:47 (05:59 /km).
Ran 3.84 km in 23:42 (06:10 /km).
Ran 15.03 km in 01:27:30 (05:49 /km).
in #rlworkbench
Has the idea of expanding a selection with shift keys.
in #newsletter
This month started off with some more C programming in rlworkbench. I started implementing a piece tree and made some...
Ran 4.72 km in 31:31 (06:40 /km).
Treadmill run before strenght training.
Ran 11.02 km in 01:01:40 (05:35 /km).
Ran 5.75 km in 32:10 (05:35 /km).
Stacking a brick.
5k relatively easy might not seem as much. But it is a brick. A brick towards a bigger goal. A PB on the next race. Or a marathon that I don't feel completely beaten by.
Lately, I have not been able to stack as many bricks as I would like. I've had to take it easy because of various injuries.
When a day goes by that I did not manage to stack a brick I can feel that my goals get farther and farther away. And that makes me sad. I know that the consistency of stacking small bricks is what matters the most.
I realized this brick stacking analogy when I was out on this run. That's probably my main reason for running. For making my brain come up with ideas. And for making my body feel good.
As for the running goals? I have to change the types of bricks to adapt to injuries. Perhaps that means more rehab exercises. Perhaps that means resting. Perhaps it means doing alternative training. I just have to keep trying. Find the bricks to stack and stack them carefully. And remember that the stacking is the point. It's the stacking that makes me feel good and come up with ideas.
Ran 5.03 km in 31:31 (06:16 /km).
Ran 3.83 km in 23:07 (06:01 /km).
Ran 3.80 km in 21:47 (05:43 /km).
Ran 3.83 km in 23:42 (06:11 /km).
Ran 3.86 km in 22:48 (05:54 /km).
Ran 5.23 km in 31:21 (05:59 /km).
Ran 5.44 km in 30:37 (05:37 /km).
First run with new Garmin Forerunner 265.
Ran 5.46 km in 33:53 (06:12 /km).
Ran 5.36 km in 35:17 (06:34 /km).
in #race
Ran 10.22 km in 50:11 (04:54 /km). Didn't go for a PB.
Ran 1.23 km in 08:18 (06:45 /km).
Ran 5.41 km in 35:24 (06:33 /km).
Ran 14.03 km in 01:17:18 (05:30 /km).
Ran 5.27 km in 32:36 (06:11 /km).
Ran 7.02 km in 43:01 (06:07 /km).
in #rlworkbench
Today I spent some time implementing a piece tree. It's not really a tree yet. It's more like a linked list. But I think the interface will be the same.
I've been curious about the piece tree for a while after having read a lot about it. And what better way to learn more and solidify that understanding than by implementing it? After getting a simple implementation working, I wanted to use it in the rest of rlworkbench and that work felt very hard. I was disappointed.
But I think I achieved something important that I didn't realize at first. I've never used a piece tree before. I've just read about it. Now I actually have an implementation in C. And I know how it works. I have advanced one step. Previously, my brain was focused on how a piece tree works and the benefits that it can give. Now that I actually have one, my brain can start thinking about how to use it in the context of rlworkbench.
I also got bogged down in details of C. And tried to reach perfection. That never ends well. Perhaps it's time to go back and use the application and work on improving what actually hurts the most. Right now, that might be that the copy & paste buffer has a memory limit. So if you try to copy or paste text that is too large, the application will crash. I have to figure out how to extend my arena implementation to allow arbitrarily much memory and how to represent strings spanning over multiple memory chunks. The piece tree might be one solution. But perhaps there are simpler solution for this particular problem. But now I have one more tool in my toolbox.
Ran 9.84 km in 01:00:57 (06:11 /km).
in #linux
Previously, I wrote about a minimalist approach to managing servers. In it, I concluded that the next step is to...
Ran 7.33 km in 53:47 (07:20 /km).
An example of how the computer can show what it has interpreted.
Ran 17.26 km in 01:39:01 (05:44 /km).
Ran 5.11 km in 32:10 (06:17 /km).
Ran 10.15 km in 01:01:00 (06:00 /km).
This post documents the keyboard layouts that I use in 2026 for my Kinesis Advantage 2 keyboard. The majority comes...
in #c
One thing that I find easier in C compared to Python is that loops are not as expensive. And sometimes, things are easier to implement when you can think of them individually.
For example, to render characters with different styles, we can do this in C:
for (index = 0; index < SIZE; index++) { render_character(characters[index], styles[index]); }
This is cheap in C. But in Python, it is expensive. So to make this fast in Python, we might want to do something like this:
for (substring, style) in split_parts(text): render_text(substring, style)
Assuming we can write split_parts without looping over all characters, this will perform better in Python because of fewer loop iterations.
Modes are only problematic if the current mode is not the user's locus of attention?
A quasimode is more likely the user's locus of attention because the act of pressing and holding a button creates a richer experience that the user is in this mode?
This month I spent much time programming on rlworkbench. After being inspired by the Canon Cat and The Humane Interface...
in #rlworkbench
I've implemented a function to filter the current selection through an external program in rlworkbench. Here is a demo of it.
Right now, the filter program is hard coded to one that formats C code.
One idea with this external formatting is that you could spend more time inputing text that actually does something instead of being distracted by formatting issues.
in #rlworkbench #interfacedesign
I've implemented an special select mode in rlworkbench that simplifies selecting different portions of a document. Here is a demo of it.
The select mode is entered by pressing ctrl+l for se(l)ect. The mode is a quasimode meaning that it is only active while the 'l' key is still pressed. (The ctrl key can be released.)
In the select mode buttons to different things:
Pressing 'r' extends the selection to the current (r)egion leaped over
Pressing 'e' extends the selection to lin(e) boundaries
Pressing 'a' extends the selection to p(a)ragraph boundaries
The editor is also in select mode when clicking and dragging with the mouse. So the same keys can be used there. (That is why all the keys are on the left side of the keyboard, since, for me, I operate the mouse with the right hand.)
Having an explicit select mode frees up more keys for select operations. So far I find it a little uncomfortable sustaining the 'l' key, but I feel like it has potential.
Ran 5.31 km in 33:34 (06:19 /km).
Ran 6.63 km in 37:45 (05:41 /km).
in #rlworkbench
I've implemented selection of text with the mouse in rlworkbench. Here is a demo.
The selection goes into the X11/Wayland "primary selection" clipboard which can be pasted with the middle mouse button.
Sometimes when writing a document, I do that by copy and pasting text from various sources. I do that with the mouse. So it has been very convenient to be able to use the mouse in rlworkbench as well. It's starting to feel more and more like a "native application".
in #rlworkbench #interfacedesign
Interesting article about interface design. Notable quotes: Similarly, computer interfaces must evolve to let us utilize more of the power...
in #rlworkbench #interfacedesign
Nice example of the principle that a humane interface should never put your work at risk. (Not really sure how...
in #rlworkbench #interfacedesign
Nice discussion about modes.
in #rlworkbench
Today I learned that copy and paste only works if the program that you copy from is still running.
The SDL API documentation gave me the clue that i might work like this. Because in some situations, you need to provide a callback to transfer data to the clipboard.
I wonder if this is only on Linux, or other operating systems as well?
in #rlworkbench #interfacedesign
Last month I decided to try to make rlworkbench a fully modeless editor.
In theory, I get why modeless editing is good. However, I'm a long time, happy Vim user. Vim is probably the most common example of a modal editor. The opposite of modeless. Despite that I want to try. This is a note about my current thoughts and experiences.
One thing that I like about editing in Vim is that I seldom have to press multiple keys at once. That is comfortable for my hands and fingers. My right arm is quite sensitive to bad ergonomics. For example, I often feel a slight pain after working on a laptop keyboard for an hour or so. I'm afraid that a modeless editing interface can not preserve this ergonomics.
In Vim, you are by default in "normal mode" where key presses don't usually insert characters but instead perform operations such as moving the cursor. With a modeless editor interface, you are by default in "insert mode" where key presses insert characters. Now that rlworkbench has a modeless editing interface, I'm sometimes afraid of accidentally inserting characters. Maybe I just have a bad habit of moving the cursor around and I should stop doing that. However, the feeling is that always insert mode feels a little scary.
In modeless editors the default mode is insert mode, and you issue commands by holding down control for example. Why is that? Can we invert that so that the default mode is "command mode" and you have to press and hold a key to insert characters? My guess is that I spend more time navigating than typing.
The Humane Interface (p. 59) argues that the hope is that most time is spent creating content (aka insert mode) and that should be as easy as possible. But I wonder if that is really true. Issuing commands can create content as well, right? For example, there might be a command to format a piece of source code. The formatting might be important for readability. Making the content more readable. Isn't that then part of "creating content"?
in #rlworkbench #c
This is a short note about my experience with C.
I've previously written about how I feel that C slow me down. Partly because it is a lower-level language than I'm used to. Partly because I don't know it that well.
But yesterday when I worked on rlworkbench I felt that making a change was not that hard. It might even have felt slightly easier.
This feels like a breakthrough for me in my C journey. Perhaps I've learned C well enough for it to not be in my way? Perhaps I've got enough primitives implemented so that I can do some high level programming without more effort? Perhaps the C programming paradigm is more productive? I don't know. But I'm starting to like C more and more.
Ran 18.01 km in 01:43:59 (05:46 /km).
in #rlworkbench
I've implemented the ability to extend the selection to line boundaries in rlworkbench.
This can be used to more easily select a number of lines and do operations on them.
I plan to extend this mechanism with more text objects. Things that come to mind are word, sentence, paragraph, and function if you are writing code.
in #rlworkbench
I've implemented copy and paste in rlworkbench, and this is a demo of the current state.
You can make a selection as I demonstrated in the previous demo. Then you can copy that selection with ctrl+c and paste it with ctrl+v.
This also works with external programs.
The next step in copy paste is probably to allow selection of text with the mouse which puts the selection in a clipboard that can be pasted with the third mouse button.
Copy and paste felt like a big step towards a usable editor. Especially when writing code. I often copy and paste code and make small modifications. Now that is possible in rlworkbench.
Ran 5.32 km in 32:17 (06:03 /km).
in #rlworkbench
Useful for understanding Unicode and grapheme clustering.
Ran 10.43 km in 01:00:05 (05:45 /km).
Ran 5.24 km in 32:18 (06:09 /km).
Ran 18.02 km in 01:45:03 (05:49 /km).
in #rlworkbench
I've just got selection working in rlworkbench and this is a demo of the current state.
The navigation and selection mechanism is taken from the Canon Cat. You navigate with a kind of incremental search called LEAP. The text that you just LEAPed over can be selected and deleted.
Ran 12.02 km in 01:09:00 (05:44 /km).
in #rlworkbench
Might be a useful resource for building a text editor.
Ran 5.16 km in 29:28 (05:42 /km).
Ran 16.07 km in 01:32:55 (05:46 /km).
Ran 4.50 km in 28:27 (06:19 /km).
in #rlworkbench
Might be relevant for rlworkbench.
Ran 5.45 km in 32:43 (06:00 /km).
in #rlworkbench
Documentation on the piece table in AbiWord.
in #rlworkbench
Has information about a piece table and how to extend it with information such as font face and who made...
Ran 7.92 km in 43:50 (05:32 /km).
Ran 5.30 km in 32:02 (06:02 /km).
in #rlworkbench
Gypsy was a modeless editor. What surprised me in the demo was that Gypsy also had "dynamic command menus" from...
in #rlworkbench #interfacedesign
Yesterday I spent most of the day working on rlworkbench. Specifically I worked on navigation in the editor. That includes...
Ran 15.10 km in 01:29:25 (05:55 /km).
Ran 6.60 km in 37:34 (05:41 /km).
Ran 4.96 km in 27:51 (05:36 /km).
Ran 5.28 km in 30:57 (05:51 /km).
in #newsletter #interfacedesign #rlworkbench
Last month, I wrote about a minimalist approach to managing servers. In it, I concluded that the next step is...
Ran 10.17 km in 01:00:08 (05:54 /km).
Ran 5.27 km in 30:32 (05:47 /km).
Ran 5.31 km in 32:39 (06:08 /km).
Speed in software is probably the most valuable, least valued asset.
Ran 5.34 km in 32:43 (06:07 /km).
Beautiful article about design in software interfaces.
Ran 5.12 km in 30:46 (06:00 /km).
Ran 5.27 km in 32:07 (06:05 /km).
Ran 5.27 km in 32:20 (06:07 /km).
Ran 3.68 km in 23:21 (06:21 /km).
Ran 5.33 km in 30:35 (05:44 /km).
It felt so good to be back running again after more than a week of rest after the marathon.
in #programming
Profilers and repetition testers help us see what our programs do so that we are not blindly manipulating symbols. (Bret Victor's definition of programming in one of his talks.)
in #newsletter
I started out this month by trying to deploy my profiler in rlworkbench. One feature that I missed was seeing...
in #race
Ran 43.03 km in 04:51:02 (06:45 /km). It went as well as I could have hoped for. I managed to...
Ran 3.03 km in 18:29 (06:06 /km).
Is this what they call a shake out run?
Preparations for marathon have been poor the last month because of a cold. But tommorrow it's time. The time to beat is 5:43:12. Let's see how it goes.
Ran 2.75 km in 19:28 (07:04 /km).
Ran 3.88 km in 23:18 (06:00 /km).
Ran 4.00 km in 22:24 (05:36 /km).
Ran 4.94 km in 30:02 (06:05 /km).
Ran 5.01 km in 29:46 (05:56 /km).
Ran 1.96 km in 12:40 (06:27 /km).
Ran 5.01 km in 29:42 (05:55 /km).
in #rlworkbench
Interesting read of what makes text rendering hard.
Ran 3.71 km in 22:55 (06:10 /km).
Ran 3.62 km in 22:30 (06:12 /km).
Ran 5.31 km in 34:20 (06:28 /km).
First run after 2 weeks of rest because of a cold.
Felt better than expected, but still slow and higher heart rate than usual.
in #rlworkbench
Stumbled across this when watching 35 programs, zero AI! (Handmade Essentials Jam recap show). Might be interesting for rlworkbench in...
in #linux
I have come up with a minimalist approach to managing servers and applications running on them. Here is how I...
Helped me understand how to serve static files with Nginx with permission check in Python code.
in #newsletter #c
This month I got into C programming and Computer, Enhance! again. One program that I worked on was a program...
Ran 4.01 km in 24:50 (06:11 /km).
in #c
Which of the examples below are preferable? char* name; char *name; As an inexperienced C programmer, the first example made...
in #c
Documents C extensions for GNU C. For example long long.
in #c
Nice explanation of the following macro: #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
in #c
If you want your programs to be maximally spread and survive for the longest period of time, C is probably...
Ran 7.32 km in 47:52 (06:32 /km).
in #race
Ran 21.31 km in 01:52:59 (05:18 /km). I started out with my usual long run pace. Then it felt good,...
Ran 4.95 km in 30:44 (06:12 /km).
Ran 4.83 km in 29:45 (06:09 /km).
Ran 4.86 km in 27:46 (05:43 /km).
Ran 3.70 km in 22:43 (06:08 /km).
Ran 3.65 km in 21:49 (05:58 /km).
Ran 5.06 km in 30:12 (05:58 /km).
Ran 5.27 km in 30:07 (05:42 /km).
My form feels really good now. It feels like I'm bouncing with power with every stride without too much effort. It feels like I'm running instead of jogging.
Ran 7.28 km in 51:18 (07:03 /km).
Ran 5.22 km in 32:01 (06:08 /km).
in #longrun
Ran 17.17 km in 01:35:54 (05:35 /km).
Felt really good.
Ran 5.42 km in 30:50 (05:41 /km).
Felt tired in my legs today.
Ran 10.78 km in 01:02:46 (05:49 /km).
Ran 10.68 km in 01:00:08 (05:38 /km).
Rested for a couple of days. Achilles felt fine. Form felt good.
in #c
I couldn't resist programming some C today.
The program that I worked on was a program to print unique lines:
rick@fedora:~/projects/cunique$ cat test.txt hello world hello there rick@fedora:~/projects/cunique$ ./cunique <test.txt hello world there
I managed to write it, but I also wanted it to perform well. When I try the above with a 1GB file it seems to take forever, but my Python equivalent finishes in around 5s.
That made me feel discouraged and made me think that I should work more on Computer, Enhance! before I think I have an idea about how to write performant C code.
However, I got to program C and that was fun.
Ran 5.26 km in 30:42 (05:50 /km).
Treadmill run before strength workout. Felt some slight pain in the achilles that went away again. Will rest now during the weekend.
This month I did some minor improvements to my blog: I fixed broken links I properly marked up tags using...
Ran 5.26 km in 30:32 (05:48 /km).
First run in shorts this year.
Form felt good, and it felt easy. Pulse within zone 2 but pace still quite fast. Have I gotten better? Or am I just more well rested? It felt good anyway.
Ran 5.37 km in 32:09 (05:59 /km).
I felt some slight pain in my achilles after the 10k PB, so I'm taking an easy week and hoping it will go away. Didn't feel anything during this run.
Ran 5.12 km in 32:25 (06:19 /km).
in #race
Ran 10.06 km in 45:27 (04:31 /km). PB on 10k! Felt good during the whole race. Felt fresh up until...
Ran 5.12 km in 33:44 (06:35 /km).
Ran 15.75 km in 01:32:44 (05:53 /km).
Ran 3.74 km in 23:18 (06:13 /km).
Estimated because I forgot my watch.
in #software
This makes me want to care more for the software that I write.
This also makes me a little curious to try out BSD.
Ran 3.74 km in 23:18 (06:13 /km).
Estimated because I forgot my watch.
Ran 3.74 km in 23:18 (06:13 /km).
Ran 5.17 km in 32:02 (06:12 /km).
Ran 10.45 km in 01:01:27 (05:52 /km).
One hour of zone 2 running on the treadmill followed by some strength exercises.
I practiced Better efficiency with a different wrist angle when running and I felt it worked. It feels easier to run this way.
in #timeline
I have done many software projects in my spare time. Many of them I have done in public and shared...
Ran 10.55 km in 01:06:00 (06:15 /km).
5x5min threshold intervals on the treadmill at 05:00 /km pace and an angle of 4 (degrees or whatever the number on the treadmill means).
This was one unit steeper than my last threshold session.
The session felt really good.
Ran 3.88 km in 26:07 (06:43 /km).
Ran 16.06 km in 01:33:11 (05:48 /km).
Ran 5.10 km in 31:03 (06:05 /km).
Ran 5.25 km in 32:06 (06:07 /km).
Ran 5.16 km in 32:02 (06:12 /km).
Ran 16.84 km in 01:40:47 (05:59 /km).
Legs were tired during the whole run. I put my body on auto-pilot. Got a little more energy after around 13k. Maybe it was the gel that kicked in.
Ran 3.75 km in 23:37 (06:18 /km).
in #rlworkbench
Two aspects of the Ki editor caught my attention: It has editing operations based on syntax It implements a modal...
Ran 5.15 km in 34:03 (06:36 /km).
Ran 5.19 km in 33:22 (06:25 /km).
Ran 5.19 km in 31:44 (06:06 /km).
Ran 10.15 km in 01:02:58 (06:12 /km).
Easy session on the treadmill before strength training.
I've never been a fan of running on a treadmill. However, now that I need to to strength training at the gym, it provides a good warm up. Maybe I'm starting to like it.
in #ai
I am passionate about programming, but not that interested in AI. This gives me hope for my future.
Ran 3.78 km in 22:25 (05:55 /km).
Ran 5.18 km in 31:22 (06:03 /km).
Most snow was gone. Slippery ice blocks left on a few places on the trail. Almost fell once.
in #newsletter #indieweb (also on IndieNews)
This month I got really into the IndieWeb which they describe on their website like this: We are a community...
Ran 5.22 km in 31:19 (05:59 /km).

Last day of snowboarding offered some nice weather.
Ran 10.34 km in 01:00:30 (05:51 /km).
This week I am snowboarding. So it is a week off my normal training program. But I didn't want to skip running completely, so I did this treadmill session.
If loss of a tool = loss of your skill & knowledge, then that tool isn't an asset, it's a liability. You're signing over your ability to do business to whoever sells & maintains that tool.
This reasoning resonates with me.
It also made me think about the presentation Peter Van Hardenberg - Local First: the secret master plan where he describes woodworkers making their own tools, called jigs, that help them build better.
Perhaps it is a good exercise in software to let go of a tool that we use and see if we can still do our job. And perhaps that might even lead to us thinking about and building new tools?
Ran 10.76 km in 01:06:00 (06:08 /km).
5x5min threshold intervals on the treadmill at 05:00 /km pace and an angle of 3 (degrees I guess).
I believe this was a steeper angle than my previous workout. I was inspired by "The Hardest Workout We Ever Do" | Uphill Treadmill Threshold feat. Megan! to try a steeper angle. (Megan din 12x5min at 8% grade. Wow!)
The knee pain that I have felt the previous weeks now seems to be completely gone. I'm so grateful for that. And reminded that I must keep doing my strength exercises.
Thanks for providing an example of private posts on the IndieWeb.
in #indieweb (also on IndieNews)
This is the first post I've seen on the IndieWeb that has multiple in-reply-to links. I guess that makes sense. Nice!
in #indieweb (also on IndieNews)
Yesterday I watched Peter Van Hardenberg - Local First: the secret master plan. I've come across Peter and Ink & Switch before. It caught my interest then, and it caught my interest now again.
This time I saw similarities between the local first concept and IndieWeb.
One of the requirements for local first (particularly in the context of collaboration) is the ability to diff different versions of a document and sync changes between different people. In the programming world, we have had this luxury for a long time with version control systems. But they want to enable that for all types of documents. This sounds so cool.
Ran 5.17 km in 31:17 (06:03 /km).
in #indieweb (also on IndieNews)
I found the URL design page particularly interesting.
I have given URL design some thought. I should maybe write up the thinking behind the current design.
However, I've sometimes gotten frustrated because I felt that I couldn't reach a perfect design. And perhaps there is no right and wrong. Only trade-offs as in other types of design.
I want to implement URL rewriting so that I can fix bad URL design with HTTP redirects so that old links can keep working while still promoting the newer better design.
in #indieweb (also on IndieNews)
I'm curious about how private posts could look like on the open web.
I see a need to share certain posts only with certain people and not have everything on my blog public. Today I have to share that in another way. And I'm not sure they can all co-exist on my blog and what that would look like.
Ran 16.10 km in 01:38:05 (06:05 /km).
Ran 3.89 km in 24:31 (06:18 /km).
Ran 5.04 km in 31:15 (06:12 /km).
Ran 2.59 km in 22:21 (08:38 /km).
Ran 5.29 km in 33:33 (06:20 /km).
in #indieweb (also on IndieNews)
This was such a nice read. I especially resonated with "posting versus publishing" and that a blog can be an "archive and long memory".
Ran 5.44 km in 35:38 (06:33 /km).
Ran 3.88 km in 29:03 (07:29 /km).
Ran 3.84 km in 24:59 (06:30 /km).
Ran 15.02 km in 01:33:07 (06:12 /km).
Ran 3.98 km in 25:49 (06:29 /km).
Ran 3.97 km in 27:31 (06:55 /km).
Ran 10.55 km in 01:06:00 (06:15 /km).
5x5min threshold intervals on the treadmill.
I've felt some slight pain in my knee this week, but during this session, I felt nothing. Happy about that.
in #indieweb (also on IndieNews)
I've now implemented a way to download mentions from Webmention.io and display them on my blog posts.
My blog is a static site. So the way it works is that I download mentions via the Webmention.io API. Then I extract only the information that I need to display the mentions on my blog. I save that information in json files that I can read when the website is generated. Right now, they look like this:
$ cat posts/2023/04/06/what-should-a-ci-server-do/mentions.json | jq
{
"https://blog.rickardlindberg.me/2026/01/24/how-does-ci-work-in-projects2.html": {
"wm-property": "mention-of",
"wm-received": "2026-02-04T19:41:15Z"
}
}
in #newsletter
This month I started out continuing work on rlworkbench. However, my focus then shifted to working on my code hosting...
This was amazing!
in #ai #development
In What Skills Do Developers NEED To Have In An AI Future?, Trisha Gee says
Developers Are a Bridge Between the Silicon and End User
This was said in the context of the importance of "soft skills" for a developer.
This explanation of a developer resonates so much with me because it encompasses everything. On the one hand you need to be able to program the silicon at a low level. On the other hand you need to be able to communicate with the end user to figure out what to build.
It was also said in the context that how you realize an end user need might change with AI. You might write a prompt instead of writing code. But the developer's job is still to be that bride.
Ran 10.37 km in 01:02:38 (06:02 /km).
in #indieweb (also on IndieNews)
Here is how I test microformats markup on my website.
First I install mf2py:
sudo dnf install python3-mf2py
Then I define this one-liner Bash function:
mf2test() { python -c 'import sys; import mf2py; import json; print(json.dumps(mf2py.parse(url=sys.argv[1])))' $1 | jq; }
And then I can test a website like this:
$ mf2test https://blog.rickardlindberg.me/2026/02/05/075110.html
{
"items": [
{
"type": [
"h-entry"
...
Nice! Makes me want to go snowboarding.
An elegant website with interesting content. Should read later.
in #indieweb (also on IndieNews)
In today's exploration of getting on the IndieWeb I try out IndieWebify.Me. It is a service where you can post...
Ran 5.24 km in 33:36 (06:24 /km).
in #indieweb (also on IndieNews)
I'm trying out the guide Sending your First Webmention from Scratch and following it step by step. Add link to...
Ran 14.12 km in 01:21:34 (05:46 /km).
Ran 5.33 km in 34:06 (06:23 /km).
Ran 3.81 km in 25:13 (06:37 /km).
Ran 3.89 km in 24:26 (06:16 /km).
Ran 13.67 km in 01:27:26 (06:23 /km).
Ran 3.91 km in 25:03 (06:24 /km).
Ran 3.69 km in 24:45 (06:42 /km).
Ran 5.95 km in 34:57 (05:52 /km).
in #projects2
My own code hosting platform, projects2, implements what I consider proper CI. That is, it does something like this when...
Ran 11.03 km in 01:06:00 (05:59 /km).
Ran 8.12 km in 47:01 (05:47 /km).
Ran 12.08 km in 01:13:18 (06:03 /km).
Ran 6.44 km in 44:47 (06:57 /km).
Ran 5.36 km in 35:09 (06:33 /km).
Ran 5.17 km in 40:14 (07:46 /km).
Ran 4.66 km in 32:31 (06:58 /km).
Ran 11.94 km in 01:20:22 (06:43 /km).
Ran 5.32 km in 36:00 (06:46 /km).
Ran 5.17 km in 37:41 (07:17 /km).
in #agile
My thoughts on software development are highly influenced by agile ideas. When I think about how software evolves, I think...
Ran 10.34 km in 01:09:35 (06:43 /km).
Ran 5.56 km in 34:47 (06:15 /km).
in #c
I was wondering if GCC can warn about functions that are not called. Here is a sample program where the...
in #newsletter #rlworkbench #c
Here is an update on what I've been working on in December. Advent of Code I couldn't resist participating in...
I watched Graphics API is irrelevant and learned a simple way to do graphics in C by using the simple...
in #aoc
Inspired by Advent of Code 2025, I wanted to make some kind of similar puzzle for my son. He usually...
in #rlworkbench #c #aoc
Warning: This blog post contains spoilers. If you don't want any insights into this years' puzzles, stop reading now. I...
in #newsletter #c #rlworkbench
This month I have continued learning about performance aware programming. First of all, I've progressed in the course Computer, Enhance!...
in #newsletter #rlmeta #rlselect #rlworkbench
This month I discovered Casey Muratori. This opened up a whole new world of programming to me, and I have...
in #newsletter
This month I discovered the term Platform Engineering. In particular, I watched this video series from the Modern Software Engineering...
This month I've been programming on two hobby projects. I have made progress on both as well as enjoyed the...
in #newsletter
This month I did some work on Timeline. Since we moved part of the development over to my own code...
in #newsletter
This month I watched the presentation Why Can't We Make Simple Software? - Peter van Hardenberg. This introduced me to...
in #newsletter
This month I consumed some podcasts and Youtube videos related to programming. Here are my favourites: Listening to Tim Sweeney:...
I want to explore what and object-oriented programming system looks like where each object is represented as a VM running...
In John Carmack: Doom, Quake, VR, AGI, Programming, Video Games, and Rockets | Lex Fridman Podcast #309, Carmack explains how...
In Bjarne Stroustrup: C++ | Lex Fridman Podcast #48, Bjarne talks about that he wants certain (safety critical) systems to...
I listened to this because I enjoyed a previous Lex podcast, and I needed something to entertain me during a...
In Bjarne Stroustrup: C++ | Lex Fridman Podcast #48, Bjarne talks about security being a systems property. You can not...
in #timeline #newsletter #projects2 #microblogimport
This month I've done a lot of programming. I ended up working more on my own code hosting platform. I...
in #newsletter #microblogimport
This month I have done nothing related to programming in my spare time. Partly because it is snowboard season. I'm...
in #newsletter #microblogimport
When I came across XXIIVV in last month, I immediately got interested in the idea that in order to be...
in #rlmeta #newsletter #Micro.blog #microblogimport
New Laptop I got a new laptop this month. It was almost 10 years since I bought my previous one....
in #rlselect #Bash #microblogimport
I have previously written about how I use rlselect as a replacement for Ctrl+R in Bash. It works by creating...
Today's realization is that you can get important things done by consistently working on them for 15 minutes at the start of every day.
By doing it at the start of the day, you ensure that it gets done. And the rest of the day you don't need to be stressed about not working on your important thing, because you already have.
in #rleditor #aoc #microblogimport
December is the month of Advent of Code. I had told myself not to participate this year because I know...
in #newsletter #microblogimport
Compared to last month, this month I did some programming in my spare time. I had fewer commitments, and my...
Today I ran part of the way to work. It was a cold, beautiful winter morning in Stockholm.

Sometimes, I solve programming problems by coding on paper. A few days ago, it looked like this:

I've started working on a code editor that is a mix of a text editor and a structured editor. It is all text, but parsers and pretty printers allow you to work with a tree structure and not think too much about syntax. It is a work in progress. Code is here.

We got some more snow. I like running in the winter. Especially when there is snow and the sun is shining.

I needed to submit some heic photos to a service that only accepted jpg. I didn't know about the heic format, but a little searching gave me a solution:
bash
$ heif-convert
bash: heif-convert: command not found...
Install package 'libheif' to provide command 'heif-convert'? [N/y] y
...
$ find . -iname '*.heic' -exec heif-convert -q 100 {} {}.jpg \;
Today was the first day of snow this season. Not much. I'm looking forward to many more runs on a white trail.

I was researching how to run Black (and possibly other formatters) from Vim and found Ergonomic mappings for code formatting in Vim. It was very helpful.
How would you improve this code?
python
def update_r_users(service)
r_users = []
for user in service.get_all_users():
if "r" in user:
r_users.append(user)
service.set_users_in_group("users_with_r_in_name", r_users)
Find out what I did it in my latest newsletter.
in #oop #newsletter #microblogimport
Normally I do something related to programming in my spare time every month. I read something that I find interesting...
Today I learned about the Rison data serialization format. I wrote a function to convert a Python value to Rison format. It was an elegant recursive function with partial support for the format.
I've used testing without mocks quite extensively now. I've also used it in a work project for more than a year. My experience is that it's the best testing strategy that I've ever used. I've never felt more confident that my code works. I refactor code without fear of it breaking. It's so good.
It's getting dark. It gives variation to the running.

Various things have kept me from running for a while. Today I had enough. I just had to go for a short run. It was the first run with warmer clothes. The weather was nice. I reclaimed some energy.

in #newsletter #microblogimport
This month I read How to Use a Zettelkasten to Write Stories Packed with Emotion. It inspired me to write...
Pull requests discourage experiments because changes can only propagate after approval. The idea behind PRs is to only approve "good" changes.
First, the learning opportunities of mistakes are gone. Second, you might loose interest in experimenting because you are afraid of making mistakes.
Today I just needed to run. I had not run since I hurt my achilles tendon almost a month ago. I wanted to see if it still hurt. I felt something, but not too much. I think I still need to take it easy with running, but man it felt good moving again.

If you want to know how to implement a Bash-like shell, with support for redirects, in only 31 lines of Python, you should check out my latest blog post Bash Redirects Explained.
Do you know the difference between the following Bash commands?
bash
program 2>&1 >/tmp/log.txt
program >/tmp/log.txt 2>&1
If not, you might be interested in my latest blog post Bash Redirects Explained.
I thought I knew how Bash redirects worked. If I wanted to redirect the output of a command to a...
I just implemented a small shell in 29 lines of Python that has support for redirects:
$ ./minishell.py ~~?~~> echo hello hello ~~0~~> wc -l minishell.py 29 minishell.py ~~0~~> wc -l <minishell.py >report.txt ~~0~~> cat report.txt 29
in #newsletter #microblogimport
In August I had my last week of summer vacation. I read a book that made me want to improve...
in #Zettelkasten #Smart Notes #microblogimport
I created Smart Notes to be a digital note taking application that follows principles from the Zettelkasten method, as explained...
Did another bike workout at the gym. Similar heart rate and duration as my regular runs, but felt like more effort because I'm not used to cycling. I'd rather be running, but this is a good alternative. Listened to Hej (resten av) internet! Avsnitt 2: Nyhetsbrev (eller brev kort och gott).
Today I bought a gym membership. I spent another 40 minutes on the bike. I felt good after the workout, but I didn't get any ideas or inspiration like I usually do when I'm running. Hopefully I can incorporate some runs soon, but I will for sure continue biking to help build an aerobic base.
Yes! The draft makes sense now. I think. I had a rough idea of what I wanted to write about. I had lots of notes that I struggled to fit into a coherent narrative. But finally, it all fell into place. I clarified my thinking by writing.
Today I spent 40 minutes on a bike in the gym. I'd rather be running, but I've got some pain in my achilles tendon, so I explore alternative training at the moment. For this workout, I happened to discover the (Swedish) podcast Hej (resten av) internet! It feels like an entry into an alternative, beautiful web-universe. I look forward to more workouts with them in my ears.
It's time for a new avatar. I'm thinking I should update them more frequently. Maybe yearly? Anyway, here is the new one.
![]()
It's like it's all out there. Energy, motivation, well being, creativity... You just have to put on a pair of shoes and go out and get it. That's why I run.

in #Micro.blog #microblogimport
When I was researching the Zettelkasten method (a specific way to take notes), I ended up on Writing Slowly. It...
in #Zettelkasten #Smart Notes #microblogimport
I just implemented support in Smart Notes for giving links a text description.
This was inspired by recent readings about concept mapping and Zettelkasten resources talking about the importance of giving context when linking two ideas.
I'm looking forward to using this to see if I find it helpful.

in #Micro.blog #microblogimport
My website as a home (found via End of Year Hyperlink Dump) talks about a metaphor for websites:
I feel as if someone is giving me a tour of their apartment: I’m looking at the papers on his desk, the notes stuck to his fridge, an album of butterfly photos taken by his brother, and so on.
I like this metaphor, and I would like my website to feel like a home. Micro.blog makes this very easy. I can share and develop my interests. I can structure content with categories and pages. Others can come have a look. Comment if they wish. And you can see conversations that I've had with visitors.
I first learned programming by hitting "View Page Source" on a web page to learn how something was implemented. Today, 20+ years later, I did the same. I wish more environments had "View Page Source" function.
in #Micro.blog #Javascript #microblogimport
I just moved my blog to Micro.blog. My domain name, rickardlindberg.me, now points to the new blog. I have not...
I was tired and low on energy. I knew I needed to run. I know that the longer I run, the more energy I get back. I also clarified my thinking on an upcoming blog post. Yey running!

Today I did a lot of focused work. My brain was tired. Solution? Running. It worked. It always works. That's why I run.

This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/july-2024/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/output-tracking-vs-mocks/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/june-2024/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/may-2024/.
in #race
Ran 42.98 km in 05:43:20 (07:59 /km).
in #refactoring #oop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/function-to-oop-refactoring/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/april-2024/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/what-is-a-user-story/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/march-2024/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/february-2024/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/january-2024/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/december-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/november-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/october-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/september-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-013-raspberrypi-game-console/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/august-2023/.
in #devlog #rlvideo #mlt #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-012-investigating-export-crash/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-the-end/.
in #devlog #rlvideo #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-011-modifying-cut-out-point/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/july-2023/.
in #devlog #rlvideo #mlt #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-010-debugging-mlt-gtk-segfault/.
in #devlog #rlvideo #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-009-improve-timeline-scrubbing/.
in #devlog #rlvideo #motivation #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-008-how-to-overcome-lack-of-motivation/.
in #devlog #rlvideo #refactoring #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-007-which-feature-to-work-on-next/.
in #devlog #rlvideo #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-006-adding-the-concept-of-a-clip/.
in #devlog #rlvideo #mlt #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-005-mlt-proxy-hell/.
in #devlog #rlvideo #mlt #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-004-proxies-with-correct-fps/.
in #devlog #rlvideo #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-003-clarify-gui-separation/.
in #devlog #rlvideo #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-002-selecting-cut-type-in-gui/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/writing-my-own-video-editor/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/fast-feedback-on-graphical-code/.
in #devlog #rlvideo #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/devlog-001-jcut-lcut/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/june-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-multiplayer/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/high-level-low-level-ron-reply/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-spawn-multiple-balloons/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-tdd-and-games/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/may-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-score-as-text/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/how-to-test-a-router/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-logitech-gamepad-f310/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-wrapper-pygame-draw-circle-bug/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-turning-arrow/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-hit-balloon-and-score-points/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-game-over/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/april-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-thinking-about-test-setup/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-shooting-arrow/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-demo-and-game-idea/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-pygame-separation-design/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-game-loop/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/trying-rons-python-asteroids/.
in #tdd #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/tdd-fake-it/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/agdpp-introduction/.
After drafting this article, I asked for feedback on James' Discord. Emily wrote back and said that this sounded a...
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/march-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/february-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/january-2023/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/december-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/evolving-design-of-projectional-editor/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/november-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/october-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/september-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/august-2022/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reliable-socket-servers/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/july-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/june-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/may-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/april-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/march-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/february-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/rlmeta-poster-2/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/january-2022/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/december-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/november-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/october-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/september-2021/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/what-is-programming/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/august-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/july-2021/.
in #rlselect #newsletter #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/june-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/may-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/april-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/march-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/february-2021/.
in #rlmeimport
In this article I explain how I have configured my Kinesis Advantage 2 keyboard (US version) to also type Swedish...
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/january-2021/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/december-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/november-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/october-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/september-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/august-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/bullet-journal-method-migration-as-review/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/july-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/atomic-habits-two-minute-rule/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/june-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/may-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/creating-rlmeta-poster/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/expr-to-x86-compiler/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/april-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/rlmeta-cpp/.
in #wxpython #rliterate #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/wx-layout-update/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/march-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/february-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/january-2020/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/rlmeta-memoize-failures/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/december-2019/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/november-2019/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/october-2019/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/september-2019/.
in #timeline #python #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/timeline-segfault-wxpython/.
in #alankay #favourite #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/alan-kay-notes/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/rlmeta-left-associativity/.
in #timeline #python #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/timeline-doctest-wxpython/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/august-2019/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/rlmeta-vm/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/july-2019/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/newsletter/june-2019/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/optimizing-rlmeta/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/draft-rlmeta-offside/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/modifying-rlmeta/.
in #favourite #rlmeta #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/rlmeta/.
In this article I present thoughts on a new home for Timeline. Timeline is free software, and in order to...
in #favourite #rlselect #Bash #rlmeimport
This article is about how I've become more efficient at using Bash, the interactive UNIX shell. When I work in...
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/bitten-by-python-generators/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/tell-dont-ask-example/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/problem-in-commit-message/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/timeline-release-stats/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/python-datetime-precision/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/analysis-timeline-emails/.
in #favourite #vim #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/search-and-replace-in-vim/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/python-danger-implicit-if/.
This text was in my notes for quite a while before I published it on my website. I have the...
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-05-accumulating-cruft/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-04-recognizing-progress/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-03-testing-as-a-minimum/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-06-02-small-increments/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-28-refactor-before/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-27-discoverable-tests/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-26-functional-core/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-23-editing-code-as-text/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-22-erlang/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-21-naming/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-20-state/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-19-testability-good-design/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-18-visualizing-flow/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-15-clarity-is-hard/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-14-doctests/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-13-powerful-software/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2014-05-12-software-writer/.
in #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/ardour-latency-free-overdubbing/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-05-refactoring-step-tdd/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-04-mindmap-tasks/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-03-visualizing-hierarchy-and-groupings/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-02-cohesion-and-naming/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-07-01-learning-about-a-problem/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-30-formatting-code/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-29-one-thing-per-commit/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-28-atomic-operations/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-27-constant-progress/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-26-small-steps/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-25-smallest-possible/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-24-resistance-to-learning/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-23-documenting-projects/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-22-features-and-bugs/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-21-bug-free-code/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-20-testing-for-feedback/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-19-duplicated-code/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-18-maintainable-tests/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-17-test-coverage/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-16-code-size/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-15-confidence-change-code/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-14-tests-keep/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-13-boy-scout/.
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/thought-of-the-day/2013-06-12-refactor-confidence/.
in #favourite #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2013-02-24-related-things-are-not-kept-together/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-09-08-how-to-organize-your-tests/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-08-30-learn-how-to-implement-languages/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-07-22-good-bad-programmer/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-07-11-a-refactoring-story/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-06-23-data-structures-in-oop/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-06-17-a-beautiful-brainfuck-implementation/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-03-03-closing-the-feedback-loop/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-25-setup-and-teardown-in-hunit/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-11-hello-world-haskell-gtk/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-02-05-writing-a-real-application-in-haskell/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-01-23-organizing-information-on-a-wiki/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2012-01-11-application-development-series-intro/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-11-02-does-tdd-have-less-advantage-in-haskell/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-10-10-learning-haskell/.
in #rop #rlmeimport
This post has not yet been imported to my new blog. In the meantime, you can read it here: http://archive.rickardlindberg.me/writing/reflections-on-programming/2011-09-28-testing-configuration/.
What is Rickard working on and thinking about right now?
Every month I write a newsletter about just that. You will get updates about my current projects and thoughts about programming, and also get a chance to hit reply and interact with me. Subscribe to it below.