Deirdre Saoirse Moen

Sounds Like Weird

Archive of posts with tag 'software'

: Scrivener Tips for Book Marketing

scrivener-marketing-tips
A while ago, I was about to change a cover for a book, and wanted to re-examine the Amazon keywords and the blurb to see if I could strengthen them.
I realized that, off the top of my head, I couldn’t remember exactly where I’d put that info for this particular book.
Then I realized: this stuff should go in Scrivener. You know, right along with the manuscript itself.

Add a Marketing Folder to Your Scrivener Project

Next to the Research folder, I created a Marketing folder.
What goes inside?

  • Blurbs
  • Amazon keywords (relevant only if you’re self publishing)
  • Any other marketing copy used
  • Relevant URLs (for where to buy the book)
  • Excerpts (for longer work)

Note that, apart from Amazon keywords, these work for traditionally published authors too. If you are publishing in multiple languages, it may make more sense to break out these files by language.
Speaking of which, other languages may also have substantially different covers. I wouldn’t keep these in the main language’s Scrivener document; instead, I have a directory on my hard drive for all the original image files (i.e., the Photoshop PSDs). I only put the current, final JPEG in Scrivener. Otherwise, the Scrivener documents become unmanageably large. Since I work on a MacBook Air with an SSD drive, it also allows me to store rarely-used resources on an external hard drive.
Also, it may make more sense to create a separate Scrivener project for each language if you’re self publishing.

Blurbs

This file’s not just for current versions of blurbs, but also for previous versions.
If you have A/B testing data for whether one blurb is more successful than another, you can also keep notes about that in the blurb file. (Personally, I use a spreadsheet for this, and I don’t keep the spreadsheet in the Scrivener project.)

Amazon Keywords

Amazon keywords are a dark art: without them, your book isn’t discoverable through organic search. I talk about KDSPY, an Amazon keyword research tool, here.
Once you’ve done your research, you’ll need a place to save your notes about that research as well as what your current keyword string is. And why.
Also, over time, market conditions change, and it’ll be easier to revisit how you might want to tweak your Amazon keywords if you can easily re-review why you made the choices you did before.

Other Marketing Copy

Long description, descriptions you’ve used on blog tours, etc. Anything that mixes it up and offers fresh takes.

Relevant URLs

Perhaps you’ve got a blog tour.
Perhaps your book’s available on 27 (or more!) different sites.
Sometimes it’s useful to have all that information handy. If I asked you what your Powell’s link was, how long would it take you to find that?

Excerpts

Especially if you’re doing a blog tour, you’ll want to have different excerpts for different sites. That way, people won’t be seeing the same old same old every time they go to read a different post about your new book.

Don’t Have Scrivener?

Scrivener’s regular price is $45, and it’s available for Mac and Windows. If you use both platforms, it’s worth noting that the Mac version is usually significantly ahead of the Windows version feature-wise.

Got Other Ideas?

What else would you put in your marketing folder for your writing projects?

: Update on Kindlegen and PNG Rendering

As an example of the classic “always ensure your software is updated” mantra, I had the latest kindlegen installed, but Scrivener was pointing to an older version of kindlegen I’d installed Somewhere Else.
The specific PNG rendering bug I showed was fixed in between those two versions.
All other points remain valid, though.
So, feel free to include PNGs in your Scrivener projects. You’ll get a nasty ugly background, but at least it’ll be one that doesn’t look like a bad frame freeze of a logo from an early episode of Soul Train.

: There's Bad Rendering, and There's Atrocity

So, having admittedly not gotten the memo about transparent PNG graphics on Kindles, I tossed a transparent PNG into my Scrivener project.
And compiled for Kindle, which meant massaging the whole thing through Kindlegen.
Et voila.
kindlegen-atrocity
What. The Actual. Fuck.
Compare with the PNG I added to the project:
duchess-title
I can kind of see what it’s doing: it’s creating a non-transparent background out of the nearest adjacent colors.

Transparent GIF: Also Nope

I thought, “Haha, well, there’s always GIF, right?”
Nope. Transparent GIF renders with a black background. Which, since I read with a black background, I thought I’d won the internet at first. Then I switched to a white background. Oops.

