A book review the algorithm-centric nazi bastards at Amazon rejected

I finally terminated my Prime membership … the last straw was the heavy-handed and arrogant non-support at Amazon.

I’ve posted 69 prior reviews.

Tried to post the following review of an outstanding new novel I purchased on Amazon, which review Amazon rejected. Their chat support claimed it was a technical error that would be fixed, but the next day I got an email saying “Amazon is unable to post the customer review because some of the details of this account indicate a relationship to sellers, publishers, or other reviewers of the product.” I asked for specifics, heard nothing back.

Heavy-handed and authoritarian.

My review of “Deep River” by Karl Marlantes:

Move over, Michener.

I can only make time to read a couple novels a year, but my interest piqued by the favorable WSJ review, I downloaded this to my Kindle before a trip and was amply rewarded.

This beautifully crafted saga is an epic view of the melting pot that was America during the tumultuous early 20th century… families compelled to leave their ancestral homeland, and how in the process of making America their new home they made America so much more than the sum of its parts.

Marlantes’ writing is a joy to read, richly nuanced characters and historical detail, punctuated with gem-like aphorisms such as “Aino’s first impression of America was elbows and noise.”



Canceled Consumer Reports Because of TrueCar

The current Consumer Reports “member pricing” offer for buying cars is bullshit… eg, TrueCar.

The first thing they ask is your phone number. And notice there is literally NO explanation of what they will do with your phone number, or what the overall process is. Unless of course you want to wade through pages of legalese in their privacy and terms of service pages.

Let me simplify it… they’ll give your number to dealers, including out of state dealers, including dealers who do not have the make/model you want, who are free to hound you via phone. According to multiple online complaints about TrueCar.

Shame on you Consumer Reports, and Goodbye, after decades of my support.

OWC: “own it” when you ship a broken item

I have two OWC thunderbolt external drive units sitting next to my Mac. But they will never be joined by any more OWC products.

I believe that when  company ships a defective product that they are nuts not to bend over backwards to “right” the problem, immediately, and without asking their customer to “loan” them more money while the replacement and return are being sorted.

I ordered an OWC Aura Pro X upgrade SSD kit for a Macbook Pro late 2013. It arrive on time, but an incidental item was damaged upon receipt (an external case that lets the original SSD be used as an extra external drive had a LED broken off and rattling loose inside the case).

Took photos. Called OWC. Offered to send them the photos. Within 10 minutes of the item begin delivered.

OWC was “very sorry” but flatly refused to put a replacement case in the mail until either I returned the bad one, or prepayed for the replacement to get a credit later. They said they could not ship a case “for free”.

Free?  They had my money. I had a broken case. There’s nothing “free” about that.

So at that moment in time OWC did have 100% of their money, but I did not have 100% of what I paid for.

So the notion that it was my problem to eliminate their perceived risk that I might fail to return a case that costs them maybe $20 to make one seems ridiculously short-sighted.

But so be it. Entire $400 order was returned with an RMA the same day for what I expect to be a full refund.

Macbook Pro 2013/Sierra as fast as Macbook Pro 2018/Mohave for Rspec/Docker/Rails Dev

TLDR; An old 2013 2.3GHz quad core Macbook Pro 15″ w/ 16GB running Sierra (10.12) is as fast as a 2018 2.6GHz 6 core Macbook Pro 15″ w/32 GB under Mohave (10.14). A Mac Mini 2018 (32gb) running Mohave is 21% faster than both.

My trusty 2013 15″ MBP has been a reliable workhorse for a  range of development tasks, but as we have moved to using Docker in our dev environment, but with only 4 cores, 16GB, and a 500GB SSD,  I considered both the 2018 Mac Mini and an Apple-refurbished 2018 MBP, both with 32GB RAM, faster processors, and 1TB internal SSD.

Admittedly, I had visions harkening back to 1984 when, as a grad student/developer, I hocked the farm to get one of the first IBM “AT” computers to hit Palo Alto, and watched the compile times for my educational app plummet from 20 minutes to about 4 minutes.

I even convinced myself I could tolerate the MBP touchbar / trackpad / keyboard since the vast majority of the time I’m at a desk using an external keyboard and trackpad.

But I was disapppointed how modest the performance gains (if any) were.

Unfortunately, the new Mac hardware under the new Mac OS is not a compelling value proposition.

When the 2013 MBP is running Sierra, and the 2018 Macs are running Mohave:
Mini2018: 5:02,  MBP2018: 6:07, MBP2013: 6:13

