I Live in Pittsburgh Now! by Joel Goodman

kosciusko_way.jpg

Lately, there have been some pretty massive changes in my family's lives. A few months ago, I found myself unhappy and unfulfilled at my job, and Bay Area life in general was becoming a slog to both my wife and me. So I decided to look around at what the job market elsewhere looked like. I threw my hat into a few different rings and ended up landing a really interesting job with an amazing company in Pittsburgh, Pennsylvania.

So on May 19th, I dropped my wife and son off at SFO and started driving towards Pittsburgh in my beloved 2005 Mazda 3i. We had looked into shipping the car, but in the end I liked the idea of a solo drive across the country. I had never been on a really long road trip by myself before, and there was no better opportunity to do one than this.

The plan was to go from Oakland, CA to Pittsburgh, PA in four days, but I hit an insane hail storm in the mountains of Nevada that resulted in a minor accident. When the accident happened, I was completely convinced that my car had been totaled and that it was undriveable. To my utter amazement, the damage appeared mostly cosmetic and I was able to drive the car to where I was staying in Wendover, UT. On the way there, I noticed that the steering wheel was about 10 degrees off and the car pulled very hard to the right when merging. Assuming the worst, images of bent shocks and control arms started dancing through my head. However, I got off easy. A mechanic in Wendover confirmed that all I needed was an alignment and after an extra day at the Motel 6 I was back in business.

The rest of the trip was pretty uneventful, except for a speeding ticket in Wyoming (I was going 35 in a 30) and tying up the exit line at the Indiana Turnpike for 10 minutes (I swear I didn't get a ticket on my way in!) I had my dash cam running in time lapse mode the whole time, and you can see the entire trip in all its glory in the video embedded below.

As for Pittsburgh, we absolutely love it so far. The people are really nice, there is LOTS to do, the food is great, and it is by far the most unique looking place I have ever been. There is no way you would ever confuse another city for Pittsburgh. It has usually taken us a few weeks to get adjusted to life in a new place, but Pittsburgh already feels like home to us. The Bay Area was good to us, but the decision to leave and come here is one of the best that my wife and I ever made.

That's about all I have to say for now. I expect I'll have more to say as we continue to settle in. Until then, cheers!

Multiple Inheritance and the Dreaded Diamond by Joel Goodman

I make no secret of the fact that I love OOP. It allows us to make our code reusable and in doing so shrinks and simplifies our codebases, and it pairs well with other paradigms like FP to help us make our code more expressive. And it's impossible to deny the fact that there is a sort of objective (pun intended) beauty to the idea that we can represent the real world and the things in it with OOP.

OOP is powerful, and powerful things can get you in trouble. I was recently having a discussion with another engineer and the diamond problem came up, which is an issue that arises from an abuse of OOP. This abuse is known as multiple inheritance, and it is the root of all evil.

The Problem

Imagine we have a class A:

class A
{
public:
  auto foo() const -> void
  {
    std::cout << "A " << __func__ << std::endl;
  }

  A()
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }
};

Now let's say we have two more classes, B and C, which are both As.

class B : public A
{};

class C : public A
{};

Now let's imagine we have yet another class called D, which is both a B and a C.

class D : public B, public C
{};

Now let's write a main() that creates a D and calls foo().

auto main() -> int
{
  D d;
  d.foo();
}

When we attempt to compile this, we'll get an error that looks a little like this:

error: non-static member 'foo' found in multiple base-class
      subobjects of type 'A':
    class D -> class B -> class A
    class D -> class C -> class A
    d.foo();
      ^
note: member found by ambiguous name lookup
  auto foo() const -> void
       ^
1 error generated.

...and we have an abiguity. The compiler doesn't know if we're asking for a B::foo() or a C::foo(). This is a problem. How can we avoid this?

The Solution

Well, one way is to specify which foo() you want. It feels clunky, but if we rewrite main() to look like this

auto main() -> int
{
  D d;
  d.B::foo();
  b.C::foo();
}

we get this output:

Constructing A
Constructing A
A foo
A foo

If we're really explicit about which foo() we want, we can pull it off. But this just feels... wrong. Plus, the output of the program highlights another problem, that each D gets two As, one for its B and one for its C, and the contents of each A is identical. This is the root of the problem. If we had only one A, the abiguity would be resolved.

The answer is to make B and C public virtual As. By using virtual inheritance, we allow the compiler to create a vtable with just a single field for A::foo(), and guarantee the construction of just one A for every D we instantiate. We don't even need to make A::foo() a virtual function. So B and C look like this now:

class B : public virtual A
{};

class C : public virtual A
{};

This minor change makes all the difference in the world. We can now just call d.foo() directly.

auto main() -> int
{
  D d;
  d.foo();
}

The code above yeilds the following:

Constructing A
A foo

So now we have one A and thus just one foo(). Nice! But what if A has some data that we need to initialize it with?

class A
{
public:
  const std::string name;