So What Are Your Options, Then?

JPEG, which has no transparent background, is probably your best bet if you want to stick with images. Generally, a JPEG file will be smaller than a PNG anyway.
Catch is, most e-reader apps offer: white background, black background, and some ivory background. There is no standardization, however. One app’s white may not be another’s.
So my recommendation for that would be to look at using a background color that permits high contrast (for the non-color e-ink devices) but still looks good on white, black, and sepia. A pale warm grey, for example.
Your other option is not to use an image at all for Kindles.

But If I Don’t Use an Image on Kindles….

Yes, that’s exactly right. Your compile process will be more complicated.
So let’s look at the workaround for, say, an image title on the book’s title page.

  1. Duplicate your front matter folder (or document; some people put most of the typical front matter at the back).
  2. Edit the Title so that the non-Kindle version uses an image. (Yes, you could also make a different image for Kindle, that works too.)

EPUB Title Page

epub-title-page

Kindle Title Page

kindle-title-page

Compilation Step

For Kindle, select the Kindle frontmatter folder:
kindle-compile
And for EPUB, the EPUB frontmatter folder:
epub-compile

But…Complicated!

In an ideal world, you’d have a backmatter folder for each different market, too, but I’ll go into that at a later time.

One More Tip

If you keep the names of certain files the same across multiple projects, e.g., your interior title pics always have the same filenames, then you can save those compile settings once and use them across multiple projects.
Not so complicated after all, right?

: 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?

: False Assumptions About Names

I loved this article about names four years ago, and it continues to be relevant.
There are entire novels in the comments.
As someone whose name is frequently misparsed (my name is “Saoirse Moen, Deirdre” not “Moen,Deirdre,Saoirse”), I feel their pain.
Yes, the article is written for programmers, but it’s still useful for writers. We all carry assumptions about names.
Offhand, I can’t remember what language it was that someone filed a bug about where they had to use a non-Unicode font. Even Dhivehi/Thaana was added to Unicode in 1999, and that’s a pretty obscure script. (pic) I just remember being pretty impressed that there were still living languages where that was the case.

: Apple Discontinuing Aperture

Daring Fireball comments on it.
Aperture and I have had a difficult friendship. I migrated from iPhoto to Aperture after I started at Apple. But, since leaving Apple, I’ve been wondering if I should move to Adobe’s Lightroom.
The split’s about 50/50 from the people I know who are serious photographers.
Part of my dislike stems from how Aperture handles larger libraries (even though mine isn’t super large) and how it handles multiple libraries plus iCloud syncing (badly would be a good word for it).
I need to research whether to jump ship before Photos ships—or not. Or keep Photos for the kinds of stuff I still use iPhoto for (a very limited subset), plus iCloud stuff, and Lightroom for other stuff.
Or something.
Also: the Photos slogan?

Every photo you take.
On all your devices.

My film scans of medium format are 150mb each, frequently. So that doesn’t sound practical.

: 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).

: Why IRC Still Rocks After All These Years

Slowly becoming less of a fan of HipChat, it’s really no better than IRC with a proper client. –Matt Jarjoura

When I first looked at HipChat, I laughed. It looks, well, so 90s. Basically, it’s a revamp of IRC, where “revamp” means “we will charge you for it.”
The only reason you should pay money to them is one of the following:

  1. You don’t know how to set up an IRC server on some spare piece of office equipment and can’t be bothered to find anyone to help you.
  2. You need some obscure feature that’s not available on IRC or any of its addons.

Yep, that’s about it.
Essentially, HipChat and its ilk assume that you’ve never heard of IRC and are willing to pay to have private-ish conversations. They will never be as private as running your own IRC server.
If you don’t need that, you can get a dedicated channel on other servers, mark it private, invite people you want, and ban them if their status ever changes.

