2016-04-20
A brief review of the HP three button USB optical mouse
The short background is that I'm strongly attached to real three button mice (mice where the middle mouse button is not just a scroll wheel), for good reason. This is a slowly increasing problem primarily because my current three button mice are all PS/2 mice and PS/2 ports are probably going to be somewhat hard to find on future motherboards (and PS/2 to USB converters are finicky beasts).
One of the very few three button USB mice you can find is a HP mouse (model DY651A); it's come up in helpful comments here several times (and see also Peter da Silva). Online commentary on it has been mixed with some people not very happy with it. Last November I noticed that we could get one for under $20 (Canadian, delivery included), so I had work buy me one; I figured that even if it didn't work for me, having another mouse around for test machines wouldn't be a bad thing. At this point I've used it at work for a few months and I've formed some opinions.
The mouse's good side is straightforward. It's a real three button
USB optical mouse, it works, and it costs under $20 on Amazon.
It's not actually made by HP, of course; it turns out to be a lightly
rebranded Logitech (xinput
reports it as 'Logitech USB Optical
Mouse'), which is good because Logitech made a lot of good three
button mice back in the days. There are reports that it's not durable
over the long term but at under $20 a pop, I suggest not caring if
it only lasts a few years. Buy spares in advance if you want to,
just in case it goes out of production on you.
(And if you're coming from a PS/2 ball mouse, modern optical mouse tracking is plain nicer and smoother.)
On the bad side there are two issues. The minor one is that my copy
seems to have become a little bit hair trigger on the middle mouse
button already, in that every so often I'll click once (eg to do a
single paste in xterm
) and X registers two clicks (so I get things
pasted twice in xterm
). It's possible that this mouse just needs a
lighter touch in general than I'm used to.
The larger issue for me is that the shape of the mouse is just not
as nice as Logitech's old three button PS/2 mice. It's still a
perfectly usable and reasonably pleasant mouse, it just doesn't
feel as nice as my old PS/2 mouse (to the extent that I can put my
finger on anything specific, I think that the front feels a bit too
steep and maybe too short). My overall feeling after using the HP
mouse for several months is that it's just okay instead of rather
nice the way I'm used to my PS/2 mouse feeling. I could certainly
use the HP mouse; it's just that I'd rather use my PS/2 mouse.
(For reasons beyond the scope of this entry I think it's specifically the shape of the HP mouse, not just that it's different from my PS/2 mouse and I haven't acclimatized to the difference.)
The end result is that I've switched back to my PS/2 mouse at work. Reverting from optical tracking to a mouse ball is a bit of a step backwards but having a mouse that feels fully comfortable under my hand is more than worth it. I currently plan to keep on using my PS/2 mouse for as long as I can still connect it to my machine (and since my work machine is unlikely to be upgraded any time soon, that's probably a good long time).
Overall, if you need a three button USB mouse the HP is cheap and perfectly usable, and you may like its feel more than I do. At $20, I think it's worth a try even if it doesn't work out; if nothing else, you'll wind up with an emergency spare three button mouse (or a mouse for secondary machines).
(And unfortunately it's not like we have a lot of choice here. At least the HP gives us three button people an option.)
How to get Unbound to selectively add or override DNS records
Suppose, not entirely hypothetically, that you're using Unbound and you have a situation where you want to shim some local information into the normal DNS data (either adding records that don't exist naturally or overriding some that do). You don't want to totally overwrite a zone, just add some things. The good news is that Unbound can actually do this, and in a relatively straightforward way (unlike, say, Bind, where if this is possible at all it's not obvious).
You basically have two options, depending on what you want to do with the names you're overriding. I'll illustrate both of these:
local-zone: example.org typetransparent local-data: "server.example.org A 8.8.8.8"
Here we have added or overridden an A record for server.example.org
.
Any other DNS records for server.example.org
will be returned
as-is, such as MX records.
local-zone: example.com transparent local-data: "server.example.com A 9.9.9.9"
We've supplied our own A record for server.example.com
, but we've
also effectively deleted all other DNS records for it. If it has
an MX record or a TXT record or what have you, those records will
not be visible. For any names in transparent local-data zones, you
are in complete control of all records returned; either they're in
your local-data stanzas, or they don't exist.
Note that if you just give local-data
for something without a
local-zone
directive, Unbound silently makes it into such a
transparent local zone.
Transparent local zones have one gotcha, which I will now illustrate:
local-zone: example.net transparent local-data: "example.net A 7.7.7.7"
Because this is a transparent zone and we haven't listed any NS
records for example.net
as part of our local data, people will
not be able to look up any names inside the zone even though we
don't explicitly block or override them. Of course if we did list
some additional names inside example.net as local-data, people would
be able to look up them (and only them). This can be a bit puzzling
until you work out what's going on.
(Since transparent local zones are the default, note that this
happens if you leave out the local-zone
or get the name wrong by
mistake or accident.)
As far as I know, there's no way to use a typetransparent zone but delete certain record types for some names, which you'd use so you can do things like remove all MX entries for some host names. However, Unbound's idea of 'zones' don't have to map to actual DNS zones, so you can do this:
local-zone: example.org typetransparent local-data: "server.example.org A 8.8.8.8" # but: local-zone: www.example.org transparent local-data: "www.example.org A 8.8.8.8"
By claiming www.example.org
as a separate transparent local zone,
this allows us to delete all records for it but the A record that
we supply; this would remove, say, MX entries. Since I just tried
this out, note that a transparent local zone with no data naturally
doesn't blank out anything, so if you want to totally delete a
name's records you need to supply some dummy record (eg a TXT
record).
(We've turned out to not need to do this right now, but since I worked out how to do it I want to write it down before I forget.)