Lenovo Again

Remember all those apologies from Lenovo after their stealth installation of the SuperFish adware was revealed? Apparently they didn’t really mean them.

As the old saying goes, “Fool me once, shame on you. Fool me twice, shame on me.” Unless you, too, want to end up a 50 year joke like Charlie Brown, Lucy, and the football, you’d better think twice about buying products from this company. If you do, you have no one but yourself to blame when the inevitable happens.

Lenovo has forfeited any expectation of trust from their customers. And who would want to deal with a company so lacking in common sense that they install another root kit on their computers less than 6 months after being excoriated for doing the same thing?

I know lots of people who love their Lenovo laptops and dismissed the concerns over SuperFish on the grounds that they wiped the machine and installed Linux. This latest exploit hides the malware in the system’s firmware where it can’t be removed. I’ll bet that when Lenovo decides it’s to their advantage to do so, they’ll find a way to hook into Linux too.

Posted in General | Tagged | Leave a comment

A Word to the Wise

Advertisers: clean up your act or look forward to a future like this

See what I mean?

Posted in General | Tagged , | Leave a comment

Where Work Goes to Die

Swizec Teller has an amusing article in DZone on Why Offices Are Where Work Goes to Die. The article is, as I say, amusing but it also mines several nuggets of truth. Irreal, as you doubtless know to your sorrow, is adamantly opposed to open office plans because of the destructive effect they have on office efficiency and moral. These plans are always justified on the grounds of improved communication—rather than their actual advantage of being cheaper—but Teller describes how even in a traditional office setting this ease of communication can be detrimental. He discusses several problems but the most serious is the constant interruption of flow, which for engineers is deadly.

Teller’s article is a neat summary of why I’m a big supporter of remote work. I won’t flog that horse here but Yegor Bugayenko has an excellent post on the bane of office workers: meetings. Bugayenko likens meetings to legalized robbery. He describes how meetings are abused to effectively end all progress on projects that overuse them. It’s another great read. You should read it and Teller’s post.

In the meantime, here’s a very sharp TL;DR for Bugayenko’s thesis:

Posted in General | Tagged , | Leave a comment

The No Irony Zone

Posted in General | Tagged | Leave a comment

Emacs as an OS

Daniele Sluijters says:

He has a point but I don’t think the notion of Emacs as an OS is a bad one. I came for the Lisp support but I’ve come to think of Emacs as a Lisp Machine-like operating system where all the code is available and can be changed on the fly to exactly suit my requirements.

Emacers famously move towards doing as much as possible inside Emacs. Many consider it a cache miss if they have to leave Emacs for some task. I’m not hardcore enough to use eww for all my browsing but other than Safari and (temporarily) Mail.app, I spend virtually all my tube time in Emacs. That tendency is the realization of Emacs as an operating system. The transformation of Emacs into an OS is ongoing. Indeed, we recently acquired a window manager.

The old joke about Emacs being a good OS needing only a decent editor may be stale but it does contain a germ of truth. Except for the editor part; I like the editor.

Posted in General | Tagged | 3 Comments

Mickey on Flycheck

If you’re a Flymake user, Mickey over at Mastering Emacs has some advice for you: switch to Flycheck. It’s a drop in replacement for Flymake that has better out-of-the-box language support and is faster. Mickey says that for him the replacement was seamless. “One moment I was using my own duct taped Flymake handlers, and the next I was simply using Flychecks’.”

See Mickey’s post for more details and keybindings. If you like to have your code’s syntax checked on the fly, this is definitely worth a look. And, of course, while you’re there, check out some of Mickey’s other offerings. They’re an extraordinarily good resource.

Posted in General | Tagged | 2 Comments

Diffing Regions in the Same File

A Nice tip from Aaron Fischr:

This works for relatively small regions. For larger regions (over 200 lines, say) use ediff-regions-linewise.

Posted in General | Tagged | 1 Comment

Oracle on Finding Exploits

Via Matt Blaze:

Oracle’s Mary Ann Davidson wrote an astoundingly foolish and arrogant post on why customers are wrong to find and report vulnerabilities in Oracle. It’s so bad, in fact, that it’s since been taken down (the link above is to the Internet Archive).

The post cries out for a good Fisking but no analysis could do it justice. You should really read it for yourself. The arrogant tone and lack of respect for their customers should give any Oracle user pause.

I don’t understand Oracle’s obsession with reverse engineering. We’re talking about well understood technology; There really aren’t any secrets. I’m not a database guy so I’m interested in why enterprises continue to use Oracle. Are there any reasons—other than the usual stupid ones—to prefer Oracle to, say, PostgreSQL?

Blaze has a followup Tweet on why all this matters:

Posted in General | Tagged | Leave a comment

Yasnippets Tutorial

Lefteris Karapetsas has an interesting tutorial on using yasnippets for entering boilerplate code. A lot of us use small snippets for minor tasks such as filling in a for or while loop. Karapetsas shows how to use it for large portions of boilerplate.

The examples he gives are from C but the techniques are equally applicable to other languages. The idea is that code for defining a structure and functions to allocate it, initialize it, and free it is usually pretty much the same so a snippet can “write” most of the code for you. The snippet parameters fill in many of the unique parts, leaving only the application specific code to write. The same ideas apply, of course, in other common situations.

Karapetsas also has links to another tutorial and the Yasnippet Development Manual. If you aren’t using yasnippets or are only using them in trivial ways, take a look at Karapetsas’ post.

UPDATE: Added missing link.

Posted in General | Tagged | 5 Comments

The Origin of STDERR

Most (all?) modern operating systems have the notion of STDERR, a separate output channel that programs can use to output error messages. It’s especially important for Operating Systems that have some notion of “pipe” where the output of one program is automatically used as the input to another. Obviously, you don’t want error messages corrupting the data stream.

Until recently, I didn’t know—or even think about—the origin of STDERR. It just seemed a natural and necessary facility to have. It turns out that it all started with the C/A/T typesetter and troff at Bell Labs. Diomidis D. Spinellis tells the story of how the combination of troff and the C/A/T typesetter lead to the implementation of STDERR.

Spinellis’ post also serves to remind us how easy we have it now. It wasn’t that long ago that producing a typeset document was a long and messy process. Take a look at the post; it’s an interesting and amusing story.

Posted in General | Tagged | Leave a comment