🥩 Red Meat Friday: We Should Stop Whining

Want to feel ashamed? Of course you don’t but this post will make you feel that way anyway. Too many of us spend our time whining about the tech we use. One aspect of that is how hard it is to learn Emacs or any other serious editor. Read the technical forums. They’re full of whining: “I don’t have time to learn my tools.” “I’m not wasting my time learning Elisp” “Why can’t it just do what I expect it to do?” “OMG, the keybindings!” And on and on.

Then there’s this guy. He’s been blind since birth and guess what? He’s learned to use Emacs and is thankful for it. He uses Emacspeak for both his programming and writing. He says it fills him with joy.

I don’t know about you but I can’t imagine doing what he does. He can’t see. He can’t even remember seeing but he has still managed to learn Emacs and make it an important part of his life.

What’s that? You don’t like the default key bindings? You don’t like the default theme? It takes too long to load? Get over yourself. If a guy who can’t see—who’s never been able to see—can learn and master Emacs so can you.

What’s most striking to me is that he sees every day as an opportunity to learn something new about Emacs and improve his workflow. We could all learn something from him. We are, really, lucky to have so many great tools available to use, often for free. I’m happy his post pointed this out to me.

Posted in General | Tagged , | Leave a comment

Org Agenda

Chris Maiorana has a post that discusses his thoughts on Org Agenda. His discussion is mainly why you might want to use it and what you’d want to use it for. The main takeaway from his post is that Org Agenda is very flexible and customizable.

You can decide what information you want displayed in the agenda and how you want it displayed. Maiorana lists some of the ways you might want to use the Agenda or, perhaps, not use it all.

Not a bit of it resonated with me. I’ve always simply thought of the Agenda as a list of those headings in certain Org files that have an active date. The traditional way of using it is to have a TODO file or a set of files with TODO items and have those—along with their scheduled and end dates—displayed in the Agenda. I do that too but mostly I use Agenda as a report.

As I’ve mentioned before, I keep a detailed list of my daily activities and these are displayed in the Agenda. This turns out to be useful for more than just taking trips down memory lane. For example, when I have an external appointment, I record when I leave, when I arrive, when I leave the appointment, and when I get back. That way, the next time I have an appointment at the same place, I have an idea of the travel time—and therefore when to leave—and how long it will take to get back. It’s useful information to have and well worth the effort to collect it.

Of course, that’s just one way to use the Agenda and almost certainly not the most common way. But that’s the point: you can mold the agenda to be anything you want.

Posted in General | Tagged , | Leave a comment

The Story Of Mel

I know that I’ve written about this before but The Story of Mel is a classic piece of programming lore that all programmers in my cohort knew. I’m not sure if younger programmers know it so if you’re unfamiliar with the story, take a couple of minutes to read it; it’s not long.

No realistic person would take the story as anything but a parable but the odd thing is that it turns out to be true. Not just sort of true but true. Not only did Mel exist but he did all the things in that story.

The thing I love about the story is that every time I start feeling sorry for myself about how hard my programming work is, I remember Mel and what it was like for him. Imagine having to calculate where to put the next instruction so that it will be under the drum read head when it’s time to execute it. That was literally what Mel was doing.

This a great story and one that I didn’t think was true for a long time. It was only a couple of years ago that I found out that, in fact, Mel really did exist and that the Story of Mel was true. The Jargon File calls the story of Mel one of hackerdom’s great heroic epics. If you haven’t read it or haven’t read it lately, take a look.

Posted in General | Tagged | Leave a comment

You Can’t Make This Stuff Up

Every year or so, Irreal publishes a list of the most popular passwords as determined by those found by exploits. It’s always exciting to see if the perennial favorite password or the hometown favorite (and frequent winner) 123456 will win first place. Every time I see the list my first thought is of Aunt Millie. I’m sure it’s the same for most of you. No one, we think, but the most naive of lusers would use passwords like that.

Sadly, that’s not true. Imagine being a professional developer working for an established company with high profile clients and thinking that it would be a good idea to use 123456 as the default login ID and password for the administrator panel of an applications used by most McDonald franchises to “interview” perspective employees. According to Bleepingcomputer that’s exactly what happened. But wait. It gets better. The security researchers also discovered that the user IDs of prospective employees were simply a counter implemented for each interviewee and that they could access other interviewee’s records by simply incrementing or decrementing the ID.

