A Simple Emacs Dashboard

Randy Ridenour, whom I’ve written about before, has an interesting post on customizing the Emacs Dashboard. The Dashboard is something that appears when Emacs starts. It typically shows recently visited files and the current agenda items.

It’s configurable—of course, it’s Emacs—but Ridenour wasn’t happy with the default configurations. Emacs being Emacs, it was pretty easy to get things just the way he liked them. Part of that was displaying the agenda in a the usual way rather than just a list of activities. In particular, he like having the current time displayed—the way it is in grid view—and even arranged for it to appear in red so that it would stand out. He also arranged to have the agenda updated every minute so the time would always be up to date.

In addition to the agenda, he has a list of links that he wants to appear in the Dashboard so he has an Org file with a table of those links that he imports and then activates the links. At the end, he has a Dashboard with exactly the information he wants.

To be honest, I’ve never seen the point of Emacs Dashboards. My Emacs is always running so startup Dashboards don’t make any sense to me. I know you can start them whenever you like but, again, I’ve never seen the point. When I start Emacs, the first thing I do is start the agenda and mu4e. I could easily automate that but it’s so easy to start them by hand and I start Emacs so infrequently that it’s not worthwhile.

In any event, if you’re one of the many people who do like an Emacs Dashboard, Ridenour’s post may have some ideas that you can use.

Update [2025-10-24 Fri 14:12]: Added link.

Posted in General | Tagged , | Leave a comment

Mistakes Startups Make

Over at Reddit, MeirDavid has a truly terrifying post on why startups fail. He presents himself as a troubleshooter and his post is based on common problems startups in extremis experience. Like everything on the Internet these days, it’s hard to know how true his story is but it does have the sound of truth. If you’ve been around for a while, you’ve doubtless seen the type of basic mistakes that he describes.

MeirDavid begins by saying he’s audited the code base of 47 failed startups and has found the same patterns in all of them. He are some of the things he found:

  • 89% didn’t bother indexing their databases. I don’t know how this is possible. The whole point of databases is indexes that make it easy to access data. Otherwise, why not use a flat file?
  • 76% were over provisioned. They typically were using only 13% of the resources they were paying for. One of the points of renting virtual servers is that you can spin them up as you need them. Why in the world would you have eight times the number you need?
  • 68% had auth vulnerabilities. That, at least, is understandable. It’s notoriously difficult that get security right but there are, after all, out of the box solutions for that sort of thing.
  • 91% had no automated tests. This is all too common and a really serious mistake. My enlightenment came when I read that Walter Bright, known for his C and C++ compilers and for the development of the D language and its compilers, has a test for every single error his compilers have ever made and that he runs those tests with every change to the compilers. That’s the sort of thing that helps you not revisit previous errors.

MeirDavid expands on these themes and the lessons to be learned from them so you should definitely take a look at his post.There’s really no reason to be making these mistakes but they are depressingly common.

Posted in General | Tagged | Leave a comment

Rendering SVG Images In Org Generated HTML

I’ve recently discovered to my surprise that rendering an SVG image in HTML from Org mode is difficult or at least poorly documented. It comes as news to me because the images that I want to render are always JPEGs so I’ve never stumbled on the problem.

It turns out that there are two solutions. The first, from Norman Walsh, converts the Org mode link to the SVG file into an HTML div containing the image. Unfortunately, Walsh doesn’t give any details.

The second solution, from tusharhero, leverages the Org Babel interface to make and display an SVG image. I like his solution better but that’s probably because it seems more familiar. It’s certainly what I would try to do if I didn’t have the advantage of Walsh’s and tusharhero’s wisdom.

As I said, I never deal with SVG images so there may be better ways of handling all this but here, at least, are two solutions in case you are having the same problem.

Posted in General | Tagged , | Leave a comment

World Clock Improved

In the old days, World Clocks were a sort of curiosity. There wasn’t a lot of need for them because most folks communicated with distant friends and colleagues with snail mail and later, I suppose, with email. In any event you didn’t need to know what time it was at the destination unless you were making an almost certainly hideously expensive phone call.

Now, of course, you can instantly message someone—or even call them in many circumstances—with no charge and it’s best to know that it’s not 3 AM where they are. That’s why, today, a world clock is almost a necessity. You can always ask the Duck or whatever you use but if you’re communicating with several people, it’s convenient to have your own world clock with all the appropriate times.

Emacs, as usual, has us covered. There’s the world-clock command that gives you the current time in a few cities but if you’re parochial like me, knowing what time it is in London doesn’t help much if I want to talk to someone in, say Glasgow. Maybe it’s the same time zone; maybe it isn’t. I have no idea. Like most things in Emacs, the cities displayed are configurable but it’d be pretty inconvenient to add cities on the fly.

