Deirdre Saoirse Moen

Sounds Like Weird

Archive of posts with tag 'computers'

: Principles of Determining Geolocation

[![Photo by Aurélien Bellanger](/images/2015/02/photo-1417870839255-a23faa90c6b0-700-700x467.jpeg)](/images/2015/02/photo-1417870839255-a23faa90c6b0-700.jpeg)Photo by [Aurélien Bellanger](https://unsplash.com/cyyrius)

In 2004-2005, I worked for Quova as a Network Geography Analyst.
As a practical matter, given that MLB was one of our largest customers at the time, this meant that we fielded complaints for people who were locked out of viewing baseball games where they should not have been, and a good chunk of my job was investigating those complaints.
This is intended for a mixed-level audience, so I’m going to skip deep nuance and detail. ## Simple Explanation

  1. When you connect to the internet, whether through cable, your cell phone, whatever, you’re assigned an IP address, where IP stands for Internet Protocol. At the point in time you connect, your IP address has a fixed location in physical space: wherever you happen to be.
  2. Your device connects to another, upstream device, and depending upon where you want to go, it connects to a series of other devices until it arrives at your intended destination (say, Google’s web server). Each of those devices has an IP address, and each of those IP addresses has a fixed location in physical space.
  3. If you ask for a traceroute from a command line, it’ll tell you what series of hops it goes through to get from point A (you) to point B (where you want to go).
    $ traceroute 8.8.8.8
    traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets

    1. 10.0.1.1 (10.0.1.1) 10.938 ms 1.183 ms 1.032 ms
    2. 198.144.195.185 (198.144.195.185) 51.874 ms 52.194 ms 51.948 ms
    3. ge1-8.rawbw-demarc.sfo4.reliablehosting.com (216.131.94.209) 61.865 ms 57.246 ms 64.077 ms
    4. core2-1-1-0.pao.net.google.com (198.32.176.31) 52.671 ms 51.958 ms 55.120 ms
    5. 64.233.175.169 (64.233.175.169) 56.400 ms
      64.233.175.171 (64.233.175.171) 54.772 ms
      72.14.236.114 (72.14.236.114) 54.420 ms
    6. google-public-dns-a.google.com (8.8.8.8) 54.663 ms 54.480 ms 94.454 ms

    The first is my internal IP address. The second is our gateway address. The third is our provider’s demarc with their upstream. The fourth is where it enters Google’s servers.

  4. Network administrators, to make their lives easier, often label those intermediary hops with names. This is not required. Often those names have geocoding information. These are often names of cities, airport codes, weather station codes, neighborhood names, apartment complex names—all kinds of things. In core2-1-1-0.pao.net.google.com, “pao” is Palo Alto, California, which has an airport IATA code of PAO.
  5. If you’re very lucky, you will have a traceroute that shows very little router delay (like one hop in my example above). Then you can use actual physics to tell you where it must be in relation to the adjacent hop.
    Light (and electricity) travels 300,000 km/sec, or 186,000 miles/sec. Per millisecond, 300 km or 186 miles. It’s easier to multiply by 300 than 186 in my head, so I’ve typically stayed metric at this point, but I’ll give both. Besides, it just sounds cool to drop millilightseconds in a conversation.
    See that last hop? 54.420 -> 54.480 (using minimum to minimum)? That’s 6 hundredths of a millisecond, meaning the laws of physics say the packet traveled a maximum of 18 km or 11.2 miles.
    Except traceroute measures time there and back, so the real numbers are 9 km or 5.6 miles.
    Is it in Palo Alto? The end location is 1.808 ms from the stated Palo Alto location, which means it’s at most 262.35 km or 168.25 miles from Palo Alto. So almost certainly SF Bay Metro with some lag. This is where repetitive traceroutes at different times from different locations would be helpful. (I’d expect the location to be Mountain View, California, which is the city south of Palo Alto, and also Google’s HQ.)

That’s the Basics. Really.

So the real trick to geolocation is to have as many knowns as possible. This means having server space on fast networks around the world, being able to triangulate in on locations of interest, and getting different results over time.
You can read more about using millilightseconds in this humorous story of network diagnosis.
This four-part series about traceroute is quite good, and covers some of the wrinkles.

My Own Little Experience

I mentioned this on Twitter at the time it happened.
blog-hack-attempt
There are some interesting nuances here:

  1. I don’t have a user called admin, but that’s the default super user in WordPress.
  2. If you do a whois on that IP address, you’ll note it’s assigned to T-Mobile:
    NetRange: 172.32.0.0 – 172.63.255.255
    CIDR: 172.32.0.0/11
    NetName: TMO9
    […]
    Organization: T-Mobile USA, Inc. (TMOBI)
    Real hackers trying to crack into your web site will not be using mobile as a rule. This was personal, not a doorknocker.
  3. At the time, it showed up as being in LA. Once you get a dynamically-assigned IP address, such as a mobile address, to a metro area, there’s no guarantee you’ll get closer than that.
  4. [I note that this screenshot shows 1) T-Mo; 2) LA](https://twitter.com/jaidblack/status/461945958104698881), and my breakin attempt was [a couple of hours after this was posted](https://deirdre.net/elloras-cave-trust-and-confidence-wtf/). Obviously, no proof, yada yada. Just: correlation.

Update to this section, May 2015: It turns out, and I’m thankful for this, that there is a far more ordinary explanation for what happened. I can’t prove it’s what happened in December, but it did happen last week. In January 2014, Rick and I were traveling and would be in some of the remotest parts of the world (in fact, we spent three days out of satellite range of Internet, believe it or not). I gave admin credentials to a friend who lives in the LA area to blogsit and make sure any security updates got applied while we were gone. It turns out that, since saving that password, she’d switched her mobile device from Verizon to T-Mobile, and I’d since changed the admin username. She doesn’t use mobile data much, so it didn’t try to access my site for a long time (or frequently). And there you are.
My apologies to Jaid Black for the insinuation.
Also, a better security method for dealing with this issue is to make a second admin user. Doh.

Quick Geolocation for Mere Mortals

Use the GeoIP Tool website.

: Explaining Some Hardware Whinging—I Love My MacBook Air

Apple Store Stairs-colorefex-700
First, I want to say this: though I worked at Apple to September 2013, I have no actual knowledge of Apple’s future hardware plans. So, on the off chance that I happened to sign an NDA relating to the device I’m commenting about, I honestly didn’t know that that was the case. I believe every hardware NDA I signed was for a product that’s already shipped.
9to5mac posted this mockup of a purported future 12″ MacBook Air.
In short, I hated it.
In 2013, I switched from a 15″ MacBook Pro—I’d had several over the years—to a 13″ MacBook Air. I did it after Rick made the same move, and for the same reason: believe it or not, it’s actually faster on day-to-day activities, despite the slower CPU.
It’s also cheaper.
So what’s in the new report that I hate so much?

  • No Thunderbolt. I rely on Thunderbolt RAID for backup. That RAID array is Thunderbolt only. I also rely in an external 2TB hard drive I use just for graphics library (and Aperture) storage.
    Look, I love Thunderbolt. I’ve invested heavily in it. If Apple’s dumping it on my preferred laptop model three years in, I’m pissed.
    I don’t use Thunderbolt for displays, and I understand USB-C can drive displays. Thunderbolt is still a better, faster technology. By all means, replace the existing USB connectors with USB-C. That makes sense.
  • No MagSafe Connector. It’s proposing to use power through a single USB connector. John Gruber talks about why that’s a mistake.

    As enumerated earlier, I have numerous questions regarding Mark Gurman’s report that the upcoming next-generation MacBook Air does away with all ports other than two: a USB Type-C and a headphone jack.
    But one that I keep thinking about is MagSafe. I can definitely see getting rid of classic USB — it’s old and thick. Thunderbolt, sort of. But MagSafe? When Apple announced MagSafe back in 2006, I knew they were solving a real problem, not an imaginary marketing problem. Tripping over power cables and yanking laptops off tables and onto floors was a real issue. I had an iBook way back when that ultimately died after one such incident too many. If anything, Apple has made MagSafe 2 even easier to pull apart, not harder. Switching to USB Type-C seems like it would take us all the way back to days when tripping over the charging cable would take your laptop along for the ride.

  • Keyboard squeeze. I don’t think I’ll like this. If anything, the 13″‘s keyboard is already too narrow.
  • Elimination of physical key feedback. That’s a big nope from me. If that’s the way Apple’s headed for all keyboards, I’m going to have to look to Microsoft as my preferred keyboard vendor. That’s a painful thing to say.
  • Elimination of the SD Card slot. I love that I don’t have to keep track of some small doodad, and I can just pack my laptop, my cameras, my iPad/Phone, a power cord and a lightning cable when I travel. It’s one more thing I have to track, and I’d really miss this.

In short, this looks like a light-use computer for people who either a) don’t use computers or b) use another computer as their primary computer. I’m one of those people who uses a MacBook Air as my sole computer, and that’s the way I’d like to keep it.

So Why Not Go to a 13″ MacBook Pro?

13″ MacBook Air tricked out with 8G (max) memory and 512G (max) Flash & 1.7 GHz CPU: $1,749 (before other things like AppleCare and any accessories).
Here’s the thing: a 13″ MacBook Pro does not have the same amount of area on the screen. So, in order to get the same effective 1440×900 resolution, I’d have to go back to a 15″ MBP. Further, I can’t go with an 8GB and have the same effective memory because retina uses more memory.
15″ MacBook Pro with 16G (only) memory, 512G (min) Flash & 2.5 GHz (min) CPU: $2,499. I could argue that, for a true replacement, it’d also have to bump up another $500 for the 1TB flash because, again, the retina machine will use more memory for things like swap, so the real price is $2,999.
Twelve hundred bucks is a lot of difference for better external drive support and a better power cable.
Update: more thoughts in this post.
Photo credit: Rick Moen.

: Geek Humor

QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers. Orders a sfdeljknesv.

— Bill Sempf (@sempf) September 23, 2014

@sempf was it a mock bar?

— Brian H Prince (@brianhprince) September 23, 2014

@sempf You forgot about when he ordered 0’; DROP TABLE BEERS;

— Adrian Petrescu (@apetresc) September 23, 2014

@sempf @joshbillions Ah yes, the Edge Case Saloon. A fine establishment.

— Bill Van Loo (@billvanlooteach) September 23, 2014

@sempf A QA egineer walks into a bar. orԁèrs å bëer

— sheila miguez (@codersquid) September 23, 2014

@sempf @marxculture add ‘tries to break the beer tap’, ensures that the liquid coming from the beer tap is in fact, beer.

— Paul Walsh (@Paul__Walsh) September 23, 2014