  virtual auto foo() const -> void
  {
    std::cout << "A " << __func__ << std::endl;
  }

  A(const std::string new_name="NONE") : name{new_name}
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }

};

In this case all we need to do is initialize it with D, since A() has a default value set for new_name.

class D : public B, public C
{
public:

  D(const std::string new_name) : A(new_name)
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }

};

So this:

auto main() -> int
{
  D d("Jojo");

  std::cout << d.name << std::endl;
  std::cout << d.B::name << std::endl;
  std::cout << d.C::name << std::endl;

}

Yeilds this:

Constructing A
Constructing D
Jojo
Jojo
Jojo

As you can see, the B and C that belong to d got the same name. If there isn't a default constructor for A, things get more complicated. But only slightly, as you'll see below. The classes below are subtly changed to compensate for the fact that A can't be default initialized.

class A
{
public:
  const std::string name;

  virtual auto foo() const -> void
  {
    std::cout << "A " << __func__ << std::endl;
  }

  A(const std::string new_name) : name{new_name}
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }

};

class B : public virtual A
{
public:
  B(const std::string new_name="") : A(new_name)
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }
};

class C : public virtual A
{
public:
  C(const std::string new_name="") : A(new_name)
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }
};

class D : public B, public C
{
public:

  D(const std::string new_name) : A(new_name), B(), C()
  {
    std::cout << "Constructing " << __func__ << std::endl;
  }
};

And the main() below is the same as last time.

auto main() -> int
{
  D d("Jojo");

  std::cout << d.name << std::endl;
  std::cout << d.B::name << std::endl;
  std::cout << d.C::name << std::endl;

}

And the output is similar.

Constructing A
Constructing B
Constructing C
Constructing D
Jojo
Jojo
Jojo

Really, when it comes down to it it's best to just give A some kind of default initialization.

Conclusion

Virtual inheritance is very useful for preventing an awful problem that could also be prevented by favoring composition over inheritance, which I might write up a little blurb on at some point in the near future. And the virtual keyword and its various uses are super intersting, which also make it tempting to write about.

That's all! Hope someone finds this useful!

In Memory of Olive Rose, 2007 - 2020 by Joel Goodman

OliveTheDog.jpg

A couple days ago we said goodbye to our best friend and constant companion of 13 years. She passed away peacefully at home in the company of her family that she loved so much.

Olive was loved by everyone she met, always known for her desire to kiss everyone in sight. But of course, she was extra special to Dede and me. She was there for all of the moves and life changes, and she always had the same smile and happy demeanor. Whether we wanted to go on a 10 mile hike or spend all day in bed, Olive was happy to do either as long as it meant doing it with us . When things were wild and unpredictable, we always knew that we could turn to Olive for some comfort and love.

When Isaac came home, she took to him right away and helped us take care of our boy. I remember a rep from a very large industrial robot company once gave me an unsolicited warning that I should never let my pit bull around my infant son lest she maul him to death, and Olive proved him wrong every single day of the ten months that she and Ike had together. She adored and doted over him incessantly. Watching the relationship between my boy and my dog blossom was one of the best things about fatherhood so far.

I'm not sure what else to say except that it feels like we will miss her forever. But as painful as it is to lose her, we are taking comfort in the fact that she will no longer be bothered by tumors, she won't have to endure constant pain in her bones and joints, and she won't have to live with liver ailments. She can be at peace now.

Good girl, Olive!

OliveBeach.jpg

Movies! The Best of A24 (2019 Edition) by Joel Goodman

It was a banner year for the best production and distribution company in film, A24. It seems like everything they released was pure gold, but I unfortunately didn’t get to catch all of it. 2019 (and especially the last half of the year) was absolutely bonkers for me and my family, and I had to carefully choose what movies I watched because free time was so scant. Whenever I could, I chose the movies that were best received by critics I like and trust, and the lion’s share of those films were A24. I’ve talked about a few others already, but I’ve saved the best for last. Here are my 3 favorite A24 film of 2019. Cheers!


The Lighthouse.jpg

The Lighthouse

8.95/10.0

A "Hell is Other People" movie that takes place at, you guessed it, a lighthouse. It sort of functions as a better, more stylish and surreal version of The Vanishing. Robert Pattinson and Willem Dafoe star, and I think it's Dafoe's best work. But the real star of the show is the cinematography. It's shot in inky black and shades of silver, with night scenes lit so perfectly with pools of candlelight that it almost distracts you from the story. The 1.19:1 aspect ratio is a great choice, as well. Really makes the experience that much more claustrophobic. From Robert Eggers, who wowed us all a few years back with The Witch, or The VVitch if you prefer.


Midsommar

8.5/10.0

