A Hierarchy of Needs for Belief Systems

A quick schetch of a Maslow-ish “hierarchy of needs” for belief systems.

Is it functional? Does this way of thinking help or hinder us in our interactions with the world? Belief systems that provide better “results” (creation of technology, feelings of well-being, etc.) can be thought of as “better” than belief systems that are not as functional. There is not necessarily a strict ordering here; functionality is contextual, and what may be more functional in one setting may be less so in another. In general, we can expect belief systems that provide more functionality on net to gradually become dominant within the noosphere.

Is it internal consistent? Belief systems that are internally consistent can be thought of as “better” than those that are compartmentalized and non-aligned, in that they will be easier to teach to subsequent generations. They will also be more likely to fulfill higher levels of belief system “need”. In general, an internally consistent belief system will also be well-defined.

Is it extensible? Can the belief system be extended to “think more interesting thoughts”? An system of belief that allows for an infinite number of thoughts to be explored will be more interesting/pleasurable to think in than one which is finite. The most best understood extensible belief system is probably mathematics, courtesy of Gödel’s incompleteness theorems. This is one reason why formal math can be so much fun.

Does it allow us to think interesting things? This is more subjective, but belief systems that allow for more complex, interesting ideas will be more pleasurable/fun than belief systems that restrict our ideas. Belief systems that tie together more realms of experience (“larger infinities”) will be more interesting/pleasurable to think in than more limited belief systems. Formal mathematics has only tenuous direct connection to human experience, which is why most people don’t find it very interesting.

Does it allow us to think meaningful things? This is the aesthetic level… Does the belief system appeal to our sense of truth, beauty, or ethics? I propose that meaningful thoughts are always interesting thoughts, but that not every interesting thought is meaningful.

Note that what is “interesting” and “meaningful” may very well change with time… What seemed profound to our ancestors often will appear to be quaint to later generations. Belief systems that cannot continually allow for the borders of “interesting” and “meaningful” to be expanded will lose their value over time.

Te Urewera

This short “essay” was written in response to a video a friend posted on my Facebook timeline about New Zealand granting the Te Urewera national park legal personhood – an idea that another (lawyer) friend took some exception to in the comments.

So… Color me cautiously optimistic? But the devil’s always in the details, and I’d need to understand the situation a lot better than the information in the video allows to really come down on this one way or another.

Some background thinking…

I’ve been going on for a while that I think (one of?) the key question(s) that we need to be asking right now as we work towards resolve the failures of modern democratic systems is: “How do we incorporate the interests of people who are not people into our decision-making processes?”

In other words, how do we recognize the interests of – and our responsibilities to – non-human, trans-human, and not-yet-human entities? A lot of things fall under this broad class of entities: Future (unborn) generations, human ethnic groups and communities, plants and animals, ecosystems. Some of these are humans (who are yet to be). Some of these are made up of humans (either wholly or partially). And some of these may not contain humans at all.

There’s two motivations for this line of thought: (1) At an immediate level, human interests often depend on these entities in ways that we’re unable to adequately capture at an individualized level, and (2) at a philosophical level, thinking about the issue in these terms is a way to recognize that our sphere of moral responsibility extends (far) beyond the purely human realm most of our conversations are restricted to.

The term “people who are not people” is a bit awkward, but I keep coming back to that phrasing because it captures the dual meaning the term “person” has come to have in our society.

At one level, I do think that we need to start thinking of these entities as “people” in a legal sense. We already have a class of “people who are not people” in law – corporations – and while the system for dealing with those entities is flawed, it does provide us a framework for navigating our relationship with those entitites (and their relationships with each other).

But this example also lets us get at the second sense of the word “people” – as a synonym for “human being”. And corporations (or communities, or animals, or ecosystems) are not human beings. Again, however flawed it may be, we do manage to navigate this difference; we can talk about corporations have a “right to free speech” in one breath, but also acknowledge that they don’t have a “right to vote” with the next.

Corporations are “people” in a legal sense, but that doesn’t necessarily mean that we treat them as being exactly the same as a human being.

Now, there’s a key difference between corporations and the other entities I think we need to be considering: Corporations are made up of people who are contractually bound together within a clearly delineated legal scope. That’s a big difference, so I think it’s important not to push the analogy I’m making between corporations and, say, ecosystems too far. But I still think the example of corporations is useful, because it shows us that we can (more-or-less) successfully navigate these waters… At least with a simple, relatable non-human “person”.

Now, for the issue of Te Urewera’s “personhood”…

If Te Urewera has been granted the status of legal person in exactly the same way that a corporation is a legal person (which the video makes it appear that it has), then I agree with Ryen that this is immensly problematic. Firstly, Te Urewera is not made up of human beings, so there’s already a set of rights that don’t make any sense, and certainly one cannot talk about the park having “responsibilities”. But just as importantly is the fact that a park is probably not a good candidate for consideration of the sorts of entities the interests of, and our responsibilities to, we’re trying to capture here. A park is a human-demarcated piece of land, and I can’t think of a single example where the boundaries of such an area match the ecological reality “on the ground” very well (or at all). The video seems to talk about Te Urewera as if it were an ecosystem, but that almost assuredly extends well past the park boundaries. Moreover, the health of portion of the ecosystem within the park boundaries is almost certainly intimately tied to the health of the larger ecosystem its part of… Declaring the park a “person” is, in this sense, missing the forrest for the trees (or, if you will, the person for the arms and legs).

This also gets into some of the explicit concerns that Ryen is bringing up, because when we start to think about Te Urewera the ecosystem rather than Te Urewera the arbitrary boundaries, we realize that in this case we are talking about a gestalt entity that humans can be (though are not necessarily) part of. In this sense, once you have entered the park you have become part of the park, so the question of whether the park could be prosecuted for inhumanely treating an animal that died within it is a bit like asking how much responsibility you have to one of your fingers. Thinking about it as an ecosystem also lets us resolve the idea of trespass, which we again see is inapplicable because (1) ecosystems lack distinct boundaries they can trespass beyond, and (2) for the reasonscited above about ecosystems being gestalt entities, suing the park for trespass because a tree fell on your property is a bit like your nose suing your finger for picking at it.

But all of these thoughts only make sense if we’re talking about Te Urewera the ecosystem.

I think it’s also useful to come back to the fact that entities like Te Urewera are made up of other entitites, whose interests may not always align. How do we think through these multiple layers of interests, rights, and responsibilities for actors both human and non-human? This is a great unanswered question; simply declaring a parcel of land a legal “person” neatly side-steps these issues, but the central problem with this approach is that it is precisely these issues that we need to be engaging with.

On the face of it, I fear that declaring the Te Urewera national park a legal person thus simply papers over the problems we’re trying to address here and, because of the arbitrary nature of the entity weve granted that status to (and its lack of good correspondence to the actual systems we’re trying to address), we’ve created a whole set of potential side-problems of the sort Ryen describes.

(Interestingly, the video mentions that the Whanganui River has been granted similar status. It’s probably a much better candidate than the park itself, though again there’s questions about whether we’re talking about the ecosystem or the geographic feature, and how to deal with the diffuse interests of gestalt systems.)

So, that’s a lot of concerns. I wouldn’t say that I have the same visceral reaction that Ryen does, but I’m likewise not convinced that this was as wise a move as it sounds.

That said…

I do think we need to begin building the social, cultural, and legal frameworks necessary to bring “people who are not people” into our day-to-day decision-making process. I don’t have good, pat answers about how to do this, and frankly I don’t think anyone does. The way that we’re going to figure out how to do this is by trying different approaches.

Some of these are going to be more incremental, like the lawsuit of “Our Children’s Trust” on behalf of future generations that is currently winding its way through the US courts.

Some of these are going to be subtle, like the incorporation if the concept of the “rights of nature” into Ecuador’s constitution.

And some of these are going, frankly, to be blunt instruments, like the declaration of Te Urewera’s legal personhood.

Mistakes are going to be made, ideas tried and then discarded. This is how we figure things out as a society.

So while on the one hand I’m skeptical that granting legal personhood to Te Urewera national park will ultimately have the desired outcome (or even adequately addresses the issues it was intended to), on the other I welcome the conversation.

The Prime Directive

Hyperbolic headlines aside, I’m not 100% sure that any other species has entered into a phase of development that we could recognize as a precursor to the emergence of complex (“human-like”) societies.

But say that we did see this, and did recognize it… Should we have a Prime Directive when interacting with such an emerging non-human society? Should we hide our own existence from them? What happens if they come to suffer because of human-caused environmental degradation? What if they degrade their own local environment, but are unable to migrate because of the isolation we’ve imposed? What are our rights and obligations, both ethically and legally, to such a society? How does this change our conception of the non-human environment, and our rights and obligations to it?

And what if it turns out that there are in fact many such proto-societies, some of which exist in birds, or whales, or octopi, and it is impossible not to interact with them?

The 2016 Colorado Democratic Caucuses

Part 3

Interesting the number of comments I’m seeing that boil down to “the Colorado Democratic caucuses were a shit-show”. This wasn’t my experience at all, but perhaps I’m being overly generous with my location? Or perhaps other folks had it a lot worse?

In all fairness, problems I saw/experienced:

  1. The Denver Democratic Party was clearly unprepared for the number of people who showed up. The caucus location should have been larger, or there should have been fewer precincts in my caucus location. They registered everyone who was in line by 7pm, but the wait meant that many people missed most, if not all, of the candidate speeches, etc. I think this directly lead to the next two issues.

  2. You couldn’t hear the speakers anyway. They didn’t have a sound system, so between the gymnasium’s poor acoustics and the sheer number of people there, I found everyone unintelligible.

  3. The precinct chair was pretty flustered, as people kind of arrived in waves. She wound up staying over a couple of times, and then eventually just held the entire meeting until an official could confirm that everyone who’d been registered for our precinct was in the room. Which, IMHO, was the right move, but seemed to annoy a lot of folks (particularly the Sanders-only crowd). The room was way too small, which also made vote tallying difficult. The packet of forms she had was also incomplete (which I read as just part of the usual screw-ups you get at any event), though we worked around that, and as a group approved the work-arounds.

So I guess you could look at all of that and think, “what a shit-show”. And I agree that the Denver Democrats should have anticipated higher turnout (I certainly planned on things taking a while, and blocked out my whole night). Or maybe, by the time it became obvious that they’d planned for to small of a turnout, it was too late? I honestly don’t know.