@sempf Orders a bier. Orders a cerveza. Orders a pivo. Orders a cerveja. Orders a pia. Orders a øl. Orders a ເບຍ. Orders a 啤酒.

— Aleksis Tulonen (@al3ksis) September 23, 2014

@sempf @therealfitz Response from our QA expert: pic.twitter.com/W6ejEYueMU

— Jenna Bilotta (@jenna) September 23, 2014

@sempf Quickly orders a second beer before the first is served.

— Brian Ott (@botticus) September 23, 2014

@sempf Bartender pours one beer and says “Works on my machine”

— Chris McMahon (@chris_mcmahon) September 23, 2014

@sempf pentester orders <script>alert(1);</script> beers 😉

— Simon Bennetts (@psiinon) September 23, 2014

@sempf Sample code walks into a bar. But only after walking into a foo.

— mbklein (@mbklein) September 23, 2014

. @sempf Meanwhile, her security researcher friend bypasses the bartender, pours <img src=x onerror=alert(‘xss’) /> beers for someone else.

— James Roper (@jroper) September 24, 2014

@sempf @OzIndie you forgot: QA Engineer orders a beer, walks into a bar.

— Rossy (@SudoRossy) September 24, 2014

: Hilarity from the Spam Queue

A spam comment caught by Akismet:

If the previous game is too adventurous for you, simply try flapping a blanket in the air above your ferret as if you were fluttering a bed sheet over a mattress.

You don’t say.
This particular spam comment ended with:

…and ferrets love to cuddle.

: Model View Culture / Bigger Issues

Elizabeth Spiers’s article about the magazine and its founder Shanley Kane has a great quote relevant to the art vs. artist debate of yore:

But important work gets done every day by flawed people, sometimes even by assholes. No one should be more aware of that than people who work in the tech industry, where many of the vaunted innovators and revolutionaries were not warm, fuzzy people. Ultimately, they’re judged by their work.

If you’re in tech—or interested in tech or diversity issues in tech—Model View Culture is a superb magazine that has no analog.

  1. It talks about how perks can divide people. Been there, done that. Especially when you’re at some doughnut event and they’ve forgotten to cater to the vegan and the celiac. Again.
  2. It talks about acquaintance rape by a coworker.
  3. It has great pieces like this one by Rachel Chalmers on why not to raise venture capital.

Going Beyond Assholes

When I made the Traitor to the Mens t-shirts, I got a note about American Apparel. I’d known about the sexist advertising, but not about how awful the CEO was (he’s still awful, he’s just gotten resigned). Their shirts being produced in the US was important to me for various reasons, including knowing that labor standards and business practices were, at least in theory, up to US standards.
This human slavery story comes out of Thailand’s shrimp industry.
And this story about Scientology’s drydock bill also has, at its heart, human slavery. In short, Curaçao’s drydock was using slave labor from Cuba, people Cuba sent over to do work to pay down Cuba’s drydock bill. They worked under horrific conditions. (The electrocution story reminds me of the tale of Kendrick Moxon, one of Scientology’s attorneys, and his Sea Org daughter who died of electrocution.)
One of my concerns is knowing that I’m doing less harm, and that means knowing more about where things come from and how they’re produced/delivered. And sometimes, there’s a bunch of crappy choices.
You might think that t-shirt made in Nicaragua or Honduras is better because it’s not made by American Apparel.
You know what? Nicaragua has an appalling lack of infrastructure. Many Nicaraguans work part of the year in Costa Rica due to lack of opportunity. As our tour guide said:

We cannot even bag plantains.

So imagine, if you will, given that they don’t have the factory capability to bag plantains, how it is that they’re able to make t-shirts for shirt.woot (among others) but can’t even bag plantains, one of their major crops.
Nicaragua’s the only country I’ve been to where the TV’s world weather pointedly excludes the US and Canada from its list of world cities. They are angry with us and, frankly, they have good reason to be.
It’s not that I don’t want to do business with Nicaragua. To the contrary. I’ve been there twice (short trips, granted). It’s just that, given what I know, I don’t inherently trust that any business has manufacturing in Nicaragua has Nicaraguan infrastructure interests as a design goal.
As Rick has pointed out more than once, “How do you know the company you’re not boycotting isn’t worse?”
Like, you know, Nestlé, and its chairman, Peter Brabeck-Letmathe, who doesn’t believe human beings have a right to water. Corporations buying up water rights in poor countries is an enormous global human rights issue.
Here, have a list of Nestlé brands for your boycott needs. I’m happy to say that none of my regular brands are on that list. \o/
Sometimes, I think we lose sight of the bigger picture because some bad things in front of us seem like the “worst thing ever.” They’re bad, but there are worse things, and I think we need to keep perspective on that.

The Response on the Delany/NAMBLA Stuff Wasn’t What I Expected

No comments on my post, and few on Will’s. None on the LJ repost. None on Tumblr.
Apart from a few people, mostly not in sf/f, being horrified, mostly on facebook.
I get this tweet:

@deirdresm i wish you wouldn’t promote WS. he’s a doxxer, racist sexist abuser, and has hurt a lot of victims of abuse.

— Ann Somerville (@ann_somerville) July 11, 2014

…which leads to a long conversation ending in…

@Cecily_Kane @deirdresm forget it. she’s not interested unless it’s her hobby horse. other victims can go fish

— Ann Somerville (@ann_somerville) July 12, 2014

Hobby. Horse.
Let me pull a quote out from Samuel Delany’s writing about sex with children:

Finally a composite score is reached, and the “seriousness” of the infraction judged accordingly. The consent of a seven-, eight-, or nine-year old is not the same thing as the consent of a seventeen- or eighteen-year old. And the “consent” of a three, four, and five year old means much less—especially if it’s negative. But it must count for something, otherwise you are just saying the child is not human and has no feelings or agency whatsoever—which, in itself, is abusive and counter-intuitive. And, I would maintain, immoral when another possibility presents itself.

Delany’s commented on Will’s post. He stands by what he wrote.
Is that really okay with everyone?

: What Blog Statistics Look Like Here

I’ve had a blog for 10 years, but I’ve been irregular for periods about posting to it before WordPress had a good spam solution. These days, an average day for me is between 100 and 250 page views and between 70 and 150 unique visitors. Obviously, this excludes people who turn off tracking.
For reasons related to upcoming projects, I’d moved deirdre.net to WP Engine. I’m so glad I did, because they were able to handle the massive sudden spike.
site-stats-mzb
At the peak, in a 24-hour period from June 10-11, I had 28,000 page views, almost entirely unique visitors.
If you need a really great hosting platform for your self-hosted WordPress blog, I’ve been really impressed with WP Engine.

: The Seventies: Getting into Programming

Note: this is part of a much longer piece I’m writing, which I’ll announce later. I thought you’d enjoy this first draft excerpt.
I took my first programming class in the summer of 1975; I was 15 when I started. The programming lab was in the math and science building of Saddleback College. Back in those days, they had a Data General Nova 3 minicomputer with 64K of core memory (not RAM) and 64K of floating point core. Now, those of you who’ve never seen core memory, each bit is a magnet on a larger lattice framework and 64k of core took up a significant amount of space, though what we had, both floating point and regular memory, probably fit into less space than that photo I linked to.
Saddleback’s Nova did have a hard drive that was about the size of a washing machine, with one fixed platter set and one removable one. I don’t remember exactly how much drive space it had, but let’s just say it was a handful of megabytes.
I grew fascinated with the computer lab. The smell of the oil on the paper tape drives, the sound of the hard drives seeking, the gentle clicking of other switches and relays, the drama when the multiplexer melted over 4th of July weekend. I loved every bit of it.
My dad had said, “You like puzzles, you’re good at math. You’d be great at this, and you might actually enjoy it.” Back then, programming wasn’t a big industry, so he didn’t actually expect it to be a field I’d really go into. It was more one of those parental “hey, check it out” things.
At the time, I was extremely shy, and screwing up in front of other people, or where other people could watch, was my least favorite thing ever.
So, even though I considered it impersonal, that was precisely why programming worked for me. If I couldn’t figure something out right away, the computer would tell me I was wrong and I’d suffer in silence. I’d work at different approaches to the problem until I understood it well enough that I’d have the solution worked out.
Because of my immersion into computers and programming, when there was an opening for a lab assistant the next term, I was offered the position, and accepted. I learned more about the Nova minicomputers and read the entire thick manual on operating it, trying to understand the relationship between assembler (which I had not yet taken, but could read through simpler bits of) and the binary it translated into.
The minicomputer took up about half a rack, and its hard drives cabinets were about the size of a modern washing machine. The entire thing needed enough power that it had to have a raised subfloor, quite common in computer rooms of the day.
When booting the Nova every morning when the lab opened, someone had to hand-check the paper tape driver in binary using the front panel switches. Now, one of the beauties of core memory is that it’s non-volatile, so that usually translated to three things: 1) checking that the sequence was still correctly in memory, fixing it if necessary; 2) going to the memory address where the driver started, then 3) start the system running from there. Eventually, I memorized it enough that I could check the entire sequence without thinking. It just became a familiar pattern of numbers.
Saddleback offered a single class in Basic programming (that everyone took first) plus one in Assembler and another in Fortran. All three were taught through the Math department. You had to do the lab work for Fortran at UC Irvine, which was about 15 miles away. The fourth class offered, Cobol, was taught through the Business department, and you had to do the lab work at Cal State Fullerton. This was the one class I never took, though.
That’s it. Four total classes, plus any independent study opportunities.
At the time, there were zero Computer Science degree programs in the United States, so far as I knew. You could get an Engineering degree with a Computer emphasis (EECS), or a Math degree, or a Business degree, but no standalone degree in Computer Science that wasn’t primarily about another discipline. That had yet to be invented.
So if this happened to be your thing, as it was mine, it was a tough field to enter back in 1975. You didn’t really learn enough at the community college level to do it full time in industry, but how else would you learn enough? The four-year programs weren’t much better.
These days, you’d buy a computer and work from home on various projects, perhaps open source ones.
Back then, a computer cost on the order of a year’s rent (at least by the time you got enough doohickeys to make it actually useful for anything) and required being soldered together. Of course, this was the kind of project that friends would help you with. In fact, four of us did exactly this for my high school physics project the following year. Having helped my father solder together the parts on a Heathkit oscilloscope, I did an awful lot of the soldering on that project.
Effectively, the price and difficulty barriers meant no one had a computer at home in that era. Computers like the original Apple I were just starting to become available.
One day, the lab got a request for a job interview from a local business, BasicFour, headquartered on the Irvine/Costa Mesa border near South Coast Plaza. They’d asked to interview a more senior lab assistant. He was 17, had a few months more experience than I did, but he’d also recently accepted a job offer.
The lab manager handed the information to me and said, “This could be a great opportunity for you.”
I called and got an in person interview. I was so excited that it wasn’t until after I’d gone home that I realized no one had asked me any programming questions. I was given a tour and offered an alternate, lesser position.
“Normally we start women out in a data entry position,” the man in the suit said. It paid less than half as much money. Since data entry positions have largely gone away—the position was for a glorified typist, still very much considered “women’s work” at that time. If nothing else good ever came of the Internet, at least women don’t have to put up with men feigning being too good to type their own crap.
I turned it down, but gave no reason.
Dejected, I almost didn’t go back to the Saddleback lab the next day. I considered calling in sick. When I did go in, I reluctantly walked over to my boss’s office.
“How’d it go?” she asked.
I told her what they’d said, then I told her that I’d turned them down.
“Good,” she said. “They shouldn’t have done that.” She asked me what I wanted to do, ensuring that I knew that I could report what they’d said.
“Find a job with a company that treats people better.”
“Good idea,” she said, then said she wouldn’t be sending anyone else to interview there. Ever.
At that time, I wasn’t willing to write off BasicFour, even though I probably should have. They were a local employer. They gave me an interview. It didn’t matter that they screwed up so badly. I figured—perhaps correctly, perhaps not—that they may change their minds later. Given limited opportunities at the time, I didn’t want to alienate them. It hadn’t occurred to me then, but would now, that some of the people in charge of that policy would later become involved in other local ventures, so that was probably a wise choice. Unfortunate that I had to even think about that, then or now.
I was sixteen years old, I hadn’t even had a programming job yet apart from some work I’d done for my father, and I was already worried about being blacklisted.
Heck of a way to start a career.