Ari Aster is back with another story of family tragedy disguised as a horror film. This time around we have a young woman that takes a trip to a Swedish commune with a group of friends following an event that leaves her as the sole survivor of her immediate family. Of course, things are not as they initially seem and things go very bloody, very quickly as relations between the commune and their visitors sour. While not as strong as Aster's previous film, Hereditary, which was a defining moment in modern horror, there is plenty to like about Midsommar. It's well shot and directed, and almost constant daylight provides an interesting backdrop to the happenings on screen. Highly recommended.

Midsommar.jpg

UncutGems.jpg

Uncut Gems

9.15/10.0

My pick for the best film of 2019. From the Safdie brothers, who previously gave us the pleasantly surprising Good Time. Adam Sandler plays a gambling addicted jeweler that constantly makes the wrong decisions and winds up in a terrible situation involving Kevin Garnett (who plays himself) and a rare uncut black opal. Uncut Gems is a singular accomplishment that everyone should see. This movie made me feel like I was on the verge of a panic attack for the entirety of its running time. It's very strange that I'm typing these words, but here it goes: Adam Sandler was robbed and he deserved the Academy Award for best actor. This is a truly great film that I believe will come to be thought of as one of the great suspense films of all time. Yes, it is that good. I get the feeling I will rewatch this frequently.


Collatz Conjecture by Joel Goodman

Ah, nothing like the classics! For the ininitiated, the Collatz conjecture says this:

Start with any positive integer n. Then each term is obtained from the previous term as follows:

  • If the previous term is even, the next term is one half the previous term.
  • If the previous term is odd, the next term is 3 times the previous term plus 1.

The conjecture is that no matter what value of n, the sequence will always reach 1.

Now, if you read my last two posts, you may be of the impression that I throw recursion at everything. This post probably doesn't help that impression, so you'll have to take me at my word when I tell you that I have an equal appreciation for iteration. And where Collatz is concerned, recursion is terrible when n gets large and that vector blows up. That said, this is my recursive implementation that proves Collatz in C++.

auto collatz(const int n) -> std::vector<int>
{
  /* Validate input */
  if(n <= 1)
    return std::vector<int>();
  std::vector<int> out{n};
  return collatz(out);
}

auto collatz(std::vector<int>& out) -> std::vector<int>
{
  auto const this_n {out.back()};
  if(this_n == 1)
    return out;
  else if(this_n%2)
    out.push_back((this_n * 3) + 1);
  else
    out.push_back(this_n/2);
  return collatz(out);
}

I have the function overloaded to make it callable with just an integer (this is how the user would use it), but also with a vector if ints so it can fill the vector one entry at a time, one function call at a time.

main() looks like this:

auto main(int argc, char** argv) -> int
{
  int original_n{atoi(argv[1])};

  std::vector<int> result {collatz(original_n)};

  std::cout << "Result: [ ";
  for(const auto& it : result)
    std::cout << it << " ";
  std::cout << "]" << std::endl;

  return EXIT_SUCCESS;
}

When called with ./collatz.o 25, the output is as follows:

Result: [ 25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 ]

Pretty nice, huh? I remember doing this for the first time in MATLAB back in college, and I think it might have been the first time I actually attempted to apply programming to a problem that I was actually curious about. Nowadays, I get to do that for a living, which is something that I'm very grateful for.

Cheers!

More Recursive BubbleSort by Joel Goodman

After I made that last post about my recursive bubble sort, a simple optimization occurred to me that would likely improve the speed of the algorithm.

template<typename T>
auto recursiveBubbleSort(T arr[], const int size, int pos=0, int count=0) -> void
{
  if(size <= 1) return;

  auto left {&arr[pos]};
  auto right {&arr[++pos]};

  if(*right < *left)
  {
    auto temp {*right};
    *right = *left;
    *left = temp;
  }

  if(&arr[pos] != &arr[size - 1 - count])
    recursiveBubbleSort(arr, size, pos, count);
  else if(count != (size - 2))
  {
    ++count;
    recursiveBubbleSort(arr, size, 0, count);
  }
  else
  {
    return;
  }
}

This actually makes it much closer to the iterative version, in that it takes into acount that the numbers at the end of the array are already sorted, and we needn't sort them again. Hard to believe I missed this detail! With the count variable comes in, the speed improves by about 2 times. Still not the best, or even close to std::sort(), but it's a fun exercise anyway.

BubbleSort, Recursion, and Iterators! Oh My! by Joel Goodman

Image courtesy of wikipedia user crashmatrix.

Image courtesy of wikipedia user crashmatrix.

So I got curious this morning about a way you could write a recursive bubble sort algorithm. As in, a version of bubble sort that uses absolutely no looping constructs at all. After all, who needs loops anyway? You wanna know how many loops are in the Wizard Book? None!

In any event, recursion is apparently a fairly common strategy for implementing this algo among CS students, but I studied Mechanical Engineering and although I write C++ for a living now (and recursion is the method I prefer from an aesthetic perspective), somehow this particular exercise has escaped me. So I real quick whipped this bad boy up:

