Hacker News new | past | comments | ask | show | jobs | submit | hysan's favorites login


Arbitration consumer protection attorney here! Nice work, and nice write up.

If nothing else, I hope folks will run with your first point. Far too many people are scared of arbitration, and it can be a really powerful tool for situations like this. It’s fairly accessible and straightforward, especially for folks in the HN crowd.

One pointer for other folks in the future is to make sure you look into your state’s specific consumer protection law. (Sometimes called UDAP law or deceptive practices act.) Often times, these laws will allow you to recover more than just your out of pocket damages to punish companies that are deceptive.

One other way to “enlarge the pie” in situations like this is to hire an attorney. I know, it sounds like I’m shilling for my peers, but hear me out. This same UDAP consumer protection laws let you recover attorneys’ fees as part of a judgment/win. If you’re not an attorney, you simply can’t seek those.

So let’s say your claim is $2,000. Under those laws, maybe you can “treble” (triple) your damages if you win. So now your best day is $6,000. And the company knows it.

But if that same law says you can get attorneys’ fees too, the company knows that they could be facing a 50k+ judgment at the end (almost entirely comprising attorneys’ fees), and then that often incentivizes earlier, higher settlements. My involvement in cases, and the threat of attorneys’ fees often results in higher settlements than my client would get on their “best day,” and even after paying out my portion. (I typically do these on contingency — I don’t get paid unless you get paid).

Lastly, let’s just say I’ve done an arbitration or two with a home warranty company. They don’t make money by paying out claims!


Former Uber engineer/EM here: I worked on the Rider app.

The “there are only a few screens” is not true. The app works in 60+ countries, with features shipped in the app that often for a country, and - in rare cases - a city.

The app has thousands of scenarios. It speaks to good design that each user thinks the user is there to support their 5 use cases, not showing all the other use cases (that are often regional or just not relevant to the type if user - like business traveler use cases).

Uber builds and experiments with custom features all the time. An experimental screen built for London, UK would be part of the app. Multiply this by the 40-50 product teams building various features and experiments outside the core flows you are talking about (which core flows are slightly different per region as well).

I worked on payments, and this is what screens and components are in the Uber app:

- Credit cards (yes, this is only a a few screens)

- Apple Pay / Google Pay on respective platforms

- PayPal (SDK)

- Venmo (SDK)

- PayTM (15+ screens)

- Special screens for India credit cards and 2FA, EU credit cards and SCA, Brazil combo cards and custom logic

- Cash (several touch points)

- AMEX rewards and other credit card rewards (several screens)

- Uber credits & top-ups (several screens)

- UPI SDK (India)

- We used to have Campus Cards (10 screens), Airtel Money (5), Alipay (a few more), Google Wallet (a few) and I other payment methods I forget about. All with native screens. Still with me? This was just payments. The part where most people assume “oh, it’s just a credit card screen”. Or people in India assume “oh it’s just UPI and PayTM”. Or people in Mexico “oh, it’s just cash”. And so on.

Then you have other features that have their own business logic and similar depths behind the scenes when you need to make them work for 60 countries: - Airport pickup (lots of specific rules per region)

- Scheduled rides

- Commmuter card functionality

- Product types (there are SO many of these with special UI, from disabled vehicles, vans, mass transport in a few regions etc)

- Uber for Business (LOTS of touchpoints)

- On-trip experience business logic

- Pickup special cases

- Safety toolkit (have you seen it? Very neat features!)

- Receipts

- Custom fraud features for certain regions

- Customer support flows

- Regional business logic: growth features for the like of India, Brazil and other regions.

- Uber Eats touchpoints

- Uber Family

- Jump / Lime integrations (you can get bikes / scooters through the app)

- Transit functionality (seen it?)

- A bunch of others I won’t know about.

Much of the app “bloat” has to do with how business logic and screens need to be bundled in the binary, even if they are for another region. E.g. the UPI and PayTM SDKs were part of the app, despite only being used for India. Uber Transit was in a city or two when it launched, but it also shipped worldwide.

And then you have the binary size bloat with Swift that OP takes about.



FWIW you can download all your playlists in JSON format with the GDPR export tool in the privacy settings of your account [1]. It take "up to 30 days" for them to email you the ZIP-file. In the cased of the linked blog post, it took them 3 days, which is probably only some arbitrary amount of time to discourage you from using it effectively. The GDPR only states "without undue delay".

Under article 20 of the GDPR ("Right to data portability"), subsection 2 states that "[i]n exercising his or her right to data portability pursuant to paragraph 1, the data subject shall have the right to have the personal data transmitted directly from one controller to another, where technically feasible" [2].

Seeing how this has been previously been done, Spotify has already shown it to be technically possible. Enough users should be able to pressure Spotify to re-enable the API.

I just sent a mail to privacy@spotify.com:

  L.S.
  
  I'm a paying user of the Spotify music service. I want to exercise my rights under the GDPR article 20 subsection 2 to data portability to transmit my data, namely playlist information, directly to another controller, namely SongShift.
  
  It is clear that this is technically possible, as it has been possible in the past. However, Spotify has chosen to force SongShift to disable its API. This is in violation of my rights under the GDPR. I demand that you re-enable this API to allow me to exercise my rights under the GDPR.
  
  I expect a notification of receipt within 5 days. I expect a full answer within 14 days. In case of no reply, or no satisfactory reply, I will enter a complaint (verzoekschriftprocedure) at the Dutch civil court (Rechtbank Midden-Nederland).
[1] https://observablehq.com/@a-lexwein/what-i-got-when-i-reques...

