CMS by Drupal
Random bits of technology
Amazon.com has a reasonably-priced, reasonably-convenient music store. So I've bought a lot of things from it. Like everyone else on the planet with a Linux box, however, I find Amazon's refusal to just give me a freakin' zipball of the MP3s from my album completely and insanely obnoxious. I understand, Amazon—you want me to install your POS downloader spamware. Not going to happen, even if you could be bothered to build it for my platform.
Hey, maybe Amazon will need a favor from me someday. In the meantime, here's how to actually be able to bulk-download your albums from Amazon Cloud Player on Linux…
The prime factors of my work phone number 7255393 are 2389 and 3037, making the phone number effectively a tiny RSA public key. I was inspired to discover this when Raphael Fernandez pointed out that 8675309 is prime. All of my family's and my other phone numbers are even. So is my SSN. My Driver's License Number is divisible by 7. So my work phone is the only primally interesting number that I can think of offhand that I own.
Was working on gluing together an emacs lisp mode for Nickle (that would last better than the last one I did) using a tutorial example when I noticed that Google Chrome had prompted me to offer its assistance, as shown below.
So I'm about to install the app RingGuard on my phone, when I notice that it wants permission to "take pictures and videos with the camera. This allows the app at any time to collect images the camera is seeing." Uh, seems a bit horrific for an app that has nothing to do with pictures or video. So I go to comment on the Google Play Android Store to alert people to probably not install this thing. But of course, I can't comment until I've installed the app. LOL. Caveat Emptor, I guess .
There are a million common hideous UI memes floating around. One of my least favorite is the use of the colors red and green as indicator colors.
First of all, about 8% of males (and 0.5% of females) are color-blind to some degree, and by far the most common deficiencies relate to ability to distinguish red from green. So this is a terrible choice of indicator colors: it would be hard to do worse. I spent an amusing few minutes Googling around to find out why these colors became standard for traffic signals, but concluded that it's probably anyone's guess—accounts vary substantially.
Secondly, "red means danger" is a complicated meme in our modern tech world. My Bluetooth headset has a red indicator on its power switch. It turns out that this means "Danger—the power is turned off!" I'd say that accidentally leaving the power on is a bigger danger than accidentally leaving it off, but really it's 50-50. Screening the power icons for "on" (IEC 5007, "1") and "off" (IEC 5008, "0") would have been a better choice. I just spilled coffee after finding that the lid button on my travel mug is marked with red for "Danger—the lid is closed" and green for "Go—the lid is open". Again, I would argue that the open lid is the bigger danger, but it's kind of 50-50. Best in this case would have been a design that makes it visually obvious whether the lid is open.
Bottom line: please get away from red and green as primary indicators of anything. As secondary indicators, they are probably fine. However, they don't convey enough of the right kind of information to be primary indicators, even to those who can see the difference.
This user trap was a nice one. I noticed a month or so ago that the "libreadline" support in my "sqlite3" executable on my home box was no longer working. For the uninitiated, this means that I couldn't use line history and line editing when working on database queries. Really annoying.
Tonight I decided I would fix it, dammit. An hour or so of careful investigation later I finally noticed that some joker had stuck a copy of sqlite3 without readline support in the Android SDK "tools" directory; my path stuff was configured to find that one first.
For the record, that's really user-hostile behavior. Don't stick spare copies of standard utilities where I will run into them. Yes, I probably should have my path in the other order, or sooner or later a hostile 'ls' is going to get me. Oh well.
Update: I've been working for probably 10 hours on optimizing a particular sqlite3 query which was inexplicably slow (a minute or so), which is what started all this. Guess what? With the current Debian sqlite3, it runs instantly! Dammit.
When I was rebuilding my crosshatch plugin for the GIMP as Script-Fu Scheme a week or two ago, I ran into a beautiful little problem. It seemed that sometimes I needed to take the
People keep pointing me at Sleep Sort in email and IRL; it is apparently a popular topic right now. To Sleep Sort an array of integers, you spawn one process per array element. Each process sleeps t seconds, where t is the value of its array element, and then outputs t…
I have put up the first of my session proposals for the Open Source Bridge Conference. For those of you who don't know, Open Source Bridge will happen for the third year here in Portland Oregon June 21-24. [Update 2011/04/17: Corrected date as suggested by an anonymous reader. Somehow I had 2010 info on here before. Oops—hope I didn't confuse anyone.] It is a most awesome event, and I can highly recommend it to anyone and everyone.
My proposals this year are:
Hope to see you all there!
I've read quite a lot of student code over the years. Some of it is quite good. A lot of it is full of predictable badnesses. These notes attempt to enumerate some of this badness, so that you may avoid it.
This is pretty C-centric in its current form. However, many of its lessons are multilingual. This is a living document, so don't expect it to be the same next time you look at it. In particular, the numbering may change if something gets inserted in the middle. It is revisioned automatically by Drupal, so feel free to point at a particular revision if you care.
Acknowledgements: My undergraduate software engineering students contributed a lot to this document, as did the commenters at FOB. Thanks much to all.