template<typename T>
auto recursiveBubbleSort(T arr[], const int size, int pos = 0, bool swapped = false) -> void
{
  if(size <= 1) return;

  auto left {&arr[pos]};
  auto right {&arr[++pos]};

  if(*right < *left)
  {
    auto temp {*right};
    *right = *left;
    *left = temp;
    swapped = true;
  }

  if(&arr[pos] != &arr[size - 1])
      recursiveBubbleSort(arr, size, pos, swapped);
  else if(swapped)
      recursiveBubbleSort(arr, size);
}

It’s a pretty standard bubble sort, but there are exactly ZERO loops. You'll notice that I introduced a flag to signal that two elements had been swapped in the array. If we reach the end of the array and no elements have been swapped, we're done. But if the flag is set high, we go for another trip through the array. I'm also passing the position of the current step in the algorithm. So there's more going on and it's certainly longer than an iterative bubble sort, but I will say that it feels clearer than an iterative bubble sort.

So how does this stack up against an iterative bubble sort? I wrote one so I could compare their execution times:

template<typename T>
auto IterativeBubbleSort(T arr[], const int size) -> void
{   
    for (auto i {0} ; i < (size - 1); ++i)
        for (auto j {0} ; j < (size - 1 - i); ++j)
            if (arr[j] > arr[j + 1])
            {
              auto temp {arr[j]};
              arr[j] = arr[j + 1];
              arr[j + 1] = temp;
            }
}

Yep, that’s a bubble sort alright. And it’s extremely iterative, nested loop and all. Before I move on, I decided to look at how someone else might write a recursive bubble sort algo, just to see if it had some obvious advantage over my own. This and this were the first two links that Google gives you when you look up “recursive bubble sort”, and they both more or less look like this:

template<typename T>
void kindaSortaRecursiveBubbleSort(T arr[], const int size) 
{ 
  if (size == 1) 
      return; 
  for (int i = 0; i < (size - 1); ++i)
  {
    if (arr[i] > arr[i + 1])
    {
      auto temp {arr[i]};
      arr[i] = arr[i + 1];
      arr[i + 1] = temp;
    }
  }
  kindaSortaRecursiveBubbleSort(arr, size - 1); 
}

I mean, it’s just kinda sorta recursive. It calls itself but it still uses a loop and is therefore also iterative, and I'm targeting a much stricter criteria here. I decided I’d time it’s execution along with the others to see if it was better or worse that my own, but first I wanted to write a template that would work with iterators.

99% of the time I need a container of some sort (and I’m writing something that isn’t going to live on a microcontroller) I use something from the STL, usually a std::vector. So it makes sense that I'd write something that would do the job on a container I might actually use. Here's what I came up with:

template<typename Iter>
auto bubbleSortWithIterators(const Iter start, const Iter end, Iter pos, bool swapped = false) -> void
{
  auto left = pos;
  auto right = ++pos;

  if(*right < *left)
  {
    auto temp = *pos;
    *right = *left;
    *left = temp;
    swapped = true;
  }

  if(pos != (end - 1))
    bubbleSortWithIterators(start, end, pos, swapped);
  else if(swapped)
    bubbleSortWithIterators(start, end, start);
}

It's literally the same thing as my recursiveBubbleSort(), but translated into the language of iterators.

At this point I had four versions of bubble sort to test. But to find out how useful my bubble sort is, I decided I should probably benchmark it against std::sort, which is the thing you really should use instead of writing your own. That call just looks like this:

std::sort(my_vector.begin(), my_vector.end());

In the end, I tested both bubbleSortWithIterators() and std::sort() with a std::vector<int> and a std::array<int, n>. I timed the execution of each 100,000 times, and these were the results:

Total Execution Time For n = 100000. [ms]
                             Recursive: 134
                             Iterative: 32
                 Kinda Sorta Recursive: 29
Recursive With Iterators (std::vector): 585
 Recursive With Iterators (std::array): 105
                std::sort(std::vector): 59
                 std::sort(std::array): 9
Done!
[Finished in 1.9s]

Running this same round of tests several times, the results were remarkably consistant. My recursive algo for raw arrays and my recursive algo for std::array were pretty much dead even, and when it comes to speed, both are trash. std::vector takes an eternity to sort with my recursive algo, and in fact std::sort() (the undisputed champ of this test) takes 6 times longer to sort a std::vector than a std::array. This is the price we pay for the convenience granted by std::vectors.

kindaSortaRecursiveBubbleSort() was actually dead even with iterativeBubbleSort() in every trial, which makes sense to me since both are Θ(n^2). Elsewhere in the world of time complexity, std::sort() is Θ(nlog(n)) and my recursive algo is probably something like Θ(2^n).

I think I'll stick to using std::sort(), but this was a fun way to spend a morning anyway.

Cheers!

RIP Vertigo by Joel Goodman

Vertigo-Comics-Logo.svg.png

