Go goroutines as a way to capture and hold state
The traditional annoyance when writing lexers is that lexers haveinternal state (at least their position in the stream of text), butwind up returning tokens to the parser at basically random pointsin their execution. This means holding the state somewhere andwriting the typical start/stop style of code that you find at thebottom of a pile of subroutine calls; your 'get next token' entrypoint gets called, you run around a bunch of code, you save allyour state, and you return the token.
It's time to stop coddling software that can't handle HTTPS URLs
A couple of years ago I moved my personalwebsite from plain HTTP to using HTTPS. WhenI did that, one of the lessons I learned was that there were a certain number of syndication feed fetchersthat didn't support HTTPS requests at all. My solution at the timewas to sigh and add some bits to my lighttpd configuration so they'dbe allowed to still fetch the HTTP version of my syndication feedsNow I'm in the process of moving thisblog from HTTP to HTTPS and so I'
The problem with proportional fonts for editing code and related things
One of the eternal attractive ideas for programmers, sysadmins, andother people who normally spend a lot of time working with monospacedfonts in editors, terminal emulators, and so on is the idea ofswitching to proportional fonts. I've certainly considered it myself(there are various editors and so on that will do this) but I'veconsistently rejected trying to make the switch.
The big problem is text alignment, specifically what I'll call'interior' text alignment. Having things line up vertically is
Our mail submission system winds up handling two sorts of senders
Yesterday I mentioned that while intheory our mail submission system could use sender verification tocheck whether a MAIL FROM address at an outside domain was valid,but that I didn't feel this was worth it. One of the reasons I feelthis way is that I don't think this check will fail very often formost outside domains, and to do that I need to talk about how wehave two sorts of senders: real people and machines.
Real people are, well, real people with a MUA
What addresses we accept and reject during mail submission
Like many places, our mail setup includes a dedicated mail submission machine ( or two ). I mentioned yesterday that this submission machine refuses some MAIL FROM addresses,so today I want to talk about what we accept and refuse during mailsubmission and why.
When we were designing our mail submission configuration many yearsago, our starting point was that we didn't expect clients to dealvery well if the submission server gave them a failure response.What you'd like is for the MUA to notice the error,
Sometimes it's useful to have brute force handy: an amusing IPMI bug
Once upon a time we had gotten in some new servers. These servershad an IPMI and the IPMI could be configured to send out emailalerts if something happened, like a fan stopping or a power supplylosing power. Getting such alerts (where possible) seemed like agood idea, so I dutifully configured this in the IPMI's web interface.Sensibly, the IPMI needed me to set the origin address for theemail, so I set it to When I talked about how monitoring tools should report timestamps andother identifying information , I mentionedthat I felt that keeping output to 80 columns or less was still a goodidea even if meant sometimes optionally omitting timestamps. So let'stalk about that, since it's basically received wisdom these days thatthe 80 column limit is old fashioned, outdated, and unnecessary. I think that there are still several reasons that short output issensible, especially at 80 columns or less. First, 80 In a comment on yesterday's entry ,Mihai Cilidariu sensibly suggested that I not add timestamp supportto my tools but instead outsource this to a separate program in apipeline. In the process I would get general support for this andcomplete flexibility in the timestamp format. This is clearly anddefinitely the right Unix way to do this. Unfortunately it's not a good way in practice, because of a fundamentalpragmatic problem Unix has with pipelines. This is our old friend block buffering versus line buffering . A long This is a lesson learned, not quite the hard way but close to it.What is now a fairly long time ago I wrote some simple tools to report the network bandwidth(and packets per second) for a given interface on Linux and Solaris.The output looked (and looks) like this: I've used these tools for I've been using basic filename completion in my shell for a whilenow, and doing so has given me a perspective on what advancedfeatures of this I'd find useful and which strike me as less useful.Unfortunately for me, the features that I'd find most useful are theones that are the hardest to implement. Put simply, the problem with basic filename completion is that anytime you want to use even basic shell features like environmentvariables, you lose completion. Do you refer to some sm-ipmi@
Why keeping output to 80 columns (or less) is still sensible
Unix's pipeline problem (okay, its problem with file redirection too)
Monitoring tools should report timestamps (and what they're monitoring)
40.33 MB/s RX 56.54 MB/s TX packets/sec: 50331 RX 64482 TX
What I want to have in shell (filename) completion
Menu