[2] https://gdpr-info.eu/art-20-gdpr/


Ok, fair enough. It was a drive by shooting of a comment. So here’s a more considered criticism.

There’s already a way to overwrite props in react. Just use props.

If you need to expose the native API of the underlying element, do this (does HN format code?)...

``` const {foo, ...native} = props;

<label {...native}> <p>{foo}</p> </label>

```

Combine that with default props and you’re good to go.

There’s already a way to allow components to take multiple types of children.

``` <Select render={ blah => { return <CustomOption>{blah}</CustomOption> }} /> ```

And there’s already a multitude of ways to adapt styles based on props, the most obvious of which is StyledComponents.

In addition, this highlevel config is brittle. It means parents must be coupled to their children, and children coupled to their parents.

And where does this config end? How deep does the nesting of this configuration go?

Here’s my opinion; if you think you need this sort of configuration to properly wrangle your UI, then you’ve failed to grasp the point of React and the true power of composition.

React components are just functions. Preferably pure functions. Once you strip away the JSX, you should be left with something that resembles functional programming (albeit taken to an extreme thanks to JSX’s goal of emulating HTML). Props are parameters. We’ve all come across code where functions take complex and convoluted objects as arguments that trigger an explosion of calls that are near impossible to track or reason about.

This override solution is the first step in towards turning React into the kind of tool that it usurped. It has the stench of ExtJs and it’s ilk.

This “solution” was created by people who believe all problems are better solved by abstraction.

As programmers, our time is spent on the edge cases. Our text book prefect algorithms and mathematically sound functions are exposed as frauds the second they’re exposed to user input. Our carefully crafted UI libraries fall to pieces when the designers choose to break their own rules.

For configuration to work, it requires god level foresight and will eventually become Turing complete in itself.

Config is for the birds. Declarative code has always been the answer.


Glad you're intrigued! Feel free to reach my by email with any questions!

> Do you not get cognitive dissonance from killing "your children"?

Well, first, they're not my children. I don't mean that flippantly, and it's a great question to ask, it's just that my answer is: my wife is my wife, my dogs are my dogs (and, yes, family), pigs are livestock...and chickens are sort of walking squawking vegetables. :)

I shouldn't joke about chickens tho. The first time I had to dispatch one it put a deep pall over the rest of the day. Taking a life, even of something with a brain the size of a peanut, is a big deal.

The first year on the farm my wife gave all of our goats names, played with them, took them on walks, etc. I cautioned her against it...but I also used their names. Slaughter was ... not fun. Still, I did it. A .22 to the brain, and they dropped like sacks of cement.

My wife ended up not wanting to eat goat, so I ate a fair bit of goat after that. ...and she learned never to name or play with the livestock.

When we started raising pigs, we had learned from our lesson. It also helped that several times pigs escaped from our farm and had to be chased around the block and herded back to the farm, which is a huge amount of work. That put the kibosh on overly warm feelings.

Still, pig slaughter again hit me hard. Sure, I gave the pigs freshly picked apples to eat, and even their last minutes of life were better than the best day of a factory farmed pig's life, but killing is killing.

The way you slaughter a pig is [ squeamish people, please stop reading ] shoot them in the forehead. This gives them a concussion and drops them, but does not kill them. You then roll the pig on its side or back and stick a 12+" knife into its chest until it scrapes the spine, then you pivot the knife to slice the aorta and other arteries.

The pig is still technically alive at this point, although it is insensate. Because of my ethics re animals, if I'm going to take a life, I want to use every last bit of the animal. This meant capturing the gallons of blood in a five gallon bucket.

This is the most visceral thing ( no pun intended ) that I have ever done. I don't want to oversell it and say that it's "spiritual", but there is absolutely no escaping the reality of exactly that you're doing and what's going on. The act of sliding a 12" knife deep into a living, breathing thing is irrevocable, undeniable, and challenging.

Eventually even the neurological echoes stop and the animal is still.

At that point the animal is 100% gone, and you can tell. It still *looks

Photo (again, not for the sqeamish):

https://goo.gl/photos/No2xyddwDMGfLn6f6

At this point you have to slice slots in the pigs rear angles, hook a gambrel through, and then lift it (tail up, head down). You then skin in, disembowel it, and skin it.

I had a dissociative event the first time I did this. I was elbows deep in a creature that was about 4 minutes from having been completely alive, and it was still 98.6 degrees (or whatever pigs runs at), and it was in that uncanny valley between "alive" and "foot". I was quite lucid, and eloquent, as I spoke to people around me, but I felt like I was doing something that was in an entirely different realm.

I realize that lots of people here probably hunt and killed deer when they were 10, or whatever, but this was the first large animal (larger than a goat) that I had ever killed.

Hunters often say things like "I respect the animal and feel a deep kinship with it and blah blah blah" and that's easy to hear and not really appreciate, but killing and processing a large animal really is a transformational event, and one that I'm glad I've had. There is no denying exactly what you're doing, and - to me, at least - this created or strengthened my commitment to (a) raise animals as ethically as I possibly can, (b) use every bit of them without waste.

I think that killing and eating animals is fundamental to who we are (and I don't mean "we've evolved incisors"; I mean "the rituals and process are encoded in our minds". The hand shapes the tool and the tool shapes the hand).

If anything, this belief that humans have a deep connection with raising animals makes my revulsion against factory farming even stronger.

Just as dog fighting isn't merely horrific in its own right, but extra horrific because it is a perversion of something good, factory farming takes something good and inherently human and replaces it with something cruel and inhumane. I see that as a perversion.

I hope this answered your question; I seem to have rambled a fair bit.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: