Archive for March 2, 2018

Friday, March 2, 2018

Amazon Is Complicit With Counterfeiting

Casey Hopkins:

This is exactly what has happened to us. Our popular product The Anchor, the first under desk headphone mount, with 1500+ reviews, has been getting flooded with counterfeits. The current counterfeit seller, suiningdonghanjiaju Co Ltd (yeah they sound legit), has been on there for the past 5 days and taken all the sales.

They literally reverse engineered it, made steel compression molds, made the logo wrong, used fake 3M adhesive that’s very thin and was diecut smaller than the top (measure once, cut twice), they use a lower durometer silicone so it flexes more, its has huge mold parting lines, and the packaging is literally photocopied then reprinted (you can tell by the lack of image contrast). And they had to apply a big sticker to cover our SKU with theirs. But to the untrained eye, it would pass. Can’t wait for the negative reviews to come…

This is not a cloned product with its own listing on Amazon. Rather, the counterfeiter is listed as a seller on Elevation Lab’s own product page.

There is something extremely simple Amazon could do about it. If you have a registered brand in the Brand Registry and don’t sell the product wholesale - there could be one box to check for that. And anyone else would have to get approval or high vetting to sell the product, especially if they are sending large quantities to FBA. I imagine there are some algorithmic solutions that could catch most of it too. And it wouldn’t hurt to increase the size of the Brand Registry team so they can do their work faster.

Previously: Sellers Printing Counterfeit Books and Selling Under Amazon’s Brand, Amazon Selling Fake Apple Chargers and Cables, Amazon’s Chinese Counterfeit Problem Is Getting Worse.

Update (2018-03-05): See also: 9to5Mac, BuzzFeed.

iOS Uses CFBundleName to Differentiate Apps

Kasuist (via Peter Steinberger):

To keep this service affordable to small businesses, we have a white label application that can be themed to their specifications. So everything is built from a single project.

Recently it got to the point where some customers would have a few of our apps installed.

We started getting tickets from users telling us that an app of ours was only working on WiFi. It took us a while to figure out what was actually going on.

[…]

Rather than using an apps unique BundleID to differentiate between applications, Apple is using BundleName instead. You can install any number of apps with the same BundleName on the same device as you like.

This means that should you turn mobile data off for one of these apps, the others will also be affected.

Felix Krause:

I’m gonna use the same CFBundleName as Safari, always have mobile data access

Ignacio Enriquez G:

Same problem with TouchID, install app 1 and app2 with same name and touch ID will always fail for app1. I don’t know who had this brilliant idea of using the bundle name instead of the bundle id.

Previously: Apple Narrows Ban on Templated Apps.

Working at Google

Michael Lynch (via Stephanie Hurlburt, Hacker News):

The pipeline didn’t record many metrics. The ones it did have made it look like things had gotten worse. My bug discoveries caused the overall bug count to increase. The pipeline’s failures increased because I made it fail fast on anomalies instead of silently passing along bad data. I drastically reduced the time developers spent repairing those failures, but there were no metrics that tracked developer time.

My other work didn’t look so good on paper either. On several occasions, I put my projects on hold for weeks or even months at a time to help a teammate whose launch was at risk. It was the right decision for the team, but it looked unimpressive in a promo packet. To the promotion committee, my teammate’s project was the big, important work that demanded coordination from multiple developers. If they hornswoggled me into helping them, it’s evidence of their strong leadership qualities. I was just the mindless peon whose work was so irrelevant that it could be pre-empted at a moment’s notice.

[…]

I adopted a new strategy. Before starting any task, I asked myself whether it would help my case for promotion. If the answer was no, I didn’t do it.

My quality bar for code dropped from, “Will we be able to maintain this for the next 5 years?” to, “Can this last until I’m promoted?” I didn’t file or fix any bugs unless they risked my project’s launch. I wriggled out of all responsibilities for maintenance work.

See also: The Econ 101 Management Method, Sins of Commissions.

Searching for Paid Apps

Andrew Abernathy:

I hate that when searching on the iOS App Store I can filter out the paid apps, but I can’t filter out the free options. For lots of searches, the free results are crap. Show me the apps that are actually worth some money.

C String Functions in Swift: a malloc’y Story

Helge Heß (tweet):

The pointer you get back points into a buffer, which doesn’t exist anymore. That is why you need to be super careful when accessing C APIs.

[…]

Why does this [Objective-C] rarely result in an allocation? In the case above the NSString is an NSConstantString which is already backed by an UTF-8 string, and as mentioned above, a lot of NSString’s are backed by UTF-8.

[…]

I was incorrectly assuming that Swift would create the static String in a way that is backed by an UTF-8 buffer, including the terminating 0 (because that byte is negligable). And more importantly, that the compiler would directly pass over the pointer to that cString buffer. […] When using C API with Swift Strings (be it a simple puts or maybe libxml2), be aware that such calls are really expensive (a malloc+free per call).