Archive for December 23, 2020

Wednesday, December 23, 2020

How Amazon Wins

Dana Mattioli:

No competitor is too small to draw Amazon’s sights. It cloned a line of camera tripods that a small outside company sold on Amazon’s site, hurting the vendor’s sales so badly it is now a fraction of its original size, the little firm’s owner said. Amazon said it didn’t violate the company’s intellectual-property rights.

Via Dave Mark:

The article goes on and on, but you get the idea. The sense here is that Amazon wants to replicate every product it sells, discarding partnerships once they have their own version of that partner’s product.

Update (2021-01-01): Jon Stokes:

It’s worth nothing that Amazon has lied under oath about this business of copying sellers & crushing them.

Boris Mann (tweet):

I know there are well meaning open source folks at Amazon. I use Amazon for infrastructure. I think AWS has amazing operators.

But your actions and culture are actively damaging. If you only listen to the law, rather than ethics, courtesy, and a spirit of partnership, we will evolve licenses that force you to behave.


Cellebrite and Signal

Bruce Schneier:

Cellebrite announced that it can break Signal. (Note that the company has heavily edited its blog post, but the original — with lots of technical details — was saved by the Wayback Machine.)

Moxie Marlinspike (Hacker News):

Last week, Cellebrite posted a pretty embarrassing (for them) technical article to their blog documenting the “advanced techniques” they use to parse Signal on an Android device they physically have with the screen unlocked.

This is a situation where someone is holding an unlocked phone in their hands and could simply open the app to look at the messages in it. Their post was about doing the same thing programmatically (which is equally simple), but they wrote an entire article about the “challenges” they overcame, and concluded that “…it required extensive research on many different fronts to create new capabilities from scratch.”

self in a Swift Self-executing Anonymous Closure

Jesse Squires:

Conclusion: self was just nil the whole time! What a goofy mistake! […] However, that was not the case. Specifically, self was not nil. Not only that, but self wasn’t the self I expected.


Second, why is self an instance of (MyTableCell) -> () -> MyTableCell and not () -> UIButton?


If you declare button as lazy var instead of let, then the expected behavior occurs. That is, self is an instance of MyTableCell within the self-executing anonymous closure and the call to addTarget(_:, action:, for:) works.


The type of self resolving to (MyTableCell) -> () -> MyTableCell is the unfortunate result of the NSObject instance method -[NSObject self] and Swift’s curried functions.


Correcting the expression self (without backticks) to reference the enclosing type introduces another interesting question: what should be order of operations during initialization? When using let, the property is initialized before the enclosing type. When using lazy var, the property is initialized after the enclosing type. I am not a compiler expert, so I will not attempt to answer which is better. But if initialization order cannot be changed in the compiler to fix this, then I think the expected behavior would be to produce the same error as non-NSObject classes: “Cannot find ‘self’ in scope”.

Previously: Pricing Changes

Mark Fletcher:

I mentioned a year ago that I was considering changing to a per-member based pricing scheme for new groups. This would align our revenue with our costs; the larger the group, the more it costs us to host. It’s also industry standard.

For groups upgraded after Monday, January 18th, 2021 at 9am Pacific Time, the pricing plans will be based on the number of members in the group. The base costs of the different existing plans are not changing. The change is that above a certain number of members, the per member pricing kicks in.

It’s still free for up to 100 members.


The Big Sur Sneeze

Brent Simmons (tweet):

As I’m using my 2019 16" MBP, it lets out, at some random moment, a startlingly aggressive “Fehhhhh,” and then it shuts down.

It sounds as if the fan goes to 11 for about a second, and then it turns silent and dark.

Update (2021-01-01): Ken Harris:

If “big sigh” means it gets really slow, then the display partially turns to random noise, and it goes black, and dumps me back at the log-in screen after a minute, then yes. Seems to be a #macOS Catalina issue here.

Update (2021-02-09): This just happened to me. A minute or so after waking my 2019 16" MacBook Pro running macOS 11.2, it made a surprisingly loud sound and went black.

Update (2022-02-16): Jesse Squires:

Suddenly the MacBook display turns off, the fans turn on full blast for a couple seconds (they are louder than compiling the largest Xcode project you can think of), and then the machine shuts down completely. I’m calling it the “sigh of death” because it’s as if the machine is simply giving up and exhaling in an exasperated, dramatic sigh of defeat — like an exaggerated cartoon character would do. It has happened to me 3-4 times within the past few weeks.