Companies that raise prices by doing that will be beaten by companies that don't very quickly. Alternatively, combined with the much weaker law enforcement, "illegal" (I'm not sure about the legality of cracking copy protections here) copies will flourish if it's close to being feasible, which it could be.
So there is a benefit in converting fixed upfront capital costs into rolling operational costs.
In most developed countries consumers can convert those upfront costs easily and cheaply through loans. In a country like India, loans are much more expensive.
Think of it like using cloud services instead of buying an upfront machine.
Loans for cars are between 5.1% and 7.7% here in the Netherlands.[0] Loans for cars tend to be the cheapest loans after mortgage loans. So 6.9% (Number for 2020) doesn’t appear crazy high to me.
> Statistical Concept and Methodology: Many interest rates coexist in an economy, reflecting competitive conditions, the terms governing loans and deposits, and differences in the position and status of creditors and debtors. In some economies interest rates are set by regulation or administrative fiat. In economies with imperfect markets, or where reported nominal rates are not indicative of effective rates, it may be difficult to obtain data on interest rates that reflect actual market transactions. Deposit and lending rates are collected by the International Monetary Fund (IMF) as representative interest rates offered by banks to resident customers. The terms and conditions attached to these rates differ by country, however, limiting their comparability. Real interest rates are calculated by adjusting nominal rates by an estimate of the inflation rate in the economy. A negative real interest rate indicates a loss in the purchasing power of the principal. The real interest rates are calculated as (i - P) / (1 + P), where i is the nominal lending interest rate and P is the inflation rate (as measured by the GDP deflator). In 2009 the IMF began publishing a new presentation of monetary statistics for countries that report data in accordance with its Monetary Financial Statistical Manual 2000. The presentation for countries that report data in accordance with its International Financial Statistics (IFS) remains the same.
Would you if some random person, who for all you know could be an Uber/Lyft employee, and even if not, is someone who uses Uber/Lyft and therefore is likely happy with it, asks you a question about it?
Sure, you can read it that way. My point was that he isn't clear about the exact nature of his relationship with the person he helped, and those details are probably relevant to his termination.
You're telling me Apple doesn't have a conflict of interest policy?
That sounds strange.
So the Geniuses at the Genius bar can basically openly tell people that they can go to the other shop they work at across the door and they will do the repair at half the price? And Apple will have no policy against that?
The ex Apple employees, including one posting here, say the conflict of interest policy does not prevent helping friends or family with tech problems for free.
It seems plausible this guy did so for money. Note that the post says the work was done in spare time but doesn’t say it was done for free. That would be a conflict of interest because it’s engaging in commercial activities also engaged with by Apple.
Considering their main revenue sources will likely be decimated, it makes sense to focus resources on the primary browser engine, and allow the open source community to build out the experimental features, moving temporary resources there as needed.
The thing with Open Source is that even if Mozilla Corp goes under, all of us can continue building out Firefox like a regular open source project. Or the Linux foundation could pick it up, etc.
That's literally how Firefox was created in the first place, as an open source continuation of the Netscape browser.
Using Firefox will lead to improvements that will persist even beyond Mozilla Corp. In the meanwhile, Mozilla Corp can be looked at as an experiment to commercially and profitably develop Firefox, which, if it fails, will require us to switch to the non commercial models that are driving several other open source projects.
Hash maps also don't (usually) have external effects.
There arent many hash map methods that will actually modify the data.
Standard OOP, on the other hand, seems to encourage such behavior. So, for example, a Company object could contain a bunch of Department objects, each of which contained a bunch of Employee objects.
These people objects could also be referenced in areas outside of the company object.
If I called a company.giveFinanceDepartmentARaiseInDollars(10000) function on the Company object, it would have an unpredictable impact on the Department/Employee objects. It may also have cascading effects in other parts of the application that may not be clear.
On the other hand, if you represented this as a company hashmap, with the keys the department structs, you would have to do something like the following instead:
This contrived example shows some of the pros/cons. OOP allows us to hide a lot of behavior/changes, which may mean less repetitive code. OTOH, it hides a lot of behavior/changes.
I think the problem is that your example is too contrived and you can hide implementation details by just having a function giveFinanceDepartmentARaiseInDollars(company, dollarAmount) that exhibits the same issues as the “object oriented version”.
More generally the issue of global mutable state and keeping your own sanity as a developer is a problem across paradigms.
The real problem with my example was that I modified the strict instead of returning a new one.
My “functional” code wasn’t actually functional.
If I had written that correctly, by returning a modified copy using a map instead of modifying the strict in a loop, your example would also be covered, because the function you’re describing would not modify any of its inputs, but instead would return a new copy. And the function wouldn’t have any side effects either, so it would once again be completely clear what’s happening.
Creating a new value only gives you a stale data problem if you had pointers to the old value. You don't have to have pointers like that, it's a choice.
To take an obvious example, you might load a value from a database (company or employees, say), create a new value (with the higher salary, say), then write the new value to the database.
I think the point being made here was that alternative approach don't eliminate the difficulties of global state. Simply using immutable object doesn't make all your problems go away, it makes them different. I think it makes them better, but let's not pretend that all the challenges of dealing with state can be eliminated.
> using immutable object doesn't make all your problems go away, it makes them different
Yes, and here is a concrete example of the kind of 'different' problems you get: nested immutable structures, say `a.b.c.d`, become harder to update than simply `a.b.c.d = newValue`. The functional solution for this is 'lenses' (and other 'optics'). My favourite Kotlin framework that I use in my day job provides lenses for HTTP - URL query parameters, request and response bodies and so on - which work very well.
Companies that raise prices by doing that will be beaten by companies that don't very quickly. Alternatively, combined with the much weaker law enforcement, "illegal" (I'm not sure about the legality of cracking copy protections here) copies will flourish if it's close to being feasible, which it could be.