But what I can say is that, for the number of people there, I was impressed by how smooth things went. The gears kept turning, and everyone who was in line (who cared to stay) got registered and had a chance to participate. Things managed to start more-or-less on time. Nothing broker down, and exceptions that got made seemed obvious (I’m pretty sure they started the speakers once the gymnasium was full and all of the registration lines were inside the building – I did happen to be in the longest line at the end of it all), or were approved by everyone there (we don’t have worksheet XYZ, but it’s the same as worksheet ABC, so it’s everyone okay with me just using that one again?).

I think of this as process done right (part of which, incidentally, is knowing when and how it’s okay to violate your own process). Given the number of people who showed up at my caucus location, the night went much more smoothly than I expected.

The 2016 Colorado Democratic Caucuses

Part 2

I’ve always been registered independent, but recently changed to Democrat to caucus for Bernie Sanders. Tonight was my first caucus.

Some thoughts…

It’s easy to appreciate process when things go wrong, but nothing really makes you appreciate process as when things go right. Obviously way more people showed up at the caucus than they were prepared for, but except for a few hiccups everything went smoothly.

On the other hand, I’m still frustrated by how hard it was to find information about candidates this early in the electoral cycle. We have information about folks running for the federal government, but it’s really tough to find info about some of the state races. I think I’m just going to have to sign up for everyone’s mailing list, which will make for an unfortunate level of inbox clutter. I have no idea how else to keep on top of what’s going on with primary candidates. The state and county party websites aren’t much help.

Finally, Sanders’ supporters continue to disappoint me. ~135 people showed up for my precinct, the majority supporting Sanders. As soon as the presidential poll was done most of Sanders’ supporters (about 2/3rds I think) just left. None of Clinton’s supporters did.

Just voting for Bernie Sanders isn’t enough. You need to be willing to throw your weight behind other candidates who think like him. To shift the political center of a party you’ve got to vote for more than one man. Otherwise it’s just a cult of personality.

I will admit that I voted “uncommitted” in a lot of races. Like I mentioned, I couldn’t find much information about the candidates. But I came in wanting to learn more, to be persuaded. In two cases I actually was. Both times it was Bernie Sanders supporters who swayed me. Had more Sanders supporters stayed, might one have made an argument to pull me out of the “uncommitted” column one more time?

Maybe if I didn’t feel that I knew enough I should have left the caucus too. But how better to learn the process than to participate?

If you believe in the worldview Bernie Sanders is articulating, then voting for him isn’t enough. You need to be part of the process.

I wonder if this was also Obama’s problem - the problem of any “superstar” candidate. The engagement they create is only about them. But functional organizations, parties, businesses, governments aren’t ultimately run by individuals. They’re run by process.

If you’re not willing to engage in process, then you’re either not serious or you’re a closet authoritarian. Neither is what we need right now.

The 2016 Colorado Democratic Caucuses

So, I participated in a caucus for the first time tonight.

Some general thoughts:

  1. Colorado has a closed caucus, which means that you have to be registered with the party your caucusing with. Moreover, the results of the precinct polls are not binding on the delegates selected to go to the county convention, though they are strongly encouraged to continue to represent the precinct’s vote. I suspect that most precincts help to ensure this in the same way mine did, by choosing partisans on each side to represent the actual vote split. (For example, in my precinct had 7 votes, with the the presidential poll split 5 for Sanders and 2 for Clinton. So we chose 5 volunteers who had voted for Sanders and 2 that had voted for Clinton, with one alternate from each camp.) Interestingly, “uncommitted” was treated in all cases like an actual candidate, with the effect of producing “free votes” at the county convention.

  2. I wound up voting as “uncommitted” in many of the races, as I’ve found it difficult to find information about many of the candidates this early in the process. There was a long set of speeches by on behalf of the various candidates early on, but these turned out to be less than useful for me, partly because it took so long to get registered that I missed most of the speeches, and partly because the gymnasium where the speeches were given was sorely in need of a sound system, and I found most of what was said unintelligible. I suspect that the only way to be even minimally informed at the primary level is to be on every candidate’s mailing list… Which is going to mean a truly unfortunate volume of email.

  3. The entire caucus process took about 2 hours, which is really amazing given the number of people who attended. I arrived only ten minutes after the doors opened, at which point the line to get into the high school where the caucus was being held already wrapped around most of the school. The line moved swiftly, but by the time I got to the door as many people as had been in front of me had already lined up behind. Despite this, the entire process was handled extremely efficiently. I think the entire thing gave me much more of an appreciation of the importance of process than I’d previously had.

  4. That said, I continue to be disappointed by Bernie Sanders’ supporters. By my count 135 people showed up for my precinct, overwhelmingly favoring Sanders. But, as soon as the presidential polling was complete, the vast majority (about 2/3rds) of Sanders’ supporters just… Left. I don’t think one of Clinton’s supporters did. I don’t know if this experience was replicated elsewhere, but if it was then maybe Sanders’ seemingly inevitable loss is for the best… His supporters seem more committed to him personally than the constellation of ideas he represents, with the effect that candidates for other offices that share his positions are not benefitting from the energy he’s generating. So much for that “revolution”.

Banners along Colfax Avenue celebrating the holidays. None of the people pictured in them look like the folks who actually live near Colfax.

Not Actually Representative


So, Colfax has new holiday banners. They’re all high quality print jobs, but that’s pretty much the only nice thing I can say about them.

Nine banners. Six white people. An asian woman. A dog. And a fucking cookie.