The other problem is that only the current time is displayed. What if you’re trying to set up a meeting and want to know what time it will be sometime in the future? It would be nice to be able to adjust both the cities and the time displayed.

Álvaro Ramírez had these problems and being Ramírez he wrote a package that solves both of them. You can add cities on the fly and adjust the base time forward and backward. Right now, the package is only on GitHub so you have to get it from his GitHub repository but he’ll probably put it up on Melpa eventually.

This is a great package that makes figuring out what time it is/will be/was in some arbitrary place in the world easy. Take a look. It may be something you didn’t realize you needed.

Posted in General | Tagged | Leave a comment

Emacs On The Go

It’s Sunday and nobody—especially me—feels like working so here’s a short interlude while we’re waiting for the new week to begin. The subject of today’s post falls in the broad category of what could be called “mobile Emacs”.

Most of us have wished for a way to take Emacs with us when we’re out and about. Certainly, no one would want to do any serious editing on a smart phone—although Po Lu has produced an Android port—but it’s not hard to imagine using it on an iPad or other powerful tablet.

Then there’s this guy who literally wears his computer complete with a heads up display so that he always has access to his Emacs. When I saw the video, I immediately thought of Neal Stephenson’s gargoyles from Snow Crash. It’s the exact same idea: people wearing computers—and looking odd—so they can stay continuously connected to the metaverse or what we in this world call “the net”.

As much as some of us would like to be permanently connected, I doubt that many of us are prepared to embrace the solution suggested in the video. Of course, I could be wrong and it’s just what people are looking for. Let us know what you think.

Posted in General | Tagged | Leave a comment

How To Speed Up Emacs

Over at the Emacs subredit, iinnssdd says he was looking for a guide to speed up Emacs but couldn’t find one. Therefore, he put together his own. This is more than the usual “how to make Emacs load faster” article, which we all know are silly and a waste of time. Although there are some suggestions for making Emacs load faster, the useful parts are how to make Emacs run faster once it’s loaded.

Some of that are compile time options when building Emacs from source. Iinnssdd’s particular options may or may not apply to your situation but they’re worth taking a look at. Another obvious strategy is to make sure that you have native compilation enabled. Iinnssdd has some suggestions for that.

A couple of specific recommendations are applicable to many of us. They’re both pretty simple and easy to implement. The first is a hook function to the find-file function that looks at how many lines the function has and turns off display-lne-numbers-mode when there are more than 1000 lines. It’s easy to see why this would speed things up on large files.

The second speedup is similar. It’s another find-file hook that looks for C files that have more than 1000 lines and turns on simpc-mode when it finds one. Simpc performs minimal syntax highlighting and indentation and, according to its author, is much faster than c-mode, c++-mode, cc-mode, and so on.

Even though I don’t have native compilation enabled on my older MacBook (2019), I still don’t find Emacs insufferably slow. That could be one of the benefits of having grown up with much older computers that were really slow. Regardless, if you’re intent on squeezing every bit of performance from Emacs, Iinnssdd’s post may give you some ideas.

Posted in General | Tagged | Leave a comment

Librephone

I just saw this announcement about the Librephone from the FSF. The idea is to provide a replacement for the Android smartphone operating system that would be free and open and not vacuum up everything you do with your phone the way Google’s Android OS does.

It’s easy to dismiss this. We’re always seeing some startup claiming to be producing the latest iPhone or Android killer but these “killers” always slip beneath the waves unfulfilled and never to be seen again. At the end of the day, we’re left, as always, with the iPhone and the Android phones,

On the other hand, I remember when the GNU project was announced and thinking that it was a pipe dream that would never succeed. We all know how that prediction turned out. GNU has eaten a large part of the software world and even the parts that it hasn’t swallowed whole still depend on software from the GNU project.

GNU really did change the world so only a fool would dismiss their efforts. In a way, they’re perfectly positioned. They don’t have to worry about developing hardware, dealing with cell carriers, and government agencies, or any of the other hard stuff. Their idea, as I understand it, is to provide a drop-in replacement for the existing Android operating system.

To be sure, the entrenched surveillance industry that abuses the Android system will resist these efforts just as Microsoft and others strenuously resisted Linux and the free software movement. Still, it would be foolish to dismiss Librephone’s efforts out of hand. It will be interesting to see how things play out. The FSF has recruited some very talented people to work on the project so the technical aspects are probably well in hand. I’d guess the major problems will be political and marketing. Unlike GNU, Librephone is aimed at a wider market than just the nerds and that may require winning over the man on the street.

