Uber to pay $20M to settle U.S. claims it misled drivers - <AUTHOR> http://www.reuters.com/article/us-uber-ftc-idUSKBN15334C <comment><USER2> I suspect there's some legal strategy here, but this fine seems pretty meh. The real punishment should be paying them what they advertised: 600,000 * 0.10 (at least 10 percent of all drivers were paid less) * 15/hr (average advertised wage) * 40 hours = 36M minimum. More if you do a more granular analysis. Keep in mind, this is just paying them what they advertised. There should also be a large consequence for lying to begin with.

Without severe punishment for doing this, there's little reason to not do it. You and your team can just do a cost-benefit analysis and see if it's worth lying. Why not have a super severe punishment to discourage this type of behavior forever? Say 10% of all revenue since this was in place? This is just another practice that supports big-business. Large firms can easily absorb these kind of minimal fines. To pay they'll layoff the people who had nothing to do with this. Leadership isn't going to be affected by this.

All companies with revenue in the billions should be fined in the billions at minimum. As a society, are we going to allow companies to lie and deceive in the name of "disruption"? We already know how that went once during 2008 (of course it's not the same thing here).

EDIT:

I realize that I used the word 'fine', when really this is a settlement. They're not the same, but I hope the point I'm making still gets across.

<comment><USER3> For a long time in Spain fines for polluting were lower than the cost of actually fixing the issue. As you can expect factories continued polluting. Then that changes to bigger fines or even to stop the factory until the problems were fixed. In no time factories hired people to fix the problems and to make sure that it didn't happen again.

If a company is allowed to break an agreement with no consequences. How do we expect it to abide to the rules?

> As a society, are we going to allow companies to lie and deceive in the name > of "disruption"?

I dont' see any disruption in Uber business model. They just offer a service without paying the proper taxes that other companies (taxi) have to pay, and without paying minimum wage or having other guarantees for the employees. That is as old as the rule of law and taxes have existed, the only novelty is that they use an app to do so. And apps have been already out for a while.

<comment><USER4> The disruption is that it surfaces all those problems which already exist for taxi drivers in the current system. They often work insane shifts, lose money if it's a slow day, etc. They have to enter into long exploitive contracts just to rent a medallion from the politically-connected rent-seeking monopolist who owns it.

Also, I often see drivers who don't resemble the photo ID in the cab at all. Likely they're unlicensed friends of the medallion renter, who help cover the insane shifts they rent the medallion for. But it negates much or all of the supposed value of taxis.

By giving those drivers an identical (somewhat crappy, as you point out) choice which doesn't lock them in, it's shaking up the taxi industry. And by reducing the value of the medallion it's hurting the monopolists who lobby to keep the number of medallions low, etc, which helps us in the long run with healthier markets.

As for Uber specifically, their value is surge pricing. And I say this as a customer, not a shareholder. I routinely wait for taxis that never come when I'm in cities that have banned Uber. But I never wait for an Uber where it exists - I can choose to pay if I want it. If I'm late for a meeting, I'll pay. It's a service that was unavailable before at any price.

</comment></comment></comment><comment><USER5> I can't help myself but I really dislike Uber just for everything they do. Their model is entirely based on exploiting drivers at every corner just to provide users a little bit better service than what taxi companies already did for us. I think with technology we can do better than what Uber does.

<comment><USER6> > just to provide users a little bit better service than what taxi companies > already did for us.

I'm not saying I'm a fan of all their business practices, but (at least in Boston) Uber has been a massive improvement over what taxi companies provided.

<comment><USER7> In Denver the taxi's are horrible - half the time you smell puke or some horrible odor, the other half you have to wait an hour to just get a ride. I'm not saying I like Uber as a company, nor what they did to drivers, but they (as well as others like Lyft) have created a fresh fast way to get around and it costs the same as a taxi most of the time. It's hard to not flock to that.

<comment><USER8> The only reason for this better experience is because you're riding in a car that Uber doesn't have to maintain. There's a lot of Uber drivers who go out of their way to create a pleasant ride, which is what makes it great. If the drivers aren't getting compensated appropriately for this, then that's a huge problem in my opinion.

<comment><USER9> Then they will stop driving for Uber and find something else to do that pays them better.

I'm generally more concerned about the precedent Uber sets riding roughshod on legal regulations, but fairness of compensation is very much an emergent market phenomenon and people are free to not drive for Uber if they find themselves inadequately compensated.

<comment><USER10> The argument that people can just "not drive Uber" would be a fine one. Except that Uber has a history of drastically changing their compensation structure overnight.

This fall in Toronto, they reduced their UberEat compensation by half, overnight. People have rent, invoices, bills, and have car payment and comes to expect a certain amount of money to come in after week, and when you do those kind of changes overnight without warning people, this is just pure evil capitalism.

They use the same tactic when they open a new market, they advertise certain rate, people buy a car or rent a car to start working for Uber, and then few months down the line they reduce the price, and again, and again, and again, and then people are stuck with a car where they have to drive twice as much to bring back the same income.

<comment><USER9> I've talked to a number of drivers in India where Uber changes compensation structures every couple of months and everyone has got in knowing Uber can/will do these things - no one seems to be as credulous as you claim. They limit their risk exposures accordingly - many choose to drive for other car owners vs. invest in their own car.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> I drove for them for a while. This is from an old email in 2014, they loved to ignore the costs drivers incur, and slyly referred to earnings instead of profit:

"NEW UBERX RATES

Uber's goal is to ensure strong driver earnings and offer the best value to riders. Maintaining low prices will keep demand high into August and September, and help you do more trips during this time. From this promotion, we have learned that a 20% price cut will keep driver earnings higher than May peaks and keep demand at record levels. We have seen similar effects in other cities where lower rates increase trips and increase driver earnings.

In short:

\- Average driver earnings will be higher than May levels \- Uber's 25% promotion to riders will end \- Prices will be reduced by 20% for both riders and drivers"

<comment><USER12> > Prices will be reduced by 20% for both riders and drivers

Do they refer to their share of the fare as the driver's price? If so that's quite clever in that they can say the price you pay is going down when they give you a paycut..

<comment><USER13> Ugh, that's terrible. Since the highest fixed costs (fuel, car payment) are part of the driver's "earnings", it's clearly a more than 20% cut for the driver. Trying to act like both reductions are 20%, as if they should be the same is disingenuous.

<comment><USER14> "Since the highest fixed costs (fuel, car payment) are part of the driver's "earnings", it's clearly a more than 20% cut for the driver."

A couple of problems with your position:

\- Fuel is not a fixed cost. It's a variable cost. More trips -> more miles driven -> higher fuel cost.

\- The presence of large fixed costs (as you say 'car payments') means that increases in total revenue will have a tendency to increase overall profit

Let's say I have a business which has large fixed costs, but no variable costs. If my price per unit goes down by 20%, but I sell 25% more units, then my revenue is up. But, because my costs are fixed, my profits are also up by exactly the same amount.

If you had said that the drivers have large _variable_ costs (fuel, maintenance) or that the opportunity cost of the drivers' own time was high, that would be more convincing.

<comment><USER13> You're right, wrong terminology. Was trying to express that the largest costs of the trip are the driver's fuel and car costs. By "fixed" meaning the driver has no obvious way to change those other than whatever car they bought in the first place. So, a 20% cut in revenue to the driver is significantly _more_ than a 20% cut in earnings/profit.

<comment><USER14> "So, a 20% cut in revenue to the driver is significantly more than a 20% cut in earnings/profit."

I wasn't talking about the implication of a 20% reduction in _revenue_. I was talking about a reduction in 20% in per unit _price_ , with a simultaneous increase of >=20% in _unit volume_. Together, these would create an _increase in revenue_.

Given that at least some costs (car payments) are fixed, we cannot know whether this 20% reduction in price will reduce driver profit, without knowing (i) the marginal cost per unit, and (ii) what the % increase in unit volume is.

For example, if fuel costs (and additional maintenance costs) are 25% of the price of a ride, then decreasing ride price by 20% whilst increasing # rides by >=27% would increase _both_ revenue _and_ driver profit.

<comment><USER15> Small math quibble: a 20% reduction in per unit price requires a 25% increase in unit volume. 20% reduction = 0.8 times the price, 25% increase = 1/0.8 times the volume.

For a reducto ad absurdum that I use to help remember this thing: a 100% decrease in price isn't counterbalanced by a 100% increase in volume.

<comment><USER14> Oops. Yes, I stated 20% increase earlier in my answer. But I think the final number (27%) is correct. It's higher than your 25%, because I assumed non-zero fuel costs. So breaking even on revenue wouldn't be sufficient to break even on profit.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> $33 / US driver... I'd say Uber came out on top here.

<comment><USER17> And _much of_ the monies won't even go to the drivers.

<comment><USER18> I wonder if this opens ground for drivers to fill a class-action against Uber.

</comment></comment></comment><comment><USER19> I would like to see where Uber's numbers came from. How did they overestimate wages by such a huge margin? (48% and 39%)

<comment><USER20> They probably faked the numbers to scam people into driving for them and entrench themselves in the market.

<comment><USER21> ... or at least if it was anything different they completely failed to convince the FTC commission ...

</comment></comment></comment><comment><USER22> Pennies for Uber... a $2Bn fine might make them pay attention.

</comment><comment><USER23> Uber is burning a lot of money. We are talking about a few billions. As a user I find Uber and its likes useful because they enable me to travel around the city on-demand. But drivers aren't making enough and a just a single bad review can literally ban a driver from driving (lock your account and you'd have to explain to Uber rere).