It’s your out-of-town party-here-once-a-year demographic.

I’ve lived on or near Colfax for over a decade. I walk down the street nearly every day. There’s no way that any of these people actually live here.

Who saw this and thought, “yes, this is Colfax”? I mean, the area’s been slowly gentrifying for a while, but it’s not that bad yet.

Of course, this isn’t Colfax as it is. This is Colfax as the developers and city planners and businesses who don’t give a shit would like it. It’s as if someone brought back photos from some future Colfax, after the city has finished purging its “undesirables”.

To be clear, this isn’t an “anti-growth” thing. It’s not development that’s being promoted by these banners. It’s displacement.

This is fucking white bread Disneyland for rich people bullshit.

And it’s an implicit threat to those of us who actually live here.


Dynastic Business

It seems unlikely that the trend of large businesses and startups replacing workers with automation, algorithms, and “on-demand” “micro-employees” (the “gig” economy) is going to end any time soon. But what of smaller (both in terms of employees, and in terms of capital) businesses?

Many of these are owned by individuals, and often don’t have the capacity to invest in the infrastructure necessary to heavily automate themselves or otherwise reduce their “on-hand” workforce. As the rest of the economy becomes increasingly hostile to workers, people who work in these smaller businesses are likely to become intensely loyal, if just out of necessity.

It seems likely that over time existing employees will try to bring in friends and family that have been displaced in the wider economy. These new hires will, obviously, also be unlikely to leave.

Will this lead to the emergence of “dynastic” businesses, staffed almost entirely by a few families?

Will this dynamic ultimately make it easier for larger, automated firms to drive these smaller businesses out of the market? Or will the intense loyalty (and fear) of their staff lead to productivity gains that will keep them one step ahead of the super-predators?

Couching Liberal Goals in Conservative Language

Some random and possibly ill-considered public policy “recommendations” inspired by recent reading…

  1. Implement true universal health care (with aggressive preventative care) and a guaranteed minimum income (basically a check mailed to everyone over the age of majority, indexed to inflation, local cost of living, and dependent children). Use these programs to eliminate Medicare, Medicaid, Social Security, the ACA, disability, unemployment, welfare, minimum wage, and probably a number of other government mandates/programs.

  2. Universal preschool/child-care?

  3. Eliminate most payroll taxes, at least under some modest amount (gut says maybe ~$40,000/year, indexed to inflation and local cost of living, but I’m just spit-balling here).

  4. Eliminate taxes on necessities (unprocessed foods, toilet paper, books, maybe basic Internet). Replace with taxes on remaining goods (higher for purely luxury items like jewelry), financial/stock trading, non-payroll benefits, and activities that damage ecosystem services. End government support for established industries.

  5. For the love of god, stop federally insuring unsustainable/dangerous activities (building on flood plains and barrier islands, for example).

  6. Simplify rules around housing construction, zoning, and business creation. Try to figure out ways to reduce regulatory burdens on small- and medium-sized businesses and start-ups. Encourage in-fill in cities.

  7. Infrastructure investment focusing on low-carbon, long distance mass transit (people/freight). Trains, shipping, etc. Maybe free local public transit? Maybe congestion pricing within cities?

  8. Federalize primary school funding.

Couching liberal goals in conservative language here. Aim is to simultaneously reduce government overhead and regulatory burden while increasing services and encouraging sustainability.

A preview of the Earth Colors Ulysses style.

Earth Colors Ulysses Theme

A low-complexity color scheme based upon colors found on NASA’s “Blue Marble” Earth maps. Grays have been slightly tweaked to integrate better with Ulysses’ dark color scheme. Thematically similar to my Solarized II theme.


A preview of the Solarized II Ulysses style.

Solarized II Ulysses Theme

The characters from 'How to Train Your Dragon 2'.

How to Train Your Dragon 2

I loved How to Train Your Dragon. It’s a great story. It’s got great characters. It’s pretty as all get-out. And the score is absolutely amazing. I cannot recommend it highly enough.

So I really wanted to like How to Train Your Dragon 2. And did like it… But I wanted to like it a lot more than I did.

Spoilers follow.

Let’s start with the high points. Firstly, if you thought that the first film was pretty, you’ll find the sequel absolutely jaw-dropping gorgeous. Seriously, it’s worth seeing just for the scenery and character design. It’s got great banter and top-notch voice acting. Individual scenes and subplots shine.

I can’t speak highly enough for the screen time shared by Stoick the Vast (Hiccup’s father) and Valka (Hiccup’s long-lost mother, who’s reasons for staying away never feel adequately explained). The scene where Stoick first sees Valka again, twenty years after he thought she was killed, brought tears to my eyes. And I just about lost it again not ten minutes later, when he woos her with a song after she becomes overwhelmed by the changes her world abruptly faces. I don’t think I’ve ever seen two animated characters so believably in love before.

John Powell’s soundtrack is pretty good too, though not nearly as good as his score for the original How to Train Your Dragon. He rehashes a lot of the first film’s themes… Which sometimes works. And sometimes is just a mess. Ironically, it’s when he gets away from his familiar themes that Powell starts to shine again. As many of his new movements are related to Valka and Drago, this means that How to Train Your Dragon 2‘s score noticeably improves after the first act.

