Keep a Changelog - <AUTHOR> http://keepachangelog.com/ <comment><USER2> This project "visual changelog" usually blow my mind at every release. [https://www.qgis.org/en/site/forusers/visualchangelog216/ind...](https://www.qgis.org/en/site/forusers/visualchangelog216/index.html)

And this is exactly the opposite of a git commit only changelog. They put great effort in it so that everybody wait for it eagerly, and it might one of the reasons they got lots of sponsors and users donations.

<comment><USER3> Same with the Unreal Engine Release Notes ([https://docs.unrealengine.com/latest/INT/Support/Builds/inde...](https://docs.unrealengine.com/latest/INT/Support/Builds/index.html)). Every time it is linked somewhere I just have to look at all the new shiny features despite not having any interest in using it at the moment.

<comment><USER4> Holy hell! This is amazing! I just read both changelogs (QGIS and UE) and found them very interesting even though I'm not doing anything with either of them. I can imagine making such visual logs is much more time-consuming than just browsing through commit logs since last release and retyping commit messages in plain English, but the potential of such visual logs to actually get read and understood is much greater.

My question is - is there any tool that one could use to quickly capture a few seconds of a selected region of the screen as a video/GIF? Preferably one that would subsequently allow to throw away some frames from the beginning and ending. Such a tool would speed up the process of creating visual changelogs quite a bit.

<comment><USER5> Yes, LICEcap is good for this: [http://www.cockos.com/licecap/](http://www.cockos.com/licecap/)

<comment><USER6> The age of animated gif files is over. You want something that creates webm videos, like VLC or ActivePresenter.

<comment><USER7> Its not over until I can embed video in github markdown files. ;)

<comment><USER6> You can stop using github whenever you want to.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> The Debian advice for changelogs:

[https://www.debian.org/doc/manuals/developers- reference/ch06...](https://www.debian.org/doc/manuals/developers- reference/ch06.en.html#bpp-debian-changelog) [https://www.debian.org/doc/debian-policy/ch- docs.html#s-chan...](https://www.debian.org/doc/debian-policy/ch- docs.html#s-changelogs)

</comment><comment><USER9> I'd argue that the goal of creating a good, useful changelog can be one of the forcing motivations to establish a working process for commit documentation and great, informative, useful commit messages. If that means git log gardening after the fact, then so be it, but good documentation (of history here) is always worth the work.

The activities of programmer-archaeology are always made so much easier if you have a screed of history for each area of interest in the codebase. Sadly that's still rare, even in groups that do the necessary work to maintain their documentation for the current state of HEAD. There are many times when history matters, is relevant, and those who do not learn it are doomed to repeat it - or at the very least build elaborate theories to explain what happened in the past in order to understand how the present came to be where it is.

The great changelog built on great commit history is probably hard to do outside of a small, focused group. On the other hand, the pull request process has emerged and developers have embraced that level of work, so it feels like it should be achievable.

<comment><USER10> I agree. Maintaining a changelog can be certainly be more difficult in large projects (although I don't think it has to be). I do think changelogs are a manifestation of the maintainers' care with regard to end-users. It signifies that they don't simply focus on the quality of the project itself but also how the project's evolution is perceived and understood by end-users and fellow contributors.

It's strange to me that anyone would consider especially open source software as something so good and obviously beneficial that the archeology you mention would be a fact of life for end-users. It betrays a misconception about the value of software in a vacuum: without tests, code documentation, interface design, and change documentation (a changelog).

The best algorithm is useless without proper tests verifying how it functions against real input; it's obscure without good documentation highlighting its quirks and design decisions, and if it evolves without clear explanations within a changelog then the changes in its behavior will remain mysteries to end-users as long as they don't go deep inside the code to understand how it worked before and how it works now.

I've had to do this kind of programmer-archeology on numerous production dependencies (transitive or otherwise) in the past and the resulting frustration is very much the fuel that motivated me to make keepachangelog.com

</comment></comment><comment><USER11> The changelog on a lot of popular apps on the Play Store has just become a place to promote stuff, not show off whats new.

</comment><comment><USER12> Agreed, in the last few months I've been using Danger ([http://danger.systems](http://danger.systems)) to ensure that the OSS projects I work on ( CocoaPods/CocoaPods, artsy/eigen, artsy/emission ) all have consistent Changelogs. Works out nicely.

</comment><comment><USER13> This is fine for smaller, low-velocity projects, but tends to result in merge conflicts in high-velocity projects.

An alternative I've seen work well is to put changelog= comments in the patch descriptions and automatically gather them at release time.

<comment><USER14> I don't see how; presumably a CHANGELOG should only be updated as part of release engineering, not during development. It's a document owned by whoever bumps the version number.

<comment><USER15> Speaking in the context of an open-source project:

Writing a changelog progressively is the only way you're likely to end up with it being good. Consider the whole point of the "unreleased" section, too. If you put it off, you'll just keep on putting it off, and when you finally do make a release you're unlikely to put enough effort into the changelog.

Your changelog will be better if you write it at the time of development, not release. To be sure, you'll want to check over it at release time or even before then, but there's no rule against amending the changelog at any time.

</comment></comment></comment><comment><USER16> I hope this is different from what this article is advocating, but I worked on a project that kept per-sub directory changelogs that were intended to track every commit to every file in a directory. Our tech lead basically had to nag everyone to write them, and it felt like a big waste of time (Note, this was not an open source project, and the article specifically speaks to OSS.)

<comment><USER10> Yeah, this is definitely not what I'm advocating. That sounds insane to me. Several contributors have pointed out that these conventions can be useful beyond the realm of open source so I think we've tried to make it a bit more general. It is definitely based on open source conventions though.

An open source project like Rails has different components all developed within a single repository although they're packaged up independently for release. Each different component has a root level changelog that documents its changes and there isn't a centralized changelog for all of Rails. In some ways it's problematic because you can't see a merged changelog for all core components of Rails but it's also useful when you're only worried about changes to the ORM component since you'll only see changes pertaining to it within its own changelog.

In my mind a changelog is a root-level concern for a single piece of software, regardless of how many isolated components it's composed of. Basic tooling should be able to centralize each changelog (as long as versions are synchronized, but that's another issue) and ideally you should be able to filter by sub-component.

This is definitely not something we've created any guidelines for yet. So if you have any thoughts on the matter, feel free to suggest them: [https://github.com/olivierlacan/keep-a- changelog/issues](https://github.com/olivierlacan/keep-a-changelog/issues)

</comment></comment><comment><USER17> There's a beginning of an automation library for [http://danger.systems](http://danger.systems) in this vein, [https://github.com/dblock/danger-changelog](https://github.com/dblock/danger- changelog).

</comment><comment><USER18> Someone should send this to the guys who maintain the google internal apps like gmail and google now.

<comment><USER4> Or Skype, which just tells you something like "we've updated your Skype application, which among other things means less bugs and improved performance".

</comment></comment><comment><USER19> This has cropped up once or twice before. Previous discussion from February 2015: [https://news.ycombinator.com/item?id=9054627](https://news.ycombinator.com/item?id=9054627)

<comment><USER10> Sure thing, but it's evolved quite a bit since then. We've introduced a versioning system a few weeks ago, and we now have 8 translations other than English thanks to contributors, so I'd wager it's newsworthy. :-)

I've covered these recent changes in a post that didn't quite make it to the front page recently: [http://olivierlacan.com/posts/logging-changes-all-over- the-w...](http://olivierlacan.com/posts/logging-changes-all-over-the-world/)

<comment><USER19> True! I mainly posted the previous discussion because I like to go back and look at the comments and see how it's evolved. Thanks for sharing the post :)

</comment></comment></comment><comment><USER20> This is right inline with a 'relnote' project I was working on. Mapping git logs to customer facing messages. Multiple commits/merges with terse engineer speak rewritten by English majors to concise sentences.

</comment><comment><USER21> Do not keep a ChangeLog; it is redundant w.r.t. your git commit messages and causes useless merge conflicts when you cherry pick, rebase, etc.

Do use ChangeLog format for commit messages!

<comment><USER22> It sounds like you're confusing what the author is describing with GNU "Change Logs" ([https://www.gnu.org/prep/standards/html_node/Change- Logs.htm...](https://www.gnu.org/prep/standards/html_node/Change- Logs.html#Change-Logs)), which track every source file change and are indeed redundant with `git log` (or any other version control system record).

This is calling for more use of what GNU calls a "NEWS file" ([https://www.gnu.org/prep/standards/html_node/NEWS- File.html](https://www.gnu.org/prep/standards/html_node/NEWS-File.html)), which is what virtually _everybody else_ means when they say "changelog". Per the page itself:

> Why can't people just use a git log diff?

> Because log diffs are full of noise — by nature. They could not make a > suitable change log even in a hypothetical project run by perfect humans who > never make typos, never forget to commit new files, never miss any part of a > refactoring. The purpose of a commit is to document one atomic step in the > process by which the code evolves from one state to another. The purpose of > a change log is to document the noteworthy differences between these states.

> As is the difference between good comments and the code itself, so is the > difference between a change log and the commit log: one describes the why, > the other the how.

<comment><USER23> I tend to agree with both of these comments, that git commits are a very acceptable (and actionable change log) and that git log diffs are full of noise. That doesn't invalidate them as change logs though.

I've got a command that will add everything that has changed in a directory tree except for ignored files, into a commit. And it is very helpful to write in the commit exactly what you're doing . You do this once a day and you've got an excellent log not only of how you have changed things but you can hop back to a previous commit and reset to a previous day.

Now when it comes time to create a pull request ...

Then you can go back and rebase and squash from the original start, and things into a commit history that is explainable and readable for the project. The only thing that would make this even more seamless if you could do a split- squash where you take a commit, "ungroup" it into its individual changes, then put the changes into their respective commits, and then squash those with the commits for what something should be at the end point.

<comment><USER10> git commit's -v or --verbose flag allows you to see a diff of your currently staged changes so that sounds somewhat similar to your command.

I find that seeing the exact changes you're about to commit does lead to more detailed git commit messages, although the maximum length of most "properly" written commit message titles (50 characters) tends to hinder the quality of commit message titles as entries in a changelog. They're often very high level summaries of introduced changes and it's common for people to focus on the change at hand — not on its impact on end-users — when writing a commit.

Again, this all goes back to the intended audience for commit messages compared to change logs. If the end users of the projects you work on diligently read every commit in the project history, then I dare suggest you're in a rare and privileged situation. I don't expect end-users of most open source software to be satisfied with either the high-level nature of commit titles, or their minutia. This leads me to think that keepachangelog.com needs to gather more examples of the of changelogs I advocate for. It seems that a surprisingly small number of people have encountered them.

Rebasing and squashing commits to clean them up to be changelog-worthy does not solve the 50-character issue with conventional commit titles I mentioned above. It also doesn't solve for situations with collaborative pull requests or branches. That is, unless there's a clear process for squashing and rebasing being done by a single person at the very end of the project. I think it's more realistic to expect a single file changelog to be regularly updated (through an Unrealeased section) as changesets are being introduced prior to a release and to eventually update this same single file when the group of changesets is about to be released under a new dated version release.

<comment><USER24> > _I don 't expect end-users of most open source software to be satisfied with > either the high-level nature of commit titles, or their minutia._

In my experience, they aren't. They want a top-level view of why/if they should upgrade.

In my dayjob, when preparing a release, we use tools to dump the git commit messages into the head of the CHANGELOG, then edit it back into user-facing text. We omit changes that are not user-facing (eg. 'gem you've never heard of upgraded to 0.4.4') and focus on changes they care about (eg. 'Redact credentials from URLs in a cached buildpack's output'). See for example our Ruby buildpack CHANGELOG[0].

We build our own binaries for buildpacks. So in addition, for our Github releases, we take the CHANGELOG entry and append a table of supported binaries and default versions[1]. These show up in the CHANGELOG _only_ if we add or drop a core binary.

We work out of Tracker, so we link to Tracker stories, bugs and chores for every mentioned in the CHANGELOG or release notes.

[0] [https://github.com/cloudfoundry/ruby- buildpack/blob/master/C...](https://github.com/cloudfoundry/ruby- buildpack/blob/master/CHANGELOG)

[1] [https://github.com/cloudfoundry/ruby- buildpack/releases/tag/...](https://github.com/cloudfoundry/ruby- buildpack/releases/tag/v1.6.22)

</comment></comment></comment></comment></comment><comment><USER25> Org-mode is specially useful for this task. It is plain-text, has built-in support for sections, dates, arbitrary tags, and can even export to Markdown (or HTML, or Latex) if you really want that. Besides other wonderful features such as Babel.

<comment><USER10> People have mentioned Org-mode repeatedly throughout the years since I first wrote down the thoughts that became keepachangelog.com but I'll be honest, Org-mode doesn't seem to be broadly used in the greater open source community whereas Markdown (or just plain text) CHANGELOG.md, NEWS.md, History.md, and others are far more common.

There's surely personal bias at play, but I'm far more concerned with people keeping a changelog in the first place to worry too much about how exactly they do it. If Org-mode is what they go with, fine, but what we're facing right now is hordes of open source projects that people end up taking on as direct or transitive dependencies and which do not document their evolution in any meaningful way.</comment></comment>


Ask HN: As a developer, how do I work with freelance designers? - <AUTHOR>

I am working on a small start up, and I am nearing the point where I need to hire a freelance designer to add some finishing touches to the web application. This is my first production application, so I am quite nervous about just about everything.
How do I work with a freelancer though - when so much of my code contains sensitive information or information a designer doesn't need to see. On the other hand, I happen to be using Django to power the backend, and I don't believe there is a way to have him work locally without setting up a development server.
What do you guys do? Should I just make sure the contract clearly lays out he cannot use/share backend code in any ways? Do I need to change all my backend API keys and sensitive information after working with him? Or should I cross my fingers and hope my payment API account doesn't get hacked 6 months from now... <comment><USER2> You're payment API doesn't have a sandbox mode? Maybe that will work? Short of that, maybe you could create a fork of your application for the designer that just returns payments_processed=true and doesn't talk to the payment API at all.

<comment><AUTHOR> Most of the APIs I'm using do have a test/sandbox mode of some sorts, or I could disable them in a way the designer could still work on the application. If this is the norm in working with freelancers I am fine with it. It just seems as the application grows, it would be substantially more difficult to make sure everything is 'freelancer proofed'.

That's why I brought up the contract as well. Not sure if this is a good cautionary step to take, or if I should do it in addition to putting APIs into 'test/sandbox mode'.</comment></comment>


Are software patents the "scaffolding of the tech industry"? - <AUTHOR> http://arstechnica.com/tech-policy/news/2011/08/are-software-patents-the-scaffolding-of-the-tech-industry.ars

<comment><USER2> Patents may or may not be a problem in the software industry, but in the rest of the economy they're generally a beneficial thing.

The Patents on Back Rack and Safety Rack products mean they're produced in a plant in Oakville, Ontario plant, not produced in China or South Korea. They have cheap competitors, but trademark and a patented design mean they're the ones used by companies.

People need to look a little wider than their narrow little hole in the dirt when they start saying we should abandon entire systems that have helped support the little guy with a good idea in almost every industry in the existence except software.

<comment><USER3> What's so great about producing something in Ontario?

</comment></comment><comment><USER4> Maybe the hangman's scaffold.</comment>


Crackulous developer wants people to stop pirating his App Store piracy app - <AUTHOR> http://i.gizmodo.com/5144751/crackulous-allows-for-app-store-piracy <comment><USER2> That's not the real Crackulous developer. Crackulous is free and open source. This message is from their forums:

 _The quick and dirty: Crackulous was developed right here on our forum, on our SVN server. Anyone selling Crackulous or claiming to be the developer is trying to scam you. The official Cydia repository to get Crackulous is<http://cydia.hackulo.us>. Crackulous is and will always be FREE SOFTWARE. It has had NO OTHER developers but SaladFork and Angel, with contributions from Uncon_

<http://hackulo.us/forums/index.php?showtopic=12570>

<comment><USER3> The main site (<http://cydia.hackulo.us>) is a scam too. It says: "Please wait as cydia loads!" and then "Not loading? Get help at [http://hackulo.us!"](http://hackulo.us!). But of course it'll never load: it's a static page without javascript or a meta refresh tag!

<comment><USER2> <http://cydia.hackulo.us> is not a site, it is a repository for the iPhone's package management system (Cydia). The site it links (<http://hackulo.us/>) has a redirect to <http://hackulo.us/forums/>.

</comment></comment></comment><comment><USER4> I'm kind of annoyed that Gizmodo took the link down. It's just a Google away, but still, it would be a nice token effort to stand up to the hypocrisy.

</comment><comment><USER5> Ha! This is honestly going into a comedy I'm writing about startups. This is Arrested-Development-level hypocrisy.</comment>


Ask HN: My professor thinks he solved Riemann Hypothesis. how to validate it? - <AUTHOR> https://www.researchgate.net/publication/325035649_The_Final_and_Exhaustive_Proof_of_the_Riemann_Hypothesis_from_First_Principles
I am not a mathematical expert but few of the mathematicians we had access to have confirmed that this could be a possible proof.
So I wanted to ask how do we get this proof validated the by the larger scientific community?
Dr. Kumar has used the properties of primes and analytic continuation and had a new way of handling slowly converging series and was able to use (at the crucial point) concepts borrowed from Donald Knuth regarding random numbers and random sequences. Knuth had said that for any sequence to be truly random it has to be non-cyclic. The proof required to show that a sequence of +1's and -1's , obtained from the prime factorization of the infinite sequence of integers, had to be shown to be random and to asymptotically behave like the tosses of a coin.
Previous discussions: https://news.ycombinator.com/item?id=12889009 <comment><USER3> The proof is flawed: [https://empslocal.ex.ac.uk/people/staff/mrwatkin//zeta/herri...](https://empslocal.ex.ac.uk/people/staff/mrwatkin//zeta/herrington_eswaran_2018.pdf)

<comment><USER4> Source: [https://empslocal.ex.ac.uk/people/staff/mrwatkin/zeta/RHproo...](https://empslocal.ex.ac.uk/people/staff/mrwatkin/zeta/RHproofs.htm)

<comment><AUTHOR> Looks like this is responded by Raghavan and this is what I had seen on research gate comments

Dr. Kumar's response to the above: I certainly know that the lambda - <USER2> is fixed and unalterable because each lambda(n) is obtained by factorizing n into prime factors and then defining lambda(n)=+1 if there are even factors else, lambda(n) =-1 if n is a prime or has odd prime factors.

In the paper for very long sequences, the lambda-sequence is treated as one instance of a hypothetical random walk. If this analogy is true then the magnitude of L(N), which is the sum of the first N terms of lambda(n)'s, (where N is very large) can be likened to the expected distance travelled by a random walker in N steps which is given by C .N^(1/2) (see S. Chandrasekhar(1943)).

However, for this analogy to be really meaningful and accurate, one must prove the lambda(n), for large and arbitrary n, must satisfy the criteria: (i) equal probabilities of being +1 or -1 , (ii) the lambda-sequence has no cycle and (iii) unpredictability.

In the paper I provide mathematical proofs for all the above criteria, after which one can deduce the asymptotic expression for L(N) as C. N^(1/2+e). We then invoke (i) Littlewoods Theorem 1 (proved in the paper) and then (ii) use Khinchin (1924) and Kolmogorov's (1929) law of the iterated logarithm, for evaluating the bound 'e' and to show that e tends to zero as N tends to infinity, thus finally proving R.H.

One last comment: Herrington quotes Borwein's statement as an "Equivalence to RH", in actuality the condition stated by Borwein (2008) is only a necessary condition for RH to be true. The additional criteria (above) needs to be satisfied and hence need to be proved as done in my paper.

<comment><USER3> Here is Herrington's response to Raghavan: [https://empslocal.ex.ac.uk/people/staff/mrwatkin//zeta/herri...](https://empslocal.ex.ac.uk/people/staff/mrwatkin//zeta/herrington_eswaran_2019.pdf)

I have a degree in mathematics so after brief research, so I am inclined to believe the proof is indeed flawed, especially if it addresses a problem as high-profile as RH. There is a good point in his reply which actually applies to academia everywhere:

"Assuming this media report is accurate then it raises an issue mentioned in Note 1 which is that Eswaran 2018 contains no evidence, such as an acknowledgement, of independent expert review. As a professor, presumably with contacts in academia, and also with many senior scientists approving the proof, it seems reasonable to assume that Professor Eswaran could have found at least one suitably qualified person to review the proof. "

Media attention cannot be a substitute for rigorous peer review.

</comment></comment></comment></comment><comment><USER5> So the previous discussion link is from 2016. Why does this smell like a desperate attempt to get mathematical fame? Why does this post smell like a "For your consideration" promotion? The previous discussion also talked about what a quirky guy the prof is, as if trying to make it about personality.

<comment><USER6> What is a 'For your consideration' promotion? I feel like I've heard that term before but can't quite place it.

<comment><USER5> When studios send DVDs (Blurays?) of their movies to members of the Academy (who vote who gets the Oscar), they say "For your consideration", in the hopes the member watch and like (and vote for) their movie.

</comment></comment></comment><comment><USER7> Has it not been submitted to a journal and/or conference? Typically these things are peer-reviewed and tested over time, no?

</comment><comment><USER8> Your professor will know how to get the proof validated. Post it on arxiv and submit it to a good journal like he would for any other paper.

<comment><AUTHOR> its there on arxiv. [https://arxiv.org/pdf/1609.06971v4.pdf](https://arxiv.org/pdf/1609.06971v4.pdf)

</comment></comment><comment><USER9> Modestly named "The Final and Exhaustive Proof".</comment>


Mystery of Deadly Outbreaks in India Is Solved - <AUTHOR> https://www.nytimes.com/2017/01/31/world/asia/lychee-litchi-india-outbreak.html?_r=0 <comment><USER2> Malnourished children eating a fruit (lychee) without any previous meal could get poisoned and have a intense decrease in blood sugar levels.

That make me wonders on how many religious practices, superstitions, etc., still exists in modern cultures, transmitted mouth-to-mouth, due to some misunderstanding of the true mechanisms of some occurrence in the past?

I can easily see that a "children can't eat fruits without eating some cereal" could have come as religious belief, from a long past. And it would be effective for hundreds of children.</comment>


How Artificial Intelligence and Robots Will Radically Transform the Economy - <AUTHOR> http://www.newsweek.com/2016/12/09/robot-economy-artificial-intelligence-jobs-happy-ending-526467.html <comment><USER2> Oh, my eyes!

Would the submitter or a mod please title-case the submission?

<comment><USER2> Thanks!</comment></comment>


Opera 11 goes final - <AUTHOR> http://my.opera.com/desktopteam/blog/2010/12/16/opera-11-goes-final <comment><USER2> The Best. Been a big fan of Opera browser for a long time now. There was a minor speed bump of bugs when 10.x first came out but starting at 10.10 it has been top notch. Once you learn all of Opera's nuances using any other browser feels outdated and not as well thought out for a user. Speed is right there with Chrome, built in mail/rss and now with the 11.x extensions there is no more excuses to try it.

The little browser that could.

<comment><USER3> "built in mail/rss"

I was an Opera evangelist for many years but all the extra bundled apps I never use finally pushed me to chrome.

<comment><USER4> The RSS is good, the Opera mail is good... the IRC and bittorrent, on the other hand, are not very good at all, which is sad, because it would be very nice if they were!

</comment></comment></comment><comment><USER5> After a quick look-over, I'll be sticking with Chrome due to two small UX issues that Chrome does exceedingly well:

1\. Despite both having "tabs on top", in Chrome tabs extend all the way to the edge of the screen. In Opera, there's a small unclickable border area. This is a basic, basic Fitts' Law mistake that makes it so much harder to click tabs.

2\. Chrome does that thing where when you close a tab, the "close" button of the next tab ends up _exactly under your mouse pointer._ This is such a nice and natural feature that you forget there was any alternative. Firefox and Opera both get this so wrong.

<comment><USER6> Opera lets you bypass the anachronistic 'tab' metaphor completely:

<http://imgur.com/XuMkx.png>

Use Ctrl-Tab to switch between tabs the same way you Alt-Tab between windows. Close a tab with Ctrl-F4, similar to closing windows with Alt-F4.

Firefox with Vimperator does even better - t to open a tab to a url or search string, d to close a tab, Ctrl-n and Ctrl-p to tab between them.

Of course, Chrome's Vim extension replicates similar functionality. Either way, reducing mouse-keyboard context-switching is useful.

<comment><USER5> A trackpoint is my way of reducing mouse-keyboard context switching :)

</comment></comment></comment><comment><USER7> This is a great browser, and the competition is always good for the users.

For me it was easier when the only choice was hating IE and going for Firefox, right now i struggle between my emotions to use one or other wonderful browser as my main one...

When firefox 4 comes its going to be even harder...

<comment><USER6> Heh, same. I've been cycling b/t Opera, Chrome, Chromium, and FF for years now. Right now I'm stuck on FF b/c Vimperator is so awesome, but now that Opera 11 can have full-fledged extensions, that might change. Or, maybe not since FF4 is shaping up to be amazing too.

</comment></comment><comment><USER8> This is kind of off topic, but the Opera system tray icon drives me nuts and it is probably driving someone else nuts too. For whatever reason, the /notrayicon switch does not work for me after I upgraded. I'm not sure if previous versions have this, but in this one you can disable the tray icon via opera:config.

Paste opera:config#UserPrefs|ShowTrayIcon in the address bar, uncheck, save and restart.

<comment><USER9> Every OS I have ever used has a way to hide system tray icons. Windows has had this since 98, both Gnome and KDE have it, and OSX has it. What is the problem exactly?

And how are you so annoyed by a 16x16 pixel red O? Please never try to drive in NYC...

<comment><USER10> It's annoying to me too. I can't just hide all my tray icons because I need some of them, and the red O makes my desktop/theme look crappy since all the other icons are white (using GNOME with Orta theme + Faenza icons).

<comment><USER9> Yes, I understand that. You can configure the system tray to hide icons from specific programs. That way you have every icon except for Opera. The program need not include an option to hide it.

Right click > Properties

<comment><USER11> There is no "properties" setting for the Notification Area applet in Gnome (at least in version 126.96.36.199, which is what ships with Fedora 14), which is what the commenter you responded to said he was using.

<comment><USER9> You should submit a bug report.

</comment></comment></comment></comment></comment></comment><comment><USER12> Install Opera 11, visit intranet page, get prompted for password.

Search NTLM in config, it's got one option which is enabled.

(That Chrome for business blog post yesterday got me to retry Chrome which supports NTLM automatically by default).

Close opera, uninstall. Uninstall prompts that it crashed while editing preferences (it didn't) and offers to send a crash report.

I wonder if I could get a job as a software tester? I always hit bizarro behaviour just trying to use software normally.

<comment><USER6> As soon as you became a tester all the bizarro behavior would probably stop. I know this from experience :)

</comment></comment><comment><USER13> I switched to Chrome a couple weeks ago, I really love Opera and have used it for years, but it reached the point where it would take a full minute or two just to end the process after I closed the browser and 30+ seconds just to open it the first time. Drove me nuts, only happens on my desktop at least.

<comment><USER14> I recently switched to chrome from firefox as well for a similiar reason. Browsers are just getting too bloated. Although i just looked at their video demonstration of tab stacking which looks really cool. The problem is opera was even slow in the video which doesnt really make me want to use it.

</comment></comment><comment><USER15> I've been a fan since Opera fit on a floppy disk (3 or 4)? It has always been the fastest browser, except for the stinch in 9 and parts of 10. I've always had it installed and would use it along Chrome, FF, Flock. Eleven is just wonderful. Its fast as lighting, you can try this test, load up like 20 pages and close it. Now open it again, no 30 seconds of waiting for it to crunch it all up like in FF. Amazing! It also seems to respond more like it did from 6 and below where back mean truly instant redraw. Bravo Opera. Now we just need some extensions...

</comment><comment><USER16> After upgrading, it kept freezing every time I started it. Turns out it was choking on the Google Body Browser tab. Quickly switching to Body Browser and closing the tab before it could load prevented it from freezing again, but it's not a permanent fix, or something I should be expected to do every time a tab becomes unresponsive. There ought to be a way to detect and kill unresponsive tabs.

</comment><comment><USER17> Related:

<http://news.ycombinator.com/item?id=2011423> \- opera.com - no comments

<http://news.ycombinator.com/item?id=2011357> \- arpitnext.com - no comments

</comment><comment><USER18> Be careful: I just installed it and it decided it will be my default browser and take over the file associations (.htm, .html, .xhtml) and protocol associations from Firefox.

I thought we left this kind of crappy warfare in the late 90s.

<comment><USER19> In the first screen you have to click on "Options" to change this.

I like the streamlined installation process, but the options are indeed very easy to overlook.

<comment><USER18> Thanks. I clearly missed that.

The after-the-fact way is to use the Windows defaults tool, a Good Thing to emerge from the defaults wars.

</comment></comment></comment><comment><USER20> Indic fonts are broken in both on Linux and Windows versions.

Disappointment :(

back to good old Firefox

</comment><comment><USER21> I want to try and love Opera, but every time I try it out something goes wrong. Now, installing on Ubuntu I get:

"Error: Breaks exisiting package 'opera-static' conflict: opera ( )"

<comment><USER22> Try removing opera-static first.

<comment><USER14> Did you uninstall opera first?

<comment><USER23> you shouldn't need to do that manually. That's what package managers are for: handling updates and uninstalling old software in favor of the new version.

</comment></comment></comment></comment><comment><USER24> First bug so far: opening yahoo mail hyperlinks stalls forever in the current tab. It is fixed by opening all links in new tabs.

Anyway, the built-in adblock is top-notch.

</comment><comment><USER25> I was excited about this, however after 5 minutes of use it seems more buggy than the beta. Guess I'm excited for 11.0.1 now.</comment>


Ask HN: Tips for applying as a system administrator? - <AUTHOR> Moin,
I am a student of computer science in my 4th semester and apply for jobs as a working student as a system administrator.
Can you give me some tips?
1. what should not be missing in my application?
2. where can I get good latex templates for applications?
3. which topics should I look at again before a trial working day? <comment><USER2> > what should not be missing in my application?

Details of relevant skills and experience. But do not go too detailed. There should be enough information to convey your competence without being overwhelming. The person reviewing your resume doesn't have time to read a novel — make sure it is succinct. Put the most relevant skills/experience front and centre and be ready to back them up. Nothing hurts your chances more than failing at something you've listed in your resume.

> where can I get good latex templates for applications?

Don't bother — just use MS Word/Google Docs/Apple Pages/LibreOffice Writer. They all have templates for writing resume. Just be sure to convert the end result into a PDF.

> which topics should I look at again before a trial working day?

The basics of whatever you are supposed to be working on, I suppose. You can always Google if you don't know something — so don't bother rote learning command line opts. Make sure that you are familiar with the environment you are going to work on — things like basic commands, scripting, automation, and other tools. For example, if you are going to be working on remote Linux servers, you need to be familiar with vi/vim. Similarly a Windows admin needs to be competent enough with PowerShell.

</comment><comment><USER3> Don't bother with latex for your cv. That's literally the dumbest thing you can do.

You might want to customise your cv for the company you're applying for and in that case having a plain and simple word/writer document is unbeatable.

Things that should not be missing:

\- a skill matrix with your own self evaluation of competencies. Basically a table with one row and three columns for basic, intermediate and expert. This is where you would put your skills and try and communicate what you feel strong on and what you have just played with.

\- past experiences —— if none, a list of personal projects and/or things relevant to the job.</comment>


Show HN: A simple script to post the top HN stories to Discord - <AUTHOR> https://github.com/elamperti/HackerNews2Discord <comment><AUTHOR> I mostly read the stories with high score (or comments), so with this script I get notifications on Discord (via webhook) for new posts above a certain score and it links to both the shared URL and to the HN comments.

It takes the stories via Algolia: [https://hn.algolia.com/api](https://hn.algolia.com/api)

Hope someone else finds it useful! :)</comment>


Rust-Compare: a comparison of Rust, C++, and Java - <AUTHOR> http://www.rust-compare.com/site/ <comment><USER2> Great work! One thing I would change in the C++ Pointers & References is that things like:

        auto b = make_shared<char>('b');

is preferred over

        shared_ptr<char> ptr_b(new char('b'));

This style is better because it's shorter and doesn't make you repeat the type :-)

Unfortunately, make_unique didn't make it into C++11, but is there for C++14

<comment><AUTHOR> Added a note... thanks!

</comment></comment><comment><USER3> There are some pretty wrong statements in here, such as that Rust won't allow you to iterate over an array of values.

<comment><AUTHOR> How do you iterate over an array in Rust?

<comment><USER3>
        fn main() {
            let x = ["a", "b", "c"];
            for i in &x {
                println!("{}", i);
            }
        }

<comment><AUTHOR> Thanks! Made the fix: [https://github.com/wspeirs/rust- compare/commit/0c9fe97c7ae45...](https://github.com/wspeirs/rust- compare/commit/0c9fe97c7ae452baf523b3d8c5d4fbf20650eeee)

You said there are "some pretty wrong statements," any others? You can also fork and fix if you'd like to help... it'd be greatly appreciated!

<comment><USER4> In section "Interfaces"

      impl Interfaces {
        fn my_method(a: isize) -> isize {
          return a;
        }
      }

It isn't implementation of trait. It specify default implementation of trait.

It must be:

      trait Interfaces {
        fn my_method(a: isize) -> isize;
      }

      struct Impl;

      impl Interfaces for Impl {
        fn my_method(a: isize) -> isize {
          return a;
        }
      }

In section "Enums", you can apply default implementation of equality trait:

      #[derive(PartialEq, Eq)]
      enum BasicEnum {
        Option1 = 1,
        Option2
      }

and compare

        if e1 == BasicEnum::Option1 {
            e1 = BasicEnum::Option2
        }

In section "Parameters", you said "All three languages default to pass-by- value if not otherwise specified". For privitive types it's true, but it's not. Classes in Java have reference semantic (copy only address in method). Structs in Rust have move semantic witch is connacted with ownership concept ([https://doc.rust-lang.org/stable/book/ownership.html](https://doc.rust- lang.org/stable/book/ownership.html)).

In common, many basic things for Rust have very good descriptions in Rust Book ([https://doc.rust-lang.org/stable/book/](https://doc.rust- lang.org/stable/book/)). Please, pay attension on it and be more careful.

<comment><AUTHOR> I updated interfaces and enums. To your comment about move semantics for structs and such, I actually found the book lacking. I just did a quick Google search of the book for "move semantics" and couldn't find it anywhere. Where specifically does it talk about parameter passing?

<comment><USER5> Move semantics are here: [http://doc.rust- lang.org/stable/book/ownership.html#move-sem...](http://doc.rust- lang.org/stable/book/ownership.html#move-semantics)</comment></comment></comment></comment></comment></comment></comment>


Why Facts Don't Change Our Minds - <AUTHOR> http://www.newyorker.com/magazine/2017/02/27/why-facts-dont-change-our-minds <comment><USER2> Because we care for interests and results, and facts are not really that relevant to achieving them (or they might even be against them).</comment>


Drop.lol – copy files over the network with WebRTC or TURN relays - <AUTHOR> https://drop.lol/ <comment><USER2> See [https://instant.io](https://instant.io) [0] for a similar file sharing service, but over BitTorrent over WebRTC (not sure if it requires a relay TURN server when peers are behind symmetric NAT) [1][2].

Other such services shared on news.yc previously: [https://sharedrop.net](https://sharedrop.net), [https://file.pizza](https://file.pizza), wormhole et al [3][4].

Just a reminder that, WebRTC doesn't leak your public-IP if you're behind a VPN [5].

\---

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

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

[2] [https://tools.ietf.org/html/rfc8445](https://tools.ietf.org/html/rfc8445)

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

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

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

<comment><USER3> Cool, but none of these services seem to be operational at the moment.

(Which is somewhat strange given that they are supposed to be run mostly in the browser.)

<comment><USER4> I've had great success with Sharedrop, but it's at [https://sharedrop.io](https://sharedrop.io), not .net as the OP linked.

One reasons services might have shut down is running the TURN server. An added annoyance over what would otherwise just be static files.

<comment><USER2> My bad. The mirror is at [https://snapdrop.net](https://snapdrop.net) [0].

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

</comment></comment></comment></comment><comment><USER5> As much as I'm a fan of these FOSS WebRTC solutions, nothing quite worked for me reliably in a room of people with a variety of devices and technical knowledge.

I use [https://fileroom.io/about](https://fileroom.io/about) but it is not FOSS, it does use their own servers for storage (you have to believe they delete the files) and the project looks dead overall.

But this drop.lol thing does not allow "click to browse" and that is rather cumbersome on mobile. Also, users should be able to asign a name?

<comment><USER6> > But this drop.lol thing does not allow "click to browse" and that is rather > cumbersome on mobile.

Which is funny, isn't using a standard <input type="file"> much more straightforward than actually accepting a drag and drop?

FWIW I've been seeing this pattern all over the place lately, where drag-and- drop is so emphasized that the click-to-browse option is hidden (or entirely missing).

</comment></comment><comment><USER7> If you're on the CLI and need to quickly get a file from one machine to another, check out my [https://patchbay.pub](https://patchbay.pub) service. There are now a couple open source implementations that can handle the file sharing case.

</comment><comment><USER8> See also: magic-wormhole [1] (written in Python)

[1] [https://github.com/warner/magic- wormhole](https://github.com/warner/magic-wormhole)

</comment><comment><USER9> As a Dutch person this domain name made me laugh. Nice tool though.

<comment><USER10> Why is this funny to a Dutch person in particular?!

<comment><USER11> It's a few things, drop is the word for licorice and lol is the word for fun. It's also one letter off 'droplul' which would be a swear word for asshole, literally: licorice dick.

<comment><USER12> The domain licorice.fun is available!

</comment></comment></comment></comment><comment><USER13> Doesn't work for me. Tried Chromium (Linux) -> Chromium (Android) - fails. Tried Firefox (windows) -> Chromium (Linux) - fails.

</comment><comment><USER14> This works beautifully. I wonder how secure it is.

<comment><USER15> WebRTC is end-to-end encrypted, but the handshake goes over the server in cleartext. So you need to trust the server, but not the TURN relays.

<comment><USER16> I made a similar version awhile back: [https://qqsend.me](https://qqsend.me)

It uses AES encryption to encrypt the contents of the data so that any TURN relays couldn't see the contents of what was being transferred.

The key material between sender/recipient are transferred via the hash-param of the URL, which AFAIK isn't sent to the server and is hidden.

<comment><USER15> The data going over TURN is always encrypted in WebRTC, so relays can never see what you send (at least in all normal implementations).

The handshake can be sent out-of-bound like you say, but if you are not at the same physical place or have some pre-trusted way to transmit them you always need to trust something.

Even if you send it over something that is previously e2e-encrypted like signal or keybase you always need to trust that channel, so unless you actually are at the same physical place to do the handshake over a non-remote channel or have setup the channel earlier I don't think there is a way to do it "truly securely". The same is true for basically all e2e-encrypted systems that don't have a way to establish an out of bounds channel of trust (like for example the web PKI structure or the debian web of trust).

If you were to use existing web PKI (every participant having their own domain) and require all participants to encrypt with their DV/OV/EV validated keys that might work, but that also seems like a lot of work and cost for messaging and sending files.

Also, I'm not sure what threat model you are mitigating by encrypting the payload on an already e2e-encrypted channel since you load third party JS without SRI, don't have a CSP and don't have HSTS. Basically there are a few steps I'd take before worrying about having a minimal server forwarding the handshake. This seems like you have not considered what the threat model for your service actually is.

</comment></comment></comment></comment><comment><USER17> Love these sorts of tools that don't require login or registration, and are usable immediately! Great job.</comment>


Ask HN: What habits have help you succeed as a programmer? - <AUTHOR> <comment><USER3> I made a conscious choice to write 'non work' code every day. It's now a habit (thanks largely to Github's contributions graph... I've got to get a little green square every day!). Sometimes it's just 5 minutes to refactor something or update a README, sometimes it's 5 hours to work on a project, but the result is the same - I spend more time writing code. This has introduced me to frameworks, libraries, patterns and algorithms that I wouldn't have been exposed to otherwise, and it's _definitely_ making me a better developer.

<comment><USER4> Good on you, but I'm afraid that's not going to work for me with two small kids running around.

<comment><USER3> A friend of mine in a similar situation is making a game with his kid - <USER2> writes code while his child is drawing sprites. They collaborate on the game mechanics, testing, etc. That works for him and (he says) it's quality time that's loads of fun. Maybe you could include your kids?

</comment></comment></comment><comment><USER5> as well as the comments below, I would add

1\. Get a visual prototype going as early as possible - even if its screen mockups. Your interpretation of what the client wants and what they tell you they want are often completely different, and many times they don't really know at all. Once they can see something, then requirements get a lot better.

2\. Once you have a better idea on what you will be building, work out in your head how you will build it. Think about all the parts and do the bits that you haven't done before, or don't know how to do and build them FIRST. This will avoid showstoppers down the road - you may not be experienced enough to know if it's something you can't / shouldn't do, or if extra help / libraries are needed to complete the job.

So once you have a clear idea on what you are building, and have done test functions to do the hard bits - then it's time to turn on the music and build the rest.

</comment><comment><USER6> 1: Keep everything as simple as possible.

2: Keep your toolchain and build process independent from the operating system and editors.

3: Don't use IDEs.

4: Have a one command automated build and run as soon as you write a basic skeleton of your project.

<comment><USER7> What do you have against IDEs and what languages do you mainly write in?

<comment><USER8> Not the OP. When I started out I took a conscious decision to stay away from IDE'S.

an IDE adds complexity when the main goal should be to learn to program. An IDE has a bunch of features you need to learn and understand when learning to program by itself is hard enough.

<comment><USER9> What language did you use?

<comment><USER8> Python.

<comment><USER9> That is a language that is perfectly fine to start without an IDE but for example Java and C# are pretty much designed to use with an IDE, at least when you are building something that is non trivial.

You don't have to use all the power but letting for example Visual Studio handle the project references and build for a .NET project will allow a beginner to focus on coding. Not to mention all the tutorials will assume they use Visual Studio.

<comment><USER8> I had a feeling it would be something along those lines. When I began I actually started with Java and later dabbled with C# but didn't get far with either one of those. I had no idea what I was doing. I probably still don't ¯\\_(ツ)_/¯

I finally settled on Python after jumping around quite a bit and am still learning.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> Don't commit to anything you haven't already verified is possible

</comment><comment><USER11> Code without ego. You are not your code, and your code is probably not very good.

</comment><comment><USER12> Read other people's working code. Figure out what they're doing and why and why you like or dislike it. Add their unique qualities to your own repertoire.

</comment><comment><USER13> Delivering to your deadlines and estimates as much as possible

</comment><comment><USER14> reading code.</comment>


When Functional Programming Isn't Functional - <AUTHOR> https://www.leadingagile.com/2018/02/when-functional-programming-isnt-functional/ <comment><USER3> Does anyone else 100% disagree with the claim that this "lambda version is more concise and expresses its intent effectively"?

      public static List generate(int series) {
          return Stream.iterate(new int[]{0, 1}, s -> new int[]{s[1], s[0] + s[1]})
                       .limit(series)
                       .map(n -> n[0])
                       .collect(toList());
      }

as opposed to this:

      public int fib(int n) {
          int x = 0, y = 1, z = 1;
          for (int i = 0; i < n; i++) {
              x = y;
              y = z;
              z = x + y;
          }
          return x;
      }

<comment><USER4> Syntax matters. What I really like about Haskell is how much care has been given to the syntax to make functional idioms easy to read and write. One can just say,

        fib = 0:1:zipWith (+) fib (drop 1 fib)

[I know that `drop 1` is just `tail`, but this one makes the intent clearer for those who may not know Haskell].

<comment><USER5> You can often get close to Haskell-y implementations in Python with help from the itertools module. There are a couple "Haskell style" Fibonacci generators with itertools floating around in blog posts, I'm sure, and I've used itertools to write all sorts of things in a pretty succinct manner.

</comment></comment></comment><comment><USER6> Is it fair to call APL a functional programming language? Array programming seems to be its own paradigm that inspired and was inspired by what was later called FP but is far from equivalent.

<comment><USER7> I'm not sure "functional programming language" means the same thing to any two people. Just like "object oriented programming", it once labeled what might have been a very precise idea, but has since been bundled and unbundled with any number of other concepts.

Unfortunately the term has become so muddled in the common usage that if at this point, if someone wants to call APL functional, they probably can.

<comment><USER8> The term only has become muddled in the minds of those that don't want to learn, but have an interest in using it for marketing purposes — just like how people tried to redefine what Open Source means.

Functional Programming is programming with _mathematical functions_ (aka pure functions).

And an FP language is one that has features, but also a culture that encourage FP as the main paradigm for solving problems.

Examples of FP languages: Haskell, SML, OCaml, Scala and Clojure.

Common Lisp, Emacs Lisp interestingly are not. Python, Java and C# are not. JavaScript is not, although it has a cultural shift in progress with pretty good results. Go at this point is actually anti-FP, if such a thing was possible.

<comment><USER6> Lisp was based on the lambda calculus, not sure if you can get more functional than that. Common Lisp was obviously more multi paradigm, having one of the most powerful object system ever. Scala is obviously also multiparadigm, though many would rather ignore that side of the language.

Most languages are multi paradigm, even clojure is used with an object-like entity component system, while there are papers that push Haskell as the best language for imperative programming. The word is kind of meaningless when applied to languages but more meaningful when applied to code.

<comment><USER8> It doesn't matter if the language is multi-paradigm. The most influential programming style in Common Lisp is not FP and if you'll take a look at any CLisp book, you'll be hard pressed to find any FP in it.

LISP might have been born of Lambda Calculus, but Common Lisp is no longer based on it.

Scala might be multi paradigm, but is the only language on top of the JVM where pure FP programming is made possible by a pretty good and well maintained ecosystem of libraries, see for example: [https://typelevel.org/](https://typelevel.org/)

That is not true of Common Lisp.

<comment><USER9> LISP borrowed the "lambda" word from lambda calculus (not the Greek symbol). It didn't implement the lexical scope of lambda calculus, and provided lots of semantics other than lambda-calculus-like function application right off the bat.

Let's see: lambda calculus has no representation of its own code; it is not code. In lambda calculus, there is no QUOTE. There is no CAR nor CDR to walk around the code, no EVAL.

In lambda calculus, there is no mutation: no SETQ, no RPLACA.

Pure lambda calculus has no terms other than functions (unless extended); LISP had symbols, numbers, conses right off the bat. Arrays and character strings came soon.

All in all, equating Lisp with lambda calculus is silly.

</comment></comment></comment></comment></comment></comment><comment><USER10> It seems to me that the author is confusing what the actual point of FP is. I do not think it is about writing less, more concise or more understandable code: the examples they bring are of different length mostly because they use languages with different abstraction level, which is largely independent from being FP or not. The first snippet (the assembly one) requires to use a whole line for each single sum; the second one has a built-in concept of lists and iterations on lists; the third one allows higher order functions. This gives different lengths, but the point is not FP.

Neither it is true that FP guarantees more readability or understandability, which actually depends a lot on what your are used with. If you are used to imperative, FP will probably be a real pain. It is not even true that shorter functions are in general more readable the longer ones: I can immediately understand pages of code and struggle on two lines, depending on what they do and how they are written.

The actual point of FP, as I see it, is that it decouples a function from the context it is executed into. A pure function is not influenced by its context (the global status) and does not influence it (it has no side effect). Actually, for a pure function the context does not exist. So if you want to read or understand it, you can ignore the context; and viceversa you can ignore the function when studying any other. The only interaction between different functions remain the explicit calls, which are easier to track than the implicit coupling given by the global context.

So that is the advice from FP that I would give to every programmer: when writing a function, try to use the global context as few as possible, possibly even not at all.

All the other stuff with lists, zipping and lambdas is fun and useful, but it is not the real heart of FP.

<comment><USER11> > The actual point of FP, as I see it, is that it decouples a function from > the context it is executed into.

I 100% agree with this. To me, a rough measure of code simplicity is the amount of additional context you need to be able to reason about any specific function or object. Pure, statically-typed functions are close to ideal - <USER2> the context you need is encapsulated within the function definition itself.

Functions in dynamically-typed languages are trickier - in addition to the function definition, you also need to know _how_ the function was called, since there's no guarantees about the arguments that were passed in. Impure functions are the worse - if the function interacts with global state, then you'll need to be aware of every callsite that interacts with global state. Practically speaking, that means you can't reason about _anything_ in isolation - you always need to hold the entire program in your head. Hence the whole "globals are evil" mantra.

Thinking in terms of functional purity gives a convenient way to write clean code. I definitely recommend every programmer at least be familiar with the concept.

</comment></comment><comment><USER12> _When I use lambda expressions in an OO language, I find that the smallest logical chunk of code that can be exercised by a micro-example is larger than when I use iteration or recursion for the same solution._

That's the thing I keep coming back to. FP simply allows you to do more with less code that has to be tested.

I would not consider lambda programming FP, although I sort of understand what is being said. Lambda is just the tiniest beginnings of FP.

When I started FP, I chose F#. I figured that way I could still write classes when I needed them. I also figured it would allow me to do things the "wrong" way and then learn by cleaning up.

I found over several projects that I eventually stopped using classes altogether. There just wasn't any need for them. So much of what TDD brings to the table can be boiled down to "ways to make sure you're not shooting yourself in the foot in OOP"

Sidebar: At one point, Dave (the author here) had the only TDD/Microtest framework for COBOL. It was a very cool idea. Dave's a really smart guy.

</comment><comment><USER13> These articles exhorting the benefit of using FP in the small are great, but I'd been lost forever making the leap from small (<10 line) examples vs typical apps with their CRUD behavior and in general state everywhere like a db or file system or network requests and so on. I've found this talk([https://www.destroyallsoftware.com/talks/boundaries](https://www.destroyallsoftware.com/talks/boundaries)) by Gary Bernhardt way more useful in terms of how to apply FP principles in the real world.

The other grouse I have with posts like these are they try to over-simplify FP - "using lambdas is FP" or something like that. I think this leads to folks thinking 'hmm - I know how lambdas work... so if I use lambdas, then it's good' which is missing the point completely.

I think one does need to 'grok' FP concepts completely - composition, higher order functions, tail recursion, immutabililty etc and gain an appreciation of FP vs procedural the hard way before they can hope to utilize it effectively.. I think those things help you think 'functionally' which is much more valuable in the long run rather than 'how do I bolt on FP on OOP'</comment>


Google Play Music – free, ad-supported radio - <AUTHOR> http://officialandroid.blogspot.com/2015/06/play-music-ad-supported.html <comment><USER2> This is a nice additional option, but I won't be cancelling my subscription. I hate ads.

What I want to see from Google Play Music (aside from a name change) is:

\- Keep improving music discoverability. It has become better, but could be further improved.

\- Family plan. I want to pay $15/month and give it to my wife and kid.

\- Fix the strange YouTube bug, where if I hit pause on Play Music, and then start a YouTube video within a few seconds I get an error telling me I am already playing media on that device (or similar). What does YouTube have to do with Google Play Music anyway? YouTube is ad supported, Google Play isn't. There is no cross-over. This issue shouldn't be a "thing." Plus I might be watching a YouTube video muted and listening to music (yes, people do that!).

\- The new interface is arguably a step backwards (just like every Google Maps update). You keep "simplifying" away functionality.

\- The offline playback stuff continues to be pretty clunky to set up. If I know I am going on a road trip and will be driving out of range, actually adding that music to the device is a huge pain, and often the easiest way is just to leave the device playing music for days and let it build up a cache. Horrible.

<comment><USER3> > What does YouTube have to do with Google Play Music anyway? YouTube is ad > supported, Google Play isn't. There is no cross-over.

There is actually cross-over, whether you like it or not (most people don't). Youtube Music Key: [https://www.youtube.com/musickey](https://www.youtube.com/musickey)

[http://lifehacker.com/whats-the-point-of-youtube-music- key-1...](http://lifehacker.com/whats-the-point-of-youtube-music- key-1662612843)

<comment><USER4> > whether you like it or not (most people don't)

I say YouTube is probably the number one way most teenagers actually listen to music. This isn't music videos mostly. It is pictures of the cover art and the music. I seriously listen to my music through YouTube in another and I am rarely disappointed in not finding the music I am looking for.

What is not to like. I can listen with the screen turned off. I use this feature to listen to one off podcast I would like to list to and the YouTube play list made by users are amazing. Also to have no ads while listening to YouTube music is great.

<comment><USER5> There used to be a feature in the youtube app for android to enable background play. It was removed because now they want you to pay for it. That's not to like.

No ads is nice, but useless for anyone who is willing/able to install an ad blocker on their phone. You can promote content producers more effectively by spending the money you would drop on a subscription on buying an album, going to a show, subscribing on Twitch or becoming a patron on Gratipay anyway.

Offline access is nice, but other commentors claim it's "clunky", and if it's not especially convenient, then it doesn't give me anything I havent been able to do for the last decade with youtube downloader apps.

So really all it does is make the mobile background play a paid feature, which is obnoxious.

<comment><USER6> Further, they started banning apps that used the YouTube API to background audio when YouTube's v3 API shipped last month.

It's very anti-user, I use it to listen to longer podcasts in the background.

Worth rooting for: [http://repo.xposed.info/module/com.pyler.youtubebackgroundpl...](http://repo.xposed.info/module/com.pyler.youtubebackgroundplayback)

</comment></comment></comment></comment></comment><comment><USER7> I enjoy Google Play Music and use it daily (the paid version). I prefer it over Spotify/Rdio/Beats because it works better with Google Now voice actions, and I can run it well on every device I care to.

My remaining problem with it is their device limit. You can have 10 total devices, but you can deauthorize only 4 per year. This sounds like a lot but if you switch phones often or flash new ROMs you can use it up pretty quickly. In addition, if you upload music to the service the computer you use counts as a device. Once you're at your limit there's little you can do and you have no information on when you'll get a device deauthorization "credit" again. I had to call Google to get a one-time reset of my authorizations but it would be nice if they could modernize this some; such as by only using an authorization if you download music to the device for offline listening.

<comment><USER8> My bigger issue that two clients cannot be listening to music at the same time, even if you're a paying member.

I'll often forget to stop streaming the music at work and start listening to it on the bus on the way home. My workstation at work then fights for control of the service with my phone and every other song drops out with "another device is using the service".

<comment><USER9> And the really stupid thing happens if you try and play a youtube video while listening to music. It freaks out about playing a youtube video at the same time.

Whichever genius at Google came up with that one deserves a rapid promotion into the tiers of bureaucracy.

<comment><USER10> I suspect you need to have a talk to the MPAA/RIAA for that...

</comment></comment></comment></comment><comment><USER11> My Google play killer feature happened other day and wasn't even announced. They increased the amount of music you can store from 20.000 to 50.000. I have a very large collection of independent Brazilian music. You can't find these kind of music in any streaming service. Now I can have a cloud backup of all my music for free! And I also can here it anywhere. I even bought a new CD reader and resumed to rip my music collection.

My great fear of these services is that you will have a less diverse music ecosystem. Sure the average Anglo-American listener has a lot more options, but if you want to learn about other cultures, you are toast.

<comment><USER12> I thought they did this in February? I specifically joined when it was announced.

[http://www.engadget.com/2015/02/25/google-play- music-50000/](http://www.engadget.com/2015/02/25/google-play-music-50000/)

</comment></comment><comment><USER13> Why is it always a surprise to folks that Google Play Music exists? Everyone talks about Pandora, Spotify, Apple, or Amazon, but Google Play Music is never in the conversation.

I use it and it's _great_.

<comment><USER14> The sound quality leaves much to be desired.

<comment><USER15> How? It's 320kbps.

<comment><USER14> Bitrate doesn't necessarily correlate with audio quality, you can even perceive noise or a drop of quality in the audio of the less popular songs.

I'm seriously thinking that Google just licensed the audio they're streaming, but they didn't even care about getting proper audio files and they're simply streaming the audio their users uploaded.

<comment><USER16> I highly doubt that. The risk is too high.

In my country there was a big scandal a few years ago when a couple of radio stations started playing Billboard Hot 100 songs. I guess they couldn't source the new songs in time from reputable sources for some reason (licensing restrictions, logistical failure, no idea...).

So they simply downloaded them from local torrent trackers. The thing blew up, because a guy that was uploading and seeding the albums put his own catchy promotional jingle in the middle of most songs.

</comment></comment></comment></comment></comment><comment><USER17> A bit offtopic but I am a Google Play Music subscriber. I switched to them over Spotify because they had a much better UI and UX. I use these music services at the radio mode mostly and I am pretty sure Spotify's designers primary concern was how to make users' experience miserable.

Unfortunately Google seems to follow the trend nowadays. Take for example the Play Music Radio Page. There is a list with photos and titles of my favorite songs. For every song there are 4 links, one on the thumbnail, one on the play button inside the thumbnail, one on the title of the song and one under the thumbnail that opens a menu with additional options. The thing is that none of these links and options plays the song displayed. Clicking on the song's title, plays an entirely different song!

Even worse and I think this may indicates the absence of serious dogfooding, is that I can't anymore select text on the page. Same did spotify. So I can't play the song and I can't copy-paste its title in the search bar. Instead I either have to type the title manually or go and search my library.

<comment><USER9> UI/UX is subjective. My recent thoughts on the new UX from google is that it's bloody awful.

When I just want to listen to some random music I just play my thumbs up playlist. But every time I open Google play, you have to click to open the hamburger menu because menus are no longer trendy on desktop sites. Want to have a list of what's playing be your homepage? Impossible in the new google play, you can only view the playlist in a popup.

Also, it's terrible for music discovery and totally (if unintentionally) chauvinistic. Their algo is bloody awful, it seems to use one song as the basis for "I'm feeling lucky" and never mixes up genres. Also, related artists to females? Other females! I like quite a few female artists, but if you click "I'm feeling lucky" there's a 20% chance google music will only play me female artists. And it will spiral into genres I don't even like and have no songs thumbed up, purely because they're female too. It will never play related artists from a different sex. I've got a couple of screenies somewhere of a list of 50 odd songs recommended to me, all female artists.

<comment><USER18> > Their algo is bloody awful, it seems to use one song as the basis for "I'm > feeling lucky" and never mixes up genres.

Okay, so is the problem that "I'm feeling lucky" is bad because it "never mixes up genres", or...

> if you click "I'm feeling lucky" there's a 20% chance google music will only > play me female artists. And it will spiral into genres I don't even like and > have no songs thumbed up, purely because they're female too.

...is the complaint that "I'm feeling lucky" is bad because it _does_ mix in genres you don't like based on the sex of the artist?

Because it can't be _both_.

<comment><USER19> The main problem is that "I'm feeling lucky" picks a random song and then plays that song's station.

It isn't a "random station", basically the issue is that it never reseeds from your data.

So it's nothing like a station that's good for music discovery based on your previous _choices_ , it's just discovery based on a previous _choice_.

I'm sure Google could design better, but it's probably just low priority.

</comment></comment></comment></comment><comment><USER20> My main issue with Google Play Music is that they don't have a desktop app. I wouldn't even care if their desktop app was a wrapper around their HTML player. I just want keyboard music controls from my desktop and the ability to Cmd+Tab to the music app instead of hunting down the browser tab. Without a desktop app, using Google Play Music is disruptive to my workflow.

<comment><USER21> On Windows I use Outcold Player. Pretty good Software that seems just limited by Googles non-official API.

<comment><USER21> It seems they are going out of business soon as the Auth API they based their business on is getting deprecated. :/ its moments like these where i hate how the web turned out.

</comment></comment></comment><comment><USER22> Is there a full in depth comparison between all these streaming services? I use Spotify, but I'd like to know if I should switch- the main feature I'm looking for is better recommendations/discovery. Also it'd be nice to see actual # of songs each of these services actually have.

<comment><USER23> I too would like to see such a comparison but # of songs isn't the important metric for me, it's # of songs I want to listen to. That's why I hate that metric, really just tell me which artists you have (or don't have, though this would never happen) that other services do not...

</comment></comment><comment><USER24> Being able to upload your own music has been the only reason why I use this. I have a lot of mixes that aren't commercially available so this is basically the only way I can listen to them without having the actual MP3s on whatever device I happen to be using.

</comment><comment><USER25> The comments here are interesting.

They're from a bunch of people complaining about this or that issue/concern/worry/gripe from Play and a few of its competitors... but it seems like it never occurs to anyone that it's not 1958 anymore. You don't have to be a passive consumer that has to put up with this shit.

I run a Plex server at home, I can stream my music anywhere. I've even had a little luck streaming actual FM radio stations the same way (I haven't found one yet that doesn't do http streaming on their website, and if you extract those links and add them to Plex...).

</comment><comment><USER26> I will never pay for one of these music streaming services.

You would think in a time when basic necessities are extremely cheap for a significant portion of the world population, people would be more willing to spend money on art. But instead, the vast majority would rather get something for free than pay for it. And the people who pay the $10/month for the convenience of Spotify or Google Play Music or Apple's music product don't care that only pennies of that actually goes to the artists.

All that the shift to all-you-can-eat streaming services has done is make it so that people feel they don't need to buy music (since they're paying for the right to stream any time, there's no value in purchasing a copy) and shift where the money goes away from artists.

I'm going to stick with supporting musicians directly, and do what I can to let people know that it's not that hard to do the same, and that artists appreciate even a little bit of support a LOT.

<comment><USER27> By this same thought process, you shouldn't purchase music via iTunes because Apple takes their chunk first, then the music label gets their share. The artist is again left with "only pennies". Perhaps you are more upset with music labels and their part in the process rather than companies like Spotify and Google Play Music who are simply trying to meet the demands of the modern consumer.

<comment><USER26> I don't purchase music from iTunes. I give money directly to artists in any way I can. Whether it's merch, handing money over for a CD directly, buying them a drink, whatever.

Here's something to try. Think about some songs or some album you go back to over and over. Think about the way the music makes you feel, if it lifts your mood, lets you concentrate, or in any way improves your day. How grateful are you for that great 4 minute track? Or for the 50 minute album you played at twice per week last summer?

Did each listen of that song bring you 5 cents worth of joy? Or maybe even just 2 cents? If you have a last.fm account, you can look at your plays and total it up. I have well over 5000 plays for my most listened-to artist. The next time I see them, I can give them $100 in return for nothing, and just say "thank you" for making great music and encourage them to make more.

It's not about these companies being evil, or the business model being wrong. It's that very rarely does anyone consider the people behind the works that they listen to every day, even if that music has some personal importance or sentimentality. The reality is that those people who put out your favorite album are probably working part time jobs just to keep producing music, even if they have enough notoriety to be invited to international music festivals, or are even lucky enough to have a song licensed for a tv show or commercial.

Musicians will continue to make music out of passion, even if they have no hope or even aspiration of commercial success. Any bit of encouragement and support you can give will give them extra motivation to keep producing music, which is a benefit to you, as a fan of what they do, and also a benefit to other fans.

I'm probably just rambling to a wall here, but if you're someone who has their day slightly improved by music, take some time to consider if you want to be one of the few who supports the people who make your life better. Because they certainly aren't being supported by the services that you're using to listen to them.

</comment></comment></comment><comment><USER28> I wonder what this means for the folks using unofficial clients? I know there are clients for Mopidy and Squeezebox built with [https://github.com/simon- weber/gmusicapi](https://github.com/simon-weber/gmusicapi).

</comment><comment><USER29> I've been considering subscribing to a music service lately, but there are so many nowadays that I have honestly no idea how to decide. For those of you with experience in this area, what criteria would you recommend? what should I look for, other than the music itself?

<comment><USER30> If you have iOS, then wait 7 more days until Apple Music is coming out. My Spotify premium thing expired after 1 year now, so I have tried out all music services out there this month. My conclusion is that if Apple Music does not provide the integration I am seeking for (since I have an iPhone), I will just go back to Spotify. I am currently on the Google Play Music trial. It is pretty good, but I do not like the "Android" app on my iPhone. If you have an Android, I'd go with Google Play Music.

<comment><USER31> So your advice is to go with something that isn't out or proven in any way over a proven service because "I do not like the 'Android' app on my iPhone"?

<comment><USER30> I said to go with Spotify OR Apple music (if it is any good). I also said that Google Play music is fine, but not for me.

</comment></comment></comment></comment><comment><USER32> Whatever happened to Icecast, Shoutcast and just listening to a stream from a radio station?

</comment><comment><USER33> Now that a portion of the service is going free, I'm interested to see if they start to add offerings to the paid, all access tier. As a paying monthly customer, I'd love to have the option to enable lossless streaming, for example.

<comment><USER34> Well they did add YouTube Music Key (no ads, background play and offline access for many music videos) pretty recently, but they've done their typical terrible job of publicizing that.

</comment></comment><comment><USER35> Been an iHeartRadio fan for a few months now. Love the fact that they normal only play an ad when you first load it and thats it (and usually its an AllState ad with Dean Winters who was AWESOME in Oz).

Never really gave Google Play Music a shot since, quite honestly, no one every talks about it. I've tried Pandora and Spotify and they weren't all that great. Well Pandora was only good because if you install AdBlock you never got ads. I'll have to try it out and see if maybe a switch is in my future.

</comment><comment><USER36> The main reason I won't use Google Music is the lack of playlist folders. There's no way to organize playlists, and the player becomes quite unusable if you have even a few dozen playlists.

I'm surely not the only one who likes making and sharing playlists for different moods and occasions. It would be interesting to know why such a simple yet important feature is missing.

<comment><USER19> Google doesn't really do _folders_ (see gmail), but playlist _tagging_ would certainly be a feature I'd appreciate.

I personally am finding they are going backward though, I've been a subscriber for a while but they've just removed the radio icon over radio stations so it's hard to see in the recent activity whether it was a radio or actual album.

</comment></comment><comment><USER37> What I would really like to see is some standards to share your preferences, ratings and playlists among music services. Pandora and most other services locks you down and won't let you get your data. I think Google has great opportunity to be different here.

</comment><comment><USER38> Is there a reason why no one has tried to add 10 to 30 second spots to these streaming services? Is the temptation to have ad spots after every song too great to resist? Or are ad spots just too hard to measure and often times ineffective?

<comment><USER39> I remember using Spotify many years ago, and back then they played an ad spot every few songs (not every song), so it has been tried at least.

<comment><USER40> Isn't that also how Pandora (free tier) works?

</comment></comment></comment><comment><USER41> "free" and "ad-supported" are mutually exclusive if you ask me.

</comment><comment><USER42> Ha, awesome, hopefully this takes any wind that was there out of Apple's sails(and sales), heh. Once again, Apple puts out a feature 5 years late and is praised...

</comment><comment><USER43> Is anyone else extremely annoyed by the album art animation? The animation zooms in so far that you can only see half of the album, which defeats the purpose.

</comment><comment><USER44> "Free, ad-supported radio".

You mean like ... real radio right?

</comment><comment><USER45> Unfortunately still region locked where I am (Japan).

All the other various streaming services seem to work here - I wonder what the issue is for Google's?

<comment><USER12> I'm kinda surprised, it's working for me in Canada even though it's only supposed to be for the US.

Also I don't understand what they mean by "ad supported". How will that work? I am not a paid user, and I've been listening for almost an hour and still haven't heard one ad yet.

</comment></comment><comment><USER46> I'd gladly switch to this service if they didn't count it against my data allotment in Project Fi.

</comment><comment><USER47> The competition for music is heating up!

</comment><comment><USER48> It's smart marketing to have an announcement this week to steal some of Apple's free press.

</comment><comment><USER48> I've been listening for an hour and haven't heard an ad. Weird.

</comment><comment><USER49> Personally I prefer Spotify over Google Play Music or Apple Music, I don't know, I really care about startups and I think Google and Apple becoming to a hungry companies which eats other ones idea with their unlimited budget.

<comment><USER50> LOL You care about startups? Then you should care about their investors....which are the music labels.

</comment></comment><comment><USER51> These activity based stations/playlists are all available on Songza... Which, by the way, is free and ad-free. Not sure what I'm missing, here.

<comment><USER52> Google bought Songza last year

<comment><USER51> Right. The playlists are the same, the activities are the same. Songza still doesn't have ads -- but this does.

</comment></comment></comment><comment><USER48> Do they have Taylor Swift's stuff?

<comment><USER53> It doesn't have 1989, but her other stuff is there.

</comment></comment><comment><USER54> ad supported <> free

I wish people would stop echoing that. It would make it so much more possible to have a meaningful discourse about ad supported business models. We don't call anything else that requires something in return "free"

<comment><USER55> Well sure we do. We call "free software" free, even though it requires that any distributed changes are accompanied with source. Of course, the free software people are also constantly up in arms that the world doesn't use their specific desired definitions of words. I guess you're in good company.

</comment></comment><comment><USER56> Unless I'm missing something, this pretty much makes it a Pandora clone.

<comment><USER18> As I see it, it now completely subsumes Pandora's main functionality leaving Pandora without any big distinguishing features (except perhaps an argument over whether its matching technology is better), but its not a Pandora clone, because Google Play Music still lets you manage your own library of music either purchased through Google Play or imported from elsewhere as well as providing free ad-supported and paid ad-free streaming.

</comment></comment><comment><USER57> Yay , more micro dollars for artists ...

<comment><USER58> If only Music Artists didn't get ripped off by Recording Labels. Streaming isn't the problem imo, Artists making $21 for every $1000[1] is the problem

Yes, you make "less" on a Streaming service than me paying you $10, but if you decide to both have a label which takes 98% of your profit, AND allow your music to be Streamed (which offers a better UX, but less direct monitization), then you're making poor choices, imo.

Streaming services (music/movies/etc) are becoming standard because the UX is excellent. They may need some tweaking, but it is a painless UX. Imo, they're here to stay, and for good reason.

[1]: as i last saw from another HNer, when these conversations get repeatedly brought up. Unfortunately i don't have the cite.

</comment></comment><comment><USER59> Anyone working on an ad blocker?

</comment><comment><USER60> Google announces me too...

<comment><USER52> What mee too? To Pandora?</comment></comment>


Ask HN: Why are tech stocks down? - <AUTHOR> A part from the obvious cases where companies missed earnings expectations, why are all (?) tech stocks down? Google did great one day, the next the guy heading search announced he's leaving and now it's still going down. <comment><USER2> Back in the day a reporter asked JPMorgan what would happen with stocks and he said they will fluctuate.

That's what stocks do.

Capital Markets are not healthy today for instance people all over the world and in cities in the US all what better internet access but telecom companies can make more money with inferior service because there is no competition and customers make no choice.

Just a few companies have access to public markets, some company like Fitbit that just screws their customers and doesn't care about the future, they can cash out and get fuck you money even if their company incinerates the cash of investors. There are all the companies like hortonworks that have no differentiation, no patents, no moat, that get access to capital because of geographical bias that is no different morally from racism. If they were from Peoria they would be treated like dirt.

I will grant Y co that they give real mentoring, but their success has a lot to do with the fact that 99% of America is redlined, if you tried to do anything in any other city you would not have access to IPO money.

I hear that Y co peowould rather open an office in Singapore or Madras rather than Las Vegas or Chicago and if that is there attitude all the 99% can do is vote for Donald Trump or Bernie Sanders. If it all goes down in flames at least I can grow my own food you rich fucks go see what you can scavenge in a world that is half Palo alto and half mad max. Just listen for once.

</comment><comment><USER3> It's not just the tech stocks that went down today. The S&P 500 index went down 1.85% and the Dow went down 1.29%. The tech stocks got hit a little harder on average, with the NASDAQ index going down 3.25%.

The fact that there were dramatic declines in a few tech stocks makes traders worry that there may be similar earnings surprises in other tech stocks, so they dump tech stocks. If they see in a couple of weeks that these worries were unfounded, they might buy these stocks back again and the prices could go up.

According to the financial press, the stock market seems to be responding to global economic issues: the Chinese economy, weak oil prices, etc. Some fear a global economic slowdown. Since Google makes most of its money from advertising, its stock price would respond to concerns about the level of global economic activity. If people are buying less, businesses are selling less and advertising expenditures go down. (Same for Facebook Twitter, etc.)

If you believe that tech stocks are unfairly undervalued at this point, you might want to buy while the prices are low. But there are no guarantees that they won't go down even lower.</comment>


Photoshop doesn't work - <AUTHOR> http://jimramsden.com/notes/photoshop-doesnt-work

<comment><USER2> This sort of rant can and is used in a lot of different contexts. For example, one could rail against using Microsoft Word for web stuff almost with a straight search-and-replace. One could rail against Word for tech documentation with only a few edits.

So, does some underlying flaw, world view or mathematical truth cause the rant similarities? Or is it just proprietary software?

</comment><comment><USER3> So "Photoshop doesn't work" because new-standards-compatible browsers can create animated content on the fly? Why not compare Photoshop to other ways to create pixel-based, fixed-size graphic images? After all, that's what it's designed for, not standing in for HTML5.

</comment><comment><USER4> When all you have is a hammer...

The right tool for the job is HTML, CSS and JavaScript, because the right tool needs to handle structure, style and behavior.

A bitmap image is a poor abstraction for a document (then again, a document is a poor abstraction for an application, but it's going to be a while before we overcome that hurdle).

</comment><comment><USER5> Title is a bit extreme, yes many elements of web design are now created without the need to photoshop, but I won't conclude that "photoshop doesn't work"</comment>