Can Uber investors continue to be happy with the rate of money burning? Even if Uber does go to IPO, Uber can't continue to burn money forever. There's almost a burst I am selling...

</comment><comment><USER18> It would be interesting to compel companies to publish exhausting anonymous data regarding their contractors. Without such datasets, it's hard to assess reasonably on whether these shemes are used legitimately, or merely to bypass labour regulation.</comment>


Homebrew now sends usage information to Google Analytics - <AUTHOR> https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Analytics.md <comment><USER2> I'm the maintainer who added this. I apologise for the poor communication. I would have responded sooner but I've been on a plane for the last 10 hours. I'd hoped the documentation would have made clear our reasons for doing this but I feel the discomfort so since getting off my flight I've opened and merged three PRs ([https://github.com/Homebrew/install/pull/42](https://github.com/Homebrew/install/pull/42) [https://github.com/Homebrew/brew/pull/143](https://github.com/Homebrew/brew/pull/143) [https://github.com/Homebrew/brew/pull/146](https://github.com/Homebrew/brew/pull/146)) to better communicate this to our users on installation and `brew update` before any information is sent and ease the opt-out process.

<comment><USER3> It should be opt-in, not opt-out.

<comment><USER4> Man, the privacy critics really come out of the woodwork every single time "opt-out" is mentioned, regardless of the actual facts for a specific situation. The developers explicitly state they set the anonymous IP address flag. There is nothing that links back to you as a person. Are you really concerned that the developers know which packages a random, unknown person has installed?

Crying "opt-in" to every single little thing that has ever tracked you for _non-nefarious reasons_ completely detracts from the cases where tracking _is_ nefarious. Homebrew is not tracking for ads. They are not tracking for anything worth selling to a 3rd party. They're not - and are incapable of - linking this to any other database that does contain personally identifiable information. There's no "profile" worth anything to anybody except the developers, who are trying to get some very basic information completely detached from any identity.

>> You will be notified the first time you run brew update or install Homebrew.

>> to opt-out of Homebrew's analytics you may set HOMEBREW_NO_ANALYTICS=1 in your environment

They went to the lengths to document this. And to notify you when you run the software. You have the opportunity to opt-out of something that is completely harmless. There is no valid reason to be crying foul over this. Of all the tracking that goes on with our internet connections, this should by far be the least of anyone's concerns.

I have uBlock Origin installed in Chrome. With all the ad networks _and_ analytics scripts blocked. Google Analytics does not run in my browser. And yet, I am not even slightly opposed to homebrew's use of it. It's _actually_ anonymous, unlike how many developers use GA in the browser (tracking IP addresses, custom fields like user ids that link back to the site's database, etc). God speed, homebrew devs.

<comment><USER5> If all this is true then why even go to the trouble of supporting opt out?

The support for opt out acknowledges (implicitly) that the choice to upload data is rightfully the user's own prerogative. Then paradoxically enables the feature by default anyway and places the switch behind some esoteric opt out commands.

<comment><USER6> You might not support or use Google in any way. There are such people. They use DDG and go to extraordinary lengths to prevent any assistance to Google. I'm not one of those people, but the ability to turn off the feature is reasonable.

Some folks don't trust Google. There might be a case down the road where the U.S. government required access to the data due to National Security. Given how they handled the San Bernadino iPhone incident, it's not like this won't ever happen.

Others believe that Google will use the data for their own ends. In the same way other don't want Googke to become more powerful, others will be concerned that Google uses analytical data like this for their own commercial purposes, and it's not known what this might be.

It also would be a PR nightmare if this wasn't added, even though the data is anonymised to the Homebrew guys. Perception is important also. Not to mention the fact that it doesn't hurt to add this option to Homebrew.

Personally, I'll just leave it on as I don't subscribe to any of the above views, but I'm imaginative enough to see potentially legitimate concerns. :-)

<comment><USER7> I support opt-in as well. Make it the default option so people can press enter or use -y if you'd like.

I'm thinking along the lines of popcon in Debian [http://popcon.debian.org/](http://popcon.debian.org/)

</comment></comment></comment></comment></comment></comment><comment><USER8> The fact that they are transparent about this, that we can opt-out if we want and that they're open source makes me feel more than comfortable sharing anonymous usage information with them. Homebrew has been amazing for me!

<comment><USER9> Is an alert displayed to the user the first time it tries to send info to Google? If not, that is far from "transparent". It's good that they tell you how to opt out on the website, but I can't remember the last time I went to the website. Probably when I first installed Homebrew on this Mac.

<comment><USER10> Get littlesnitch on Mac and you won't need to rely on third parties alerting about outgoing connections, although I recon the when we're talking about something like homebrew it's not _easy_ to vet every single outgoing connection.

Still littlesnitch is really awesome for the privacy conscious users.

<comment><USER11> LittleSnitch also makes you totally paranoid about how almost every piece of software is spying on you without explicit consent.

Also, Microsoft really needs to clean up their domain usage, because it takes 999 permission rules to run Office.

<comment><USER12> In a similar vein, installing uMatrix makes you (rightfully) paranoid about what web pages are collecting from you. "Wait I can disable 28 Javascript scripts and iframes and the page loads OK?"

</comment></comment></comment></comment></comment><comment><USER9> Set HOMEBREW_NO_ANALYTICS=1 to opt out.

The right thing to do would be to make it opt in, not opt out. (Which would not be without precedent. Debian's popcon is opt-in.)

<comment><USER13> That's probably true, but then no one would opt-in.

<comment><USER14> ...which is very telling.

<comment><USER15> As in, people want privacy at the expense of volunteer time.

Simple solution: Charge people for using Homebrew who don't want to send analytics in, fund Homebrew development with those funds. Otherwise, its an external cost being foisted on the volunteers by developers who want privacy at the cost of additional volunteer time.

EDIT: The tone of this thread is the exact problem with open source projects and participation. "I want a say, but I'm not willing to contribute in any way except use your tool you're providing for free." Sad, but expected.

<comment><USER16> I think most people aren't concerned so much about sharing usage data. The problem is specifically the way it's being shared via a third party. Other apps ask if I mind sharing some data (e.g., Firefox), and I don't have a problem with that.

<comment><USER15> Okay. Is everyone going to pony up for a self-hosted analytics box and the time to manage it? No? Of course not. Everyone wants to complain, no one would contribute resources to do it though. Privacy has a high moral value (its free to want it and complain about it), but small economic value (you use Chrome? It sends everything you do back to Google. You'll still use it, because its better than not).

<comment><USER17> a HN thread is not the appropriate place to ask for resources for a project.

There are many OS projects out there with larger needs than an analytics server that have managed to get the support they need. If resources are an ongoing problem you even have the option of applying to join a free software foundation like Apache that has resources.

<comment><USER18> > join a free software foundation like Apache that has resources

There's a reciprocal arrangement here. One of the requirements of joining the Apache Software Foundation is using "Apache" when refering to the name of the software product for the first time in a new context, e.g. first mention on a webpage. Apache Groovy was promoted from Apache's incubator last November (2015), so I've been doing just that ever since. Unfortunately, many of the developers who work on Groovy don't bother, availing themselves of those resources but not giving back to the foundation the small amount asked.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> Yet another reason to ditch the antiquated Homebrew, and switch to the cross platform Nix:

[http://nixos.org/nix](http://nixos.org/nix)

[https://github.com/NixOS/nixpkgs](https://github.com/NixOS/nixpkgs)

[https://blog.errright.com/switching-from-homebrew-to- nix/](https://blog.errright.com/switching-from-homebrew-to-nix/)

<comment><USER20> Remember when everyone switched to Homebrew because Fink/macports were "antiquated", a.k.a. not written in Ruby?

It was nice back then. Packages didn't install themselves in /usr/local.

<comment><USER19> > Remember when everyone switched to Homebrew because Fink/macports were > "antiquated", a.k.a. not written in Ruby?

Yes, I must admit I chose the word "antiquated" quite intentionally, as Homebrew seems to get so much attention (for now) because it's written in Ruby and the website ([http://brew.sh/](http://brew.sh/)) is shiny, rather than technical merits.

> It was nice back then. Packages didn't install themselves in /usr/local.

You might enjoy Nix, then -- for that reason, and the following:

1\. Everything is stored in /nix/store -- nothing ever touches /{local,}/{bin,lib,share}

2\. Profiles are symlink forests that merge multiple packages into one FSH[1]-like tree -- each link pointing into /nix/store. When you install a package, a new symlink forest is created replacing the one at ~/.nix-profile (your user profile, being the default). If you request that nix rollback to a previous "generation" of your profile, all Nix has to do is replace the ~/.nix-profile link to instead point at the previous generation's symlink forest (you can think of this as bumping HEAD in git -- it's nearly instantaneous). If upgrading a package goes wrong, just rollback.

3\. Because Nix knows the entire dependency graph, its trivial to distribute a build plan across multiple machines (you can set this up to happen by default)

4\. We have a continuous integration server (Hydra[2]) that builds and signs all of our packages. Of course, there's nothing stopping you from building from source (or you could run your own Hydra instance, if you so wish).

[1]: [http://www.pathname.com/fhs/](http://www.pathname.com/fhs/) [2]: [http://nixos.org/hydra/](http://nixos.org/hydra/)

<comment><USER21> That's the purpose of /usr/local.

/nix/store? Really? You can't just make up new root level directories. That's so wrong.

<comment><USER19> > That's the purpose of /usr/local.

I think you must have ignored a substantial portion of my comment. Let's take a look at what (part of) my Nix store looks like (you'll see it fundamentally looks nothing like /usr/local):

      /nix/store/2mmvks92lx37xghj0795ldzrg50lh2pg-bash-4.3-p42
      ├── bin
      │   ├── bash
      │   ├── bashbug
      │   └── sh -> bash
      └── share
          ├── info
          │   ├── bash.info
          …   …
          └── man
              └── man1
                  ├── bash.1.gz
                  └── bashbug.1.gz

      /nix/store/8g6gb6r49fxsrp547rdi3zr06vd69khq-git-2.7.4
      ├── bin
      │   ├── git
      │   ├── git-cvsserver
      │   ├── git-http-backend -> /nix/store/8g6gb6r49fxsrp547rdi3zr06vd69khq-git-2.7.4/libexec/git-core/git-http-backend
      │   ├── git-receive-pack -> git
      │   ├── git-shell
      │   ├── git-upload-archive -> git
      …   └── git-upload-pack

Note that each package under /nix/store is its own prefix; that is, it contains its own bin, lib, share, etc.

/usr/local is a dumping ground "for use by the system administrator when installing software locally"[1]. If you need multiple versions of automake installed: tough luck, the paths collide. If you need multiple versions of Erlang: tough luck, the paths collide.

Would you like to be able to rollback your system by changing _one_ symlink[2]? Too bad: when you last installed packages into /usr/local, your package manager clobbered the previous version.

Technically, we could make /usr/local a symlink forest pointing into /nix/store, but we don't: we want to make sure that only the packages we explicitly declared are picked up by build tools, rather than defaulting to searching through the currently "installed" packages.

> /nix/store? Really? You can't just make up new root level directories. > That's so wrong.

Can you substantiate your claim? Note that "it doesn't feel right" doesn't count as a rational criticism.

[1]: [http://www.pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHI...](http://www.pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY)

[2]: This probably sounds like a bold claim. I tried to explain how this works above, but if you don't believe me, feel free to ask and I'll explain further. Alternatively, feel free to read the first paragraph here: [http://nixos.org/nix/manual/#sec-profiles](http://nixos.org/nix/manual/#sec- profiles)

<comment><USER22> Funny that you should mention the FHS. From that same document:

 _Applications must never create or require special files or subdirectories in the root directory. Other locations in the FHS hierarchy provide more than enough flexibility for any package._

They really should be using /opt:

 _/ opt is reserved for the installation of add-on application software packages.

A package to be installed in /opt must locate its static files in a separate /opt/<package> or /opt/<provider> directory tree_

</comment></comment></comment></comment></comment></comment><comment><USER23> > generated by uuidgen

So sending a unique tracking number...

> enable us to accurately measure user counts vs. event counts

for the specific purpose of associating events from the same user...

> This does not allow us to track individual users

somehow doesn't accomplish it's stated purpose? The entire point of that UUID is to track individual users.

> The Google Analytics anonymous IP setting is enabled

Sending Google an additional boolean flag doesn't prevent Google from reading the Source Address from the IP header.

</comment><comment><USER24> Would really prefer it to be opt-in instead of opt-out as others have said. Sharing the info with Homebrew is one thing, the GA borg-malware is another entirely. Something like that should require an explicit request. At least in the browser, I can blacklist all requests with uBlock.

Atom does the same thing and I'm not a fan. You have to explicitly remove the analytics 'package'. Soon every piece of software will be reporting, silently.

<comment><USER25> >Soon every piece of software will be reporting, silently.

Not ethically written, free software. You would never see this behavior from a GNU program.

<comment><USER26> Absolutely. If there were it'd be opt in and not to Google.

</comment></comment></comment><comment><USER27> Seems like Homebrew is doing many things right:

\- Anonimizing IP address.

\- Explaining what data is collected, and why

\- A way to optout

Something that could be better:

\- Make this optout for new users and opt-in for existing users?

\- Notify the user in some manner when the data is sent to GA for the first time?

\- Change the uuid every X period of time to make things more privacy friendly.

[Edit: wording]

</comment><comment><USER28> "[...] we do not have the resources to do detailed user studies of Homebrew users to decide on how best to design future features and prioritise current work. Anonymous aggregate user analytics allow us [...]"

Isn't this a false dichotomy? Why can't other measures be used that don't require "resources" to do "detailed user studies" yet don't require on-by- default information capturing? Surely there are many open source projects that persist to make their users happy without this information, correct?

</comment><comment><USER29> These kinds of "features" are a problem for open source, and I don't know that they are a good idea in general.

It's nice to know how and where your software is being used, but in many environments call-home functionality and auto-update functionality are non- starters.

Any non-user initiated network activity should be explicitly agreed to and available to be easily stripped.

We can and should do a better job with open source software than closed source would-be competition. Even if you aren't a privacy advocate, privacy is a priority of a significant amount of the technical community. It's significant enough that it should be addressed as a forethought to features like this, not an afterthought.

Things like this pop up as negative news entries that people gloss over. The guy who makes the snap decision "don't use brew, it phones home" today could be a CTO who never had that opinion changed three years from now.

</comment><comment><USER30> Made me open an HN account just to say this

This is a very bad move and will further erode the already declining trust people put in package managers and software distribution channels. This is _not_ transparency - transparency would be asking for user's explicit consent on the first brew invocation that includes this "feature". If this decision is not publicly reverted I will be removing homebrew altogether as it indicates a severe lapse in judgement, good faith or both on the part of the homebrew team.

</comment><comment><USER21> Reminder - The NSA/GCHQ systems described their use of Google Analytics piggybacking to fingerprint and target users for exploitation.

They also used similar Windows error reporting to monitor what software/hardware users have.

Not that anyone should be snooping on what users do without opt-in permission, but even if we believed that Google "anonymize" it, there are still concerns.

More simply, there's just no reason for you to know what I do on my own computer. It's none of your business and I don't need a reason.

</comment><comment><USER31> I don't mind homebrew collecting anonymous information about me but I do not want Google to get even more information about me (and since the ip address I use with homebrew is the same I use to surf the web, the information is not anonymous for Google).

</comment><comment><USER32> It looks like everybody today wants to spy on you. Google, Facebook, and Twitter want to look at your browsing history, NSA wants to see your calls, emails, and messages history. Microsoft wants to know about everything you do at your PC and now even package managers want to have their share of data, too. What about asking my opinion first? Well, as homebrew developer have said

> The problem with opt-in is that you don't get representative data.

Users do not seem to be enthusiastic about participating when they have a choice so let's go without asking them.

</comment><comment><USER33> Isn't this the same info they'd get if they ran their own registry like every other package manager (instead of using GitHub)? In the grand scheme of things, this seems pretty minor to me.

</comment><comment><USER34> See, that's why I am a diehard macports user. /opt/local and not /usr/local. No cross pollution with my own configure && make && make install packages, nicely separated and maintained.

<comment><USER35> macports requires all of xcode, homebrew just the CLI tools.

<comment><USER36> This statement is false. With only Command Line Tools installed, macports complains, but everything works.

</comment></comment></comment><comment><USER37> Here's a github issue related to this for those who are interested: [https://github.com/Homebrew/brew/issues/142](https://github.com/Homebrew/brew/issues/142)

</comment><comment><USER38> Tonight I'm going to read about pkgsrc and tomorrow give a try. It has active community last time I used it few years ago. Seems to have also binaries available at [http://pkgsrc.joyent.com/install-on- osx/](http://pkgsrc.joyent.com/install-on-osx/)

<comment><USER38>
      My quick notes on how to get started with pkgsrc

      More info:	http://pkgsrc.org/
      			http://wiki.netbsd.org/pkgsrc/pkgsrc_64bit_osx/

      # Download pkgsrc
      curl -O https://ftp.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.bz2
      # validate shasum
      $ curl -O https://ftp.netbsd.org/pub/pkgsrc/stable/pkgsrc.tar.bz2.SHA1
      $ cat pkgsrc.tar.bz2.SHA1
      $ shasum pkgsrc.tar.bz2
      # extract pkgsrc archive. Mine lives at ~/Work and I also install built packages under Work.
      $ tar jxvf pkgsrc.tar.bz2
      # bootstrap
      $ cd pkgsrc/bootstrap
      $ ./bootstrap --abi=64 --prefer-pkgsrc=yes --unprivileged --compiler=clang --prefix="$HOME/Work/pkg"
      # append prefix/bin to your PATH
      $ cat ~/.bash_profile
      export PATH="$PATH:$HOME/Work/pkg/bin"
      # re-login to make PATH effective
      # Example build of dos2unix (poor example because lots of dependencies like perl...)
      $ cd pkgsrc/converters/dos2unix/
      $ bmake install
      ...
      ===> Installing binary package of dos2unix-7.3.3

      $ file ~/Work/pkg/bin/dos2unix
      /Users/petri/Work/pkg/bin/dos2unix: Mach-O 64-bit executable x86_64

<comment><USER38> You can find homebrew uninstall info from here

[https://github.com/Homebrew/brew/blob/master/share/doc/homeb...](https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/FAQ.md)

      # I did:

      # remove all packages
      $ for f in $(brew list); do brew remove "$f"; done

      # download uninstall script
      $ curl -O https://raw.githubusercontent.com/Homebrew/install/master/uninstall
      # review script
      # run uninstall script
      $ chmod +x uninstall
      $ ./uninstall
      ...

      # review
      /usr/local/bin/
      /usr/local/etc/
      /usr/local/lib/
      /usr/local/share/

      # I removed
      $ rm -rf /usr/local/share/ /usr/local/etc/

      # Restore permissions

      $ sudo chmod 0755 /usr/local
      $ sudo chgrp wheel /usr/local

</comment></comment></comment><comment><USER39> Honest question for people who are opposed to this update and think it should be opt-in: what do you see as the downsides or pitfalls of sending anonymised usage info to Homebrew / Google Analytics?

<comment><USER40> I really wish people would explain their reasoning here. I guess I just don't understand why handing a list of installed packages to Google is not my interest. Everyone in this thread seems to be just assuming that everyone else is already onboard with this reasoning.

</comment></comment><comment><USER41> I normally enjoyed the insight and comments of the thread more than the content of the article and don't comment that much.

But my personal opinion on this, only to share it and be heard possibly by the developers of homebrew, is that I honestly do not care about this. It's nice they are open about it, it's a hell of a tool and hey, if they want to track what I do to improve it, have my data.

I really don't see the opt-in/opt-out debate being so harsh on this. Because it's open source it should be opt-in? I really don't think so. Analytics are a valuable source of information for the developer and google provides a hell of a service for that. And you probably use several closed source tools that track you, sometimes without even telling you. Yes, you can really of external tools to block this, great for all of us those tools exists, you can use it for homebrew as well.

I wonder if all of the opt-in advocates don't use gmail for their email. I am pretty sure they do, and they are not worried about all of the tracking going on there? Or on other apps? Unless you really follow most if not all of stallman's computing principles[1], being furious about this, is, IMHO, disproportionate and a bit ungrateful.

So I am more than OK with opt-out. Nice that you wrote about it, nice that you provide a way to do it, and nice that you use your time to create such a great tool!

Kudos!

[1]: [https://stallman.org/stallman- computing.html](https://stallman.org/stallman-computing.html)

<comment><USER22> _Because it 's open source it should be opt-in?_

Because the sending of data to a third party is not directly related to the functioning of the software.

 _Analytics are a valuable source of information for the developer_

Yet it's not the developer's data, it's the users' data.

 _you probably use several closed source tools that track you, sometimes without even telling you_

[https://en.wikipedia.org/wiki/Argumentum_ad_populum](https://en.wikipedia.org/wiki/Argumentum_ad_populum)

 _I wonder if all of the opt-in advocates don 't use gmail for their email. I am pretty sure they do_

[https://en.wikipedia.org/wiki/Ad_hominem](https://en.wikipedia.org/wiki/Ad_hominem)

<comment><USER41> Nice links, that's why I like comments.

Ok, let's don't state it as an argument, but rather as a question.

Do anyone that's so much against opt-in is aware of closed source tools that tracks you and use it anyway?

And..

Do you use any third party web service like gmail or any other?

Although I hardly think I'll get an answer from most. At some point you have to make assumptions, wether those are fallacies, ok.

It's true it's not directly related to the functioning of the software, but it improves it in anyway, then there's a connection with it.

I take developer side and I personally look for see the grater good/less harm and compromise.

Opt-in will likely give them very little % of adherence and thus rendering all of this useless. Most of the opt-in advocates have technical capabilities to opt-out in any way (homebrew way, network filters, forking ,etc...). So why not simply letting this go?

I do think homebrew is a rather technical tool so most users are tech savvy guys, but still.

For me, this is pretty similar debate to donating organs.

[https://en.wikipedia.org/wiki/Organ_donation#Opt- in_versus_o...](https://en.wikipedia.org/wiki/Organ_donation#Opt- in_versus_opt-out)

And I am 100% an opt-out advocate!

<comment><USER22> _Do anyone that 's so much against opt-in is aware of closed source tools that tracks you and use it anyway?

And..

Do you use any third party web service like gmail or any other?_

I can only answer for myself, and it's no to both, with caveats. I do have a hotmail account, but I only use it for subscriptions to public mailing lists. I've had it for over 20 years, and stopped using it for private correspondence around 2005. I also have an Android phone, but it's not activated (as in, I never gave it any credentials to log in to any Google services, and I do not have a mobile data plan). Any application I need is sideloaded, or installed with F-Droid.

The rest of my networked machines are running Debian, OpenWRT or NetBSD. I do have a Windows (8.1) VM on my work laptop, but that VM is switched off unless I get paid to use it.

 _It 's true it's not directly related to the functioning of the software, but it improves it in anyway, then there's a connection with it._

It's not a given to any specific user that sharing their data will improve the software in areas that the user cares about. Nor is it a certainty that not sharing leads to the software not improving in those areas.

There definitely is a case to be made that more accurate metrics will allow the developers to make more focused decisions, and I don't think anyone is arguing against that. That's not what the argument is about. The question is whether the developers' need for data is sufficient justification to hand over their users' data to the biggest aggregator of personal data on the planet, and whether it is justifiable to do so without the user's knowledge (the primary reason for opt-in is because it's the easiest way to unambiguously ascertain consent).

</comment></comment></comment></comment><comment><USER42> Not on my computer: [https://github.com/StevenBlack/hosts](https://github.com/StevenBlack/hosts)

<comment><USER43> Thanks for the link! I have been using [http://winhelp2002.mvps.org/hosts.htm](http://winhelp2002.mvps.org/hosts.htm) for many years but it looks like StevenBlack's file is more comprehensive and updated more frequently.

</comment></comment><comment><USER44> It's high time for CVE-like identifiers for privacy violations.

<comment><USER45> This is a great idea. Has there been any prior attempt at this?

</comment></comment><comment><USER26> I think it's very reasonable to prompt a message on install saying "Homebrew collects and sends anonymous analytics. Use Homebrew --disable-analytics to opt out" and have that null the analytics identifier. Environment variables aren't that convenient.

</comment><comment><USER46> You know what homebrew team : you guys are providing a great tool here and you should really charge for it. Take out the analytics stuff, cause no one cares if it helps you or makes it easier for you to improve software that you write for free on your own time. No one cares that it'll take you more time to improve this great tool without the analytics. No one cares that it'll cost you money to use another service besides Google Analytics. We don't want you to spend time or money that you don't have either, just don't bother doing updates or improving it, it's pretty good the way that it is. But honestly, the fact that I can do a clean install of OSX and install my entire dev environment + favorite apps in about 3 minutes VS going to each individual site, having each of them (most likely) collect data about me, have to download them individually, and then install them individually -- is DEFINITELY worth some extra money in your pocket! Charge me a couple bucks, I'll gladly pay you for it. Heck, I'm going to go donate now + wait to get charged. ALSO: Don't let me know TOO much, all the details make me think I can't trust you! And you made the opt-out directions too hard.. you mean I have to do extra work that will take 15 SECONDS OR LESS out of my day to opt- out?.. NO! You do more work, don't make things easy on yourself OR me, that's not cool, you can just start charging me for it. =P. Keep up the good work!

</comment><comment><USER47> Totally fine with it.

</comment><comment><USER10> I use MacPorts[1] which is a good alternative to homebrew. It's an older project.

Lately though, I've came across many packages that are available for Homebrew but not for macports.

[1] [http://macports.org/](http://macports.org/)

</comment><comment><USER48> Here's a quick and dirty way to opt out for BASH and ZSH users for easy copy/pasting.

BASH:

      cat <<EOF >> .bashrc
      # Opt out of Homebrew analytics
      export HOMEBREW_NO_ANALYTICS=1
      if [[ -e "$HOME/.homebrew_analytics_user_uuid" ]]; then
        rm -f "$HOME/.homebrew_analytics_user_uuid"
      fi
      EOF

ZSH:

      cat <<EOF >> .zshrc
      # Opt out of Homebrew analytics
      export HOMEBREW_NO_ANALYTICS=1
      if [[ -e "$HOME/.homebrew_analytics_user_uuid" ]]; then
        rm -f "$HOME/.homebrew_analytics_user_uuid"
      fi
      EOF

Cheers.

<comment><USER49> `rm -f` ignores nonexistent files so you could omit the `if` to be concise.

<comment><USER48> Good call. I was mainly using `-f` to suppress the prompt about deleting the file, but you're correct, it's unnecessary to have the if statement in this case.

</comment></comment></comment><comment><USER50> Kudos for at least announcing this. (And I've totally opted out.)

</comment><comment><USER51> So essentially US government is now one data request from Google away from having a full list of software (and vulnerabilities) for any given developer Mac?

</comment><comment><USER52> Many large corporations have internal homebrew packages. You can learn company secrets by getting a list of packages that are being installed.

</comment><comment><USER53> As I see more applications try and hit remote ad servers, I feel even better that I'm blocking all of these ad servers with my /etc/hosts file using [https://github.com/StevenBlack/hosts](https://github.com/StevenBlack/hosts). The update will be a no-op from my machine.

</comment><comment><USER54> +1 for pkgsrc

</comment><comment><USER55> AFAIK, Max Howell was rejected from a position at Google, and now his trademark making use of Google? Let him take a look at GNU.ORG; if he can see any GA code.

</comment><comment><USER56> People have all of their traffic tracked by their ISPs, they use chrome, they have full activated accounts on their phones, they add tag themselves everywhere around facebook and they are mad because someone wants statistics over google analytics... you IT people need to relax... I'm sure someone will find a way to bring up inequality, sexism, racism and being vegan at some point on the thread.

</comment><comment><USER57> one more what used to be decent software selling out to marketing....

guess its back to the linux vm when working on a mac...

</comment><comment><USER58> is it formulae or formula?

<comment><USER59> "formulae" is plural for "formula".

</comment></comment><comment><USER60> opt-in by default is fine with me. Thanks for the great tool!

</comment><comment><USER61> The tinfoil hats are strong in this thread.

</comment><comment><USER62> set HOMEBREW_NO_ANALYTICS=1

</comment><comment><USER63> I love the knee-jerk hostile reactions to any sort of phoning home by an application. They've provided extensive explanations on what is collected, why they're collecting it, who has access, what it's for, and even the code that does the actual collecting and it still isn't enough for people.

While I'm against this type of thing typically, this information is exactly what someone who is concerned about it needs to see, and if they don't want to be involved they include the opt-out on the very same page. I don't see how this could get any better, this could be held up as a gold standard for Microsoft and Google moving forward.

This type of data is invaluable to developers, I can't tell you how frustrating it is that so many people now refuse to share it because of overblown privacy concerns. The data is anonymized and no one cares enough about what you're doing to de-anonymize it.

There are real threats to your privacy out there and spending time on stuff like this just adds to the noise.

<comment><USER43> Your arguments are ridiculous. Humans judge; we're good at it. Burn us enough times with false promises of privacy or outright lies and yes, we will learn to become very skeptical and untrusting. You're asking people to _continue_ trusting a system that has proven to be working against users' best interests for a long time.

The data is not sufficiently anonymized. Your public IP address is sent to Google and--the burden of proof is on _Google_ to prove this _doesn 't_ happen --there is nothing stopping Google from comparing that data to other requests they get from the same IP address (say, from your browser). Maybe Google can't personally identify me from this data, but they can sure target me with ads, which-- _shock_ \--make them money.

</comment></comment><comment><USER64> Yeah. So every site and every product on the internet has this dark pattern. Do you use google? Youtube? StackOverflow? Are you outraged by them too?

<comment><USER65> > So every site and every product on the internet has this dark pattern.

Not every site/product on the internet uses an abusive analytics platform, hell not all of them use analytics at all.

With sites visited in a browser, an extension can be used to block access to abusive services such as GA. There is no Ghostery for the terminal.

I have no issue with them wanting to collect usage information. I _opt-in_ to Debian's package usage tracking.

If I still used Homebrew, I would have a _huge_ issue with them sending information about what packages I install to Google.

<comment><USER64> How is GA abusive? The webmaster has to explicitly permit data sharing with google. That is, the webmaster is asked if s/he wants to share data with google and the options are unchecked by default.

GA prohibits the use of personally identifiable information.

Additionally the webmaster can tell google to not store IP info, which the webmaster has chosen to this in this case.

<comment><USER65> > The webmaster has to explicitly permit data sharing with google.

Abusive to _users_. Google's whole reason for offering free analytics is to build better advertising profiles.

> Additionally the webmaster can chose to not send IP info to google,

I must have missed the memo where Google invented a way to make HTTP connections with no client IP.

<comment><USER64> This has gone full circle and honestly is quite irritating at this point.

People say that Google uses GA data for advertising, I say that this is not the case and then you just chose to ignore that. So I'm just gonna ask directly - can you show some evidence suggesting Google uses GA data for building advertising profiles or did you pull this opinion out of your ass?

Because as someone who analyses marketing and advertising data, I can tell you that I strongly believe they do not use GA data in this way. 1) They have no need to, they have better data; 2) This data is unreliable; 3) GA prohibits the use of personally identifiable information; and most important of all:

THE WEBMASTER CAN CHOSE TO NOT SHARE IT WITH THEM. If this webmaster went out of his way to tell google not to store IP information, I think it is pretty safe to assume that they did not opt-in to share the data with google AT ALL.

Apart from these technical reasons, using GA data in the way you think they do opens a regulatory risk of EPIC proportions.

But if you have some evidence to suggest that they do use it for "advertising profiles", please do share it. But if you can't and you formed this opinion because you are prejudiced, I would like to see you admitting it.

<comment><USER22> _THE WEBMASTER CAN CHOSE TO NOT SHARE IT WITH THEM_

No they can't, unless that choice means that the data never arrives at Google's servers.

<comment><USER64> Of course they can. When you sign up for GA, you get asked

Do you want to share data with google to improve our products?

Do you want to pool aggregated data for benchmarking?

Both are unchecked by default.

Or do you think that google will access the data without permission? In which case, what do you base your opinion on?

</comment></comment></comment></comment></comment></comment></comment><comment><USER66> Wish there was a way of opt'ing-out without having to set an env var for every session .. is there some brew place to put ENV vars?

<comment><USER67> That's what ~/.bashrc or ~/.bash_profile or (whatever it is for your shell) is for.

<comment><USER66> Yeah, I don't want to do that every single time I put home-brew on a machine somewhere, for every single user.

Doesn't it have its own global config? I confess that I'm too miffed by this intrusion in my privacy to be bothered to find out ..

<comment><USER67> Seeing as it's just an environment variable for your shell, look for a way to set global environment variables.

</comment></comment></comment></comment><comment><USER68> Google must have eventually hired him.

[https://news.ycombinator.com/item?id=9695102](https://news.ycombinator.com/item?id=9695102)

<comment><USER69> I'm not sure why Google would care about Google Analytics on brew if they hired him, though.</comment></comment>


Ask HN: How do you improve as a self-taught programmer? - <AUTHOR> Earlier this year I learned to code and built a janky restocking program for my business using Python and SQL. I built it by making a blueprint with the help of my partner and then learning and progressively building each part.
However, because I built it with lots of Googling, I'm not confident in the code, and I feel like I don't know what I'm doing. It works but I feel like I built it out of scotch tape and that it will break at any moment. Because I built this for my own business, there aren't any managers I could show my code to, and the programmers that I do know aren't that interested in reviewing my bad code. Every time I've shown my code to someone they look a little horrified and then very confused.
For example, for my restocking program I needed to reverse-engineer Amazon's sales rank algorithm. It required an understanding of mathematics that I lacked. I went to a hackathon to meet more programmers but most of them were front-end and not familiar with curve fitting and the regression modeling stuff.
I want to know that I am doing the right things, following best practices, and get more confident in my coding ability.
What would be the best way to get there? <comment><USER2> I'd recommend the following:

 _Clean Code: A Handbook of Agile Software Craftsmanship_ [0] is a great book on writing and reading code.

Similarly, _Clean Architecture: A Craftsman 's Guide to Software Structure and Design_ [1] is, no surprise, a book on organizing and architecting software.

 _Designing Data-Intensive Applications_ [2] may be overkill for your situation, but it's a good read to get an idea about how large scale applications function.

 _The Architecture of Open Source Applications_ [3] is a fantastic free resource that walks through how many applications are built. As another comment mentioned, reading code and understanding how other programs are built are great ways to build your "how to do things" repertoire.

Finally, I'd also recommend taking some classes. I started as a self-taught developer, but I've since taken classes both in-person and online that have been a tremendous help. There are many available for free online, and if in- person classes work better for you (motivation, support, resources, etc), definitely go that route. They're a fantastic way to grow.

[0]: [https://www.amazon.com/Clean-Code-Handbook-Software- Craftsma...](https://www.amazon.com/Clean-Code-Handbook-Software- Craftsmanship/dp/0132350882)

[1]: [https://www.amazon.com/Clean-Architecture-Craftsmans- Softwar...](https://www.amazon.com/Clean-Architecture-Craftsmans-Software- Structure/dp/0134494164)

[2]: [https://www.amazon.com/Designing-Data-Intensive- Applications...](https://www.amazon.com/Designing-Data-Intensive-Applications- Reliable-Maintainable/dp/1449373321)

[3]: [http://aosabook.org/en/index.html](http://aosabook.org/en/index.html)

</comment><comment><USER3> Read other peoples code on eg. github. Or just write code for years and years - you will occasionally be disgusted by your own code and refactor it to be more readable/logical for yourself. Over time your style will improve greatly.

<comment><AUTHOR> Thanks so much. Do you have any Github repos that you could recommend? Or tricks to finding good github repos?

<comment><USER4> You could start by googling "awesome <language>" to find lists with well- regarded projects in a given language.

</comment></comment></comment><comment><USER5> It helps to get at least a basic level of understanding of some core computer science/engineering subjects:

\- Algorithms and Data Structures

\- Operating Systems

There are more but it helps to at least learn the fundamentals of these two. If you feel up to it, there are these too:

\- Computer Organisation

\- Compilers

There are more which you could look at depending on your interests: Computer Networks, Computer Graphics, Databases, Computer Architecture, Programming Languages, Theory of Computation, Distributed Systems

Many of these can be learnt from a good online course or a good textbook

Besides these, I found it very helpful to try and contributed to big free software projects. The standards are high and you'll get a lot of feedback on your patches. If you pick a project like something by Mozilla, you'll also have bugs/tasks specifically earmarked for people who are new contributors.

I forgot to add: Reading good code really helps. However, for this, I found that the most effective way was to try and fix a bug or add a feature which leads again to my suggestion above. This way, you have a 'purpose' with which you read code and it helps navigate a large codebase.

Good luck!

</comment><comment><USER6> I'm largely self-taught (3 courses in 50 years). I think I understand the issues. To survive in this world you must understand Structured Programming and Object-Oriented Programming. There must be a concise book on this. Find it and read it.

For me, carefully reading a language manual while thinking of a specific project was hugely successful. You must thoroughly understand the language. From your uncertainty it sounds like you should review your chosen language and master it.

<comment><AUTHOR> Thank you. I'll work on finding the best books for Structured Programming and Object-Oriented Programming. What do you do when you struggle with the documentation? Is there a progression level of recommended documentation readings haha.

<comment><USER6> The documentation for applications and operating systems is notoriously uneven. The only thing to do there is to grit your teeth and work your way through it as you have done so far. Then, review what you have learned. For languages and theory, there is a wider range of books to choose from. Spend some time at the library, the bookstore, and on the web searching for something special. You are choosing the tools of your profession so take some time and choose carefully.

</comment></comment></comment><comment><USER7> My experience differs from the rest of the comments you're getting. I've benefited most from cross-pollination with _other programmers_. Pairing, working on short projects together. You can't ask a book a question when you're stuck, and a book has nothing at stake if you don't understand it (nor do you, whereas if you write embarrassing code and you know the person who's going to review it, you have a reason to up your game.)

I know way more (maybe 10x more) tools, more approaches, and more languages, than if I'd just stuck with self-taught approaches like books and tutorials. Those have some utility, but it's a very distant second.

Plus, actual people help you get better jobs (or investors) even years after you part ways with them.

In short, best practices require practices, not theory.

</comment><comment><USER8> Read up on code formatting/styling

Style your Python as well as your SQL

Cleanup field/variable naming

(i.e. for db fields I usually name fields: tablename_fieldname cuts a lot of ambiguity)

Check your application file structure, everything in one directory works whan starting out but as you increase your skills/apps/libraries you will want to organize your project directories more logically. Looking at some FOSS apps and how they organize things can help.

Anything you feel weird about - research look at other examples, stack overflow results usually gives you a variety of examples you can usually spot better methods from bad ones.

Help out others a little on forums, get shot down for your crazy methods, figure out why (done this a couple times, stings but it helped, some pros only respond to people posting bad answers)

And as other said, write, write, write, the more you write the more you will get a sense you are spinning your wheels on something or some part _could_ be done better.

</comment><comment><USER9> Do some structured learning, there's lots of free quality courses/books/videos etc you can pick up. Structured helps because it fills in any gaps of knowledge that you don't know you don't know.

Aside from that just keep doing what you're doing and revisit your old code every so often, you'll be surprised by how bad it is and you'll always find ways to improve it.

<comment><AUTHOR> Thank you. What do you think are the top 5 or 10 structured learning resources? Do you have any favorite books, courses, or YouTube channels?

There's so many resources that I get stuck in the paradox of choice. I can't try them all so I wish there was a Top 5 or 10 list like master guide to learning SQL, Javascript, master guide to programming fundamentals/building blocks, etc.

For example, if I wanted to build the front end of my program- I don't know whether I should build it in Javascript, Django, or Flask. Even when I had to figure out what sql database to use- it seemed like there were so many choices.

<comment><USER9> It gets easier with time.

For databases I recommend this book [http://it- ebooks.info/book/866/](http://it-ebooks.info/book/866/) 7 databases in 7 weeks, generally though all you need is either mysql or postgres.

For front end work I would use Javascript not python. And I would suggest, and this goes for actually everything, learn the language first NOT a framework.

Too many people do it the other way round and get stuck with mental models they can't shake.

This is a good starter on Angular [https://www.ng-book.com/2/](https://www.ng- book.com/2/) and the same style for React [https://www.fullstackreact.com/](https://www.fullstackreact.com/)

You've already taken the most important steps by building something that's useful, so don't get discouraged and just keep doing your best.

</comment></comment></comment><comment><USER10> First, congrats! You did something that others would shy away from, be proud of your accomplishment. I know a lot of educated programmers that struggle to put a system together enough to make it functional for anything other than a developers machine. You made a production system that helps your business. I am sure it is far from perfect, almost NO system is perfect regardless of who designed or built it. But if it saves you money or makes you money it is already a success.

As for learning. IME reading and experimenting is the only way to do it. Yes, structured learning will go a long way, but even than, doing is the best teacher. You'll do something and make it work than 3-4 months later look back at it and be like, OMG that is so horrible I cannot believe I did it that way. The reality is that is true for all of us when we are learning, and frankly after 20+ years I can still look at stuff I wrote say last year and be like damn, I could do better today. New grads coming out of school require a few years of experience to become proficient and honestly it isn't their education that is bad, it is just that doing is the best teacher many times. I spend a lot of time showing young devs designs and things only experience can teach you. I have also seen new grads come out and they obviously have been spending their time experimenting cause they freaking rock it from day one, so experience & experimenting is what matters.

As for selecting tools, systems etc. My advice is stick with what is proven most at this point since that will typically have the most support on places like Stack Overflow and in general forums. This will also mean you can get design ideas and assistance from books and online resources easier and faster than if you try to adopt bleeding edge tech. For databases, stay with SQL for now, postgres or mysql are both fine choices, I'd favor postgres but honestly that is personal preference. If you are in a Microsoft stack and have those tools, stick with MSSQL and Visual Studio, great tools and tons of resources. For coding, stick with common frameworks and languages, Python is totally solid. Understand too that a tool that is awesome for backend work, or computational work etc may not be the best tool for UI/Web work. For example, Python is awesome as a backend tool but I wouldn't recommend putting together Web UI's with it. You can as many teams do, but the level of effort and lack of common resources makes it harder than say using Javascript/node.js or even Ruby.

For algorithm, curve fitting, regression type stuff, don't forget to check out Khan academy, and also check out youtube there are some awesome people posting great content on there (just pay attention to recommendations here cause some youtube content is crap too).

<comment><AUTHOR> Thank you so much for your kind words and your generous advice. Hearing that it just takes months and years of practice for everyone makes me feel better. You gain confidence by doing and I just need to do more.

I'm going to stick with Python, SQL, and learn Javascript for the front-end.

I'm really embarrassed but I searched "curve fitting" on Youtube and there were dozens of videos. The internet is amazing and I need to improve my googling skills.

</comment></comment><comment><USER11> If you need tips on organizing your project, go read the Flask source code on github. Reading this code helped me improve my Python skills greatly.</comment>


Protein Order and Disorder Data for Keras, Tensor Flow and Edward ML Frameworks - <AUTHOR> https://github.com/PeptoneInc/dspp-keras <comment><USER2> If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)</comment>


Deno Manual PDF - <AUTHOR> https://github.com/asmarcz/deno-manual-export <comment><AUTHOR> Jump on the Deno hype with your Kindle and PDF version of The Manual.

</comment><comment><USER2> I get a LaTeX error:

```

Error producing PDF.

! LaTeX Error: File `unicode-math.sty' not found.

Type X to quit or <RETURN> to proceed, or enter new name. (Default extension: sty)

Enter file name:

! Emergency stop.

<read *>

l.17 \defaultfontfeatures

```</comment>


Google Chrome now works on iOS - <AUTHOR> http://techcrunch.com/2012/06/28/google-chrome-ihone-ipad/ <comment><USER2> But, Chrome on iOS will still be a "second class citizen" the way Opera mini and the other browsers on the AppStore. If you want to open a link in Chrome, you will need to copy/paste the URL, no "Open in Chrome" functionality like Safari has. For better or for worse, Apple has not opened up system-wide integration of third party apps, and I don't seem them allowing you to change your default browser anytime soon.

<comment><USER3> What's pretty nauseating about it is that it's exactly the kind of anti- competitive crap that Microsoft pulled in the first browser war, only more so.

<comment><USER4> Why do people keep bringing this up? The situations are completely different.

Microsoft bundled IE with Windows at a time where the internet was still painfully slow and it was difficult to download a different browser. They also allegedly put IE-specific APIs into Windows, giving it an unfair advantage.

However, neither of these would have been enough to convict, if Microsoft hadn't also had a monopoly over the PC. Back in those days, Windows was _the_ operating system. Linux was still new and unknown, and Macintosh wasn't a threat by any means. Bill Gates was sometimes compared to the president in terms of power and influence.

Bundling Windows and IE was an abuse of Microsoft's monopoly in the OS market, in a successful attempt to take over the browser market.

Apple has no such monopoly. Like many others have said here before, if you don't like what they do with their platform you can choose not to buy apple products. When you say they're being anti-competitive, you're implying that iOS and OSX are massive ecosystems which include meaningful competition in sub-markets that Apple is giving itself an unfair advantage in. No such sub- market exists.

<comment><USER5> > _Like many others have said here before, if you don't like what they do with > their platform you can choose not to buy apple products._

And also like many others have said before, that's not a difference. You could choose not to buy Microsoft products in the '90s. I did it. The place I worked did it. Most people and places simply _didn't_ make that choice because Microsoft seemed like a safer purchase.

Also, Apple has pretty much the same position in the tablet market that Microsoft did in the PC market. I can't remember the last time I saw someone holding a non-Apple tablet who wasn't trying to sell me one.

<comment><USER6> >Also, Apple has pretty much the same position in the tablet market that Microsoft did in the PC market. I can't remember the last time I saw someone holding a non-Apple tablet who wasn't trying to sell me one.

Rather than blindly speculating, we can look at actual facts.

Today Microsoft has 93% of the desktop OS market.[1] Considering the recent rise in popularity of both OS X and Linux I would guess that was higher in the 90s, but I have not done enough research to be sure

Apple's iOS today has 63% of the mobile market.[2] While that is still the majority it is not close to Microsoft's desktop dominance even today.

So maybe you only socialize with Apple fans but your circle does not represent the market as a whole.

[1] [http://marketshare.hitslink.com/operating-system-market- shar...](http://marketshare.hitslink.com/operating-system-market- share.aspx?qprid=8&qpcustomd=0)

[2] [http://marketshare.hitslink.com/operating-system-market- shar...](http://marketshare.hitslink.com/operating-system-market- share.aspx?qprid=8&qpcustomd=1)

<comment><USER7> You're saying that if (when) Microsoft will fall to some percentage (63%, for example) in desktop market, they can appeal anti-monopoly regulations and force IE within Windows again?

</comment></comment></comment></comment></comment></comment><comment><USER8> This is a poor decision on Google's part. The end result is it tarnishes the Chrome brand.

Chrome's features like private browsing and tab/bookmark syncing are nice, but the defining feature of the brand IMO is that it is a very fast web browser. By linking the name to an app that will always be inherently slower than Safari on iOS, the brand is lessened with no significant upside.

I understand their desire to allow Chrome desktop users to have some meaningful interop between their desktop and mobile browsers, but I think they would have been much better served by not pretending this is an actual Chrome experience (much in the way Firefox allows some interop but keeps the distinction clear).

<comment><USER9> Download it and try it out -- to me, iOS Chrome seems much _faster_ than Safari: [http://itunes.apple.com/en/app/chrome/id535886823?l=nl&m...](http://itunes.apple.com/en/app/chrome/id535886823?l=nl&mt=8)

<comment><USER10> Apple will never allow a JIT Javascript engine on any app except their own, for security reasons.

(App Store apps can't allocate pages with the executable bit set, which is a good idea really.)

<comment><USER11> While that does, technically, "matter", it doesn't _really_ matter to users. I've been using it for a few minutes and I too can confirm that it feels very, very fast. Which is all that matters. In fact, a few years ago, Mozilla confirmed that seeming faster is much nicer than actually being faster:

[http://www.johnwaynehill.com/blog/2010/06/16/perceived- speed...](http://www.johnwaynehill.com/blog/2010/06/16/perceived-speed- performace/)

The point is, the Chrome guys executed well enough on their iOS app that the inherent performance issues really don't seem to be a problem (though I've only been using the app for about 5 minutes so my opinion is limited). And it's quite a pretty app. It brings just enough of the Holographic UI to look nice without looking alien on iOS. They did well.

</comment></comment></comment></comment><comment><USER12> Can someone clarify? I thought replacing the browser (actually even stronger: rendering web content using anything but the browser) was one of the items forbidden by the app store guidelines?

<comment><USER13> _While Chrome for iOS will include a number of key features, including incognito mode and tab syncing across devices, the browser will still use Apple's WebKit-based engine required by the App Store developer guidelines. It also will lack the Nitro JavaScript engine that Apple uses to speed Safari's performance._

<comment><USER14> So, no V8 or Nitro, but Chrome/Chromium uses Webkit, so renders should be the same (just slower) right?

<comment><USER15> Well, Mobile Safari's webkit version will usually be somewhat behind the latest six-weekly Chrome release cycle.

</comment></comment></comment></comment><comment><USER9> The "Request Desktop Site" button is the killer feature for power users.

<comment><USER16> I like how it doesn't just refresh the page, but the original you requested. So if you get redirected to a mobile subdomain and check "request desktop site" you'll get the original domain. Killer!

</comment></comment><comment><USER17> It doesn't seem to let you set custom search engines, which is a bit disappointing. More options than Google, Yahoo, and Bing was one of the reasons I'd been hoping for this.

Even without that, the easily accessible incognito mode (Safari's is through the system wide Settings app), request desktop site, and bookmark sync is still worth more to me than Nitro/V8.

On the jailbreak side, Browser Changer doesn't support Chrome yet. Hopefully that will come soon.

<comment><USER18> I'd imagine custom search engines etc. will come soon. They just want to get it out there for now.

</comment></comment><comment><USER19> iOS Chrome requires iOS 4.3, while Android Chrome requires Android 4.0.

Ironically that means that 99% of the iOS users can use Chrome, while only 10% of the Android users can.

</comment><comment><USER20> The icon is similar to Gmail on iOS - "wide" black margins. Any idea why?

Everything else seems to be working just fine, not slow or anything. The omnibox is really nice.

<comment><USER21> Your icons _must_ be (rounded) squares. You can't use transparency.

<comment><USER20>
      (rounded) square side = 114px = 2*57
      tau=2pi
      area:= tau*r*r/2
      Chrome:    margin: 16px; radius: 41px = 57-16; area:=  840.5*tau
      Wordpress: margin: 12px; radius: 45px = 57-12; area:= 1012.5*tau
      Clock:     margin:  9px; radius: 48px = 57- 9; area:= 1152.0*tau
      Circle:    margin:  0px; radius: 57px = 57- 0; area:= 1624.5*tau

(Measurments taken from a screenshot on iPod touch "retina" resolution.)

So Chrome's circle area is 73% of Clock's and only 52% of the theoretical limit.

While I was playing with this I got inspired by Google+ for iOS and Metro and asked "What if it doesn't fit, but insead fills the (rounded) square?"

See for yourself. <http://biserkov.com/pics/Chrome-on-iOS-icon-ideas.png>

Blue circle radius: 21px; White circle radius: 25px

Disclaimer: I used the svg Chrome logo from Wikipedia. I'm no designer.

</comment></comment></comment><comment><USER22> Does it use it's own rendering engine or is it just interface on top of a UIWebView?

<comment><USER23> Apps on the store have to use UIWebView, which of course doesn't get the Nitro JavaScript engine.

<comment><USER24> They "have to"? I was under the impression that you had a choice of UIWebView and your own custom implementation. Are they really going to block sales of an app if it has an alternative JS engine?

<comment><USER23> You might be able to do your own JavaScript implementation, not sure, but I think actually not. (I stand corrected on this). But V8 definitely won't be permitted under the current laws, as it uses executable blocks of code in memory, which are not permitted, for security reasons under iOS.

Don't see that rule changing. Let's hope Apple let other browsers be the default though.

<comment><USER25> Isn't UIWebView a component written by Apple? Why not include Nitro in it? Why would it be a security issue on Chrome but not on Safari? Do people have access to the UIWebView source code? If not, this "security" reason is BS.

<comment><USER26> Third-party processes on iOS cannot mark data pages as executable, which is a great security feature but it prevents JIT compilers or any other technology that dynamically generates machine code. Apple's built-in apps have an exception to this security mechanism, presumably because Apple is more confident in their own security auditing of those apps. Perhaps with some sandboxing mechanism and/or code auditing process they could allow some third- party apps similar access in the future, but it's not clear whether they feel a need to.

<comment><USER25> > Third-party processes on iOS cannot mark data pages as executable

Doesn't the UIWebView do that for you? And isn't it written by Apple? Why couldn't Apple make it use Nitro? Not sure where the security risk would be.

<comment><USER26> The restriction on executable pages is enforced by the kernel at the process level. This particular mechanism won't allow for enforcing diffeerent policiees for UIWebView code running in the same process as app code. If UIWebView could run JavaScript code in a separate process like Chrome then it might be possible.

<comment><USER25> I thought Safari implemented multi-process a long time ago, not on mobile?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> So does this browser not automatically block third party cookies like the default Safari does?

</comment><comment><USER28> If it's just a WebView with JavaScriptCore, what's the point? Is tab syncing the only benefit?

<comment><USER29> Its not JavaScriptCore, its webkit (UIWebView which is non-Nitro).

Tab syncing is one heck of a benefit, I can't wait to switch. Now I'm definitely going to stick with Chrome on my desktop, even though I'd been considering going back to Firefox. Quite disappointing on Apple's part that its only in iOS 6 that Notes and Calendar will be synced with OS X, still not Safari tabs.

<comment><USER26> Doesn't Safari on iOS 6 include tab sync? [http://techcrunch.com/2012/06/11/safari-on-ios-6-to- feature-...](http://techcrunch.com/2012/06/11/safari-on-ios-6-to-feature- offline-reading-lists-smart-app-banners-photo-uploads-icloud-tab-syncing/)

<comment><USER29> Thanks, I must've missed that in the wwdc keynote. I feel better now.

</comment></comment></comment></comment><comment><USER30> Seriously though, I can't get Chrome on my Android phone because it's stuck on Gingerbread but I can if I buy an iPhone. That makes loads of sense Google.

</comment><comment><USER31> It's available now: [http://itunes.apple.com/be/app/chrome/id535886823?l=nl&m...](http://itunes.apple.com/be/app/chrome/id535886823?l=nl&mt=8)

</comment><comment><USER32> It's ridiculous that there are no debugging / console tools included. It's difficult for me to take this browser seriously as a web developer – especially when compared to Mobile Safari in iOS6.

<comment><USER18> Give them time, I'm sure they'll add that soon.

Although having to use UIWebView might constrain them.

</comment></comment><comment><USER33> I am disappointed that extensions are not supported.

</comment><comment><USER34> I've fiddled around with it for 10-15 minutes and I love it. It feels much more responsive. Switching and creating tabs are much faster.

I'm on a 3GS

</comment><comment><USER35> Does Chrome on iOS support WebGL?

<comment><USER36> Don't see how it can, as it's just a UIWebView.

<comment><USER37> UIWebViews can be configured to run WebGL, though this is not officially supported/sanctioned by Apple.

<comment><USER38> This requires calling a private API which means any app doing that will be rejected by the App Store.

</comment></comment></comment></comment><comment><USER39> The headline should read Google Chrome _Skin_ now works on iOS. For all intents and purposes, the heart of the browser, i.e the rendering and scripting engines are not running on the iPad or iPhone.

Would it be accurate to state that IE now works on the iPad if Microsoft ported the IE browser chrome(UI) to the iPad?

<comment><USER40> Note that Chrome on iOS _does_ use the Chrome networking stack, which has a lot of enhancements - including SPDY.

<comment><USER41> But it still feels slower than Safari too me.</comment></comment></comment>


The Demoscene -- an Overview - <AUTHOR> http://rhizome.org/editorial/3516

<comment><USER2> In the 90s the demoscene was really quite exciting. Second Reality was groundbreaking and opened my eyes to what was possible on our pokey old 486s (plus it was awesome to show off to your friends). Going to demo events and realising there were plenty of fellow hackers in Australia doing cool stuff, and having a chance to hack along with them was also a lot of fun. Good times.

<comment><USER3> I remember the feeling I had when Unreal came out.

I was hacking the VGA registers to optimize my bitblt to the maximum, all in assembler, and I felt I knew pretty well what was going on inside my computer. Then I ran this demo and it did stuff that I _knew_ wasn't possible with my hardware. Quite mind blowing..

<comment><USER4> <http://www.youtube.com/watch?v=vxGtPAhkEQU>

<comment><USER5> Great link. I love the part at 4:30 where it says "Apparently this is possible."

<comment><USER6> The story behind this is that there was an article in Scientific American in the early nineties featuring Clifford Pickover's procedural computer graphic images of "alien life forms". These consisted mainly of a series of spheres along a path: <http://sprott.physics.wisc.edu/pickover/high.jpg>

In the article, he said that these graphics were generated on special hardware, and that such images would be "impossible" on commodity PCs. Naturally, this chafed several people in the demoscene -- who set out to prove him wrong, in real-time.

</comment></comment></comment></comment></comment><comment><USER7> Growing up in the scene in the U.S. was quite hard. I was lucky to grow up on the East Coast where most of the little U.S. parties were in the 90s. Drove all the way up for NAID 95.

Good times.

It's been great to see the demoscene roar back to life these last few years....some amazing stuff to watch on <http://www.demoscene.tv/>

</comment><comment><USER8> Tl;dr: European teens and 20-somethings who sprinkle 68000 opcodes on their Müsli each morning create elaborate real-time visual hacks and general awesomeness -- now, thanks to the demise of the Amiga and the rise of (not-so) DirectX, considered something of a lost art.

Sad, really. Nothing else -- not even the game projects I work on and don't quite finish -- comes real close to the raw visceral fun of programming, the reason why I got so deeply involved with these infernal machines in the first place.

</comment><comment><USER9> "The demoscene" can also refer to the largely overlapping subculture of tracker [1] musicians. There're a few well known electronic artists still using trackers today, like Venetian Snares [2], Bogdan Raczynski, and enduser.

[1] <http://en.wikipedia.org/wiki/Tracker_(music_software)>

[2] <http://www.youtube.com/watch?v=hjAwxG3q3Yo>

<comment><USER10> Who could forget FastTracker 2! I was about 13 or 14 when I discovered it. There is something intoxicating about composing with the computer in that way. Granted, there was and are a ton of corny .mod files out there but I feel like mod tracking is where I fell in love with the aesthetics of editors and code.

Thanks so much for bringing this to attention! :)

<comment><USER11> FT2 and Impulse Tracker were amazing pieces of DOS software. Impulse Tracker somehow eventually supported DirectSound audio output when running in a Windows 98 DOS box, IIRC. IT did all of its graphics in pure text mode by reprogramming the VGA card's font table.

</comment></comment></comment><comment><USER12> I used to help organise the (very small) demo scene in South Africa many years ago and it was so much fun. I recently watched some old classic favourites of mine and dang if the bug didn't bite me again. So now I'm working on my real instrument synthesizer that must fit into 16k. Pure asm, fourier transforms, impossible tricks - this is coding at it's most fun.

</comment><comment><USER13> There's something really beautiful about demos and the demoscene. I'm glad they're being preserved and seen as an art form, was afraid that they'd be forgotten.

<comment><USER7> The scene is remarkably strong today. It kinda died off in the late 90s but has really seen a strong resurgence I think. There's some amazing new stuff coming out these days.

</comment></comment><comment><USER14> The problem is that everyone doing demoscene stuff got jobs and is getting paid for it now. Look at crysis, etc. No one cares about programming dick waving contests anymore, it's all about who can get a job at Microsoft. If it doesn't benefit your resume, no one cares for it. I personally became a computer science major because I wanted to write demos. After about four years is when I really started to get it as far as graphics goes and even though now I have an idea how effects are done, I feel like there's still so much to learn to keep up with what guys in these demo groups like farbrausch and fairlight do. The learning curve for doing this kind of stuff is pretty high. Not only do you have to know programming, but some kind of library like DirectX or OpenGL, shader languages and all the linear algebra behind the effects.

<comment><USER15> I got my first paid programming job without having studied, without any references but a video tape of one my old Amiga demos.

</comment></comment><comment><USER11> I was very pleased to find recently that the Kosmic/KFMF music archives started working again, after a number of years of being down. I was considering writing some software to brute force fix the CR/LF translation issues in the web.archive.org copy of the .zip files before I saw the return of the original archives.

I still get nostalgic when I think about Future Crew's music and demos, too. I believe Skaven of Future Crew put up a big archive of FC music a while ago, though Purple Motion was my favorite FC musician. Second Reality running on a 486 absolutely blew me away -- alpha blending, 3D, realtime mixed music, 60fps.

</comment><comment><USER16> Block Party is the longest-running demoparty in North America, ever. It's been running four years. Kinda sad. You can see what the North American demoscene is like: archived live video from BlockParty 2010 part 1 <http://www.ustream.tv/recorded/6264966> part 2 <http://www.ustream.tv/recorded/6267675>

</comment><comment><USER17> Some recent PC demoscene stuff: <http://www.youtube.com/watch?v=ON4N0yGz4n8>

<comment><USER18> Farbrausch's "debris." shows just how much you can pack into 200k (including the audio, btw). [http://www.youtube.com/watch?v=wqu_IpkOYBg&fmt=22](http://www.youtube.com/watch?v=wqu_IpkOYBg&fmt=22)

For the webby crowd: "Masagin" features animated, recursive SVGs with antialiasing and motion blur at high rez and high frame rate. [http://www.youtube.com/watch?v=sbQhgEJuExY&fmt=22](http://www.youtube.com/watch?v=sbQhgEJuExY&fmt=22)

Or, you could download both demos from <http://pouet.net/> and run them on your own PC.

<comment><USER19> Two more by Farbrausch

the.popular.demo <http://www.youtube.com/watch?v=YBpo5GHcmsE>

and Candytron (64K) <http://www.youtube.com/watch?v=svGk_pF67gc>

For some newer releases

blunderbuss by Fairlight <http://www.youtube.com/watch?v=ezltebzdgjI>

is very different is style but still very cool and two post about the particle system behind the demo <http://directtovideo.wordpress.com/2009/10/06/blunderbuss/> [http://directtovideo.wordpress.com/2009/10/06/a-thoroughly-m...](http://directtovideo.wordpress.com/2009/10/06/a-thoroughly- modern-particle-system/)

Elevated by Rgba & TBC <http://www.youtube.com/watch?v=_YWMGuh15nE>

is a great example of what people can do in 4K, and they even have a presentation about the technical details [http://iquilezles.org/www/material/function2009/function2009...](http://iquilezles.org/www/material/function2009/function2009.htm)

and

State of the Art by Spaceballs <http://www.youtube.com/watch?v=c5kuYfTCGLg> is a highpoint of the amiga scene

(edited to add, which I should have clicked on the link to see it had already been embedded)

</comment></comment></comment><comment><AUTHOR> further reading ---> <http://rhizome.org/editorial/tag.php?tag=demoscene></comment>


Simple Hierarchical Tagging - <AUTHOR> http://inkblots.markwoodman.com/2006/02/01/simple-hierarchical-tagging/

<comment><USER2> A post from 2006? Anyway, a long time ago Delicious quietly implemented experimental support of structured tags delimited by colons. You can tag things "foo:bar" and "foo:baz" and then see all of those bookmarks by looking at "system:has:foo". An example: <http://www.delicious.com/britta/system:has:via>

Flickr uses colons too and calls these structured tags "machine tags": <http://www.flickr.com/groups/api/discuss/72157594497877875/> \- if you're interested in that kind of thing, Aaron Straup Cope is the person to read more from: <http://www.aaronland.info/weblog/>

<comment><USER3> Those aren't really hierarchical That's more a way to pretend metadata is a tag.

Way back, delicious.had hierarchical tags. If you tagged something as foo/bar, it would be retrieved in a query for foo.</comment></comment>