Hooooo boy! It’s been a while since I posted anything here. As it turns out, being a new father and working 50 hour weeks as an engineer are activities that, when occurring concurrently, eat up a lot of time that would otherwise be spent doing other things. But things have stabilized a little and I’m working on a couple personal projects again. I am expanding more of my short movie reviews, and I’ve begun work on a couple interesting circuits that I hope to be able to put onto breadboards soon. I’m also eager to keep posting stuff here, so if you are one of the three or four people a week that actually look at this site, keep your eyes peeled.

Moving on, a big motivation for this particular blog entry is my desire to say a few words on the demise of Vertigo comics. The final single issues released under DC's “mature readers” imprint allegedly appeared in comic shops this month, although I didn’t see its logo anywhere on my FLCS’s shelves. What a shame for Vertigo to go out with such a whimper. DC's decision to shutter what is probably the best imprint in comics history is beyond my comprehension. Vertigo gave us the majority of the most important comics published in the 90s, 2000s, and 2010s, and even though the post-Berger era saw the imprint hit a low in terms of quality, it was far from beyond fixing. Apparently they're replacing Vertigo with some newfangled age rating system for their comics, and DC Black Label will likely host titles that would have otherwise been on Vertigo. But all that seems to miss the point of what Vertigo was really all about in the first place. It wasn’t about edgy content, or darker Batman stories or whatever, it was about elevating comics to a more mature place beyond what you usually see splashed in bright colors across comic book shelves. It was about comic books as literature, and there is nothing to take its place.

Oh well. Here's to the good times, Vertigo. You’ll be missed. Here’s to the inevitable half-hearted Vertigo reboot we’ll suffer through at some point in the next few years when DC realizes how bad they screwed up.

Darkthrone - The Hardship of the Scots (2019) by Joel Goodman

Darkthrone has been making music for almost as long as I’ve been alive, and they’ve dabbled in all kinds of heavy and extreme genres from Death Metal to Crust and of course, Black Metal. The records that Darkthrone released during their black metal era are maybe the most influential of any the genre has ever seen, and provided the soundtrack to the lives of nerds the world over.

Many years ago, back when I had free time (pre-college and pre-fatherhood), I would play board games twice a week in friends living rooms, and A Blaze in the Northern Sky, Under a Funeral Moon, Transilvanian Hunger, and Panzerfaust were permanent fixtures on the turntable while we were playing Descent, Mage Knight, Power Grid, or any other overpriced chunk of cardboard. Those records don’t see much action anymore, but they defined that period of my life.

Darkthrone have churned out a new slab of wax every two or three years since their first album in 1991, and whenever one comes out I make a point to find it and give it a serious listen. This time around, the boys have combined the fruits of their previous experiments in Heavy Metal, Crust, and Black Metal, and the results are very impressive. The album is called Old Star and it’s my favorite of theirs since Transilvanian Hunger. There are zero low points; all killer, no filler. I’ve posted this for your enjoyment. Do yourself a favor if you love heavy music and buy this record.

Movies! The Green Inferno, Under the Silver Lake, and The Inventor by Joel Goodman


The Green Inferno (2014)

2.40/10.0

 
green_inferno.jpg
 

Eli Roth has a problem. He, like Quentin Tarantino, grew up on grindhouse cinema and was inspired to emulate midnight movies in his own career. But unlike Tarantino, Roth doesn't do anything to elevate exploitation films. He instead takes the worst qualities in those movies and accentuates them while leaving out any nuance or charm, until the only thing left is an ugly emulation of what people who don't know a lot about movies think of when they hear the word "Grindhouse".

In the case of The Green Inferno, he has taken the worst movies of the 70's and 80's (Cannibal Holocaust, Cannibal Ferox, and all of their ilk) and reproduced all of their hallmark ugliness without making an attempt to do anything new and without putting an artistic spin on it. His attempts at humor fall completely flat (specifically the spider scene and the "munchies" scene), so what we have here is a joyless piece of trash. This is the worst horror film I've seen in recent years. I could not wait for it to end. I wish that Eli Roth, who is obviously cinematically literate, would put more thought and effort into his homages to vintage B movies.


Under The Silver Lake (2019)

8.45/10.0

Really interesting film about the sinister and unseen side of Hollywood. Also features subplots about secret codes and hidden meaning in pop culture, and also a plot thread about a dog killer that is almost certainly the main character. This film feels like David Lynch doing Hitchcock, like a psychedelic neo noir. This is one of the most unique and well executed films I've seen in a long time, but I was surprised to find that only half the people who have seen the movie agree with me. The other half seems to have loathed it. Go figure. The film careens from one weird set piece to the next in such a dizzying fashion that the gripes that critics had with this film are almost understandable, but they still miss the point. This movie deserved a wide release but was apparently so divisive that A24, which is normally much better at this kind of stuff, decided to just release it on VOD instead of putting it in art houses where it belonged. I would be remiss if I didn't mention the amazing score that makes this feel even more like a Hitchcock movie.