The result of these two exploits is that the personal information—including, apparently, personality tests—of 64 million people was exposed. After the exploit was reported, McDonalds and the vendor fixed things but who knows how much damage was done.

It’s just inconceivable that a serious company could be making these n00b mistakes. Even “n00b mistake” isn’t quite right. Just about everyone with the least security consciousness knows that those are two things you should never do.

Posted in General | Tagged | Leave a comment

Do We Really Need Lisp Machines?

As you all know by now, I’m a fan of the Lisp Machine concept. Like the majority of people, I never had the opportunity to work on an actual Lisp Machine—they were horrendously expensive and they haven’t been produced in years. They were never commercially successful but nevertheless enjoy an almost mythical reputation.

Today, the best most people can do is Emacs. That’s pretty good, actually, but Emacs can’t begin to match the power of the Lisp Machine operating environment. Still, most of us have come to peace with the idea of Emacs as the modern Lisp Machine.

Most of us but not all. For example, Fulton, over at Fulton’s Ramblings, believes that not only were Lisp Machines were the right thing but that their time is coming again. He notes that while Unix ran on relatively modest hardware, Lisp Machines required significant hardware including lots of memory and a frame buffer. All that was expensive back then and by the time the prices came down, Unix was well established and had captured the market and mind share.

Fulton believes that Unix has a myriad of problems and that those problems will lead to a resurgence of the Lisp Machine era. As much as I love the idea Lisp Machines, I don’t think this is going to happen. Sure, Unix has grown increasingly complex but that’s because it’s addressing increasingly complex problems. Lisp Machines didn’t have to worry about (hideously complex) things like Web Browsers, or even the ubiquitous Web.

Were Lisp Machines to reemerge, they would undoubtedly undergo the same complexification that Unix has suffered. Don’t get me wrong, I’d love to see a modern Lisp Machine but, really, it’s a nerd dream that would almost certainly be unable to gain popular acceptance. After all, we can’t even convince most nerds to learn Lisp.

Even if the nerd market were large enough, what would we use them for? Presumably software development would be the main use but writing software for different Unix platforms is already difficult enough. Imagine how hard it would be if we were developing it on a completely different system.

I’m doubtful that I’ll see the second coming of Lisp Machines but I do have Emacs which is a pretty good approximation and an excellent compromise given the market and technical realities.

Posted in General | Tagged | Leave a comment

Dealing With The Thing At Point

A few weeks ago I mentioned that Sacha Chua is tremendously organized and gave an example of that organization. That example was about how she automated organizing tasks based on her calendar. Now she provides us with another example.

This time, she provides a shortcut for dealing with the thing at point. Someone asked her for a way of either opening the URL at point or searching for the word or region if the point wasn’t on a URL. Chua, of course, not only ran with that but expanded it to be even more useful. She presents code that deals with whatever the point is on in the following way:

  • Unless there is an active region, assume that the thing at point is a URL, word, an email address, or a filename. If it is a region, just add the text for processing as below
  • If there are links, open them
  • If there are email addresses open an email compose buffer with those addresses populating the “TO:” header
  • If it’s a filename, open it
  • Otherwise do a Web search on the word or text from the region

Chua also describes some nice customizations. You can specify what function to call for searching. This is more than just picking your browser of choice. See Chua’s post for the details. This can even be fine grained. You might want to use different “browsing functions” depending on what kind of link it is. Again, see the post for details.

There’s not really enough code involved to make it into a package but if you’re interested, it would be easy to just add Chua’s code to your init.el.

Posted in General | Tagged | Leave a comment

A Back Button For Emacs

I do a lot of my writing on my couch with my MacBook on my lap. That provides a less than optimal typing environment so I frequently mistype a command and end up magically transported to another place and time. Sometimes it’s just to another place in my current file but often it’s to another file altogether.

Apparently, I not the only one who suffers from this. Chris Maiorana, who writes for a living and uses Emacs to do so, has the same problem. He asks, wouldn’t be nice to be able to have a “back key” that would take you back to where you were before you fat fingered some command and were transported into the nether regions.