I also really enjoyed how all of the characters had visibly aged since the first movie. How to Train Your Dragon 2 is set five years later; Hiccup, Astrid, and their friends are still young, but also noticeably grown up. Stoick’s hair is shot through with gray… And when we meet Valka, streaks of white are visible in her hair too. It’s not something you see very often in movies, especially in children’s movies, and most especially with women (who never seem to be allowed to show signs of aging, unless they’ve already been assigned the role of the crone). It’s a nice touch, and I think a pretty significant stylistic risk on the part of the filmmakers.

Unfortunately, it’s also the only real risk How to Train Your Dragon 2 takes.

As much as I liked the scenes involving Stoick and Valka, the (re)introduction of Hiccup’s mother sucks up an inordinate amount of plot. Astrid’s character particularly suffers in this regard; her reduced roll in How to Train Your Dragon 2 is painful to watch compared to her much larger roll in How to Train Your Dragon.

Which brings me to my central problem with How to Train Your Dragon 2 — it’s plot. Which is not to say its plot is bad. It’s not. But the messaging is off in a way that’s really hard to get past, especially compared to the first movie.

How to Train Your Dragon is basically the story of a young naturalist, whose affinity for the world around him leads him to see beyond the conflict between the dragons and his people and forge a way forward for both races. While the basic premise of “kids get things that their parents don’t, and ultimately save the world from their folks’ short-sightedness” is not uncommon, How to Train Your Dragon‘s emphasis on respect and love of the natural world on its own terms strikes me as relatively unique. Dragons turn out to be both like us and unlike us, but there’s no judgement to be made. By the film’s end they may be companions, fellow travelers, and friends, but they remain fundamentally alien.

Moreover, How to Train Your Dragon eschews choosing between the simple all dragons are good/should be protected and all dragons are bad/should be kills dichotomy. The movie’s third act sees Hiccup and Toothless battling a monstrous dragon called the Green Death that controls the dragons that have been raiding Berk. Some dragons turn out to be really dangerous, and sometimes you do need to fight. But sometimes you also need to listen.

That’s a remarkably complex message for what’s essentially a children’s movie.

How to Train Your Dragon 2 initially seems like it’s going to continue on in this vein. Drago is obviously not someone who can be reasoned with, and Hiccup’s (really unreasonable) belief that he can ultimately leads to tragedy. Throughout the movie, people tell him again and again that a chief’s responsibility if to protect his own. Valka must protect the dragons she’s rescued. Stoick must protect the people of Berk. And so on.

Stoick has (predictably) selected Hiccup to succeed him as chief, but Hiccup doesn’t really want the job. He’s still a naturalist and an explorer at heart (which is a good thing, since it’s his explorations that uncover Drago’s threat), and he doesn’t want the duties of a chief. Besides, as he observes early on, Astrid is “much better at those kinds of things” than he is.

There’s an interesting, if predictable, plot being foreshadowed here. Hiccup needs to discover that some men cannot be reasoned with — to learn again that sometime you have to fight. But just as the first movie was about seeing shades of gray in the world, perhaps in this one will be about the shades of gray in leadership: A chief must always fight for his people, but you don’t have to be chief to fight. You can be important, even pivotal, without being the leader of the tribe.

So, of course, Hiccup’s going to win this fight. But he wants to be out there (the film’s Jonsi single is even title “Where No One Goes”, in reference to Hiccup’s adventuring streak). He’s not going to be the chief. We’ve already foreshadowed that Astrid should be the one with that job. It’s predictable but interesting. And more than a little brave for a summer movie aimed at the teenage demographic.

I should have realized that none of this was going to happen when it became apparent that Astrid’s screen-time was dramatically reduced from that of the first film.

Then Stoick is killed during the first battle with Drago, a plot twist that is completely unnecessary except to clear the way for Hiccup to become the new chief — you know, the job he doesn’t want and thought Astrid would be better at.

Finally, in the movie’s penultimate scene Toothless attacks Drago’s super-creepy dragon-mind-controlling “Alpha”, freeing the other dragons from its grip. Together the dragons beat back Drago and the Alpha… And then all of the dragons accept Toothless as the new “Alpha”, providing the necessary symbolic segue for Hiccup to become Berk’s new chief. You know, the job he didn’t want and thought Astrid would be better at.

(And what is it anyway with the convention that for male characters to come into their own, their fathers gotta be snuffed out? It’s completely unnecessary in most cases, and verges on the Oedipal. Just stop. Please. Just. Stop.)

The message of How to Train Your Dragon 2 seems to be that sometimes you’re just handed responsibilities you don’t want, and you have no choice but to accept them. That sometimes you have to set aside what you love, what you are, for the greater good. And sure, that’s true sometimes… But jeeze, don’t hand the kid a shit sandwich and then make out like it’s gonna be happily ever after.

What I find interesting, and more than a little distressing, is that all of these problems are really problems in the film’s weirdly abbreviated third act. It feels as if Dean DeBlois wrote a great script that totally ran with the mildly subversive themes of the first movie, and then someone higher up the food chain read it and was like, “you know, we’ve already got a great thing going here… Why are you risking it by trying to be unconventional again?” And then they handed DeBlois a copy of Save the Cat! and commanded him to strip out enough of the movie to fit in a third act that “fixed” the “problem.”

I really hope that’s not what happened. But How to Train Your Dragon 2 feels like something really special that the suits got to. What’s left may be a lot of fun… But it could have been so much more.