Silver Lake.jpg

The INventor.jpeg

The Inventor: Out for Blood in Silicon Valley

6.20/10.0

Entertaining documentary about a vapid grifter that somehow managed to liberate countless Silicon Valley VCs of their hard earned cash with promises of a product based on impossible science. Recently Elizabeth Holmes has been the subject of numerous books, podcasts, documentaries, and news magazine segments. This doc hits most of the points that all the other media concerning this woman does, and it's well made but feels like it lingers too much on some aspects of the story while leaving out some of the more important/interesting bits, such as Sonny's hostility towards dissent and Holmes' clearly fake-as-all-hell baritone affect. Worth watching if you have HBO.


Chromatics - Kill For Love (2012) by Joel Goodman

It’s hard to believe that it’s already been seven years since this record came out, but here we are. What’s most surprising about that is that this LP has aged extremely well for such a stylized product. There a timelessness to Chromatics that Johnny Jewel’s other projects doesn’t have going on, maybe because of the up-front presence of the guitar and drums, or the ethereal, instantly appealing vocals of Ruth Radlet. Chromatics are equally at home being played in your bedroom or living room as they are at a club, which is more than I can say for some other neo-italo disco groups.

This LP is still the group’s best work. The lone miss on this record is the needless, puzzling inclusion of a cover of Neil Young’s Into The Black. They choose to open the record with it, which is just weird. But that shouldn’t deter you from sticking it out, because the rest of Kill For Love is an amazing, cinematic experience that should be listened to from front to back, in one sitting, as loudly as possible.

Released by Jewel’s Italians Do It Better imprint, this is currently out of print in all physical formats, but the vinyl can be had for somewhat reasonable prices on Discogs.

Movie Snippets by Joel Goodman

In January of 2019, I started keeping a spreadsheet to track the movies I watch. I assign a rating from 0 to 10 (with 5 being the average, or expected value) and write a little snippet with some quick opinions on the film in question. Here, I’ll post a few of those snippets at a time for your enjoyment.


Good_Time.png

Good Time (2017)

7.20/10.0

I'll be honest and own up to the fact that even though I've never seen any of the Twilight movies, I've always just taken everyone's word about them and written them off entirely, up to and including the actors involved. After seeing this film, I must admit that I was wrong about Robert Pattinson. He's absolutely amazing in this tight little thriller about NYC, LSD, and a bank robbery gone awry. It’s because of this film that I’m not completely skeptical of his ability to do Batman justice. But I'm still never gonna watch a Twilight movie.


Action_Point.png

Action Point (2018)

3.95/10.0

Based on an actual NJ amusement park that was around in the 70s and 80s. The real life story that inspired the movie would have made for a great film in the right hands, but instead we get this Johnny Knoxville/Jackass vehicle. My biggest gripe is that I never felt like Action Point was a real place inhabited by real people. Instead we have what appears to be a random collection of props haphazardly arranged in a southern California backlot and characters pulled straight from an 80's ski movie (the nerd, the bully, the stoner, etc.) Someone else should take another crack at the story of Action Park because it’s amazing. In the mean time you can read the many accounts of what it was really like on the internet.


Dressed_to_kill.jpg

Dressed To Kill (1982)

8.35/10.0

De Palma's ode to the Italian Giallo movies of the 60's and 70's. This is a very good approximation of the genre, save the absence of the funk or prog rock soundtrack. It's insane, sleazy and undeniably fun even if it’s what we would probably call "problematic" in 2019. They just don't make them like this anymore because well, they can't make movies like this anymore. Nancy Allen was nominated for a Razzie, which feels weird because she's actually very good here. I like to consider this movie an unofficial companion piece to Body Double.

The Yellow Balloon - Yellow Balloon (1967) by Joel Goodman

The Yellow Balloon was a prefabricated sunshine pop band put together in 1967 by producer and songwriter Gary Zekley. This band is perhaps most famous for employing the drumming capabilities of Don Grady, better known for starring alongside Fred McMurray in My Three Sons. Determined to make it as a musician on his own merits, Grady went by aliases and donned wigs and dark glasses in an attempt to conceal his identity.

Perhaps the added notoriety could would’ve been a good thing, because The Yellow Balloon released just one record in their short life, an insanely catchy self-titled LP that quickly went out of print but was reissued by Sundazed in 1996. It looks like the vinyl isn’t offered anymore, but if you’re keen on CDs they still have ‘em. Otherwise, you can buy digital.

Interesting note: according to Wikipedia, Daryl Dragon from Captain and Tennille (and brother of Surf Punk Dennis Dragon) was also in this band at some point, presumably playing keys.

Movie Snippets by Joel Goodman

In January of 2019, I started keeping a spreadsheet to track the movies I watch. I assign a rating from 0 to 10 (with 5 being the average, or expected value) and write a little snippet with some quick opinions on the film in question. Here, I’ll post a few of those snippets at a time for your enjoyment.