Why IRC Rocks

  1. The larger IRC networks are distributed, meaning everyone connects to a server closer to them. This does lead to netsplits, but it means that people can continue on even where one of the servers are down. In that sense, it’s designed like the Internet was intended: no single point of failure.
  2. IRC servers can be private. I’ve used them at several firms.
  3. You can do a seminar-style by making the channel moderated and requiring people to private message questions. Advantage of this format for the listeners is that they can private message each other, which many substitute chat types do not offer.
  4. You can make channels private.
  5. On most IRC networks, you can define a list of who’s an op (who has privilege to allow/disallow people on the channel), who can speak when the channel is moderated, and set those privileges so they persist without anyone on the channel. (And then there’s classic EFnet, which at least used to do none of these things.)
  6. IRC is extremely low bandwidth and fault tolerant. It assumes bad and slow connections. I have been in situations where no-image web pages wouldn’t load, email wouldn’t load, but IRC worked just fine. (Especially on ships using satellite internet.)
  7. Every operating system, even those without any graphical interfaces, still in use has at least one IRC client. Got an old Timex Sinclair?
  8. The biggest thing HipChat offers that IRC doesn’t typically out of the box is chat history, but there are even approaches for that using channel bots.

For Mac and iOS users, the best IRC software is Colloquy.

: The Amount of Time it Takes

Just for the record, the amount of time it takes from the time someone decides to to use a new pseudonym to:

  1. Google the potential problems with the name, then register the variant that’s the most promising.
  2. Wait for DNS to propagate.
  3. Find a theme for a landing page site template.
  4. Upload the bare bones to the writer’s server of choice.
  5. Find the right stock art and fonts for the right look. Requires searching five different sites, but you think you nailed it for not just the one book, but the planned series.
  6. Start setting up the email accounts. This needs another round of DNS propagation for reasons you never have figured out, and it’s two in the morning already.
  7. Restart Apache. Whoops.
  8. Web server down! No………..
  9. Obligatory teeth gnashing step.
  10. Oh, that’s why. Doh.
  11. Web server running again. Phew.
  12. Design the book cover from scratch. Fuss with it a few times.
  13. Hack and saw the web site template into something resembling what you need right now.
  14. Verify that the email accounts now work. Woohoo!
  15. Hack and saw the background image that isn’t as perfect as you thought it was. What’s that jaggy edge? Ewww.
  16. Write all the copy for the web page.
  17. Have the author sign up for Twitter.
  18. Have the author sign up for Smashwords.
  19. Figure out how you broke the author’s web site’s layout. Twice.
  20. Fix it, declare victory!

…eight hours have passed. And $35 or so ($15 for domain, $12 for landing page template, $8 for art).
Just in case you’re ever inspired to, you know, do the same.
I can has nap nao?

: Two More Scrivener Tip Posts

I’ve been writing so much the last couple of days I’d almost forgotten about my little demo project to show how to produce different e-books by vendor. (Why? So your Amazon version has Amazon-specific links, etc.) I should have that done this week.
Jacey Bedford has an awesome tip about keeping character viewpoints in order. Which now makes me want to add that tip into the sample project.
Diane Patterson has an awesome tip about how to easily keep track of new characters or add new information to existing characters’ sheets. This will save you a ton of time later and will help your copy editor (if your copy editor is doing your consistency editing). If you’re writing a series, it’ll not only help your copy editor, it’ll help save your sanity.
Jacey and I posted because of Jaine Fenn, who’s recently joined us on the Scrivener side. Also, Jaine’s book, Queen of Nowhere is Hugo-eligible this year. Which, I’ve been catching up with Jaine, so perhaps I should resort to reading out of order at this point.

: 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.

: Interesting WordPress Spam-by-Proxy Today

Today, I got one of the classic spammy kinds of comments with English words that don’t make sense when strung together.

I am this is on the list of a great deal important information in my situation.

One of these days, I’m going to get one with the words in the sentence alphabetized, and it’ll make me laugh.
However, what was different about this one is that it didn’t link to a spam domain.
Instead, it linked to a forum profile at an educational site (major university in this case), and that forum happened to show a user’s URL to everyone. The linked site was a spam site. The educational forum allows registration from anyone. (For obvious reasons, I’m not listing the link.)
So, just be aware when you get a comment on your blog, even if the linked site appears to be legitimate, it may be just spam-by-proxy.

: 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.

: 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.

: 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.

: 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.

: 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.