Entries from August 2009
|
|
p e r s o n a l |
Lausanne... Jealous?
(26 Aug 2009 at 23:12) |
Lausanne... Jealous? by Sick Ridiculous & etc. Photo Marcus S.
A few weeks ago our friend Donna successfully defended her thesis and threw a party, even waiting until a Tuesday night so that Nels and I could play at that nice party, so of course we wrote a song for the gig. It is called Lausanne... Jealous? because Donna is about to take a post-doctoral position at EPFL in Lausanne, Switzerland. More than usual—which is saying a lot—this song is loaded with detailed in-jokes and difficult puns. I will provide some hints, since we received positive feedback about the fact that we did this before playing the song at her party. There are three national languages in Switzerland: (Swiss) German, French, and Italian. The Swiss invented the Swatch watch, which you are encouraged to wear multiple of on your arm, for fashion. (Nels and I predict a Swatch fashion resurgence, soon.) They also invented the Swiss Army knife and cheese. Donna always serves mostly cheese at her parties because she has a gluten-free diet. Donna's dissertation is about some objected oriented programming stuff. At EPFL she'll work on Scala, a maximalist language which combines all known programming ideas into one Java-like syntax. It was made by Martin Odersky, who also made a Java extension once called Pizza. That's probably enough to get you started.
Still in queue: ICFP contest report (very soon I'll even be able to include the final results, heh), new T7ES song, Pac Tom update, pics from various events. Shame. |
|
m u s i c |
Sans Pellegrino and a bug
(23 Aug 2009 at 17:21) |
Here is a new T7ES song called Sans Pellegrino.
Tom 7 Entertainment System - Sans Pellegrino
— ❧ —
Related: I have been working on several different pieces of audio-generating software and hardware. One of my favorite things about doing this is the crazy ways that stuff can fail, and the unexpected sounds that result. My most current thing is some microcontroller-based sound generation for secret project EG. As part of testing it I created what I think is my first actual chiptune, in the sense that the music is generated by a microchip dedicated to the purpose, not some software emulator or hi-fi MIDI synthesizer. Here is Sensations (chip error); the sound quality is very bad because the only way I have to record this is to hold a mic up to a speaker. It starts out fine but goes to shit pretty soon. What's actually happening is that I'm not making the realtime deadline for emitting samples (chip is only 12mhz) because I'm doing too much computation when there are more than 2 notes sounding simultaneously. Because it's basically deterministic and only generating sound, this actually just slows down everything: the length of the notes and their corresponding pitch, by a factor depending on how many simultaneous notes there are. I had a good laugh about this.
I'm usually very careful when programming microcontrollers because it's way harder to debug than in a regular computer, if you get it wrong. I'm proud to report that this was compile/flash/test #2; the first didn't do anything because I forgot to increment the index into the song; the third worked exactly as I wanted. More on this project soon, I think. |
|
Entries from July 2009
|
|
p e r s o n a l |
Erie and Zurich
(26 Jul 2009 at 17:52) |
Last weekend we did the Erie Something-or-other Half Marathon on Presque Isle, which is in the Lake Erie. It was visiting undergrad researcher Jamie's idea. I was gonna drive (~2.5 hours) to this thing, but then for weeks and months my car is accumulating new noises and the old new noises never go away: e.g. there's the shshh-shshh synchronized with the rotation of the wheels that I think progresses from left to right and that attracts the attention of pedestrians, plus the always sound of zzzzzzzzzzz or ssssssssss or maybe žžžžžžžžžž, depending on your accent. Plus now the deep insides-looseness on some streets. The CD player only displays space-gibberish and cannot eject and plays the one now permanently engaged mix CD at slightly too-high volume. There are lots of problems unrelated to noises, too. The repairs demanded clearly exceed its total value, even considering nostalgia. So now I am pretty much committed to only driving this car in places where were it to literally fall apart in motion, I would be basically okay with that. This does not include any portion of I-79 nor Erie, PA. Then Dan and Katrina are gonna come too so yay, I can avoid driving (which I hate doing anyway) the deathmobile. But morning of the trip their car is today leaking oil I guess for similar psychosomatic reasons. So we'll rent, but all of the rental places just closed because it's Saturday, except for the ones at the airport. So we packed our running shoes and took the airport shuttle to the airport and rented and drove up to Erie and stayed in a motel which has a 1.5 star rating (with 33 highly negative reviews, e.g. "WORSE HOTEL EVER" If the room was free I would never return) but based on TF–IDF signals (particularly the uncommon frequency of describing it as "the worse hotel") I concluded that this was mostly the work of Spam-sabotage ratings, maybe by local alternative hotels or maybe just by Google maps terrorists. When we got there it was totally fine, I mean not great and sure I had to wear my industrial-grade hearing protection to fall asleep with the sirens and such, but those were just on the way by the motel on the way to other places with actual crimes. It was nothing compared to the place near Columbus with the bulletproof glass at reception and the meth party by the ice machine ("this place can get kinda off the hook at night"). I mean, this place had a lobby, decorative, non-functioning pool, and decorative, non-functioning exercise room. So that was fine. We tried to go get some diner food because we're all vegetarians with different pre-race food rituals, and we wanted so badly to go to this place but it was closed: Dinor?? How is it possible to make a mistake like this? I may just not understand some deeply-construed pun, since an awful lot of stuff in that city is named with various puns on "Erie," like for example Erie Brewing Co.'s brewpub is called "The Brewerie". It was one block from our hotel and one of my pre-race food rituals is to have a bit of beer the night before, and I do like their "Railbender" ale on draft, so we took a gander. It felt more like a hotel bar than a brewpub, but the beer was pretty good and the waitress nicely lent me her sharpie so that I could prepare my costume for the race, which was to write "MY COSTUME IS GREAT HI" on my chest skin with the marker, in the bathroom which I could only accomplish with the full-length mirror so that was kind of weird for the other people in the bathroom, I sussed out from their faces.
This was Dan and Katrina's first M/2 so of course we left them in the dust. (But congratulations to both for finishing in admirable times; 13 miles is no joke!) Jamie wanted to qualify for Elite Status for the Chicago Marathon or something, and I (thought I) was not really trained enough to beat my previous best time so I volunteered to pace her. We ran the first 7 miles at the goal pace of 7m30s but then started to slow a bit, and she was starting to give me some sob story about passing out and I tried giving her various guts pep talks but she kept encouraging me to endustinate her too so I endusted for the last 5 or so miles at more like a 6m30s pace. I was surprised how decent that felt given the shape I thought I was in, though it could easily have been mostly because of the leisurely start. I finished in 1h37m35s, a lot slower than my previous best of 1h27m48s, but a lot more easily accomplished. I'm therefore downwardly adjusting my lifetime goal for the Half Marathon to 1h23m00s. This might be the race to do it in; there's wind but it claims that it "is quite possibly" the flattest in the world.
Now Listening to via usually-good podcast: 2009 Bob Mould. I cannot believe this is the same guy from Hüsker Dü. How embarrassing.
Speaking of umlauts, I also went to Zürich. Even in the place itself umlauts or not is only like 50-50, so I hereby stop spelling it that way. It was mostly a working trip, so not a lot of stories to recount. On the way there I had a long layover to insulate against nearly certain EWR bullshit (indeed, the connection delivered on its 70% chance 1+ hour delay) so I had some beer in one of the gouge bars and ended up talking to this professional car performance-modding guy. It is a special traveling joy of mine to fake credentials in fleeting interactions: e.g. false name left with the maître d', carrying out transactions in languages I don't at all or barely speak without being sussed as an American (I lose if the person switches to English, for example, especially in the first Hello). Actually come to think of it that was how I first became vegetarian: I used to pretend to be vegetarian in some restaurants, and I think Jake started accusing me of being a vegetarian fraud, so I had to show him. Anyway I get into a conversation with this guy and now I'm pretending to be sort of knowledgeable about cars, using mainly fleeting facts from my brother's Motor Trend etc. magazines that I sometimes read in the toilet. I think I successfully fraudulized him, in fact, I'm sure that he would have been negatively astounded to find out that I actually drive (meaning own) a 1996 Mercury Villager minivan with aforementioned noise and non-noise problems that I bought on eBay for $2500. So success. I probably should have used the opportunity to get some tips on inexpensively and ironically replacing my car, like: Is it possible to performance-mod a golf cart? (Or Go- Go- Power-Wheels?)
On the plane my rowmate was from Erie where I had just been yesterday, and he was happy that anybody ever went to Erie, so we were friends without any Zeliging. A few hours later in the middle of the "night" he starts acting weird, like he's taking magazines from the seat pocket and handing them to me one by one, which I take them because we're Erie friends and wait for him to explain WTF, then he starts making indescribable and nonproductive motions, and also obviously rude incursions into my seat volume, at which I realize that he is plane-sleepwalking. Eventually he gets up and starts moving around the cabin, which I don't know if it was because he was actually awake or just more somnambulatory, and anyway I wasn't sure if I was supposed to wake my friend or let him continue to sleep, because it is pretty hard to sleep on planes.
Each person or group in the line of visitors, some distant tourists and some more local, laughs and/or rolls eyes as the group in front can't figure out how to operate the computermachine that gives you train tickets and eventually gives up, including me, and of course it turns out the reason is that it is actually broken (but no DEFEKT sign), leading you on until the very end where it silently refuses any kind of payment. I try to explain nonverbally to the people behind me but they don't understand or don't believe me; the machine at the other side works as expected.
While I was in town I didn't have internet so I was reading a book on recommendation, called If on a winter's night a traveler by Italo Calvino. I do pass on this recommendation to you. It's actually remarkably similar to what I was trying to do with Name of Author by Title of Book except that If on a... was written the year I was born, and Calvino is much more competent, and the book probably took more than a month to write. I don't want to spoil it, but there are various parts of the book that are written in the 2nd person, which eerily matched up with things that were actually happening to me during the trip. Like I'd turn the page and it'd be all "Now your plane is landing." and in fact my real life plane is landing!? So, a good book, and especially good for the trip.
I can also recommend two other things in Zurich; these I didn't bring with me. The first is a run up to the tip of Uetliberg, the tallest mountain in running distance from Zurich's city center. The run is pretty challenging if you take the direct route, because it starts out hilly and just keeps getting hillier. If you're at the top on a clear day there's a radio tower with steps up it (no tolls or any bullshit like that) to a platform from which you can see like jillions of miles (except there, they are kilometers) in all directions. I see some interesting looking clouds on the horizon and then realize those are snowcapped mountains; the Alps. Uetliberg is no The Alps but for a few hours foot excursion it's pretty great. I hear that the tower is Zurich's #1 suicide spot, FYI.
The other recommendation is Hiltl, Europe's oldest vegetarian restaurant. Finding vegetarian food at all in most countries in Europe is an achievement, but this place has been operating for 111 years (!). Food's good, expensive, but I didn't feel out of place in my plaid shorts and t-shirt because they also have their Twitter feed projected on the wall. The world's an increasingly strange place; rather: it's strange to be growing into adulthood and finding that the world is increasingly built for me or people like me.
This post is clearly long enough, but one more tale: We were out drinking all night and on the way back to my hotel, a guy approaches me who is obviously also drunj, and my accent radar says he is Eastern European. He seems afraid of me which is funny because first of all I am not a threatening guy I think in a nice part of town with my MP3 player and general smirk, but also because if you're afraid of someone you don't usually go up and ask that person in a worried way, "Have you ever heard... " (he struggles for the words) "... of an attacker?" An attacker, I ask? "Someone who kills me?" I smile but he looks genuinely concerned. I say: "No, I think you're safe." He is so relieved to hear this, and then we shake hands and become drunj 2am unattacked friends and say good-bye. |
|
n e r d c i t y |
JavaScript rant
(26 Jul 2009 at 14:38) |
A friend posted some casual nonsense about how JavaScript is "elegant" and exposing the masses to functional programming with its "lexically scoped" closures on Facebook last week. I was sitting on the bus to the airport so I wrote this response, which I now realize is way too long to fit in Facebook miniboxes, so this seems like my next best bet. Surely skippable for non programming-language nerds. (Various general-interest travel report info coming up in a post soon.)
✂ clip 'n save Re: "elegant": I think you are crazy. (I program in Javascript all the time professionally and wrote a compiler to it for my dissertation.) It has numerous design blunders at its core, like requiring everything to be accessible through string-based names and hashes at runtime, except when very sophisticated compilers can tell that very simple code does not require this; its notion that erroneous expressions should continue execution by propagating "undefined" instead of telling the programmer; treating everything as an object in a misguided attempt to achieve uniformity but then requiring a whole host of exceptions and special cases because of course, functions are actually different from integers after all. Of course I disagree on its matters of taste regarding types, and balk at ideas like in v5 of adding " yield " (a complicated beast instead of something actually simple and well-understood like continuations), or whatever. But I don't need to defer to taste to make my point. Just open up the (massive) ECMAscript definition. You'll witness that the language definition is literally the codification of the C program (see e.g. the 54-step description of the Array.prototype.splice function, filled with GOTOs and k++s on ECMA-262 p.95) that some Netscape engineers (possibly good hackers, but who certainly did not understand programming language design nor that their code was going to become forever entrenched in the tower of garbage we're now building the information age on) crapped out on a coffee binge to fix some demo script written by some other language-naive hacker which script they both basically agree should work because it seems natural or some such. Without any regard to language-wide implications. I've been on projects before that built languages that way so the symptoms are easy to recognize. Examples are everywhere: Automatic semicolon insertion? That as a result some productions in the grammar (e.g. x++ ) have special cases banning newlines between tokens? The inscrutable contextually-dependent semi-sameness of 0 , null , false , undefined , 0.0 , "" , {} ? That there are multiple internal intermediate values that are required for explaining the semantics of the language, but that cannot be expressed in the language? That its grammar is such that almost every phrase is defined with both regular and "NoIn" versions (e.g. BitwiseANDExpressionNoIn), the latter being identical but not containing the "in" keyword, so that they can explain the behavior of the parser they inherited (I can only imagine what it looks like)? That there is no actual character type, so strings are only usable as arrays of length 1 strings (themselves arrays of length 1 strings, i.e., infinite objects)? Not to mention all the crazy stuff you can do by modifying built-in prototypes (I called a function and now every array has a 4th element of your choosing?) or properties of the global object like undefined and null (Why aren't they just literals like true and false ?). And what about this gem (ECMA-262, p.121): "15.9.2.1 Date ([ year [, month [, date [, hours [, minutes [, seconds [, ms ]]]]]]])
All of the arguments are optional; any arguments supplied are accepted but are completely ignored. A string is created and returned as if by the expression (new Date ()).toString() ." Not even an explanation? Is this some kind of fucking joke?? At least p.139 cites its sources: "Unlike other regular expression operators, there is no backtracking into a (?= form (this unusual behaviour is inherited from Perl)." Re: "Lexical scope": my ass. I don't think there is a single thing in the language that is lexically scoped. There aren't even variables. My eyes glaze over when I try to understand the details, but roughly speaking, every "variable" is a property of some object, usually the activation of the function body you're currently evaluating. Like what do you think this code does? function installHandlers() { for (var i = 0; i < 20; i++) { var elt = document.createElement('div'); document.body.appendChild(elt); elt.innerHTML = i; elt.onclick = function() { alert('Clicked #' + elt.innerHTML); }; } } You get 20 boxes with numbers, but if you click, the message always says #19. Why? The mention of elt in the function looks up the property called elt in the activation object for the call to installHandlers . There's just one: Even though I'm saying " var elt = ... " what that really means is find the property elt in the closest function scope and modify it to this new value. The var keyword has nothing to do with variable declaration, in other words. There are plenty of ways to write this code where you get the behavior seemingly intended by the above code (most involving introducing extra function definitions and calls so that you get new objects for them) and seasoned JavaScript programmers get along fine with it, but this isn't lexical scoping (it isn't even dynamic scoping!). |
|
p e r s o n a l |
Theme from Zürich
(18 Jul 2009 at 15:05) |
Hi! Right now I am on a broken-cars adventure to Erie PA to run in a half-marathon on an island. I will definitely suck, even not wearing a costume. But then on Monday I am going to Zurich. So I wrote this Tom 7 Entertainment System tune called Theme from Zürich. It is pretty weird chord-wise but especially for its superposition of triplets and power-of-two rhythms. I also think it is kind of catchy.
irony alert: I know that Swiss Miss is not actually Swiss. (For example its logo would probably be in Helvetica) |
|
...
Jul 2009
continued |
|
2 0 2 4
| Posts from 2024 |
Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 2 3
| Posts from 2023 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 2 2
| Posts from 2022 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 2 1
| Posts from 2021 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 2 0
| Posts from 2020 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 9
| Posts from 2019 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 8
| Posts from 2018 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 7
| Posts from 2017 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 6
| Posts from 2016 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 5
| Posts from 2015 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 4
| Posts from 2014 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 3
| Posts from 2013 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 2
| Posts from 2012 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 1
| Posts from 2011 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 1 0
| Posts from 2010 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 9
| Posts from 2009 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 8
| Posts from 2008 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 7
| Posts from 2007 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 6
| Posts from 2006 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 5
| Posts from 2005 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 4
| Posts from 2004 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 3
| Posts from 2003 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 2
| Posts from 2002 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 1
| Posts from 2001 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan |
2 0 0 0
| Posts from 2000 |
Dec Nov Oct Sep Aug Jul Jun May Apr Mar |
|