summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile25
-rw-r--r--ambush.mdwn51
-rw-r--r--announcement.mdwn114
-rw-r--r--arrest.mdwn271
-rw-r--r--assault.mdwn10
-rw-r--r--audit.mdwn361
-rw-r--r--characters.mdwn28
-rw-r--r--conflict.mdwn51
-rw-r--r--devcont.mdwn361
-rw-r--r--devsetup.mdwn87
-rw-r--r--draft.tex3
-rwxr-xr-xgit-mtime.sh11
-rw-r--r--index.mdwn60
-rw-r--r--negotiation.mdwn40
-rw-r--r--newhardware.mdwn41
-rw-r--r--noir.epubbin0 -> 78837 bytes
-rw-r--r--noir.mobibin0 -> 118763 bytes
-rw-r--r--noir.pdfbin0 -> 760337 bytes
-rw-r--r--preamble.mdwn23
-rw-r--r--style.css177
-rw-r--r--templates/archivepage.tmpl19
-rw-r--r--templates/atomitem.tmpl49
-rw-r--r--templates/atompage.tmpl39
-rw-r--r--templates/feedlink.tmpl8
-rw-r--r--templates/inlinepage.tmpl78
-rw-r--r--templates/page.tmpl52
-rw-r--r--templates/rssitem.tmpl28
-rw-r--r--templates/rsspage.tmpl18
-rw-r--r--templates/titlepage.tmpl7
29 files changed, 1686 insertions, 326 deletions
diff --git a/Makefile b/Makefile
index d7beabd..24b085b 100644
--- a/Makefile
+++ b/Makefile
@@ -4,28 +4,47 @@ chapters = \
conflict.mdwn \
newhardware.mdwn \
assault.mdwn \
- ambush.mdwn
+ ambush.mdwn \
+ arrest.mdwn \
+ devcont.mdwn \
+ announcement.mdwn
shorts = \
origin.mdwn
-all: noir.pdf noir.epub noir.mobi count
+all: noir.pdf noir-copyedit.pdf noir.epub noir.mobi count
noir.pdf: preamble.mdwn $(chapters)
pandoc -o noir.pdf \
--pdf-engine=xelatex \
--template=template.tex \
+ --toc \
-Vlogo=noir_1000px.png \
-Vauthorpic=liw-1000px.jpg \
-Vdocumentclass:book \
-Vfontsize:12pt \
- -Vmainfont:FreeSerif \
-Vgeometry:a4paper \
-Vmainfont:FreeSerif \
-Vsansfont:FreeSans \
-Vmonofont:FreeMonoBold \
preamble.mdwn $(chapters)
+noir-copyedit.pdf: preamble.mdwn $(chapters)
+ pandoc -o noir-copyedit.pdf \
+ --pdf-engine=xelatex \
+ --template=template.tex \
+ --include-in-header=draft.tex \
+ --toc \
+ -Vlogo=noir_1000px.png \
+ -Vauthorpic=liw-1000px.jpg \
+ -Vdocumentclass:book \
+ -Vfontsize:12pt \
+ -Vgeometry:a4paper \
+ -Vmainfont:FreeMono \
+ -Vsansfont:FreeMono \
+ -Vmonofont:FreeMonoBold \
+ preamble.mdwn $(chapters)
+
noir.epub: preamble.mdwn $(chapters)
pandoc -o noir.epub --toc preamble.mdwn $(chapters)
diff --git a/ambush.mdwn b/ambush.mdwn
index 6ae2655..dbc1f09 100644
--- a/ambush.mdwn
+++ b/ambush.mdwn
@@ -1,7 +1,7 @@
-# Ambush meeting
+# Ambush
"Hmmm." Anna is at her desktop computer and stares at one its 30"
-screens for several minutes. When the screen starts to dim to indicate
+screens intently for several minutes. When the screen starts to dim to indicate
that the screen saver is about to take over, she taps the control key
to stop it, then Alt-TABs to the IRC window. "everyone, we've some
news from SH, seems they've been sold and Lasse is being replaced, we
@@ -14,7 +14,7 @@ discuss. I'll order pizza for everyone."
The Team starts saying "got it, reading now", one by one. Good,
everyone's awake and she doesn't need to rouse anyone from hack mode.
-She orders pizza from their usual place, the usual selection, with
+She orders pizza from their usual place, the usual selection, with the usual
drinks. After about half an hour the delivery arrives, and she carries
it to the kitchen. Everyone else starts gathering there.
@@ -97,7 +97,7 @@ up and takes over.
"While Paul gets my laptop to work, I'll start. My background is a
management consultant, and I don't really know much about the
-technology this company uses." Antero giggles briefly.
+technology this company uses." Antero laughs briefly.
"I started at SmartHome three weeks ago and have been getting up to
speed on things. Today is all about me getting up to speed with the
@@ -150,7 +150,7 @@ overview. I've not prepared a presentation, since one wasn't indicated
in the agenda, so this will be brief and ad libbed."
"Don't worry, Anna. This is not an audit or any kind of attack on you
-and your people." Antero keeps rubbing his hands together.
+and your people." Antero keeps rubbing his hands together and laughs.
"Very well. What we in the Team have is a customisable software
platform for building the kinds of IoT systems that SmartHome's
@@ -227,7 +227,7 @@ comment?" Anders sniggers quietly.
Anna is silent and motionless, but it's clear she's suppressing strong
emotions. After a few seconds, she looks at Robin, who nods. "I'm
afraid I don't want to comment. This is now a hostile situation.
-You've ambushed us, and expect us to defend ourselves against an
+You've ambushed us, and expect us to defend ourselves against a surprise
attack. We're not prepared to work with a client that does this. Our
contract has a clause for this eventuality, and it means we terminate
our involvement in the project as of this moment. We'll be sending you
@@ -248,7 +248,8 @@ the first to speak. "Well, that was fun. What do we now?"
Andy's head snaps toward Bert. "What do you think? We lost our only
client, we panic and go bankrupt."
-Nina grunts. "Maybe we can find something else, quickly enough."
+Nina grunts. "Maybe we can find something else, quickly enough. Also,
+the money SmarHome owes us for the work we did should help a little."
Robin sighs deeply, and holds her mug in both hands, but says
nothing. Anna knocks her knuckles on the table. "OK, everyone. I would
@@ -275,7 +276,8 @@ happen to us now."
Robin nods. "We'll have to find other income. But make no mistake, if
we'd caved under, things would have gotten worse. I've seen that
-happen enough times. Giving in to bullies only gets you beat up."
+happen enough times. Giving in to bullies only gets you to continue to
+be beat up."
The room goes quiet. Anna clears her throat. "I agree with Robin. Does
anyone want to say anything else?" She waits for a moment. "Very well.
@@ -369,7 +371,7 @@ you more."
"OK. I understand." Nina speaks quietly, sounding like a small girl on
the verge of crying.
-The man throws her the side. She falls to the ground, and cries out in
+The man throws her to the side. She falls to the ground, and cries out in
pain. The man leaves.
-----------------------------------------------------------------------------
@@ -382,16 +384,16 @@ and taps a message to Nick. "Thanks for telling me. Best if we don't
meet in public for a while. Going to have to process this. Your
employer is now officially a RUDE WORD poophead." She taps "send" and
puts the phone away again. She picks up the ball and starts throwing
-and catching it again.
+it up and catching it again.
The room goes darker, as the sun sets. Nina gets up and goes rummage
in her bedroom closet. She throws some clothing onto the bed: a pair
of black cargo pants, black socks, a black t-shirt with no printing, a
-black army sweater, and some other things, all black. She goes into
+black army sweater. She goes into
another room and rummages in a cupboard. She pulls out a black
military style backpack, and puts a multi-tool, some cables, and a
-roll of duct tape into the backpack. She takes out a black, unmarked
-laptop, not her usual one, and checks that its' battery is fully
+roll of duct tape, black, into the backpack. She takes out a black
+laptop with no stickers, not her usual one, and checks that its' battery is fully
charged. She puts it into the backpack.
She goes into her living room, and starts a program on her desktop
@@ -403,24 +405,23 @@ She goes back into the bedroom, and changes clothes. She puts on a
black bomber jacket, and black baseball cap. She puts her keys into a
jacket pocket. She dons the backpack, and leaves.
-Outside, she goes into a nearby park, and goes to where a forest
-starts. She looks around for a bit, and finds a rock the size of a gym
-ball. She wrestles it aside, revealing a small box with a combination
-lock. She opens the box, which seems to contain some USB drives, some
-cash, various credit card sized items, and what looks like a passport.
-She takes a USB drive and several credit cards that are all green with
-concentric rings as decoration, and puts her home keys into the box.
-She closes the box, locking it, and puts back. She wrestles the rock
-back into place, hiding the lock-box.
+Outside, she goes into a nearby park, and goes to where the adjoining
+forest starts. She looks around for a bit, and finds a rock the size
+of a gym ball. She wrestles it aside, revealing a small box with a
+combination lock. She opens the box, which contains USB drives, cash,
+and what looks like a passport. She takes a USB drive and several
+travel cards for public transportation. She closes the box, locks it,
+and puts back. She wrestles the rock back into place, hiding the
+lock-box.
She pulls her cap lower onto her eyes, and starts walking through the
park, via a little-used path through the forest. Some distance away
there are teenagers being noisy, and someone walking a barking dog,
but she doesn't meet anyone. After a long walk she exits the park on
-the opposite side of her home. She's walked several kilometers, not
+the opposite side of where her home is. She's walked several kilometers, not
her usual route when leaving home, and it's getting quite dark.
-She comes to a bus station. Soon a bus arrives, and she boards it. She
+She comes to a bus stop. Soon a bus arrives, and she boards it. She
shows the green credit card to the travel card reader to pay for the
bus ride. She looks down on the floor, hiding her face from the
driver. The bus is almost empty so she picks a seat near the exit
@@ -476,7 +477,7 @@ He's handcuffed. "What proof do you have?"
Anna's phone makes a noise. She's at home, and is woken up by the
phone. "Uh, Anna here?"
-"It's Sam. There's been a development. Big changes this morning."
+"It's Sam. There's been a development. Big things happening this morning."
"What's up? It's too early for me. I didn't get to bed until late."
diff --git a/announcement.mdwn b/announcement.mdwn
new file mode 100644
index 0000000..e2f2eb3
--- /dev/null
+++ b/announcement.mdwn
@@ -0,0 +1,114 @@
+# Announcement
+
+Some weeks later, Anna is in her office, typing. "Good news. Sam just
+emailed me that the initial responses from big resellers on the new
+product version are quite positive. The first actual reviews in blogs
+and the press are expected in a week or two. The first impression
+reports are all good."
+
+She adjusts her sitting position. "Sam invites us all to a celebration
+of the product launch tomorrow and also a retrospective discussion of
+the project. I need to go, but it's optional for everyone else. Who
+wants to join? Let me know by tomorrow lunch time, and I'll let Sam
+know who're coming."
+
+Anna keyboard away, and stands up. Robin knocks on her door jamb.
+"How're things?"
+
+"Did you see what I said on IRC just now?" Anna takes her big tea mug
+from her desk and starts walking towards the door. Robin takes a step
+back.
+
+"Yeah. I guess I'm. Hopefully it won't be another ambush."
+
+Anna shakes her head as they walk together to the kitchen. "No reason
+why it would be. But if it is, that'll be the end of our relationship
+with SH."
+
+"Yeah. I don't think we can take another crisis. Not even if the last
+several weeks have been smooth."
+
+Anna fills the kettle with fresh, cold water. "Exactly. Our bruises
+are still visible. But we can have some bubbly and some cake, if
+nothing else."
+
+-----------------------------------------------------------------------------
+
+The open kitchen and lounge area of the Smart Home office is crowded.
+People are talking, not loudly, but enough that the general impression
+is a cacophony. People are standing in groups of a few people, holding
+champagne flutes and small paper plates with cake, trying to drink,
+eat, talk, and not drop anything.
+
+Sam hits his glass with a metal spoon. "Hear me, hear me! It time for
+a speech." Soon the hubbub quiets down. Sam moves to the side of the
+room with a projector screen that everyone can see.
+
+"We're here to celebrate a successful product launch. Does everyone
+have something to drink? Go ahead and get something, I'm going to
+propose a toast in a moment."
+
+Several people shuffle to the kitchen counter, where a couple of
+bottles of champagne are standing next to a half-eaten cake. Sam
+continues talking.
+
+"This is an unusually important product launch for us. You all know
+that. Even though a year ago we were reluctant to admit it, we were in
+deep trouble. The version of our product back then was not in great
+shape. If the launch of this week had not gone well, we would not be
+celebrating. I've spoken with our primary venture capital investors
+earlier today, and they said they were ready to pull the plug if
+this launch didn't go well. But it did! They're not pulling the plug
+on us. In fact, they're talking about wanting us to do another round
+of investment so that we can grow fast again. Cheers!" Sam raises his
+glass and takes a sip.
+
+Everyone applauds, raises their glass, and takes a sip.
+
+"I am not ashamed to admit that we could not have done it without the
+Team! Despite some friction, we all worked together to build a great
+product. To the Team!" Sam raises his glass again and takes a sip.
+
+There's a short hesitation, but then applause and glasses raises and
+champagne is sipped.
+
+Anna walks next to Sam and looks at the crowd. "On behalf of the Team,
+I also wish to make a toast. Like Sam said, we worked together, and we
+built something. Hopefully we can work again in the future. To the
+Smart Home 3000 system!" She raises her glass and takes a sip. There's
+applause and glasses are emptied.
+
+Sam raises his hand. The noise abates. "In other news. There's news
+about Antero as well. The police have finished the investigation and
+the public prosecutor has indicted Antero for fraud. The police say
+there is hard evidence for fraud. It seems Antero has been lining his
+own pockets for years at several companies and would have done that at
+Smart Home as well, but did not have time for that. As it stands, the
+prosecutor is asking for five years in prison."
+
+Someone claps a few times, but then goes silent. It's an embarrassed
+silence.
+
+"The police have also concluded that there was no breach of Smart Home
+office network and that either Antero accidentally printed out all the
+incriminating documents or there was a freak malfunction somewhere."
+
+A shout is heard. "Yeah! That's what I've been saying all the time."
+It's the head office IT person. "There's no way our office network
+could be breached. We have good security. I set up the firewall
+myself."
+
+-----------------------------------------------------------------------------
+
+The Team has gathered in the kitchen in their own office. Robin sits
+in a chair and has her feet on the kitchen table. Other people are
+sitting or standing. Everyone has a tumbler with some brown liquid.
+There's a bottle of expensive whiskey on the table.
+
+"RUDE WORD I'm glad to be rid of that bunch." Robin takes a gulp and
+makes a grimace, then coughs. "My, that's a bit strong."
+
+Anna leans backwards against the wall. "I'm glad the project is over.
+I hope we don't need to work with them again, I do, but I tried to
+leave that bridge intact. No point in destroying it in case we
+desperately need a client again."
diff --git a/arrest.mdwn b/arrest.mdwn
new file mode 100644
index 0000000..a5c3295
--- /dev/null
+++ b/arrest.mdwn
@@ -0,0 +1,271 @@
+# Arrest
+
+Anna knocks on the kitchen table. "We're agreed then. Given Antero is
+out and Sam is in charge, we can void the termination of the contract
+and continue working as if the ambush meeting never happened. Good.
+I'll let Sam know at once."
+
+She goes to her own office, and dials on her phone. "Hi, Sam, we've
+discussed the situation. We're happy to cancel the termination of our
+contract, and continue as if nothing had happened. Is that OK with
+you?"
+
+"Yes! Thank you."
+
+"However, I'm sure you'll understand if we will find it hard to
+collaborate with Anders in the future. We feel he destroyed any trust
+we had in him. When it comes to technical things, he's good, we agree
+with that, but without mutual trust there's no basis for working
+together."
+
+"I understand. I'm afraid I don't have a legal basis to fire him, but
+I can move him away from the new platform project and give him
+something else to do. Is that acceptable to you?
+
+"Sure. Thank you."
+
+----
+
+Robin types frantically on IRC. "I just read in the news about
+Antero's arrest. Here's a link. I'll be in the kitchen if anyone else
+wants to discuss this."
+
+She stands up, picks up her phone, and goes to the kitchen. She puts
+the kettle on, discussing worrisome things is always more pleasant
+with tea.
+
+Andy, Bert, and Nina stroll in. Anna is away for the day, running
+personal errands. Robin pours tea for everyone. Andy pick up his mug
+and sits down. "Fraud, eh?"
+
+Robin nods. "Not entirely surprising, given how he wanted to replace
+an existing subcontractor just to bring in his buddies. That's not
+an honest thing to do and, well, wherever someone's doing something
+fishy, it's not unusual for them to do other fishy things as well."
+
+Bert smiles. "Yeah, just like in code. Where there's one bug, there's
+probably more."
+
+Andy clears his throat. "I'm not surprised, but I find the way he was
+caught to also be suspicious. Why would he have printed all those
+incriminating documents?"
+
+"The paper said he claims an intrusion into SmartHome systems." Bert
+shrugs and looks into his mug. "Doesn't sound very likely either,
+though."
+
+"The documents seem to be real, though." Robin sips some tea. "Maybe
+they have a whistle blower. The Smart Home IT people say they're sure
+there wasn't an intrusion."
+
+Nina laughs briefly. "As if they would know."
+
+The office doorbell rings. Robin looks around. "Anyone expecting
+visitors?" Everybody shakes their head. Robin gets up and goes to open
+the door. Two men in civilian clothes and two in police uniforms
+stand outside.
+
+"Good morning, ma'm. I'm detective Lax. Is Nina Nirvi here? We are
+looking for her."
+
+Robin tilts her head. "Yes she is. May I ask what this is about?"
+
+"We have a warrant for her arrest. Let us in, please."
+
+The police start walking at Robin, who decides to step aside, and then
+closes the door after everyone is in. She shouts, "Nina! The police
+are here to arrest you."
+
+The detectives look at her crossly, but before they have time to say
+anything, Nina pokes her head through the kitchen door. "Arrest me?
+Whatever for?"
+
+The older detective, a rotund man with gray heir and several days'
+worth of gray stubble, turns towards Nina. "Are you Nina?"
+
+"Yes I am. Who are you?"
+
+"I'm detective Lax. I have a warrant for your arrest on suspicion of
+computer intrusion at the Smart Home office the day before yesterday.
+Where were you in the evening that day and can anyone corroborate?"
+
+"What do you mean?"
+
+"Do you have an alibi?"
+
+"Wait, what? Why would it matter where I was when the intrusion
+happened?"
+
+"Just answer the question, miss."
+
+"No, I don't have an alibi. Robin, can you help me get a lawyer,
+please?"
+
+"Of course." She takes out her phone and aims its camera at the police
+officers. "Smile! I'm taking a photo so that the lawyer can identify
+you later." The phone makes a shutter sound.
+
+The older detective turns towards her. His face is contorted. "Hey!
+You can't do that! Delete the photo at once!" He tries to grab the
+phone from Robin. The younger detective puts his hand on the older
+one's shoulder. "Sir, I don't think you can demand that. We don't have
+the authority to do that."
+
+"Damn these times. When I was young..." He stops abruptly in the
+middle of the sentence. The younger detective turns to Nina. "I'm
+afraid you'll have to come with use to the station now, miss. Do you
+need a jacket or something?"
+
+"I'll come along. I'll be just a minute to get my coat. Robin, send
+the lawyer to the station, please. I'll leave my bag here."
+
+The younger detective shakes his head. "We'll have to take the bag
+with us, too, as evidence. And your phone and laptop."
+
+"As the person currently in charge at the office, I'll have to have a
+receipt for the laptop. It's owned by the company." Robin is standing
+with her hand in her pocket, with her phone.
+
+The receipt is made. Nina is taken away with her stuff.
+
+"Right. That was fun." Robin scratches her head. "I don't understand
+why they'd suspect Nina, though. Oh well. I'll let Anna know and we'll
+get Nina a lawyer."
+
+"Should we take Nina a care package?" Bert smiles. "A cake with a file
+would be traditional."
+
+"Let's see what happens, first. Maybe they just want to question her
+and won't keep her overnight. Don't see why they would. It's not like
+she's suspected of anything violent."
+
+----
+
+"All right then, miss. Where were you the day before last, in the
+evening, from 18 onward?" The older detective is standing at the table
+in the interrogation room, leaning on his fists on the table. Nina is
+sitting in a chair, and the younger detective is also sitting, across
+from Nina.
+
+"Lawyer first. I'm not answering any questions until I have my lawyer
+present."
+
+"What do you have to hide?"
+
+Nina just looks blankly at the old man. He looks back, his face getting more
+red.
+
+"You're behaving like a guilty person."
+
+Nina continues to look, being impassive.
+
+"We opened your laptop. There was green text on a black background,
+for about a second, before the screen locked itself. What's the
+password for unlocking it?"
+
+Nina doesn't move a muscle.
+
+"Do you know suspicious that is? The whole laptop smells of a hacker.
+The screen colors alone show it's used by a criminal, but also all the
+stickers. What's EFF? I did a search. They look like some sort of
+pirate group. And there's a sticker for the Pirate party as well. I
+would not be surprised if there's illegally copied software, viruses,
+and child porn on the laptop. You young people think you're smarter
+than anyone, and are always involved with that kind of shit. No
+respect for authority."
+
+Nina doesn't react.
+
+"What's the password?"
+
+The detective hits the table with his fist. "Dammit, girl. We can
+prove you're a criminal. Only criminal hackers have green text on a
+black background. We'll jail you if you don't give the password. Now!"
+
+Nina tilts her head to the side. "Lawyer."
+
+----
+
+"You did the right thing, not answering any questions without me,
+Nina. I wish all my clients did that." A balding, athletic man in his
+forties wearing a dark suit with a yellow tie sits across the table
+from Nina. They're in the same interrogation room, but alone.
+
+"Thanks. Now what happens?" Nina drinks a little from a glass of water
+on the table.
+
+"We're going to have to answer some questions, but before we do,
+here's what I know so far. The police don't seem to have any actual
+evidence to implicate you. They suspect you only because the staff at
+Smart Home told them about the stunt you pulled in that first meeting
+with them."
+
+"What? That was ages ago."
+
+"Indeed. However, I have to ask, under client-attorney privilege, so
+that I can form the right strategy. Did you break into Smart Home's
+computers the day before yesterday?"
+
+Nina doesn't hesitate. "No."
+
+"Good. Then I'll work on the basis that you're innocent, and that the
+police need to be convinced that you are. If you weren't, my strategy
+would be to avoid you going to jail, or avoid you getting convicted,
+or at least you getting a small a punishment as possible."
+
+"I'd really like to have a criminal record."
+
+"Of course. And there's no reason why you should get any record from
+this thing. Like I said, there seems to be no evidence against you. In
+fact, the Smart Home IT people are saying there hasn't been any
+intrusion. They think you're a bit of an arrogant poophead, but they
+changed the wifi password after your stunt, so it can't have been you,
+this time."
+
+"What do the police have? Do they have anything at all?"
+
+"No. They heard about your stunt, and they find it hard to believe
+that Antero's computer would've printed all those documents by itself.
+Frankly, so do I."
+
+"Yeah, it'd be a weird bug. But given how incompetent Antero is with
+computers, maybe he printed them by mistake and didn't realize?"
+
+"Ho hum. I may suggest that to the detective."
+
+"The detective is an incompetent idiot as well. Especially about
+computers."
+
+"I don't disagree. I've dealt with him before. What did he do this
+time?"
+
+"He says my using green on black terminal windows is proof that I'm a
+criminal."
+
+"What? Not again. Okay, if he's that desperate, I'll have you out in
+an hour or so."
+
+----
+
+The Team's kitchen is filled with laughter and empty pizza boxes.
+
+"What a dunderhead!" Bert is trying to eat his last slice, but is
+laughing too hard to be able to take a bit of the slice flopping in
+her hand, in front of his face.
+
+"I would not believe it myself, but I did some searching." Andy is
+smiling, but happily takes the last bite and wipes his hands with a
+napkin. "It's not the first time the police thinks terminal colors
+is proof of being a criminal. Campus police in the US arrested a
+student on that basis some years ago."
+
+"No, really?" Robin has almost a whole slice left. "I have trouble
+believing how stupid humanity is, sometimes."
+
+"I'm happy they let you go, Nina." Anna is more serious than the
+others. "I wish they'd dropped all charges, but they wouldn't. They're
+continuing the investigation."
+
+Nina wipes her lips. "Yeah, the lawyer said, but he's sure they'll
+have to drop the charges later, since there's no actual evidence. Not
+against me, and not even that a crime has been committed."
diff --git a/assault.mdwn b/assault.mdwn
index 5ffab3c..57a69c6 100644
--- a/assault.mdwn
+++ b/assault.mdwn
@@ -4,10 +4,10 @@ It's been a couple of weeks. It's late on a Thursday evening. Anna is
sitting in the subway train, on a bench. On the Helsinki subway the
trains are orange, and the benches are orange. The benches are in
pairs to form booths, ostensibly to get the famously asocial locals to
-be modern and urban. In practice, it meant they read books,
-newspapers, or, these days, looked at their smartphones. Or out of the
-windows into the underground tunnel walls. Anything to avoid talking
-with each other.
+be modern and urban and chat with their co-passengers. In practice, it
+means they read books, newspapers, or, these days, looked at their
+smartphones. Or just stared out of the windows into the underground tunnel walls.
+Anything to avoid talking with each other.
Anna is doing that. It's been another long, stressful day at work, and
she's enjoying watching episode of her latest favourite TV show on the
@@ -84,7 +84,7 @@ mental healing process, but I don't really want to re-live it with
everyone separately. Sorry. I didn't tell the police, you know how
they've treated me before, when I've been raped. Don't trust them."
-"Oh, of mine, nothing to be sorry for. I know exactly how you
+"Oh, my, you have nothing to be sorry for. I know exactly how you
feel. I'm here if you want or need to talk, about anything, at any
time, but there's no pressure. OK?"
diff --git a/audit.mdwn b/audit.mdwn
new file mode 100644
index 0000000..a8e5d63
--- /dev/null
+++ b/audit.mdwn
@@ -0,0 +1,361 @@
+# Audit
+
+Andy types into IRC. "Anna, SH devs r ask 4 PHP on our platform; we
+shld talk b4 resp".
+
+Anna is in her office, reading a sheaf of printed papers. A quiet ping
+alerts her that her attention is needed. By policy, she's the only on
+in the Team to have audible notifications. Everyone else's ability to
+concentrate on the task at hand is paramount, but Anna is the manager,
+outside interface, and general fire fighter, and sometimes needs to
+react quickly.
+
+She turns to her keyboard, types in a password and taps her security
+to unlock her screen. She reads, then types. "Andy, sure thing. Come
+to my office when suitable. We'll escalate to others if need be."
+
+In a minute, Andy walks into Anna's office, with a mug in his hand.
+He sits in Anna's visitor chair, and takes a sip, then a deep breath.
+
+"So, here's the sit. SmartHome opened a ticket in our issue tracker to
+ask for PHP on our platform. I've not responded yet, I figured we
+should discuss it first."
+
+Anna nods. "We've rejected PHP before, for other customers. It's hard
+to write secure, reliable software in the language."
+
+"Indeed. That continues to be my opinion, and I'm happy to respond
+that way now, except how is our relationship with SmartHome? It's been
+dicey several times in this project. Managing that relationship falls
+on you, so it's your call."
+
+Anna leans back, and crosses her hands behind her neck. "Hmmm. Yes,
+you're right. I'll need to think about this. I'm about to go out for
+lunch anyway. I might take a walk and think about this. Don't do
+anything until I come back, please."
+
+"Agreed. If SmartHome presses the issue, I'll just say that we're
+considering the request, and will respond later today. OK?"
+
+"Perfect. In fact, add that to the ticket, it'll buy us some peace and
+keep them calm."
+
+-----------------------------------------------------------------------------
+
+Anna walks on the pavement, hands behind her back and eyes on the
+ground. Lunch was lovely, and she's thinking deeply. She comes to the
+building where the Team office is, and enters though the front door,
+using her key. She walks the stairs to the right floor, and enters
+through the locked door. The entire Team is standing in the entrance
+hall.
+
+"What's up?"
+
+Andy speaks. "We didn't want to disturb you at lunch, but when the
+downstairs door informed us that you're coming in, we gathered to wait
+you. We have a situation."
+
+Nina steps forward. "SmartHome are upset that we're not adding PHP at
+once, and are saying they won't let us audit their software if we
+won't add PHP."
+
+Anna takes off her coat and hangs it on a hook on the wall. "I see."
+
+Bert shakes his head. "That's not all. They're also claiming our
+system is insecure, with known holes."
+
+Nina's head turns towards Berg. "What?"
+
+Berg nods. "Yeah. They added that to the ticket just now. I'd already
+heard you start moving to meet Anna."
+
+Robin puts her face in her hands. "This is getting to be too much."
+
+Anna hugs Robin. "Let me go read the communications myself, and see
+what I can do." She looks at the others. "It's not a healthy
+relationship we have with them. It's antagonistic. It's quite far from
+a collaboration."
+
+She takes a step towards her office. "I'll handle this. We'll survive.
+You should all take a break in the kitchen. Vent as much as you feel
+like."
+
+The others look at each other and go to the kitchen. Andy puts the
+kettle on. Bert puts a row of mugs on the counter, and small tea
+strainers in each. He then starts taking jars from a cupboard, and
+measuring tea into each strainer. The water boils, and Andy pours tea
+into each mug. Bert puts milk and honey on the table, and starts
+putting the mugs in front of everyone. The Team members each start
+their own timer in their watches or phones.
+
+Robin lifts the strainer and examines the tea, then puts it back into
+the water. "I'm tired of working with SmartHome."
+
+Nina makes a grimace. "Me too. Incompetent doesn't cover it. I can
+work with the incompetent. But this company, they're also nasty."
+
+Andy lifts his strainer into a bowl in the center of the table. "I
+don't like the situation either, but to be fair, we started the
+collaboration in an aggressive way."
+
+Nina looks at him, with her eyebrows high. "Are you saying this is my
+fault?"
+
+Robin also puts her strainer into the bowl. "No, it's not. It wasn't
+your decision to use that approach. It was mine."
+
+Andy nods. "I don't think it was wrong of us. They needed to be
+convinced. But maybe we could've built a more collaborative
+relationship since."
+
+Bert gets rid of his the strainer. "I'm not sure we could have. We
+knew, going in, that they have a toxic culture. Brogrammers, we said."
+
+Robin sips some tea. "Yeah, and all that entails. They were always
+going to dislike bringing in outsiders to fix their mess. Us bending
+over backwards would only have made it harder to collaborate."
+
+"I know there's some real poopheads there. But they're not all like
+that. I like Nick, for example. We get along well." Nina puts away her
+strainer, and adds honey and milk. "Professionally and as friends."
+
+Robin and Andy look at each other, and shrug. Nina stares into her
+mug. "I don't understand why he works there, given the poopheads."
+
+Robin takes a gulp. "Remember, he's quite young. I think it's his
+first job. He's only just graduated and doesn't know that it can be
+better."
+
+"He's not much younger than me. I know better." Nina looks up at
+Robin. "I don't want him to become a poophead."
+
+"Let's try to make sure it doesn't happen. But here's the thing, you
+started working, on your own, as a teenager. Your had to have your
+mother run the business on paper, you were so young you couldn't found
+a company in your own name, but you did all the real work. Found
+customers, built software, and so on. Then you got hired at a couple
+of consulting agencies, before we formed the Team and you joined. This
+is literally Nick's first job. He's never even had a summer job, or
+been an intern."
+
+"I guess." Nina pushes her mug away, stands up, and shudders. "It's
+just, I mean, he's nice, but I can see him drifting towards the dark
+side. He's starting to show macho tendencies." Nina walks to the sink,
+turns on the faucet, gets her hands wet, and rubs her face.
+
+"Not good." Robin drinks some tea slowly. "He should get out and move
+to another job. But we can't tell him that. It'd be against the
+contract we have with SmartHome."
+
+Nina dries her face with a paper towel. "Yeah. But as soon as we're
+done with SmartHome, I'm having a talk with him."
+
+"Mmm. That might technically still be against the contract. Unless you
+just tell him, friend to friend, that you're worried about his macho
+tendencies."
+
+Andy clears his throat. "Nick aside, what are we thinking about
+SmartHome? Is there anything good about them?"
+
+Everyone looks around. Nobody says anything.
+
+Anna walks in. "How are we doing?"
+
+"I just asked if there's anything good about SmartHome, apart from
+Nick. Nobody had anything to offer."
+
+Anna nods. "I'm starting to feel that way. I have an update. I called
+Sam. I told him we're going to respond by email soon. We need to sort
+this out now, anyway, so let's talk. Here's what I suggest..."
+
+-----------------------------------------------------------------------------
+
+"Hi, Nick." Nina is sitting on a bench in the park near the Team's
+office. Nick sits next to her. He has two ice cream cones and hands
+one to Nina.
+
+"I've some bad news, I'm afraid. The guys at work are upset at you.
+The Team in general, and you in particular, Nina."
+
+"Oh?" Nina licks her ice cream, catching melted rivulets before they
+drop.
+
+"Apparently you're a bitch. And that's the nicest term they you."
+
+"I don't mind being a bitch, but I enjoy knowing why poopheads think
+I'm a bitch." Nina takes a bit of the cone. "Mmm, this is good ice
+cream."
+
+"That email you sent explaining in detail why the claims that your
+platform is insecure were wrong, it made a couple of the guys look
+stupid. That's what started the tirades." Nick doesn't lick, just
+takes bites of ice cream.
+
+"I just held a mirror to them. They were looking stupid already, but
+they didn't see it without a mirror. Looking at version numbers to
+determine if there's known security holes is such a beginner mistake."
+
+"I agree, of course. We were taught at school to try if the hole is
+there, never mind what the version number says."
+
+"What else are they saying about me? Don't try spare my feelings. I'm
+unlikely to feel insulted by your co-workers. They have been have been
+weighed, they have been measured, and they have been found wanting. In
+what world could they possibly best me?"
+
+"Hah. Adhemar. Well, since you ask, they think you're variously
+lesbian, frigid, or a transvestite. Apparently a girl can't be as good
+as you are at what you do, unless they have boy genes, or aren't
+having sex with boys."
+
+"Oh, that. Not new." Nina finishes off the ice cream cone, the pointy
+end of the cornet. "Still, shows they're not just poopheads, but
+stupid. Macho poops often are."
+
+"Yeah. I told Sam as much."
+
+"Well done. I knew I liked you for a reason."
+
+"And then I resigned."
+
+"What? Seriously?"
+
+"Yeah, I've not enjoyed working there for a long time. They pay well,
+and it's nice to work on products that a lot of people use, but the
+culture isn't a good fit for me. I think toxic is the word."
+
+"Good boy."
+
+"Uh, and that reminds me of something I've been meaning to bring up. I
+like you too. I like you much more than I would've ever expected. I
+really enjoy all our chats."
+
+"I'm glad to hear that, but..."
+
+Nick raises his hand, showing his palm. "Wait. Before you say
+anything, I need to finish. I like you, I enjoy spending time with
+you, but... but I don't like you like you. I'm not attracted to you.
+Sorry."
+
+"Oh, good. I was just going to say the same thing."
+
+The two look at each other.
+
+"Well, that's not how I expected this to go." Nick tilts his head.
+"I'm not offended, but I'm curious. Why aren't you attracted? Am I
+unattractive? Repulsive?"
+
+"You first. I'll answer after you tell me why you aren't attracted to
+me. Wait! I'll text my reason, and you'll say your reason before
+reading the text."
+
+Nina takes out her phone, and types quickly with two thumbs for
+several seconds. Nick's phone plays a few bars of the Imperial March.
+
+"The reason I'm not attracted to you, and I've not told this to many
+people ever, is that I'm gay."
+
+Nina nod. "Read the text."
+
+Nick raises his phone and pokes at it. "Oh. You knew. How did you
+know?"
+
+"Small things. You never look down my blouse or at my ass when I bend
+over in the lab. You might just be very well brought up, but even well
+brought up boys do that when they think they aren't being observed.
+The lab has hidden security cameras, and I checked."
+
+"Oh. Well, I am gay, but nobody else has ever guessed. I only came out
+to my parents a couple of years ago."
+
+"How did that go?"
+
+"Very well. They accepted it and me right away, and have been quite
+supportive."
+
+"Glad to hear that."
+
+"It's one more reason to leave SmartHome. The guys there keep making
+crass jokes about gay people."
+
+"When is your last day? I mean, I'm glad you're getting our, I don't
+think it's a good place for you, or anyone, but I'm sorry to lose an
+inside contact."
+
+Nick smiles broadly. "Today, in fact. I'm not going back. Sam was very
+understanding, and I've not used any of my accrued vacation, so I made
+a deal that I'm garden leave for a month, and they won't need to pay
+me for unused vacation. Also, I won't raise a ruckus with the union
+about the way gay people are treated there."
+
+"What will you do next?"
+
+"Well, I'm in a good place financially. I've some savings, and my
+parents are quite well off, so I don't have to find a new job at once.
+I'm going to be looking carefully. I like how the Team looks, but
+since I can't join you, due to my employment contract and your
+contract with SmartHome, I'll look for somewhere else that's nice."
+
+"Yeah, I was going to say that we can't hire you, unfortunately."
+
+"Aye. I took a semester of contract law and one of employment law in
+school. I figured it would be useful to know that stuff."
+
+-----------------------------------------------------------------------------
+
+Anna types leisurely. "Good new, team. I had a lunch meeting with Sam.
+We still have a customer, and they've agreed in writing that there
+will be third-party security audits of both their devices, and
+separately of our platform, and they're paying for that. We can
+continue work, and also, I think we are seeing the end of the project
+looming. We'll pull through this one yet."
+
+She clicks the send button, then turns to face Robin, who's sitting in
+the visitor chair. "How are you doing, Robin? I'm a little worried,
+you've seemed a bit on the edge, lately."
+
+Robin doesn't move a muscle. A moment goes past. "I'm coping, but
+it's been hard. Not just work, but some other stuff as well."
+
+"I'm sorry to hear that. Do you want to tell me about it?"
+
+"You know I'm involved with some free software projects in my free
+time? It turns out that one of them has some unpleasant people that I
+don't want to be associated with." She sighs. "See, there's a
+diversity statement, formally ratified by voting. It says we no matter
+how you identify yourself or how others perceive you. Now a RUDE WORD
+poophead claims that means we must accept Nazis. Actual, literal,
+card-carrying Nazis."
+
+"Oh. That doesn't make any sense."
+
+"No, it really doesn't. But there's a few members who agree, the usual
+suspects when it comes to stirring up trouble. It seems every big
+project has them. There's also a bunch of outsiders, baiting and
+trolling us."
+
+"Are you coping?"
+
+"I am, for now, but I'm getting tired of having these arguments. They
+keep getting repeated. The project has an arsehole problem: it doesn't
+know what to do with extra ones. I'd like to just kick them out, but
+it's hard to build consensus on that."
+
+Anna stands up. "Hug?"
+
+-----------------------------------------------------------------------------'
+
+Bert stops typing. "Well, that's new."
+
+Andy looks up from his screen. "What?"
+
+"On the SmartHome IRC, someone just said they've started liking the CI
+we set up for them."
+
+"Oh? They've not been positive about it before. They've complained
+it's picky and slow."
+
+"Yeah, and someone else said they also liked it. It seems to reduce
+bugs that get merged."
+
+"Maybe there's hope for them yet."
diff --git a/characters.mdwn b/characters.mdwn
index 0ac208e..20abd45 100644
--- a/characters.mdwn
+++ b/characters.mdwn
@@ -1,33 +1,21 @@
-[[!meta title="Characters"]]
+ [[!meta title="Characters"]]
# The Team
-Anna Carter
+* **Anna Carter:** The leader of the Team, to the extent there is one. Diplomat.
-: The leader of the Team, to the extent there is one. Diplomat.
-
-Robin
-
-: The team software architect and most experienced developer. Can be
+* **Robin:** The team software architect and most experienced developer. Can be
prickly and short-tempered.
-Nina
-
-: The sysadmin and security expert.
-
-Andrew
+* **Nina:** The sysadmin and security expert.
-: A solid, calm, experienced programmer. Works in tandem with Bertram.
-
-Bertram
-
-: Another solid programmer, somewhat less experienced than Andrew.
+* **Andrew:** A solid, calm, experienced programmer. Works in tandem with Bertram.
+* **Bertram:** Another solid programmer, somewhat less experienced than Andrew.
# SmartHome
-Sam
-
-: The main contact at SmartHome for the Team.
+* **Sam:** The main contact at SmartHome for the Team.
+* **Nick:** A young developer at SmartHome
diff --git a/conflict.mdwn b/conflict.mdwn
index bb298cb..1a99fb9 100644
--- a/conflict.mdwn
+++ b/conflict.mdwn
@@ -1,4 +1,4 @@
-# First conflict with SmartHome
+# Antagonism
I sleep well, and I get up a bit later than usual, feeling very refreshed.
I spend a bit of time in my own kitchen, drinking tea and reading the
@@ -19,7 +19,7 @@ the middle of something, finish that, I can start on my own."
In a minute, I hear Robin's combat boots stomping towards my office.
She throws open my door, not bothering to knock. Oh good, I've upset
her. Robin steps into my office and stands in front of my desk. In
-addition to black leather boots, she's wearing cargo trousers, and a
+addition to the boots, she's wearing cargo trousers, and a
photographer's multi-pocketed vest over a thin, green, army sweater and
a uniform dress shirt. It's one of her favourite outfits, on days when
she doesn't expect to have to deal with customers in person.
@@ -29,7 +29,7 @@ she doesn't expect to have to deal with customers in person.
Robin is a dear friend, but it's taken me a lot of effort to get used
to her habit of not bothering with social niceties when she's upset. I
know she's not upset at me, which helps, but the loud voice, and the
-wording easily puts the other on the defensive. While I've gotten used
+wording easily puts the others on the defensive. While I've gotten used
to it, we've also made sure Robin avoids this behaviour in front of
others, including the Team.
Originally she said she felt like a fraud when she hid her
@@ -43,7 +43,7 @@ breathes, sits down, and says, in a normal voice, "OK, so what's going
on?"
I explain about Sam's email from yesterday. "Clearly, we're not
-switching to RPM. We've built our system based on .deb packages, But
+switching to RPM. We've built our system based on .deb packages, but
we need to explain to SmartHome why we're not switching. I thought
we'd outline a response together, and I'll flesh it out and reply by
email. Here's what I have in mind so far."
@@ -60,7 +60,7 @@ thinking we should write a small white paper on why we use .deb and
why we're not switching, so we're prepared for this the next time
someone asks."
-I nod. "Good idea, I'll put it on the list to do between clients. Or
+I nod. "Good idea, I'll put it on the list of things to do between clients. Or
better yet, since we need it for SmartHome, we'll write it for them,
and bill the hours to them. The contract says we can reuse that kind
of thing in the future."
@@ -74,7 +74,7 @@ other big point is the cost in time and quality of switching. It's not
just about the format of individual packages, we've built our platform
entirely on top of Debian, and switching to RPM would mean we'd need
to switch to something like RHEL. And then everything changes, since
-the systems are quite different, for all they're built from the same
+the systems are quite different, for all they're built mostly from the same
upstream components. Things like system wide policies differ, and
figuring all of those out is many months of work. Agreed?"
@@ -93,7 +93,7 @@ Robin stands up and leaves, I sit in my chair and flex my fingers over
the keyboard, and hit on "reply" for Sam's mail.
"Dear Sam, we had a little discussion with Robin about switching to
-RPM and I'm afraid it's something we advise against. Let me explain
+RPM and I'm afraid it's something we advise strongly against. Let me explain
why..."
-----------------------------------------------------------------------------
@@ -124,8 +124,8 @@ over a few things with him."
walk to my own room. An hour or so later, I need to go see Robin about
something, and I choose the route past Nina's lab. The door is open
and I can hear Nina explain about the trunks. She's not trying to sell
-them, just proudly presenting them geek-to-geek,
-going over very technical detail.
+them, just proudly presenting them, geek-to-geek,
+going them over in very technical detail.
I don't stop, not
wanting to disturb the two, and continue to Robin's room.
@@ -199,7 +199,7 @@ I stand up. "Looks like you have things well in hand. I'm old enough
to have learnt that the universe likes to throw nasty surprises even
in the simplest things, so I'm going to assume it'll take a while
before we actually have Debian running on the SmartHome hardware.
-That's OK, but please do the work in tight weekly sprints so we can
+That's OK, but please do the work in tight weekly iterations so we can
demonstrate progress often to the client. And ourselves."
"Will do." Robin's also been doing this work a long time and knows
@@ -209,7 +209,7 @@ useful, I assume."
"Yep, that's the way. The less we have to keep maintaining ourselves,
the better. Also, if others can benefit from our changes, it's the
-right thing to share them."
+Right Thing to share them."
-----------------------------------------------------------------------------
@@ -238,7 +238,7 @@ The room goes quiet. Most of the engineers squirm in their chairs and
look uncomfortable. Robin looks up, stands up, puts her arms behind
her back, and stares at the two who came in. "What's your name?"
-"Er, I'm Anders." The guy seems to realise he's crossed a line.
+"Er, I'm Anders." The guy seems to realize he's crossed a line.
Right at that moment Sam walks in. Robin looks at him. "Hi Sam, we
have problem. Anders here thought it would be funny to make comments
@@ -254,7 +254,7 @@ telling us what to do." Robin keeps her face as stony as she can,
but it's clear she's fuming.
Sam shakes his head. "I'm afraid I'm going to have to ask you to leave
-the meeting. I'll talk with you after the meeting. Our contract with
+the meeting. I'll talk with you afterwards. Our contract with
the Team is clear, your behaviour is unacceptable when we work with
them."
@@ -288,8 +288,8 @@ with in a reasonable way, we can walk away and leave the project. But
SmartHome will pay our fee anyway."
Robin takes a breath, and frowns a little. "Would you like me to
-insist that Sam fires your ass? I think that would be a reasonable way
-of dealing with you?"
+insist that Sam fires you? Would that be a reasonable way
+of dealing with this?"
Sam takes Anders by the arm and pulls him towards the door. "Anders,
you shut up now, and wait at your desk. You're in trouble now." Anders
@@ -309,7 +309,7 @@ Robin is quiet for a while, and looks at Andy. "I think we'll continue
with the presentation. But first, I'd like to say that I don't require
anything more than basic professional courtesy from those I work with.
I'm sorry for what happened today. It's relatively mild compared to
-some of the things I've encountered in my work life, but I'm not
+some of the things I've encountered in my career, but I'm not
willing to endure any disrespect anymore. I hope the rest of you can
understand that, and that we can work together."
@@ -335,7 +335,7 @@ Anders, it's clearly going to be a problem in the near future.
"I see. Robin, I'm sorry, you were right to be hesitant about taking
on SmartHome as a client."
-Robin shakes her head. "It can't be helped. And for the record, I
+Robin shakes her head. "It can't be helped now. And for the record, I
don't like how things went down today. Not sure Sam handled it
properly."
@@ -366,7 +366,7 @@ doubt he's the only sexist jerk there."
"In that case I'll tell Sam that Anders can stay in the project too.
Let's hope he's learnt his lesson and that he and others don't take
-that as an excuse to be jerks, since they see get to keep their
+that as an excuse to be jerks, since they see they get to keep their
jobs anyway. Robin, you've had a rough day, you should probably go home and
relax. You too, Andy."
@@ -384,7 +384,7 @@ himself in the future, he can stay on."
"I just told him that he's going to be formally fired tomorrow."
-"That won't be necessary." I take deep breath, intentionally making it
+"That's not necessary for us." I take deep breath, intentionally making it
noisy so that Sam hears it even over the phone. "Between you and me,
Robin could've handled this privately, but then so could you, Sam.
It's enough of a mess, so I think, we at the Team think, it's gone far
@@ -436,10 +436,9 @@ Andy gives a sketchy summary of Robin's talk. It's what we'd discussed
beforehand. SmartHome was dependent on a central cloud service, for
storing measurements and logs, and for controlling the devices, even
though everything is also stored locally on the hub device. The hub even has
-a local database, a real one, not just Sqlite. A database with 11
+a local database, a real one, not just SQLite. A database with 11
tables with overlapping data and no unique key to match things between
tables. No access control between tables.
-Multiple differenet applications updating the table concurrently.
A pretty mess. The engineers
hadn't liked having their work described that way, but at least most
of them warmed up to the suggestion of having a program provide a simple
@@ -453,11 +452,11 @@ want to be harsh after Anders."
I nod understanding. "OK, sounds like it went reasonably well. I
would've been fine to postpone the presentation by a day or two, to
-let everyone calm down, but sounds like Robin and you did it well."
+let everyone calm down, but sounds like Robin and you did well."
Andy finally goes home. Even he shows signs of it having been a long,
stressful day. Nobody likes confrontations like that. Except maybe the
-kind of macho brogrammer jerk that Anders seems to be like.
+kind of macho brogrammer jerk that Anders seems to be.
I do a final round around the office, and find everything to be dark. I get
my things, turn off the remaining lights, and go home. It's dark, and
@@ -478,7 +477,7 @@ shoulders.
It's Russ. My ex. Well, one of my exes. In a previous life many years
ago we were going out, but it ended. In fact, I was expecting him to
propose, but instead he broke up with me. It was rough on me, but I
-got better. We've not seen each other since. But hearing his voice,
+got over it. We've not seen each other since. But hearing his voice,
and seeing his surprised-happy face brings up pleasant memories. I
guess I really have gotten over the breakup. I smile.
@@ -494,12 +493,12 @@ suitably pseudonymised version of the day's events. It feels good, I
don't often get to talk with a sympathetic friend about my work. He
makes the right kind of noises, and tells about his own life. We
carefully avoid touching on the breakup. I do that to avoid ruining
-this evening. I can take it up with him whenever, today I just want to
+this evening. I can take it up with him some day. Today I just want to
enjoy good company.
Which I do, for longer than is sensible, and with a glass of whisky too
many maybe. When it gets time, we leave, shake hands, and go our
separate ways. Younger me would've gone home with him. Younger me did.
-I've learnt to be sensible since. Russ is very nice tonight, but he
+I've learnt to be more careful since. Russ is very nice tonight, but he
hurt me once. If he's grown and I can trust him to not hurt me again,
we can consider things, but not now. I'm such a romantic.
diff --git a/devcont.mdwn b/devcont.mdwn
new file mode 100644
index 0000000..a8e5d63
--- /dev/null
+++ b/devcont.mdwn
@@ -0,0 +1,361 @@
+# Audit
+
+Andy types into IRC. "Anna, SH devs r ask 4 PHP on our platform; we
+shld talk b4 resp".
+
+Anna is in her office, reading a sheaf of printed papers. A quiet ping
+alerts her that her attention is needed. By policy, she's the only on
+in the Team to have audible notifications. Everyone else's ability to
+concentrate on the task at hand is paramount, but Anna is the manager,
+outside interface, and general fire fighter, and sometimes needs to
+react quickly.
+
+She turns to her keyboard, types in a password and taps her security
+to unlock her screen. She reads, then types. "Andy, sure thing. Come
+to my office when suitable. We'll escalate to others if need be."
+
+In a minute, Andy walks into Anna's office, with a mug in his hand.
+He sits in Anna's visitor chair, and takes a sip, then a deep breath.
+
+"So, here's the sit. SmartHome opened a ticket in our issue tracker to
+ask for PHP on our platform. I've not responded yet, I figured we
+should discuss it first."
+
+Anna nods. "We've rejected PHP before, for other customers. It's hard
+to write secure, reliable software in the language."
+
+"Indeed. That continues to be my opinion, and I'm happy to respond
+that way now, except how is our relationship with SmartHome? It's been
+dicey several times in this project. Managing that relationship falls
+on you, so it's your call."
+
+Anna leans back, and crosses her hands behind her neck. "Hmmm. Yes,
+you're right. I'll need to think about this. I'm about to go out for
+lunch anyway. I might take a walk and think about this. Don't do
+anything until I come back, please."
+
+"Agreed. If SmartHome presses the issue, I'll just say that we're
+considering the request, and will respond later today. OK?"
+
+"Perfect. In fact, add that to the ticket, it'll buy us some peace and
+keep them calm."
+
+-----------------------------------------------------------------------------
+
+Anna walks on the pavement, hands behind her back and eyes on the
+ground. Lunch was lovely, and she's thinking deeply. She comes to the
+building where the Team office is, and enters though the front door,
+using her key. She walks the stairs to the right floor, and enters
+through the locked door. The entire Team is standing in the entrance
+hall.
+
+"What's up?"
+
+Andy speaks. "We didn't want to disturb you at lunch, but when the
+downstairs door informed us that you're coming in, we gathered to wait
+you. We have a situation."
+
+Nina steps forward. "SmartHome are upset that we're not adding PHP at
+once, and are saying they won't let us audit their software if we
+won't add PHP."
+
+Anna takes off her coat and hangs it on a hook on the wall. "I see."
+
+Bert shakes his head. "That's not all. They're also claiming our
+system is insecure, with known holes."
+
+Nina's head turns towards Berg. "What?"
+
+Berg nods. "Yeah. They added that to the ticket just now. I'd already
+heard you start moving to meet Anna."
+
+Robin puts her face in her hands. "This is getting to be too much."
+
+Anna hugs Robin. "Let me go read the communications myself, and see
+what I can do." She looks at the others. "It's not a healthy
+relationship we have with them. It's antagonistic. It's quite far from
+a collaboration."
+
+She takes a step towards her office. "I'll handle this. We'll survive.
+You should all take a break in the kitchen. Vent as much as you feel
+like."
+
+The others look at each other and go to the kitchen. Andy puts the
+kettle on. Bert puts a row of mugs on the counter, and small tea
+strainers in each. He then starts taking jars from a cupboard, and
+measuring tea into each strainer. The water boils, and Andy pours tea
+into each mug. Bert puts milk and honey on the table, and starts
+putting the mugs in front of everyone. The Team members each start
+their own timer in their watches or phones.
+
+Robin lifts the strainer and examines the tea, then puts it back into
+the water. "I'm tired of working with SmartHome."
+
+Nina makes a grimace. "Me too. Incompetent doesn't cover it. I can
+work with the incompetent. But this company, they're also nasty."
+
+Andy lifts his strainer into a bowl in the center of the table. "I
+don't like the situation either, but to be fair, we started the
+collaboration in an aggressive way."
+
+Nina looks at him, with her eyebrows high. "Are you saying this is my
+fault?"
+
+Robin also puts her strainer into the bowl. "No, it's not. It wasn't
+your decision to use that approach. It was mine."
+
+Andy nods. "I don't think it was wrong of us. They needed to be
+convinced. But maybe we could've built a more collaborative
+relationship since."
+
+Bert gets rid of his the strainer. "I'm not sure we could have. We
+knew, going in, that they have a toxic culture. Brogrammers, we said."
+
+Robin sips some tea. "Yeah, and all that entails. They were always
+going to dislike bringing in outsiders to fix their mess. Us bending
+over backwards would only have made it harder to collaborate."
+
+"I know there's some real poopheads there. But they're not all like
+that. I like Nick, for example. We get along well." Nina puts away her
+strainer, and adds honey and milk. "Professionally and as friends."
+
+Robin and Andy look at each other, and shrug. Nina stares into her
+mug. "I don't understand why he works there, given the poopheads."
+
+Robin takes a gulp. "Remember, he's quite young. I think it's his
+first job. He's only just graduated and doesn't know that it can be
+better."
+
+"He's not much younger than me. I know better." Nina looks up at
+Robin. "I don't want him to become a poophead."
+
+"Let's try to make sure it doesn't happen. But here's the thing, you
+started working, on your own, as a teenager. Your had to have your
+mother run the business on paper, you were so young you couldn't found
+a company in your own name, but you did all the real work. Found
+customers, built software, and so on. Then you got hired at a couple
+of consulting agencies, before we formed the Team and you joined. This
+is literally Nick's first job. He's never even had a summer job, or
+been an intern."
+
+"I guess." Nina pushes her mug away, stands up, and shudders. "It's
+just, I mean, he's nice, but I can see him drifting towards the dark
+side. He's starting to show macho tendencies." Nina walks to the sink,
+turns on the faucet, gets her hands wet, and rubs her face.
+
+"Not good." Robin drinks some tea slowly. "He should get out and move
+to another job. But we can't tell him that. It'd be against the
+contract we have with SmartHome."
+
+Nina dries her face with a paper towel. "Yeah. But as soon as we're
+done with SmartHome, I'm having a talk with him."
+
+"Mmm. That might technically still be against the contract. Unless you
+just tell him, friend to friend, that you're worried about his macho
+tendencies."
+
+Andy clears his throat. "Nick aside, what are we thinking about
+SmartHome? Is there anything good about them?"
+
+Everyone looks around. Nobody says anything.
+
+Anna walks in. "How are we doing?"
+
+"I just asked if there's anything good about SmartHome, apart from
+Nick. Nobody had anything to offer."
+
+Anna nods. "I'm starting to feel that way. I have an update. I called
+Sam. I told him we're going to respond by email soon. We need to sort
+this out now, anyway, so let's talk. Here's what I suggest..."
+
+-----------------------------------------------------------------------------
+
+"Hi, Nick." Nina is sitting on a bench in the park near the Team's
+office. Nick sits next to her. He has two ice cream cones and hands
+one to Nina.
+
+"I've some bad news, I'm afraid. The guys at work are upset at you.
+The Team in general, and you in particular, Nina."
+
+"Oh?" Nina licks her ice cream, catching melted rivulets before they
+drop.
+
+"Apparently you're a bitch. And that's the nicest term they you."
+
+"I don't mind being a bitch, but I enjoy knowing why poopheads think
+I'm a bitch." Nina takes a bit of the cone. "Mmm, this is good ice
+cream."
+
+"That email you sent explaining in detail why the claims that your
+platform is insecure were wrong, it made a couple of the guys look
+stupid. That's what started the tirades." Nick doesn't lick, just
+takes bites of ice cream.
+
+"I just held a mirror to them. They were looking stupid already, but
+they didn't see it without a mirror. Looking at version numbers to
+determine if there's known security holes is such a beginner mistake."
+
+"I agree, of course. We were taught at school to try if the hole is
+there, never mind what the version number says."
+
+"What else are they saying about me? Don't try spare my feelings. I'm
+unlikely to feel insulted by your co-workers. They have been have been
+weighed, they have been measured, and they have been found wanting. In
+what world could they possibly best me?"
+
+"Hah. Adhemar. Well, since you ask, they think you're variously
+lesbian, frigid, or a transvestite. Apparently a girl can't be as good
+as you are at what you do, unless they have boy genes, or aren't
+having sex with boys."
+
+"Oh, that. Not new." Nina finishes off the ice cream cone, the pointy
+end of the cornet. "Still, shows they're not just poopheads, but
+stupid. Macho poops often are."
+
+"Yeah. I told Sam as much."
+
+"Well done. I knew I liked you for a reason."
+
+"And then I resigned."
+
+"What? Seriously?"
+
+"Yeah, I've not enjoyed working there for a long time. They pay well,
+and it's nice to work on products that a lot of people use, but the
+culture isn't a good fit for me. I think toxic is the word."
+
+"Good boy."
+
+"Uh, and that reminds me of something I've been meaning to bring up. I
+like you too. I like you much more than I would've ever expected. I
+really enjoy all our chats."
+
+"I'm glad to hear that, but..."
+
+Nick raises his hand, showing his palm. "Wait. Before you say
+anything, I need to finish. I like you, I enjoy spending time with
+you, but... but I don't like you like you. I'm not attracted to you.
+Sorry."
+
+"Oh, good. I was just going to say the same thing."
+
+The two look at each other.
+
+"Well, that's not how I expected this to go." Nick tilts his head.
+"I'm not offended, but I'm curious. Why aren't you attracted? Am I
+unattractive? Repulsive?"
+
+"You first. I'll answer after you tell me why you aren't attracted to
+me. Wait! I'll text my reason, and you'll say your reason before
+reading the text."
+
+Nina takes out her phone, and types quickly with two thumbs for
+several seconds. Nick's phone plays a few bars of the Imperial March.
+
+"The reason I'm not attracted to you, and I've not told this to many
+people ever, is that I'm gay."
+
+Nina nod. "Read the text."
+
+Nick raises his phone and pokes at it. "Oh. You knew. How did you
+know?"
+
+"Small things. You never look down my blouse or at my ass when I bend
+over in the lab. You might just be very well brought up, but even well
+brought up boys do that when they think they aren't being observed.
+The lab has hidden security cameras, and I checked."
+
+"Oh. Well, I am gay, but nobody else has ever guessed. I only came out
+to my parents a couple of years ago."
+
+"How did that go?"
+
+"Very well. They accepted it and me right away, and have been quite
+supportive."
+
+"Glad to hear that."
+
+"It's one more reason to leave SmartHome. The guys there keep making
+crass jokes about gay people."
+
+"When is your last day? I mean, I'm glad you're getting our, I don't
+think it's a good place for you, or anyone, but I'm sorry to lose an
+inside contact."
+
+Nick smiles broadly. "Today, in fact. I'm not going back. Sam was very
+understanding, and I've not used any of my accrued vacation, so I made
+a deal that I'm garden leave for a month, and they won't need to pay
+me for unused vacation. Also, I won't raise a ruckus with the union
+about the way gay people are treated there."
+
+"What will you do next?"
+
+"Well, I'm in a good place financially. I've some savings, and my
+parents are quite well off, so I don't have to find a new job at once.
+I'm going to be looking carefully. I like how the Team looks, but
+since I can't join you, due to my employment contract and your
+contract with SmartHome, I'll look for somewhere else that's nice."
+
+"Yeah, I was going to say that we can't hire you, unfortunately."
+
+"Aye. I took a semester of contract law and one of employment law in
+school. I figured it would be useful to know that stuff."
+
+-----------------------------------------------------------------------------
+
+Anna types leisurely. "Good new, team. I had a lunch meeting with Sam.
+We still have a customer, and they've agreed in writing that there
+will be third-party security audits of both their devices, and
+separately of our platform, and they're paying for that. We can
+continue work, and also, I think we are seeing the end of the project
+looming. We'll pull through this one yet."
+
+She clicks the send button, then turns to face Robin, who's sitting in
+the visitor chair. "How are you doing, Robin? I'm a little worried,
+you've seemed a bit on the edge, lately."
+
+Robin doesn't move a muscle. A moment goes past. "I'm coping, but
+it's been hard. Not just work, but some other stuff as well."
+
+"I'm sorry to hear that. Do you want to tell me about it?"
+
+"You know I'm involved with some free software projects in my free
+time? It turns out that one of them has some unpleasant people that I
+don't want to be associated with." She sighs. "See, there's a
+diversity statement, formally ratified by voting. It says we no matter
+how you identify yourself or how others perceive you. Now a RUDE WORD
+poophead claims that means we must accept Nazis. Actual, literal,
+card-carrying Nazis."
+
+"Oh. That doesn't make any sense."
+
+"No, it really doesn't. But there's a few members who agree, the usual
+suspects when it comes to stirring up trouble. It seems every big
+project has them. There's also a bunch of outsiders, baiting and
+trolling us."
+
+"Are you coping?"
+
+"I am, for now, but I'm getting tired of having these arguments. They
+keep getting repeated. The project has an arsehole problem: it doesn't
+know what to do with extra ones. I'd like to just kick them out, but
+it's hard to build consensus on that."
+
+Anna stands up. "Hug?"
+
+-----------------------------------------------------------------------------'
+
+Bert stops typing. "Well, that's new."
+
+Andy looks up from his screen. "What?"
+
+"On the SmartHome IRC, someone just said they've started liking the CI
+we set up for them."
+
+"Oh? They've not been positive about it before. They've complained
+it's picky and slow."
+
+"Yeah, and someone else said they also liked it. It seems to reduce
+bugs that get merged."
+
+"Maybe there's hope for them yet."
diff --git a/devsetup.mdwn b/devsetup.mdwn
index aff80fd..c9f5e09 100644
--- a/devsetup.mdwn
+++ b/devsetup.mdwn
@@ -1,4 +1,4 @@
-# Development setup phase
+# Assembly
The next three weeks are overtly busy, but not actually
productive. Robin spends a lot of time with the SmartHome
@@ -14,11 +14,11 @@ means that Andy and Bert work blind.
We like our own office. It's actually an apartment near the
city centre, in a building from 1905, which we rent. There's
-private rooms for everyone, except Andy and Bert prefer to
+private rooms for everyone, except Andy and Bert, who prefer to
share a room. What was meant to be a living room is the
meeting room. The kitchen remains as a kitchen, and there's
even a small room we use as a server room. We've spent a
-fair bit of effort on making the apartment into a good
+fair bit of effort turning the apartment into a good
office for us. There's privacy for everyone, extremely
comfortable sofas, good networking and electricity
everywhere, good heating, a real bathroom (both shower and
@@ -90,13 +90,13 @@ around. It is her sanctum, the rest of us aren't supposed to
enter without asking for permission.
The lab is filled with furniture and bits and pieces of
-electronics. The walls are all covered by bookcases, Lundia
+electronics. The walls are all covered by bookcases, wooden Lundia
shelves, cupboards, chests of drawers, and other storage.
-Part of one wall is covered by a board with hooks for tools.
+Part of one wall is covered by a peg board with hooks for tools.
There are a lot of tools hung on the board: every
-conceivable sort of screwdriver, hammer, pliers, knives,
+conceivable sort of screwdriver, hammer, pliers, knife,
even an axe and, most curiously of all, a half-meter long
-rubber baton, and a 20-pound sledgehammer. Near the door are
+rubber baton, and a huge sledgehammer. Near the door are
several large garbage bins, labelled for recycling: WEEE,
metal, toxic, and misc.
@@ -112,12 +112,12 @@ table have large lamps hanging over them from the ceiling.
Nick does not know he's entering a special place. He follows
Nina into the room, and promptly collides with a table,
-causing a spar desktop machine fall to the floor. There is a
+causing a spare desktop machine fall to the floor. There is a
terrible noise, and parts fly across the floor to all
corners of the room.
"You! Sit!" Nina points her finger at Nick, and uses her
-loud voice. Nick is startles, but luckily doesn't cause any
+loud voice. Nick is startled, but luckily doesn't cause any
more havoc. He looks around for a chair.
"Sit! Now! NOW! On the floor!" Nick drops to the floor, with
@@ -141,7 +141,7 @@ extra backup server. Don't worry about it."
Nina takes one SmartHome cardboard box, puts it in the
middle of the big table, and stacks the rest on an empty
-shelf on the wall. Carefully, with slow hand movements, the
+shelf on the wall. Carefully, with slow hand movements, she
unpacks the gadget from the box, then takes her phone and
takes a photograph of all the contents.
@@ -155,15 +155,15 @@ you being sarcastic?"
"No, Miss Nina. I don't want to anger you any further."
-"Good boy." Nick smiles.
+"Good boy. But just Nina is enough." Nick nods.
"To open the case, I need to open these four screws" - Nina
points at them - "And then use a bit of force to get the
cover apart, right?"
-"Yes, Miss Nina. Would you like me to do it for you?"
+"Yes, Nina. Would you like me to do it for you?"
-"No, thanks, I need to know how to do this." Nina goes to
+"No, thanks, I need to learn how to do this." Nina goes to
the wall, where a ton of tools are hanging, and chooses an
electric screwdriver, and returns to the table. Deftly, she
opens the four screws. She then goes back to the walls,
@@ -187,7 +187,8 @@ desk. The desk, and the room, is bathed in a bright, cold
white light. She bows down and looks at the now-exposed
mainboard of the opened hub. She raises her glasses and puts
them on top of her head, picks up the mainboard, and squints
-at it quite closely.
+at it quite closely. After a moment, she shakes her head and fetches a
+magnifier from a drawer.
"I should have suitable connector, somewhere, let me see."
She goes to rummage in a cupboard. She pulls out a cable
@@ -210,7 +211,7 @@ in the lab." is Nina's curt answer.
"May I go have coffee in the kitchen?"
-"Sure, go ahead."
+"Sure, that's fine."
Nick gets up from the floor, and goes to the kitchen. Robin
is there, sipping a cup of tea. "If you'd like tea, there's
@@ -225,8 +226,8 @@ into the lab."
then I was clumsy and a computer fell on the floor and
broke."
-"Oh dear. You should probably be told that the lab is Nina's
-special place. She's spent months of work time setting it
+"Oh dear. I should've told you that the lab is Nina's
+special place. She's spent months setting it
up, and it's where she spends almost all of her time. The rest
of us do not enter without an explicit invitation each time.
She doesn't usually tolerate other people there, lest they
@@ -254,7 +255,7 @@ I didn't mean romantically. I don't want there to be any
misunderstanding."
Nick gets to the lab door, which is standing open. He
-politely knocks on the door frame. "Miss Nina, may I enter?"
+politely knocks on the door frame. "Nina, may I enter?"
Nina looks up from the laptop, and nods. "Pull up that chair
and get seated next to me so you can see the laptop.
@@ -292,7 +293,7 @@ until now."
specific to our hardware. Perhaps a device driver?"
"Perhaps. I better go get Andy to look at this. He'll be
-thrilled."
+so thrilled."
------------------------------------------------------------
@@ -311,13 +312,13 @@ everything working now?"
Nina shakes her head, while holding her tea mug between her
hands, as if to warm them . "No, not at all. We haven't got
-a working kernel build yet."
+a working build of the kernel yet."
"Oh? Andy?"
Andy looks like he'd be vexed, if he wasn't his usual
perpetually calm self. "Yeah. We've set up a cross-building
-environment, but the kernel image we build doesn't boot
+environment, but the kernel image we built doesn't boot
correctly. We spent some time debugging that yesterday with
Nick from SmartHome, but he wasn't all that much help. I
don't think he does this kind of thing usually."
@@ -327,7 +328,7 @@ don't think he does this kind of thing usually."
"Not yet. It looks like the normal embedded Linux vendor
inability to provide complete and corresponding source code
for their kernel. Getting their kernel to build, install,
-and run shouldn't be this hard."
+and run shouldn't be hard, but it always is."
"I agree. What can we do to solve it this time?"
@@ -350,7 +351,7 @@ the mini-rack build?"
Nina takes a gulp of tea, and nods. "Yeah, it's going well.
I've unpacked all the devices, and extracted the boards from
-the cases. That's great fun. The cases are now waste, but we
+the cases. That's great crunchy fun. The cases are now waste, but we
don't need them anyway. I'll need to go pick up some
hardware bits for the rack so that we can install all the
boards, but that's no problem."
@@ -367,7 +368,7 @@ they can together unlock the mysteries of the kernel that
wouldn't boot. I'm not worried about that. We've had this
situation before, where an embedded Linux vendor doesn't
share the actual kernel source code they use, or are missing
-some build step from their documentation, or do something
+some build step from their documentation, or does something
else stupid. We know it's possible to get Linux booting, and
we have access to the people who made it happen. I'm not
worried, but I am irritated that this particular problem
@@ -415,7 +416,7 @@ them to be left alone, so I don't go and introduce myself
and tell them they're welcome.
Three hours later, they exit the Andy and Bert room, and
-shake hands and say goodbyes. They're gone before I get out of
+shake hands and say goodbye. They're gone before I get out of
my room. "Good morning, Andy and Bert. I guess those were
the SmartHome kernel engineers leaving? How are things?"
@@ -438,11 +439,11 @@ drivers ourselves."
any time. They have busy-waits and arbitrary sleeps all over
the place. It's no wonder they don't upstream the code.
Upstream kernel maintainers would laugh in their faces. Linus
-would be sarcastic at them."
+would definitively be sarcastic at them."
To upstream changes means to send your changes to the person
-or project who maintains the code in public, and get them to
-include the changes in their code. It can be a lot of work,
+or project who maintains the code, and talk them into
+including the changes in their code. It can be a lot of work,
and it opens you up for criticism, but the benefit is much
less maintenance work for you in the long run. Up-streaming
is considered to be the mark of a full participant of open
@@ -491,7 +492,9 @@ help his kernel engineers gave us. I don't mention the code
quality issue, or the lack of SoC documentation. There's no
point in ruffling feathers at this point. I know people
around the industry, and I may be able to get someone to
-leak me a copy of the SoC documentation. That's a little
+leak me a copy of the SoC documentation.
+
+That's a little
unethical, of course. I will first, however, contact the SoC
vendor directly and see if they'll give me a copy of the
documentation for a promise that we'll take care of
@@ -504,7 +507,7 @@ during the lull.
We do not see much of Nina for the next two days. She's
there, when the rest of us arrive in the morning, and still
-there, when everyone else has left. We only see her when she
+there, when everyone else leaves. We only see her when she
comes to the kitchen to drink or eat, and though she seems
happy, we do not engage her in conversation. If she needs
help, she'll tell us, but otherwise she's clearly deep in
@@ -521,12 +524,12 @@ announces that the mini-rack with SmartHome devices is
ready, and that she'd be happy to give a demonstration and
tutorial after she's had lunch. She goes out, and returns
after fifteen minutes with take-out Indian food, and takes
-the food to the kitchen. She takes a carton of milk from a
-cupboard, and sits down at the kitchen table to feast.
+the food to the kitchen. She takes a carton of milk from the
+fridge, and sits down at the kitchen table to feast.
Nina doesn't usually care much what food she eats, but
when she finishes a build or other project, she celebrates
-with her favourites. It's always the same Vindaloo, from the
+with her favorite food. It's always the same Vindaloo, from the
same takeout restaurant, and with a liter of cold milk to
calm her taste buds. Some years ago, the restaurant she had
been using went out of business, and Nina spent a week to
@@ -566,7 +569,7 @@ Nina pauses to take a breath.
"Our normal development rack now has a continuous integration
system set up, which uses the three hubs to run tests on.
-The tests are currently very simple: install a newly build
+The tests are currently very simple: install a newly built
kernel, and reboot, and verify that root can log in via the
serial port within 60 seconds. We'll expand on that as we
start development. In addition, the rack has SmartHome
@@ -586,7 +589,7 @@ where we put the SmartHome stuff to the test."
There is a murmur of approval, and much nodding. Nina looks
satisfied. She goes to her laptop, opens up Inkscape, and
quickly makes a drawing with the words "SmartHome Torture
-Chamber" laid out nicely and using a Germanic font. She
+Chamber" laid out nicely and using a the Comic Sans font. She
punches a key combination, and the printer in a corner of the
lab spits out a few sheets. Nina gets the sheets, which turn
out to be A4 size labels, with the Inkscape design now
@@ -613,12 +616,12 @@ The development infrastructure trunk is outwardly similar to
the SmartHome one that Nina has built, but the contents are
quite different. The rack contains several 1U servers, on
which we can run quite computationally intensive tasks, such
-as compilation, automated tests, continuous integration.
+as compilation, automated tests, and continuous integration.
There's also plenty of storage. We have a git server in
there, plus space for backups of each of our work laptops.
This is important so that if we're stuck on a client site
with bad connectivity, we can have everything we need
-locally in our trunk. There's even a local copy of
+locally in our trunk. There's even local copies of
Wikipedia, Stack Overflow, and the Debian package archive.
As much as possible, anything we may need while at the
@@ -651,8 +654,8 @@ worked around the clock for two days, is that right?"
don't worry, I'm going to go home and rest and recover
next."
-"Good, that's what I want to hear. While we do not track
-work hours here, we do not ever want to see someone burn
+"Good, that's what I want to hear. While we don't track
+work hours here, we don't ever want to see someone burn
out. Me and Robin have both done that at least a couple of
times each, and we won't let it happen to anyone in the
Team."
@@ -698,7 +701,7 @@ likes to throw at us."
of them in the schedule."
"If we don't hit on too many snags, I'm sure we'll have a
-sufficiently working kernel end of next week, and after that
+working kernel end of next week, and after that
we'll start porting our platform to the SmartHome board."
"Excellent. Tell me at once if you hit a snag, OK?"
@@ -748,7 +751,7 @@ This particular type of snag needs to be stopped early and
thoroughly. It will need to be handled with careful
diplomacy so that they walk away from the confrontation
feeling good about themselves. It'd be easy to just show how
-utterly wrong they are and drag their self esteem through a
+utterly wrong they are and drag their self-esteem through a
pile of dung and dance a fandango on their ego with high
heels until they weep, but that would just make it harder to
finish the project together. Every client project needs the
@@ -768,5 +771,5 @@ for the day on the company IRC channel, shut down my laptop,
tidy up my desk, and go home.
I too want to see the new season of Agent Carter. Maybe with
-some take-out Indian food, curled up under a blanket on my
+some take-out food, curled up under a blanket on my
couch, with my cat purring in my lap, or on my shoulder.
diff --git a/draft.tex b/draft.tex
new file mode 100644
index 0000000..6bb86c4
--- /dev/null
+++ b/draft.tex
@@ -0,0 +1,3 @@
+\linespread{1.5}
+\setlength{\parskip}{32pt}%
+\usepackage[none]{hyphenat}
diff --git a/git-mtime.sh b/git-mtime.sh
new file mode 100755
index 0000000..84c9299
--- /dev/null
+++ b/git-mtime.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+# From https://stackoverflow.com/questions/2458042/restore-a-files-modification-time-in-git
+
+set -euo pipefail
+
+rev=HEAD
+for f in $(git ls-tree -r -t --full-name --name-only "$rev")
+do
+ echo "setting mtime for $f"
+ touch -d "$(git log --pretty=format:%cI -1 "$rev" -- "$f")" "$f";
+done
diff --git a/index.mdwn b/index.mdwn
index 6a561e9..3dc5408 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -2,14 +2,12 @@
# Wat?
-"Hacker Noir" is a story about software development, by
-[Lars Wirzenius][]. The story isn't finished yet, but in the process
-of being written. Finished chapters are published on [Patreon][] about
-once a month for supporters, and a month later re-published here.
-The public ones will be announced on [Lars's blog][].
+"Hacker Noir" is a story about software development, by [Lars
+Wirzenius][]. This is the first full draft. It may change in the
+future. It needs to change, there's a lot of things that can be
+improved.
[Lars Wirzenius]: http://liw.fi/
-[Lars's blog]: http://blog.liw.fi/
# Origin story
@@ -20,53 +18,23 @@ There may be contradictions. Retconning in the future is possible.
# Chapters
-* Chapter 1: [[Negotiation]]
-* Chapter 2: [[Development setup phase|devsetup]]
-* Chapter 3: [[First conflict with SmartHome|conflict]]
-* Chapter 4: [[New hardware platform|newhardware]]
+* Chapter 1: [[Accomodation|negotiation]]
+* Chapter 2: [[Assembly|devsetup]]
+* Chapter 3: [[Antagonism|conflict]]
+* Chapter 4: [[Avant-garde|newhardware]]
* Chapter 5: [[Assault]]
* Chapter 6: [[Ambush]]
-* to be continued
+* Chapter 7: [[Arrest]]
+* Chapter 8: [[Audit]]
+* Chapter 9: [[Announcement]]
+
+There is an [epub](noir.epub), [mobi](noir.mobi), and a
+[PDF](noir.pdf) version available.
# Meta
* [[Characters]]
-# Change log
-
-For exact details, look at [git][].
-
-* 2017-01-08: A number language fixes, mostly typos, based on feedback
- from readers. Also from the Emacs spell checker, which the author
- has now learnt how to use. Also fixed CSS to set a maximum width,
- rather than exact width.
-
-* 2017-01-12: Added the origin story.
-
-* 2017-02-01: Added chapter two ([[devsetup]]).
-
-* 2017-02-20: Typo fixes from many people.
-
-* 2017-03-01: Added chapter three ([[conflict]]).
-
-* 2017-03-21: Typo fixes from Pete F
-
-* 2018-03-07: Added chapter four ([[newhardware]]).
-
-* 2018-06-09: Added chapter five ([[assault]]).
-
-* 2018-07-21: Added chapter six ([[ambush]]).
-
-[git]: http://git.liw.fi/cgi-bin/cgit/cgit.cgi/noir.liw.fi/
-
-# Patreon
-
-If you'd like to support me in writing this story, you can do so on my
-[Patreon][]. Doing so is voluntary. I will publish new chapters there
-first, and add them to this public site a month later.
-
-[Patreon]: https://www.patreon.com/user?u=7874725
-
# Legalese
All content on this site is copyrighted by Lars Wirzenius, and
diff --git a/negotiation.mdwn b/negotiation.mdwn
index d1b3a88..a884184 100644
--- a/negotiation.mdwn
+++ b/negotiation.mdwn
@@ -1,4 +1,4 @@
-# The initial negotiation to start project
+# Accomodation
We were sitting in the conference room in our little office.
The mood was tense. The whole team was present, since we
@@ -17,7 +17,7 @@ bank account is getting low. We need income, and we need it
soon, or we won't be paying salaries by Christmas." I love
Robin, but she does need things to be spelled out clearly,
from time to time. Luckily, that's what I'm good at, and
-patience is part of my job. "These guys are flush. They just
+being patient is part of my job. "These guys are flush. They just
got a ton of VC money last week. They're also desperate.
Their whole current product line is broken, and not likely
to survive another security catastrophe. If we play our
@@ -30,7 +30,7 @@ in having my spidey sense tingling?"
"No, I'm apprehensive as well." Andrew is our senior
developer. He's always calm and composed, and as unflappable
-as the Alps in a summer breeze. "Last time we rejected them
+as a cow watching trains. "Last time we rejected them
partly because they're a Silicon Valley style brogrammer
startup, and all that entails."
@@ -66,7 +66,7 @@ new job, and every new client, brings a new group of people
who need to be taught basics of software development
processes, or basic human dignity. Several years ago we
started our own company and one of our core values is that
-we don't work for asses, and we reject potential clients if
+we don't work for arseholes, and we reject potential clients if
we don't like them, either entirely or each team member
separately. This has made our lives much better, but we only
get away with it by being really good at what we do.
@@ -78,8 +78,7 @@ conference room to continue their day. We're between paying
projects, so there's practice runs and studying and
experimentation with new tools going on. I stay, to finish
the meeting minutes for our internal wiki, and to send an
-email to Sam at SmartHomes, Inc, the prospective customer,
-to set up a meeting.
+email to set up a meeting.
-------------------------------------------------------
@@ -104,11 +103,11 @@ way.
This cafe isn't ideal. It's got a hard acoustic environment,
so things echo a bit, and there's usually a bunch of
-Japanese architecture students studying the building, since
-it's designed by Alvar Aalto, the famous Finnish architect.
+Japanese architecture students studying the building. The building
+is designed by Alvar Aalto, the famous Finnish architect.
-Sam from SmartHomes isn't relaxed, but that's probably not
-because of harsh echoes of other people's discussions. He's
+Sam isn't relaxed, but that's probably not
+because of harsh echoes. He's
nervous for his company, and under quite a lot of stress.
He's quite visibly upset. "What's going on? I thought we'd
talked already, and had an understanding. We need some work
@@ -117,7 +116,7 @@ meeting? Why aren't you working and piling up billable
hours? We're not paying for idling away in meetings."
Robin was changing her posture, shifting in her chair. I
-could hear the anger bubbling in her, so I rushed to cut her
+could sense the anger bubbling in her, so I rushed to cut her
off before she said something to drive Sam so far up a tree
I wouldn't be able to talk him down. "I think there's some
misunderstanding. You and I met, and we talked, and I got a
@@ -128,7 +127,7 @@ brought Robin here to aid that discussion, and for technical
depth in case it's needed."
Sam took a deep breath, which clearly calmed him down a bit.
-"What kind of issues?"
+"What issues?"
"To start with, your company doesn't have a strong
reputation for technical quality. On the contrary, generally
@@ -181,7 +180,7 @@ to get blunt with. So far, so good.
"The main issue we have is in fact your corporate culture.
You're a startup, in the worst Silicon Valley style. Almost
-all your people are young and male, and you have a strong macho
+all your people are young white men, and you have a strong macho
culture. Long hours, hard work, hard play, all the hallmarks
of being manly men who win. You got a big pile of venture
capital cash recently, and that won't help. Your culture,
@@ -250,7 +249,7 @@ premises. It's easier if we can talk in person, than doing
everything over email or video calls."
Robin has also, by this time, calmed down a lot, and so when
-she indicates she wants to say something, I give her a
+she rises a finger to tell me she wants to say something, I give her a
little nod of encouragement. "We prefer to work from our own
office, but we've worked on customer premises before. It is
sometimes hard when customer IT isn't co-operative, but we
@@ -287,7 +286,8 @@ Sam's shoulders are hanging. His voice seems defeated.
Robin is clearly having a good time now. "It took me only
half an hour to get into a root shell. You have a telnet
-port open, and as soon as I figured out that, and googled to
+port open, and as soon as I figured out that, and used the Google
+search engine to
find a list of you hard-coded root passwords, I was in.
That's 1970s security, it's not nearly acceptable today.
From my research, you also have no upgrade system, so as
@@ -297,7 +297,7 @@ acceptable in modern times.
"Based on this short black-box evaluation, and pending
discussion with your techies, my initial suggestion is that
-you need a completely new platform for you next generation
+you need a completely new software platform for you next generation
products, one that's built to be secure and updateable. We
have that. You also need processes for preparing and
distributing updates to you users, and to take on the
@@ -357,7 +357,7 @@ botnet when we received it."
I let the quote sink in for about three seconds, and change to the
next slide, which has quotes from Twitter. The kindest is perhaps one
saying a SmartHome hub is the perfect way to let you neighbour's kid
-control your lighting.
+control your heating.
"There's more quotes, but they just continue the theme, and I'd prefer
to not show the ones that are just name-calling and discussing the
@@ -501,7 +501,7 @@ security, took control of their gadgets, and humiliated them."
"Hah. Nina, you're a bit laconic as a storyteller, aren't you?"
-Robin was almost laughing out loud. "She doesn't tell it at all. They
+Robin was laughing out loud. "She doesn't tell it at all. They
were scared of her, she could've had them stand on their heads. Of
course, if we work with them, that may turn out to be a problem. I'm
sure they hate our guts now."
@@ -547,7 +547,7 @@ remember that you're not alone."
"Well, if you're sure I won't ruin everything, I guess I'm OK."
-I stand up to signal an end to the meeting. "This looks like a rough
+I stand up to signal an end to the meeting. "This looks like a
consensus. I'll tell SmartHome we're going to help them. Nina, I'll
ask Sam to provide us with some development hardware. What do we
need?"
@@ -581,7 +581,7 @@ handle hardware. This becomes important when the project reaches a
phase where we want to verify that the devices survive being
forcefully rebooted by cutting power every few seconds for a week.
Nobody wants to do that by hand. It's a thing Nina built for a project
-a few years ago. She now builds a new one pretty much for every new
+a few years ago. She now improves it for pretty much for every new
project. It's not exactly cheap, but it saves a ton of manual work and
also let's us avoid a lot of bugs, which saves a ton of debugging
work, and thus time. We have a reputation of delivering quality, and
diff --git a/newhardware.mdwn b/newhardware.mdwn
index 38737d9..2810267 100644
--- a/newhardware.mdwn
+++ b/newhardware.mdwn
@@ -1,4 +1,4 @@
-# New hardware platform
+# Avant-garde
"What the RUDE WORD, RUDE WORD, RUDE WORD is this?" Anna sits at her
desk, one hand on her mouse, speaking loudly. "ROOOBBIIIINN! Come
@@ -14,7 +14,8 @@ may mean. "Does he say why?"
Anna shakes her head. "Not really. He says, and I quote, 'To align our
customer-facing deliverables with global leaders in leveraging
technology we proactively synchronise our product schedules with Arm
-release road maps.' What a pile of RUDE WORD marketing RUDE WORD."
+release road maps.' What a RUDE WORDING pile of RUDE WORD marketing
+RUDE WORD."
Robin sighs deeply, then slumps down in a chair. "Does he realise that
our project will have to restart from scratch? That all the work done
@@ -24,7 +25,7 @@ deadlines now?"
Anna grimaces. "Of course he doesn't. If they actually do this, it may
mean we lose the project." Robin nods. "And that means we're in a
trash compactor, the walls are moving inward, and something just touched
-my leg. We were already desperate when we landed this project."
+my leg. We were already getting desperate when we landed this project."
Anna nods. "Exactly. I better meet with Sam to try to stop this." She
buries her face in her hands. She sobs once. "I don't know, sometimes
@@ -78,7 +79,7 @@ SmartHome have just let us know they want to update their hardware
platform. I called this meeting to tell you that and for us to discuss
the situation together."
-The room is filled with a cacophony. Anna lets it continue for a
+The room explodes in a cacophony. Anna lets it continue for a
moment, then raises her hand. The room quiets instantly. An outsider
might mistake it for military discipline, but it's a habit borne from
collaborating with the same equals for a long time, and from respect
@@ -89,7 +90,7 @@ what we've done so far. Do we want to do that?"
Robin raises her hand. "I'd like to keep the contract, if we can talk
them into keeping the old hardware platform." She drops her hand. Andy
-and Bert look at each other, nodding. Berg raises his hand. "Andy and
+and Bert look at each other, nodding. Bert raises his hand. "Andy and
I agree. We've put in a lot of effort into the old platform already,
would be a shame to let that go to waste." Andy keeps his hands on the
table, but raises his index finger. "We can start on a new platform,
@@ -102,10 +103,11 @@ hardware platform is?" Anna shakes her head. "Sam wasn't explicit
about that, but my impression is that they're only about to start
designing it. It's not ready for us to port to." Robin grimaces, but
Andy speaks, without indicating he wants a turn. "Erm, really? In that
-case, I don't think we can wait for that."
+case, I don't think we can wait for that." Andy quickly raises, then
+lowers his hand.
Anna stands up. "I think we agree. We can't continue on this contract,
-if they change the hardware platform. It would delay all user land
+if they change the hardware platform. It would delay all userland
software progress too much. It would probably mean we run out of money
before this contract is paid. Frankly, I would expect SmartHome to go
bankrupt before they get the new platform working."
@@ -171,8 +173,8 @@ Anna shakes her head quickly. "No, no, not like that. I just ran into
him the other evening, and we had a few beers. It was nice, but I'm
not getting involved with him again."
-"Good. I mean, it's not like he's a bad egg, but he could maybe mature
-a bit."
+"Good. I mean, it's not like he's a bad egg, but your history with him
+makes me wary."
-----------------------------------------------------------------------------
@@ -217,7 +219,7 @@ yet?"
"Nope, I wanted to wait until we decide to go."
"OK. I'll notify our people today. And tell Sam and his bosses that
-we're coming. Is 15:00 a good time to gather everyone?"
+we're coming. Is 13:00 a good time to gather everyone?"
"Should be. RUDE WORD I don't like this, but needs must."
@@ -232,7 +234,7 @@ They assemble at the office. It's 8 in the morning, and for most of
them this is unusually early. Anna arrives with a car, the team piles
in, and they go to the SmartHome office.
-They arrive, get out of the car, and walk in an organised formation
+They arrive, get out of the car, and walk in formation
into SmartHome HQ and the large meeting room they've visited before.
The SmartHome CEO, Lasse, and other members of top management are
already there, as well as Sam, and several senior developers.
@@ -267,7 +269,7 @@ Robin stands up. She looks around the room. Those who know her, can
see she's angry from the way her lips form a thin straight line. "Sir,
if you hire experts and ignore what they say, you are an imbecile. In
the current situation, your choices are to go bankrupt or to let us
-help your developers save your company. It seems you want to go
+help you save your company. It seems you want to go
bankrupt and make every one of your employees lose their job, while
you can just retire early. Very well, we don't wish to work for you.
Have a good day."
@@ -340,7 +342,7 @@ tea. Bert adds milk and sweetener of choice to each mug. Everyone
takes their mug.
Anna takes a sip. "Well, that was exciting. I think we should process
-what happened together, rather than going home and let everyone
+what happened together, rather than going home and have everyone
marinate in solitude."
Nina shakes her head. "I can't believe he said that. I can't believe I
@@ -374,13 +376,13 @@ eating something helps. We could have lunch together."
Anna?"
"Yeah, let's do that. I'll order from my room. If everyone would
-message me on IRC what kind they want, I'll place the order. The usual
+message me on IRC what they want, I'll place the order. The usual
place."
-----------------------------------------------------------------------------
Pizza has arrived and been consumed. Many words have been said. Much
-anger has been vented.. The Team is leaning back in their chairs,
+anger has been vented. The Team is leaning back in their chairs,
momentarily content and silent. Anna's phone rings. She looks at it.
"It's Sam. I should probably take this." She rises and goes to her
@@ -412,7 +414,7 @@ chance and be open about what's happening here. I hope you won't
spread it around. There's a bit of a civil war happening, and most of
us at SmartHome see that you guys are right and we either make a new,
better product with your help, or we are finished. Some of the older
-guys in upper management are resisting, but the resistance is
+men in upper management are resisting, but the resistance is
crumbling."
Anna is laconic and inexpressive. "OK."
@@ -431,7 +433,7 @@ overnight."
"I can be there in fifteen minutes."
-"OK. We'll talk and I'll let you know if you should come."
+"Make it sixty. We'll talk and I'll let you know if you shouldn't come."
"Thanks."
@@ -440,6 +442,7 @@ overnight."
The Team has gathered in the kitchen again. A new round of tea has
been brewed and served.
+Anna stands up.
"Okay, so this is a bit of an interesting development. Sam called. He
says that SmartHost is having a civil war and he wants to know what it
would take to bring us back, or least re-open negotiations with them.
@@ -451,7 +454,7 @@ Nina raises her hand. "Will Lasse still be the CEO?"
much for us to ask for them to get rid of him entirely. He is the
founder, after all."
-Nina chuckles. "Shame, but I see your point. But at least I would
+Nina make a grimace. "Shame, but I see your point. But I
prefer him to not be involved in this project, or have any say in it."
Robin raises her mug and sips. "Mmmm, I like how you think,
@@ -480,7 +483,7 @@ realised. But given the ground rules as you outlined, and given that
we have the same need of money, I'm willing to try again." She raises
her hand.
-"Good, that makes us unanimous. I agree we need to treat them with
+"Good, that makes us unanimous. This situation needs that. I agree we need to treat them with
care. I'd like to invite Sam to our office today to discuss this and
explain our conditions. Everyone OK with that."
diff --git a/noir.epub b/noir.epub
new file mode 100644
index 0000000..ef030d1
--- /dev/null
+++ b/noir.epub
Binary files differ
diff --git a/noir.mobi b/noir.mobi
new file mode 100644
index 0000000..61d9299
--- /dev/null
+++ b/noir.mobi
Binary files differ
diff --git a/noir.pdf b/noir.pdf
new file mode 100644
index 0000000..3b8afe8
--- /dev/null
+++ b/noir.pdf
Binary files differ
diff --git a/preamble.mdwn b/preamble.mdwn
index a7a78f8..8bbf632 100644
--- a/preamble.mdwn
+++ b/preamble.mdwn
@@ -2,8 +2,10 @@
title: Hacker Noir
author: Lars Wirzenius
date: work in progress
+documentclass: book
...
+\newpage
This work is copyrighted by Lars Wirzenius, and licensed under a <a
rel="license"
@@ -13,24 +15,13 @@ Attribution-Share Alike 4.0 Unported License</a>.
**Acknowlegements**
-I have a Patreon project open for this book. It's not about making a
-lot of money, but about getting encouragement: if someone's willing to
-give me even just a little money, it makes me think they like what I
-write, and that encourages me to write more. There is a reward level
-where if you give enough, you get your name in the book. This section
-is for that.
-
-The people who enthusiastically give me enough money to have their
-names in the book are:
+I used to have a Patreon project open for this book. The people who
+enthusiastically give me enough money to have their names in the book
+are:
* Mauri Sahlberg
* Rob Kendrick
-In addition there are several who donate less.
-
-I can't express how much it means to me that people appreciate my
-writing. It's almost as if I was a real writer, which has been a dream
-of mine since I was a teenager.
+In addition there are several who donated less.
-I hasten to clarify that I appreciate all readers, whether they give
-me enough to be named here, or less, or nothing at all.
+Thank you all.
diff --git a/style.css b/style.css
index 5930e95..9252d88 100644
--- a/style.css
+++ b/style.css
@@ -4,21 +4,40 @@ html {
margin-left: 3em;
margin-right: 2em;
margin-top: 2em;
+}
+
+body {
+ display: grid;
+ grid-template-columns: 1em auto 2em;
+}
+
+.page {
+ grid-column-start: 2;
+ grid-column-end: 3;
max-width: 60em;
}
-form#searchform {
- font-family: monospace;
- text-align: right;
+h1, h2, h3, h4, h5, h6 {
+ font-family: sans-serif;
+ font-weight: bold;
+ margin-top: 2em;
}
-div.actions {
- font-family: monospace;
- text-align: right;
+h1 {
+ font-size: 150%;
+}
+
+h2 {
+ font-size: 120%;
+}
+
+h3 {
+ font-size: 100%;
}
-div.actions ul, div.actions li {
- display: inline;
+ul li, ol li {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
}
div.pageheader {
@@ -26,7 +45,7 @@ div.pageheader {
margin-bottom: 2em;
}
-div.pageheader span.title {
+.pageheader span.title {
display: block;
font-size: 200%;
font-weight: bold;
@@ -42,140 +61,90 @@ div.pagefooter {
margin-top: 3em;
}
-div#pagebody {
-}
-
span.date {
font-family: monospace;
}
-div.inlineheader span.header {
+.inlineheader {
display: block;
font-family: sans-serif;
font-size: 150%;
font-weight: bold;
}
-div.inlinepage {
+.inlinepage {
margin-top: 3em;
margin-bottom: 3em;
}
-div.inlinefooter {
+.inlinefooter {
font-family: monospace;
}
-div.sidebar {
- display: none;
+.float_right {
float: right;
- max-width: 10em;
- margin-top: 0;
- margin-bottom: 0;
- margin-right: 0;
margin-left: 1em;
+ margin-bottom: 1em;
}
-.floatTR {
- float: right;
- margin-left: 1em;
- margin-bottom: 1em;
+span.archivepagedate {
+ font-family: monospace;
}
-h1, h2, h3, h4, h5, h6 {
+/* orange feed button */
+.feedbutton {
+ background: #ff6600;
+ color: white !important;
+ border-left: 1px solid #cc9966;
+ border-top: 1px solid #ccaa99;
+ border-right: 1px solid #993300;
+ border-bottom: 1px solid #331100;
+ padding: 0px 0.5em 0px 0.5em;
font-family: sans-serif;
font-weight: bold;
- margin-top: 2em;
-}
-
-h1 {
- font-size: 150%;
+ font-size: small;
+ text-decoration: none;
+ margin-top: 1em;
}
-
-h2 {
- font-size: 120%;
+.feedbutton:hover {
+ color: white !important;
+ background: #ff9900;
}
-h3 {
- font-size: 100%;
-}
+div.wisdom {
+ margin-left: 100px;
+ margin-bottom: 50px;
+ padding-bottom: 0;
+ border-bottom: 0;
-ul li, ol li {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
}
-div#comments div.feedlink {
- margin-top: 2em;
+div.wisdom p.quote {
+ font-size: 200%;
+ margin-bottom: 0;
+ padding-bottom: 0;
+ border-bottom: 0;
}
-div.comment {
- margin-top: 2em;
-}
+.smallestPC { font-size: 80%; }
+.smallPC { font-size: 100%; }
+.normalPC { font-size: 120%; }
+.bigPC { font-size: 150%; }
+.biggestPC { font-size: 200%; }
-div.comment-subject {
- margin-bottom: 1em;
- font-size: 120%;
- font-family: sans-serif;
-}
-div.comment-header {
- margin-top: 1em;
+table {
+ border: 0px;
+ width: 100%;
}
-div.archivepage {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
+th {
+ font-weight: bold;
}
-span.archivepagedate {
- font-family: monospace;
+tr {
}
-
-
-/* The following are for openid logins in Ikiwiki. Copied from
- ikiwiki. */
-
-input#openid_identifier {
- background: url(wikiicons/openidlogin-bg.gif) no-repeat;
- background-color: #fff;
- background-position: 0 50%;
- color: #000;
- padding-left: 18px;
-}
-/* openid selector */
-#openid_choice {
- display: none;
-}
-#openid_input_area {
- clear: both;
- padding: 10px;
-}
-#openid_btns, #openid_btns br {
- clear: both;
-}
-#openid_highlight {
- background-color: black;
- float: left;
-}
-.openid_large_btn {
- padding: 1em 1.5em;
- border: 1px solid #DDD;
- margin: 3px;
- float: left;
-}
-.openid_small_btn {
- padding: 4px 4px;
- border: 1px solid #DDD;
- margin: 3px;
- float: left;
-}
-a.openid_large_btn:focus {
- outline: none;
-}
-a.openid_large_btn:focus {
- outline-style: none;
-}
-.openid_selected {
- border: 4px solid #DDD;
+tr:nth-child(even) {
+ background-color: #f2f2f2;
}
diff --git a/templates/archivepage.tmpl b/templates/archivepage.tmpl
new file mode 100644
index 0000000..3e0bd9b
--- /dev/null
+++ b/templates/archivepage.tmpl
@@ -0,0 +1,19 @@
+<div class="archivepage">
+<TMPL_IF PERMALINK>
+<a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a><br />
+<TMPL_ELSE>
+<a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a><br />
+</TMPL_IF>
+<span class="archivepagedate">
+Posted <TMPL_VAR CTIME>
+<TMPL_IF AUTHOR>
+by <span class="author">
+<TMPL_IF AUTHORURL>
+<a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+<TMPL_ELSE>
+<TMPL_VAR AUTHOR>
+</TMPL_IF>
+</span>
+</TMPL_IF>
+</span>
+</div>
diff --git a/templates/atomitem.tmpl b/templates/atomitem.tmpl
new file mode 100644
index 0000000..9b056e0
--- /dev/null
+++ b/templates/atomitem.tmpl
@@ -0,0 +1,49 @@
+<entry>
+ <title><TMPL_VAR TITLE></title>
+<TMPL_IF GUID>
+ <id><TMPL_VAR GUID></id>
+<TMPL_ELSE>
+ <id><TMPL_VAR URL></id>
+</TMPL_IF>
+ <link href="<TMPL_VAR PERMALINK>"/>
+<TMPL_IF AUTHOR>
+ <author><name><TMPL_VAR AUTHOR ESCAPE=HTML></name></author>
+</TMPL_IF>
+<TMPL_IF COPYRIGHT>
+ <rights type="html" xml:lang="en">
+<TMPL_IF LICENSE>
+ <TMPL_VAR LICENSE ESCAPE=HTML>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+<TMPL_ELSE>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+</TMPL_IF>
+ </rights>
+<TMPL_ELSE>
+<TMPL_IF LICENSE>
+ <rights type="html" xml:lang="en">
+ <TMPL_VAR LICENSE ESCAPE=HTML>
+ </rights>
+</TMPL_IF>
+</TMPL_IF>
+<TMPL_IF CATEGORIES>
+<TMPL_LOOP CATEGORIES>
+ <category term="<TMPL_VAR CATEGORY>" />
+</TMPL_LOOP>
+</TMPL_IF>
+ <updated><TMPL_VAR MDATE_3339></updated>
+ <published><TMPL_VAR CDATE_3339></published>
+<TMPL_IF ENCLOSURE>
+ <link rel="enclosure" type="<TMPL_VAR TYPE>" href="<TMPL_VAR ENCLOSURE>" length="<TMPL_VAR LENGTH>" />
+</TMPL_IF>
+<TMPL_UNLESS SIMPLEPODCAST>
+ <content type="html" xml:lang="en">
+ <TMPL_VAR CONTENT ESCAPE=HTML>
+ </content>
+</TMPL_UNLESS>
+<TMPL_IF COMMENTSURL>
+ <link rel="comments" href="<TMPL_VAR COMMENTSURL>" type="text/html" />
+</TMPL_IF>
+<TMPL_IF ATOMCOMMENTSURL>
+ <link rel="comments" href="<TMPL_VAR ATOMCOMMENTSURL>" type="application/atom+xml" />
+</TMPL_IF>
+</entry>
diff --git a/templates/atompage.tmpl b/templates/atompage.tmpl
new file mode 100644
index 0000000..3cdd71d
--- /dev/null
+++ b/templates/atompage.tmpl
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<feed xmlns="http://www.w3.org/2005/Atom">
+<title><TMPL_VAR TITLE></title>
+<link href="<TMPL_VAR PAGEURL>"/>
+<link href="<TMPL_VAR FEEDURL>" rel="self" type="application/atom+xml"/>
+<author>
+<TMPL_IF AUTHOR>
+<name><TMPL_VAR AUTHOR></name>
+<TMPL_ELSE>
+<name><TMPL_VAR WIKINAME></name>
+</TMPL_IF>
+</author>
+<TMPL_IF COPYRIGHT>
+<rights type="html" xml:lang="en">
+<TMPL_IF LICENSE>
+ <TMPL_VAR LICENSE>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+<TMPL_ELSE>
+ <TMPL_VAR COPYRIGHT ESCAPE=HTML>
+</TMPL_IF>
+</rights>
+<TMPL_ELSE>
+<TMPL_IF LICENSE>
+<rights type="html">
+ <TMPL_VAR LICENSE ESCAPE=HTML>
+</rights>
+</TMPL_IF>
+</TMPL_IF>
+<TMPL_IF GUID>
+<id><TMPL_VAR GUID></id>
+<TMPL_ELSE>
+<id><TMPL_VAR PAGEURL></id>
+</TMPL_IF>
+<subtitle type="html"><TMPL_VAR FEEDDESC ESCAPE=HTML></subtitle>
+<generator uri="http://ikiwiki.info/">ikiwiki</generator>
+<updated><TMPL_VAR FEEDDATE></updated>
+<TMPL_VAR CONTENT>
+</feed>
diff --git a/templates/feedlink.tmpl b/templates/feedlink.tmpl
new file mode 100644
index 0000000..c67ad9c
--- /dev/null
+++ b/templates/feedlink.tmpl
@@ -0,0 +1,8 @@
+<div <TMPL_IF ID>id="<TMPL_VAR ID ESCAPE=HTML>"</TMPL_IF> class="feedlink">
+<TMPL_IF RSSURL>
+<a class="feedbutton" type="application/rss+xml" rel="alternate" title="<TMPL_VAR RSSDESC>" href="<TMPL_VAR RSSURL>">RSS</a>
+</TMPL_IF>
+<TMPL_IF ATOMURL>
+<a class="feedbutton" type="application/atom+xml" rel="alternate" title="<TMPL_VAR ATOMDESC>" href="<TMPL_VAR ATOMURL>">Atom</a>
+</TMPL_IF>
+</div>
diff --git a/templates/inlinepage.tmpl b/templates/inlinepage.tmpl
new file mode 100644
index 0000000..37d7e48
--- /dev/null
+++ b/templates/inlinepage.tmpl
@@ -0,0 +1,78 @@
+<TMPL_IF HTML5><article class="inlinepage"><TMPL_ELSE><div class="inlinepage"></TMPL_IF>
+
+<TMPL_IF HTML5><section class="inlineheader"><TMPL_ELSE><div class="inlineheader"></TMPL_IF>
+<TMPL_IF AUTHOR>
+<span class="author">
+<TMPL_IF AUTHORURL>
+<a href="<TMPL_VAR AUTHORURL>"><TMPL_VAR AUTHOR></a>
+<TMPL_ELSE>
+<TMPL_VAR AUTHOR>
+</TMPL_IF>
+</span>
+</TMPL_IF>
+<TMPL_IF HTML5><header class="header"><TMPL_ELSE><span class="header"></TMPL_IF>
+<TMPL_IF PERMALINK>
+<a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a>
+<TMPL_ELSE>
+<a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a>
+</TMPL_IF>
+<TMPL_IF HTML5></header><TMPL_ELSE></span></TMPL_IF>
+<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
+
+<TMPL_IF HTML5><section class="inlinecontent"><TMPL_ELSE><div class="inlinecontent"></TMPL_IF>
+<TMPL_VAR CONTENT>
+<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
+
+<TMPL_IF ENCLOSURE>
+<TMPL_IF HTML5><section id="inlineenclosure"><TMPL_ELSE><div id="inlineenclosure"></TMPL_IF>
+<a href="<TMPL_VAR ENCLOSURE>">Download</a>
+<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
+</TMPL_IF>
+
+<TMPL_IF HTML5><footer class="inlinefooter"><TMPL_ELSE><div class="inlinefooter"></TMPL_IF>
+
+<span class="pagedate">
+Posted <TMPL_VAR CTIME>
+</span>
+
+<TMPL_IF TAGS>
+<TMPL_IF HTML5><nav class="tags"><TMPL_ELSE><span class="tags"></TMPL_IF>
+Tags:
+<TMPL_LOOP TAGS>
+<TMPL_VAR LINK>
+</TMPL_LOOP>
+<TMPL_IF HTML5></nav><TMPL_ELSE></span></TMPL_IF>
+</TMPL_IF>
+
+<TMPL_IF COPYRIGHT>
+<div class="pagecopyright">
+<TMPL_VAR COPYRIGHT>
+</div>
+</TMPL_IF>
+
+<TMPL_IF LICENSE>
+<div class="pagelicense">
+License: <TMPL_VAR LICENSE>
+</div>
+</TMPL_IF>
+
+<TMPL_IF HAVE_ACTIONS>
+<TMPL_IF HTML5><nav class="actions"><TMPL_ELSE><div class="actions"></TMPL_IF>
+<ul>
+<TMPL_IF EDITURL>
+<li><a href="<TMPL_VAR EDITURL>" rel="nofollow">Edit</a></li>
+</TMPL_IF>
+<TMPL_IF COMMENTSLINK>
+<li><TMPL_VAR COMMENTSLINK></li>
+<TMPL_ELSE>
+<TMPL_IF DISCUSSIONLINK>
+<li><TMPL_VAR DISCUSSIONLINK></li>
+</TMPL_IF>
+</TMPL_IF>
+</ul>
+<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
+</TMPL_IF>
+
+<TMPL_IF HTML5></footer><TMPL_ELSE></div></TMPL_IF>
+
+<TMPL_IF HTML5></article><TMPL_ELSE></div></TMPL_IF>
diff --git a/templates/page.tmpl b/templates/page.tmpl
new file mode 100644
index 0000000..849dd7d
--- /dev/null
+++ b/templates/page.tmpl
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<TMPL_IF HTML_LANG_CODE><html lang="<TMPL_VAR HTML_LANG_CODE>" dir="<TMPL_VAR HTML_LANG_DIR>" xmlns="http://www.w3.org/1999/xhtml"><TMPL_ELSE><html xmlns="http://www.w3.org/1999/xhtml"></TMPL_IF>
+<head>
+ <meta charset="utf-8" />
+ <title><TMPL_VAR TITLE></title>
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="<TMPL_VAR BASEURL>style.css" type="text/css" />
+</head>
+<body lang=en>
+ <article class="page">
+ <section class="pageheader">
+ <header class="header">
+ <span>
+ <span class="parentlinks">
+ <TMPL_LOOP PARENTLINKS>
+ <a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a> &rarr;
+ </TMPL_LOOP>
+ </span>
+ <span class="title">
+ <TMPL_VAR TITLE>
+ </span>
+
+<TMPL_IF TAGS>
+<nav class="tags">
+<TMPL_LOOP TAGS>
+<TMPL_VAR LINK>
+</TMPL_LOOP>
+</nav>
+</TMPL_IF>
+
+ </span>
+ </header>
+ </section>
+
+ <TMPL_IF SIDEBAR>
+ <aside class="sidebar"><TMPL_VAR SIDEBAR></aside>
+ </TMPL_IF>
+
+ <div id="pagebody">
+ <section>
+ <TMPL_VAR CONTENT>
+ </section>
+ </div>
+
+ <footer id="footer" class="pagefooter" role="contentinfo">
+ <nav id="pageinfo">
+ <div class="pagedate">Last edited <TMPL_VAR MTIME></div>
+ </nav>
+ </footer>
+ </article>
+</body>
+</html>
diff --git a/templates/rssitem.tmpl b/templates/rssitem.tmpl
new file mode 100644
index 0000000..bb03ca5
--- /dev/null
+++ b/templates/rssitem.tmpl
@@ -0,0 +1,28 @@
+<item>
+ <title><TMPL_VAR TITLE></title>
+<TMPL_IF GUID>
+ <guid isPermaLink="false"><TMPL_VAR GUID></guid>
+<TMPL_ELSE>
+ <guid isPermaLink="false"><TMPL_VAR URL></guid>
+</TMPL_IF>
+ <link><TMPL_VAR PERMALINK></link>
+<TMPL_IF AUTHOR>
+ <dc:creator><TMPL_VAR AUTHOR ESCAPE=HTML></dc:creator>
+</TMPL_IF>
+<TMPL_IF CATEGORIES>
+<TMPL_LOOP CATEGORIES>
+ <category><TMPL_VAR CATEGORY></category>
+</TMPL_LOOP>
+</TMPL_IF>
+ <pubDate><TMPL_VAR CDATE_822></pubDate>
+ <dcterms:modified><TMPL_VAR MDATE_3339></dcterms:modified>
+<TMPL_IF ENCLOSURE>
+ <enclosure url="<TMPL_VAR ENCLOSURE>" type="<TMPL_VAR TYPE>" length="<TMPL_VAR LENGTH>" />
+</TMPL_IF>
+<TMPL_UNLESS SIMPLEPODCAST>
+ <description><TMPL_VAR CONTENT ESCAPE=HTML></description>
+</TMPL_UNLESS>
+<TMPL_IF COMMENTSURL>
+ <comments><TMPL_VAR COMMENTSURL></comments>
+</TMPL_IF>
+</item>
diff --git a/templates/rsspage.tmpl b/templates/rsspage.tmpl
new file mode 100644
index 0000000..d07ecef
--- /dev/null
+++ b/templates/rsspage.tmpl
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<rss version="2.0"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:dcterms="http://purl.org/dc/terms/"
+ xmlns:atom="http://www.w3.org/2005/Atom">
+<channel>
+<title><TMPL_VAR TITLE></title>
+<link><TMPL_VAR PAGEURL></link>
+<atom:link href="<TMPL_VAR FEEDURL>" rel="self" type="application/rss+xml"/>
+<TMPL_IF COPYRIGHT>
+<copyright><TMPL_VAR COPYRIGHT ESCAPE=HTML></copyright>
+</TMPL_IF>
+<description><TMPL_VAR FEEDDESC ESCAPE=HTML></description>
+<generator>ikiwiki</generator>
+<pubDate><TMPL_VAR FEEDDATE_822></pubDate>
+<TMPL_VAR CONTENT>
+</channel>
+</rss>
diff --git a/templates/titlepage.tmpl b/templates/titlepage.tmpl
new file mode 100644
index 0000000..6326bab
--- /dev/null
+++ b/templates/titlepage.tmpl
@@ -0,0 +1,7 @@
+<p>
+<TMPL_IF PERMALINK>
+<a href="<TMPL_VAR PERMALINK>"><TMPL_VAR TITLE></a>
+<TMPL_ELSE>
+<a href="<TMPL_VAR PAGEURL>"><TMPL_VAR TITLE></a>
+</TMPL_IF>
+</p>