When the older 2013 Macbook is upgraded to Mohave, the 2018MBP is 17% faster than the 2013 MBP. (But no escape key.)

So apples-to-apples-to-apples under Mohave, the Rspec runtimes are:
Mini2018: 5:02,  MBP2018: 6:07, MBP2013: 7:20

Test setup: A suite of about 800 RSpec examples running in Docker Desktop v for Mac… a web container with a Heroku-16 stack for a Rails 4.2.10 app with ruby 2.4.5, and a database container with Postgres 10.5. Tests were run 3 times on each platform and the times averaged. (Docker preferences set to 2 cores, 4GB RAM, 1 GB swap)

Verdict: the Mac Mini and the 2018 MBP both go back to the Apple Store tomorrow within Apple’s generous 14 day return window.

Fortunately, while I do need an 1TB internal SSD drive for the 2013 MBP, Apple did not completely future-proof the 2013 MBP and the internal SSD can be replaced.

Just don’t even think about buying a Fitbit Versa

Or at least, buy it from Costco, and try to remove / replace the band before leaving the parking lot, so you don’t have to make an extra trip to return it… because you WILL return it.

Google “fitbit versa band problems”.

Seriously, worst wristwatch band in history. Tiny little bend/breakable pins and a bizarrely difficult ‘push down to release band’ pin that can’t be reached because the band is in the way.

(Oh yeah, still no calendar… “so-Called-Smart” watch with no calendar. Still does not allow you to change the volume on some devices like Apple AirPods when listening to music.)

HemmorrAndroids even more painful than IOS

Daughter called from a borrowed phone because her Samsung Galaxy S9 bricked itself during a routine update. So she gets to drive an hour to the nearest place that can re-flash her Android ROM.

Yes, apparently that shit still happens in Android-land.

Now don’t get me wrong, I despise IOS since IOS 9. And Apple’s jack-booted-thugs killing the ability to install older versions of IOS that actually worked. Especially because Apple software quality has gone right into the shitter.

But I guess Apple can get away with it as long as Google/Android continues to suck so bad.

Making Heroku CI (almost) as fast as running Rspec locally

Once Heroku support showed us how to specify the Postgres version for in-dyno Postgres in our app.json we re-ran our Rspec rspecs and were pleasantly surprised how fast they ran. (Specifying Postgres 9.6 seems to be required for Rspec for a Rails 4.2.11 app; using the default Postgres 10 causes errors related to the change of the increment_by field in P 10)

 Mac OS XHeroku CI "M" dynoHeroku CI "M" dyno
IN-DYNO postgres
Heroku CI "L" dynoHeroku CI "L" dyno
IN-DYNO postgres
Dyno cost/hour$0.34$0.34$0.68$0.68
Run Time5:5359:0013:27 !!!31:438:03 !!!
Heroku cost$ 0.34$ 0.08$0.36$0.09

The “trick” to specifying the Postgres version for in-dyno Postgres is to use an environment variable. If this is documented anywhere we could not find it, so perhaps this will be helpful to someone else:

In order to change the Postgres version for the in-dyno add-on you’ll need to create a new environment variable in your app.json like this:
  “environments”: {
    “test”: {
      “addons”: [“heroku-postgresql:in-dyno”],
      “env”: {
          “value”: “9.6”



Heroku Deploys via Github are not faster than using git push

While we did not expect to see any difference, we did confirm that our 10 minute deploys to a Heroku staging server typically take the same amount of time whether we use the old git push vs Github integration.

We did not test whether a deploy with significant new data (a ton of new images added to the repo for example) was materially faster from Github.

Heroku CI is remarkably slow, but half as slow if you use the largest dyno type

UPDATE: using in-dyno postgres puts Heroku CI on par with running Rspec locally!

Experimenting with using Heroku CI for a Rails app, we were a little surprised just how slow Rspec specs run.

As you can see however the runtime cost is about the same since the largest dyno performance-l costs twice as much as the default dyno used by Heroku CI.

Unfortunately, we cannot test using in-dyno Postgres since Heroku does not seem to offer a way to specify the Postgres version for in-dyno instances.

 Mac OS XHeroku CI "M" dynoHeroku CI "L" dyno
Dyno cost/hour$0.34$0.68
Run Time5:5359:0031:43
Heroku cost$ 0.34$0.36

Next Step: If we can get parallel tests to run, it will be interesting to see if the overall runtime (and cost) remains constant so we can shorten the test to say 2 minutes by running 16 dynos.

If so that may be GREAT news for using Heroku CI vs Travis CI or Circle CI, whose fixed monthly cost is HUGE for even a few concurrent instances.