The Birth of Standard Error
Earlier today Stephen Johnson, in a mailing list run by the
The Unix Heritage Society,
described the birth of the standard error concept:
the idea that a program's error output is sent on a channel
different from that of its normal output.
Over the past forty years, all major operating systems and language libraries
have embraced this concept.
Continue reading "The Birth of Standard Error"
The Frictionless Development Environment Scorecard
The environment we work in as developers can make a tremendous difference on our productivity and well-being. I’ve often seen myself get trapped in an unproductive setup through a combination of inertia, sloth, and entropy. Sometimes I put-off investing in new, better tools, at other times I avoid the work required to automate a time-consuming process, and, also, as time goes by, changes in my environment blunt the edge of my setup. I thus occasionally enter into a state where my productivity suffers death by a thousand cuts. I’ve also seen the same situation when working with colleagues: cases where to achieve a simple task they waste considerable time and energy jumping through multiple hoops.
Continue reading "The Frictionless Development Environment Scorecard"
A Better Air Gap
Bruce Schneier recently published
ten rules for setting up an air-gapped computer;
a computer that even the NSA can't hack,
because it's not connected to the internet.
His rules are practical and make sense, but,
given the number of vulnerabilities regularly found in modern operating systems,
I think that they need strengthening.
Continue reading "A Better Air Gap"
If estimating the time needed for implementing some software is difficult, coming up with a figure for the time required to debug it is nigh on impossible. Bugs can lurk in the most obscure corners of the system, or even in the crevices of third-party libraries and components. Ask some developers for a time estimate, and don’t be surprised if an experienced one snaps back, “I’ve found the bug when I’ve found the bug.” Thankfully, there are some tools that allow methodical debugging, thereby giving you a sense of progress and a visible target. A method I’ve come to appreciate over the past few months is differential debugging. Under it, you compare a known good system with the buggy one, working toward the problem source.
Continue reading "Differential Debugging"
Portability: Goodies vs. the hair shirt
“I don’t know what the language of the year 2000 will look like, but I know it will be called Fortran”
— Tony Hoare
Writing code that can run on any platform used to be a golden standard, as attested by the tens of books with the word “portable” in their title. Every day however staying true to the faith of portable code is becoming more challenging as mighty ecosystems amass resources to tempt us into their platform-specific version of heaven. We can write non-portable code out of laziness or ignorance, because we can’t be bothered to verify or check that our code follows a standard. We can also decide to write non-portable code following a pragmatic cost-benefit analysis. Let’s follow this approach and examine portability as a tool, looking at what we gain through it, the price we pay for it, and how we can cope with the challenge of upholding it.
Continue reading "Portability: Goodies vs. the hair shirt"
Impact Factor of Computer Science Journals 2012
The Thomson Reuters Web of Knowledge
has published the 2012
Journal Citation Reports.
Following similar studies I performed in the past six years
here is my analysis of the current status and trends for the
of computer science journals.
Continue reading "Impact Factor of Computer Science Journals 2012"
How to Create Your Own Git Server
Although I'm a happy (also paying) user of GitHub's offerings,
there are times when I prefer to host a private repository
on a server I control.
Setting up your own Git server can be useful
if you're isolated from the public internet,
if you're subject to inflexible regulations,
or if you simply want features different from those offered by GitHub
(and other similar providers).
Setting up a Git server on a Unix (Linux, Mac OS X, *BSD, Solaris, AIX)
machine isn't difficult,
but there are many details to observe.
Here is a complete guide.
Continue reading "How to Create Your Own Git Server"
How to make a MacBook Kensington Lock Adapter
Apple, in its infinite wisdom, has not included a Kensington lock
slot in the current model of the MacBook Pro computer.
Given the computer's price, desirability, and
the fact that three people I know have had theirs stolen,
I decided to build an improvised adapter that would allow me
attach a Kensington lock to the computer.
I realize, that the security offered by such a contraption is what
calls an "advisory lock",
for Kensington locks can be easily picked or pried away.
However, I think it might deter a casual thief who would
snatch the laptop you've left unattended for a couple
Continue reading "How to make a MacBook Kensington Lock Adapter"
Systems software is the low-level infrastructure that applications run on: the operating systems, language runtimes, libraries, databases, application servers, and many other components that churn our bits 24/7. It’s the mother of all code. In contrast to application software, which is constructed to meet specific use cases and business objectives, systems software should be able to serve correctly any reasonable workload. Consequently, it must be extremely reliable and efficient. When it works like that, it’s a mighty tool that lets applications concentrate on meeting their users’ needs. When it doesn’t, the failures are often spectacular. Let’s see how we go about creating such software.
Continue reading "Systems Software"
How to Fix the Sony MDR-W08L Headphones
I love the Sony MDR-W08L headphones,
because they are featherlight and the only ones that don't
fall from my ears when I run.
Sadly, there's no effective strain relief at the point where the cable leaves
As a result the cable can become internally severed,
and the sound becomes intermittent.
Here's how to fix this problem.
Continue reading "How to Fix the Sony MDR-W08L Headphones"
Software Tools Research: SPLASH Panel Discussion
Written by Dennis Mancl and Steven Fraser
At the recent SPLASH (Systems, Programming, Languages and Applications: Software for Humanity) conference, one of us (Steven Fraser) organized an international group of experts to discuss challenges in software tools research.1 The panelists included Kendra Cooper (University of Texas, Dallas), Jim “Cope” Coplien (Gertrud & Cope), Junilu Lacar (Cisco Systems), Ruth Lennon (Letterkenny Institute of Technology), Diomidis Spinellis (Athens University of Economics and Business), and Giancarlo Succi (Free University of Bolzano-Bozen).
Continue reading "Software Tools Research: SPLASH Panel Discussion"
If I program in many high and low-level languages, but don’t write systems code, I am a quiche programmer or a code monkey. And if my code runs without errors, and I know the complexity of all algorithms; and if my servers have hundreds of cores and gigabytes of RAM, but don’t write systems code, I am nothing. And if I run the hippest kernel, and install the neatest apps, but don’t write systems code, it profiteth me nothing.
Continue reading "Systems Code"
The Importance of Being Declarative
A declarative programming style focuses on what you want your program to do rather than how to perform the task. Through diverse programming techniques, libraries, and specialized languages, you end up with code that sidesteps nitty-gritty implementation details, dealing instead with a task’s big picture.
Continue reading "The Importance of Being Declarative"