Hardscrabble 🍫

By Max Jacobson

mewithoutYou and me

29 Sep 2017

mewithoutYou is a fairly prolific rock and roll band from Philadelphia who I love very much. In this post, I’m going to talk a little bit about why and share some of my favorite songs.

Catch For Us The Foxes (2004)

I first heard mewithoutYou in probably 2004. I was going to see my then (and current) favorite band Bear Vs. Shark play a club in Poughkeepsie called The Loft. There were two openers, Codeseven and mewithoutYou, neither of which I had heard of. I’m sure I probably pirated both of their albums, so I could be prepared. I’m not sure if I ever got around to listening to Codeseven…

I remember sitting on the couch in my parents house with headphones on (did I have an iPod? did I burn a CD for an album I wasn’t even sure I liked?) and being fully knocked on my ass.

The album, Catch For Us The Foxes, is their second. It starts with a song called Torches Together. Immediately… who the hell is this guy? What is he talking about? Why isn’t he singing? This dude is out of control spazzing out while very comfortably weaving a metaphor about, I think, the power that comes from letting go of personal ego and joining a community? Individual lines jump out: “Anyway, aren’t you unbearably sad?” Just like that, as an aside. Later: “And I’m afraid and everyone’s afraid and everyone knows it / But we don’t have to be afraid anymore.”

I recently read a brief profile of chef and cookbook author Meera Sodha. She has this great line:

You know when you realize what you’re eating is just so magnificent, and there’s a sort of rip in the atmosphere?

Torches Together ripped into my 16-year-old atmosphere.

Anyway, Catch For Us The Foxes isn’t my favorite album of theirs. Maybe my least favorite. It has a lot of nice moments, but it’s not very focused. Stylistically, I think it reaches the limits of the spoken (and shouted) word style. It gets a lot of mileage from the contrast between the band (who play very precisely) and Weiss’s unhinged vocals. He sounds, often, distressed, and the music behind him almost feels like it’s trying to keep up with him and support the performance like a movie or broadway score. Imagine, if you were distressed, and you broke down, and as you expressed your feelings, some chunky riffs and a tight rhythtm section buoyed you, and encouraged you to keep going. That might be kind of powerful and you might feel kind of validated.

The style is definitely not for everyone, but I love it, and that’s sort of the lens I see it through. Maybe that’s how all bands work, I don’t know.

[A->B] Life (2002)

After the concert (which was amazing, I can’t believe I got to see Bear Vs. Shark and mewithoutYou in the same night) I went back and listened to their debut album, [A->B] Life.

Honestly, I think this is is a really good album. It’s not really trying to be that profound. It’s mostly trying to rock out. It’s short. It moves fast. Weiss pretty consistently screams all his lyrics. There are a few spacey interludes, but overall it’s very crunchy. Track eight, “We Know Who Our Enemies Are”, has a kind of hilarious moment where it fades out and then back in for some reason. It ends with a secret acoustic track, so you know they have a sensitive side.

There are a few songs that are more on the snotty and abrasive side IMO (“I Never Said That I Was Brave”). But a lot of them are (relative) bangers, like “The Ghost”:

Can you even imagine how fun it is sing lines like “Put music! Put music! Put music to our troubles!” along at a concert?

Look, things aren’t going well, and there are simple pleasures to be had. Consider air-guitarring to the little guitar solo at the end there.

This year, in 2017, they’re doing a 15 year anniversary tour where they’re playing the album in full. I’m obviously going.

Brother, Sister (2006)

So album three comes out and I’m officially a fan. I’m also in college now, and sophisticated. I order it on vinyl and put it on my wall (I do not have a record player).

I think this is their first great album. The corner they turned is that Weiss has started to transition from performing anguish to telling stories. He’s still kind of freaked out by everything, but he doesn’t quite as angry anymore. He’s coming around to being gently amused.

Here’s “The Dryness and the Rain”:

My favorite moment comes near the end:

A fish swims in the sea
While the sea is in a certain sense
Contained within the fish!
Oh, what am I to think
What the writing
Of a thousand lifetimes
Could not explain
If all the forest trees were pens
And all the oceans ink?

What am I to think?

Not for the first time, many of their best lines are cribbed from or inspired by The Qoran and the Sufi Islam teacher(s?) Weiss is obsessed with.

The next song, “Wolf Am I! (and Shadow)” is maybe my favorite of their hard rock songs:

