Sunday, May 08, 2011

Migration

I'll be moving this blog to http://blog.hashcollision.org.

Saturday, April 17, 2010

shimmer

One of my favorite companies is trying to kill my active area of research and personal interest. When Apple engages to hurt children, when they enforce a discriminatory and irrational policy, then they've crossed a terrible line. I've listened to the counterarguments, but I can only conclude that what they're doing here is morally wrong.

The iPhone has lost its shimmer for me. Time for a new phone.

Tuesday, July 22, 2008

quilty

I wonder if Nabokov would laugh.

I need to stop doing things that make me feel guilty.

Sunday, June 01, 2008

decentralize

I've been using git for my source code control, and I'm happy I switched to it. I found out recently that my hosting service was burning; apparently something electrical exploded, knocking out a few of webfaction's servers.

I noticed the problem only when I was trying to push my changes upstream from my machine back to the mothership.

Long pause, no motion.

No problem. I canceled the push, and just continued to work and commit changes to my local machine.

I remember back at my previous workplace how the knockout of our main svn server meant we got to take the day off because we couldn't get any work done. Of course, I'm not telling the whole story. Not only was that server knocked out, but the whole building in general: we had a power outtage for a few hours. So that somewhat undercuts the story a little; decentralizing our source code server still wouldn't have saved us on that day.

Labels:

Thursday, January 10, 2008

happy birthday

I didn't realize that Don Knuth's birthday was today. Happy birthday Professor Knuth!

Sunday, November 25, 2007

zelda

I held my sword in front, and approached the village cautiously. I would have to slaughter the terrible Yook monster disguised in one of the hapless villagers's homes. I pushed the doors open, ready to hack and slash. To my shock, all of the villagers looked exactly the same!

And each had something to say about the other Anouki:

* FoFo said that Gumo was honest.
* Kumu said Mazo or Aroo was lying.
* Dobo said Mazo was honest.
* Gumo said Fofo or Aroo was lying.
* Aroo said Kumu was lying.
* Mazo said that he and Dobo were honest.

How dastardly! Only the Yook would lie to me. And I couldn't just kill them all and let God sort them out. I had to think about this. So I did what anyone in this circumstance would do: I pulled out Alloy.


abstract sig Boolean {}
one sig True, False extends Boolean {}

abstract sig Anouki {
truthful: Boolean
}

one sig Fofo, Kumu, Dobo, Gumo, Aroo, Mazo extends Anouki {}

pred whoTellsTruth {
Fofo.truthful = True implies Gumo.truthful=True
Kumu.truthful = True implies ((Mazo.truthful=False) or
(Aroo.truthful=False))
Dobo.truthful = True implies Mazo.truthful=True
Gumo.truthful = True implies ((Fofo.truthful=False) or
(Aroo.truthful=False))
Aroo.truthful = True implies (Kumu.truthful=False)
Mazo.truthful = True implies (Mazo.truthful=True and
Dobo.truthful=True)
}

pred onlyOneIsLying {
one a: Anouki | a.truthful=False
}

run {
whoTellsTruth
onlyOneIsLying
}


Ah ha! But as I was about to raise my gleaming blade against the trembling liar, doubt came to my mind: what if there were two of them out there? Or three, or four? I thought: perhaps I should plan this out more carefully before executing my righteous justice. And maybe I should rewrite the model a little more to make it more general: who knows how many villages of liars I might run across?


/* Anouki can be friendly or antagonistic to other Anouki */
sig Anouki {
supports: set Anouki,
denies: set Anouki
} {
/* and it's nonsensical to be both supportive and antagonistic of
the same Anouki. */
no (supports & denies)
}

/* A village consists of folks who tell the truth, and symmetrically,
those who lie. And we will categorically make every Anouki a
truthteller or a liar. */
one sig Village {
truthtellers: set Anouki,
liars: set Anouki
} {
no truthtellers & liars
Anouki = truthtellers + liars
}

fact truthiness {
all a : Village.truthtellers {
all a' : a.supports | a' in Village.truthtellers
all a': a.denies | a' not in Village.truthtellers
}
}

/* Here's what everyone says about each other */
pred hearsay {
some disj fofo, kumu, dobo, gumo, aroo, mazo : Anouki {
fofo.supports = gumo
fofo.denies = none
kumu.supports = none
kumu.denies = mazo or kumu.denies = aroo
dobo.supports = mazo
dobo.denies = none
gumo.supports = none
gumo.denies = fofo or gumo.denies = aroo
aroo.supports = none
aroo.denies = kumu
mazo.supports = mazo + dobo
mazo.denies = none
fofo + kumu +dobo + gumo + aroo + mazo = Anouki
}
}

pred oneLiar {
hearsay and #Village.liars = 1
}

pred twoLiars {
hearsay and #Village.liars = 2
}

run oneLiar for 6
run twoLiars for 6


Hours passed as I played out different scenarios. By this time, the Yook had already run away, but I had a model I was happy with.

Labels: ,

Tuesday, October 02, 2007

consistency

There's so much work that I have to do, and I've realized that one of my personal failings is not necessarily the understanding of hard stuff. Rather, it's getting the easy stuff even started.

It's a main point of Better: performance isn't about the shiny tools: it is more about the "gruntwork". It's the mundane task of being consistent, of staying on target, with which I struggle and flounder about like a floppy fish. My failure to do better isn't for lack of technical tools or skills: what I'm missing is consistency. Adults should have the firmness of mind to do something even if there are no immediate results. But my mind is still mushy and squishy. It has the consistency of oatmeal.