Blood and Black Lace (1964)

7.95/10.0

The movie that invented the Giallo genre, black gloves and all. It also influenced every notable filmmaker (especially the Italian ones) for 50 years. Off-the-charts amazing photography and production design. Bava’s use of primary colors was way ahead of its time. What would Suspiria (1977) look like without Blood and Black Lace? Probably alot more like Suspiria (2018). Watch this movie however you can (it’s on Amazon Prime if you don’t want to buy the Blu Ray), but be prepared for a sub-optimal experience because a good transfer doesn't exist yet in the digital era. This movie is ready for a restoration.

Cameron Mitchell costars, which is hilarious.

Blood-and-black-lace.jpg

suspiria77.jpg

Suspiria (1977)

8.50/10.0

Critics and bloggers are always referring to this movie with some variation on the phrase "candy-colored nightmare", which is understandable since it’s just about the most apt description of Suspiria that I can think of. Argento's best movie (or is that Deep Red?) stars Jessica Harper in a role that she passed up the title role in Annie Hall for. Pretty crazy, right? Just chew on that for a second. Anyhow, the murder scene that opens this film up is one of the most over-the-top, brutal things ever committed to celluloid and sets the tone for the best Italian horror flick of the late 70's. This film is an atmospheric horror classic that drips with style (which makes up for the fairly thin story) and it must be seen by all genre afficianados. The "remake" from 2018 is also very good but very different to the point that it's almost unrelated. Trivia: Suspiria is the last film to be shot on Technicolor.


Suspiria (2018)

8.70/10.0

This isn’t a remake at all, more like a retooling. It hits some of the same beats as the 1977 classic and keeps the same setting, but the story is much more thoroughly fleshed out and Suzie’s role is very different. Additionally, Argento’s flashy primary colors have been traded for muted earthy tones and the rock score is replaced with something more moody and traditional.

None of this is bad in the least, in fact it’s an altogether better film than the original. Is it as memorable? Will it become a classic in the same way Argento’s movie did? The answer to both of those questions is no. What I can say is that there’s nothing else quite like it. Maybe it’s the first art house occult horror movie? Either way, it’s a great film.

suspiria18.jpg

FILMMAKER - Crepuscular (2018) by Joel Goodman

Pretty cool atmospheric post-punky electro from Colombia of all places. Filmmaker throws analog drum machines and synths, delay-drenched guitar, and 8-bit sounds all into a blender and what comes out is pretty fucking tasty. They have 7 releases to date, and they’re all available for a pittance on their bandcamp. Honestly, I would have felt good about posting any of their records (they’re all good) but I picked this one because the cover art (which I assume is done by the band themselves) reminds me of the NES game Shadowgate.

Movie Snippets by Joel Goodman

In January of 2019, I started keeping a spreadsheet to track the movies I watch. I assign a rating from 0 to 10 (with 5 being the average, or expected value) and write a little snippet with some quick opinions on the film in question. Here, I’ll post a few of those snippets at a time for your enjoyment.


Deadwood.jpg

Deadwood: The Movie (2019)

8.90/10.0

This marks the end of HBO's best series that isn't the Sopranos. Set ten years after the show's third and final season, this film ostensibly chronicles the assassination of Charlie Utter at the hands of George Hearst and all the drama that follows, but it's true raison d'être is to give us fans the closure we've been denied for the past 13 years. All the characters that were alive at the end of the show make an appearance and we get to see the conclusion to all of their stories. It lives up to the show's standard of excellence, but when the credits roll it's hard to shake the feeling that there should be another 10 or 11 episodes left to watch. Nevertheless, superb movie.


It (2017)

6.65/10.0

I recently watched this at home in my living room and it definitely wasn’t as fun as it was in the theater. That said, I must admit that this is a pretty entertaining flick, and much better than the TV miniseries from the 90s. "That scene" from the book was (mercifully) omitted. No really what I would call "high cinema", but it is never boring and the Swedish feller that plays Pennywise is really good.

It.jpg

The_Dirt.jpg

The Dirt (2019)

3.30/10.0

Based on the book of the same name, which is an oral history of Mötley Crüe. When the book came out, everyone I knew made the trip down to Powell's Books to pick it up and it's all everyone talked about for weeks. Sadly, nobody will do the same for the adaptation. This movie sucks. It's got the worst acting I've seen so far in 2019, perhaps with the exception of Gotti but it gets pretty close. Netflix could have put more money into this movie and gotten a better script and better actors but they didn't and the product shows it. It's not even that entertaining. At least Gotti was entertaining.

Hot Snakes - Jericho Sirens (2018) by Joel Goodman

This is a full stream of the Hot Snakes latest offering, courtesy of Sub Pop itself. There was quite a lot of excitement leading up to the release of this album and thankfully it didn’t disappoint. Hot Snakes’ records have gotten progressively better and better since releasing their first album Automatic Midnight in 2000, and with Jericho Sirens they have matched, if not improved upon their previous record (2004’s Audit in Progress.)