Posted in General | Tagged | Leave a comment

Bending Emacs 3: Git Clone

One of the nice things about Emacs is that when you find yourself performing the same set of steps repeatedly, it’s easy to capture those steps into an Emacs function or even a keyboard macro. If you’re like me, you’ll keep repeating those steps over and over until one day you realize that you really should automate them. Álvaro Ramírez has a video showing a nice example of this: cloning a git repository.

Ramírez begins his video by showing his old procedure. It’s really simple. Capture the URL to the clipboard, change into the target directory, paste the URL into a git clone command on the Eshell command line, execute it, and open the directory in Dired. If there’s a README, open it as the last step. It takes longer to write it down than it does to actually do it.

Still, they’re simple steps and easy to automate, which is what Ramírez did. His solution is nice. He just has to capture the URL and call his function. Everything else, including opening the README file is handled automatically. He has a bit of code to allow choosing the target directory if he doesn’t want to use the current directory. You can check out his code in his GitHub repository. It is, as I say, simple but it’s a nice example of removing friction from your workflow: just let Emacs handle the routine chores.

The video is only 6 minutes, 54 seconds long so you should have no problem finding time for it. It’s interesting and worth a few minutes of your time.

Posted in General | Tagged | Leave a comment

The Vacuum From Hell

I really like the idea of a smart home. The Irreal bunker hasn’t gone crazy but we do have our TV, many of our lights, our security camera, and our front door locks integrated into the Apple Smart Home environment. One conspicuously missing item is a smart vacuum cleaner. The allure is palpable: set it up once and never worry about vacuuming your floors again.

Still, I keep hearing stories about how these devices send data, including a map of your house, back to the mother ship. On the one hand, it’s easy to understand collecting some mapping data to help guide the cleaner but why would you need to do it more than once and why couldn’t this data be handled locally on the device? Really, what reason is there for the device to be talking to remote servers regularly? It’s easy to dismiss a lot of this as coming from the tin foil hat brigade but it’s always made me wary.

Now Code Tiger over at Small World provides us with some persuasive data. He is, as he says, a bit paranoid so he decided to monitor his vacuum’s network traffic. He noticed that his vacuum cleaner was constantly communicating with a server half way across the world, as he put it, transmitting logs and telemetry that he hadn’t consented to share.

So he decided to block the logs and telemetry. In a few days, it refused to power on. He took it to the repair center and it worked fine. When he brought it home it would work for a short time and then refuse to power on again. After a few iterations of this, the repair center refused to work on it any longer.
It turns out that Code Tiger is not merely a software guy but also knows a lot about hardware. So he took his vacuum cleaner apart of figured out exactly how it worked. That means what every sensor, chip, and component did. He also discovered that the whole thing was a Linux system and, shockingly, that it was possible to log into the system. You can read the details on his post but the TL;DR is that the mother ship had sent a kill command bricking the cleaner in revenge for his blocking its surveillance.

Since he had access to the system, that was easily reversed and now his vacuum cleaner is happily cleaning his floors without the need to phone home. The whole thing reminds me of the old joke that even the paranoid have enemies.

Posted in General | Tagged | Leave a comment

Medicated Emacs

If you’ve been around Irreal for a while you know that we here in the Irreal bunker have never felt the need for a starter kit. A lot of that is probably due to the fact that they weren’t generally available when I moved to Emacs. I just started with an empty config and began adding things—sensible scrolling, C indentation, and a couple of other necessities—right off the bat. Other changes and additions came later.

Those initial changes are instructive. There were, of course, reasonable defaults for all of them, they just weren’t what I wanted and that’s also the problem with starter kits: they have their own idea of the right thing and it may differ from yours.

Still, when you’re starting out it’s nice to have a way of establishing a reasonable initial Emacs environment even if it’s not exactly what you want. If you do that, it’s important, I think, that the starter kit be easily modifiable. A nice example of this is medicated-emacs, a minimal configuration that’s easily adaptable. Take a look. It mostly set’s a few configuration variables and loads a few select packages.

You probably won’t agree with all these choices. I certainly don’t but the thing is, they’re easy to change. The configuration variables were set with the custom package so they’re easy to change if you want to. You may not want all the packages medicated-emacs loads. For instance, I have no need for rust-mode but it doesn’t hurt to have them there in the short term and after you learn a little more about what you’re doing, you can simply remove the package from the config.

If you’re a beginner and think a simple, non-opinionated configuration would be helpful, take a look at medicated-emacs. It will get you going and will be easy to adapt to your evolving needs.

Posted in General | Tagged | Leave a comment