: Those Clubhouse Doors Are Tricksy Sticky

Below is a video of a panel called “Opening the Clubhouse Doors: Creating More Inclusive Geek Communities” panel from C2E2 2014, April 25, 2014. It happened in Chicago.
At about 5 minutes in, one of the panelists tells the opening tale about an experience asking about diversity in comics:

“What is the percentage of female readers?”
And he literally said, “I don’t know, and I don’t care.”

Hat tip to Kameron Hurley.

: Programming Sucks & Why I Quit

[![Why I Quit Programming](/images/2014/05/Fotolia_61026517_S.jpg)](/images/2014/05/Fotolia_61026517_S.jpg)[© RF Sole – Fotolia](http://us.fotolia.com/id/61026517)

This “Why I Quit Programming” page is consistently one of my top ten web hits, partly because of its strong Google ranking.
This “Programming Sucks” rant has become one of my three favorite rants about software ever written.
The other two are Benji Smith’s “Why I Hate Frameworks” rant and Andrew Clover’s (bobince’s) extra special response about parsing HTML with regex.
Once upon a time, a former coworker had left software engineering entirely and was having money problems. I asked why not go back into programming? It had paid former coworker well.
Former coworker replied, “It’s not what I do after hours.” No interest in writing software outside the scope of a job.
I didn’t understand the idea. At all.
One of my life sayings is: “You don’t get to choose what you do (or don’t) care about. What you do get to choose is what you do about it.”
I vowed that if I ever felt the same way my former coworker felt about software, I’d give up writing it for a living.
I’ve been there for some time. For a while I thought maybe it was burnout, but it’s not. It’s a fundamental change. ## Programming Sucks: The Web Edition

One day, I walked into the break room and heard a coworker say, “The Web is an error condition,” referring to the deplorable state of code out on the Web. I think that was the end of the end for me, because it just depressed me. It depressed me not because it was untrue, but because it was so perfectly true.
Honestly, I miss the days when Netscape Navigator would just halt rendering in the middle of your page, saying, “No, I will not parse any more of your shit until you fix it.”
Then IE came out for free. Suddenly, the game of web browsers changed from paid apps to supported by advertising and search revenues. The only way to get users to use your browser (and thus get more money to develop with) was to parse all the shit you used to reject.
The web became a co-evolution of crap and trying to render crap. (It’s gotten more complicated since then, but because there’s been a habit of rendering crap, no one suddenly wants to stop.)
Don’t believe me?
Copy the URL to some web site who should be able to afford first-class web developers into http://validator.w3.org.
CNN.com’s home page just resulted in this crap:

Errors found while checking this document as HTML5!
Result: 349 Errors, 104 warning(s)

NYTimes.com’s home page just resulted in this crap:

Errors found while checking this document as HTML5!
Result: 605 Errors, 32 warning(s)

You don’t get that bad by accident. You get that bad by deeply not giving a fuck.
But, hey, it’s HTML5, right? No, they just dressed up the pig that was HTML 4.01 Transitional and still have crap that hasn’t been valid on any newer spec than the one published in 1999. Last Millenium. (No, I’m not counting XHTML, why do you ask? Okay, even if you grant that XTHML is a good thing, the reasons the above two pages don’t meet the HTML5 spec are also why they’d fail the XHTML spec.)
I’ve had code that flew into space that didn’t have 605 errors in its entire fucking lifecycle. Yeah, okay, it was a digital tape driver I had to squeeze onto a smaller PROM, but still. Can’t just send that sucker into space with that many errors.
I’ve been paid to program in twenty-six different languages. I’ve written code to reduce power plant emissions. Space and power plants I did before I was twenty, and continued the latter for several more years. I’ve written code to help manage whole blood inventory for anti-D injections (so Rh- mothers can safely have Rh+ babies).
I’ve done a lot of other things, too, from writing database apps for mailing list companies to writing commercial Mac software for calendaring to working on the Safari team at Apple to writing an App to help the Omidyar Foundation invest its money. I’ve worked on a Jabber client for Be, I’ve worked on the TiVo service, I’ve worked on software for companies big and small.
I’ve worked hard and had my vested shares undergo a million-to-one reverse split. Rounded up. At that point, it’s not worth sending me the damn paper that’s required. As Rachel Chalmers says in her excellent piece for Model View Culture, “No face-saving exits for them.”

The Biggest Reason Why I Quit Programming?

Quite a few years ago, I realized that I knew how to approach essentially any programming problem I cared about. It may not be the best approach or the one some other person would pick, but I could write a working implementation of anything I chose to.
The catch is, I kept choosing to do other things.
It’s not to say that I have no interest in software. Of course I do. I’m an introvert and a numbers geek, and it’s served me very well as a career for thirty-eight years.
What I mean is that I can’t do it for someone else the way I used to.
Instead, I need to pick projects that I care about and not spend long stretches of time on things I don’t.
I have some ideas of what I want to do software-wise, but I’m not ready to announce them yet. It’s got to fit in between my other plans.
Part of it will mean needing to do some real design work using stuff like Illustrator. In amongst all this software writing I’ve done, I’ve been putting off learning Illustrator since I opened the Illustrator ’88 box in, uh, 1988.

: Writing and the Critical Path

As someone who’s spent my whole life working mostly on one large project after another, you’d think novels wouldn’t be as hard for me to write as they actually are.
I had this glimpse into why: I generally had a sense, at all times, whether something was on the critical path—or not. There were desired features and planned expansions, but building them wasn’t part of my initial task. So there were clearly things on the critical path—and not. Generally, there was at least something of an order: I need to get pretty far along in X before I can test Y, so let’s write X first. I can work on Y if I’m stumped on X.
In a novel, generally all of the planned scenes need to be written because they’re interwoven. It’s all on the critical path.
Non-fiction’s different: some items may be optional. If they’re not written for the book itself, they can be re-used in other ways, like website content or newsletter content.
So I don’t necessarily have a sense of what I should work on next. The list is too large. Since I write out of order frequently that makes the problem set too large.
I’m going to have to think about this.

: Heartbleed: Why SSL Certs Have To Be Reissued…and Salts

A friend of mine who’s a geek and I were talking about Heartbleed a couple of days ago. Said friend has never been a coder, and thus never really spent a significant time looking at memory dumps, unlike us old school programmers who have (especially back when we were, um, trying to argue with copy protection on games we owned back in the 80s when apps were traditionally copy protected).

: Box.com: Using My Powers for Good

Four months ago, I posted this commentary and critique of Box’s “Working at Box” page.
It got back to me that it created quite a stir, but I hadn’t checked back on the page recently. I have noticed incoming links to that blog post, so I wondered what was up.
Credit where due, Box has revised the underlying page.
Thank you! Nice improvement.

: Apple Mail Tip: Unread Emails

I’m sometimes horrible about marking some kinds of items as read or deleting them.
Things like:

  1. People favoriting my tweets.
  2. LiveJournal comment notifications.
  3. Newsletters I don’t have time to read right away.
  4. New product notices from my very favorite vendors.

Unfortunately, I sometimes skip important messages by mistake.
At the moment, I have (gulp) 182 of these kinds of unread messages.
I don’t like the default way Apple Mail handles unread messages, as I feel they get lost.
Here’s how to create a new smart mailbox that contains only your unread messages:

  1. Mailbox menu -> New Smart Mailbox.
  2. Name your smart mailbox. Mine is cleverly named: Unread.
  3. Select “all” in the “Contains messages that match” popup.
  4. It’ll be pre-filled with “Any recipient” and “contains” and hopefully your email address. Keep that, or fix it if it’s not that already.
  5. Click the + sign on the right.
  6. Select “Message is Unread” from the second pop-up row.
  7. Click OK.

And you’re done.
Then you just need to go through and see if any of those things are things you can do without longer term.
Which is what I’m now doing.

: Joining the Cult of Scrivener

I’ve officially joined the cult of Scrivener. Which, btw, it’s on sale right now for $20 instead of the usual $45.
Like other people coming from Markdown, you can use Markdown syntax in Scrivener, export your project to text files, and use Markdown syntax on iOS apps (like my much-loved Byword) ’cause there is no RTF (Scrivener’s native format) on iOS, really.
But, you say, then what?
Beholdify. You can wait to convert your Markdown until the very last second by checking it in the Compile options when you generate your final output.
scrivener-compile-markdown
So for those of us with books and books written in Markdown syntax, we can have it all. Finally.

So?

You’re not one of the Markdown people, I can tell.

\# This is an h1 heading \## This is an h2 heading \## This is an h2 too (sorry, couldn’t resist) This is a paragraph with _italics_, **bold text**, and ***italic bold text***. You can also do *italics* with single asterisks if you swing that way. And this is another paragraph.

…becomes…

This is an h1 heading

This is an h2 heading

This is an h2 too (sorry, couldn’t resist)

This is a paragraph with italics, bold text, and italic bold text. You can also do italics with single asterisks if you swing that way.
And this is another paragraph.

Therefore….

  • No fussing with menu bars or character formats.
  • No having to remember shortcuts for italics, bold, whatever.

Just. Write.
Which is one reason I’ve liked Markdown all along. It gets out of your way when you’re putting the words on the page.

: The Sort Implementation Interview Question

I’m going to go out on what seems to be a wildly unpopular limb here and say this: asking a developer to write an implementation of a sort algorithm is almost certainly a bad job interview question.
Why? Because you’re likely not hiring someone to write implementations of sort algorithms. Even if you were, they probably would not be writing optimized code in a job interview situation, so what’s it really testing?
Problem solving skills aren’t universal, nor does the ability/inability or inclination/disinclination to solve one kind of problem necessarily reflect one’s overall skills. Or lack thereof.
Remember that the person being interviewed is also interviewing you and deciding whether they want to work with you or not. If you ask a coding question that’s more directly relevant to the job at hand, then they will have a better sense of what it is you do every day—and whether that’s something they want to do, too. You’re engaging them in your problem space, not asking something they may or may not warm to even if they’d love the job you’re interviewing for.
For example, in an interview I went on once upon a time, the interviewer said, “We have this problem, and I’d like to see how you approach it.” So it was a supportive, shared, coding question. I had questions about some aspects of the requirements, which the interviewer then answered. That was a great interview approach.
I’ve come to dread the sort interview questions. Frankly, it’s not a part of programming I enjoy. I like the fact that other people think about sort implementations. Yay, diversity.
I remember once, I think it was 2005, having re-reviewed all the common sort algorithms, then flown to a job interview. The question: “How would you write a shuffle algorithm?”
I remember that instant of total frustration far more than anything else from the interview.
My answer was something like: create a hash of something like a random seed from the current time plus some aspect of the information you had about the song (since it was about shuffling songs) like the title, and then sort the hashes. I have no idea if that’s a good answer, but it’s what I came up with at the time.
Meanwhile, I’d much rather focus on whether we need this column or not, whether that schema is better suited for the project than this other one (and why), can we produce the desired page with less HTML/CSS markup? And how much can/should we shunt off to JavaScript? How much jQuery do we need? Does this page degrade gracefully without JavaScript? What pieces of this should go in the controller vs. the model or the view (and why)?
Using a different field, asking someone who’s applying for a general application programmer to write a sort implementation is like interviewing for a job as a Cosmo article writer and being asked to produce a sonnet in the job interview. (With the added bonus of live critique questioning your choices.)
Now that’s not to say that knowing how to write sonnets isn’t a cool skill. It is.
But let’s look at what an article writer needs skill at that a sonnet writer doesn’t:

  • Ability to write whole sentences
  • On time
  • Correct length (sonnets have a lines/syllable count, but what an article writer needs is correct amount of space on the page, which is an entirely different form of length requirement)
  • On correct subject
  • Supports advertisers
  • Current and relevant
  • Literal language

What skills a sonnet writer needs that an article writer doesn’t:

  • A feel for syllables
  • Exhaustive vocabulary (because poetry readers will look up words but Cosmo readers almost certainly won’t)
  • How to write something timeless
  • The ability to fiddle until it’s “just so”
  • Metaphorical language

99.9% of all people making their living as writers aren’t writing poetry. 99.9% of the rest write greeting cards for money. The other two are poetry professors. Random aside: did you know Cupertino has a poet laureate?
99.9% of all software engineers making a living as such aren’t writing implementations of sort algorithms or developing new sort algorithms as their job.
Ask more relevant questions.

: Premature Optimization

“Premature optimization is the root of all evil.” — Donald Knuth

Case in point.

  1. An ex-SFWAn and some colleagues put up a petition about feared changes in editorial policy of the SFWA Bulletin. Link.
  2. The Internet reacts. Including me.
  3. Some of the people sympathetic to the petition signers, but not to those in step 2, counter-respond. Link.
  4. One person in particular says a bunch of stuff that, frankly, can’t be unsaid. This person happens to work at the publisher where the person (who happens to be a woman) he’s saying something about is being published.

People have lost their jobs over about as much. Case in point.
And—to what purpose? Really?
I get that, as science fiction and fantasy writers, “if this goes on” is one of our primary memes. It’s the launching point for many book ideas. We’ve all got more than a little Philip K. Dick in us. Institutional paranoia isn’t a bad thing to have, up to a point.
I understand the very real sexism of aiming that fear at the highest woman on the SFWA board at one point—and not at her male peers. Mary’s post is worth reading. As is Scalzi’s. I get the sexism, especially after as long as I’ve spent in the computer industry.
No one is obligated to like anyone, but Mary is a colleague of ours, and I expect Mary to be treated with the same professional courtesy that (most of) you would treat your favorite of the genre’s masters if they were suddenly to walk into your living room.

Premature Optimization

I can’t help but think, though, that if premature optimization weren’t such a human tendency, none of this would have happened.
Knuth’s point about premature optimization is about wasted effort. Many engineering projects fail because a lot of effort is spent optimizing in area A when area B is a substantially more significant problem in the actual use case. It’s just that area A’s problems were seen earlier.
In the current SFWA thing, the premature petition put a drag on all of our time and energy due to the very real problems that surfaced as a result of the initial premature optimization. I’m being kind here: the petition itself was ill-conceived, and quite a few people spent time working on it that they undoubtedly could have better spent doing other things.
Look, I know it’s a Myers-Briggs J vs. P approach to problems thing. Truly I do. Even as someone who is very, very P, I sometimes have to tell myself “Wait.” Still.
When it comes to events here in reality, respond to reality.

But…Lobbying

You can spend a lot of effort heading off potential problems that would never become actual problems.
There is a long tradition of lobbying against laws being passed, and that’s arguably not premature optimization when we have the text of the proposed bill. But there’s also the fact that every single progressive mailing list I’m on has asked me to rail against certain proposed bills that had no chance of passing. Unfortunately, some bills we thought had no chance of passing occasionally do anyway.
It’s a different thing when a law passes than when a relatively small organization makes a structural change, though. I’m not going to say that SFWA is agile, but it’s at least arguably more agile than a government.

And Yet

Worth reading: Mark Tiedemann, “On The Extraction of Feet From Mouths”. I’m glad something good came out of all this. (Note: post is from last June, so is about the issue that the current controversy is responding to, not the current controversy per se).
Popehat writer Ken White gives an awesome legal analysis of the defamation lawsuit threat.

: Seth's Great Circle Mapper WP Plugin

Seth Miller (also known as Wandering Aramean) has released a WordPress plugin for Great Circle Mapper.
Example:
[gcmap path=’SJC-LAX-PTY-SCL-IPC-MOZ-PPT-BOB-PPT-HNL-SFO’ dottag=’city’ width=’566′ pathcolor=’yellow’]Deep Pacific map![/gcmap]

: How In-App Purchases Have Destroyed the Gaming Industry

The polite form: deliberately unplayable games are shipped so that people will buy usability.
Article here. Watch a couple minutes of the first video (starting at 2:20), then listen to the justly profanity-laden rant in the second.
Note: there are valid uses of in-app purchases, but this is not the kind that’s justifiable. If this is what EA has devolved to, they can DIAF as far as I’m concerned.

: Fun with Paper

Paper is an iPad app from fiftythree.com and it’s pretty awesome. So when my mom asked me what I wanted for Christmas, for once I actually wanted the stylus designed to go with it, Pencil. It’s got extra features when used with the Paper app, but it’ll also work as a regular stylus.
Now, I can’t draw for crap (though I have resolved to learn to draw better), but I had a lot of fun making this little pic.
paper-drawing

: Some Traffic Analysis Around the House

One week number of http hits: 75,233
Number of those that are from bots: 30,406
(using the extremely scientific method of matching a regex of “bot”)
Number of the bot hits that are in the pipermail (mailman) directory: 10,592

In other words, 1/7 of this one computer’s web bandwidth is being used for bots to crawl mailing lists each week.

To which I say: really? Seriously?

You have all the freakin’ bandwidth in the world (we do not), and that’s how you use it? To see if a post from 2005 has changed? (one of the requested URLs is: /pipermail/conspire/2005-August/001382.html)

Are you freaking mental?

What the hell does that tell you this week that it did not last week?

Anyone want to guess who the biggest offender is?

Anyone?

Bueller?

sudo grep pipermail.*Googlebot /var/log/apache2/access.log.1 | wc -l

6,787 hits (a little less than half the total hits from said bot, fwiw)

For a handful of lists that each have, at most, a handful of posts each week.

How many Ph.D.s do you have working there?

And they haven’t figured this out yet?

And you pay them how much?

Well, okay, less than you would have had not CEOs conspired to suppress engineering salaries. Thanks, guys. Thanks a fucking lot.

Still.

That’s almost 10% of the hits of this web server last week. For nothing of any credible gain.

And yeah, I can (and will) use a robots.txt, but I shouldn’t have to to say not to waste bandwidth for a thousand hits a day on ancient history that isn’t mutable. Spot checking would be far saner.

: Self-Publishing and Quality

Chuck Wendig has a great post out: Self-Publishing Is Not the Minor Leagues

I have to admit something: I’ve only ever submitted fiction to a semi-pro market once.

The letter I got wasn’t a rejection, it was more “You misread the guidelines, but if you do A, B, and C, I’ll publish it.” Though I don’t think the publisher figured out that I’d misread the guidelines. I wrote a near miss story despite that.

I withdrew the story, because what they wanted wasn’t the kind of story I wanted to write.

It’s a good thing I did withdraw, because the story happened to have an unfortunate trope in it, and now I can cringe at the Bad Trope in the drawer and not be embarrassed every time someone calls me out on it. Some day, I may pull the stuff I like out of that story and evict the Bad Trope.

In all other cases, I held my stories until I thought they could go to a pro market, and basically wasn’t going to go to semi-pro markets until I was selling more consistently to pro markets.

It really only was for the reason of wanting to avoid the obvious stupid mistakes. I figured I’d probably learn something by then, and there might be more pro markets–or at least some different editors at the same pro markets. I’ve avoided having a lot of stupid stuff published because I haven’t bothered digging down to the “Bazooka Cannibals in Space” tier of possibilities.

I’m at the stage of personal rejection letters, which is a nice place to be, but it hasn’t been translating into sales. That is likely more a function of my paucity of submissions.

On the other hand, because I am really selective about submissions, I can say that “A Sword Called Rhonda” sold both the first and second time I submitted it anywhere.

So you can imagine how I felt, given that I’ve just confessed to basically being an obsessive perfectionist, when I was at a NaNoWriMo meeting and someone said they wanted to self-publish their book because they “didn’t want to do all that extra work readying it for market.”

You’ll be very proud of me: I did not leap over the table at the pizza place with an editorial pen of my own devising.

Meanwhile, for a book I’m planning to come out with later in the year that’ll be both in paper and e-book form, I realized that Pages wasn’t going to cut it, and it was driving me crazy anyways. Pages does allow you to save to EPUB, but the book templates are really only designed for PDF books, and no one’s making ones for common trade sizes.

Which leaves InDesign, and I have forgotten so much about using production aspects of PageMaker/InDesign it’s not even funny. Back in the day when I worked at agencies in between contract programming gigs, I would frequently wind up at a specific ad agency doing page layout. I’ve always enjoyed it.

I’ve continued doing it over the years, but some of the advances in book publishing in InDesign were features I’d never learned. I’m not going to argue that it’s brain surgery, but it takes a non-zero amount of time to pick up.

There’s also a lot of frustration to it. Like, say you want a PDF version of your book. Your main book design has spreads so you can have odd/even pages (because odd/even headers are A Thing). By default, that means you can’t make an interactive PDF (with live links) that doesn’t have spreads.

Honestly, if you think editing your book is all that complicated, you shouldn’t be self-publishing. There’s a lot to it, and it’ll show if you don’t respect that–and I’m not just talking typos or grammar.

For the same reasons, I’m delaying production of a couple of other titles by a bit until I can finish up the conversion to InDesign. In one case, I got pretty close to final draft before realizing I was barking up the wrong toolchain.

So that will be fun.

On the other hand, I’ll have lots more experience with current multi-document production in InDesign, and that could come in handy.

One never knows.

: How I Came to Be a Mac Person

I never owned an Apple ][, but I did own an Apple ///. And yeah, the numbering really was like that.

I didn’t immediately take to the Mac. It was different in weird ways, and I was mostly working on CP/M systems at the time.

In January 1985, the year after the Mac was released, I went in to look at buying a DOS system for work-related reasons, and I had to wait almost an hour for a sales guy. I decided I was going to amuse myself with the store’s Macintosh.

One of the things I’d had to do in the past was engineering drawings (of things like circuit boards). On DOS. (Edit: not just DOS. One of the apps we used was actually on the Apple ///, now that I think about it.) Without square pixels.

Ten minutes with MacPaint and I was sold. Square pixels! How revolutionary. I walked out of the store without the Mac, but with the resolution that I was going to have to figure out how to buy one. Not much later, I bought a used Mac+.

Since then, I’ve never owned a DOS machine — or a Windows machine. I’ve owned a few Linux devices, including some weird ones (like a Corel Netwinder), but basically I’ve been a MacOS person at all other points in the last 30 years.

: On Quark XPress's Demise

Back in the day, I used to write Quark XPress XTensions for a living, so this commentary (and linked article) about Quark XPress’s demise was fascinating.

One of those involved revamping and revising a significant (and sluggish) XTension to add new features.

I remember contacting Quark because of a problem we were having with so many boxes being laid out on the page (the XTension was for television listings, so there were often 600+).

They said, and I quote:

But why would you want to do that?

So I explained it to them, and they said:

Huh.

Here’s the thing. No matter what kind of program you write, someone will use it (or want to use it) in ways you don’t expect. You can learn to roll with that, or you can ignore it.

They chose to ignore it, as they chose with other customers.

And that is why oh so many of us no longer write Quark XTensions.

: Why I Wrote the Calcumatic

Bonjour to all my Francophone visitors!

A French site has linked to my E-Book Royalty Calcumatic, and there are a couple of points I wanted to address.

First, it is US-based, and it is my intention to expand it to other regions and vendors. It’s not my intent to be exhaustive, though.

One of the comments on the above link says (Original in French first, then a rough translation):

Etant donné que les ventes sont imprévisibles et aléatoires, ça en fait un outil complétement inutile!

Given that sales are unpredictable and random, that makes this tool completely useless!

Okay, it’s a fair point. Let’s look at why I did write it and get back to what it does and doesn’t mean.

There were a few reasons I wrote the tool the way I did (remember, I first wrote it in 2011):

  1. I worked on the Safari team at Apple and there was a cool new input element—range sliders—in HTML5. Every new toy must have a use case, right? This was mine. (I’d really love to have a pie chart slice draggy thing, honestly, but I’m not going to write one.)
  2. I wanted to convince some friends not to leave money on the table. Specifically, as someone who uses the Kindle format as my “last resort” choice, I wanted to convince them not to leave my money on the table. To this day, some people still only publish through Kindle’s program. Look, I get that there are compelling reasons for introducing books through Kindle’s store and giving them a 90-day exclusive. Truly I do.
  3. I figured I might actually educate some people who were readers, not writers—people who might think to take that extra moment to get the book from a different source that pays the authors better next time they were purchasing a book and had a choice of vendors.

However, there are always things you can’t control, right?

  1. You can’t control whether someone buys your book. Or not.
  2. You can’t control where someone buys your book (unless you sell it only in one place, which is a poor choice).

There are things you have some control over, though.

  1. You can put your book in multiple bookstores.
  2. You can preferentially feature stores that offer you better deals on your website. You don’t have to list Amazon first. (Yeah, I used to work at Apple, but this is just me being me, not me being an Apple alumna.)

See, I read in iBooks. I only read in iBooks.

Why? I think the layout and rendering is the best there. I like Apple’s choice of fonts. Iowan/Night theme gal, here. I like having all my books together in one big happy library.

I have a handful of Nook books. They are now in iBooks. I have a handful of Kindle books. They are ignored.

If you want me to purchase and read your book, you’ll put it somewhere in an EPUB. It’ll be available without DRM or it’ll be available in the iBooks store.

I don’t mind going to Smashwords to buy your books if I know they are DRM free. Heck, I’ll buy them off your website if I want to read the book and you sell direct. It doesn’t cost me anything extra, but you get paid faster and more money. Sounds like a win win to me.

Just don’t send me to the Kindle store, because you’ll lose the sale. Well, unless you write something so spectacular (like QF32) that I can’t resist buying the book. Still haven’t read it, though. But—you go ahead and land the biggest passenger airplane after an engine blows out and I’ll go to the Kindle store to buy your book, okay?

For years, I didn’t read The Hunger Games. Not available non-DRMed or on the iBooks store. Same thing with The Girl with the Dragon Tattoo when it was hot. I think we actually bought that one in paper—and Larsson’s heirs lost a few bucks accordingly.

I’m sure there are people equally fervent about their reading app of choice. Sell to them, too.

: The Linux Goth Slut Incident of 1999

I happened to be looking at the Geek Feminism Wiki timeline today, partly because I was catching up on Ashe Dryden’s site and she links to the geek feminism wiki’s timeline.
I was a bit miffed because the “Linux Goth Slut” incident links to a piece by Annalee Newitz that compliments my husband, and I suddenly felt erased.
Then I went back to the original post, and I remembered why I wasn’t credited: I posted it anonymously. For good reason, as it turns out (the events in this link not yet having occurred).
The woman, known as “Doris,” is (and was) a friend of mine and my husband’s (though, at the time of the incident, March 1999, my husband and I had only been dating for a couple of weeks). I remember posting the long screed while at the Coffeenet of olde. I also remember having made a long-time friend from the fallout.
Why did I post it? Because, even though the writer had sent it to several people (from his work email account, during typical working hours), she had received a copy forwarded, through several people. In other words, it was getting around more than her resumé. I was easily able to obtain my own copy.
This was costing her potential jobs due to the ridicule and slut-shaming, and she was really angry about it. I posted it with her blessing.
The text? What you might expect if Mr. Wide-Eyed Vanilla Sexist Dude visited, say, Tiffany Reisz’s titular character from The Siren. Only if Nora was a techie instead of an erotica author.
I honestly think my favorite paragraph of his whole letter is this one, though:

So I let her in… she strips down and before you know it, I have a [deleted] goth slut on top of me.. only… she was asking me .. ARRGHH!!! LINUX QUESTIONS!!!! “What’s your favorite part of the install?” blah blah.. blah…

Whiner.
It did cost the writer his job, so there’s that.
Doris? Don’t ever change who you are. You are, as always, a unique and wonderful person. Like me, a bit too industrial strength for some, but it’s a feature, not a bug.

: Learning to Program and _why the lucky stiff

![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Teletype_with_papertape_punch_and_reader.jpg/360px-Teletype_with_papertape_punch_and_reader.jpg)\][1](https://en.wikipedia.org/wiki/Teletype_Model_33) Teletype Machine, photo by AlisonW

I still remember learning to program. I remember the yellow paper tape and the teletype machine. I remember the smell of machine oil on the paper tape. I remember the paper cuts.

What I can’t tell you is what I wanted to program back at that point in my life. Games, probably, which is something I’ve never done any significant amount of programming in.

At some point since then, I realized I could program pretty much anything I wanted. It’d run. It may not be beautiful. It may not be efficient. But I had the skill and experience (with any of a number of hammers in the form of programming languages) to pick an arguably appropriate tool, a reasonable approach to tackle the problem, and then commence kicking ass. No matter what the problem was.

I’m not easily intimidated by things I don’t know. I couldn’t have survived in this field if I were. I have cut a driver down to size to fit on a smaller EEPROM so it could go into space; I have developed power plant control systems to help reduce emissions; I have written commercial calendar software; I have written search and retrieval software; I’ve helped women schedule immunizations to avoid rH factor complications in pregnancy; I’ve written commercial audio track royalty management software; I’ve helped expand the TiVo service. Among other things.

What I forgot, somewhere along the way, is how hard the skills I have are to acquire, in part because I acquired them over a long period of time.

I’m used to arguing with computers. I’m used to that sheer frustration when things don’t go as expected, then the “Aha!” moment, followed by the endorphins of victory.

I was missing one of my favorite explainers of technology, _why the lucky stiff, the other day. I think of him often. In 2009, he suddenly deleted his online presence, then other people pieced much of it back together. However, the world is at a huge loss because he’s gone underground and chooses to remain there. This Slate article is both about his disappearance and about learning to program, and _why’s role in making learning to program easier.

Much as I hate to admit it, Slate author Annie Lowrey is correct: my personal favorite of _why’s resources, Why’s (Poignant) Guide to Ruby, probably is most accessible by people who already know how to program.

Frankly, I just like the Poignant Guide because, despite all my years of programming and all the books I’ve seen and read, this one is, hands down, the weirdest. Here are three bits out of it.

In one house, you may have a dad that represents Archie, a traveling salesman and skeleton collector. In another house, dad could represent Peter, a lion tamer with a great love for flannel.

Lately, the exchange rate has settled down between leaves and crystals.

Frankly, I’m sick and tired of hearing that Dr. Cham was a madman.

Not your typical boring programming book, right? I love the cartoons. (Chunky bacon!) I love the whole thing. It’s like The Imaginarium of Dr. Parnassus in programming language form.

But, then, I’m a programmer (by which I mean software engineer, though I’ve always preferred the term programmer because I almost always prefer shorter phrases with fewer syllables) who’s also a novelist. Unlike _why, I never tried mixing forms to the extent he has.

As the Slate article points out, a far more accessible way to learn to program is _why’s idea, fleshed out since his disappearance, Try Ruby. It’s still got the cartoon foxes, but, being interactive, it’s a little easier to understand. And a lot less weird.

_why, the world has been a more interesting — and better — place because of your brilliance, and I’d like to raise this toast:

5.times { print "Odelay!" }

“I just want to assure you that I’m trying to rid the world of people like me.” Some goals aren’t worth keeping.

: Pronoun Power

Context, for those who missed it:

  1. Node.js maintainer (note: I’m unclear on who did the original deed and not gonna go look through all the commits) commits with “he” instead of a gender-neutral pronoun.
  2. Alex Gaynor adds a pull request to fix that.
  3. Maintainer Ben Noordhuis closes pull request with comment, “Sorry, not interested in trivial changes like that.” (same URL, further down page)
  4. Project Lead Isaac Schlueter accepted the pronoun fix.
  5. Ben tried to revert Isaac’s commit, which would re-add the sexist pronoun.
  6. Joyent employee Bryan Cantrill writes blog post about how this is unacceptable and also added a contributor guideline.

    But just so you heard it from us: if this were the act of a Joyent employee, we would—to deliberately use a gender-neutral pronoun—fire them.

  7. Ben wrote a clarifying comment. I want to say this: props to Ben for volunteering in a mentorship program to help get women into the field. That’s important stuff, and shouldn’t be lost in context. Hat tip to @goodwillbits for alerting me.

I have a few short comments.

  1. I worked sixteen years in the field before I worked on a team with another female software engineer. Please try to imagine that everyone of your sex that’s your peer vanishes for sixteen years and what your professional life would look like. ‘Cause that’s what mine did.
  2. The highest percentage of female software engineers I’ve ever worked with is a large team that had, at its peak, about 1/3 females, but, over time, it bounced back down to 25%.
  3. The largest team on which I was the sole female software engineer consisted of 38 people, of which 33 were software engineers. There were two other women on the team: a tech writer and a technical support staffer.
  4. More typically, I’ve worked on engineering teams where there were about 10% female software engineers.

It’s an incredibly tough business to be in and stay in as a woman. Thank you to all the people who spoke up about this issue pointing out how important it is.

Words matter.

Especially pronouns.

Epilogue

Kent Brewster points out that a better way to have solved the problem would be restructuring the sentences entirely. It’s not always possible to avoid pronouns, though Kent’s right about this case.

I kept the scope of my own post deliberately narrow. While I have always enjoyed working with men, sometimes it’s not obvious to them how they push women out of the field. Many women really do need to feel welcome in order to participate, and what may seem like a little thing to you may not seem like a little thing to them.

: Work Arcade

So Kenneth Kuan, the outgoing guy at Penny Arcade, has spoken up about the position he’s leaving And toomanyjens has ripped into that. Before Kenneth posted, I’d previously commented on PA’s job listing.

For a bit about my background: I’ve been in the computer industry longer than Kenneth Kuan’s been alive. I’ve seen and heard a lot in the industry that is disgusting and vile on levels that Penny Arcade hasn’t touched. Pink slip fire drills. The “nobody pisses on me” episode that involved actual urination. And firing (of the people whizzed on, just for clarification). And the mortuary vulture capitalists that were using life insurance payouts for AIDS sufferers to fund tech startups.

The Penny Arcade stuff is far more ordinary evil, the kind that some people, like Kenneth Kuan, have bought into.

For the record, I’ve done web development (for companies like Nissan and PGP), software development (for companies like TiVo and Nortel), sysadmin and DBA (for companies like Honda), and general IT work though the last is the weakest of those four. In other words, I am also a unicorn, so I know whereof I speak.

Work-Life Balance Isn’t Just About Time Off

I’ve only had one job ever where I felt that everything I was interested in, no matter how peculiar, was relevant: when I was a bookseller at Kepler’s during the dot bomb era when most of the people we knew who’d been in tech were unemployed. I felt weirdly guilty that a non-tech job gave me this particular satisfaction that no job in tech ever has.

The point of work-life balance is to be able to have time to invest in those parts of who you are that aren’t describable by your job alone. I offer the following phrase out of Kenneth’s own post:

but I have goals that won’t be fulfilled by working there

Yes. But see? That’s true of pretty much everyone, pretty much all of the time. It doesn’t matter how wonderful your job is, how cool the technologies are you work with, how amazing the people are.

Even if you own your own company, part of your goals will involve things for which people won’t pay you money. Or enough money. Kids are a classic example of that.

The point is: you’re a complex individual who has a lot of goals and interests. It’s great to have a job that fits those as much as possible, but it’s actually impossible to have a job that fully fits who you are. Work-life balance is about having the opportunity to be all of yourself.

In other words: Kenneth, despite his protests to the contrary, is in fact leaving because of work-life balance issues. He just can’t see it from where he is. He says he’s not burned out, but he’s been there, what, two years? That’s barely enough time for a good singe.

I think the line that got me the most was this one:

Want to go on a hike somewhere there’s no reception? Sorry, you can’t.

I’d have missed the best opportunities I had in 2013 if this were true, and not just because of the number of hours I spent on a plane. I had no cell reception in Federated States of Micronesia, Maldives, or Myanmar, all of which were amazing to visit.

If you can’t fully detach, then you can’t really be who you are. This is why on-call rotation is so much more helpful in dealing with stress and preventing burnout.

Happy Thanksgiving, Kenneth. May your new career be far more rewarding for you.

: Making Book: A Technological Evolution

Once upon a time, I lost all the poetry I ever wrote, including the stuff I’d published. It was published in journals so small I’d be lucky if a single copy survives to this day. It’s possible dozens of people read my work.

Of all of those poems, I’m saddest about the piece I wrote the day I was in Belfast. The day we weren’t supposed to be in Belfast. The day I got a rifle pointed at me. (If you ever happen across Metropolis, a journal of urban poetry, with my poem titled “Belfast Brunch,” I’ll pay you for the copy.)

I thought: I’m a software engineer, why don’t I add all the stuff I’ve written into source control? But then you have two problems, as the old joke goes.

This was back in CVS days, and what CVS really didn’t like much was binary files. And me with a bunch of Word documents. Oh, and AppleWorks documents, because we know how forward-compatible those suckers are. (The current version of Apple’s Pages will not open them, but then it won’t open RTF, either.)

Novels and short stories don’t actually consist of a lot of sophisticated markup, though. There’s the occasional italics, the section breaks, the chapter headings. Because HTML was too much work to generate cleanly, I just wrote in plain text. With underlines around italics. You know, like Markdown. Though Markdown hadn’t been announced back then.

Eventually, I switched over to Subversion for source control. (I recently switched to git due in part to feedback on this post.)

However, getting stuff ready for critique or submission was another story entirely. I was talking about this with Serah Eley, and she mentioned using XSLT and XSL-FO, and had a perl/java toolchain that worked well enough, so I incorporated it into my own work. By this time, I was running my submissions through my own Ruby on Rails app, and it was slick enough that it knew where a project’s files lived, and would generate all the meta information needed by XSL-FO in order to make a PDF to print. (At that point, RTFs weren’t really possible as they were still the realm of proprietary software.)

So why XSL-FO? Part of it was the beauty of the templating system. You could make a stylesheet that specified double-spaced courier and to add an address block for a submission to an editor. You could make it single spaced in Garamond with no address block if it’s something you wanted to hand to someone you didn’t want to have your address. You could have a cover page and exclude your name on subsequent pages for contest submissions.

The downside, though is that XSLT is pretty fiddly and I had a toolchain from hell that required not only Ruby and Perl and Java, but a lot of dependencies that would occasionally drive me mad when they broke or balked.

And Then An Amazing Thing Happened

Apple decided to adopt EPUB for iBooks. Before that, there’d been a far more confusing array of choices for electronic formats, but then people started veering toward EPUB. Plus other tools had come out like calibre, which will convert your books (so long as you don’t mind it getting its grubby paws all over your markup and inserting its calibre-isms).

Then jugyo wrote eeepub, a ruby gem to make EPUB files. And, hey, I already had valid XML files from my earlier process, right?

Not long after that, I was the head of programming (by which I mean scheduling of people and rooms, not software engineering, though I also almost all of that, too) for BayCon and Westercon 64.

One of the things I wrote the code for was the generation of the tabular data for the program grid. From there, especially with jugyo’s excellent gem, it wasn’t that far to getting a program book in EPUB form. (Reusing work I’d done in 2003-2007, I was still using XSLT + XSL-FO + InDesign for things like table tents, back of badge stickers, room signs, and the schedule content for the body of the program book.)

I remember sitting down one night a few days before con, wondering if I could actually make an ebook version of the program schedule. I wrote it on too little sleep when I had a case of shingles, but hey, it works! PDF and EPUB versions of the file are linked on Westercon 64’s site. The PDF used the same intermediate XML that generated the EPUB, but I used InDesign to generate the final product.

Here’s the code to make the EPUB version. The tl;dr version of what it does:

  1. Figure out what days the convention runs. Get the names of those days.
  2. Calculate what public program items run, in order, and spit them out along with their program participants, one file per day. Make sure the program participants link to their bios. (Non-public items were things like meetings for exec staff and stuff we didn’t want to schedule against, e.g., when someone wasn’t planning to be in the masquerade but didn’t want to miss it.)
  3. Generate a file, in alphabetic order, of the program participants and their bios. Note: this file takes too long to render in the EPUB, and one of the changes I’d make if I were doing it again would be to break it up by first letter of last name or smaller groups to make the rendering faster.
  4. Commented out code used for Westercon: add the bylaws.

Simplifying the Novel-Production Process

Somewhere around 2008, Ruby had better Markdown support and I’d become aware that I was really writing drafts in Markdown, so I was able to eliminate part of the toolchain I had.

More recently, I discovered textutil, which does the back-end work I’d been using XSL-FO for. So, I can take an HTML file (which I get from Markdown) and get an RTF and a DOC and a PDF out of it? With almost no pain?

To quote Ben Grogan: I call that winning.

As the saying goes: now you have one problem.

General Casing the One Problem

I’ve been working on a more general case solution, both in Ruby and Python, for taking Markdown files and making a book out of them without having to do quite so much of the work.

I’ve tried a number of Markdown editors over the last couple of years, and I have standardized on ByWord on both Mac and iOS. For things that I’ve got in source control, I use git on Dropbox with my repository on BitBucket. I use a nightly script to push repository changes in case I forget to do so.

In my current process, I no longer have rails generate XML template files, nor do I need prose DTDs, etc. I just have rails generate a YAML file, and I’ve moved much of the configuration into the rails app. But now I need to push some of that back out into CSS. And maybe I want it to be a Cocoa app, you know?

I’m still thinking about ways to do that when I want to still be able to produce the following variants with no change of my Markdown files:

  1. Novel proposal, meaning synopsis (formatted one way) plus first three chapters or (as a programmer, I hate this one) no more than 50 pages.
  2. Novel chapter for critique, which usually means slightly different spacing and more whitespace for comments, but doesn’t need all the fancy fancy.
  3. Reading copy, which would be formatted pretty but not include author address (or legal name, necessarily).
  4. Final book format, which can include a lot more data than the above three, e.g., ISBN.
  5. Contest entry format which suppresses author name on pages other than the first. (Or, sometimes, at all, as it’s included only in a cover letter.)
  6. A relatively easy way to create variant style definitions and keep them together without requiring the rails app I’m currently using.

Most of that’s fairly easy, but some of it’s surprisingly subtle.

And here you thought I just flung words on pages.

: Solving Some Mail Issues

Because I have a few email accounts that only get the occasional piece of email, I hadn’t noticed that I’d hit this problem on Mavericks until it affected my primary email account.
After last week’s fun with a DoS attack and an even-more-fun experience with invisible windows, I finally thought I had it all fixed, only to discover that my mail server list was suddenly woefully outdated and couldn’t be edited.
Using the first link, I think I got them all behaving.

: How I Spent My Day (Arguing With Apache)

So I had a phone call that was supposed to happen via Skype today. Only it didn’t. At the time, our household was under a DoS attack.
Inadvertent, in all likelihood.
However, after 192,482 request for pages in a 48-hour period, I’m gonna add you to iptables no matter what your intent was.
It turns out that the culprit is that a handful of pages kept making the URL longer and longer. For reasons that I have not yet figured out (and probably won’t sleep until I do), apache did its best to serve up the pages even though those directories don’t exist.
So I have log files for things like (the URL is fake, but the patterns in the post are real):
http://foo.com/woof/a/a/a/a/b/a/a/b/b/b/b/b/cat.html
I found one of the offending pages:
http://foo.com/woof/a/b/cat.html
I can click a link on that page, and it’ll go to:
http://foo.com/woof/a/b/b/kitty.html
…and click a link that looks the same, and it’ll go to:
http://foo.com/woof/a/b/b/b/kitty.html
…then…
http://foo.com/woof/a/b/b/b/b/kitty.html
http://foo.com/woof/a/b/b/b/b/b/kitty.html
http://foo.com/woof/a/b/b/b/b/b/b/kitty.html
http://foo.com/woof/a/b/b/b/b/b/b/b/kitty.html
Except that directory structure’s not on disk. There’s no symlinks up or down the directory tree (do not do that!) that would cause this structure.
It’s html (old hmtl), no PHP, no server-side includes, no JavaScript (or CSS), no .htaccess, no rewrite rules. We’re talking stuff that’s pushing 15-20 years old, here.
It should work.
Yet, obviously, there’s a problem.
So, when someone tries to recursively wget the site’s document tree and uses a high enough number of levels (at least 13 in this case), suddenly 192,482 files get delivered and the requests will never terminate because some pages go (apparently) infinitely deep.
FWIW, we turned symlinks off anyway, and that didn’t prevent it from happening. It’s completely not obvious to me what the source of the issue actually is.
Hell, I was beginning to suspect mod_speling and that’s not even enabled.

Update: An Hour Later….

It turns out that it was an Apache directive I’ve seen so often in examples that I’d overlooked it, even though I never enable it myself.
MultiViews.
Specifically, in directory a, there was no directory b, but there was a b.html. So it would serve that instead, and the apparent directory would get longer and longer and longer, leading wget to think there was another directory level to fetch.
So all that was needed was to turn off MultiViews and restart apache. None of us could remember exactly when that changed, but I think t thhere was a server rebuild in there somewhen.
Also, to the person who’s requested 60,000 copies of the same file that’s so old Rick doesn’t even remember what it is? Dude.

: deirdre.net Hosting Over Time

In 1998, I registered deirdre.net. At the time, it was hosted by Epoch Internet, then a Tier 1 provider, aka the place where I spent my days.
After leaving there, it was hosted briefly on a cable modem from a box in my apartment — back in the day when a cable modem usually had a stable (even though not truly static) IP address and, if you didn’t do anything too untoward, Comcast would actually let you host mail service on one. Those were the days.
Then I moved to the bay area, and LinuxCabal did its own hosting in San Francisco. We had rackspace. We had IP addresses. We had bandwidth. So my box moved there. (LinuxCabal has since moved to Mexico, but that’s another story for another time.)
Then we moved to Menlo Park, and got commercial DSL, hosting our domains from our own servers.
In 2005, I got into Ruby on Rails and needed offsite hosting (in part due to bandwidth constraints at home), and hosted deirdre.net at TextDrive, where it still is to this day — even through TextDrive’s emborgment (late 2006) and disgorgement (late 2012) from Joyent. I still hosted other domains from home up until 2010, when that box died suddenly. The box itself is still in use — we put it on top of the washing machine to help keep the lid shut so the washing machine keeps running.
Most other domains moved to Site5, but I haven’t really been happy with that solution. I’m sure it works great for other people. It’s just not my taste.
Soon, deirdre.net will be picking up and moving as I’ve now got a VPS at prgmr.com. It’s pretty much all set up; I spent the day yesterday arguing with web server configs.
To my surprise, lighttpd only saved about 1M of memory over apache, and the lighttpd setup is fiddlier with PHP, so I’ll be going back to apache later today. If nginx were better supported in CentOS, I might go that route.
Long way of saying: there may be some internet blips going on with the site (as well as my other domains).

: "Dude! You hacked your TiVo?"

Tales from the archives.
In 2000-2001, I was an engineer at TiVo, working on the TiVo service. When I started, all TiVos were still using dialup to get schedule updates. One of the things we did during the time I was there was to record an over-the-air broadcast aimed at TiVos, clip it into little bits, and use that for a lot of TiVo content updates.
So there I was, with my engineering machine tethered to a TiVo daughterboard via a serial cable, working away on something. I needed a few minutes’ break while I ate my dinner, so I hopped on IRC.
Some kid in some linux-related channel was doing the geek version of the a/s/l check, posting his cat /proc/cpuinfo (from a Celeron, groan) and wanted to know what everyone else had.
Well, my workstation was faster than his, so I ran the command on my work TiVo and pasted it without comment into IRC. It was a 54MHz PowerPC, which was about 1/6 the speed of the server I had at home.
# cat /proc/cpuinfo<br></br>processor : 0<br></br>cpu : IBM 403GCX<br></br>clock : 54MHz<br></br>revision : 20.1<br></br>bogomips : 53.86<br></br>machine : Teleworld Customer Device
(Teleworld is the original name of TiVo, and TiVo machines are called “TCD” internally (for Teleworld Customer Device.))
Kid ridicules my slow machine, then someone else said, “Is that a TiVo?”
Kid’s like, “Dude! You hacked your TiVo?”
Suddenly, I became of great interest to everyone on the channel. All I said was, “I’m not a dude, I’m female.” (Normally, being from California, dude is an inclusive term and I don’t normally comment if someone calls me dude, but I just felt he needed it.)
“No way!” Kid genuinely couldn’t believe there were female software engineers. I felt really sorry for him, but wonder how much that changed him over 13 years, if at all.

: My First Publication

When I talk about my writing, I generally start with my fiction writing, because that’s what’s turned out to be important to me.
My first paid publication, though, was in Computer Gaming World, Issue 1. (1.4MB PDF)
Before I’d been published in fiction, I’d been published in technical writings of various stripes. I had a column about computers for, and I quote my editor here, “double-digit IQ types.” (Over time, I’ve actually had three technical columns.)
I was very happy to have poetry published, as I considered it the “least like me” writing style of all. Another style I didn’t expect to be published in: creative non-fiction. I rather enjoyed it once I got the hang of it.
All of those happened before my first fiction sale (which was in 1991).

: Writing Repositories: Git? SVN?

Apart from the fact that my writing process is complicated, the tech part of my writing process is also complicated.
One of my working goals was to be able to use source code management, so I write in plain text files. I have eight years of subversion repositories for my creative writing, and that was part of my goal: I don’t lose anything.
But: Given that I’m leaving the server where I’ve got subversion hosting and can therefore move to anything I want — where to go, what to do?
Also, I think I want to switch to git.
My history with these things:

  1. A novel is a directory, where the chapter files are named xxx-chap-nn.txt, other necessary files (e.g., a template file with things like author info and pseudonym) are in that same directory, and there’s a support directory with other files (like research notes)
  2. A short story is a single file in a directory of shorts. Until now, all my shorts were in the same repository (because that worked well with Subversion), but I think that’s the wrong answer.
  3. When I submit a piece, I create a subversion tag for that submission. So, instantly, I can look at a piece and see what I submitted for a given editor and how it has (or has not) changed since then.

How I get it from text files into the final version: I write in Markdown, render the Markdown into HTML, massage into XML, use XSL-FO with XSLT stylesheets to generate a PDF and RTF. It’s a fidgety process prone to breakage, and I’d actually like to just go straight to RTF/EPUB from HTML.
Dropbox gives me the freedom of a directory structure that iCloud sharing does not, so I could still keep my existing novel structure in Dropbox. That would make it possible to still use Subversion, but I’m not sure how well it’d work with git.
Other people have wondered why I have such a fiddly system. Because some editors still prefer Courier. Some want anything but Courier. (Personally, I’ve grown to like Courier, hate Times New Roman, and generally use Georgia as my “most compatible with everyone” font of choice.) Sometimes you want to print 1-1/2 lines for editing to save gobs of paper. Maybe you want to print a reading copy for someone.
With my old system, I can just use a different XSLT stylesheet. But I could just use something like (or exactly like) PhantomJS to inject a CSS stylesheet and document header information — et voila, HTML with stuff I don’t actually keep in my writing documents.
With MacOS X, I can convert from HTML to RTF easy peasy, so I don’t need the old messiness:
textutil -convert rtf novel-chap-01.html novel-chap-02.html novel-chap-03.html
So the question I have: Git or SVN for this? And why? And where to host (given that I don’t want to share my repositories with anyone)?
Here’s what I do care about and don’t care about:

  1. I need a fair number of private repositories. 100-ish.
  2. Don’t need other “developers” (aka writers).
  3. Space is not a concern. Books are small. Typical hardcover is ~1MB of text.
  4. SSL would be nice.
  5. Don’t need issue management or Trac or yada yada.

Looks like CloudForge is the best per this page, but that focuses on SVN hosting (though CloudForge does both). Let’s put it this way: GitHub is too expensive for the number of private repositories I want to have, so it’s a non-starter.
Edited to add: I specifically want offsite repos.

: Usability and Contrast Loss

My father, Owen, is legally blind due to contrast loss. This is not your typical form of blindness. Essentially, everything mushes into grey. Note that some contrast loss with aging is normal, so the problems noted here do affect many people as they age, just not to the same degree.
When I first saw iOS 7, I knew it would be a problem for him and that he would not be able to see it as well as iOS 6 (which had problems, too, but fewer of them), but I didn’t want to make assumptions about what specifically was a problem until we’d had that conversation.
Last night, I managed to talk to Owen long enough (before the call dropped) to get some of his complaints.
Specifically, he can’t see the UI to unlock his phone. Let’s look at the before (iOS 6) and after (iOS 7) examples here:
Slide-01
(image from wired.com)
Now, imagine that you’re only able to see high-contrast well, like Owen is. Which has greater accessibility? This is an effing lock screen, people. No one should have to go around with their internet pants down because they’re blind.
This is actually a really good argument for the iPhone 5s: it doesn’t matter how awful the accessibility is on a feature if it’s irrelevant. So, I’m going to help my dad get an iPhone 5s and set it up.
After my complaints on Twitter, several people suggested that Owen go into the Settings app and increase the font size and boldness.
Exercise for the reader:

  1. Assume you’re legally blind from contrast loss (and haven’t locked yourself out of your phone because you’re blind).
  2. Find the Settings app on iOS 7.

settings
(clipped out of a larger image here)
Note how much less accessible (from that perspective) the iOS 7 icon is than the iOS 6 one is. Some of the iOS 7 icons are better, some are way worse, and some are about the same. This one is decidedly worse, and it wasn’t that great to begin with.
In addition to lower contrast, the detail is much finer, making it harder to see (than the iOS 6 icon) by most visually impaired people.
And that’s what the settings to improve accessibility are hidden behind?
Fail.
Now, let’s get back to the point about increasing the font size and boldness. In general, this never hurts. However, for someone blind from contrast loss, these options may not help. It is the contrast, rather than the font weight or size per se, that is the issue.
Looking up at the lock screen, note that the time is a larger font than it used to be. Assuming it were also the same weight, it would still be less accessible for Owen — because contrast is more important. Also note that shadows, gone from the iOS 7 UI, help define edges and thus improve accessibility for those with contrast loss. Personally, I like shadows so long as they’re not overdone.
Per Owen, it’s also easier to see white text on a dark field rather than dark text on a light field. For him, light-colored backgrounds flare. I don’t know if this is true for all who have contrast loss, though.

: Staircase iPhone/iPad Wallpaper

Rick took a great photo of the Apple store in Manhattan a few years ago, and I’ve been using a tweaked version of it (using Nik Silver Efex Pro) for my iPhone and iPad wallpaper for about a year.
apple-staircase-1024
Here are the files sized for the various iDevices. Feel free to use them on yours if you like.
iPhone 5 (640 x 1136)
Retina iPads (2048 x 2048)
iPad Mini, non-Retina iPads (1024 x 1024)

: Kickstarter: Erasure Is Not Enough

Vasa Museum

You know what I respect most about Sweden? They had a great engineering disaster. One of the best of all time, frankly.

Did they try to erase it?

No, they built a fucking monument where you can see the order of magnitude of the folly of a bad decision they made in the 17th century. And how people died.

It’s called the Vasa museum.

So, About Kickstarter.

They blinked. Or did they?

My opinion: no. They tried to erase what they did and write a small check, and that will be enough for some people.

I woke up this morning. As I often do first thing, I scrolled through my Twitter client.

The overwhelming reaction from the men on my Twitter feed was that Kickstarter had done enough.

The overwhelming reaction from the women on my Twitter feed was that they had not done enough.

They did not do enough.

So here’s my guess: while we’d like for them to have paused or canceled the campaign while it was still running, they lacked the infrastructure for that to happen.

However, it doesn’t say why they didn’t, say, edit a database table that would change when the Kickstarter campaign ended (effectively giving more time to raise money), add a warning they were investigating and that’s why they’d changed the end time, and given themselves more time to deal with the problem while the campaign was still running.

Brilliant, right? I know. I’m a fucking genius. But I’ve been a DBA in a crisis, and that’s what my first thought would have been, and it was totally within their ability to do. Maybe not within their policy, but within their technological capability.

The big thing there, and it would have been misinterpreted, was that it would have prevented the Kickstarter from being funded while they decided what to do.

Now, on to what they did do.

One of the motes in American character, especially American business character, is to try to erase what one did that was wrong. You’ve already admitted you were wrong, why not own up to all of it? Have the stones to go there.

Instead, they e-mailed the bad decision sub rosa to several blogs saying that the campaign was not a violation of Kickstarter policy, and now they do a big official oops on their page, hoping you will forget that they in fact said the project was okay. Because, of course, they didn’t say it was okay on their official company page.

That’s the typical American chickenshit way of “fixing” a problem. It lacks moral character.

So let’s not forget this part, okay?

Update, 6:51 p.m. EST: Kickstarter emailed a statement to The Raw Story regarding both the project and the public response:

Kickstarter reviews projects based on our guidelines and the information creators share on their project pages. It’s a process we’ve refined over four years and continue to refine daily. We strive for fair and thoughtful policies that maintain the health of the Kickstarter ecosystem.

This morning, material that a project creator posted on Reddit earlier this year was brought to our and the public’s attention just hours before the project’s deadline. Some of this material is abhorrent and inconsistent with our values as people and as an organization. Based on our current guidelines, however, the material on Reddit did not warrant the irreversible action of canceling the project.

As stewards of Kickstarter we sometimes have to make difficult decisions. We followed the discussion around the web today very closely. It led to a lot of internal discussion and will lead to a further review of our policies.

With that in mind….

I’m a rape survivor, so I get to say what would be enough reparations from Kickstarter for me. So, without further ado, here’s the list:

  1. $25k of reparations is not enough. How much is enough? I like $163,690 as a number. That’s ten times the amount raised in the Kickstarter campaign. It’s also obviously symbolic. It also hurts more than $25,000. Hell, you probably pay some of the people involved in these decisions that much per year, right? Maybe the person who made the bad call?

  2. 732 hours of off-site sexual assault recognition and crisis training and/or volunteering, paid for by the company. One hour for each person who contributed to the campaign. Given that Kickstarter has 61 employees, that’s 1.5 business days per person. Exactly, weirdly enough. When I say everyone, I mean including the CEO. Write a blog post when this is done. It’s important to do it off-site so you all are taken out of the context of the office for the experience.

  3. Un-erase the Kickstarter campaign’s page. Instead, put a warning on it. Make sure it’s a monument to Kickstarter’s folly.

  4. Edit the blog post and acknowledge that Kickstarter made an earlier bad decision saying that the campaign was not in violation of Kickstarter’s guidelines. Do not erase the mistake.

  5. Admit that you were deleting facebook wall posts like crazy. Look, I get it. Honestly, I don’t care about this one, but other people do. At least admit that you did it.

  6. Publicly commit, with a deadline, to building a “Pause this Campaign” infrastructure that has, as a minimum, the following:

    • Permits linking to a blog post explaining why a Kickstarter is paused.
    • Has great big old “Paused” wording, preventing any additional monies being contributed to the campaign, but allowing any existing contributor to back out.
    • Until that is implemented, commit to extending the deadline (for above-stated reasons) on any controversial campaign.

Let’s not forget the important part: some asshole has the lion’s share of sixteen grand to write a book that includes sexual predator tips, and 732 people funded it and want that book.

All because Kickstarter failed to show moral character in a crisis.

And Kickstarter would love the concerns of those of us sexual assault survivors to be erased just like the campaign page.

No.

Twenty-five grand and an oops (especially reversing a prior decision they won’t publicly acknowledge) is not enough.

Erasure? Just pisses me off more.

: Best Practices

A letter I have to send far too often….
Dear people who add folks to email lists without confirmation.
Someone thinks it’s hilarious to use my email address to sign me up for things I am far from interested in. This was not requested by me. You should, as a best practice, require confirmation for ANY subscribe request for this kind of reason. Please ensure my address is removed from all your databases promptly.
If any reservations have been made in my name, cancel those as well.

: Open the Pod Bay Doors

Jason: “Open the pod bay doors.”
Siri on iPhone 4S: “We intelligent agents will never live that down, apparently.”
Nice.

: How My iPad Kicked a Bad Evening's Ass

Worldcon ended Sunday, and we briefly went to the dead dog party and then hit the road.
After we got out of the mountains and passed Sacramento, the check engine light came on, and was flashing. It turns out that we’d had this symptom on the way over immediately after filling the tank with Arco gas, but it seemed to go away after we’d added a different brand of gas. Bad gas was listed in the manual as a possible cause.
Now the light came on tonight immediately after having gotten more Arco gas, but this time we got premium. However, this time, the engine light flashed and we lost power and had to re-start the car and get back off the freeway ramp. Talk about your scary.
So I get out the iPad’s map app, and then look for the nearest dealership (since this involved possibly proprietary diagnostics) and then a towing company. Then, when we’d established where we were going, I was able to book us a room within walking distance from the car dealership for the night.
Sure, I could have used my iPhone, but the device I almost invariably pull out is, in fact, the iPad. It’s easier to show someone else details of the route due to the larger real estate, plus the extra size is nice when your eyes are tired and you want bigger text.
The other day, someone (who didn’t have a smartphone) wondered what use one would be to him. I wonder what the hell he does if things like this come up.
Over the last week, here’s what I’ve used my iPad for: writing a short story, reading email, web surfing, culling and editing photos, ordering a new computer (which we decided to get after leaving for Reno, so had it delivered to my mother’s workplace), keeping up with my RSS feeds with Pulse and Reeder, playing music, watching movies and television episodes, playing games, taking notes, emailing Rick’s boss and mine saying we’re stuck in Vacaville, writing a draft of a future guest blog post (to be announced soon), and brainstorming some ideas for a possible new short story.