I just think the band sounds so tight and good. But also, Weiss finds room for some spontaneity in a way that I find pleasingly self-deprecating:

Oh there, I go showing off again
Self-impressed by how well I can put myself down!

Later, he corrects himself in a way that almost feels like he’s making all this up as he goes:

Shadow am I!
Like suspicion that’s never confirmed
But it’s never denied
Wolf am I

No, “shadow”, I think is better
As I’m not so much something
More like the absence of something

So shadow am I!

Of course, I hope, he’s not just making it up as he goes. But it does play like an effective performance of confusion and self-loathing and fear.

This might feel a little like more of the last album, but it’s redeemed by two things:

  1. it just sounds so good
  2. it’s in the context of an album that isn’t just that, but seeks and finds some level of grace by the end of it

So let’s jump to that…

The album ends with a song called “In a Sweater Poorly Knit” (the title winks at an earlier song’s title, “In a Market Dimly Lit”). It’s the story of Moses in Egypt, sort of. It features some lovely harp and acoustic guitar. All of the genius annotations for this song insist it’s a big metaphor for a breakup, which I’d never once considered before. Eh. Idk. It’s so pretty. Like most of their songs, I think it’s about his relationship with God and with his own ego. It ends the same way the album opens, with the line “I do not exist”. Mostly it’s just so pretty.

At some point you realize he started actually singing and not speaking or shouting and it kind of suits him. He’ll do more of that soon.

It’s All Crazy! It’s All False! It’s All a Dream! It’s Alright (2009)

OK. Here’s my big opinion: this album is a masterpiece.

Pretty much all traces of personal anguish are gone. Almost every song is a story. Almost all of the characters are animals. When they’re not animals, they’re fruits and vegetables. When they’re not produce, they’re the baby Jesus. It sounds gorgeous.

The opening track, “Every Thought A Thought of You”, is a blissed out, bouncy, slightly strained devotional to God. The closing track, “Allah, Allah, Allah”, is also basically the same, except it has a kind of fun campfire singalong vibe.

I’m not a religious person in any way except that I love this band and find them very persuasive, particularly the way they seem almost absurdly non-denominational. There’s even room in these songs for doubt. One of my favorites is the longest song on the album, “The King Beetle On a Coconut Estate”:

What is this song getting at? Is the King a fool? It seems he’s just a dumb bug who flew into a light and died. That’s not so great. The “great mystery” turned out to be dumb. Hmm.

The details in this song are so lovingly rendered (“The beetle king summoned his men / From the top of the rhododendron stem”; “The lieutenant stepped out from the line; As he lassoed his thorax with twine”) that I can’t help but feel that Weiss empathizes with the plight of the Beetle King.

Why not be utterly changed into fire?

Wuff..

Most of all this album sounds peaceful and gentle and assured and pretty. Here’s “A Stick, A Carrot, A String”, which positively shimmers:

Look, this one is straight up about the baby Jesus, from the perspective of the animals who were around when he was born. Weiss finds time to make you empathize with each one:

At a distance stood a mangy goat
With the crooked teeth and a matted coat
Weary eyes and worn
Chipped and twisted horns

Thinking “maybe I’ll make friends someday
With the cows and the hens and the rambouillet
But for now, I’ll keep away
I’ve got nothing smart to say”

God damn - I love that goat.

There are so many songs I love on this album (all of them). Other highlights:

  • “Goodbye, I!” – the bit where he sings “Let’s stand completely still” and then the drummer pitter patters out a little drum solo makes me catch my breath each time I hear it
  • “The Fox, The Crow and the Cookie” – this is a perfect little story delightfully rendered
  • “Fig With A Bellyache” – First of all, that title, come on. But it’s the most stylistically weird song on the album and features some wonderfully awkward lyrics (“The dog below our waists aroused as arms embraced the pretty gals / It came much more as a surprise / It happening while I hugged the guys”)
  • “Cattail Down” – for the conclusion “You think you’re you? You’re not you. You’re everyone else.” and some sweet trumpet action

One thing I loved about this album when it came out is that it felt like the culmination of everything that came before it. Over time their albums became less angry and more concerned with humility. The arrival of wind and string instruments felt like an answer. The urgent searching of youth seemed resolved. The answers had been found.

So where do they go from there?

Ten Stories (2012)

