Incremental development in Python versus actual tests

After writing yesterday's entry on how I need to add tests to ourDjanog app , I've been thinking about why itdoesn't have them already. One way to describe the situation isthat I didn't bother to write any tests when I wrote the app, butanother view is that I didn't write tests because I didn't needto . So let me explain what I mean by that.

When I ran into the startup overhead of small Python programs , my eventual solution


It's time for me to buckle down and add tests to our Django web app

Our Django web app is the Python 2 codethat I'm most concerned about in a world where people are tryingto get rid of Python 2 , for two reasons.First, not only do we have to worry about Python 2 itself beingavailable but also the Django people have been quite explicit that Django 1.11 is the last version that supports Python 2 and theDjango people will stop supporting it in 2020. We probably don'twant to be using an unsupported web framework.


Why ed(1) is not a good editor today

I'll start with my tweet :

Heretical Unix opinion time: ed(1) may be the 'standard Unix editor',but it is not a particularly good editor outside of a limitedenvironment that almost never applies today.

There is a certain portion of Unixdom that really likes ed(1),the 'standard Unix editor'. Having actually used ed for a notinsignificant amount of time (although it was the friendlier 'UofTed' variant), I have some reactions to what I feel is


It's worth testing that obvious things actually do work

We've reached the point in putting together our future ZFS onLinux NFS fileservers where we believewe have everything built and now we're testing it to make sure thatit works and to do our best to verify that there are no hiddensurprises. In addition to the expected barrage of NFS client loadtests and so on, my co-worker decided to verify that NFS locksworked. I would not have bothered, because of course NFS locks work,they are a well solved problem, and it has


Explicit manipulation versus indirect manipulation UIs

One of the broad splits in user interfaces in general is the spectrumbetween what I'll call explicit manipulation and indirectmanipulation . Put simply, in a explicit manipulation interface yousee what you're working on and you specify it directly, and in anindirect manipulation interface you don't; you specify it indirectly.The archetypal explicit manipulation interface is the classical GUImouse-based text selection and operations on it; you directly selectthe text with the mouse cursor and you can directly see yourselection.

(


Why I'm mostly not interest in exploring new fonts (on Unix)

Every so often, an enthusiasm for some new font or set of fontsgoes around the corners of the Internet that I pay attention to.It's especially common for monospaced fonts (programmers seem tohave a lot of opinions here), but people get enthused by proportionalones as well. I used to be reasonably interested in this area andcustomized my fonts and sometimes my font rendering, but these daysI find that I generally take at most a cursory look at new fonts andtune out.

The first reason


Some malware apparently believes in covering its bases

Today our system for logging email attachment type information caught somethinginteresting. Here's the important log messages:

 attachment application/rtf; MIME file ext: .rtf attachment application/zip; MIME file ext: .zip; zip exts: .pdf .rtf .xlsxrejected  from 185.185.25.104/luizhenrique@vencetudo.ind.br to : identified virus: CXmail/Rtf-E,
                    
                
                
                    
                
            
            
            

Some Firefox addons I'm experimenting with (as of Firefox 62 or so)

One of the interesting things that's happened as a consequence of my switch to Firefox Quantum (ie 57+) isthat I've become much more willing to experiment with addons. Mypre-Quantum Firefox setup seemed prone to memory leaks due to addons,which made me fairly nervous about adding more; resigned to leaksor not, I didn't really enjoy the experience .My Firefox Quantum setup seems to be clearly better on all aspectsof this (both initial memory usage and growth over time


It matters where (or when) your programs ask questions

The other day, I wrote about howwe belatedly evolved our account creation script so that it couldnow just assume we wanted the defaults for most everything, and howthis simple change had been a real quality of life improvement forus. This improvement isn't just because we interact with the scripta lot less; it's also because we changed where we interact with it.Specifically, we now only interact with the script right at thestart and all the way at the end; before, we had


Go's net package doesn't have opaque errors, just undocumented ones

I tweeted :

I continue to be irritated by how opaque important Go errors are. Ishould not have to do string comparisons to discover that my networkconnection failed due to 'host is unreachable'.

The standard library net package has a general error type that's returned from most network operations. If you read throughthe package documentation straightforwardly, as I did in this tweet,you will likely conclude that the only reasonable way to see ifyour net.Dial() call to something has failed because your Unix