www.archive-ee-2014.com » EE » E » EEV

Choose link from "Titles, links and description words view":

Or switch to "Titles and links view".

    Archived pages: 120 . Archive date: 2014-07.

  • Title: fuzzy notepad
    Descriptive info: .. fuzzy notepad.. Atom.. Blog.. About.. Projects.. Sun 25 May 2014.. Braid.. There was a shooting, but this post is not about that shooting.. This post is about what we tried to do to stop thinking about the shooting, because the deluge of apologists can wear on a person after a while.. So we got some lunch and sat down to watch some funny Internet videos.. We enjoy the vidcons, so I scrolled back through retsupurae looking for something that caught my eye.. I found.. Braidple Story.. , which sounded promising because I would still gladly call Braid the best vidcon I ve ever played.. Spoilers: the game is terrible, like you do.. More spoilers: the game is a hamfisted attempt at recreating Braid s theme that falls completely flat, because 99% of it is the protagonist s overt creeping on this girl (with totally believable voice acting and horrifying dialogue) and then right at the end she goes Leave me alone ugh! and that s the end of the game.. All told, that didn t really help get my mind off of Gender Stuff.. But it did put my mind on something else, which is: Braid.. A brief recap of Braid.. Since time-travelling platformers are not everyone s cup of tea, let me go over the game s plot real quick here.. If you haven t played it yet and.. want.. to, you might want to just bail on this post until you ve cleared out your Steam queue.. Braid is a simple platformer, complete with overt Mario homages, including the chasing of a princess.. The game is split into six chapters, and before each one, you get few paragraphs of flavor text about what your protagonist Tim is thinking.. (Wikiquote has it all.. quoted in its entirety.. if you care to read it.. ).. World 2 (Time and Forgiveness) opens with the plot of the game: Tim is off on a search to rescue the Princess.. But not just any princess; the narrative makes clear that the two were in a relationship, and Tim made some (perhaps many) mistakes, and now feels he ought to be forgiven for having learned from them.. Tim s memories are muddled, but very clear in his mind is the sight of the princess turning sharply away, her braid waving at him.. (Ah! That s the game s title!) This chapter is the introduction to the controls: you can walk around, jump, and activate switches.. You then run across a platforming puzzle that requires almost inhuman timing to get right, and this is where you discover the core mechanic of the game: you can reverse time, at will, whenever you want, all the way back to when you entered the level if you so choose.. And so, quite appropriately, you can undo any mistakes you ve made and learn from them.. World 3 (Time and Mystery) reveals that Tim was the one who left, and now he s trying to go back to her.. Apparently he felt trapped by her expectations, which he himself had preserved by undoing all of his own missteps, and felt that he could never escape beyond the person she thought he was.. Sometimes, he needed to be immune to her expectations, to preserve some other part of himself even as he undid his mistakes.. And so we have the new mechanic for World 3: in each level, some objects glow a sparkly green, and these objects aren t affected by the reversal of time.. If you use a sparkly green key to open a door and then reverse time, the door will close, but the key will remain broken.. Everything else is the same, but this makes your power vulnerable.. World 4 (Time and Place) remarks on how certain places remind us of memories of those places — of other times.. Tim sets off wandering to various places where he has memories of his princess, in the hopes that he will find her there, or even be transported back to when he was with her.. In this world, the levels literally link time with place: time advances forwards as you move to the right, and backwards as you move to the left.. You can still reverse time, but only for yourself; time for everything else in the world is linked to your horizontal position.. World 5 (Time and Decision) hints that Tim is leaving another lover to search for his princess, the obsession is so strong.. Here, whenever you reverse time, a shadow of yourself is left behind to act out whatever you had last done from that point forward.. You can see your former decisions play out alongside your current ones.. World 6 (Hesitance) mentions a ring, and strongly suggests that it s an engagement or even marriage ring from the princess.. He still wears it, and it makes it harder to romance other women — so he s learned to approach slowly when he wears the ring, or forego wearing it entirely whenever he can bear it.. In this world, Tim can place his ring anywhere he wishes, and time will be slowed down within a small radius of it.. He can, as usual, still rewind time, but slowing it down in only part of the level can make patterns go out of sync.. Curiously, this is the first world to have a black background and break with the naming scheme.. The music is, as I recall, also significantly darker than before.. This brings us to the end of the story.. But as this is a game about going backwards, the final part is World 1.. World 1 has no title.. The intro text paints Tim as eerily calculating, and explicitly names him as moving contrary to everyone else — or everyone else contrary to him.. World 1 begins with three simple levels, each one removing more platforms from the last.. The gimmick here is simple: time moves backwards.. When you enter a level, you see a series of events play out backwards.. You can still reverse time, but that makes everything else move.. forwards.. This has funny implications for cause and effect: if you jump on a monster, it can t die, because the next moment it experiences is the.. preceding.. moment and it hadn t yet been jumped on.. Wacky platforming abounds.. After these few simple introductory levels, we have the final boss, in a sense.. Tim emerges into the catacombs of a castle; above him, the princess is in the arms of a knight yelling I ve got you! She gets away from him and yells Help! ; he calls to her to get back to him.. And the chase is on: the knight has a stomping fit which starts to bring down parts of the ceiling above you, and a wall of flame starts to approach from the left.. Both Tim and the princess run to the right, running from the fire and the knight respectively, and occasionally the princess stops to throw a switch that clears an obstacle for Tim.. After some excellent platforming, assisted by the occasional time reversal, she finally reaches her bedroom, and he finally escapes the catacombs and climbs a lattice to arrive outside her window.. The screen flashes, and the player loses control.. Seemingly nothing has changed.. But now the music is running backwards, and everything the player just did with Tim is running backwards as well.. And as you watch the level unplay itself, a horrible realization creeps up on you.. Remember, this is still World 1, and everything but Tim has been playing out in reverse.. As Tim runs.. backwards.. through the catacombs, events take on a completely different meaning.. Tim is now chasing after the princess, not running ahead of her.. The princess isn t clearing obstacles out of the way; she s closing off all the escape routes out of the catacombs.. And she never escaped from the knight — rather, the last we see of her is as she jumps into his arms, and he takes her away from the madman in the basement.. Perhaps we should ve seen this coming.. The level, the only one in World 1 that has a title at all, is called simply Braid — the last thing he remembers seeing when she turned away from him.. The shift in perspective is absolutely, beautifully, perfect.. The intro levels are simple so the mechanic doesn t stick in your head too hard, and the entire castle level is designed to let you forget that everything else is moving in reverse.. There s an epilogue.. It has some simple platforming, but for the most part it s just more flavor text.. This stuff is a bit more abstract; it speaks of moments of Tim s childhood, of an experimenting scientist, of the birth and death of the world.. The interpretation.. After I played Braid, I was fascinated by the somewhat more mysterious passages in the epilogue.. I scurried to the Internet to see if anyone else had made any deep sense out of them.. I was pretty disappointed with what I found.. The epilogue quotes Now we are all sons of bitches , and uses the words radiated and ashes.. So it became something of a widespread consensus that the game was.. clearly.. one big metaphor for the Manhattan Project.. That interpretation has never made any sense to me, yet everyone who said it seemed to feel very clever for having figured it out.. (The game s author has refused to say what the game is about.. If you haven t read through.. the script.. , now might be a good time.. Remember, this is.. all the text in the entire game.. There are no NPCs, no dialogue; just these glimpses of a story.. I always thought the game was about two things.. The first:.. time.. , which you have to really stretch to relate to the development of a nuclear bomb.. The second:.. Tim.. , who is after all the protagonist of both the game and most of the plot text.. It all seems pretty cut and dry to me.. The game is entirely about undoing what we ve already done, and Tim wishes to return to the arms of his princess.. The various worlds are the ways he dwells on her and imagines how things might have gone differently.. Consider also that the prose, despite being written in third-person, is written from Tim s point of view — and we already know Tim is an unreliable narrator.. He said he left the princess, but we.. watched her.. run away from him.. Thus I have slightly different interpretations of what the worlds were actually about.. World 2 is the obsession with reliving mistakes, trying to see where he went wrong, and feeling like figuring that out means he s undone the mistake entirely.. World 3 is the uncomfortable discovery that not everything can be so easily undone.. World 4 is his aimless drifting through the world, as time passes him by.. World 5 is confusion between what he.. did.. and what he.. might have done.. , so intertwined that there s no telling which is real.. World 6 is a final memento he obsesses over, a trinket that no longer holds any real meaning but still distorts everything around it from Tim s perspective.. World 1 is the actual breakup.. His princess was stolen away by a knight in shining armor.. He remembers it backwards, because his perspective is just that warped, and that s the only way to preserve his view of events.. This all seems pretty reasonable, right? Tim is a creep.. You ve been playing as a creep the entire time.. Reading through the transcript again now, I can t believe I didn t think he was.. ten times creepier.. at the time.. Were they even dating, or was he just stalking her? If he stalked her, why did he have a wedding ring? He left other women to go pine over her some more, and they missed him? Crrrreepy.. But everyone chose to focus on the couple lines about the Manhattan Project, which need some severe contorting to relate to the rest of the game.. Why?.. Why.. Watching that longplay of the Braid ripoff, in the context of everything that s happened in the last couple days, I realized something.. Nobody wants to be Tim.. Well, sure.. But it s stronger than that:.. nobody wants to believe Tim could exist.. We played as Tim.. He was just a platformer guy, but we identified with him on some basic level.. He was our little avatar, solving cool time puzzles with us.. We.. were.. But we don t want to be Tim.. So instead we want to reach out for something,.. anything.. else that will let us not be the Tim the game appears to be presenting to us.. And the epilogue provides us an escape hatch: if the entire game is a metaphor for the atom bomb, then we aren t Tim.. We aren t who the game tells us Tim is, anyway.. We re something else, something fuzzier, something we don t really have to think about.. It doesn t matter that the metaphor doesn t make any sense.. It doesn t matter that more of it is about plain old daily life than about nuclear explosions.. It only matters that it s.. not Tim.. And this, I believe, is the heart of the backlash against.. #YesAllWomen.. and anyone expressing any real outrage about the.. UCSB.. shooting.. Because these things drive home that some people just might be Tim, or worse.. Maybe some of.. us.. are Tim.. And we don t want to be Tim, whatever the cost.. So we paint the shooter as just mentally ill, crazy, depraved.. We d call him a religious fundamentalist (read: nut) if we could, or a terrorist if we could, or just a plain old natural criminal if we could.. But we ve only got so much to work with here.. We paint lines around him.. Thick, hard lines.. Lines to make it clear that he s nothing like us.. Even the people who fueled his rage, the people who practically identify themselves as antagonists, the people he seemed to identify with, draw these lines.. Not one of us.. Nope.. Never heard of im.. Because even they, fundamentally, recognize that they don t want to be Tim.. They want to put Tim as far away from themselves as possible.. They don t want to think about how many other Tims might be in their midst; that s deeply unsettling, and the human mind is great at rationalizing such things away.. So instead of using this as an opportunity to root out the Tims and make the group better by pushing them out, we distance ourselves from this particular Tim, and just don t think about it further.. And that s why Tim was free to do whatever he wanted.. In his whole tale, he never remembered anyone telling him no, or pushing back.. The only time we see anyone really resist Tim in a meaningful way is when the final level runs in reverse and the princess runs away from him — something he doesn t even believe happened.. The most striking part of the epilogue, for me:.. The candy store.. Everything he wanted was on the opposite side of that pane of glass.. The store was decorated in bright colors, and the scents wafting out drove him crazy.. He tried to rush for the door, or just get closer to the glass, but he couldn t.. She held him back with great strength.. Why would she hold him back? How might he break free of her grasp? He considered violence.. They had been here before on their daily walks.. She didn t mind his screams and his shrieks, or the way he yanked painfully on her braid to make her stop.. He was too little to know better.. She picked him up and hugged him: No, baby, she said.. He was shaking.. She followed his gaze toward treats sitting on pillows behind the glass: the chocolate bar and the magnetic monopole, the It-From-Bit and the Ethical Calculus; and so many other things, deeper inside.. Maybe when you re older, baby, she whispered, setting him back on his feet and leading him home, Maybe when you re older.. Every day thereafter, as before, she always walked him on a route that passed in front of the candy store.. Does this sound familiar? Tim wanted the candy, but she wouldn t let him have it.. He felt entitled to it, he got violent over it as best he could.. And when he couldn t have it, he grew to resent her for taunting him with it, even though to her it was just the usual route home.. How far is it from Tim to hands that are a bit too grabby? To rape, murder, a mass shooting?.. Violence is not a simple question of yes or no; plenty of cultural factors affect it.. How many Tims are we enabling by refusing to acknowledge that he already exists, that we re creating and nurturing Tims all the time?.. Even one is too many.. In our world,.. everything.. has green sparkles.. As for Tim.. Enough heavy stuff.. Let s talk about World 1 a bit.. Trick question: where does the story end? Is it where the game ends, in World 1, or is it where the numbering ends, in World 6?.. Or is it both? Is this one big cycle, as Tim hops from princess to princess, and the game begins anew? Is it his own cycle, of reliving his time with her over and over?.. Ah, but there s something else about World 1.. The game has 8 stars hidden throughout it, generally not even.. visible.. without some outrageously finnicky puzzle solving.. But if you manage to find 7 of them, something changes in the final level.. Two of the switches in the catacombs now have green sparkles.. It s a very subtle change, but it means that Tim can throw a switch, reverse time, and now go through the passage he opened.. earlier.. than he could ve otherwise.. It s a small difference, but it s enough to let Tim run so far ahead that the wall of fire, the wall of causality, falls off the screen entirely.. In fact, he gets so far ahead that he gets.. ahead.. of the princess before she reaches her bedroom.. He s already nearby and waiting when she springs her last (actually first) distraction on him: dropping a chandelier.. And with some well-timed jumping, Tim can hop on the chandelier as it un-falls upwards, and ride it up to the ceiling.. Tim.. catches up to the princess.. The screen whites out, more violently than before.. When it returns, the princess is gone.. The music is gone.. In her bedroom, directly above her bed, Tim finds the final 8th star.. Then there s nothing left to do but run back to the beginning, leave through a previously inaccessible door, and see the epilogue again.. I love this, by the way.. The slightest change in the level design changes absolutely everything.. If World 1 truly is the beginning of a cycle, then getting all the stars is the end of it.. Because there.. is.. no princess after that.. He caught up with her, and she was a phantom.. And since it s World 1, where time moves backwards, this last level is really the first level of the game.. Even the levels are numbered in reverse in World 1.. Without a princess, none of the rest of it needs to happen.. Tim is free.. You can only find the stars by replaying the game at least one more time, and the original 360 version had a speedrun achievement to encourage you to play it a few more times.. So you really do get to see Tim jump through the same hoops over and over again.. But the stars are different.. The stars are new.. The stars are things you — and thus Tim — never noticed the first time around.. The stars require patience and careful thought to find.. And only once you, and Tim, have found all these moments hidden away in Tim s romanticized memories, can Tim get a different ending.. I can t know what the game s author was truly going for, but I m content to believe that it s this: maybe we can t undo what we ve done, but there s always hope for Tim going forward, with a little help from someone willing to stick through it with him.. I leave you with the very end of the epilogue:.. He cannot say he understood all of this.. Possibly he s more confused now than ever.. But all these moments he s contemplated — something has occurred.. The moments feel substantial in his mind, like stones.. Kneeling, reaching down toward the closest one, running his hand across it, he finds it smooth, and slightly cold.. He tests the stone s weight; he finds he can lift it, and the others too.. He can fit them together to create a foundation, an embankment, a castle.. To build a castle of appropriate size, he will need a great many stones.. But what he s got, now, feels like an acceptable start.. If you re interested:.. Braid s climax.. , and.. Braid s secret climax.. Sat 05 April 2014.. Comment policy.. I m.. still.. dealing with cretins comments on my.. PHP.. post, two years later.. I ve always made an effort to never delete or ban any of them, in the interest of allowing discussion and all that jazz..  ...   interfaces.. Don t get me wrong; Pokémon X and Y are absolutely the best in the series and even just showing the party Pokémon from within the bag is nothing short of genius.. But goddamn how does nobody working there notice these other things, some of which have been around since Red and Blue.. (Pretty light spoilers since this is just standard Pokémon gameplay stuff.. When learning a new move and choosing which one to delete (in battle, anyway), there is no way to see the Pokémon s stats.. So if I m choosing between a 60 power physical move and a 70 power special move, which is not uncommon I can t see if the Pokémon has better Attack or Special Attack.. I often end up having to consult veekun to guess at the stats of the Pokémon that s already out!.. Getting from a move to its description (and damage class, ahem) in battle is ridiculously tedious.. You can, of course, hold L and choose a move to see its properties.. But this is never mentioned anywhere in the game, I ve had this actually.. use.. the move once or twice, and anyway it doesn t work if you have L=A turned on (and why wouldn t you? one-handed mode wooo).. Meanwhile, the X and Y buttons do absolutely nothing.. The bag has five pockets.. Four of them are nicely organized.. Key items, of which there are probably a few dozen at most.. Berries, which can t hold more than 65, I think?.. TMs, of which there are 108.. Medicine, which probably doesn t exceed 50.. That leaves the other crap pocket, which gets filled with the following:.. 20 types of Pokéball.. 18 Arceus plates.. 18 type-boosting held items (Charcoal and the like).. 18 type-boosting gems.. A dozen evolution items.. At least 17 species-specific held items (Stick, etc.. At least two dozen general-purpose held items.. Some untold number of (ahem) the new item type introduced in.. XY.. Fossils, shards, loot, Heart Scales, Honey, mail, and god knows what else.. That s over 200 items in one pocket, twice the size of the next-biggest.. The miscellaneous pocket of the bag no longer shows item grouping icons (like a Pokéball), which at least helped separate sections in.. BW.. Neither the bag nor the in-battle item menu show item icons any more.. The held item on a party or boxed Pokémon doesn t, either.. The item submenu on a party Pokémon offers to let me take or swap an item even from a Pokémon that doesn t have one.. It also doesn t tell me what the item.. before I take it, which is annoying when I m trying to find where I left something like Amulet Coin or Lucky Egg.. Deposit and withdraw on the Pokémon box system are useless.. Using one or the other is slightly faster than going through organize , I guess, but anyone who runs with a full party of 6 (i.. e.. almost everyone) is going to want to do both together.. It wouldn t matter except that this is the one thing stopping me from merely mashing A to get to my boxes.. For some reason trading has two ways to show a Pokémon: press A, or tap a weird icon or something at the bottom I forget.. The next step from either of these to actually offering a trade is a little different, and I can t figure out why.. When viewing a party Pokémon, I can t switch directly to my Pokédex and read a description of it.. I have to remember its dex number and look it up manually.. There is no list of all moves or abilities I ve seen.. :( Shouldn t the Pokédex track what abilities Pokémon can have?.. The zoomed-out box grid view on the.. PC.. should really color each box icon according to its wallpaper.. With 24 boxes this view is not very useful.. There are two (and a half ?) completely separate and distinct interfaces for deleting a move.. There are at least two completely separate and distinct interfaces for seeing a Pokémon s summary.. This is a little silly, but it s been the case for a while.. The summary view when perusing boxed Pokémon neither mentions its nature nor indicates which stats are raised/lowered.. Learning a new move and forgetting an old one involves some three separate prompts.. If you change your mind about learning the new move, the button to abort is helpfully labeled.. QUIT.. and just restarts the sequence of prompts over—more than once have I just mashed A and accidentally agreed to learn it again.. Why not just say here s a fifth move, pick which one to lose ?.. (That s an annoyance in a lot of games, particularly RPGs: the button I mash to advance through dialogue is the same button I use to agree to choices offered in dialog.. My.. 3DS.. has like a thousand buttons I m pretty sure you can spare a.. second.. one.. There are several places in the game where a list of items is intended to be scrolled by sliding on the touch screen, a la most phone interfaces (e.. the bag, puffs in Amie), but either I m a clumsy buffoon or something is not calibrated well because I very frequently end up tapping an item instead.. I miss the Habitat List.. Please stop adding neat.. UI.. features in doomed branch games and not bothering to port them to trunk of the next generation.. :(.. So hey all those people with uncles and cousins that work at Game Freak who ve come out of the woodwork since.. was announced: if you could pass this along that would be fantastic.. Fri 13 September 2013.. Cython versus CFFI.. I have a hilariously unfinished Python module I work on from time to time named.. sanpera.. It s an imaging library for Python, with the vain hope that it might replace.. PIL.. someday.. But this isn t about sanpera.. sanpera happens to be powered by.. ImageMagick.. I distinguish this from being an ImageMagick wrapper , as it explicitly has nothing resembling the ImageMagick.. API.. , because said.. is insane.. But this isn t about ImageMagick, either.. Using ImageMagick requires binding Python to C, and that s what this is about.. There are several ways to use C libraries from Python:.. Writing an extension module.. means the Python.. is defined in C, so the library is used exactly as it was intended: with C code.. Unfortunately this requires writing.. a lot.. of C, as well as.. of careful Python refcounting.. My C is passable, but I ve done far more reading it than writing it, so this is not an appealing option.. ctypes.. is a standard-library module that can load shared libraries and call functions from them without the use of a C compiler or any new C code.. Convenient, especially if you hate dependencies (in which case why are you binding to C?), but all the ctypes-powered code I ve read has been tedious and fiddly and ugly.. Cython.. , a spiritual port/evolution/fork/something of the older Pyrex, is a language similar to Python that translates to C and then compiles into an extension module.. Cython code can define Python classes and functions, but also call C functions and perform other C operations directly.. Code with C semantics is translated fairly directly to C; code with Python semantics is translated to appropriate use of the CPython.. ; and Cython fills in all the bits to translate between the two.. I went with Cython because it looked interesting, it seemed to reduce the number of translation layers I d have to care about, and it would even let me write hot loops (this.. an imaging library) in C without actually writing any C.. Plus, since it s not actually Python code, it can compile to.. both.. Python 2 and Python 3 extension modules with very little effort on my part.. Here s what Cython looks like:.. Mon 05 August 2013.. dictproxyhack, or: ActiveState Code considered harmful.. This is a story of how nothing in this story is my fault.. I ve got a.. coworker.. who s super into.. Clojure.. , a Lisp-like that runs on the.. JVM.. In particular he s super into how it s got notions of mutability (and, thus,.. immutability.. ) all throughout.. More than once he s lamented that Python lacks a.. frozendict.. —a dictionary type that can t be changed.. Dictionaries tend to crop up a lot in Python, and in a very large codebase, it s very easy to end up with this scenario:.. Some function somewhere generates a dict that s only used by one caller.. The interface is obvious since the keys and values are created right there in one place.. No problem.. Other code comes along, notices this handy function, and starts using its return value.. Some of this code may pass the ad-hoc dict up to callers, too.. Some of that other code needs more things added to the dict, but computing the extra data is expensive, so arguments are added to the function that optionally turn on certain keys.. Some code needs even more things added to the dict that are outside the purview of the original function, so they add helper functions that take the ad-hoc dict and add more things to it.. Since this has all now happened multiple times throughout your codebase, someone addresses the problem by writing adapter code that infers the original dict from some other object describing its structure, thus saving everyone from writing all these functions that return dicts.. A lovely spaghetti dinner.. It s now nigh impossible to trace what the dict contains or where half of it came from.. Returning an object in the first place would have avoided much of this, but when you re sitting at step 1, that seems like a lot of effort just to return half a dozen things from a function you wrote to another function you wrote.. Swapping out.. dict().. for.. frozendict().. is easy.. My opinion on.. had never grown stronger than I guess that would be cool , so I never sat down and wrote the class, and there must be enough subtleties that nobody else at Yelp has either.. Then today,.. PEP.. 416.. came to my attention.. This.. proposed adding a.. type, but was rejected last year as being largely unnecessary.. What s interesting about it is that the rejection ends with almost a footnote suggesting that perhaps.. dictproxy.. ought to be exposed to Python-land, instead.. And indeed this was done, and it exists in Python 3.. 3.. Thu 27 June 2013.. I bought a new laptop.. Wow, where the hell have I been.. That whole dying cat thing ruined most of my April, and I spent most of May dealing with various other life crises, and then June scrambling to catch up.. I ve started and abandoned maybe half a dozen posts in that time that I will totally maybe finish someday.. In the meantime, here s something aimless and specific to me about how I bought a thing.. Par for the course, then.. Tue 30 April 2013.. Goodbye, Styx.. I can hardly believe I posted a.. bunch of photos of Styx.. earlier this year.. Three months later to the day, I put him to sleep.. I suppose this is his obituary.. Sun 03 March 2013.. The controller pattern is awful (and other OO heresy).. Almost a year ago now,.. Jack Diederich.. gave a talk entitled.. Stop Writing Classes.. , in which he implores Python programmers to stop creating classes just for the hell of it, and specifically calls out the common pattern of a class with only a constructor/initializer and a single method—which should, of course, just be a function.. A few weeks ago,.. Armin Ronacher.. wrote a rebuttal entitled.. Start Writing More Classes.. , which argues that classes are essential for both writing extensible code and smoothing over crappy interfaces.. (Hm.. Now that I look at it again, if you read the post backwards, it almost sounds like he s suggesting writing a class to smooth out the crappy interface you get from using too many classes ).. I m having some trouble here, because I agree with both points of view.. There must be a way to resolve this contradiction, a message that resonates with everyone.. I think I ve found it.. Stop writing.. stupid.. classes.. Fri 08 February 2013.. Suzanne Venker is a robot alien in disguise.. It s my best guess.. It would explain some things.. She has written another.. charming opinion piece.. and I can t resist butting my big dumb head in to object to a few things here.. (The article was originally accompanied by a thumbnail of a.. happy couple in typical wedding garb kissing.. with a cool skyline background.. Minor oversight: both of them were women, which sort of contradicts the article s title in a number of hilarious ways.. Strangely, this illustration has now vanished!).. Tue 29 January 2013.. Look at my cat.. In early December 2011, I bought a digital.. SLR.. In mid December 2011, I bought a cat.. You can see where this is going.. Styx is a Sphynx, one of the hairless breeds.. (Wow! Just like Dr.. Evil s cat! I have never heard that before! You are so clever!) Mel already had a sphynx, Twigs, and he pretty much sold me on Sphynxes being the best cats ever.. Though I think Styx might have more of a Devon Rex personality and body shape, based on Mel s cat breed book.. I ve accumulated a mountain of cat photos, but only a few of them have seen the light of day.. Let s fix that! And please do pardon my shoddy attempts at composition and framing and white-balance and post-processing and otherwise trying to take photography more seriously than Instagram.. Mon 28 January 2013.. Catchin’ ‘em all.. Look at this sweet guy.. Mel.. got.. custom-made.. for my birthday.. There s context here, but it s.. big and complicated.. , so let s just say it s a life-size stained-glass.. Chandelure.. and is.. totally fuckin rad.. (That s an official life-size Eevee, for scale.. Having a bit of trouble finding a place to keep a three-foot-tall plush, though.. He s got a hook near the top of his flame, but hanging him from the ceiling doesn t really help since he hangs down to chest level.. While I m at it, my collection expanded considerably after our two-week vacation in Japan, and I finally got around to adding a new shelf to hold them all.. So, here s what my room looks like now.. I m not too proud to admit that I might have a problem: where can I possibly fit more shelves?.. Tue 15 January 2013.. A new use for StackOverflow.. It s hard to get a feel for a new tool.. Is it any good? Does it do anything I can t already do? What s the community like? Tough questions to answer without diving in and using it for a significant amount of time—and then you risk not liking the answers you get.. But fear not! I have discovered a new and brilliant way to discern the novel features of a tool, the vibrance of its community, and its range of users all at once.. In mere minutes.. Look at its ten highest-voted questions on.. StackOverflow.. I m totally serious.. Watch.. Wed 09 January 2013.. CVs and file extensions.. (This article has been translated into.. Czech.. by.. Alex Novak.. —thanks!).. Like many employed engineers, I get roped into the hiring process from time to time.. I don t actually screen résumés, but I do grade some code tests, and the résumé is sent along with it—in case I find myself desperately seeking an explanation for receiving five hundred lines of JavaScript arranged as haiku.. In glancing over these résumés, I ve observed a pattern: I m far quicker to judge the file extension than the contents.. It s easy to lie or exaggerate in a document, but habits are far more difficult to hide.. If you re the kind of person who reaches for Microsoft Word, you re still going to do that when writing a résumé.. I expressed this to Twitter, and not only did I get several people asking what formats I preferred, but I m drowning in a deluge of suggestions for ridiculous résumé formats.. Let us collect some here.. (.. Disclaimer:.. I don t speak for my employer yadda yadda.. docx.. : What the hell is this? Are you even a programmer? I haven t had an office suite installed for years and I don t plan to start now just to find out what dumb school you went to.. I may open it as a.. ZIP.. and glance over the text nodes in.. word/document.. xml.. ; hope there s no important formatting in here.. doc.. : This isn t much better, and your office suite is ancient besides, but at least I can throw this at antiword and have a good chance of being able to read it.. pdf.. : Okay, sure.. I apologize in advance for the horrendous mangling your hand-crafted masterpiece will experience when it encounters everyone s.. HR.. systems from 1993.. pdf with only glyph strokes and no text information.. : Fuck you.. pdf clearly generated from LaTeX.. : Instant boner.. Are you sure you re in comp sci and not math? Maybe you want a.. LISP.. shop.. tex.. : Hired.. rtf.. : You re either an idiot or as frustrated with the lack of light document formatting formats as I am.. But it doesn t matter because I still can t read it.. txt.. :.. NICE.. , as long as it contains either.. RFC.. -style genuine plain text, Markdown, or ornate Unicode box-drawing decorations with emoji insets.. Suggestions for appropriate monospace fonts a plus.. odt.. : This is still a pain in the ass for me to read, but kudos for trying, and double kudos for using a file format no.. department on the planet will recognize.. ps.. : Nice try, but I m not a printer.. Cross your fingers and hope Inkscape gets it right.. html.. : There is something very fundamentally wrong with emailing.. HTML.. as an attachment.. If you re so familiar with.. then maybe you should get, like, a website.. xls.. ,.. ods.. : Allow me to respond with this chart of how much I hate you.. xps.. : You are out of your goddamn mind.. I m intrigued.. xml.. +.. xsl.. : I ve had.. enough.. XSLT.. for one lifetime.. , thanks.. link to a shared document on Google Drive.. : It appears you work for Google and they won t let you have a real computer, only a Chromebook.. They re probably paying you more than anyone else can, so it doesn t much matter whether we make an offer.. py.. : Putting your entire program in a single file is poor form.. This should be a bdist egg.. exe.. : Acceptable.. if this is a crack for expensive obscure software released in the past 15 days.. I will also be judging you based on the sweet trance music that plays while it s running.. swf.. : Unless this is a vim swap file, get the fuck out.. If it s a vim swap file, you direly need to delete/recover some old files, and.. then.. get the fuck out.. iso.. : I m aware of precisely one.. psychopath.. who has created a disk image that boots into the.. OS.. he wrote and displays his.. PDF.. résumé.. No other form of.. iso.. submission is acceptable.. c.. goddammit kevin.. jpg.. : Now you re just fucking with me.. A text-heavy image should be a.. PNG.. anything that 0-days my machine.. : You can have my job.. Mon 10 December 2012.. Dimorphism.. Today I went to the drug store.. I bought nail clippers, a nail file, and a nail buffer.. All existing nail clippers in this house have been transmuted into cat toys and subsequently batted into the void where lost cat toys go.. The cashier asked, with a knowing smile, For your wife?.. Well, naturally, because dudes don t have fingernails.. That s why guys have all the jobs where fingernails would be a hindrance or hazard, like programming or rock-climbing or making more money.. I told him no, for me with a sigh, and only later realized that he d think I was sighing at myself rather than him.. Whoops.. I twatted something similar last night, while looking on Amazon for lounge pants (which, let s be honest, are just pajamas).. The same category tree exists for both men and women, yet there is quite an obvious difference between.. men s loungewear.. women s loungewear.. Or even, hell,.. men s socks.. women s socks.. I just want neat abstract patterns in nice colors.. Instead, I get:.. Solid dark blue, solid black, solid dark black.. Plaid, usually prominently featuring the above colors.. Bad tessellation of a beer logo.. Stock artwork of Stewie Griffin saying something from a Family Guy episode that first aired in 1999.. Y chromosomes must self-destruct in the presence of saturation, or something.. Older.. Blog archive.. 📅.. Recent Posts.. 📂.. Categories.. 90% of everything.. essay.. meta.. people.. personal.. project euler.. python faq.. quick nerd thing.. reference.. rescued from twitter.. status.. thinking out loud.. 🔖.. Tags.. git.. pyramid.. creation.. japanese.. gadgets.. linux.. perl.. pokemon.. web.. law.. humor.. media.. raidne.. systems.. interfaces.. math.. normal.. python.. gotcha.. mozilla.. infosec.. puzzles.. photos.. follow along.. dywypi.. veekun.. php.. ruby.. identity.. flora.. gender.. intellectual property.. stuff.. tech.. squiggle.. rust.. © 2011–2014 Eevee (Alex Munroe); licensed as.. CC-BY.. unless otherwise specified.. Powered by.. Pelican..

    Original link path: /
    Open archive

  • Title: About / fuzzy notepad
    Descriptive info: Hello! I m Eevee.. I do also have a legal name, but it doesn t see much use outside of forms and bills.. I respond to any pronoun; pick your favorite.. I like to fuss with computers until they sort of do something neat if I squint a bit, then get distracted and go try something else.. I ve left a trail of.. freely-available.. code.. in my wake.. Patches always, always welcome.. My area of expertise (ha!) is all over the place; I ve been known to ramble about usability and interface design, Unicode, Web development and deployment, Linux, programming architecture, Python, why my database is less bad than yours, infosec, programming language design, and probably something else by this time next week.. I ve also got passing interests  ...   like to read it sometimes.. I love thoughtful argument; finding out I m wrong means I get to be more right in the future.. Just.. don t be a dick.. I eject far too many thoughts in overly compact form into.. Twitter.. I also have a.. tumblr.. , which is mostly used for personal things (read: porn), phone-camera cat photos, and arguments with teenagers.. I currently work for.. Yelp.. from the comfort of my home in Las Vegas.. I live with my.. ridiculous cat.. , my.. partner.. , her three cats, her.. husband.. , his.. dog.. , and our boyfriend.. Comments.. Apologies, but part of running a static blog is that the comments are served by Disqus's JavaScript slurry.. If it's any consolation, you're probably not missing much.. :)..

    Original link path: /about/
    Open archive

  • Title: Projects / fuzzy notepad
    Descriptive info: I like to tinker.. Here are some things I m tinkering with.. Few of them are finished, but some of them are useful, and all of them would appreciate a pull request.. As a general rule, all of my code.. lives on GitHub.. , because git is awesome and I am an open source hippie.. This list is not exhaustive, but rather representative of the most interesting things as of the last time I touched it.. Live.. Running in production.. Might still garner improvements, but is done enough.. —.. Live site.. ·.. GitHub.. A Pokémon database website, and by far the oldest thing I ve built that still exists.. Development waxes and wanes, but the site continues to be useful to people, so it s all good.. Written in.. Python.. , powered by.. Pylons.. , stored in.. PostgreSQL.. , served by.. nginx.. gunicorn.. on a.. Linode.. running.. Ubuntu Linux.. The database and various related Python utilities are a separate library, which is.. also on GitHub.. rc.. My dot files.. Got some stuff for vim, git, tmux, zsh, X, et al.. in here.. I like to keep it fairly simple, but it s all pretty well-documented; maybe you ll find something useful in here.. kouyou.. Just a little color picker, because I could never find one that I liked.. (Most of them are.. HSV.. , which is unintelligible to me; this one also has.. HSL.. I had a lot of ideas for color-related features, but never needed any of them quite enough to get around to building them.. Still, I use this fairly often for Web design.. Written in JavaScript.. pmde-unflash.. Animations done as Flash-less alternatives for some of the prologues and epilogues of.. PMD.. Explorers.. They will probably not make sense without the tons and tons of existing context.. Written in JavaScript, with some fun use of prototypes and Deferreds.. In progress.. Not done yet, but I m hopeful, and I try to devote some time regularly.. veekun8.. Beta site.. I admittedly lost interest in working with the current veekun codebase, and concluded the only way I d really feel like making significant contributions again would be if I rewrote it all.. So, once again, I m doing that a bit at a time.. Most of the old Python is perfectly serviceable, and it s been easy enough to move it over a chunk at a time and tidy it up as I go.. The frontend will get a heck of a revamp, though.. Pyramid.. Not in production yet.. archetype.. Attempt at compiling all the.. CSS.. I end up writing for a new project.. Kind of a giant mess right now.. veekun8 is definitely the biggest consumer, and the two are kind of developed in lockstep.. Written with.. SCSS.. Documentation.. Website?.. PyPI.. I ve always been kind of underwhelmed by.. , and the Python ecosystem doesn t offer much else for image manipulation.. sanpera is an attempt to breathe some life into this space by providing a high-level, idiomatic Python imaging library that.. happens to be.. powered by.. (The name is the Hindi term for a snake charmer.. You know, pythons, magic ahem.. Written mostly in.. There s a release, but it s pretty young yet, and I have a lot of ImageMagick battling to do before it s solid and useful.. A Python.. IRC.. bot that tries to do everything right : an async approach built on.. Twisted.. , an event system, a developer console to avoid the need for.. reload.. clio.. I want to write a roguelike..  ...   Perl relies.. critically.. on its.. pm module.. Python doesn t have a.. class anywhere! We just have.. urlparse.. , which everyone uses independently and slightly differently.. This is ridiculous.. Currently usable, though the.. is about to become radically different, as I had a change of heart regarding mutability.. Written in (and for ♥).. splinter.. This is hard to explain, because for some reason, no one seems to have ever done it.. The basic idea is to write a highly-opinionated base for content-centric Web apps, then implement several apps atop it as (large) plugins.. The plugins would all be completely independent, but could coexist happily within the same.. WSGI.. app, and could define particular ways to interact with each other.. Think of Trac, except.. none.. of the components are required, and they all deserve to stand alone.. Want a bug tracker? Use only the bug tracker plugin.. Want a pastebin? Use only the bug tracker plugin.. Want a fansite? Load up a forum, wiki, image gallery, and oekaki; they ll all share the same set of users and the same login mechanism, and they ll know how to link to each other.. It s my answer to the Wordpress monopoly.. It s also a ridiculously gigantic undertaking, but would be pretty cool if it worked out.. Might need to rename to spline (the name of my first crack at this concept), because it s come to my attention that a very young testing library named splinter already exists for Python.. atop.. Currently working on this a bit at a time internally, because we have some very dinky and bad internal apps, and they re a good proof-of-concept for the core.. and general idea.. Don t think I ve pushed any of it for a while.. Minor distractions.. Not quite real projects, but things I poke at every so often.. heteroglot.. Blog posts.. Solutions to.. Project Euler.. problems all in different programming languages.. first blog post.. has an introduction.. Written in, well, a bit of everything.. On hold.. I yearn to hack these, but they re intractibly blocked on something.. An adventure game I m writing along with Mel (.. PurpleKecleon.. ) about her homegrown universe of.. cats with flowers on their heads.. Currently blocking on our finding a huge chunk of time to devote to it, as well as a potential redesign of how the game fundamentally works.. , because why not.. Future.. Gosh, these would be cool to do.. Maybe I should start on them.. In my copious free time.. rasp.. PEG.. -based parser-generator for.. , possibly doing all its work at compile time using Rust macros.. Inspired by.. Parsley.. Dormant.. Used to work on these actively, but haven t touched them in a while and have no short-term plans to do so.. floof.. Landing page.. There aren t many art sites, and they tend to kinda suck.. I wanted to build a better one, for a very long time.. I sat down and gave it a decent try, but even with a few other developers chipping in, I realized I didn t have the resources or desire to run the community side of such a thing.. , using.. porigon-z.. Not quite a library, but a small collection of tools that were useful for extracting information from Pokémon games.. Can parse.. NARC.. (a file format commonly used by.. DS.. games) and some common formats.. Didn t really catch on outside veekun and is semi-obsoleted by the existence of the.. , but still comes in handy on occasion.. Command-line tool..

    Original link path: /projects/
    Open archive

  • Title: Braid / fuzzy notepad
    Descriptive info: Posted by.. Eevee.. in.. #gender..

    Original link path: /blog/2014/05/25/braid/
    Open archive

  • Title: Comment policy / fuzzy notepad
    Original link path: /blog/2014/04/05/comment-policy/
    (No additional info available in detailed archive for this subpage)

  • Title: Mozilla and free speech / fuzzy notepad
    Descriptive info: Why this happened.. I participated in the Twitter crapstorm.. Several people have told me that this means I, personally, am responsible for Eich s departure.. I feel this makes me eminently qualified to comment.. Plus I m in the Firefox credits which is pretty cool too.. I try pretty hard to be reasonable.. Like,.. really.. hard.. (It probably goes to waste, since people who agree with me will still think I m reasonable, and people who disagree with me still won t.. ) I don t call people bigots or homophobes ; I think those are ugly words mostly used for othering and smearing.. I don t like calling people racist or sexist ; only their actions.. I don t even like referring to the left or the right , as though all of America were comprised of two homogenous masses jiggling uselessly against each other.. From that perspective, it looked to me like this all happened because: people were.. hurt.. I trust Mozilla.. believe in.. Mozilla.. I wouldn t use those words to describe Frito-Lay or Pepsi or Microsoft.. Mozilla is unique: their whole thing is pushing a philosophy.. They have an agenda, and they ve risked their market share to push it.. Even.. Eich was in the middle of such a battle.. , over video codecs.. Everything they build is open source; most of their meetings are public and have public notes; all their bug trackers, where employees do actual work, are publicly-accessible.. How many companies do this? Ubuntu, with its fraction of a percent of market share? Firefox has anywhere from a fifth to a third, depending on who you ask.. Of the.. entire Web-connected world.. It s true: the.. Mozilla Manifesto.. doesn t say anything about gay marriage.. You got me.. But it speaks of helping people be part of a larger society, of giving the same opportunities to everyone regardless of who they are, of enriching lives and working together.. You can see how, taken more broadly, this might tend to attract people of a more progressive bent.. How many such people are there in the Mozilla community? Are there very many? Even a majority? I don t know.. There was at least one.. In a world where even GitHub prizes their source code and doesn t want to open source their own.. text editor.. , Mozilla was a beacon of hope that maybe it didn t always have to be like that.. Maybe you could do everything in the open, let anyone participate, and it would be okay.. When Eich was revealed to have donated to prop 8, when Gerv s.. blog post opposing gay marriage.. ended up on Planet Mozilla, I did wince.. There was a little kerfuffle.. And it blew over, and it was okay, because anyone can participate in Mozilla.. (By the way, fuck Gerv.. We ll get back to that later.. And then Eich became.. , the head and face of the company, and I felt alarmed and betrayed.. Prop 8 sought to actively remove a right (or privilege, if you must) that had been hard won.. That doesn t strike me as aligned with the spirit of what Mozilla is all about, even if not mentioned in the letter.. Eich responded.. , expressing his sorrow at having caused pain and his commitment to keep Mozilla inclusive.. I found this slightly dubious, not least of all for the lack of mention of what he d actually done.. Does he regret it? Does he still feel the same way? If so, he would surely say so.. The message is then I m committed to making Mozilla supportive and welcoming, but in my off hours I want to keep you from ever being able to get married, which does not sit particularly well.. Still, it was something, and I kept a wary eye on things.. But then came the.. CNet interview.. It contained such gems as:.. Do you think we should judge executives by their political beliefs?.. Eich: For Mozilla, it s problematic because of our principles of inclusiveness, because the Indonesian community supports me but doesn t have quite the megaphone.. We have to be careful to put the principles of inclusiveness first.. What?.. Indonesia is who we re worried about? A place whose capital city.. considers anyone.. LGBT.. to be mentally handicapped.. ? We d better not offend.. them.. Boy, I feel more included already.. If you had the opportunity to donate to a Proposition 8 cause today, would you do so?.. Eich: I hadn t thought about that.. It seems that s a dead issue.. I don t want to answer hypotheticals.. Separating personal beliefs here is the real key here.. The threat we re facing isn t to me or my reputation, it s to Mozilla.. You haven t really explicitly laid it out, so I ll just ask you: how do you feel gay-marriage rights? How did you feel about it in 2008, and how do you feel about it today?.. Eich: I prefer not to talk about my beliefs.. One of the things about my principles of inclusiveness is not just that you leave it at the door, but that you don t require others to put targets on themselves by labeling their beliefs, because that will present problems and will be seen as divisive.. And this blew me out of the water.. He doesn t want to talk about his beliefs; he just wants to enshrine them in law.. Enshrine them in the.. California constitution.. , no less.. But not talk about them, because that might.. present problems.. Eich, you are (or were) the.. You.. are.. You can t leave it at the door, because the company s work is about what s.. outside that door.. Mozilla goes out into the world to try to spread its message; you went out into that.. same world.. to try to legally define people out of marriage.. I believe this interview is what most directly caused Eich s resignation.. It was slimy and dismissive of the people who were hurt or even scared.. (But hey, maybe Eich will make a great.. somewhere else.. A Mozilla employee wrote a.. thoughtful post.. suggesting that Eich stepped down because his inability to disarm this situation directly  ...   different.. If he d had the.. wrong fucking haircut.. and that had outraged the community, the same thing would ve happened.. Oops, spoilers.. That s getting into the climax a bit early.. An aside: intolerance.. This came up a lot, as it does.. If you ll pardon the lack of better names, the right like to scoff at the left for being tolerant of everything but people who think differently.. Tolerant of everything but thought.. That sort of cutesy saying.. These are then followed by admonitions of hypocrisy, which as we all know is the gravest sin in America.. Which brings me back to Gerv and the fucking thereof.. At the top of his post he edited in the following:.. The belief that marriage is between a man and a woman is protected under Article 9 of the European Convention on Human Rights, the Human Rights Act 1998 and the Equality Act 2010.. Discriminating against someone simply because they hold that belief or express it in a reasonable way would be unlawful discrimination.. I m sure that anyone who is an opponent of discrimination would not want to do such a thing.. I ll say it again:.. fuck you.. , Gerv, you.. smarmy asshole.. Did you catch the problem here? I ll spell it out for you: he doesn t give a.. shit.. about tolerance, or opposing discrimination.. He only cares insofar as.. people tolerate.. him.. He wants to be left alone to fuck with other people.. And he is.. wielding it as a weapon to shut everyone up.. This is the true form of tolerance , a word I strangely never hear from the people who try to practice it.. It s only cited by people who want it for.. themselves.. , so they are never called out for anything they do to anyone else.. And they laugh and grin and pat themselves on the back when they can bust it out, using a value they never cared about against someone else.. Tolerance was originally a thing we rallied to give to.. everyone else.. Wielding it in this way makes it all about.. you.. The real argument.. Yes, anyway.. There are two reasons this was not a question of free speech.. The first is that he was.. of a company that relies critically on its community, and he pissed them off.. Whether or not you agree they.. should ve been.. pissed off, pissed off they still were.. As.. , it was his.. job.. to answer to them.. That s what a.. does.. The second, which nicely dovetails with the first, is that there are other things he could ve done that would ve caused this.. Say he d funded a constitutional amendment that would prevent marriages between people of different religions.. (And say all the people griping now had actually been paying attention at the time.. ) That s still very controversial to some faiths, and even enshrined in law in some places.. (Apparently Sharia law.. forbids.. Muslim women from marrying non-Muslim men.. ) But it would earn a crapstorm from.. : people who saw their own marriages in jeopardy, people who saw it as just plain unreasonable, people who saw it as an attempt to jam religion into law.. (You can make an obvious analogy that involves race, too.. But hey, let s not.. If he ended up stepping down over such a thing, I seriously doubt.. anyone.. would be smarming about his right to free speech, to freely espouse his political views.. Because this is not about free speech, but.. tenable speech.. There is no defending the banning of interfaith marriage, because very little of the population agrees with it.. No one would even call it political speech, the way people scoff at referring to.. NAMBLA.. s agenda as political speech.. It s only politics — or even better, just politics — when there are still enough people on both sides to still be seriously arguing about it.. Claiming that women shouldn t be able to vote isn t a political view nowadays; it s being a colossal asshole.. But clearly.. it.. used.. to be tenable.. The question, therefore, is.. whether opposition to gay marriage is still tenable.. That is, can you speak of such a thing in polite society, without earning scornful looks and losing friends?.. It looks like, at least in some non-trivial circles, the answer is rapidly becoming.. no.. And apparently that scares the hell out of some people.. The other side.. will.. mention that this is a thorny issue.. I got tangled into a few conversations with people whose values are diametrically opposed to my own, because I m a sucker, but also because I m fascinated by why other people would come to such different conclusions given roughly similar information.. Several people insisted that opposing gay marriage is not necesarily the same as hating.. people outright.. I picked at this, and learned something uncomfortable that I suppose I knew already.. There are opponents to gay marriage who genuinely believe that it will be the downfall of Western civilization.. That is, they literally believe they are.. saving the world.. Of course they put tradition ahead of other people s lives, with that on the line.. The unfortunate thing is that they even explained this relatively scientifically: that virtually every civilization has been an experiment in whether monoamorous heterosexual marriage makes for a stable society, with a fairly good success rate.. There have, of course, not been any trials on anything.. else.. , but they aren t willing to even give it a try due to the perceived immense risk.. What can be said to that? What could possibly change such a person s mind? It s not outright unreasonable; in fact I d compare it to the scientists who scoffed at the idea of rocket propulsion in space, for the obvious reason that there s nothing to push off against.. We know better now, but that wasn t outlandish at the time.. It was completely uncharted territory and people inferred as best they could from what they had.. People are well-intentioned and.. messy.. It would be so much easier if the people we didn t like actually did just hate us and have it out for us.. #tech..

    Original link path: /blog/2014/04/05/mozilla-and-free-speech/
    Open archive

  • Title: A brief overview of copyright / fuzzy notepad
    Descriptive info: #intellectual property.. #law.. #culture.. #creation..

    Original link path: /blog/2014/01/12/a-brief-overview-of-copyright/
    Open archive

  • Title: Level 27 / fuzzy notepad
    Original link path: /blog/2014/01/12/level-27/
    (No additional info available in detailed archive for this subpage)

  • Title: Goodbye, Styx / fuzzy notepad
    Descriptive info: Before.. Mel and her husband moved in in January 2011.. Their party included an impressive array of critters, filling our formerly petless house to capacity:.. Apollo, a German Shepherd who has yet to understand that he s not still a puppy.. Granite, the husband s 15yo cat he d had since kittenhood.. Napoleon, a clumsy ditz of a rescue cat.. Armando, an affectionate sweetheart cat adopted alongside Napoleon.. Twigs, Mel s pride and joy sphynx.. Sadly, the numbers dwindled over the course of the year: Granite succumbed to old age, and Armando had to be given away after months of trying to stop him from peeing on furniture.. This left us with just Twigs and Napoleon as permanent indoor fixtures.. As luck would have it, the two cats we lost were also the two who spent the most time around me: Granite mostly passed the time loafing on my bed (and, when I lay down, would saunter up to me and snuggle up with his crackly old-man purr), and Armando loved.. Now, Twigs is pretty playful, whereas Napoleon is more dainty.. Without a cat buddy to play with, Twigs got increasingly rowdy over the following months, even with three humans to entertain him.. He also started hanging out with me a good bit more, much to Mel s chagrin.. The natural outcome: it was decided that I needed my own cat, both as a buddy for me and as a playmate for Twigs.. Of.. course.. , he would have to be a sphynx as well.. So in early December Mel and I drove down to a breeder on the northern border of Oregon.. Styx.. I d never had a pet before, really.. As a kid I d had two county fair goldfish which, shockingly, both died within 24 hours.. Not a good track record.. While the breeder was trying to herd some of her five kittens out from under the bed, I spaced out a bit and looked around the room.. Sitting a few feet away from us was a single fearless kitten, watching us with a tiny scowl.. I squatted down and reached out to pet him; he tilted his head and swatted repeatedly at my hand, missing it completely but trying anyway.. On my second attempt he let me touch him, and he.. immediately.. let out the loudest purr I ve ever heard—like coffee percolating.. By now the breeder had retrieved a few kittens, but I d fallen in love already.. I played with him some while the breeder rustled up paperwork.. It took me ages to actually get the payment to go through, by which time I d lost track of my chosen kitten; we found one who looked similar, but he was clearly not the same.. I was the one who found him in the end: he d fallen asleep in a plush cat cube.. We d decided in advance to name him Styx to match Twigs (but with a cooler spelling).. He slept in my arms almost all the way home.. I kept him in my room for the first week or so, letting the other two cats in to smell him a couple times before formally introducing everyone.. If I remember correctly, Napoleon wasn t a huge fan at first, but Twigs got along with him pretty well right from the outset.. He was a scrawny and odd-shapen little kitten, with long lanky legs and a potbelly and gigantic paws; while age evened him out somewhat, he never quite grew out of being a barrel on stilts.. In clown shoes, I guess.. Now, Twigs s affection is very direct: he ll climb on top of you and expertly nestle his butt into any cat-shaped nook on you, or lean against your chest and make his deep sophisticated purr while nuzzling your chin.. If he s particularly settled in, he ll groom you for hours with his cheese-grater tongue, something I can t bear on my tender skin (though I appreciate the sentiment).. I d been around him for a year now, and had taken it for granted that another sphynx would act similarly.. Styx did not.. Everything about him was a little awkward.. He rarely quite made eye contact, instead opting to stare just over my shoulder.. He.. very.. rarely nuzzled, except on very special occasions.. And he never quite figured out how to sit on people—even when I got him to lie on me in bed, most of the time he would face away from me.. And while he would sometimes groom people with his much softer tongue, it was always just two licks in one spot, and then he was done.. But he purred like crazy, especially for me.. One of our most common greetings was for him to come out to the kitchen and grumble at me, me to call out his name, and him to start purring from that alone.. He loved to be around me, and would frequently follow me around the house just to hunker down on the floor near my feet every time I moved around.. Sometimes I d reach down to pet him, and he d casually stroll just out of my reach and hunker down again, deciding that he didn t want pets right this moment but still wanted to stay nearby.. He really liked when I pet him as he ate, too, and would somehow purr.. while eating.. It violated everything I know about cat physics.. Something about his social awkwardness but clear desire for affection resonated with me right from the start, and I always found these little antics heartwarming.. Can t imagine why.. I ve never known such a vocal cat, either.. Not just the very regular purring, either; he had a wide range of meows and used them frequently.. Many of them were closed-mouth grunts and grumbles—if something disturbed him in his sleep, he d awake with a distinct rrt.. In the course of getting our attention, he d often start with a short grunt and gradually escalate to a full meow, opening his mouth a crack more with each attempt: rrt , mrrrr , mrraa , mrrrooow.. This was particularly entertaining in contrast to Twigs, who only meowed when very emotional, and usually opened his mouth ridiculously wide to do so.. He never stopped being the rascal who first swatted at my hand.. He didn t swipe at people much after that first time—in fact, I had a hard time ever getting him to play with my fingers, and the few times he did, he usually gave up after a minute and instead purred while staring at my hand.. But he.. loved.. anything flat and round or long and thin, like half the objects on my desk, and loved fishing.. He d regularly drive me crazy by knocking a coin or bottle cap underneath my keyboard, then jostle it around for ages as he tried to fish it back out, sometimes even trying to stick his whole head underneath once he realized it wasn t attached to my desk.. Once recovered, he liked to carefully hold a pencil or bottle cap in his teeth, hop down to the floor, and bat it around some more.. He also had a funny occasional habit of sitting on the edge of a book, reaching down, and scrabbling at the pages.. No idea what he was trying to do, but it was endlessly entertaining.. I had to start hiding round flat things in a desk drawer so he wouldn t lose them, and so he started running over whenever I opened the drawer, trying to stick his paw in and fish around.. Styx liked to sleep with me, just as Twigs sometimes does, though with considerably less grace.. He generally hopped on the bed up near the top and climbed over my face on his way to burrowing under the comforter.. Usually he slept in the nook behind my knees (I sleep on my side), but sometimes he crawled all the way down and snuggled up to my feet.. Which I don t understand at all, as my feet are generally.. frozen.. when I get into bed.. This also resulted in a few sudden starts in the middle of the night, when he forgot they were my feet and started flipping out and bear-hugging them with claws out.. Mornings were equally exciting.. Styx somehow developed the uncanny ability to wake me up 5–10 minutes before my alarm went off,.. even when I changed the time.. Usually this consisted of an escalating series of meows at the side of my bed, but on particularly sleepy mornings, he d learned to walk around on my face a bit and then poke me.. Poke me! I d never known that was a thing, but he did it: he pressed a paw briefly against my face or shoulder with his claws out just enough to prickle.. Once he pressed his paw right against my closed.. eye.. That got me up pretty fast.. On weekends I d lie in bed half-asleep petting him for a while as he stumbled around aimlessly on my bed, meowing at me occasionally, still walking over my face, and purring the entire time.. If I wasn t in bed and he felt like taking a nap, he d devote furious effort to burrowing his way under the comforter, then eventually get too warm and poke his face and paws out somewhere.. While awake, he almost always nestled into a neat compact loaf, but in his sleep he sprawled all over the place on his side—a couple times we almost squished him, not realizing the imperceptible bump in the bed was a snoozing cat.. Anothered favorite antic was to climb on shoulders.. Usually this happened if someone picked him up, but he also leaped onto my back by surprise a couple times, both when I was hunched down scooping litter and when I was standing up near an accessible launchpad.. Once in a while he d sit nicely on a shoulder once there, but most of the time he lay down.. on my back.. , with his butt on my shoulder and the rest of him in a casual sphinx pose  ...   for a variety of regular infections that might have caused this.. On Thursday a.. PCR.. came back, inconclusive.. I took him back to the vet.. He d been a little more active and still had a healthy appetite, but he d lost some more weight even as I was stuffing his face with the most fattening cat food I could find, and he d also peed my bed—but only once.. With everything else ruled out, the vet assumed.. and prescribed him prednisolone, a steroid and immunosuppressant and the only treatment ever consistently observed to extend an infected cat s lifetime at.. all.. We discussed some experimental treatments, but they were a bit of a pain to obtain.. They told me they d look into them over the weekend; no hurry.. Styx ended up staying at the vet a few hours that day to get x-rays and some more bloodwork.. By the time I got him back, he was.. desperate.. to get out of his tiny cat prison, pawing at the door for the first time I d ever seen.. When I let him out in the house, he was his purry affectionate self for the rest of the day, loving on my feet and stumbling around to see what everyone was doing.. He was definitely more active than he had been, and stayed that way for the next several days.. End.. On Saturday, Styx developed diarrhea.. On the front door mat, right next to the litterbox.. That s the thing I cried over the most.. I broke down sobbing several times in the process of cleaning it up.. This had been the final nail in Granite s coffin, too.. We d taken him to the vet after a week or two of litterbox misses, and been told that the best thing we could do for him was put him down that very night.. That was the first time I d watched something bigger than a beetle die.. I still feel awful for being the one to insist we take him to a vet.. Sunday brought several rounds of misses, mostly on my floor.. I also discovered my robe, which doubled as Styx s favorite cat blanket, had been peed on.. I quietly washed it and switched him quickly back to mostly dry food.. Sphynxes have sensitive stomachs; this might have been a bad reaction to the cat food, right?.. I don t want to preserve yesterday s events in graphic detail for all time, so suffice to say: no.. Styx s gastric problems got exponentially worse over the course of the morning (and I do.. use words like exponentially lightly), and I spent most of my time cleaning up after him.. I had to wipe him off, give him a bath, wash my robe, scrub my floor.. The whole time he meowed sadly at me.. Mel was asleep, her husband was out.. I was at a loss for what to do.. I ve always been terrible with hard decisions—on more than one occasion I ve asked half a dozen different people for advice just in the hopes that hearing it will somehow save me from having to decide at all.. And then I looked at Styx and I knew he was done.. Mel woke up, her husband came home.. We fussed over Styx, spoiled him with lots of cottage cheese curds.. I washed my robe one last time and made a phone call.. I sat in the living room holding him while he burrowed into my robe and slept for a while.. I took Styx into my bedroom, still wrapped in my robe, and he gave me a brief purr.. The vet arrived and everyone shuffled in.. The first injection was a sedative, and for the first time he didn t fight the needle.. He dozed off in a few minutes, with all of us petting him.. The second injection looked basically like drain cleaner.. I asked to press the plunger.. My cat, my call.. I saw the moment he died, just as I d seen with Granite.. I can t even explain what changed; one moment there was, plain as day, no longer a cat in there.. He was only a year and eight months old, almost to the day.. I was amazed how fast he went pale, cold.. Granite had been very furry, so he d just been limp.. Styx felt icy within seconds.. Together the three of us buried him in the front yard next to Granite, still wrapped in my robe.. Granite s grave is marked by a humble square of granite tile; I suppose Styx s should be marked by a tiny tree.. I ll stop by a hardware store this week and see what I can find.. Me.. We spent the rest of the day out at our special-occasion restaurant and wandering around a mall; I bought a new set of bedding, as my bed had already been ravaged by cat ass before this weekend and is beyond saving.. I m in the market for a new robe, too.. Twigs has been taking it the hardest, yowling with surprising regularity.. He s been a bit grumbly the past week, and was particularly sad all day yesterday.. I could swear he saw it coming.. I miss him terribly.. My bed feels very empty without a little cat nestled in it somewhere.. It s a huge relief, though, to have some closure on this.. I spent a month worrying that my cat might die, and it was thoroughly exhausting.. If nothing else, I don t have to worry any more.. I feel like I ve been forced to grow up a lot all of a sudden, what with the grown-up decisions and existential crises.. I keep expecting to feel clichéd reactions, like regret or resentment or guilt, but I don t at all.. I can t even second-guess making the decision on the day I did.. It s not rationality, or confidence; there s just no other way it should have happened.. So, dying fucking sucks, in part because it s all the sorrow of death dragged out for who knows how long.. Several times I thought I d found hope it wasn t.. , or he might fight it off, or whatever, only to have it crushed soon thereafter.. Not that I will ever regret hoping.. I did get longer with him than I expected, and I m glad for that.. I might not even have realized anything was wrong for much longer, had I not been gone for a week and a half and seen the weight loss suddenly rather than gradually.. I m okay.. I m sad, but I m not.. crushed.. like I thought I would be.. In a way I lost much of Styx a month ago when he lost the energy to be his usual rascally self, and all the grief has been over the thought that I might never get that back.. Now I know for sure.. I feel worse for him than I do for me; by all accounts I m perfectly fine, whereas he actually had to go through all this first-hand.. We fought tooth and nail, though.. He kept his voice and his appetite to his last breath, stuffing his face even as that last vet was having me sign paperwork, and I shelled out three grand trying to help him.. We lost, but we gave em hell.. I m not religious.. I can t even euphemistically suggest he s off in cat heaven somewhere romping around.. He s not even in the ground in front of my house; that s just a lump of animal now, something for bugs to eat.. Styx is gone and I can never see him again.. We hate the thought that we ll die and forget everything we ve done.. Our friends remember us, but they die as well.. No matter how permanent a legacy we leave, someday the planet will wilt and die, someday the sun will supernova, someday the universe will disperse into dust.. Zoom out far enough and nothing matters.. So what s the point? Where s the meaning?.. I always thought that was a funny question, seeing as the ones asking it are also the only ones equipped to answer it.. Styx is gone, but he had a great time while he was here, and he brightened our lives in turn.. That was sure enough for him.. This has been very difficult to write, yet I still can t help but smile as I think about him, crying or not.. Life is its own meaning.. He was a fantastic cat and a wonderful little companion.. It was a privilege to have known him, however briefly, and I wouldn t trade it for anything.. I did my best; I have no regrets.. Next.. My next pet will be a rock.. Fuck mortality.. I ll probably get another cat sometime.. Hopefully from a coronavirus-free breeder.. We absolutely can t bring a new cat into the house for a few months, not least because it takes that long for coronavirus to die off, and I certainly don t intend to go through this again anytime soon.. Alas; that s exactly the amount of time in advance that I might want to reserve a kitten from a sphynx cattery, and I reeeeally don t want to think about that quite yet.. (Mel does.. She s already going crazy from having insufficient cat in the house.. And Twigs has no one to play with again, which along with cat grief is making him a colossal pest.. I know of some custom plush makers.. I might see about getting a plush of Styx made.. Then he can scowl at me forever.. I took a ton of photos and video over the past month in a desperate attempt to record as much of him as possible.. I m happy I have them, but given that most of them emphasize just how skinny Styx had gotten, I m not sure I want to share them.. The photo at the top is one of the last I took, a mere six hours before he died.. Also, here is.. Twigs playing with Apollo..

    Original link path: /blog/2013/04/30/goodbye-styx/
    Open archive

  • Title: XY UI nitpicks / fuzzy notepad
    Descriptive info: #pokemon.. #interfaces..

    Original link path: /blog/2013/10/17/xy-ui-nitpicks/
    Open archive

  • Title: Cython versus CFFI / fuzzy notepad
    Descriptive info: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30.. @classmethod.. def.. read.. type.. cls.. ,.. bytes.. filename.. None.. ):.. cdef.. libc.. stdio.. FILE.. *.. fh.. =.. fopen.. char.. rb.. if.. ==.. NULL.. :.. cpython.. exc.. PyErr_SetFromErrnoWithFilename.. IOError.. c_api.. ImageInfo.. image_info.. CloneImageInfo.. MagickException.. ().. int.. ret.. Image.. self.. try.. # Force reading from this file descriptor.. file.. _stack.. ReadImage.. ptr.. check.. # Blank out the filename so IM doesn t try to write to it later.. [.. 0.. ].. finally.. DestroyImageInfo.. fclose.. !=.. _post_init.. return.. (Wow, it s even syntax-highlighted.. Impressive.. Clearly Python-inspired, with C bits sprinkled around.. for a statically-typed variable declaration, static types on function arguments, comparisons to.. , brief dipping into the Python C.. when useful.. Certainly easier than writing plain C, especially when dealing with ImageMagick s idiosyncracies.. But I can t easily use some features like.. with.. , and so my code is sprinkled with pointer-freeing.. s and manual conversion of ImageMagick exceptions into Python ones.. This was all well and good, and I tinkered with the library every so often, wrestling the underlying.. more than getting many features implemented.. Then.. PyPy.. started to gain in popularity.. PyPy didn t originally.. have.. a C.. , being not written in C and all.. More recent releases have a C.. emulation layer, and Cython even has support for targeting it, but it s.. full of caveats.. that do not fill me with confidence.. I do like PyPy, and not supporting it would be a shame, but navigating the quirks of two different memory models is exactly the kind of thing I was trying to.. avoid.. by using Cython in the first place.. Lucky for me, several PyPy fans.. strongly advised.. that I port to.. CFFI.. This is yet another way to bind to C libraries, with an interface borrowed from Lua, which sure sounds impressive to me.. It s based on the same underlying library (libffi) as ctypes, but is more amenable to PyPy for reasons beyond my comprehension, and gets its C interface definitions by parsing C header files so I don t have to translate them all to pretty clunky Python.. That sounded like a.. whole lot of work.. , but I didn t want to write more Cython code that I might be porting later, so I avoided working on sanpera at all for a while.. Until I finally sat down and gave.. a whirl over the past few days.. 1 2 3 4 5 6 7 8 9 10 11 12 13.. open.. as.. blank_image_info.. ffi.. cast.. FILE *.. magick_try.. gc.. lib.. ),.. DestroyImageList.. Which brings me to what this post is.. actually.. about: my experience porting a modest amount of Cython to.. Porting effort.. You can eyeball-diff the Cython and.. implementations above to get an idea of what was involved.. For the most part this was a matter of tediously and mechanically removing.. and type annotations, copying the C function definitions from the original headers into a file for.. to parse, and replacing the reference to.. with the new.. object.. spits out.. I actually did this one module at a time, with moderate success; my Cython code.. mostly.. interacted by going through Python interfaces, which continued to work fine after those Python interfaces were ported to.. And of course it s all using the same library in the same process, so the library doesn t know or care about my hybrid monstrosity sitting above it.. There were a few places that took more effort, and this is where.. started to shine.. Notice that the.. /.. is completely gone in the above code; it s been replaced by.. gc.. , which adds a little Python-land wrapper to a C pointer and gives it a destructor.. When the wrapper is destroyed, the pointer is freed.. Of course, in the non-refcounted land of PyPy that I m actually trying to port to, it s completely arbitrary when this actually happens—but most of my pointers are stored inside Python objects anyway so they ll likely go away at the same time.. Writing Python code meant.. actually works, too, and I ported my crappy exception wrapper into a tiny.. contextmanager.. ImageMagick handles errors by passing pointers to.. ExceptionInfo.. structs around, and writing into them when something goes wrong; the object returned from.. is just a thin container for such a pointer.. When the.. block ends, if the struct contains an error, it s converted to a Python error and raised.. Between.. , a lot of the memory-managing cruft went away, and I m left with something that actually  ...   2.. 1 +.. : 4.. 3s.. That s the time it takes, from a warm start, to run the test suite.. (Which is hilariously broken at the moment, but it s equally broken in all three cases.. I guess that s not too awful a drop, considering I was running.. compiled C code.. before, but I d still like to work on improving it.. (Only 49 tests actually run, for crying out loud.. ) And while PyPy s performance is pretty lousy, it didn t work.. at all.. before, so this is a stark improvement.. Overall.. I put this off for way too long, but it ended up being much easier than I expected, and way less ugly than any of the ctypes code I ve read.. Using a.. -wrapped library is a delight so far, and I expect this will get me much more motivated to work on sanpera in the future—at least if Wand doesn t beat me to the mindshare.. Epilogue: Loading the library.. I m saving this for last because it s really just griping about ImageMagick and has nothing to do with.. ImageMagick is fucking insane, let s make that clear.. You probably know that it claims super-generic.. CLI.. names like.. convert.. identify.. , but that s just the tip of the iceberg.. Large chunks of the core.. , including such basic functions as.. , are themselves the implementations of parts of the.. utilities—you actually cannot ask ImageMagick to read an image from a filename without trying to parse out all the.. png:foobar.. jpg[20x20].. cruft.. Oh and it s written like 1991 C, the function and type names are un-namespaced.. CamelCaps.. , none of the types are documented, most of the numeric types are actually typedefs that vary depending on how it was compiled, and a lot of the interesting stuff exists only in macros.. But what haunted my very first foray into.. was merely finding the library and its headers.. ImageMagick headers don t live in standard locations; they re usually installed in a subdirectory of.. /usr/include.. (which varies by platform and configuration, of course), and inside.. that.. is a.. magick/.. directory that actually contains the headers.. The library used to be fairly easy to find, but now it has some combination of up to three types of suffix in the name, again depending on how it was compiled.. This is all ostensibly because ImageMagick can be compiled with different bit-depths, and they want to support having multiple different flavors of the library installed side-by-side, but the resulting confusion makes it awkward to use the library at.. The easy way to get all the right paths is.. pkg-config.. , but I can only take that for granted on Linux and perhaps other not-Mac Unix flavors, so in the interest of being multicultural I set out to find a robust fallback.. (The Cython approach just relied on.. and spat out a useless error message if it weren t available; lame!).. First attempt: happy day! ImageMagick ships with and installs a program called.. Magick-config.. , which is like.. but specific to ImageMagick.. Whew, that was easy.. Then I had a look, and it turns out.. is just a one-page shell script that calls.. Why does this even exist, then? Who the fuck knows.. Second attempt: ImageMagick also installs some configuration files, which are promised to contain some compile-time information.. Excellent; I ll just find those.. Except ImageMagick looks for them in each of half a dozen places that are different on every platform—and the most likely home contains the ImageMagick.. version.. , which I don t know until I ve found the configuration files.. Okay, okay.. Luckily the.. program has a shoddy interface to these configuration files;.. convert -list configure.. will spit out all the juicy details.. So I tried that, and it worked well.. Sort of.. Turns out this file will.. tell me how ImageMagick itself was built, not how to link to it.. It contains an include path which happens to match one on my machine, but somehow I suspect it s not necessarily intended to.. And of course the name of the library itself doesn t appear anywhere.. At this point I gave up and I ll have to revisit it later.. I know I can ignore the headers and just look for the library on.. X, which is certainly.. easier.. The related Wand library, which also seeks to wrap ImageMagick, is currently just.. flailing wildly.. until it finds a library that actually exists.. (Oh, and they have these very specific.. instructions for installing ImageMagick on Windows.. which involve setting a specific environment variable so ImageMagick can even find its own files.. #python.. #sanpera..

    Original link path: /blog/2013/09/13/cython-versus-cffi/
    Open archive

  • Archived pages: 120