For one thing, they decided to play their electric guitars on all the songs again. I think I recall reading that the non-Weiss members of the band wanted to play more rock songs again, and Weiss was like, sure. When it came out, I was disappointed that it didn’t feel like a continuation of the aesthetic of the previous album. In some ways, it is, though. It’s also concerned with fables, this time it loosely tracks the story of a collection of circus animals who cause a train wreck and make their escape. I don’t really connect to this story. I dunno. For me, this album is just fine.

There’s one song which sounds like it could’ve been on the previous album, “Cardiff Giant”, and it is my favorite song on the album:

Pale Horses (2015)

When this one was coming out, I felt trepidation. Were mewithoutYou drifting in a direction I didn’t like? Was Weiss being held hostage by the rock and roll instincts of his band mates?

I don’t know, but this album is super good, so who cares.

Here’s something from an interview with Weiss:

Interviewer: What does Pale Horses mean to you?

Weiss: That’s a hard one. That question could take up the whole interview. I wouldn’t know where to begin, but it probably doesn’t differ too much from our other albums in that it’s just an expression of where I’m at and what I’ve been experiencing in the past few years, what my convictions are and what my hopes are. It’s pretty personal. Probably more so than some of our more recent albums, which were a little bit more distant and third person and fabulous – you know, fable-based and character-based. For this one I’ve come back more to the first person to try to share what’s in my heart and what’s on my mind, and hopefully be somewhat uplifting in the process. But covers a wide range of things, so it’d be too hard to pinpoint any one of those.

So here’s my theory: the hard rock vibe doesn’t work well with the fables (see Ten Stories) but it works great for the not stories.

The interview continues:

Interviewer: What do you think brought mewithoutYou back to you, as opposed to those third-person fables? Why did you decide to do that?

Weiss: For a couple of reasons, I guess, but the easiest one to give you is that the guys in my band asked me to, and I was happy to oblige. A little bit more of a personal reason has to do with wanting to keep things fresh. When we put out It’s All Crazy! and Ten Stories, that was me trying to move away from the first person and get the ego out of the way, trying to write in a way that others could relate to just as well, or address content that might have some universal – or quasi-universal – significance, and trying to avoid letting my subjectivity muddy the waters. But more recently, I’ve started to doubt whether I can ever do that, and it felt like maybe those attempts were too ambitious and I was maybe biting off more than I could chew. So I thought if there’s one thing I can write about with some insight, it’s myself. That’s not to say I even have any expertise on myself…

Aha. Here is the real, correct answer to “where do you go” from the 2009 album. You walk it back a little. You didn’t find the answers. Obviously. C’mon. Who are you? All that peace you cultivated? Maybe try living life for a little while and see how that goes.

So: he’s screaming again.

Here’s a lovely music video for “Red Cow” and “Dorothy” which hard-lefts from a screamy rock jam into a graceful, melancholy wind-down:

This feels like rich new ground to root around in.

Here’s another song, Blue Hen, that just sounds great, and contains an all-time great Weiss freak out

And I’ll wrap up your absence
In blankets of reverence
A mastodon shadow
Divided by zero

I have no idea what that means but I totally know what it means and I love it.

My favorite song has got to be the last one, “Rainbow Signs”:

It’s long and builds slowly and contains the apocalypse and I guess is about his father dying. I find it very powerful and kind of awe inspiring.

(????) (2018??)

mewithoutYou seems to be in the studio, per their twitter, and a new album should come out soon enough, and I can’t wait.

Sad Blocks

06 Jul 2017

I wish Ruby knew when you wrote a sad block.

What is a sad block?

It’s something I just made up.

Consider this code:

Candle.all.each do |candle|
  puts candle.inspect
end

Let’s say you run it, and you see no output. What do you conclude? Probably that there aren’t any candles.

Well, maybe. Or maybe Candle is implemented like this:

# candle.rb
class DatabaseResult
  def each; end
end

class Candle
  def self.all
    DatabaseResult.new
  end
end

Look, that would be weird, but it’s possible, and Ruby doesn’t do anything to help you out here, and I feel like it should.

What’s happening? You’re calling the instance method #each of the DatabaseResult class. And it’s just not doing anything at all and doesn’t even know you gave it a block. Cool.

Brief digression time.

That method has an “arity” of zero. How do I know that?

$ irb
>> require "./candle"
=> true
>> DatabaseResult.instance_method(:each).arity
=> 0

Also by looking at it.

What does it mean? It means that the method takes zero arguments.

But when we count the arity, we’re not considering blocks, because blocks are a special, weird kind of argument, where you can provide it or not and it’s kind of outside of the method signature. You can have methods that takes a block and uses it, and its arity will still be zero:

# candle2.rb
class DatabaseResult
  def initialize(values)
    @values = values
  end

  def each
    @values.each do |value|
      yield(value)
    end
  end
end

class Candle
  def self.all
    DatabaseResult.new([
      new("Geranium"),
      new("Lavender"),
    ])
  end

  def initialize(scent)
    @scent = scent
  end
end

Candle.all.each do |candle|
  puts candle.inspect
end
$ irb
>> require "./candle2"
=> true
>> DatabaseResult.instance_method(:each).arity
=> 0

Even though we use the block we’re given, the arity is still zero.

What about that other syntax where you explicitly put the block in the method signature, does that make it count toward the arity?

def each(&block)
  @values.each do |value|
    block.call(value)
  end
end

I’ll tell you: it doesn’t. Even though it sort of feels like it should.

These versions of the method really require you to pass them a block, which you just have to know. If you forget to pass a block, you get a nasty error:

# candle4.rb
# ...
def each(&block)
  @values.each do |value|
    block.call(value)
  end
end
# ...

Candle.all.each
candle4.rb:9:in `block in each': undefined method `call' for nil:NilClass (NoMethodError)
        from candle4.rb:8:in `each'
        from candle4.rb:8:in `each'
        from candle4.rb:27:in `<main>'

Or in this version, an even better error:

# candle5.rb
# ...
def each
  @values.each do |value|
    yield value
  end
end
# ...

Candle.all.each
candle5.rb:9:in `block in each': no block given (yield) (LocalJumpError)
        from candle5.rb:8:in `each'
        from candle5.rb:8:in `each'
        from candle5.rb:27:in `<main>'

No block given. Local jump error. Sure. That’s Ruby trying to be helpful and I appreciate that.

Ruby helps you (by raising a helpful error) when you don’t provide a block, but you were supposed to. But it doesn’t help you when you do provide a block, and you weren’t supposed to.

Ruby’s like, yeah, sure, just provide a block wherever you want, this is a free country.

If you wanted to change this behavior in your code, and get helpful errors when your blocks are unexpectedly not invoked, you could do something like this:

class SadBlock
  def initialize(&block)
    @block = block
    @called = false
  end

  def verify
    raise 'hell' unless @called
  end

  def to_proc
    ->(*args) {
      @called = true
      @block.call(*args)
    }
  end
end

sad_block = SadBlock.new do |candle|
  puts candle.inspect
end

Candle.all.each(&sad_block)
sad_block.verify

I don’t think you should do this, but you could, and I kind of wish Ruby just did it automatically.

I know it’s an impractical request, because there are valid use-cases where you might pass a block to a method, and the method just assigns it to an instance variable without calling it, but it promises to call it later. But maybe Ruby could detect that somehow. I’m just thinking out loud here.

I’ve seen tests where assertions lived in blocks, and the blocks were never being called, so they weren’t actually asserting anything.

I’ve seen configuration being done via a DSL in a block, except the block wasn’t being called, so the defaults were being used.

I guess what I’m saying is it’s a little weird to me that blocks aren’t treated like ordinary arguments. If they were, you’d get an ArgumentError if you forgot to provide it or if you provided it and it wasn’t expected.

That’s what I want.

there are no rules in ruby

02 Jul 2017

Note: I’ve expanded on these ideas in a conference talk, which you can see here.


I recently learned about a feature of the Ruby programming language that has shaken me to my very core.

Consider this code:

# dog.rb
class Dog
  attr_reader :name

  def initialize(name)
    @name = name or raise ArgumentError
  end
end

def get_dog
  Dog.new("Milo")
end

thing = get_dog
if Dog === thing
  puts thing.name + " is a dog"
end

What happens when you run this code? Feel free to try.

But I’ll tell you.

$ ruby dog.rb
Milo is a dog

This code seems pretty resilient to unexpected runtime errors.

Looking at the code, it seems pretty reasonable to believe:

when we have an instance of Dog, we will be able to send it the message name and get back a String

Up is up. The sky is blue. We’re living in a society.

Well, ok, but we can’t actually assume that the value will be a String, because it doesn’t check that. If we change our definition of get_dog, things blow up:

def get_dog
  Dog.new(["Milo"])
end
$ ruby dog.rb
dog.rb:15:in `<main>': no implicit conversion of String into Array (TypeError)