Masculinity and Mass Shootings



Trigger Warning: Violence against Women Last Night in Santa Barbara California, a Gunman in a BMW opened fire on students near the UC Santa Barbara campus in Isla Vista. Seven are dead including … He’s a “good guy”! Right. Of course, an actual good guy wouldn’t pick up a gun and decide to kill people.

The murderer called himself an Alpha Male. He wasn’t. He’s another domestic terrorist who grabbed a gun and killed people.

The money quote of all money quotes from his youtube “manifesto”:

On the day of retribution I will enter the hottest sorority house of UCSB, and I will slaughter every single spoiled stuck up blonde slut I see inside there. All those girls that I’ve desired so much, they would have all rejected me and looked down upon me as an inferior man if I ever made a sexual advance towards them. While they throw themselves at these obnoxious brutes. I’ll take great pleasure in slaughtering all of you. You will finally see that I am in truth the superior one. The true Alpha Male.

This should go without saying, but if you think violence is a suitable reaction to not getting what you want, be it an orgasm or a job or a stick of gum, you are not a good person, let alone a nice one.

Something that is seldom mentioned about these sorts of mass shootings is that the perpetrator is always male, and the victims are almost always disproportionately female. This is a pattern that’s held pretty consistently for at least the last twenty years.

Yes, mass shooters are pathological. They’re outliers. But they’re working from the same foundations as the rest of society.

If that doesn’t tell you that there’s something deep and dark at the heart of “what it means to be a man” in our society, I don’t know what will.


Two kaiju battle near Alcatraz Prison, with the Golden Gate Bridge in the background.

Godzilla vs. Pacific Rim



Why Godzilla Kicked Pacific Rim’s Ass at the Box Office

Though Pacific Rim was arguably a more original and complex movie than Godzilla, it fizzled at the box office – while Godzilla’s formulaic fun earned so much money its first weekend that the studio has already ordered a sequel. What made one giant monster movie succeed where the other failed? [link]

My god, this is a depressing take on the relative fortunes of Godzilla vs. Pacific Rim.

Considering that the purported “message” of both movies focuses on global climate change, the final point (“We just want to be rescued”) lives somewhere beyond depressing.

I think there’s a whole conversation here about cultural attitudes to challenges such as global warming… Are we going to sit around waiting for inventors/bureaucrats/markets/God to save us, or are we going to fucking suck it up and save ourselves?

Big problems like global warming, war, etc. represent both collective action problems and market failures… Which means that if you’re going to solve them you need something that enables people to take mass, coordinated action that isn’t constrained by market logic. That mean being actively engaged in things that function a lot like NGOs, governments, etc.

As Newitz points out, Pacific Rim was very much that sort of story. There are sacrifices. Good people die. But in the end people working together can overcome.

In Godzilla… Well, human collective action is at best completely ineffective. Most of the time, it just makes everything worse. The message seems to be one of complete, passive acceptance of our fate, with our only hope being that God – in the form of Godzilla – will save us.

If Pacific Rim was fundamentally a movie about humanist values, then Godzilla 2014 has at its core a deeply anti-humanist outlook.

A screen capture of the GitHub project for Lifelog.rb.


Here’s something I’ve been working on for the last month or so…


This is a simple life logging script designed to work with the excellent Day One for MacOS X. While I use it in conjunction with IFTTT and Dropbox, there’s nothing in the code that requires this setup. It would work just as well with Google Drive, for example, or you could even pull data down yourself from various RSS feeds and drop the data into a local directory in the right format.

Old data is never directly deleted, but instead archived in a location of your choice (which may very well be the Trash…).


lifelog.rb was developed under Ruby 2.1.1; it may very well run with early versions, but I haven’t tested it. The only non-standard gem used is exiftool. lifelog.rb also makes a call out to the terminal-notifier binary to produce notifications.

I recommend installing Ruby using rbenv and ruby-build; both of those, along with the exiftool and terminal-notifier binaries, can be installed using Homebrew. Check out the rbenv GitHub page for details on how to get Ruby working.

Once you’ve got Ruby 2.1.1 installed, just use gem install exiftool to pull down the exiftool gem.


lifelog.rb is configured via a simple YAML file at ~/.lifelog.yml an almost-ready-to-use version of this file can be found in this repository with the name lifelog.yml. It contains the following configuration options, all of which are currently mandatory:

  • lifelog_dir: A string defining the raw log storage directory (see Providing Data, below).

  • archive_dir: A string defining the directory old log files will be archived in after processing.

  • log_order: An array of strings defining the order in which different logs will appear (see Providing Data, below). Logs not defined here will still be processed, but will appear in alphabetical order after those on this list.

  • day_boundary: A (military) time (%H:%M, i.e., 00:00 - 23:59) denoting when a “logical” day should end. Set this to a time you are certain to be asleep. Events before this time will be considered part of the previous day for logging purposes (hence setting it to 00:00 will cause logged days to align with calendar days). You must quote this string, as otherwise Ruby’s YAML gem will interpret the colon in weird ways.

  • day_one: A list of Day One specific options:

    • journal_dir: The location of your Day One Journal (i.e., the Journal.dayone package).
    • starred: Should life log entries be automatically starred in Day One? I can’t think of a reason anyone would want this, but it’s included for completeness.
    • tags: An array of tags that new life logs entries should be automatically assigned. Useful for distinguishing automatically created entries from things you write yourself.
    • lock_file: By default, lifelog.rb will only run once a day, and will not process entries from the current “logical” day. This is done to prevent incomplete journals from being entered into Day One. The lock_file will have the current day’s timestamp written out to it, as a way to quickly prevent the rest of the script from executing if the time is not yet ripe.

