Employees Hate Open Offices

I’m not sure why I bother but here’s another report (from last year) belaboring the obvious: workers hate open office spaces. They hate them for all the obvious reasons: too much noise, lack of privacy, lack of ability to concentrate, and so on.

Oh, and by the way, Mr. Employer, they aren’t buying that nonsense about increased collaboration. They know that that’s a bunch of hooey meant to disguise the real reason you love them: it saves money on office space and buildout.

One interesting result from the survey that the report is based on is that many employees would consider changing jobs to escape an open office environment. Perhaps that’s what it will take to put an end to this abomination. But probably not. Employers will still want to save money and the fairy tale about increased collaboration allows them to convince themselves that open spaces are in everybody’s best interest despite research that shows collaboration decreases in open offices.

Posted in General | Tagged | Leave a comment

Vivek Haldar Reads “Solution of a problem in concurrent programming control”

Last week, I wrote about Vivek Haldar’s reading of Dijkstra’s famous paper, “Go to Statement Considered Harmful.” It turns out that Haldar has a series of posts like that in which he reads a foundational paper from Computer Science. One recent example is his reading of another Dijkstra paper, Solution of a problem in concurrent programming control.

The paper is from 1965 and offered the first solution to locking critical code regions. That seems like old news today. You protect the critical region with a semaphore but back in 1965 computers didn’t have the specialized “test and set” instructions that we use to implement semaphores. At the time Dijkstra wrote his paper, it was an open question as to how to implement what we now know as semaphores.

Haldar does a great job in covering the paper. Dijkstra’s papers are always dense but this one is particularly difficult. The code that Dijkstra presents is in ALGOL or at least is ALGOL-like and the syntax is easy to understand. Although comprising only 16 lines it’s very difficult to figure out what’s going on. Haldar refactors the code a bit and explains what’s happening.

It’s amazing how something we now consider elementary, if not trivial, was once considered so hard that it was an open problem. Of course, a lot of that is that once it was understood that a semaphore was what was needed, hardware primitives were introduced to make implementing them simple.

Posted in General | Leave a comment

Taking Notes in LaTeX

This is astounding. Gilles Castel uses LaTeX to take notes in his Math classes. These aren’t simple notes with a smattering of elementary math symbols; they’re notes for classes like Complex Variables and other advanced topics. Take a look at his post for some examples.

I say it’s astounding because I wouldn’t have believed you could type the LaTeX fast enough to keep up with the instructor. Castel’s goal is to be able to type the LaTeX as fast as the instructor could write the mathematics on the board. To make this possible, Castel uses UltiSnips snippets and Vim. He’s got a number of custom snippets—some quite complicated—that intelligently expand to LaTeX and enable him to enter the mathematics at speed.

Naturally, I started wondering how his procedures would port to Emacs and AUCTeX. I’ve never used UltiSnips but it seems similar to yasnippet except for supporting regular expressions in the keys. On the other hand, AUCTeX provides a lot of functionality that Castel implements with snippets. The post contains several animated GIFs that show how his system works in practice. Watch them and be amazed. If you’re an UltiSnips user, Castel’s snippets are available here for you to try.

Regardless of which editor and snippet package you use, I’d guess that it’s going to take some concentrated practice to get fast enough to actually use in class.

Posted in General | Tagged , , | Leave a comment

Deleting Blank Lines

The Learn Emacs Twitter feed has a handy tip for dealing with blank lines:

It turns out that the delete-blank-lines command is a little more nuanced than that. The actual rules for invoking it (according to the documentation) are:

  1. If the point is on a blank line surrounded by others, delete all the surrounding blank lines, leaving just one.
  2. If the point is on an isolated blank line, delete that line.
  3. If the point is on a nonblank line, delete any blank lines that immediately follow.

This isn’t a command that I’d use everyday but it seems perfect for cleaning up a text file with lots of blank lines. Often times, I see imported data like this so it’s worth remembering the command.

Posted in General | Tagged | Leave a comment

Release Candidate 1 for Emacs 26.2 Is Out

Nicolas Petton announced on the Emacs-Devel list that Emacs 26.2 RC1 is out. If you verify Nico’s signature—as you should—you’ll notice that GPG says the key has expired. As Nico explains, the key is still good but the GNU keychain has not been updated. You can safely ignore the message.

I compiled and installed it on my Mac in the usual way without problem and am using it to write this post. The installation is brand new so I don’t have much experience with it yet but so far everything seems excellent.

As usual, thanks to John, Eli, Nico, and all the others for their work in bringing us this release.

Posted in General | Tagged | Leave a comment

An Application of Bayes’ Theorem to Differential Privacy

In a nice followup to yesterday’s post about differential privacy, John Cook, the proprietor of the Data Privacy Twitter feed, has a nice post that uses Bayes’ Theorem to implement a simple differential privacy scheme.

The problem is to gather a yes/no answer to a question from a group of people without revealing any individual’s “true” answer. The post is nice because the method it uses is a simple application of Bayes’ theorem, making the mathematics accessible to most Irreal readers. The protocol involves each respondent flipping a coin once or twice to determine their answer—see Cook’s post for the details.

Differential privacy appears to be emerging as the go-to solution for anonymizing data in a way that protects the privacy of the respondents but still allows useful aggregate data to be extracted from the information. Even the U.S. Census Bureau will be transitioning to differential privacy for the 2020 census. If you’re interested in such things, the Census Bureau has a paper describing some of the details.