But, OK, at least that error message is pretty good. This is user error. When we write thing.name + " is a dog", we’re expressing some amount of faith in ourselves that we expect a String, because values of other types don’t necessarily respond to a + method. This is a leap of faith that we’re all willing to make when we use Ruby. Other languages eliminate the need to make that leap of faith by checking types when you compile your code, but Ruby doesn’t do that.

And that’s fine.

So maybe our expectation should be:

when we have an instance of Dog, we will be able to send it the message name and get back a truthy value

And we’ll just remember to provide Strings. Maybe we’ll write a comment indicating the expected type of the parameter.

Well, what if get_dog looked like this:

def get_dog
  dog = Dog.new("Milo")
  def dog.name
    nil
  end
  dog
end

Maybe it just casually redefined the name method for that instance. Then your program crashes like this:

$ ruby dog.rb
dog.rb:19:in `<main>': undefined method `+' for nil:NilClass (NoMethodError)

Which… OK, who’s going to write code like that? Not me and no one I work with, for sure!

But where does that leave our statement of beliefs?

when we have an instance of Dog, we will be able to send it the message name

We can’t even say “and get back a value” because what if the override raises an error?

Perhaps you see where this is going…

Well, what if get_dog looked like this?

def get_dog
  dog = Dog.new("Milo")
  dog.instance_eval('undef :name')
  dog
end
$ ruby dog.rb
dog.rb:17:in `<main>': undefined method `name' for #<Dog:0x007fecc104a870 @name="Milo"> (NoMethodError)

Which, again, lol. You can just remove methods if you want to? Sure. No one is going to write this. I know.

(By the way, hat tip to Agis on Stack Overflow for sharing this trick. I figured it was possible but didn’t know how.)

OK so what can we say for sure?

How about this:

when we have an instance of Dog, it will have an instance variable @name defined

Wow that’s sad! How do we even check that? Maybe like this:

thing = get_dog
if Dog === thing
  puts thing.instance_variable_defined?("@name").inspect
  puts thing.instance_variable_get("@name").inspect
end
$ ruby dog.rb
true
"Milo"

OK great, have we reached the bottom?

No, because there are no rules in Ruby.

We can probably break this in many ways. Here’s one:

def get_dog
  dog = Dog.new("Milo")
  dog.remove_instance_variable("@name")
  dog
end

IMO this one is a bit pedestrian. Yeah, fine, you can just remove instance variables on random objects if you want to. Of course. My spirit is already broken, this isn’t meaningfully worse.

So let’s just try to say something that we don’t have to take back right away:

when we have an instance of Dog, the code in the initialize method must have run

Right? That has to be true. We’re living in a society, remember?

Nope:

def get_dog
  Dog.allocate
end

That results in this output:

$ ruby dog.rb
false
nil

What the hell is this?

This is the thing I mentioned at the beginning that I learned recently. When we create new objects in Ruby, we usually use the new class method. Notably, we don’t call the initialize instance method ourselves, although that’s what we are responsible for defining. Ruby handles calling that method for us. But before Ruby can call an instance method, it needs an instance, and that’s where allocate comes in. It just makes an instance of the class.

And you’re allowed to use it in your Ruby code, if you want to.

(Hat tip to John Crepezzi whose blog post explains this really well)

If you do, you get back a normal instance of your class in every way, except that the initialize method hasn’t run.

You can even call your own initialize method if you want to:

def get_dog
  dog = Dog.allocate
  dog.send(:initialize, "Milo")
  dog
end

We have to use send because initialize is private. Well, unless we change that:

class Dog
  attr_reader :name

  public def initialize(name)
    @name = name or raise ArgumentError
  end
end

def get_dog
  dog = Dog.allocate
  dog.initialize("Milo")
  dog
end

Sooooo where does that leave us?

when we have an instance of Dog, it’s a good dog

Basically: 🤷‍♂️.

That’s the bottom. That’s as far as I know how to go. Maybe there’s more. Please don’t tell me.


I want to emphasize: this is not a criticism of Ruby. I’m only faux-alarmed. Ruby is a springy ball of dough. It’s whatever you want it to be. All of these features are sharp knives you can use or abuse.

As I’ve been learning another language which feels much less pliant, I’ve started to notice things about Ruby that never occurred to me before. When I write Rust, I take some pleasure and comfort from the rigid rules. It’s more possible to use words like “guarantee” and “safety” in Rust-land.

But Ruby keeps you on your toes.