Providing Data

The lifelog_dir is expected to have the following structure:

./Day One/weather.txt
./Day One/Photos/*.jpg
... etc. ...

The Day One directory is special, and is composed of items that will be integrated into the Day One journal entry but are not actually logs; currently this information is weather and (potential) header photos. All other directories are considered to be logs, and are expected to contain a log.txt file of timestamped log entries and/or an Atomic directory of non-timestamped log entries.

It is thus not possible to have a log called “Day One”. However, any other log directories should be fine.

Any directory may be missing and/or empty, in which case no log entries will be generated from that source. All file timestamps are should be in the form “April 29, 2014 at 06:08PM” in files, and April_29__2014_at_0608PM for files.

Which is kind of a dumb format for these things, but won’t get changed until IFTTT provides better timestamp support (right now, that’s how the timestamps it generates are constructed).

Day One Directory

The Day One directory contains files that represent metadata that will be written into Day One journal entries, but are not actually entries themselves. Right now this consists of a file weather.txt recording weather conditions and a Photos directory containing potential journal header files.


This file records weather conditions, one entry per line, in the following format:

TimeStamp :: Condition1(Value1),Condition2(Val),etc.

Where TimeStamp is in the format %B %d, %Y at %I:%M%p (i.e., “April 29, 2014 at 06:08PM”) and conditions are taken from the following list:

  • Celsius: An integer representing the temperature in degrees Celsius.

  • Description: An arbitrary string (well, no parentheses) describing the weather.

  • Fahrenheit: An integer representing the temperature in degrees Fahrenheit.

  • Pressure MB: A float representing the pressure in millibars.

  • Relative Humidity: An integer representing the relative humidity (not sure what the units are here).

  • Service: An arbitrary string (well, no parentheses) indicating the service used to pull the weather data.

  • Visibility KM: A float representing the visibility in kilometers.

  • Wind Bearing: An integer representing the wind bearing (I believe in degrees as measured clock-wise from North).

  • Wind Speed KPH: A float representing the wind speed in kilometers per hour.

  • IconName: A PNG icon name. Full URLs will be accepted, but all path information will be stripped before insertion.

These conditions can occur in any order; conditions not on this list will be silently ignored. Thus, a valid entry in weather.txt looks something like the following.

April 30, 2014 at 02:57PM :: Celsius(11),Description(Partly Cloudy/Wind),Fahrenheit(52),Relative Humidity(32),Wind Speed KPH(42),IconName(http://ifttt.com/images/weather/wind.png),Service(IFTTT)

Only one weather entry is recorded per logical day. If multiple entries are present, the latest entry for that day is used.


A directory of JPG photos, named as TimeStamp_String.jpg, where TimeStamp is of the form %B_%d__%Y_at_%I%M%p (i.e., April_29__2014_at_0608PM) and String is an arbitrary string. Thus, a valid photo name will look something like:


Images are first groups by date: lifelog.rb will first attempt to use the EXIF “Date/Time Original” field, then the EXIF “Date Created” field, and finally parse the file’s leading TimeStamp. Within a logical day, images are sorted widest to tallest, largest to smallest, and latest to earliest. Only the “first” image in the sorting (i.e., the widest image that has the highest resolution and latest timestamp of all other images with the same aspect ratio) will be used.

If EXIF GPS coordinates are present in any of these images, they will be used for the journal entry. The fall-back order for GPS coordinates is the same as for the images themselves.

Log Directories

All directories other than Day One are considered to be logs, each of which is given the same name as the directory itself (so if you want a log called “Fluffy Things”, you should have a directory called Fluffy Things). The best way to record information for each log is in a log.txt file located within this directory. As a fall-back, log entries can also be stored in the Atomic subdirectory, which records one entry per file. The difference between these methods is that log.txt contains leading timestamps, whereas entries in the Atmoic subdirectory are expected to not have timestamps (the entry timestamps will be taken from the file modification time).


log.txt contrains one log entry per row in the format TimeStamp :: Entry, where TimeStamp is in the format %B %d, %Y at %I:%M%p (i.e., “April 29, 2014 at 06:08PM”) and Entry is an (almost) arbitrary string. Since each line is considered a log entry, no line breaks are permitted within Entry; however, \n and \r strings will be replaced by newlines in the final output, so if you want to get extra line breaks you can use these. No other processing is performed on Entry strings.

Note that Day One stores entries internally using Markdown, so there’s a lot of formatting potential here. In my testing, it also accepts a limited number of HTML tags (in particular, <sub/>). All strings are considered UTF-8 encoded, which means that you also get a lot of special characters to play with.

It is also possible to start off log entries with a TimeStamp of %B %d, %Y (i.e., “April 29, 2014”). These entries are considered “all day” events, and will be presented before all other entries in a given log. “All day” events are separated from regular entries with a single horizontal rule.

Log entries will be sorted by timestamp, and thus do not need to appear sequentially within a log file. An example log snippet is presented below.

April 14, 2014 at 06:22AM :: Sunrise
April 14, 2014 at 07:34PM :: Sunset
April 14, 2014 at 02:22AM :: Went to bed
April 14, 2014 at 06:45AM :: Woke up [slept 4h 14m]\r\r![Light Sleep: 66.27%, Deep Sleep: 25.29%, Awake: 8.44%](https://my.domain/image.png)\r
April 14, 2014 at 08:14AM :: Black Tea, Granola, and Vanilla Non-Fat Yogurt
April 14, 2014 at 09:30AM :: Meeting [[calendar event](https://my.domain/calendar/link1)]
April 14, 2014 at 11:00AM :: Call [[calendar event](https://my.domain/calendar/link2)]
April 14, 2014 at 01:00PM :: Training [[calendar event](https://my.domain/calendar/link1)]
April 14, 2014 :: Walked 1.2 miles
April 14, 2014 at 07:42PM :: Black Beans, Hot Organic Salsa, Mild Cheddar Cheese, Tortilla Chips, and Water

Atomic Logs

Sometimes you can’t get event timestamps for some reason (for example, IFTTT doesn’t offer the option to record when you archived an entry from the Pocket read-it-later service, only when the entry was first saved). In these cases, you can write out “atomic” log entries into the Atomic sub directory. Each entry should be a single file containing a single line with the same formating as the Entry string described in the previous section. In this case, entry timestamps will be computed using the log file modification time.

This is obviously less-than-ideal. You should always record entries in log.txt when possible.

Script Workflow

lifelog.rb will begin checking to see if the lock_file contains today’s date. If it does, then the script exists. Otherwise it creates a directory named lifelog.TimeStamp in archive_dir, where TimeStamp is of the form %Y%m%d%H%M%S.

The script then descends into the Day One directory, moving weather.txt to a corresponding directory in today’s archive and then parsing out all weather events. Any events that occur in the current logical day (or in the future) are written back to a new weather.txt file.

The Day One/Photos directory is then moved into today’s archive, and all photos are processed with exiftool. Photos corresponding to the current logical day or later are copied back to their original location.

Finally the log directories are processed. Each log directory is moved into today’s archive, and then log.txt is processed, with events from the current logical day or later copied back to a log.txt file in the original location. The Atomic subdirectory is then moved as well, and every file within it is processed. As before, files corresponding to the current logical day or later are copied back to their original location.

The end result of this is that all data for past logical days is read in and archived, while data for the current logical day and any future days is returned to its original location and not read in.

Once all data is read in, Day One journal entries for every logical day since the date recorded in the lock_file are generated (recall that no data is read in for the current logical day or any later days). If photos exist for a particular day, then the appropriate one is copied into the Day One journal for that day.

Once all journal entries are written out, today’s date is written out to lock_file and the script exits.

Known Issues

lifelog.rb is the first substantial script I’ve written in Ruby, and I’m sure it has problems. Here’s the ones I currently know about:

  • Sensible defaults should be set for configuration options not included in lifelog.yml.

  • There are definately file encoding issues. Right now I force all text to be interpreted as UTF-8, but I really should try to detect what my encoding is instead (and probably convert to UTF-8).

  • At the moment I do no time zone determination. In fact, I explicitly throw all time zone information away. But time zone support is really a must. (This will need to wait until IFTTT implements better timestamp functionality.)

  • Speaking of timestamps, it would be nice to let users choose their own format. (This will need to wait until IFTTT implements better timestamp functionality.)

  • Speaking of time zone support, once we have it we should note time zone transitions in the journal.

  • At the moment I make system calls to determine current hardware and OS versions. It would be good to replace this with pure Ruby code.

  • Geolocation is essentially unimplemented, except for pulling latitude and longitude out of header images (if that information exists). It would be good to add in better location support, including inserting a default location if no header image exists. However, none of the Ruby geolocation gems I tried seemed to work reliably.

  • Calling out to exiftool to get image metadata seems… Broken. Better to use the Ruby bindings for exiv2, perhaps. However, none of the projects providing exiv2 bindings as a gem seem to provide adequate functionality or be actively maintained.

  • The Day One Mac app displays images correctly rotated based on the embedded EXIF rotation data, but the iOS app does not. While this looks to be an issue with Day One on iOS, it would probably be worth just rotating all images to match their embedded rotation data. It looks like this can be done using the auto_orient! method of the RMagick gem.

  • The current use of day_boundary to arbitrarily provide a cut-off for today seems too coarse. However, simply relying on sleep times results in too many edge cases if one is inclined to take naps. A better solution is needed.

  • Right now entry time is taken to be the last journal entry of the logical day, or 23:59:59. It would be nice to consider the time stamp of header photos as well, though as a practical matter I think this will rarely result in a different computed time.

  • At the moment journal entries that correspond to previously processed days are silently ignored. It would be better to append these entries to the corresponding log in the appropriate journal. This is a lot harder to do than it sounds.

  • I can’t figure out how to get terminal-notifier to use Day One’s icon instead of it’s own. Help!

Bug reports, ideas, and contributions welcome. As I noted previously, I use this script every day, so I’m not going to accept a change that breaks my usage or adds undo complexity. But I’m sure there’s still a lot of room for improvement here, and would love some help making this script even better (and more useful for others!).


This script is licensed under the GNU GPL v3. See the LICENSE file in the git repository for the full license text.