Ron Toland
About Canada Writing Updates Recently Read Photos Also on Micro.blog
  • Writing the Breakout Novel by Donald Maas

    Essential. Maas describes the elements of a “breakout” novel, showing how to make any plot or story more compelling. He pulls examples from recent (well, recent to the year 2000, which is when the book was written) novels to illustrate each of his points, and even has exercises in each chapter you can do for your own novel.

    I’m already mixing in his approach as I prepare for NaNoWriMo. It’s given me another set of questions to ask about my characters, plot, and setting, to help me push them to a higher level.

    Three things I learned about writing:

    • People have been talking about the death of the mid-list since the 1970s. Don't let it phase you.
    • Escalating stakes doesn't mean making the one danger greater. It means adding more, different, dangers for the protagonist.
    • Characters need to be larger-than-life. Find the extraordinary in ordinary people, and bring that to life.
     
    → 5:00 AM, Oct 30
  • Murder on the Orient Express by Agatha Christie

    Masterful. It’s a classic for a reason: a locked-room mystery on an entire train, that builds slowly through lie after lie until the truth comes rushing out all at once.

    Damn, but Christie was good.

    Three things I learned about writing:

    • Skip over the dialog that doesn't matter. Sometimes it's enough just to say "so-and-so made a suitable response."
    • Even adventures that get stumbled into have to be driven by the protagonist's choices. Poirot doesn't ask for the mystery, but he deliberately pursues it to the end, because that's who he is.
    • Put the description at the start of the scene, briefly. If the position of something isn't important, leave it out. It's enough to report that "there were pencils and paper," we don't always need to know exactly where everything is.
    → 5:00 AM, Oct 23
  • Back to Basics

    Realized a few weeks back that I wasn’t making the progress on the short stories that I wanted to. And I wasn’t making any progress on editing the second novel.

    And NaNoWriMo is coming.

    At first, I made the usual excuses to myself – I’ve lost my morning hour to write, I can catch up on the weekends – but I knew the real reason: fear.

    Fear that I wasn’t going fast enough. Fear that I wasn’t writing stories that were good enough. Fear that without an hour to write in, I wouldn’t be able to get anything done.

    So I’ve gone back to an old habit: write every day. I have a reminder in my phone, a little task that I can only check off when I’ve done some writing that day.

    How much doesn’t matter. 100 words, 250 words, 400 words, don’t care. So long as I write something.

    And it’s working. I finished the first draft of one short story early this week, and I’ll have a draft of a second story finished this weekend. When those two are done, I can start planning the NaNoWriMo novel.

    So I keep telling myself: Step by step, day by day. One word at a time.

     

    → 5:00 AM, Oct 20
  • How to Fix: Blade Runner 2049

    What Went Wrong

    Almost nothing. This is a gorgeous movie, an obvious labor of love that evokes the spirit and setting of the original flawlessly.

    And yet. There were some plot points that didn’t quite add up for me. Some sour notes in this otherwise perfectly bittersweet symphony of a movie.

    Take Jared Leto. No, I mean take him away, please. He’s too young to be playing the character of Wallace, who, if he was saving the world in the mid–2020s, should be in his mid-forties by the time the movie starts. Leto sports a beard, true, but that doesn’t make him look any older. Instead, he looks like a kid that shaved off his dad’s beard and glued it on backwards. Threw me out of the setting every time he was on-screen.

    Then there’s the rebels. They pop out of the woodwork late in the third act, and we’re supposed to believe they not only have a plan for a rebellion, but they’re about to execute it…if they can just…get…more…time. And that requires killing a human that doesn’t know anything about them? Because any knowledge Deckard may have had is about three decades out of date.

    Finally, Joe’s “conversion” to the rebel cause is a little sudden. Their leader gives him at the end is just a few sentences. Too slender a reed to hang a turncoat on.

    How to Fix It

    Fixing Wallace’s character is easy: recast him. There’s plenty of middle-aged actors that could give the role the gravitas and menace it deserves. Jude Law. Idris Elba. Mads Mikkelsen. Pick one. (I think it’d be interesting to see the role gender-flipped, as well, though some of the commentary on man-reduces-woman-to-just-her-reproductive-function would be lost, in that case)

    Fixing the rebels is harder.

    The simplest way would be to just drop that plot thread altogether. It’s only given a few minutes of screen time, and it’d be just as convincing for them to be concerned for the child on its own merits, as well as worried about what Wallace will do if he masters replicant reproduction (a line like “Imagine it. An infinite number of slaves, living forever, never their own.” would fit in fine).

    But I think the best way would be for the rebels to reveal to Joe that there’s not just one replicant child. During Freysa’s “join us” speech, she explains that Rachel and Deckard’s baby was just “the first of many.” She steps back, and we get that overhead shot of Replicant after Replicant standing there, all about Joe’s age. Freysa explains that once Rachel and Deckard showed it could be done, they made others, and hid them, too.

    And there’s more: because they had real childhoods, the second-generation Replicants can pass the Replicant tests as human. They’re free.

    When they have enough for their own off-world colony, they’ll pick some new planet and settle it themselves: a new world, where no Replicant will ever be a slave, ever again.

    But that dream will be destroyed if Wallace gets his hands on that first child.

    That’s the cause that Freysa and the others were willing to die for. Not one child, but many. Not some far-off rebellion, but a long-waited-for escape.

    → 5:00 AM, Oct 19
  • X vs Y by Eve Epstein & Leonora Epstein

    A cracking good read. Illuminates the relationship between Gen X and Gen Y, something that’s always felt a little slippery to me (as someone born in 1979, often thrown in with the Millennials but identifying with Gen X).

    Filled with moments that made me nod along (the movie list for Gen X), and others that showed me a corner of the 90s I didn’t know existed (Sassy magazine). The book was clearly a work of love for both Eve and Leonora, and it shows.

    Three things I learned:

    • Titanic was a huge movie for Gen Y. What I remember as just solid Oscar-bait was apparently perfectly tuned to imprint on young Gen Y brains.
    • Clueless can be read as not just a great adaption of Emma, but also as a love story between Gen Y (Cher) and Gen X (Josh), reflecting the complicated relationship between the two generations.
    • Complaining about the current tech-driven dating scene is common to Gen Y, though none of them would want to go back to the way things were before.
    → 5:00 AM, Oct 18
  • Notes from Clojure/Conj 2017

    It was a good Conj. Saw several friends and former co-workers of mine, heard some great talks about machine learning, and got some good ideas to take back to my current gig.

    There were some dud talks, too, and others that promised one (awesome) thing and delivered another (boring) thing, but overall it’s inspiring to see how far Clojure has come in just ten years.

    My notes from the conference:

    DAY ONE

    KEYNOTE FROM Rich Hickey: Effective Programs, or: 10 years of Clojure

    • clojure released 10 years ago
    • never thought more than 100 people would use it
    • clojure is opinionated
      • few idioms, strongly supported
      • born out of the pain of experience
    • had been programming for 18 years when wrote clojure, mostly in c++, java, and common lisp
    • almost every project used a database
    • was struck by two language designers that talked disparagingly of databases, said they’d never used them
    • situated programs
      • run for long time
      • data-driven
      • have memory that usually resides in db
      • have to handle the weirdness of reality (ex: “two-fer tuesday” for radio station scheduling)
      • interact with other systems and humans
      • leverage code written by others (libraries)
    • effective: producing the intended result
      • prefers above the word “correctness”, none of his programs ever cared about correctness
    • but: what is computing about?
      • making computers effective in the world
      • computers are effective in the same way people are:
        • generate predictions from experience
        • enable good decisions
      • experience => information => facts
    • programming is NOT about itself, or just algorithms
    • programs are dominated by information processing
    • but that’s not all: when we start talking to the database or other libraries, we need different protocols to talk to them
    • but there’s more! everything continues to mutate over time (db changes, requirements change, libraries change, etc)
    • we aspire to write general purpose languages, but will get very different results depending on your target (phone switches, device drivers, etc)
    • clojure written for information-driven situated programs
    • clojure design objectives
      • create programs out of simpler stuff
      • want a low cognitive load for the language
      • a lisp you can use instead of java/c# (his common lisp programs were never allowed to run in production)
    • says classes and algebraic types are terrible for the information programming problem, claims there are no first-class names, and nothing is composable
    • in contrast to java’s multitude of classes and haskell’s multitude of types, clojure says “just use maps”
    • says pattern matching doesn’t scale, flowing type information between programs is a major source of coupling and brittleness
    • positional semantics (arg-lists) don’t scale, eventually you get a function with 17 args, and no one wants to use it
    • sees passing maps as args as a way to attach names to things, thinks it’s superior to positional args or typed args
    • “types are an anti-pattern for program maintenance”
    • using maps means you can deal with them on a need-to-know basis
    • things he left out deliberately:
      • parochialism: data types
      • “rdf got it right”, allows merging data from different sources, without regard for how the schemas differ
      • “more elaborate your type system, more parochial the types”
      • in clojure, namespace-qualified keys allow data merging without worrying about colliding schemas (should use the reverse-domain scheme, same as java, but not all clojure libraries do)
      • another point: when data goes out over the wire, it’s simple: strings, vectors, maps. clojure aims to have you program the same inside as outside
    • smalltalk and common lisp: both languages that were designed by people for working programmers, and it shows
      • surprisingly, the jvm has a similar sensibility (though java itself doesn’t)
    • also wanted to nail concurrency
      • functional gets you 90% of the way there
    • pulled out the good parts of lisp
    • fixed the bad parts: not everything is a list, packages are bad, cons cell is mutable, lists were kind of functional, but not really
    • edn data model: values only, the heart of clojure, compatible with other languages, too
    • static types: basically disagrees with everything from the Joy of Types talk
    • spec: clojure is dynamic for good reasons, it’s not arbitrary, but if you want checking, it should be your choice, both to use it at all and where to use it
    Learning Clojure and Clojurescript by Playing a Game
    • inspired by the gin rummy card game example in dr scheme for the scheme programming language
    • found the java.awt.Robot class, which can take screenshots and move the mouse, click things
    • decided to combine the two, build a robot that could play gin rummy
    • robot takes a screenshot, finds the cards, their edges, and which ones they are, then plays the game
    • lessons learned:
      • java interop was great
    • when clojurescript came out, decided to rebuild it, but in the browser
    • robot still functions independently, but now takes screenshot of the browser-based game
    • built a third version with datomic as a db to store state, allowing two clients to play against each other
    • absolutely loves the “time travel” aspects of datomic
    • also loves pedestal
    Bayesian Data Analysis in Clojure
    • using clojure for about two years
    • developed toolkit for doing bayesian statistics in clojure
    • why clojure?
      • not as many existing tools ass julia or R
      • but: easier to develop new libraries than in julia (and most certainly R)
      • other stats languages like matlab and R don’t require much programming knowledge to get started, but harder to dev new tools in them
    • michaellindon/distributions
      • open-source clojure lib for generating and working with probability distributions in clojure
      • can also provide data and prior to get posterior distribution
      • and do posterior-predictive distributions
    • wrote a way to generate random functions over a set of points (for trying to match noisy non-linear data)
    • was easy in clojure, because of lazy evaluation (can treat the function as defined over an infinite vector, and only pull out the values we need, without blowing up)
    • …insert lots of math that i couldn’t follow…
    Building Machine Learning Models with Clojure and Cortex
    • came from a python background for machine learning
    • thinks there’s a good intersection between functional programming and machine learning
    • will show how to build a baby classification model in clojure
    • expert systems: dominant theory for AI through 2010s
      • limitations: sometimes we don’t know the rules, and sometimes we don’t know how to teach a computer the rules (even if we can articulate them)
    • can think of the goal of machine learning as being to learn the function F that, when applied to a set of inputs, will produce the correct outputs (labels) for the data
    • power of neural nets: assume that they can make accurate approximations for a function of any dimensionality (using simpler pieces)
    • goal of neural nets is to learn the right coefficients or weights for each of the factors that affect the final label
    • deep learning: a “fat” neural net…basically a series of layers of perceptrons between the input and output
    • why clojure? we already have a lot of good tools in other languages for doing machine learning: tensorflow, caffe, theano, torch, deeplearning4j
    • functional composition: maps well to neural nets and perceptrons
    • also maps well to basically any ML pipeline: data loading, feature extraction, data shuffling, sampling, recursive feedback loop for building the model, etc
    • clojure really strong for data processing, which is a large part of each step of the ML pipeline
      • ex: lazy sequences really help when processing batches of data multiple times
      • can also do everything we need with just the built-in data structures
    • cortex: meant to be the theano of clojure
      • basically: import everything from it, let it do the heavy lifting
    • backend: compute lib executes on both cpu and gpu
    • implements as much of neural nets as possible in pure clojure
    • meant to be highly transparent and highly customizable
    • cortex represents neural nets as DAG, just like tensorflow
      • nodes, edges, buffers, streams
    • basically, a map of maps
      • can go in at any time and see exactly what all the parameters are, for everything
    • basic steps to building model:
      • load and process data (most time consuming step until you get to tuning the model)
      • define minimal description of the model
      • build full network from that description and train it on the model
    • for example: chose a credit card fraud dataset
    Clojure: Scaling the Event Stream
    • director, programmer of his own company
    • recommends ccm-clj for cassandra-clojure interaction
    • expertise: high-availability streaming systems (for smallish clients)
    • systems he builds deal with “inconvenient” sized data for non-apple-sized clients
    • has own company: troy west, founded three years ago
    • one client: processes billions of emails, logs 10–100 events per email, multiple systems log in different formats, 5K–50K event/s
    • 10–100 TB of data
    • originally, everything logged on disk for analysis after the fact
    • requirements: convert events into meaning, support ad-hoc querying, generate reports, do real-time analysis and alerting, and do it all without falling over at scale or losing uptime
    • early observations:
      • each stream is a seq of immutable facts
      • want to index the stream
      • want to keep the original events
      • want idempotent writes
      • just transforming data
    • originally reached for java, since that’s the language he’s used to using
    • data
      • in-flight: kafka
      • compute over the data: storm (very powerful, might move in the direction of onyx later on)
      • at-rest: cassandra (drives more business to his company than anything else)
    • kafka: partitioning really powerful tool for converting one large problem into many smaller problems
    • storm: makes it easy to spin up more workers to process individual pieces of your computation
    • cassandra: their source of truth
    • query planner, query optimizer: services written in clojure, instead of throwing elasticsearch at the problem
    • recommends: Designing Data-Intensive Applications, by Martin Kleppmann
    • thinks these applications are clojure’s killer app
    • core.async gave them fine-grained control of parallelism
    • recommends using pipeline-async as add-on tool
    • composeable channels are really powerful, lets you set off several parallel ops at once, as they return have another process combine their results and produce another channel
    • but: go easy on the hot sauce, gets very tempting to put it everywhere
    • instaparse lib critical to handling verification of email addresses
    • REPL DEMO
    • some numbers: 0 times static types would have saved the day, 27 repos, 2 team members
    DAY TWO

    The Power of Lacinia and Hystrix in Production

    • few questions:
      • anyone tried to combine lysinia and hystrix?
      • anyone played with lacinia?
      • anyone used graphql?
      • anyone used hystrix?
    • hystrix : circuit-breaker implementation
    • lacinia: walmart-labs’ graphql
    • why both?
    • simple example: ecommerce site, aldo shoes, came to his company wanting to rennovate the whole website
    • likes starting his implementations by designing the model/schema
    • in this case, products have categories, and categories have parent/child categories, etc
    • uses graphvis to write up his model designs
    • initial diagram renders it all into a clojure map
    • they have a tool called umlaut that they used to write a schema in a single language, then generate via instaparse representations in graphql, or clojure schema, etc
    • lacinia resolver: takes a graphql query and returns json result
    • lacinia ships with a react application called GraphiQL, that allows you to through the browser explore your db (via live queries, etc)
    • gives a lot of power to the front-end when you do this, lets them change their queries on the fly, without having to redo anything on the backend
    • problem: the images are huge, 3200x3200 px
    • need something smaller to send to users
    • add a new param to the schema: image-obj, holds width and height of the image
    • leave the old image attribute in place, so don’t break old queries
    • can then write new queries on the front-end for the new attribute, fetch only the size of image that you want
    • one thing he’s learned from marathon running (and stolen from the navy seals): “embrace the suck.” translation: the situation is bad. deal with it.
    • his suck: ran into problem where front-end engineers were sending queries that timed out against the back-end
    • root cause: front-end queries hitting backend that used 3rd-party services that took too long and broke
    • wrote a tiny latency simulator: added random extra time to round-trip against db
    • even with 100ms max, latency diagram showed ~6% of the requests (top-to-bottom) took over 500ms to finish
    • now tweak it a bit more: have two dependencies, and one of them has a severe slowdown
    • now latency could go up to MINUTES
    • initial response: reach for bumping the timeouts
    • time for hystrix: introduce a circuit breaker into the system, to protect the system as a whole when an individual piece goes down
    • hystrix has an official cloure wrapper (!)
    • provides a macro: defcommand, wrap it around functions that will call out to dependencies
    • if it detects a long timeout, in the future, it will fail immediately, rather than waiting
    • as part of the macro, can also specify a fallback-fn, to be called when the circuit breaker is tripped
    • adding that in, the latency diagram is completely different. performance stays fast under much higher load
    • failback strategies:
      • fail fast
      • fail silently
      • send static content
      • use cached content
      • use stubbed content: infer the proper response, and send it back
      • chained fallbacks: a little more advanced, like connecting multiple circuit breakers in a row, in case one fails, the other can take over
    • hystrix dashboard: displays info on every defcommand you’ve got, tracks health, etc
    • seven takeaways
      • MUST embrace change in prod
      • MUST embrace failure: things are going to break, you might as well prepare for it
      • graphql is just part of the equation, if your resolvers get too complex, can introduce hystrix and push the complexity into other service
      • monitor at the function level (via hystrix dashboard)
      • adopt a consumer-driven mindset: the users have the money, don’t leave their money on the table by giving them a bad experience
      • force yourself to think about fallbacks
      • start thinking about the whole product: production issues LOOK to users like production features
    • question: do circuit-breakers introduce latency?
      • answer: a little bit at the upper end, once it’s been tripped
    The Tensors Must Flow
    • works at magento, lives in philly
    • really wants to be sure our future robot masters are written in clojure, not python
    • guildsman: tensorflow library for clojure
    • tensorflow: ML lib from google, recently got a c api so other languages can call into it
    • spoiler alert: don’t get TOO excited. everything’s still a bit of a mess
    • but it DOES work, promise
    • note on architecture: the python client (from google) has access to a “cheater” api that isn’t part of the open c api. thus, there’s some things it can do that guildsman can’t because the api isn’t there
    • also: ye gods, there’s a lot of python in the python client. harder to port everything over to guildsman than he thought
    • very recently, tensorflow started shipping with a java layer built on top of a c++ lib (via jni), which itself sits on top of the tensorflow c api, some people have started building on top of that
    • but not guildsman: it sits diretly on the c api
    • in guildsman: put together a plan, then build it, and execute it
    • functions like guildsman/add produce plan maps, instead of executing things themselves
    • simple example: adding two numbers: just one line in guildsman
    • another simple example: have machine learn to solve | x - 2.0 | by finding the value of x that minimizes it
    • tensorflow gives you the tools to find minima/maxima: gradient descent, etc
    • gradient gap: guildsman can use either the clojure gradients, or the c++ ones, but not both at once
      • needs help to port the c++ ones over to clojure (please!)
    • “python occupies the 9th circle of dependency hell”: been using python lightly for years, and still has problems getting dependencies resolved (took a left turn at the virtual environment, started looking for my oculus rift)
    • demo: using mnist dataset, try to learn to recognize handwritten characters
    The Dawn of Lisp: How to Write Eval and Apply in Clojure
    • educator, started using scheme in 1994, picked up clojure in 2009
    • origins of lisp: john mccarthy’s paper: recursive functions of symbolic expressions and their computation by machine, part i
    • implementation of the ideas of alonzo church, from his book “the calculi of lambda-conversion”
    • “you can always tell the lisp programmers, they have pockets full of punch cards with lots of closing parenthses on them”
    • steve russel (one of the creators of spaceware) was the first to actually implement the description from mccarthy’s paper
    • 1962: lisp 1.5 programmer’s manual, included section on how to define lisp in terms of itself (section 1.6: a universal lisp function)
    • alan kay described this definition (of lisp in terms of lisp) as the maxwell equations of software
    • how eval and apply work in clojure:
      • eval: send it a quoted list (data structure, which is also lisp), eval will produce the result from evaluating that list
        • ex: (eval '(+ 2 2)) => 4
      • apply: takes a function and a quoted list, applies that function to the list, then returns the result
        • ex: (apply + '(2 2)) => 4
    • rules for converting the lisp 1.5 spec to clojure
      • convert all m-expression to s-expressions
      • keep the definitions as close to original as possible
      • drop the use of dotted pairs
      • give all global identifiers a ‘$’ prefix (not really the way clojure says it should be used, but helps the conversion)
      • add whitespace for legibility
    • m-expressions vs s-expressions:
      • F[1;2;3] becomes (F 1 2 3)
      • [X < 0 -> -X; T -> X] becomes (COND ((< X 0) (- X)) (T X))
    • dotted pairs
      • basically (CONS (QUOTE A) (QUOTE B))
    • definitions: $T -> true, $F -> false, $NIL, $cons, $atom, $eq, $null, $car, $cdr, $caar, $cdar, $caddr, $cadar
      • note: anything that cannot be divided is an atom, no relation to clojure atoms
      • last few: various combos of car and cdr for convenience
    • elaborate definitions:
      • $cond: own version of cond to keep syntax close to the original
      • $pairlis: accepts three args: two lists, and a list of existing pairs, combines the first two lists pairwise, and combines with the existing paired list
      • $assoc: lets you pull key-value pair out of an association list (list of paired lists)
      • $evcon: takes list of paired conditions and expressions, plus a context, will return the result of the expression for the first condition that evaluates to true
      • $evlist: takes list of expressions, with a condition, and a context, and then evalutes the result of the condition + the expression in a single list
      • $apply
      • $eval
    • live code demo
    INVITED TALK FROM GUY STEELE: It’s time for a New Old Language
    • “the most popular programming language in computer science”
    • no compiler, but lots of cross-translations
    • would say the name of the language, but doesn’t seem to have one
    • so: CSM (computer science metanotation)
    • has built-in datatypes, expressions, etc
    • it’s beautiful, but it’s getting messed up!
    • walk-throughs of examples, how to read it (drawn from recent ACM papers)
    • “isn’t it odd that language theorists wanting to talk about types, do it in an untyped language?”
    • wrote toy compiler to turn latex expressions of CSM from emacs buffer into prolog code, proved it can run (to do type checking)
    • inference rules: Gentzen Notation (notation for “natural deduction”)
    • BNF: can trace it all the way back to 4th century BCE, with Panini’s sanskrit grammar
    • regexes: took thirty years to settle on a notation (51–81), but basically hasn’t changed since 1981!
    • final form of BNF: not set down till 1996, though based on a paper from 1977
    • but even then, variants persist and continue to be used (especially in books)
    • variants haven’t been a problem, because they common pieces are easy enough to identify and read
    • modern BNF in current papers is very similar to classic BNF, but with 2 changes to make it more concise:
      • use single letters instead of meaningful phrases
      • use bar to indicate repetition instead of … or *
    • substitution notation: started with Church, has evolved and diversified over time
    • current favorite: e[v/x] to represent “replace x with v in e”
    • number in live use has continued to increase over time, instead of variants rising and falling (!)
    • bigger problem: some sub variants are also being used to mean function/map update, which is a completely different thing
    • theory: these changes are being driven by the page limits for computer science journals (all papers must fit within 10 years)
    • overline notation (dots and parentheses, used for grouping): can go back to 1484, when chuquet used underline to indicate grouping
      • 1702: leibnitz switched from overlines to parentheses for grouping, to help typesetters publishing his books
    • three notations duking it out for 300 years!
    • vectors: notation -> goes back to 1813, and jean-robert argand (for graphing complex numbers)
    • nested overline notation leads to confusion: how do we know how to expand the expressions that are nested?
    • one solution: use an escape from the defaults, when needed, like backtick and tilde notation in clojure
    • conclusions:
      • CMS is a completely valid language
      • should be a subject of study
      • has issues, but those can be fixed
      • would like to see a formal theory of the language, along with tooling for developing in it, checking it, etc
      • thinks there are opportunities for expressing parallelism in it
    Day Three

    Declarative Deep Learning in Clojure

    • starts with explanation of human cognition and memory
    • at-your-desk memory vs in-the-hammock memory
    • limitation of neural networks: once trained for a task, it can’t be retrained to another without losing the first
      • if you train a NN to recognize cats in photos, you can’t then ask it to analyze a time series
    • ART architecture: uses two layers, F1 and F2, the first to handle data that has been seen before, the second to “learn” on data that hasn’t been encountered before
    • LSTM-cell processing:
      • what should we forget?
      • what’s new that we care about?
      • what part of our updated state should we pass on?
    • dealing with the builder pattern in java: more declarative than sending a set of ordered args to a constructor
    • his lib allows keyword args to be passed in to the builder function, don’t have to worry about ordering or anything
    • by default, all functions produce a data structure that evaluates to a d4j object
    • live demos (but using pre-trained models, no live training, just evaluation)
    • what’s left?
      • graphs
      • front end
      • kafka support
      • reinforcement learning
    Learning Clojure Through Logo
    • disclaimer: personal views, not views of employers
    • logo: language to control a turtle, with a pen that can be up (no lines) or down (draws lines as it moves)
    • …technical difficulties, please stand by…
    • live demo of clojure/script version in the browser
    • turns out the logo is a lisp (!): function call is always in first position, give it all args, etc
    • even scratch is basically lisp-like
    • irony: we’re using lisp to teach kids how to program, but then they go off to work in the world of curly braces and semicolons
    • clojure-turtle lib: open-source implementation of the logo commands in clojure
    • more live demos
    • recommends reading seymour papert’s book: “Mindstorms: Children, Computers, and Powerful Ideas”
    • think clojure (with the power of clojurescript) is the best learning language
    • have a tutorial that introduces the turtle, logo syntax, moving the turtle, etc
    • slowly introduces more and more clojure-like syntax, function definitions, etc
    • fairly powerful environment: can add own buttons for repeatable steps, can add animations, etc
    • everything’s in the browser, so no tools to download, nothing to mess with
    • “explaining too early can hurt”: want to start with as few primitives as possible, make the intro slow
    • can create your own lessons in markdown files, can just append the url to the markdown file and it’ll load (!)
    • prefer that you send in the lessons to them, so they can put them in the lessons index for everyone to benefit
    • have even translated the commands over to multiple languages, so you don’t have to learn english before learning programming (!)
    • lib: cban, which has translations of clojure core, can be used to offer translations of your lib code into something other than english
    • clojurescript repls: Klipse (replaces all clojure code in your page with an interactive repl)
    • comments/suggestions/contributions welcome
    → 5:00 AM, Oct 17
  • Iron Curtain by Anne Applebaum

    Stunning. I had no idea of the magnitude of what was lost in Eastern and Central Europe after the War, due to Soviet coercion and control.

    By focusing on just the first decade or so after V-E day, and restricting her story to mainly Poland, East Germany, and Hungary, Applebaum is able to go in deep on how the Soviets – and their local communist allies – were able to subvert their newly conquered satellite states, and impose a foreign totalitarian system on them.

    Three things I learned:

    • Poland, Hungary, Germany, Finland: their borders were radically remade after the Soviet conquest. The Baltic countries vanished altogether, absorbed into the Soviet Union. Germany lost much eastern territory to Poland, who in turn lost its eastern reaches to the Soviet Union. The Ukraine was gone.
    • Poland lost 20% of its population in the war. In comparison, France lost 1.5%
    • The first step for most of the communist parties was to form a "national front" with other leftist parties, sometimes by force, usually with some amount of arm-twisting. Once that was established, communists would take over the mechanisms of state power (Interior, Secret Police, etc) while leaving the most visible positions in the hands of others, so it looked like a pluralistic government from outside.
    → 5:00 AM, Oct 16
  • Writers' Coffeehouse, Oct 2017

    Another great meeting! Peter Clines graciously agreed to serve as host, prior to his signing at Mysterious Galaxy (you can order his new book here)

    We tried out a slightly different format this time, formally splitting the time between writing craft questions (first half) and publishing/sales questions (second half).

    Many thanks to Mysterious Galaxy for the venue, and to Peter Clines for running the show!

    My notes:

    • Absence of sci-fi thrillers currently, editors starting to mention it
    • Character delineation: how to do it? How much is enough? Too much?
    • Clines: doesn’t like recommending writing books, because writing is so personal and unique from person to person
    • Protagonists need to be: likeable, relateable, and believable
    • 3 easy ways to express character: what they say, what they do, and how others react to them
    • Indy: when intro side character, will give reader info that the main character doesn’t have, to increase tension
    • Plot is what happens outside, story is what happens inside, the character. Every book needs both, the plot to move things along, the story to move us
    • Save the Cat: at start of story, main character needs to do something small and simple that lets audience know they’re the person to root for
    • Things need to go wrong. We all say the wrong thing sometimes, or have plans go awry, and how we react to that shows a lot of character
    • Techniques: one person wrote poems about each of his characters before the book, another wrote backstory for the door her character couldn’t touch, another person puts together portable “murder” boards for her books
    • Potato-chip chapters: point is to make each chapter either small enough or end on tasty beat enough to make reader want to go to the next one
    • Q: have book that is on the edge of ya and adult, how to market it? Have two versions...
      • A: write it the way you want, submit it the way you want, let editor push for the other if they want it, let them worry about marketing it properly once it’s published
    • Q: how to design a book cover?
      • A: hire a book designer, don’t try to do it yourself, if you’re going indy
    • Q: do you really sell books on twitter?
      • A: yes, because people tweet that they just bought the book; though took four years of building audience before the book was published
    • Social media: different posts for different sites, since the audiences are different between them
    • Facebook ads: basically not worth it; check the veritas youtube channel for a good breakdown of how the ads actually perform
    • Q: are they going to ask me about how many followers i have on facebook?
      • A: if you have a lot, that’s great, but they care more about how good the book is than anything else
    • If you hear about a cool gimmick for your query letter, don’t do it; by the time you’ve heard about it, the gimmick’s played out
    • Q: Querying for comics?
      • A: get an artist on board, have the first issue done, and the rest of the arc outlined
    • Q: What about hiring an editor?
      • A: nice if you can afford it, may be a good learning experience at first, but not essential to selling a book (just get it in the best shape you can before sending it out)
    • A lot of hired editors will start out with just fifty pages, critique that, see if you two want to work together, then continue on with story edits, then finally a copyediting pass
     
    → 8:00 AM, Oct 3
  • Ancillary Sword by Ann Leckie

    Generally excellent. Where the first book was broad, with multiple locations and times, the second one goes deep, diving into the political minutiae of a single system. And it works, drawing us further into the world of the Radch.

    Three things I learned about writing:

    • Be careful of "I knew that she suspected I thought I knew about this lie that she told me three days ago" plots. Unless your narrator is very explicit about their thoughts, you can lose the reader in too many significant looks that aren't explained.
    • If a cool gimmick from the first book isn't available (lost because of story), instead of bringing it back (and reaching for a retcon), try to find a different way to achieve the same thing. Here, the data relayed to the narrator by Ship gives us the ability to view scenes we wouldn't otherwise, preserving the narrative trick of the first book by a different means.
    • For a sequel, you might be tempted to go broader than the first book (especially if the story of the first book was epic in scope already). But you don't have to. A smaller scope can work just as well to let you show who your characters are, and deepen their relationships.
    → 7:59 AM, Oct 2
  • 1946 by Victor Sebestyen

    Revelatory, especially when paired with Year Zero. Sebestyen shows how the Cold War began, so soon after the Allies won. Cracks between the Big Three (US, Britain, Soviet Union) that had been papered over for the sake of the war quickly grew into major rifts.

    Three of the countless things I learned:

    • The Soviet Union didn't steal the entire atomic bomb. Their stolen intelligence helped them move faster, by perhaps two years, but their scientists did the majority of the work themselves.
    • Mao financed his armies and kept his population fed during the Chinese Civil War by growing and selling opium (!)
    • Japan had been bombed far worse than Germany. Many millions lost their homes. 80% of its merchant shipping fleet was gone. Half of its agricultural land was waste. In the months after the war, Allied survey teams discovered Japan could not have carried on much longer than it did.
    → 8:00 AM, Sep 25
  • Rejected

    Got multiple rejections this week.

    One was from an agent I’d queried about representing my novel. That was the fastest rejection I think I’ve ever gotten. I emailed in the query, and 24 hours later I had a rejection in my inbox.

    Second one was for a short story I’ve been shopping around. The editor included feedback on what they liked and what they feel the story needs to improve, though, so I’m taking that as a good sign.

    Meanwhile, I’m trying to fight off a cold, edit my third short story from this summer, and start editing my second novel. Oh, and now I need to find a new market to send that newly-rejected short story to.

    Sometimes I wish I could take a week off the day job just to catch up on everything. Sometimes I feel like I’d need a month.

    → 8:03 AM, Sep 22
  • How to Fix: Guardians of the Galaxy II

    Damn, what a missed opportunity.

    I enjoyed the first Guardians of the Galaxy movie, and hoped the second would be more snarky fun.

    Instead, it’s a stiff, nonsensical mess.

    What Went Well

    The fight scenes and set pieces are absolutely stunning. I mean just gorgeously filmed, with excellent special effects, and clever shots.

    The soundtrack was similarly inspired. Any Cat Stevens fan is a friend of mine.

    Zoe Saldana continues to do great work with slight scripts. And Kurt Russell was a great choice for Ego.

    What Went Wrong

    Ye gods, so much.

    Almost everything feels stiff and forced. The weird sniping between Rocket and Peter is overwrought and comes out of nowhere. The opening credits sequence with Groot is cute but completely drains the background fight of any tension. The feud between Gamora and Nebula feels rushed and shot through with bad timing, from the “not ripe” yaro root joke that falls flat to Nebula’s kamikaze run entrance that has absolutely no effect on anything else that’s happening.

    So many things seemed designed to drain the events of any meaning. Yondu loses his control-hawk, but it doesn’t matter because he gets it back within a day of getting captured. The Sovereign tracks them across the galaxy, but it doesn’t matter because their pilots are so bad they can be held off by one ship while Peter flies around asking for tape. It doesn’t even matter that they “kill” so many Sovereign pilots, since their ships are all remote-controlled drones. Nebula takes out Yondu for a bit, but it doesn’t matter (in the sense of her becoming the new captain) because the writers want to make jokes about Taserface.

    Then there’s the big, gaping, passive hole at the center of the story.

    Peter’s relationship with his dad is supposedly at the heart of the plot, but there’s no tension there, either. Peter is never forced to choose anything, he just gets carried along with events. He meets his dad, and just goes along home with him. He finds out his dad is evil, and then immediately is forced to go along with his plans (until rescued by his friends).

    There’s no drama, no moment of choice anywhere. It’s just one set piece after another, all of which we know the Guardians will come out on top for, until credits roll.

    How to Fix It

    We start with the spine of the story: Peter and his encounter with Ego. We strip out the parts that add fake tension: he killed Peter's mom, he smashed his walkman, etc. We take out the forced usage of Peter as a battery.

    Instead, we push Peter into a terrible choice: his father or his friends.

    Maybe Ego is dying, and only Peter can save him by staying on the planet and serving as a second battery. Or maybe Ego promises Peter he can bring his mother back, if only he helps him “recharge” by overtaking those planets he’s placed seeds on.

    Either way, we need the climax of the story being Peter making a choice. He needs to be forced to choose either the father he never knew, or the ragtag family he’s assembled on his own. We need to see both choices as something Peter could do. Whatever he chooses, he’s going to lose something.

    And then we can echo that conflict out to the other plotlines. Nebula can still take out Yondu, but then have her take over the control of the Ravager ship. She jettisons Yondu and Rocket out of an escape pod; they’ll have to fend for themselves. Meanwhile, she’s decided to take the ship and track down Gamora, for her revenge.

    When she arrives, it’s in the middle of the battle between Ego, Peter, the other Guardians, and the Sovereign. And Nebula will have a choice: to protect her sister, or to stand by and watch her fall.

    Meanwhile, Yondu and Rocket are facing a choice of their own. Having hobbled over to a nearby star system to lick their wounds, they have to decide what to do next. Yondu tries to induce Rocket to join him as a Ravager, saying something to the effect of “this is where you belong.” They can steal a ship, and then keep stealing, for as long as they want. No Peter to keep them from grabbing a few batteries when they want.

    But then they see news of the Sovereign fleet heading to Ego’s planet, and they realize their choice could mean all of their friends will die.

    Finally, we need to fix the character of Mantis. Currently, she’s Ego’s plaything. Her role in the story is to be a love interest for Drax. She doesn’t affect the story in any way, or have any choice she has to make.

    So let’s give her one. Make her one of The Sovereign, a mutant named Bug that the gold people think of as a mistake. She stows away on the Guardian’s ship to get away from the home where everyone hates her. Drax discovers her during the initial fight with the Sovereign, and decides to take her under his wing.

    The rest of her storyline can play out normally from there, with one twist: during the final battle, she gets contacted by the Sovereign command with an offer: betray the Guardians, and earn a hero’s welcome back home.

    More than polishing up the dialog, or making the actors do more takes until it feels natural, or dropping the weird cameos from Howard the Duck and the Watchers, it’s these changes that will push the movie into a meaningful, purposeful shape.

    → 8:00 AM, Sep 18
  • Writer's Coffeehouse Notes, Sep 2017

    Went to the Writer’s Coffeehouse at Mysterious Galaxy again yesterday. This time it was hosted by author Henry Herz, so we got to dig into the details of writing and submitting children’s books. I might try to polish up and submit that picture book draft I have, after all ;)

    Many thanks to Mysterious Galaxy for hosting, and to Henry for running the show!

    My notes:

    Possible to have agent and still indy publish; Indy Quillen does it, because her agent sent book to publishers first, she indy pubbed only after publishers all passed on it

    Society for Children’s Book Writers and Illustrators: has local chapter, can join and get critiques

    San Diego Writer’s Ink: has critique groups

    Can take classes at local colleges to meet other writers and get feedback

    Indy: recommends using real name (or pen name) for twitter handle, makes it easier to find you

    Posting comments on blogs of authors you like in your genre can help drive traffic to your own website

    Picture books: birth to 6-7, then easy readers, then chapter books, then middle grade

    400-500 words, perfect for 6-7 yr old protagonist

    Don’t do art notes! Leave that for the illustrator, they’ll come up with better art than you can

    Leave out all your normal descriptive text

    Run your manuscript through an online tool to check the vocab level, needs to be appropriate for your age group

    Usually don’t send artwork with the book, publisher picks them

    Educational tie-in great for selling picture books to editors, something for teachers to hook into

    La Jolla Writer’s Conference: small, but pulls big names; November

    Southern California Writer’s Conference: September in Irvine, good for people that haven’t been to a conference before, low key, Indy got her agent there

    Tuesday, Sep 12th: look for #mswl on twitter (manuscript wish list)

    Recommended reading: Donald Maas' Writing the Breakout Novel; Invisible Ink

    → 7:54 AM, Sep 11
  • Brief Comics Reviews: Sep 2017

    Wicked and Divine, Vol 4: Holy shit. Holy shit. Holy shit. It’s back. Swallowed this one whole in about an hour. Need more.

    The Vision, Vol 1: Art is…fuzzy? Seems like the lines are never sharp. Which is maybe deliberate, since it’s a fuzzy-line world they’re creating. But it’s hard on the eyes.

    Constantly narrated via voice-over, instead of using dialog or pictures to show what’s happening. It’s a fine technique, and a known one, but it’s a bit tedious when it’s all the comic is written in.

    Deadly Class, Vol 3: When did everyone become pretentious and annoying?

    Saga, Vol 5: Artwork still fantastic, writing keeps me reading, but…did anything really happen? Threads wound up rather easily, it seems, and Fiona was ripped away again kind of arbitrarily. Also: too much time spent with the bounty hunters I don’t care about.

    → 7:59 AM, Sep 6
  • Year Zero by Ian Buruma

    Illuminating. Filled a gap in my understanding of the war, of the year between the Allied victory and the rebuilding that followed.

    Thankfully, Buruma doesn’t just cover what happened in Europe. He looks everywhere, from the Netherlands to Indonesia to Japan and China. A true history of the fallout from the last world war.

    Three things I learned:

    • The Soviets stripped their territories, both European and Asian, of industry. Whole factories were broken down and shipped into the Soviet Union, from Poland to Japanese-occupied Manchuria.
    • Jews in Poland were not safe after the war. Those who managed to find a home to come back to still faced discrimination and pogroms. Over a thousand Jews were murdered in Poland in the year after liberation.
    • British military was complicit in the deaths of thousands, as it sent captured anti-communists back to the Soviet Union to be slaughtered (men, women, and children).
    → 8:45 AM, Sep 4
  • Ghost Road Blues by Jonathan Maberry

    Simply put, a fantastic ghost story. Like a horror film from the 80s updated and put in novel form.

    Three things I learned about writing:

    • 3rd person omniscient works only if you stay out of characters' individual perspectives. Say what happens, and report what they think, but as an outsider
    • Tragedy for a minor character has more impact if we spend some time with them first, however little, to see how they act normally
    • Remember that characters only know what they see, and that can mislead them sometimes. That's okay. Let them be wrong when they should be wrong, so that when they're right it'll feel like triumph.
    → 8:00 AM, Aug 21
  • 1493 by Charles C. Mann

    Revelatory. Mann’s 1491 opened my eyes to the many civilizations that existed in the Americas before Columbus landed. 1493 has shown me just how much of our current world was created in the aftermath of his voyages.

    Three of the many, many things I learned:

    • The lynchpin of the global trade of American silver for Chinese porcelain and silks was the Philippines. That's where Spanish traders first ran into Chinese junks, in the early sixteenth century.
    • One theory for the causes of the Little Ice Age: the sudden reforestation of the Americas from the millions of native inhabitants that died out from European diseases.
    • China is the world's largest producer of sweet potatoes, and the second-largest producer of maize. Both crops are native to the Americas.
    → 8:00 AM, Aug 16
  • Patience

    Sent the novel out to my first pick agent this weekend. I know it’ll most likely be rejected – it’s my first real stab at a query letter – but I’ve got to start somewhere.

    Also got back another rejection of one of the stories I’ve been circulating. I didn’t waste any time worrying about it, though. I picked another market, and sent it right back out.

    While waiting for rejections, I’m rewriting one of the stories I wrote last month. The feedback I got on it was positive, but in fixing the problems the reviewers pointed out, I discovered a different story sitting under the one I was writing.

    Same characters, same themes, but a different plot.

    I have a feeling this version will turn out much better than the first two, but the only way to find out is to write it :)

    → 7:08 AM, Aug 11
  • On the Google Anti-Diversity Memo

    It’s horseshit.

    From its title (“Google’s Ideological Echo Chamber”) to its claims that its author is the only human capable of rational thought without bias, to its assertion that modern feminist critique only exists because Communism failed, it’s filled with faulty logic and flawed arguments that wouldn’t have held water in any of the philosophy classes I took as a freshman.

    It’s clearly a document meant to inflame, to incite, and most definitely not to encourage the kind of discussion the author claims over and over again to want to facilitate.

    Let me be clear:

    • The gender pay gap is real. Its size varies across countries and industries, but it exists.
    • Studies of group decision-making show that those with a variation in viewpoints -- particularly along gender lines -- do better than those that lack such diversity.
    • Bias against women is long-standing in the technological fields, and should be combatted by any means necessary.
    • Feminism goes back a hell of a lot further than communism.
    • Claims of universal values for Left and Right ignore the historical context in which those labels arose, and how fluid the beliefs of the groups assigned those labels have been over time.
    • Affirmative-action programs are not "illegal discrimination"
    • Political correctness is the name commentators on the Right have given to an age-old phenomenon: politeness. Certain beliefs or expressions are always considered beyond the pale. Those expressions change over time. The recent trend in Western society has been to push insults of race or gender beyond the pale. This is not a new thing, it is not a new form of authoritarianism, it is not a symptom of a Fascist Left. It's civilization. Rude people have always faced censure, and rightly so.
    • Finally, insisting that others are biased, while you are "biased" towards intellect and reason, is absurd. It's a classic male power move. It denies your opponents any semblance of reason or thought. It's dehumanizing. And it's horseshit.
    → 8:05 AM, Aug 9
  • Writer's Coffeehouse Notes, Aug 2017

    Attended the Writer’s Coffeehouse at Mysterious Galaxy yesterday. As always, I came away with lots of great advice :)

    Many thanks to Jonathan Maberry for running these, and to Mysterious Galaxy for hosting!

    My Notes from the Coffeehouse

    Dangerous to be a one-trick pony; if you put something out that doesn't succeed, don't take it personally, instead ask what you can do that will sell

    Sometimes you have to pick one idea over another because it’ll be easier to sell

    Negativity never helps. Da Vinci Code got slammed by so many people, and yet it was responsible for thrillers becoming the dominant genre on the bestseller lists (which they still are)

    Lot of business discussions happen at comic-con, behind the scenes; he had meetings with agents, game devs, editors, etc.

    If you have a published work in a genre, post on fb page and ask around about getting on a panel at one of these cons

    Science people can be a big draw at these events

    Got to get involved in these things, put yourself out there, to have these opportunities happen

    Henry: started out with small cons, like ComicFest and ConDor, volunteered to put together panels, those smaller cons always need help, another author gave contact info for comiccon organizers, he did the same thing there, volunteered to put together panels, etc

    One thing about moderating: try to come up with questions they haven’t had asked before, avoid the “where do you get your ideas?”, try to ask things that get into the personality of the panelists

    Other writer noticed Henry asks questions that gets debate flowing among the panelists; respectful, but not all agreeing with each other

    Henry: can write in a closet, but might not ever become popular, takes energy and work to get the connections and opportunities for a career in publishing

    Suggestion: if you’re in a writing group, hold fake panels; have one person moderate, two or more be fake panelists, others watch and rotate; it’s great practice for later

    Some writers will ask questions of the audience to get comfortable at signings

    Handle interviews by focusing on what’s fun about it for you; the fun will show and the audience will love it

    More practice: get group together, have one person go up and answer the same question over and over again in different ways

    If you get on a panel, bring something to share out at the end

    La jolla writer’s conference coming up Southern california writer’s conference coming up

    Good advice: a pitch is telling someone how to sell your book

    Maberry: writer’s conferences made him fall in live with writing again, would not be a fiction writer without them

    Queries: never make absurd claims (this will be as big as harry potter!), or slam other books (this is so much better than harry potter!)

    Don’t take pot shots at other books or series

    Round the word count to the nearest 5,000. No need to give the exact word count

    Most novels, they don’t want more than 100,000 words, because of the extra printing costs for a book of that size

    Important to know the right length for your genre; epic fantasy tilts long (150K), westerns tilt short (65K)

    DON’T QUERY UNTIL THE NOVEL IS COMPLETE AND POLISHED

    Henry: timing of query and font doesn’t matter so much

    Maberry: disagree; when you’re querying, getting this stuff right separates you out from amateurs

    Maberry: prefers verbal queries; lots of writers' conferences, find which ones your target agents are going to

    Don’t listen to the myth that agents who have sold X numbers of Y genre are no longer looking for more; it’s bunk; you want the agents that are known for selling your genre

    Intern here from march fourth publishing house, she confirms everything (and suggests checking them out!)

    Pitching in person: the agents there might not be right for you, but it’s good practice, hones your skills, and the agents that are there often come prepared with other agents they can recommend; if nothing else you can get feedback on the pitch

    Keep in mind: the agents are just as nervous about this as you are

    Jim Butcher: queried jennifer jackson and rejected by her, then met her at a conference, and she agreed to pick him up

    Verbal pitches: don’t necessarily have to be pitching a finished book

    #mswishlist twitter tag where editors and agents tweet about what they’re looking for

    ALWAYS HAVE BUSINESS CARDS WITH YOU AND PUT YOUR FACE ON IT SO THEY CAN REMEMBER YOU

    When doing verbal pitch, do not read your pitch, or stick to a script; pitch to the agent, change how you talk about it based on how they react to what you say

    Elements of a good pitch: hook them, give them a sense of characters and the stakes, link it to other books and explain why people will want to read it (best to connect it to what you like as a reader, and show how other readers also like that thing)

    Another good exercise: take a book you know, and pitch it to your writing group, see if you can get to the essential points

    Don’t land too hard on the market piece, becomes too much of a sales pitch; connect it to readers who are real people, and yourself as a writer and someone you want them to want to work with for years

    Pitch practice: genre, subgenre, demographic, main character’s name, and a crisis

    Don’t think in terms of good or bad for your own writing. Think of “publishable” and “not yet publishable.” Take the latter parts and change what needs to be changed in order to make it publishable.

     

    → 7:00 AM, Aug 7
  • First Novel Done!

    It’s done!

    Finished the final editing pass for the last few chapters of my first novel early this week.

    So now it’s time to build a list of agents to look at, and start querying.

    I’ve been going to Publisher’s Marketplace every morning, researching another agent to add to the list. This weekend I’ll pick one, get my query letter in order for them, and send it off.

    It’ll feel good to get the book out there. Even if every agent rejects it. True, the rejections will hurt…but there’s no way to get published without getting some.

    And, now that the first book’s done, I can turn my attention to the second novel I wrote, and start putting together an editing plan for it. There’s also the short stories I wrote over the last month to edit (one may need a complete rewrite).

    So much to do, and thank goodness!

    → 8:30 AM, Aug 4
  • Beyond the Editing Wall

    Only four chapters left in the final editing pass for the novel.

    Four chapters.

    I’ll be done early next week. Thank the gods.

    Then it’ll be time to gather a list of agents to send it out to, polish up my query letter, and start emailing the thing out.

    It’s been…two years? almost three?…since I started work on it. And soon, very soon, I’ll finally have a finished version to send.

    So, what have I learned? What lessons will I apply to the next book?

    • Definitely break up your editing passes. Trying to fix every problem you see as you see it will only lead to a mess.
    • Don't be afraid to edit the story. Your first take on the story -- not just the words, but what happens and why -- doesn't have to be the last one.
    • You've got time to get it right. Take as many editing passes as you need. No one has to see it until it's ready.
    → 7:07 AM, Jul 28
  • Wrapping Up a Month of New Writing Habits

    Wife made it back from Arkansas on Tuesday (huzzah!), so my hermit-writing time is coming to a close.

    Overall, I think having the weekly goals really helped me. While I didn’t hit them all (mumble mumble agent-search), I hit enough of them to build up a writing rhythm, and got a lot done.

    All told, I’ve:

    • written two new short stories, and have started a third
    • circulated three previously-written stories
    • completed final-pass editing of all but the last quarter of my first novel
    • reviewed nine submissions by litreactor peeps
    I'd like to keep up some of my new habits. I think the litreactor reviews help me to see similar problems in my own fiction, and practice fixing them. I also think the chapter-a-day editing is the only way I can get detailed editing passes done.

    I like writing a new short story every week, but at some point I’m going to need to work on editing them all into shape, so I can submit them. So I’ll keep that one for perhaps the next week or two, then settle into editing what I’ve got.

    → 8:20 AM, Jul 21
  • A Tale of Two Cities by Charles Dickens

    Another classic that I just never got around to reading before.

    And it’s deservedly a classic. Dickens absolutely skewers the ruling classes of three societies: his native England, pre-Revolutionary France, and the post-Revolutionary Terror. The snarky political commentary makes his dips into melodrama excusable.

    Three things I learned about writing:

    • You can write in the third-person POV without insight into any characters' thoughts or feelings at all, only their actions and words.
    • Admitting that there is a narrator telling the story (while standing outside of it) gives you a chance to comment on the action, not just tell it.
    • Even if readers can anticipate a turn in the story, if the characters don't know it's on its way, you can generate tension just in putting off the moment that that event happens.
    → 6:00 AM, Jul 17
  • Scorecard: Third Week

    Third and final week. How’d I do?

    • Edit one chapter a day: Check. Whew.
    • Write a new short story: Check! Last week's story is up on litreactor for feedback. Newest story will be going up as soon as I have the points.
    • Critique two stories: Check and check.
    • Find a new potential agent for querying: Dropped.
    • Polish and submit a new story each month: Still on track. Got some good feedback on "Wednesday" from the fine folks at litreactor. I'll revise it this weekend, and should have it ready for submitting by the end of the month.
    → 7:55 AM, Jul 14
← Newer Posts Page 16 of 33 Older Posts →
  • RSS
  • JSON Feed