Maiorana notes that Emacs pretty much has this out of this box with push-mark that stores your location before many location moving commands. It stores your current location in the “mark ring” from which you can pop the location to return to the place where the mark was pushed.

But, asks Maiorana, what if you want to go forward too? It’s not to hard to imagine situations where you want to go back and forward between locations during your editing. It turns out that you can do that too with the help of the backard-forward package. Maiorana has a few more details in his post so take a look if you’re interested.

If you don’t want to add another package, you can simply use Ctrl+u Ctrl+Space to pop the last saved location and go to it.

I use Ctrl+u Ctrl+Space all the time but do forget to use it when I inadvertently find myself in an unexpected place. Whether you choose to install the backward-forward package or simply rely of popping the mark, it’s good to be aware of how simple it is to recover.

Posted in General | Tagged | Leave a comment

The NTSB Speaks

As you probably know, we here at Irreal take a dim view of Management meddling in the inner workings of Engineering. That is not at all the same as taking a dim view of Management: they are an important and necessary part of any business but their expertise does not, usually, extend to the best way of running an engineering department. A good rule, it seems to me, is that if you don’t have an engineering background, leave the running of Engineering to those who do.

That brings us to the poster child for this problem: Boeing Aircraft. Boeing once exemplified the perfect company involved in engineering. For a long time they defined the aircraft manufacturing industry. I’ve written a lot about Boeing and its problems but all those posts can’t begin to capture how profoundly sick the company is.

Now the National Transportation Safety Board has weighed in on the in flight separation of a door plug on a Boeing 737. Read their recommendations. It seems like a list of things that any responsible company would do before shipping a product that people depended on not to kill them. As the NTSB makes clear, this incident was a Management failure both on the part of Boeing and the FAA.

I’m sure there are a lot of lessons that can be drawn from all this but mine is simply this: When managers without engineering expertise start meddling in Engineering, you can be sure that it’s going to end in tears.

Posted in General | Tagged | Leave a comment

Flyover

Note: Sorry, I got caught up with life and completely forgot to publish this this morning.

If you’re a Flycheck or Flymake user and like eye candy, you might enjoy this new package from Mikael Konradsson. It’s a nice looking overlay for Flymake and Flycheck. There’s a couple of screen shots at the link that show what it looks like.

There’s a lot more information at the project’s GitHub repository. There are more screenshots and a more comprehensive explanation of what it does and how it works. As I said, there’s a lot of information at GitHub so you should definitely take a look at that if your interested but here’s a list of it’s features taken from the repository:

  1. Nice looking, customizable overlays for error display that are theme aware
  2. Errors, Warnings, and Info messages are distinguished by different styles
  3. Realtime updates while editing
  4. Smart position and formatting of messages
  5. Efficient overlay management
  6. Markdown-style syntax highlighting in messages

The package is available from Melpa so it’s easy to install if you’d like to try it.

Posted in General | Tagged | Leave a comment

Resetting All Checkboxes In An Org Buffer

Marcin Borkowski (Mbork) has a problem that many of we Org users have: He likes to use checkbox lists to organize tasks to ensure that he doesn’t forget any steps. An example that will resonate with most of us is using a checklist for things to pack for a vacation. So what’s the problem? The problem is how to reset those checkboxes to unchecked for the next time you want to use the checklist.

For a long time, he just did the obvious thing and performed a query-replace to change [x] to [ ]. The trouble with that solution is that it didn’t reset the checkbox cookies so he had to do that by hand. Since he knows a bit about Elisp, he decided to write his own solution. It turns out that Org already has a function, org-reset-checkbox-state-subtree, that almost does that. It will reset all the checkboxes in the current subtree so all Mbork needed to do was write a function to step down the subtrees and call org-reset-checkbox-state-subtree for each one.

It’s a surprising small amount of code and neatly solves the problem. As Mbork points out, there are some problems. His solution will sometimes call org-reset-checkbox-state-subtree for the same subtree more than once and it apparently can mess with header folding but most files you’re going to use his function on are probably sufficiently small that it doesn’t matter.

I’ve written a bunch of code like this. It may not be ready to ship but it solves a problem and I understand its limitations. It’s a win.

Posted in General | Tagged , | Leave a comment