Rethinking and organizing my life with org-mode (part 3?)
I spent some time reading through the manual for part 3 of organizing my life in org-mode. org-mode has an archiving function I haven’t bothered with in the past because dumping old files into a folder was easier to do.
There was this interesting example under org-archive-subtree help text:
“
/org/datetree.org::datetree/* Finished Tasks” The “datetree/” string is special, signifying to archive items to the datetree. Items are placed in either the CLOSED date of the item, or the current date if there is no CLOSED date. The heading will be a subentry to the current date. There doesn’t need to be a heading, but there always needs to be a slash after datetree. For example, to store archived items directly in the datetree, use “/org/datetree.org::datetree/”.
Ah ha! So you refile a task and put it away in a different file (this is what archiving does by default in Emacs) and store it in its appropriate month. Not only that, the function will look for when you finished working on a project and automatically store it on that date in a header of your choosing. Good stuff.
For example, let’s say I started to write a technical document at work about pink rabbits (I’m in a good mood, OK? Bare with me, I’ll get grumpy soon enough) and this project includes a couple of subheaders: a meeting we had about the project, a task to backup the existing version of the document, and a couple of more TODOs regarding images and sending it for approval by subject matter experts. So far so good, this starts in Now.org where I keep working on the project and add to my notes.
Let’s continue with the example. Two months later, I’m done with the pink rabbits projects. I go to the parent header in my Now.org file, “update Pink Rabbits document,” and change its keyword from ACTIVE (my keyword for projects) to DONE. Since I have the keyword “ACTIVE” defined with ! in the file’s options (this is defined by the line #+TODO: TODO(t) ACTIVE(a!) MEETING(m!) | DONE(d!) CANCELED(c) at the top of the file - you can see ACTIVE is triggered by a! while its neighbor, TODO, is only t which means a timestamp will not be added), org-mode adds a timestamp for when I marked it DONE.
There are three basic scopes of defining where to put the archived headers. I can define one file in my init file for org-archive-subtree, which will create a global definition and thus a file for everything (not very useful), or I can define the destination for the archive at the top of the org file (so Now.org will have a line: #+ARCHIVE: my/path/is/here), or, I can go into the individual headers and define it there as a property with Archive: my/path/here. This last one is best for me, as I can quickly define headers for, say, article updates, announcements, and misc, each one of these parent headers pointing to a different file, if I want to do that. Nice indeed.
With the datetree option above, these archived tasks will be filed in these files and under the date and time I finished the project. The archive function will include properties in each telling me exactly where these projects came from.
I was about to start using this, but there’s only one problem… I haven’t found out how to restore something back from the archive.
Back to the example. Say I thought we were done with our pink rabbits document so I archived it away. Then, next month, someone says “Hey, JTR, we need to mention the catapults we’re implementing with the pink rabbits. Can you add it?” I say “Sure, no problem!” After all, I have the power of Emacs and it takes me less than a minute to find this project in my archive (consult-grep is amazing for this sort of thing).
So go to the archive file, I find it, and… I want to pull it out of the archive and put it back into my Now.org as one of my active projects… but… how do I do that?
I can be barbaric and go around killing and yanking, but there must be a better way, right? I think? Grrrr… (see, back to my grumpy self).
www.wsj.com/world/middle-east/gaza-chiefs-brutal-calculation-civilian-bloodshed-will-help-hamas-626720e7?mod=djem10point wsj.com
An investigation from the WSJ brings more proof of Hamas’ real goals in the Gaza Strip:
It is an outcome that Sinwar foreshadowed six years ago when he first became leader in the Gaza Strip. Hamas might lose a war with Israel, but it would cause an Israeli occupation of more than two million Palestinians.
“For Netanyahu, a victory would be even worse than a defeat,” Sinwar told an Italian journalist writing in 2018
Hamas, with Sinwar as its head in Gaza, needs Palestinians to die for his war. It is the only way his organization (and him as a leader) can survive. Hamas is doing whatever it can to ensure more Palestinians die in the conflict.
Sinwar cited civilian losses in national-liberation conflicts in places such as Algeria, where hundreds of thousands of people died fighting for independence from France, saying, “These are necessary sacrifices."
There are many ways Palestinians have been clashing over their Independence; some in armed conflicts, others through diplomacy and attempts at (lasting) peace. So far, this conflict - Sinwar’s idea - has been the bloodiest.
Things I don't write about
Even though I say a lot here, I don’t say everything. Mainly, there are two topics I avoid: the Israel-Hammas-Palestinian situation, and non-monogamy/polyamory.
It’s probably not hard to guess why, but these are also two deeply personal topics. For one, I was born and raised in Israel and served in the IDF; for the other, I’ve been with my two partners for over 12 years and I still see other people/friends/partners (I don’t exactly separate them to categories like most folks do).
To put in other words, if I write something about these topics, I’m really going to put myself out there. I’m not sure I want to deal with this level of vulnerability. I go back and forth at least once a week, and often I write a post just to keep it as a draft folder and not touch it again.
But there’s the need to express myself - this is my blog after all - and these are big two areas of self-expression. I know that vulnerability leads to some of the best blog posts I’ve read (I admire Brandon for that reason, and Jack also has some personal nuggets here and there), as these are the writings that make a personal blog truly personal.
I dared myself a couple of times before. Even my About section explains what I don’t write about yet. I’m not sure it’s the criticism I’m worried about as much as I just want to keep some things to myself and to the people I write about.
I’ve also made such a big deal out of writing about these topics that I don’t know what to write first or where to start, as it doesn’t match up to the spectacular image I built in my mind. After all, it’s just me rambling away about my life, and no one will deem it as important as I do. Kevin said it well: “If there’s ever a place where I can be narcissistic on the internet, it’s my site.”
Yet another reason I’m hesitant is that there’s no going back. Once I say something, it’s out there (and this blog is linked to the Internet Archive through Micro.blog). It’s not mine anymore, it’s everyone else’s. And if it’s your personal life you put out there to become everyone else’s, yeah, that’s scary.
On the other hand, there’s so much to say. There are things other people should know, ideas worth sharing, friends worth making, and writing worth publishing. And around we go, back into the “yes? no? yes? maybe? yes? no?” cycle.
What happened to "enough"?
Almost any platform today is based on cloud servers, and the way these models work is to charge developers by user traffic. The more traffic, the more bandwidth, the more you have to pay. That’s not the only growing pain: with more users, you need more regulation (more admins or moderators), better guidelines, mission statements, and so on.
Some developers probably start thinking about growth as soon as they start a new platform, but I believe most independent developers don’t. Most developers probably focus primarily on their ideas and passions.
I’m noticing there’s no alternative to the “growth” plan. You start a service with 100 users, and it grows to 500, 1000, 10,000… and as it grows, you deal more with annoyances and less with what you really want to do. You either grow somehow (hire more people, ask for more money) or give up and start something new. These are the two options available: grow or gtfo.
What happens if a platform just doesn’t grow? What if a developer wakes up one morning and thinks, you know what, I don’t want to deal with having 10,000 more users, I think I’m good? Does such a thing exist anymore?
This reminds me of overeating. When you order food, there’s a certain meal size (which the restaurant decides for you), and this is what you’re supposed to eat even if the amount of food is twice what you need. But why? What happens if split your meal for today’s and tomorrow’s?
We can do that, but we need to think out of the box. Forgive me for comparing users to food again, I just think they both require the same mental effort. Do you know why chewing your food slowly can help you eat less? It’s because you give your body a chance to process what’s going on and talk back to your brain and tell it, “Hey, I think I’m good.” The ability to stop for a minute, look around, think of something else, and then consider if you still want more food (or users).
Perhaps I’m being naive here (I’m not a business person), but I believe that if you do want to grow after all you can always revisit the idea and do just that. Say you decided to close your platform after you reached 10,000 users, and after a couple of months you decide to grow again. Amazon or Digital Ocean or whoever will still be there, just as the people you’d need to hire. So what’s the big deal? Who’s chasing you?
Somewhere between moving everything to the cloud the idea of “enough” was left in the dust with other such ideas I love to grump about like the ownership of your data and other such relics.
BSAG on Emacs as life project:
You don’t go back to zero each time. Every cycle teaches you more about how you want your personal Emacs to work, about what you need and what you think you want but don’t actually use. On every cycle, the curves of Emacs get smoothed and shaped a bit more to match your grasp.
Absolutely. And as I’m going through a different cycle myself, I appreciate this post even more.
Man I’d love some beer from this truck… 📷
It’s great when you can sink an hour into your online reading list without even noticing. Great blogs + good writers = an inspiring morning. Should remember to do this more often.
Listing Homebrew programs and tools
Homebrew was the first program I installed on my Mac after wiping it. This is because the second thing is my org files, which get copied over with Syncthing, which I install with Homebrew.
Listing the apps Homebrew installs is important then. Here’s how I list what I need in a file (in this case, on my Desktop):
brew leaves > ~/Desktop/this.txt && brew list --cask >> ~/Desktop/this.txt
First, what are formulas vs casks, in an over-simplified way:
Formulas are terminal command tools, like ffmpeg or yt-dlp. Casks are generally more complex and come with a UI (“full” apps). These include apps like Signal and LibreWolf.
Now, what does the command above do:
brew leaves lists top-level formulas, meaning no dependencies. Since Homebrew installs dependencies as needed, we’re probably not even aware of those (but it’s not a bad idea to get more familiar with them), and we don’t need to install them on their own.
brew list –cask lists casks.
In the example above, we output the data of brew leaves into this.txt, and then if (if the first command is completed successfully), we’re upending brew list --casks into the same file, using >> instead of just >.
I wiped my Mac earlier today, and everything seems to be in working order, more or less. I noted a couple of my tweaks before on my wiki, and I forgot some other hidden settings that I like to have.
Two of my favorite tweaks: Increase the mouse sensitivity beyond what macOS allows, and get rid of the delay on the dock before it appears, when it’s set to auto-hide.
For the mouse, read the current sensitivity: defaults read -g com.apple.mouse.scaling in the terminal. The max allowed through the settings is 3, but I set it to 5 with defaults write -g com.apple.mouse.scaling 5 as I have a small area to move my USB Bluetooth mouse.
And for the no-delay Dock, two commands: defaults write com.apple.dock autohide-delay -float 0 and defaults write com.apple.dock autohide-time-modifier -float 0. Nice and snappy. Use killall Dock to restart the Dock for this to take effect.
Do you have any hidden tweaks for your Mac?
I’m planning to wipe my Mac this weekend. The main reason for this is Microsoft’s nonsense, but I also got a bit “spoiled” using Time Machine. It’s like knowing how to change a tire or check the oil in your car: you need to know how to do certain things so when you need to, you know what to do.