Last Minute Addition:
Just as I was getting ready to publish this, I came across this talk by John Abowd of the Census Bureau that talks about their plans for the use of differential privacy. The talk is an hour long so here are a couple of interesting points if you don’t have the time or interest to watch it. Abowd say that noise infusion is an absolute necessity to protect the data. As an example of why this is true and of how easy it is to identify respondents from limited data, the bureau combined commercial data bases with just 3 items from the 2010 census data: age, sex, and census block (a relatively small area that the bureau uses to group respondents by location). That was enough to uniquely infer the identity of the respondent for 48% of the population. When those results were checked against the actual data, it turned out that the inference was correct for 38% of the population.

Posted in General | Tagged | Leave a comment

Differential Privacy

One of the tough problems in ethical data gathering is how to collect statistics while respecting the privacy of those the data is being gathered from. It’s widely known that most forms of data anonymization are not robust and that it takes surprisingly little information to deanonymize it.

One method that does show promise is differential privacy. The basic idea is that the data is perturbed in such as way that its origin can not be reconstructed but such that statistical measures, such as mean values, can still be estimated. That allows the collection of aggregate data while protecting the individual targets of the collection.

Recently John Cook’s excellent Data Privacy Twitter feed had a pointer to an interesting post on the Microsoft Research Blog on how they collect user telementry anonymously using differential privacy techniques. The idea, they say, is to encode the data on the user’s device in such a way that the output of the encoding is approximately equally likely to have come from any other user. At the same time, the encoding allows the recovery of useful aggregate data.

The post describes a method of encoding the value of \(x \in [0,M]\) in a single bit in such a way that the mean can still be estimated. It’s a nice trick and the post is worth a read just to see how effective differential privacy can be.

Posted in General | Tagged | Leave a comment

Numbering Org Table Rows

Álvaro Ramírez tweeted a handy tip that I used to know about but had forgotten:

Lots of tables need a row number and using this tip it’s easy to add them when you’ve finished making the table rather than putting them in as you go along. That’s especially handy if you decide to reorder the rows.

Normally mc/insert-numbers will start the numbering at 0 but you can change that with a prefix argument. Long ago I mapped that function to Hyper+~ but I like the way Ramírez maps it to # in the region-bindings-mode-map. That makes it much more intuitive and easy to remember. Maybe if I’d done that to begin with, I wouldn’t have forgotten about it.

Posted in General | Tagged , | Leave a comment

Running Your Life With Emacs

I’ve written a lot about how I hate leaving Emacs and find that its consistent UX and key bindings make a huge difference in the efficiency of my workflow. Not everyone agrees. Many people think I’m being overly sensitive when I say that I can’t effectively use multiple editors because the different key bindings mess with my muscle memory.

On the other hand, Garrett Hopper agrees with me. In a post entitled Running Your Life With Emacs, he says

…I often want to use the same efficient key bindings I use while programming when I’m doing other tasks. I want to be writing an email or documentation and edit a code snippet in the same way I normally edit code. I want to manage Git repositories right from my editor without having to touch the mouse. I want to browse the web in my editor, so I can easily copy code examples and run them. I want to track my to-do lists and the amount of time spent on each task.

That’s an excellent summary of my feelings.

Hopper says he hates switching context and that by doing as much as possible in Emacs, he reduces it to a minimum. He even does much of his browsing in Emacs. I find that eww doesn’t render sites reliably so I have a hard time embracing it. Almost all my time is spent in either Emacs or Safari so eliminating my reliance on Safari would mean I would almost never have to leave Emacs. I can only hope.

The rest of the post covers the many advantages of Emacs including

  • Discoverability
  • Built-in documentation
  • Customizability
  • A rich package system
  • and, of course, Org Mode

It’s an interesting post and if you’re an “everything in Emacs” adherent, it provides some self affirmation.

Posted in General | Tagged | Leave a comment

Goto

Everyone in our field knows about Dijkstra’s famous paper Go To Statement Considered Harmful but how many have actually read the paper or know what his arguments were? Mostly we use it as a template to generate memes of the form “\(X\) Considered Harmful.”

Vivek Haldar has a video blog entry in which he reads the paper for us. “Read” means he goes over the paper in detail and talks about the arguments that Dijkstra makes. The paper is short—only one and a half pages—so this isn’t as tedious as it might sound. The video itself is just short of 6 minutes. If you haven’t read the paper, you really should watch the video if only to know what you’re talking about when you invoke Dijkstra’s name.

Dijkstra makes his argument in technical terms. A more succinct and approachable take is presented by Professor David Brailsford in the excellent Computerphile video, GOTO, Goto & Goto. In it, Brailsford says that the point of eliminating gotos is to make our intentions clear. Consider the while loop

while (x > 0)
{    
    do_something_with(x);
    x = x - 1;
}        

and its implementation with gotos

l1: if (x <= 0)
        goto l2;
    do_something_with(x);
    x = x - 1;
    goto l1;
l2:            

No one with more than a week’s experience will have the slightest difficulty understanding the while loop with a single glance but the goto version—especially with a less trivial example—is harder to understand because it’s not immediately clear that we have a loop. What’s the purpose of that first goto, for example? Without reading further down we can’t tell if it’s part of a loop, a simple if statement, or something else.

The Computerphile video, along with some silliness with a Rubik’s cube at the end1, is about five and a half minutes so you can watch both videos in less than a dozen minutes. You should: they’re both worthwhile.

Footnotes:

1

Involving the two Gotos at the end of the video’s title

Posted in Programming | Tagged | Leave a comment