Standout tracks include Six Wave Hold Down, Psychoactive, and my favorite track (and maybe my favorite Hot Snakes song, period) Death Camp Fantasy.

MIttageisen - Neues China (1983) by Joel Goodman

This track opens the eighth volume of A Tribute to FlexiPop, which was a series of compilations released on CDr in the 2000’s that paid tribute to the 80s magazine that bundled each issue with a flexi disc loaded with awesome new wave and electro music. These tribute comps somehow made their way to record stores in Portland, where I was living at the time. I recall eagerly snatching up any volume I could find. My physical copies are lost to time but most of what was on them is easy to find on YouTube. I recently tried to track some of these discs down on Discogs, but they’re blocked for sale for some reason. It would be amazing to see a vinyl release of this stuff. In the mean time, YouTube will have to do.

Movie Snippets by Joel Goodman

In January of 2019, I started keeping a spreadsheet to track the movies I watch. I assign a rating from 0 to 10 (with 5 being the average, or expected value) and write a little snippet with some quick opinions on the film in question. Here, I’ll post a few of those snippets at a time for your enjoyment.


Gotti.jpg

Gotti (2018)

2.50/10.0

Hoo boy, now this is a really bad movie. Like, unbelievably bad. Imagine a garbage truck, loaded to capacity with soiled adult diapers, that has been set on fire and whose brakes have failed. This is the cinematic equivalent of that. Everything about it is bad, but the acting and script are the worst of the year. It's verges on, and at times crosses over into "so bad it's good" territory. It feels at times that this movie might be a prank on all of us; that the possibility exists that this is some kind of postmodern masterpiece that is really laughing at us even as we laugh at it. A hard movie to rate; this is either a 2.5 or a 9.5. I'll go with the former.


Black Rain (1989)

4.95/10.0

Just look at the poster. Look at it.

Michael Douglas's mullet stars in a dated police thriller-cum-fish out of water movie that actually has some very impressive cinematography and neat set pieces, but whose story is contrived and performances are just about a shallow as they come. Andy Garcia is especially flat. I mean, you hardly notice he's even there before he's beheaded and his death motivates everything Michael Douglas and his mullet do in the last half of the movie. Cocaine was definitely involved in every step of the process during the making this film. Bookended by two very, very bad 80's radio rock jams.

Black_Rain.jpg

Nightbreed.jpg

Nightbreed (1990)

8.65/10.0

I get funny looks when I tell people that this is one of my favorite movies, but I really think this is an amazing film. It’s a deeply misunderstood dark fantasy/horror masterpiece that has never quite gotten the respect it deserves. This is the best thing Clive Barker has ever done and he'll probably never match it. The 90s being what they were, the studio reportedly demanded Barker include a real slasher-style villain (played by none other than David Cronenberg!) and cut the film by something like 30 minutes. As it turns out, the former was a blessing in disguise and the latter was only temporary, as a director's cut was released in the 2010's after floating around on VHS bootlegs for nearly 20 years. Both cuts are great (although the longer cut is better by a mile), and this movie is a must-see.

The Lavender Flu - My Time (2016) and Vacuum Creature (2016) by Joel Goodman

Those of us lucky enough to have been in Portland in the early 2000’s have a lot to be grateful for. We had something of a renaissance going on there for a minute, with amazing bands like Fireballs of Freedom, The Exploding Hearts, Junior’s Gang, and The Hunches playing what seemed like every night at one of the many smoky and sticky-floored bars and clubs that made up Portland’s punk rock circuit. We had a little of everything from the punk and punk-adjacent spectrum of genres, from power pop to garage rock to New Wave and literally everything in between. And the best part was that is was all good. Every band seemed to be musically literate to a ridiculous degree, and capable of and willing to break new creative ground and take chances.

Perhaps no other band embodied that trail blazing spirit more than The Hunches, who put out three flawless LPs and a handful of 7”s in their all-too-brief tenure. The Hunches were always the best band on the bill, no matter who was playing. To me, the best memories of first five years of the new millennium will always include watching The Hunches play Dance Alone on the second floor of Billy Ray’s on a Friday night. After they split up, the four members of the Hunches spent the following years starting bands such as Phantom Lights, Sleeping Beauties, and the subject of this post, The Lavender Flu.

The Lavender Flu is the brainchild of guitarist and vacuum cleaner player Chris Gunn. It’s as interesting and listenable as you’d expect from the guy that wrote The Hunches music, and maybe even more varied than you’d think going in. Gunn covers all sorts of ground with his new band, from indie rock to kraut-rockish psychedelia, and somehow manages to make it all sound fairly cohesive. The debut double LP from this band was released in 2016, and I’m posting two songs off that here. The first is a Bo & The Weevils cover and the second is an experimental, spacey original that sounds like two different Eno songs played simultaneously.