Firefox 78 - <AUTHOR> https://www.mozilla.org/en-US/firefox/78.0/releasenotes/ <comment><USER2> Great. Unlike many, I walk my talk and have always used Firefox since more than a decade with no exceptions. The very commonly given reason that DevTools are better in Chrome still doesn't stop one from using Firefox for all other general browsing. Unless we support alternatives we really shouldn't complain when they gradually die off in a space that is increasingly coming under the control of giant corporations with bottomless pockets.

<comment><USER3> Love that FF exists but one of the things that always strikes me is that if FF is successful in their mission they will cut off their major revenue channel.

Google is still the majority of their revenue is it not? The reason they're making that money is off the backs of other consumers who are NOT benefiting from the privacy features that you guys want to see everywhere.

Willing to be totally wrong here and would love to see more FF advocates speak out here but FF wouldn't be financially viable without Google and many FF advocates say Google is the problem...

<comment><USER4> Yes, I wish there was a clear way to fund Firefox development. You can (and I do) donate to the Mozilla Foundation, although the funding relationship between the Mozilla Foundation and Firefox isn't clear. I believe that if Google's funding were to become insufficient, then the Foundation would step in to fund it if they have the funds, which is why I donate to them. But I don't know if this is actually the case.

<comment><USER5> > the funding relationship between the Mozilla Foundation and Firefox isn't > clear

It's not really an unknown. Donations to Mozilla Foundation do not and cannot fund Firefox development.

> if Google's funding were to become insufficient, then the Foundation would > step in to fund it if they have the funds

There are two assumptions here that are off. One is that the Foundation could come up with the kind of money that the Corporation spends on Firefox. The other is that the Corporation is somehow in a tight situation financially. Reality is opposite to both.

First, the Corporation is not strapped for cash. It brings in a lot of money. Like, in-the-neighborhood-of-half-a-billion-dollars-a-year a lot. It spent something like 29MM acquiring Pocket (which is still as closed source now as it was 3 years ago), and it manages to spend 50MM on its marketing campaigns that most people aren't even aware exist. Under the current arrangement the Corporation funds the Foundation, paying a percentage of its revenues to allow the Corporation to trade on Mozilla's name. (If that sounds like a weird way to put it, consider revisiting your other assumptions about Mozilla and Firefox.)

<comment><USER6> Any idea why donations to Mozilla cannot fund Firefox development? I'm told other orgs like FSF/EFF/ACLU do put donations towards software development.

</comment></comment></comment></comment></comment><comment><USER7> I am a pretty ardent Firefox supporter and prefer it over Chrome but some of the issues are still jarring and really affect the user experience. E.g. this 10 year old bug which I still have to deal with multiple times every month where if you have couple of windows open with one having pinned tabs and close the other one first, the pinned tabs are not restored upon restart: [https://bugzilla.mozilla.org/show_bug.cgi?id=587400](https://bugzilla.mozilla.org/show_bug.cgi?id=587400)

Mozilla needs to shift focus, atleast briefly if not long term, to work on squashing such common issues instead of racing to add new features.

<comment><USER8> Agreed. I'm tracking a 7 year old bug to support `<input type="month" />` that's probably an easy win, given the foundation work is completed by supporting other date input formats.

[https://bugzilla.mozilla.org/show_bug.cgi?id=888320](https://bugzilla.mozilla.org/show_bug.cgi?id=888320)

<comment><USER9> yah, i would _love_ it if mozilla focused on all kinds of form controls, bringing them to parity styling-wise, adding more hooks for things like validation/more complex interactions, adding common controls (like month), etc.

basically, they should look at the various web ui toolkits like bootstrap and integrate all the controls and behaviors common across all of them. it would be such a major win for developers and users.

<comment><USER10> Maybe Mozilla should stop the features and branding for a little while and make a revamp sprint ?

</comment></comment></comment></comment><comment><AUTHOR> Of note for those using Wayland/Mutter Firefox 78 now has the option of Partial Present[0] and better supported VA-API for video playback.

Interestingly there was a recently discovered Mutter bug[1] where the Culling code to prevent rendering of windows that were not visible was not working. This fix will need to be deployed to see the biggest benefit of Partial Present.

[0] [https://bugzilla.mozilla.org/show_bug.cgi?id=1620076](https://bugzilla.mozilla.org/show_bug.cgi?id=1620076)

[1] [https://www.phoronix.com/scan.php?page=news_item&px=GNOME- Br...](https://www.phoronix.com/scan.php?page=news_item&px=GNOME-Broken- Culling-Fix)

<comment><USER11> When did they start supporting VA-API? I didn't notice. Lacking that was one of the reasons I got a new computer.

<comment><USER12> With this release

<comment><USER11> Oh that's wonderful. I'll get back some of the CPU of my new computer. I've pretty much have a core dedicated to it.

<comment><AUTHOR> It's slightly more complex as there are some hardware/software combinations that don't work. This article gives some good steps to make sure it's enabled:

[https://mastransky.wordpress.com/2020/06/03/firefox-on- fedor...](https://mastransky.wordpress.com/2020/06/03/firefox-on-fedora- finally-gets-va-api-on-wayland/)

I've also had to disable media.ffvpx.enabled in previous versions to enable VA-API for more than just VP9 (I haven't yet been able to verify if it's needed for this one).

</comment></comment></comment></comment></comment><comment><USER13> Wow, they finally got around to fixing a certificate-handling issue. That must have closed a bunch of decade-old bugzilla issues.

Now if they could just get around to supporting intermediate CA certificates and _all_ of the Windows certificate stores, not just a couple of randomly chosen ones, that would be swell.

Also, IPv6 support in PAC files would be nice.

If any Mozilla employees come to YC News: Unimportant-seeming stuff like this is why Chrome _crushed_ Firefox in the Enterprise.

<comment><USER14> > Unimportant-seeming stuff like this is why Chrome crushed Firefox in the > Enterprise.

This isn't why. At work I deal with two different vendors who refuse to troubleshoot any issues with their products on anything but Chrome. To this day, the issue has never been a browser compatibility issue, but we have to actually temporarily give the user a Chromium-based browser just to get a modicum of decent support these days.

Both vendors, of course, tell us we should just use Chrome because it's the only browser they support. (Even though other browsers work fine.) And unfortunately, most IT staffers end up getting directed by superiors to follow said instructions.

<comment><USER15> > This isn't why. At work I deal with two different vendors who refuse to > troubleshoot any issues with their products on anything but Chrome.

This is the case now but a decade ago, in the period the original poster was talking about, it was because of things like what they mentioned: Mozilla needed some attention to detail on those tickets, a robust MSI install package, and a polished policy deployment system. Lots of large shops deployed it but it wasn't loved because there was always some wart to work around.

</comment></comment></comment><comment><USER16> Pocket is great and totally deserves more promotion. I know this will trigger a lot of people saying it's spyware, I used to think that too, but then I embraced it and it's great for bookmarking, syncthing tabs, reading news as podcasts on mobile etc. It's great.

<comment><USER17> Something being spyware and you embracing it seem orthogonal. Are you saying it is spyware (not an argument I've seen before) but you choose to use it anyway?

<comment><USER16> I said other people will call it spyware, because they don't understand how and it works and what it does.

<comment><USER18> I think the biggest complaint with Pocket is Mozilla's broken promise to open- source it. After that, we will all be able to check for ourselves whether Pocket is spyware. I look forward to that day, may it come soon.

<comment><USER16> >After that, we will all be able to check for ourselves whether Pocket is spyware.

Who watches the watchers? How do you know what's running on the servers?

</comment></comment></comment></comment></comment><comment><USER19> Just tested Firefox 79.0b1 with webrender.all and surprisingly it's performing leaps over Chrome on Win10 Intel GPU. In the below image, left side is Firefox Developer Edition and right is Chrome 83.0.4103.116 on Windows 10 on a Dell XPS.

[https://i.redd.it/6gaj12tlh2851.png](https://i.redd.it/6gaj12tlh2851.png)

</comment><comment><USER20> If anyone at Mozilla is reading, your Security Fixes link 404s.

It will be here when it is released:

[https://www.mozilla.org/en- US/security/advisories/mfsa2020-2...](https://www.mozilla.org/en- US/security/advisories/mfsa2020-24/)

<comment><USER4> I think this happens every release, although I don't know why. Probably just different teams pushing the button at different times.

</comment></comment><comment><USER21> New in Firefox 78: DevTools improvements, new regex engine, and abundant web platform updates

[https://hacks.mozilla.org/2020/06/new-in- firefox-78/](https://hacks.mozilla.org/2020/06/new-in-firefox-78/)

</comment><comment><USER22> Does it still have UglyBar from v77? Seems like that.

<comment><USER23> Is there any specific thing that makes it ugly? I'm curious because I don't see the ugliness.

Since I use Firefox 99% of the time, I just opened Chrome and Edge to check out their address bars. All three are extremely similar. In Chrome and Edge the borders are more rounded, while Firefox opts for a more square look. All three feature a "popup" effect that makes the bar slightly bigger when interacting with it: in Firefox this effect activates when clicking the bar, while the other two enlarge when inputting data.

<comment><USER24> It uses a non-native look for no good reason, and the "popup" thing obscures other parts of the browser UI.

<comment><USER25> I've seen numerous people discuss this, so I can only presume that there is some itch here, but I'm not getting it. Hasn't the location bar been non- native since pretty much forever, since it has to display icons and colors and all sorts of other stuff that I think most native drop down widgets just won't?

As for obscuring other parts of the UI … such as? (That it wasn't since the dawn of time; I mean, it drops down and obscures part of the browser window, sure? But it's done that since the idea of having it autocomplete was first added.)

The only recent change seems to be that it swells up by a few pixels when you focus it. (I'm not a fan, but it honestly doesn't seem to matter much. It _has_ started to not show the carat, and _that_ is definitely annoying, and I'd agree more with a native widget argument there, I just don't think one exists.)

<comment><USER26> > As for obscuring other parts of the UI … such as?

Bookmarks toolbar, for one. Open a new blank tab, the URLbar has focus by default and is now partially obscuring the bookmarks right at the moment you're most likely to use them.

<comment><USER25> Curious. So, this is what I see: [https://imgur.com/a/IJBlT4q](https://imgur.com/a/IJBlT4q) The actual dropdown doesn't happen on a new tab. (It will if I click on the bar or start typing, though.)

I'll admit, I did not think of the bookmarks bar. (I don't use it, myself.) Thanks, too, for responding.

</comment></comment></comment></comment></comment></comment><comment><USER27> OT: I would like to write an extension that restores the previous clicking behavior on the title and search bars but I have never written a Firefox extension before. Does anyone know if this kind of functionality change would even be possible with the current extension framework?

<comment><USER28> I would not expect this. One of the main points of removing the old way of doing extensions was to stop allowing extensions to arbitrarily modify the browser's UI, which was difficult to maintain.

</comment></comment><comment><USER29> So ... "Close tabs to the right" and "Close other tabs" moved from top level context menu to submenu "Close Multiple Tabs".

This is the kind of ungraceful UI degradation which would send me packing if there was anywhere else decent to go.

<comment><USER30> Wow. Right-click on a tab. I didn't even know that menu existed.

</comment></comment><comment><USER31> Firefox has slowly crawled back into my daily workflow of development as well as general browsing with the 67.0 release mid last year or so, that brought in major performance improvements.

Though there is one caveat that bothers me a lot. When auto restoring sessions after I've closed Firefox and launch it the next day, it restores the same tabs, but with the old data (for eg., youtube or twitch live channels / searches). Every tab needs to be refreshed manually to get the new data, which Chrome automatically does.

<comment><USER9> i prefer this behavior, as i often want to see the "old" version of pages that i had been looking at before and avoid a barrage of network requests at startup. in any case, i'm pretty sure there's an about:config setting to change it.

</comment></comment><comment><USER32> FYI, the 78 update has been pulled off (0) due to a bug (1).

[0] [http://forums.mozillazine.org/viewtopic.php?f=38&t=3062694](http://forums.mozillazine.org/viewtopic.php?f=38&t=3062694)

[1] [https://bugzilla.mozilla.org/show_bug.cgi?id=1649393](https://bugzilla.mozilla.org/show_bug.cgi?id=1649393)

</comment><comment><USER33> Bitter-sweet seeing new Pocket features in there, knowing that the service is still proprietary more than 3 years after its acquisition. If Mozilla wants to become a service company, it should just say so:

[https://github.com/Pocket/extension-save-to- pocket/issues/75](https://github.com/Pocket/extension-save-to- pocket/issues/75)

</comment><comment><USER34> I switched from Brave to Firefox recently, and I'm very happy! I perceive it as faster, and feature-wise it's pretty much equivalent. It's made some enormous performance improvements.

Firefox still has some rough issues. It doesn't always feel like a native app (e.g. form fields, toolbar, preferences), and its visual touches (e.g. the main toolbar) are sometimes heavy-handed. In other areas, such as the "omnibar" behaviour, it's still catching up to other browsers, but at least it's catching up.

Another thing I dislike is just how much tweaking I had to do to remove quirks. For example, Firefox has some really excessive animations, which fortunately can be turned off ("ui.prefersReducedMotion" in "about:config").

Firefox has some ways to go, but I'm a lot more optimistic about its future than I used to be.

<comment> Munky-Necan I tried to use Brave for a little bit, but it felt like I was apart of a meme. The browser is fine, but it felt invasive and awkward. I can't put my finger on why it made me feel this way; something was just... off.

Firefox and Safari are my two main stays now. Both have privacy focus, although one takes privacy significantly more seriously. They are both phenomenal browsers in my opinion.

</comment></comment><comment><USER35> I see their still pushing Pocket recommendations, I still find that choice baffling.

<comment><USER36> You can just remove them from the start page. I did and they never came back by themselves. My new tab page is completely empty aside from the cogs icon to configure it.

<comment><USER35> Always the first thing I turn of on a new install of Firefox.

</comment></comment></comment><comment><USER37> Anyone know what this means?

> We fixed bugs in the search results quality composition and improved search > result texts based on recommendations by our partners.

It sounds like Firefox has its own search engine? Do they mean the browser history+bookmark search feature? Or the search query suggestions when you have third-party autocomplete turned on? What "partners" (this sounds very markety) is this about?

</comment><comment><USER38> > Wasm Multi-value is now supported, meaning that WebAssembly functions can > now return multiple values, and instruction sequences can consume and > produce multiple stack values

The linked description, while great, is half a year old and focuses on technical aspects of parts of the toolchain. How far are we currently from being able to enable this in normal builds of Rust or C++?

EDIT: seems like I can enable this in nightly rustc by passing `-C target- feature=+multivalue`.

</comment><comment><USER39> Does anyone know if there's a way to stop Firefox giving me "[http://weather/"](http://weather/") as the first suggestion when typing 'weather' in the address bar? I have never in my life wanted to visit weather.com but I can't seem to make Firefox stop suggesting it. It doesn't do this for other keywords.

<comment><USER40> If you have that in your history, you can highlight that entry in the search results (e.g. using the up/down arrow keys after typing "weather") then press Shift and Delete to delete it from the history. If you don't want search results, you can go to the options/preferences, select search, and uncheck the "Provide search suggestions" option.

<comment><USER41> This key combo doesn't work

<comment><USER42> try searching for the item in your History sidebar, then right-click -> Forget about this site.

<comment><USER43> I've done this and the OPs suggestion, and the incorrect autocomplete persists. In my case, I went to a random person's blog that starts with the same two letters as a website I use frequently.

I've given that random person's blog thousands of hits over the last year...

<comment><USER40> If it is in your top sites, you need to add that widget to the home page to get access to the menu to dismiss the result. (See my reply to the grandparent post for details.)

I don't know of an easier way to do this.

</comment></comment></comment></comment></comment></comment><comment><USER44> Ironically it's kind of a shame, but I feel that the success of Firebug ended up hurting Firefox in the long run.

Firebug was really a pioneer in the devtools, but for so long Firefox just allowed it to be the defacto Dev tools that google ended up lapping them. And they we made to play catch up

Once developers started jumping, they convinced slowly got their relatives or non techs friends to switch.

<comment><USER45> My mom got new Win10 laptop and I made her install Firefox only

</comment></comment><comment><USER46> "We've disabled old TLS connections and insecure cipher-schemes, so websites which used to work will now display an error" doesn't really sound like an improvement for the user. I'd rather see a warning detailing the situation and asking me if I want to proceed (maybe I don't care about encryption when visiting the particular site).

<comment><USER47> There has been a bypassable error for TLS 1.0 and 1.1 for several months. There have been error messages in devtools. In October of 2018 the browser vendors jointly announced that this change was coming. [1][2] This is happening in coordination with Chrome. The sites that are affected by this have had nearly 2 years to sort out their upgrade to TLS 1.2 or 1.3.

[1] [https://blog.mozilla.org/security/2018/10/15/removing-old- ve...](https://blog.mozilla.org/security/2018/10/15/removing-old-versions-of- tls/) [2] [https://blog.chromium.org/2019/10/chrome-ui-for- deprecating-...](https://blog.chromium.org/2019/10/chrome-ui-for-deprecating- legacy-tls.html)

<comment> yjftsjthsd-h > The sites that are affected by this have had nearly 2 years to sort out > their upgrade to TLS 1.2 or 1.3.

... or are hardware appliances with a management interface, segregated on an internal VLAN, that will never be updated, but which were helpfully "forward thinking" enough to force HTTPS.

</comment></comment></comment><comment><USER48> My Firefox's About page says I'm running Firefox 77.0.1, and that my browser is up-to-date.

Is it because I'm running OS X 10.9, and they're planning to migrate me to ESR but the ESR build isn't out yet or something? Because I'm on 10.9, and I know my system is vulnerable, I always try to update to the latest release very quickly.

<comment><USER49> According to IRC rumors, automatic updates are delayed for a bit after the release is announced. Not sure if this is due to CDN replication or some other issue. At any rate, you can get the update faster by downloading and installing it manually.

<comment><USER48> I expected some delay as it was rolled out, but it's now five hours later and I still haven't gotten it.

I think I will indeed need to do a manual download, although I'm kind of curious how long it will take at this point.

</comment></comment></comment><comment><USER50> Interesting.

I don't see anything about it in the Release Notes,

but Help > About Firefox would normally offer the latest update.

Mine is saying 77.0.1 is up to date.

</comment><comment><USER51> On Firefox for Android Beta, the default seems to be to opt-in, to share "Marketing data" with their mobile marketing vendor, Leanplum.

This caught me by surprise and can be changed in the Settings -> Data collection menu.

</comment><comment><USER52> Firefox is great. All I want from it now is to have tabs smaller than 50px and to have CSS property backdrop-filter finally enabled to have those niiiice blurred backgrounds.

</comment><comment><USER53> Firefox shows the full URL, fully supports multiple Google accounts, and is the only browser that has temporary container tabs. I'm surprised Chrome users tolerate soft paywalls or having to constantly clear their cache. It's a basic feature every browser should have in 2020.

</comment><comment><USER54> My old Mac Mini is getting left behind here.

I dread the thought of buying a newer one but everyday it's getting closer to a necessity.

</comment><comment><USER55> Very nice - the PIP functionality is something I've been looking forward to with more browser support.

</comment><comment><USER56> Firefox 78 will be the new ESR. That unfortunately sets the new, ugly omnibar in stone.

<comment><USER57> [https://github.com/Aris-t2/CustomCSSforFx](https://github.com/Aris-t2/CustomCSSforFx) has some tweaks to make it less annoying.

<comment><USER58> Once I saw the only way to fix this terrible MegaBar was by modifying code that will break later I realized I was no longer the target demographic and switched browsers.

<comment><USER59> As someone likewise feeling disenfranchised by FF, what did you switch to?

</comment></comment></comment></comment><comment><USER60> Does anybody here actually dislike Firefox (as a daily driver or in webdev)?

<comment><USER61> I don't like the constant UI changes, the ugly configuration menus, the new bar and the bundling of stuff nobody asked for like Pocket.

</comment></comment><comment><USER62> Killing it

</comment><comment><USER63> one of the reasons why i love firefox? the Tracking protection. it makes webpages faster to load. Cool

<comment><USER64> Firefox's Tracking Protection is a fraud and has a whitelist of domains to allow, which include Google and Facebook properties despite them being the biggest threats to privacy.

<comment><USER65> Which would break Facebook and Google login for a massive portion of the web (since those buttons are usually embeds). If you want to block them yourself, fine, but it's not the browser maker's job to make that decision for the user.

<comment><USER66> Compared to the decision to integrate Pocket?

</comment></comment></comment></comment><comment><USER67> Hate to be cynical, but I feel like they're just releasing a new one every week just to stay in the news.

<comment><USER68> They are on a 6 week release cycle. Every 6 weeks they release the changes that are ready. Sometimes the changes are large, sometimes small. Over time, rapid releases tend to get new features out sooner than delayed releases. Don't get hung up on the version number. It doesn't mean this is a major release, it is just the 78th release in a series.

<comment><USER69> They changed it to a 4 week release cycle.

</comment></comment></comment><comment><USER70> I want to use Firefox but find the plug in system to be unusable and therefore prefer a chromium based solution. I have 30+extensions, many developer based, many for privacy and blocking, and many new ones to prevent sites from dictating my behavior like blocking copy and pasting of text. But the most important one is a plug in manager that allows me to to toggle on/off individual plug-ins from the sidebar with two clicks. FFs plug in page is atrocious. It's a Giant infinite scroll page that takes several clicks to do anything and I don't think ctrl f works so I have to scroll and look.. Nope. I just can't.

In an age where the web is becoming more hostile to users by hiding and controlling the info, and forcing things like amqp, I think plug-ins are really the only override to enable user agency and Firefox plug in management is very immature.

<comment><USER71> you can set keyboard shortcuts to toggle the add-ons. Yes, you do have to go through the single page as you mentioned, but it's a one-time thing.

Personally, I can't leave Firefox due to:

1\. Sidebery (on Desktop)

2\. Night-mode (on Mobile)

<comment><USER72> Sidebery - wow! I'd looked for a vertical tab add-on to no avail last year, but this is incredible. Thanks.

It still boggles my mind that everything is made to go horizontal on default Windows/Mac UIs when desktops are widescreen and most content we consume now is tall and thin.

<comment><USER71> Yep! Firefox supports vertical sidebars (which Chrome doesn't I guess?), so you find a lot of Firefox add-ons for vertical tree-style tab sidebars.

Sidebery is my favorite by far, because it also lets you organize the tabs in "panels", and lets you set keyboard shortcuts for navigating across panels. So you don't end up with a giant list of 50 tabs.

Eg I have 1 panel for email/chat/music, and a separate panel for each task I'm working on. Makes things a lot more manageable, since each panel usually has only 5-10 tabs.

</comment></comment></comment></comment><comment><USER73> So I'm on macOS using Safari for web browsing, chrome for work (web app + backend). I'm on the younger side so chrome has been omnipresent. I do not mean to understate the importance of privacy in the modern web, so don't misunderstand my question. Why would someone, as a developer and a user, want to use Firefox over Safari (mostly) and Chrome (for work).

<comment> yjftsjthsd-h > I do not mean to understate the importance of privacy in the modern web

> Why would someone, as a developer and a user, want to use Firefox over > Safari (mostly) and Chrome (for work).

You wrote the answer before the question. Safari might have users' best interest at heart, but anything that stops an advertising company's browser from dominating the market is a good thing.

<comment><USER74> You made me think of Drew's last blog entry: [https://drewdevault.com/2020/06/26/Vendor-purpose- OS.html](https://drewdevault.com/2020/06/26/Vendor-purpose-OS.html)

Maybe we need to coin "vendor-purpose browser" as well? All of the big three are, to some extent. And now, one has to think of the motives behind each vendor.

Hint: I'll stay on Firefox. And I even use other browsers sometimes, that just support some HTML (elinks, dillo...) on underpowered systems. Maybe we just need more underpowered systems?

</comment></comment></comment><comment><USER75> I really want to use Firefox, but their dev tools are lacking in so many ways when compared to Chrome. Fix that, and perhaps even improve on a few things that Chrome does badly (e.g. JS profiling in the "performance" tab of Chrome dev tools gives you zero information about which functions are responsible for the overhead), and you'll have me converted. I've been wanting to ditch Chrome for ages, but have no suitable alternative for development.

Edit: I've been asked for examples where FF dev tools are lacking, so copying from another comment of mine below:

1) Chrome CPU profiler will display the amount of time taken against calls in line in your source JS files. FF does not do this.

2) Memory snapshots in FF are not sortable, and do not show distance.

3) Performance tab in Chrome allows CPU throttling, FF does not.

4) Performance tab in Chrome also captures much more info, such as node count, heap size, number of listeners, GPU memory.

All the above are very useful if you're building a high performance web app or library.

<comment><USER76> > their dev tools are lacking in so many ways when compared to Chrome

Like what for example? Please be specific.

<comment><USER75> A few off the top of my head:

1) Chrome CPU profiler will display the amount of time taken against calls in line in your source JS files. FF does not do this.

2) Memory snapshots in FF are not sortable, and do not show distance.

3) Performance tab in Chrome allows CPU throttling, FF does not.

4) Performance tab in Chrome also captures much more info, such as node count, heap size, number of listeners, GPU memory.

All the above are very useful if you're building a high performance web app or library.

</comment></comment></comment><comment><USER77> I recently tried to move to Firefox (again). I try to to this every couple years. I run into the same three blockers every time.

1\. The omnibar completion isn't as good. Chrome figures out where I go pretty regularly, and autocompletes extremely well based upon habits. 2\. The dev tools aren't as good. I mostly work in the frontend, and simple things like how you write css overwrites with tab completion is just not as good in Firefox. 3\. I often run with lots of tabs. Although firefox lets you make tabs smaller, it's default method of "scrolling" tabs isn't as nice as chrome infinite method.

It doesn't help that I pair this yearly experiment with DDG as my search. With that pairing I often run into autocompletion / omnibar issues and find myself just banging !g to get myself out of it.

I really would like to switch, but the gap is too much for my daily tooling. I say this as someone who recently switched to Linux from OSX and really ran into no issues outside of having to spend a week setting thing up how I liked.

<comment><USER78> > 1\. The omnibar completion isn't as good. Chrome figures out where I go > pretty regularly, and autocompletes extremely well based upon habits.

That's interesting, because I have found rather the opposite, for how I use it. Chrome doesn't seem to remember anything but my most frequented sites; with Firefox I find it much easier to find that thing I was reading a few weeks back that I did not bookmark by searching a word from the title. Chrome doesn't seem to remember anything but my most frequent and/or very most recently visited sites.

<comment><USER79> Yeah the FF bar completion is lightyears ahead of chromes. Chrome massively favors searches over history matches. I revisit every couple of months but it always is comically unusable for me. To the point where I visit only about 3 sites with my chrome, and even when I write the first 3 letters of a 4 word domain the default action is still a google search (with the correct site listed beneath but not default selected).

edit: So I just opened my very secondary chrome. I use it for Youtube listening mostly. When I enter "hand co" to find my often listened "hand covers bruise" song, I get 7 (!) google searches, and the 8th and last entry is the Youtube link.</comment></comment></comment>


Y Combinator Firm CO2Stats Caught in Frenzy of Environmental Cost of Google Search - <AUTHOR> http://www.xconomy.com/boston/2009/01/12/tempest-in-a-tea-kettle-co2stats-founder-caught-in-frenzy-around-environmental-costs-of-a-google-search/

<comment><USER2> Publicity is good, as long as its not "cuill" publicity.

On another topic: is there any goal quite so vacuous as "raising awareness" about something?

<comment><USER3> I'm not sure that's true. I mean, in many businesses it's true that any publicity is good publicity. But when your business is dependant on you being an authoritative source bad publicity has a real impact. What's the point of a site that reports CO2 stats if the guy has proven he can't be trusted to give accurate stats?

(The link says he claims not to have been the source for the article just for the record)

You're probably right in this instance. His startup was so small before and the fallout is so big that he may very well get more new visitors than he loses this time around. But I'll be curious to see if they make return trips or whether they assume he can't be trusted and go on their way.

<comment><USER2> I have no idea which kind of publicity this will end up being, by the way. Environmentalism itself is so popular that it would take a pretty big screw up for CO2stats to be irreparably damaged. There is certainly a market.

</comment></comment></comment><comment><USER4> Firestorm, sensational, tempest, frenzy... I think the guy's overdoing it a bit.

</comment><comment><USER5> best marketing move since steorn put that ad in theeconomist!

<comment><USER6> Not very repeatable getting the Times to troll Google unless you get a PR company to feed them the flamebait nonsense and then give a quote to go with it. I suspect CO2stats has just been lucky. I'm sure this will be good publicity for them if they keep handling it as well as they have.

</comment></comment><comment><USER7> Now, more companies will be aware of their environmental impact.</comment>


Show HN: PropellerSDK – add tournaments and monetize your game - <AUTHOR> http://www.propellersdk.com/

<comment><USER2> Grantoo cofounder here. We'd love to hear what the HackerNews community thinks of what we've built. We're a team of game developers frustrated with the options out there for engaging + monetizing players by delivering value, not showing ads, so we decided to take matters into our own hands. With PropellerSDK, we are matching top games with Fortune500 brands who will sponsor tournaments with real prizes (tuition, charity grants, etc) for players. Games get great features + a new revenue stream, players win prizes, and brands benefit from the most effective mobile advertising channel currently available.

This is a Version1, V2 is already in the works and slated for release in March 2013 - so let us know what you think!

</comment><comment><USER3> I've watched them do an integration. It was stupid fast. They seem to recognize that if they scare developers off with a shitty SDK integration they're dead in the water so they NAILED that part.

</comment><comment><USER4> Interesting. How does the integration work? How long does it take? Who are the brands? How do you make money? It says you're choosing 10 games.. How and when?

<comment><USER4> Sorry for the barrage of questions, I want to know how far this is from release before spending time reviewing it. I hate the "enter your email and we'll get back to you" vaporware.

<comment><USER2> V1 is ready to deploy, brands are already on-board, first campaigns go live in February. We are accepting Games on a rolling basis over the next two months. It will usually take a couple of days to get back to you.

This is not vaporware. Our tech team is among the best in the business, led by Alan Price former CTO of Electronic Arts. the server infrastructure we've built is one-of-a-kind, battle-tested, fast and scaleable.

The integration takes less than an hour, and is fully customizable / skinnable. our goal is to give game developers full control over the user experience.

<comment><USER4> Thanks. deck looks great and gives details, im passing this by my team. fyi the navbar doesn't work for me. Had to scroll manually.

</comment></comment></comment></comment><comment><USER5> I've worked with these guys and love what they're doing. PropellerSDK looks great!

</comment><comment><USER6> i wish we had that in France!

<comment><AUTHOR> Grantoo was founded in Paris before moving to SF :) Europe is very much on the radar.</comment></comment>


The automated Amazon seller making the worst phone cases ever - <AUTHOR> https://www.theguardian.com/technology/shortcuts/2017/jul/11/the-automated-amazon-seller-making-the-worst-phone-cases-ever <comment><USER2> Certainly conversation starters....probably not a conversation you want to be a part of but a conversation starter no less.</comment>


My Top 100 Programming, Computer and Science Books Part  One - <AUTHOR> http://www.catonmat.net/blog/top-100-books-part-one/ <comment><USER2> Previously posted: [https://news.ycombinator.com/item?id=9443028](https://news.ycombinator.com/item?id=9443028)</comment>


How Do I Learn Some Functional Programming? - <AUTHOR> http://www.fse.guru/how-do-i-learn-some-fp <comment><USER2> I can't recommend CIS 194 ([http://www.seas.upenn.edu/~cis194/](http://www.seas.upenn.edu/~cis194/)) enough. After a first weak attempt at learning haskell, following this course did it for me, and I've managed to write some significant haskell programs.

It covers all the fundamental abstractions found in functional programming, and the homework has some close-to-real-life examples that students must do.

5 stars.

</comment><comment><USER3> I am not sure if this article was a joke or somebody seriously think that functional programming should be learnt by Ruby, JS and Scala. I have learnt much more by using Erlang, Clojure and some parts of OCaml. Learning for just learning programming in general and getting into the most popular languages is a different subject though. If I was to learn FP I would start with Elixir and probably with Racket just to learn a LISP dialect. It is much fun.

<comment><USER4> The book _Functional Programming in Scala_ is widely regarded as one of the best books on functional programming in any language. It has very little to do with the Scala language and everything to do with how you would write purely functional programs for the real world (file systems, concurrency, etc).

<comment><USER3> Sadly you did not reflect to anything I wrote. I bet the Scala book is pretty good, however I would still learn programming from SICP if I just wanted to learn how to write purely functional programs. This is just a matter of taste.

</comment></comment></comment><comment><USER5> Learning through reading is one thing, but I've found that I never truly understand the concepts until I begin to write some code in a functional way.

We have some Scala in my work environment. I had taken the course, read the book, and spent a little time writing some code, though as deadlines got tight, I would revert back to Java.

It wasn't until I forced myself to write everything in Scala that some of the idiomatic patterns started to make sense. For example, an export job was timing out due to numerous synchronous calls to external services. I rewrote it using async Futures with flatmap and collect, and it was much faster.

Even though I had read about Futures and their functional use a dozen different times, I realized I truly didn't understand them 'till I could apply them to a concrete problem I had. Also, Twitter puts out a lot of really good Scala stuff: Twitter school, Effective Scala, Finagle and Finatra, etc.

TLDR; read the books while writing some code.

</comment><comment><USER6> I can recommend reading Practical Object-Oriented Design in Ruby by Sandi Metz to every programmer out there. This is so much important to understand basics of Code Design. Even if you think you will not be doing any functional or object-oriented programming, still, go ahead and read it.

</comment><comment><USER7> The book that helped me the most in terms of pragmatic use of functional concepts in real world applications was _Higher Order Perl_. The examples have been translated into several other languages, if Perl gives you hives (I quite like Perl, but I know it is scary for some folks). It really does a great job of demonstrating from the lowest levels of a functional system (closures, recursion, first class functions, etc.) on up to actually doing things with those basic building blocks.

It is certainly not "pure", but if you're coming from a procedural/OO world mindset, it's a fantastic bridge. That said, it doesn't cover some of the newer features of some modern FP languages, and won't necessarily directly apply to writing in Haskell or ML.

</comment><comment><USER8> Realm of Racket is a fun and engaging book. It will guide you through making successively more complex and interesting games using a Racket, which is modern and fairly widely used type of Scheme.

</comment><comment><USER9> The React and Redux community is heavily influenced by Functional Programming. Because of that, I've collected a number of friendlier / easier-to-read articles on understanding FP as part of my React/Redux links list: [https://github.com/markerikson/react-redux- links/blob/master...](https://github.com/markerikson/react-redux- links/blob/master/functional-programming.md) . Some pretty good articles in there.

</comment><comment><USER10> Depends a bit on how deep you want to learn but I found using underscore in javascript helpfull [https://smthngsmwhr.wordpress.com/2014/02/02/eloquent- javasc...](https://smthngsmwhr.wordpress.com/2014/02/02/eloquent-javascript- with-underscore-js/)

The problem I had with full on functional stuff was seeing what the point is - ok you could replace your for loop with some weird recursive stuff which the compiler will turn back to imperative behind the scenes so it will run quick but I had a trouble seeing why. However replacing some javascript loops with underscore stuff I was able to see how it was more compact and less bug prone. Also it doesn't take long to get.

</comment><comment><USER11> There is this free ebook on functional programming in Python by O'Reilly: [http://www.oreilly.com/programming/free/functional- programmi...](http://www.oreilly.com/programming/free/functional-programming- python.csp)

<comment><USER12> Apparently it's been 'open sourced'

[https://archive.org/details/functional-programming- python](https://archive.org/details/functional-programming-python)

ps: once upon a time I stumbled upon a FP article in python dealing with designing (not applying known patterns) function call protocols to solve aritmethic problems. Asked on HN already but nobody could help. So just in case it rings someone else's bell .. feel free to reply.</comment></comment>


Better Web Application Framework -- Awesome video comparison of 6 frameworks - <AUTHOR> http://video.google.com/videoplay?docid=6297126166376226181 Great video, if you are deciding what to use next. <comment><USER2> The purpose laid out at the beginning of the video was the ease of developing UI code. But in reality, the author does almost no UI development. He sets up projects, and then in every case where a UI could be auto generated, uses it verbatim.

Forgiving the overwhelming simplicity of the sample project, the video gives little insight on how difficult it is to modify and fine tune interfaces, with the notable exception of pointing out if they work in "html editors". I do not know a single serious developer who would trust his html to a wysiwyg html editor.

</comment><comment><USER3> Summary:

J2EE sucks. Rails, Django, WebGears, and Zope are pretty nice.

The problem with this demo is that both examples (hello world, and a time tracking app) are _very_ simple examples. While it's very easy to do simple things in Rails (can't speak for the others), it's still hard to do moderately to very complex things. There's no magic bullet.

That said, Rails, etc to make things more fun and take some of the grunt work out.</comment>


Zelda Games on the Philips CD-i - <AUTHOR> https://en.wikipedia.org/wiki/CD-i_games_from_The_Legend_of_Zelda_series <comment><USER2> Years and years ago (~2006-2007), after one of my many Wikipedia rabbit-hole nights, I stumbled upon the CD-i, and consequently the Zelda CD-i games. I immediately had to find an emulator, and play Faces of Evil, and I couldn't stop laughing once cut-scenes started playing.

I took my video camera, pointed it at my monitor (my computer was too slow for desktop capture), and sent the video to my friends, and it became a bit of a meme that we'd send each other. If I had only had the foresight to upload it to YouTube, I could have been the person responsible for the "My boy!" memes.

The games suffer from awful controls, but I actually did manage to complete Faces of Evil and Wand of Gamelon...there is a _bit_ of fun to be had playing them, though you'd be better off finding one of the Link to the Past romhacks at this point if you want some more Zelda action.

<comment> murph-almighty You don't even need a romhack for Link to the Past now, it's available on the SNES virtual console for Switch. It's free aside from the cost of the Switch.

<comment><USER3> My favorite romhack is [https://alttpr.com/en](https://alttpr.com/en) (A Link to the Past Randomizer). It basically takes your rom and swaps the location of all items in chests, pendants / crystals, and can even swap enemies, keys in dungeons (for cross dungeon shenanigans) and entrances.

So I much prefer the romhack to the original now, given my familiarity. Now if only I could play it on the switch...

Edit: a recent playthrough had me without the bow for much of the game. A different one had me start without my sword and I got through a dungeon before finding it. Fun times.

<comment><USER4> A Link to the Past randomizer is easily the most popular randomizer, but there are now many more randomized games. There are other Zelda games like Ocarina of Time and Wind Waker, and there are non zelda games like Final Fantasy and Castlevania Symphony of the Night.

This is becoming a bit of a trend in classic gaming speed runs. Multiple people will play the same "seed" or arrangement of items/characters and you can watch them race on Twitch or even at live gaming events. In some games the top non-hack gamers have crossed over and spend significant effort playing the randomized version of their favorite game. While there is an element of luck in this game format, the best players tend to consistently rank high in tournaments so skill is a large factor.

Of course, the legality of this is highly questionable. Most people that play A Link To The Past Randomizer do not have a legal copy of the v1.0 Japanese game the hack operates on. For those that do their license would allow them to make a rom, but would it allow them to make modifications to that rom and upload gameplay videos online for profit?

Some game developers have noticed this trend. For example, Cadence of Hyrule (2019) plays similarly to A Link to the Past Randomizer in that key items are distributed randomly across the game. They even call a specific item distribution a "seed" which is terminology borrowed from the randomizer community.

It's easy to ignore this trend in gaming because it's not very large like loot boxes or two tier currencies and it doesn't have a marketing budget. It is however a fun grassroots movement branching out from people's love of classic games.

<comment><USER5> "They even call a specific item distribution a "seed" which is terminology borrowed from the randomizer community."

Random number generators have been getting "seeded" for decades now; that terminology may well predate video games entirely, though I can't prove that either way with an HN comment's worth of effort. Probably originates from a "seed crystal" in chemistry, which goes back even farther.

<comment><USER3> Oh, definitely. But even for randomly generated games that term doesn't usually get surfaced (with the notable exception of minecraft). So I think it getting surfaced more often is a sort of a sign of influence from the randomizer community

</comment></comment></comment></comment></comment></comment><comment><USER6> I remember playing one of these games. It was super cool that you got to play as Zelda, but the controls where so unresponsive and awful. That ruined most of the experience. The graphics where very different then the competitors. That was also pretty cool. Think we borrowed the player from someone else for a couple of weeks. Thinks we knew more about the cd I because of my Dutch roots (philps). Also the console/video player was incredibly expressive at the time.

</comment><comment><USER7> While these games have become infamous for the hilariously bad animation quality, the studio that did them continued to do work for the videogame industry. They were contracted out to do the animation for the ill-fated _Warcraft Adventures_ game by Blizzard:

[https://en.wikipedia.org/wiki/Warcraft_Adventures:_Lord_of_t...](https://en.wikipedia.org/wiki/Warcraft_Adventures:_Lord_of_the_Clans)

Though the game was never released, someone leaked a copy years later, and playthroughs were subsequently uploaded online:

[https://www.youtube.com/watch?v=mUNFrbpOSTE](https://www.youtube.com/watch?v=mUNFrbpOSTE)

<comment><USER8> They also worked on IM Meen and its sequel, which retained a lot of the art style from the Zelda CD-i game animations (and garned some of the same internet infamy as a result).

<comment><USER9> > _sequel_

Chill Manor: [https://www.youtube.com/watch?v=oYGgLZL2vUU](https://www.youtube.com/watch?v=oYGgLZL2vUU)

</comment></comment></comment><comment><USER10> Slightly OT. Whilst the CD-i was a poor seller and far from the best gaming console of its generation it had the best digital video playback of any platform on the market thanks to its excellent MPEG-1 decoding add-on.

PCs did have MPEG accelerator cards available but these were niche and expensive. The Philips CD-i offered this for less and in a convenient VCR type form factor - pitching itself as a premium Video-CD player with gaming thrown in.

This was important at the time since full motion video games like The 7th Guest and Rebel Assault were very popular. Some of these titles debuted on the CD-i and indeed offered the best experience there, better than even the PC by quite some margin.

I remember my jaw dropping when I played The 7th Guest on my friend's Philips CD-i. It was smooth as silk vs the jerky PC version.

Other titles like Space Ace and of course Burn Cycle were also incredibly impressive. Basically any game with heavy video elements played to the strengths of the CD-i in a pretty big way.

As gaming graphics started to improve FMV games became less popular and with DVD on the horizon the CD-i came to a dead end.

</comment><comment><USER11> Never heard of the CD-i is there an emulator out there? Also is this the last time Nintendo made a game for a console they didn't own?

<comment><USER12> There is, but Nintendo didn't make these games. As a consequence, they're pretty awful.

However, we did get some of my favorite quotes out of it for the past few decades: [https://www.youtube.com/watch?v=TN8-Pdz- ns8](https://www.youtube.com/watch?v=TN8-Pdz-ns8)

My wife and I often say 'I guess I better get going!' and 'How about a kiss, for luck?' to each other

<comment><USER13> Then when she leaves the home: [https://www.youtube.com/watch?v=mBC-2y6C8xU](https://www.youtube.com/watch?v=mBC-2y6C8xU)

Squadala we're off!

<comment><USER12> I mean, they're no end to it. I've played them a minor amount, and couldn't stand them at all (they're in the 2d side scrolling style but just... janky for lack of a better word,) but these cutscenes will live forever for us.

"I wonder what's for dinner."

"I just saved you from Ganon!" "You did not!"

"Oh boy! I can't wait to bomb some Dodongos!"

"Great! I'll grab my stuff!"

<comment><USER2> Monster: "You killed me!!!" Zelda: "Good!"

has always been one of my favorite. I used to occasionally take audio samples from the game and put them as texting and ring tones on my phone, back when people did such things.

ALSO, look on youtube for the I.M. Meen PC game...the animation is made by the same studio [0].

[0] [https://en.wikipedia.org/wiki/I.M._Meen](https://en.wikipedia.org/wiki/I.M._Meen)

</comment></comment></comment></comment></comment><comment><USER14> I have a strange memory about these games. Whenever I was a kid I was looking through some boxes and found a bunch of my older video game magazines. I saw an ad in GamePro for these games and Philips CD-i. I was shocked! How could I have missed _multiple_ Zelda games being released on a console that used CDs? Why had I never heard of this? I am pretty sure that this would have been in 1998/1999 or so, but the magazine was much older.

It had a 1-800 number, which I called immediately to see if they were still selling the games and the system. Someone answered and they were still selling them, but I seem to remember the price being pretty high despite the age of the games and the system. Soon after I must have searched on the internet and discovered that it was mainly a system for edutainment games and lost interest.

Now I have to go look to see if there are any GamePro scans in the Internet Archive that have that ad.

</comment><comment><AUTHOR> Not all of the Nintendo titles were bad though: I loved Hotel Mario.

It also had cringeworthy cut-scenes though :)

[https://www.youtube.com/watch?v=LxKCqxAWXmo](https://www.youtube.com/watch?v=LxKCqxAWXmo)

edit (unrelated): Steel Machine was a decent shooter. I recently found some background info about the game and how it was like to develop for the CD-i at the time.

[http://www.cdinteractive.co.uk/forums/cdinteractive/viewtopi...](http://www.cdinteractive.co.uk/forums/cdinteractive/viewtopic.php?f=3&t=3031&p=15222&hilit=steel+machine)

</comment><comment><USER15> Oh man, I wanted the CD-i so badly because they had this infomercial and showed watching movies on CD, which was very exciting to a 10 or 11 year old me.

Very grateful my mom ignored me and and my protestations that we get one because if we had adopted this thing, I know the battle to get a DVD player in 1998 would have been way harder (even then, I had to get it as a DVD-ROM on the computer I got for Christmas and had to buy the stand-alone player myself in 1999 once I turned 16 and had a job).

Also, these games are complete trash. But this partnership was historically very interesting.

</comment><comment><USER16> One of my buddies at Zeldathon ([https://zeldathon.net](https://zeldathon.net)) holds the World Record in Zelda's Adventure Any%... It's so crazy to see them play it, on a real console, and fast. [https://www.speedrun.com/Zeldas_Adventure#Any](https://www.speedrun.com/Zeldas_Adventure#Any) 1:12:56 for that game is crazy fast.

</comment><comment><USER17> We still own a CD-i and Faces of Evil. I never could beat it just due to how awful the controls were. There were a few other games we had for the CD-i that were legitimately enjoyable. The Wacky World of Miniature Golf and Mystic Midway: Rest in Pieces were both fun games.

Every once in a while when I'm visiting home, we'll break it out for a round of mini golf!

<comment><USER18> To this day I still do the sound effect of the skeletons that floating up the screen as my go-to "spooky noise". What a fun game. Burn:Cycle was my #1, followed closely by Escape from Cyber City. The CD-i did have some really fun stuff.

Zelda... nope.

</comment></comment><comment><USER19> In one fell swoop, Nintendo brought to pass both the PlayStation and the Zelda CD-i games. They would never live it down.

</comment><comment><USER20> Sort of random and not everyone's style of humor but here is someone who used the poorly acted CD-i sound bites to troll people in the Ventrilo App:

[https://www.youtube.com/watch?v=k1lpB1JHjIs](https://www.youtube.com/watch?v=k1lpB1JHjIs)

</comment><comment><USER21> I'm surprised that Nintendo has not yet re-released The Legend of Zelda (Zelda 1 from 1986) with updated graphics. It seems as if all the re-releases for the various platforms including Nintendo Switch are just emulators for the NES version.

<comment><USER22> If the Link's Awakening remake does well, I could see it happening

<comment><USER23> Which was just released today and is currently being downloaded at my house.</comment></comment></comment>


Ask HN: How difficult (or possible) is it to get into low level development? - <AUTHOR> I currently work doing the typical line of business web app development and I'm so disallusioned with it. Web development (and really business app development period) just bores me and I feel like I'm just doing different variations of the same thing.
I've always been interested, as a hobby in doing more low level type stuff. Think OS development, device driver development, firmware etc., but I don't think there's really any market demand for those type developers anymore and I imagine it would be extremely competitive (especially as I have no formal education)
Is there any real way to break into this field? I'd be willing to go back to school and such, I just doubt the existence of such jobs <comment><USER2> [https://www.cs.virginia.edu/~evans/cs216/guides/x86.html](https://www.cs.virginia.edu/~evans/cs216/guides/x86.html)

[https://wiki.osdev.org/Expanded_Main_Page](https://wiki.osdev.org/Expanded_Main_Page)

There, all for free on the web no need to go back to school.

As for the type of work; most of it is writing the 1000th driver, making sure some mainframe doesn't keel over on a new version.

Also even the lower level stuff often escape to higher level languages after initial setup.

You'd still be writing code to make the hardware do stuff, just more work to achieve the same. So it might not be that exciting after a while.

<comment><AUTHOR> > There, all for free on the web no need to go back to school.

Oh, I don't doubt that self teaching is an option, I've just imagined this particular subfield would place more weight on a degree given that it probably requires more actual CS knowledge

> You'd still be writing code to make the hardware do stuff, just more work to > achieve the same. So it might not be that exciting after a while.

Unfortunately I fear you may be right on this. It's a shame I lose interest in my hobbies as soon as I start doing them as work

</comment></comment><comment><USER3> If you'd be okay with low-level development on platforms other than typical desktop computers, there's a lot to do in aerospace-related fields. In my observation, you would probably be expected to have a bachelor's degree in some related subject (CS, math, physics, electrical engineering, etc.), but for an entry-level job they wouldn't expect actual low-level experience. Good knowledge of C or C++ in general would help.</comment>


2019 was second hottest year on record - <AUTHOR> https://www.theguardian.com/environment/2020/jan/15/climate-emergency-2019-was-second-hottest-year-on-record <comment><AUTHOR> When coupled with this: [https://news.sky.com/story/crack-in-antarctic- glacier-why-th...](https://news.sky.com/story/crack-in-antarctic-glacier-why- the-melting-ice-sheet-will-affect-the-uk-11908767) \- is feels like we are at risk of things moving faster and changing more than we might expect.</comment>


What would Google be like in the 1960's? - <AUTHOR> http://www.masswerk.at/google60/

<comment><USER2> Nah...

\- why does "return" eject the card?

\- You would more likely get a card as a return. Because that's basically what the computer did back then - sort cards.</comment>


Gary Burrell, Garmin co-founder, has died - <AUTHOR> https://www.nytimes.com/2019/06/20/business/gary-burrell-dead.html <comment><USER2> Garmin is the perfect example of a company that could have been displaced by the advent of smartphones with built in GPS receivers (which probably cannibalized the market for dedicated GPS devices in cars) but has remained relevant due to how they've explored other form factors.

My Garmin FR235 is an indispensable part of my running gear, and no mobile phone has come even close to replicating it.

<comment><USER3> More than just form factor, Garmin has done an incredible job of using GPS technology to make products for enthusiasts, rather than the masses. Cycling computers, running watches, golf range finders, marine, aviation, hunting, etc. If you're a nerd for any of those activities there's a good chance you use a Garmin, not an Apple or Android.

<comment><USER4> I've bought more Garmins than Smartphones. I think I've purchased:

3x Edge 305, Edge 500, 2x Edge 810, Edge 820.

Garmin has the advantage that their products are much more likely to get lost or smashed. So they get to sell a lot of replacements.

<comment><USER5> The customer service is also excellent; my son has a Vívofit Jr, and when the screen went haywire they replaced it—no questions asked. Quite happy with my experiences with Garmin over the years.

</comment></comment></comment></comment><comment> m-p-3 My old Garmin car GPS still works, and thanks to people using OpenStreetMap data I still get third-party maps that are up-to-date way beyond the expected lifetime of the device.

I don't use it often, but it's nice knowing I have a fallback in case my smartphone dies, etc.

</comment><comment><USER6> He was 51 when he started Garmin. Never too late !

<comment><USER7> Even older actually, 52. (He was born Aug. 1937 and Garmin was founded Oct. 1989.)

> _In 1989, they pooled their savings and persuaded Dr. Kao's Taiwanese > relatives to invest seed money. With $4 million..._

That's $8.4 million in 2019 dollars. It takes a lot of money to start a hardware company, especially something as complex as a GPS. I'm wondering if Garmin would exist if he didn't have the personal savings and access to family money. One advantage of being older is having more money (usually).

It was pretty standard that you used savings and/or relatives' money to do startups in the past. I think that a 20-year-old being about to raise cash from arms-length investors (like VCs) is a recent phenomenon -- only in the last couple decades. Jobs and Wozniak built the Apple I with _personal_ cash, and got Mike Markkula's loan for $250,000 (in 1976) or $1.1 million in 2019 dollars only after getting a large order.

<comment><USER8> It's probably a good advantage but not as good as all the experience he undoubtedly built up in those years. What about those decades of observing what's worked and not worked? Decades of practice implementing other people's things while watching out for That One Right Thing?

</comment></comment></comment><comment><USER9> It's rumored that he asked his (now Honeywell) management at the time for project funding, who's reply was "There is no future in consumer GPS".

<comment><USER10> I've heard this too and I'm glad they didn't fund his project. Garmin is a much better company than Honeywell!

<comment><USER9> Yep. I worked with several colleagues who went to Garmin and love it there. I'm still at Honeywell.

</comment></comment></comment><comment><USER11> > which can widely cover areas that Wi-Fi can't reach.

but my smartphone doesn't need WiFi for GPS, works on mobile data.

<comment><USER12> They sell satellite messengers.

GPS should work without any data connection.</comment></comment>


Why micropayments will never be a thing in journalism - <AUTHOR> https://www.cjr.org/opinion/micropayments-subscription-pay-by-article.php <comment><USER2> There's only one way this all goes.

People will donate/subscribe to journalism which claims it faces an existential threat. They will only subscribe to journalism they think is most antagonistic to the political entity they despise (as those are now the TOE for having political views now). They aren't subscribing for news, they are paying to shore up a vaguely legitimised view of their prejudices.

This will mean journalism will have to become more biased, more unsound, more toxic and more representative of the various political echo chambers on social media as they court donations.

I see no other way this evolves.

<comment><USER3> Absolutely. When it comes down to it, most people don't want to be informed, they want their ego to be comforted.

Advertising-driven news may be the root of the current partisanship pandemic, but replacing it with pay-per-view news is only going to make things worse. Instead of mostly watching *News but getting bits and piece from other sources, you'd have vast swaths of the population that subsist entirely on "news" from OANN or Daily Kos. Yikes.

</comment></comment><comment><USER4> I've started subscribing to journalists I like on Substack. I feel pretty good about giving a serious journalist $5 a month. No advertisers to please. Long form, highly researched articles. I don't know if it scales, but it's pretty great for me at the moment.

</comment><comment><USER5> If an ad subsidized dead tree periodical can sell for < $5 why am I expected to pay $10-$20 for the same content online with lower distribution costs?

<comment><USER6> Market segmentation. You _can_ pay more, and will, for the convenience.

<comment> blaser-waffle Hooray for capitalism

</comment></comment></comment><comment><USER7> I think article should free and the comment section should cost 5c to post.

Make bank.

<comment><USER2> Not the worst idea. The average person thinking their voice is relevant in every discussion is a major part of the problem.

I get taxed when I want to eat. What's wrong with taxing this stuff in that context?

</comment></comment><comment><USER8> Nick Szabo has an interesting take on it. Essentially when the mental cost of deciding if the article is worth paying for exceeds the actual price you'd pay you lose from the start.

[https://nakamotoinstitute.org/literature/micropayments- and-m...](https://nakamotoinstitute.org/literature/micropayments-and-mental- transaction-costs/)

</comment><comment><USER9> I'll just say short sighted article, the main problems are news paper organizations who want to maximize profits no matter what and non operational payment processors who can't process real micropayments. One of the reasons why Bitcoin was made is "casual transactions" like news article access. Micropayments will come sooner or later.

</comment><comment><USER10> I am an advocate of a journalism tax rebate. That way there can be government funding for Journalism that is not controled by a government.

<comment><USER11> You can donate to non-profit journalists:

[https://100r.org/donors/](https://100r.org/donors/)

[https://donate.propublica.org/](https://donate.propublica.org/)

Bigger list:

[https://www.charitynavigator.org/index.cfm?keyword_list=&bay...](https://www.charitynavigator.org/index.cfm?keyword_list=&bay=search.results&EIN=&cgid=2&cuid=5&location=2&state=&city=&overallrtg=&size=&scopeid=)

It's tax deductible, not a rebate, but it is something.

</comment></comment><comment><USER12> What an actual joke of an article. An overly academic way to say that "we don't want users to pick and choose what they pay for, we want them to spend extra money on unlocking all content, regardless of its subjective quality".

How about this... make the content free and put a tip jar. If you don't like that approach, don't be mad when people don't pay to unlock.

<comment><USER13> _How about this... make the content free and put a tip jar._

That's basically my model (plus Patreon). I think if I had enough traffic, it could actually support me. I don't know how to get there from here and it's crazy making to keep struggling so much every month, but I'm slowly seeing more traffic and more money.

<comment><USER12> Congratulations to you!! I hope that your efforts continue to bring you everything you hope for.

For me, I think it is hard for me to monetize the content that I really enjoy producing. There's tangentially related things that would probably make a bit more money (native youtube ads, teaching, t shirts), but since I am fortunate enough to have a good day job, I am able to make the content available entirely for free, uninfluenced by profit motives.

Life is just a big navigation of trade-offs, it seems.

</comment></comment></comment><comment><USER14> Why does no one talk about brave's approach to micro payments. It makes micro payments effortless. One doesn't even need to use their ad based model. Instead, just buy some of the BAT tokens and use them.

Is there some inherent flaw in there approach that it's not more widely discussed.

<comment><USER3> I think a Brave-style approach is better than an advertising-supported model just because Internet advertising is a scam for everyone involved. Unfortunately Brave doesn't solve the underlying problem of "views = $$$", which means journalism would have to continue to rely on being clickbait to survive.

<comment><USER14> It does make an effort to solve the problem. It currently uses a time based approach in which tokens are credited to a publisher based on time spent by the user reading the article.

Also there is a threshold of some seconds before any tokens are accounted for an article. So basically click baits won't account for any tokens because the user might quickly close the article.

</comment></comment></comment><comment><USER15> Information is value. google/facebook/etc managed to very slowly migrate that value to their books, without having to pay for it.

</comment><comment><USER16> journalism just doesn't know how to adapt. One thing they don't get is "social" when it comes to news, individualization, and from games, they just don't get micropayments are often not for your core thing, so don't try to charge for articles. I think there's so many opportunities for them to reinvent their world and make money.</comment>


Magnet – Window manager for Mac - <AUTHOR> http://magnet.crowdcafe.com/index.html <comment><AUTHOR> Apparently on sale for $0.99. I gave it a try and it works very well.</comment>


Show HN: A Google chrome extension to add a little bro in your browsing. - <AUTHOR> https://chrome.google.com/webstore/detail/bro-ifyme/hfpgpmnapkjlmdogaeiimdoplddnokeb?hl=en-US&utm_source=chrome-ntp-launcher&authuser=1

<comment><USER2> Bro, did you give yourself a 5 star review? Not cool.

</comment><comment><AUTHOR> I whipped this up in a couple of hours as a fun project.</comment>


Theranos Under Federal Criminal Investigation, Adding to Its Woes - <AUTHOR> http://www.nytimes.com/2016/04/19/business/theranos-sec-justice-department-investigation.html?_r=0 <comment><USER2> It is just pretty disturbing that journalists and "ordinary people" knew about this long before the feds took action and while much of the press and investors were taking Theranos seriously.</comment>


Ask HN: Polyglot Workplace Success Stories? - <AUTHOR>

I've been a firm believer in choosing the right tool for the job. I've always believed a company shouldn't just bill themselves as a "Java Shop", ".Net Shop", or a "Ruby Shop" but rather focus on delivering results and using whichever language or frameworks work best.<p>I'm sure a lot of other companies do this... what are some success stories? <comment><USER2> I currently work for a polyglot shop so I guess I can chime in. We employ about ~90 engineers now and have been in business for around 25 years now, so I consider that successful.

The discussion of focusing our scope and becoming more of a single stack shop has certainly come up, and some engineers are in favor of it because it certainly has benefits. Company wide practices can easily apply to all projects, engineering resources are far easier to exchange when everyone uses the same skill set, and knowledge gains are applicable to all projects.

It's a lot harder for my custom tools I write for managing a Perl/WinForms/.NetMVC website to provide benefits for the guys downstairs working on embedded systems in c++.

Personally I prefer the variety of a polyglot shop but I can see where the appeal is to streamline company wide and specialize.

Our spread of technologies is mostly due to self motivated engineers learning new technologies and working on gaining experience to the point where we feel comfortable charging a client to develop a solution using that technology. For example, 4 years ago we'd done no mobile development. Around that time a few engineers dove into personal projects in Android and IPhone development and we've since released several products for both platforms. This was completely facilitated by employee efforts and interests. If no one wants to work on your technology stack we probably won't offer a solution and will just help you find another company.

</comment><comment><USER3> We consider ourselves polyglot. However, we found that demand for our Rails consulting pulled far ahead of the rest. By fulfilling that demand we gained a lot more experience doing Rails which not only improved our work but increased the number of applications in which we could do a superior job using Rails. This has probably happened to many companies that appear dedicated to one technology.</comment>


The ups of downs of porting 50k lines of C++ to Go - <AUTHOR> https://togototo.wordpress.com/2015/03/07/fulfilling-a-pikedream-the-ups-of-downs-of-porting-50k-lines-of-c-to-go/ <comment><USER2> Do read the answer of the author regarding the performance:

"The throughput of the Go program is quite competitive with the C++ one, although the server's IO-bound so most of the time is just spent in socket write/read syscalls. The latency is at least an order of magnitude worse, due to Go's garbage collector, which is amplified by the use of an older Go version. If the server was latency-critical I don't think it could have been written in Go, at least not until the new GC planned for 1.5 or 1.6 is released (assuming we could upgrade to a newer kernel by the time its released)."

<comment><AUTHOR> Author here. Just a note that by latency-critical, I'm referring to >10 millisecond latencies. If you can tolerate occasional pauses of 400-500 milliseconds, then the GC wouldn't be a problem. Also note that the GC slowness came from having to scan a fairly large heap (a lot of cached stuff); it could be avoided by storing all that off-heap, but I suspect that would complicate the code significantly.

Finally, note that by "at least an order of magnitude worse" I'm comparing it to hyper-optimised C++ that's designed for sub-millisecond latencies, as the C++ server used the same framework used in latency-critical HFT software.

<comment><USER3> May I ask why you've chosen Go over Java, which is becoming very popular in the HFT industry, even for latency-critical code?

The code generation tools are better (what you call "compile time IO"), the IDEs are much better, it has generics which you seem to miss, performance is better (the GCs are state-of-the-art), monitoring is much better, the language is also regular and simple, and you don't have to write inheritance-heavy code if you don't like.

As someone who likes both Java and Go, I find it surprising that anyone would choose the latter for long-running server code, especially where performance matters. Go is great for quick command-line apps or very simple services, but when you need to build an important server, Java wins out every time.

Certainly for your particular requirements and preferences, Java seems to have all of Go's advantages and (almost) none of the disadvantages.

<comment><USER2> How do you avoid too many allocations to happen in Java? The GC is certainly slower with more allocated elements but I seldom see any code example in Java which doesn't behave like the allocations don't cost anything. More than that, it seems that the whole language is based on that premise? As I consider the info you already provided a good argument for Java, I hope you can provide some good links.

<comment><USER4> Java has a generational garbage collector, so short-lived allocations pretty much don't cost anything, and by and large it's exactly the short-lived allocations that are the ones you could have optimized away in e.g. hand-tuned C++.

<comment><USER2> What about an object being always handled _only_ through the pointer? Does that mean that the array of 10M objects is actually an array of 10M pointers and 10M allocated objects, all of which have to be allocated, deallocated and the travelled through by the garbage collector? And what if it's not an array, but some more complex form? Is there a clean way to group a lot of objects to be treated by the allocator, deallocator and the GC as the single allocation unit? I understand that some language lawyers think that's not important ("just use the 'new,' the VM should care and not you") but for somebody like me who's used to the C level of control and actually cares and measures the performance differences which can result in the different number of servers needed to solve the problem, it really is.

<comment><USER3> This kind of stuff matters to Java developers, too, as, perhaps surprisingly, Java has become a high-performance language, especially when it comes to concurrency (as it offers low-level support for memory fences, and includes state-of-the-art implementations of concurrent data structures).

As pjmlp said, the issue of "array of structs" is being addressed in Java 10. In the meantime, for contiguous memory allocation, you can make use of off- heap memory (which also helps those "more complex forms"). But the flip side is that Java's memory allocation is a lot faster than C's (i.e. in throughput -- not latency, as there are GC pauses), and most GCs are copying collectors that automatically arrange objects contiguously (though it's far from being good enough for arrays of object, as you need to follow references, and every object carries additional overhead, which is precisely why this is being addressed in Java 10).

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> > Go also forced me to write readable code: the language makes it impossible > to think something like "hey, the >8=3 operator in this obscure paper on > ouroboromorphic sapphotriplets could save me 10 lines of code, I'd better > include it. My coworkers won't have trouble understanding it as the meaning > is clearly expressed in the type signature: (PrimMonad W, PoshFunctor Y, > ReichsLens S) => W Y S ((I -> W) -> Y) -> G -> Bool".

I like this description. It's one of the reasons why I prefer OCaml to Haskell, but I've found it hard to verbalise.

<comment><USER6> I'm still trying to force myself to like Go. The basic problem is that Go is _too regular_ for me, which makes it painful to read other people's code.

I don't have this problem with functional languages or C written in a free flowing coding style like djb's.

Is it even possible in Go to have an individual style?

<comment><USER7> Too regular? I gotta be honest, that comment makes very little sense to me. My problem diving into most codebases (over 10 years spent contracting) was always multiplied horrifically by non-idiomatic code in language X.

Bob the developer has his own ideas about what + should mean... and uses gobs of hard to puzzle through magic all over the place. You need to run this C++-alike code through Bob's Pre-Processor -- but it is fine, cause if QT can do it, Bob can do it.

I want to read the code to understand the goal and the means for achieving it, not to be impressed with your brevity or cleverness.

Go was/is developed for teams, which means to some degree to the lowest common denominator. So far, in the last couple years, I have -- in general -- come to see these trade-offs as generally wise. Go is exceptional pragmatic for working on a team.

<comment><USER8> > Too regular? I gotta be honest, that comment makes very little sense to me.

Not agreeing or disagreeing with the parent, but I believe he may be referring to a common problem in software development that is best summed up by a quote by Yaron Minsky: "You can't pay people enough to carefully debug boring boilerplate code. I've tried."

If your Go code is just a series of `if x, err := foo(); err != nil { ... }`, it can become easy during code review to miss subtle bugs because in one function somewhere, someone write `err == nil` instead. This is not unique to Go; many programmers feel the same way about Java.

I find that one of Go's weakness is its limited ability to abstract common patterns. I also believe that for some languages (e.g. Haskell, Common Lisp, Scala) their main weakness is their apparent _unlimited_ ability to abstract common patterns, sometimes beyond the understanding of most programmers. I'm not smart enough to come up with (a) an objective way to measure how little/how much a language allows abstraction, (b) a language that would hit a sweet spot of allowing abstraction without going into the deep end.

<comment><USER9> The problem is the sweet spot _moves_ , and it can also be different between individuals and teams. I wouldn't even be surprised to learn that the sweet spot for a team is a lower level of abstraction than any individual team member is capable of, partially due to communication reasons and partially because "abstraction comfort" is not really on a line and you probably ought to target the minimum for any given "element" of it on your team.

It's why I've said before that while I'd very much like to _work_ with Go, it's not my _personal_ favorite. I'm comfortable with Haskell, but I would be engaging in malpractice to put code into the source control system that requires that level of fluency with abstraction to understand. Go has a really solid balance for large teams. If you're currently in a startup with 5 well- chosen, high-skill engineers, you won't have any clue what I mean by that, but when you've got hundreds of engineers who may touch some bit of code, where most of them are trying to spend as little of their cognitive budget as possible on it so even the very smart and very skilled ones are pretty much just stabbing the code until it does what they want it to, you start to appreciate a language that limits how hard they can twist the knife.

</comment></comment></comment></comment></comment><comment><USER10> > we had for instance a library for interacting with a particular service that > was generated from an XML schema, making the code perfectly type-safe, with > different functions for each datatype. In many languages that allow compile- > time metaprogramming, like C++ and D, IO cannot be performed at compile > time, so such schema-driven code generation would not be possible.

Actually this would be possible in D since you can read files at compile-time with the "import(filename)" syntax. Then you can use compile-time parser generators to parse it.

<comment><AUTHOR> I didn't realise that was possible; I've updated the post to reflect that.

<comment><USER10> Avoiding code generation is a stated goal of the language. Too bad the hype train swings in random directions.

<comment><AUTHOR> For what it's worth I'd personally have preferred to use D, but politically it wasn't an option.

</comment></comment></comment></comment><comment><USER11> ""hey, the >8=3 operator in this obscure paper on ouroboromorphic sapphotriplets could save me 10 lines of code, I'd better include it. My coworkers won't have trouble understanding it as the meaning is clearly expressed in the type signature: (PrimMonad W, PoshFunctor Y, ReichsLens S) => W Y S ((I -> W) -> Y) -> G -> Bool"."

This was worth it - the fact a languages idioms are "don't write _clever_ code" is extremely positive.

<comment><USER12> Specially when reviewing that latest code drop from the off-shoring partner company.

</comment></comment><comment><USER13> I've also found the lack of parametric polymorphism a huge pain point. Type safety is constantly sacrificed to allow for code-reuse and nicer APIs, leading to really awful code using type switching at best, inscrutable amounts of reflection at worst. This seems to plague the Google developers as well, just look at the Go App Engine APIs.

<comment><USER14> I built ported part of a distributed system I have in production to Go about 2 years ago. I remember doing a lot of reflection trying to factor out some common SQL code. Like this:

        func CreateRecord(record interface{}) (err error) {
            t := reflect.TypeOf(record)
            v := reflect.ValueOf(record)

Where I named the struct the same thing as the table it mapped to.

<comment><USER9> There are often alternatives. One of the ones I picked up from Haskell (of all places) is having an instance of something in hand solely for its type. I don't know what all you were about to do with that record, but in this case, you may have been able to use:

        type Record interface {
            Create() Record
        }

which declares an interface of things that know how to create another copy of themselves and return it. Well, the type doesn't guarantee that the same type will come out but you can document that. Then you don't need reflection to create a new instance, as long as you can get an instance of the correct type from somewhere else. You presumably have some arguments that goes in, but it's reasonably likely (though not certain) that there's some sort of regularity you can exploit and put into the type signature of Create() up there.

I've used this pattern myself in a generic "game server" that implements a network protocol and manages creating "rounds" of games and other high-level bookkeeping, where you pass it in a "prototypical" game object that provides a "CreateNew()" method on it, thus making it so the core engine can create new games without ever actually knowing what the game itself is.

If it's good enough for Haskell it's good enough for Go.

(Haskell, a bit confusingly, calls this a Proxy, perhaps because the instance is standing in as a proxy for the type? I was never quite sure where the name came from.)

I've actually written quite a bit of Go now without needing reflection, and the only "interface{}"s in the system are either A: things that legitimately can be "anything" (on a per-instance basis, i.e., not ATDs that really want to just have one type in them but legitimately on an object-by-object basis may contain an "anything") or B: things I really want to say are "encodable/decodable as JSON by the standard encoding/json library but there's no clear way to say that in the type". The latter annoys me in theory a great deal more than it annoys me in practice.

Mind you, I acknowledge there's a point where you'll be left with no other options but an interface{} or reflection, but people do end up reaching for it more quickly than is strictly speaking necessary. And it isn't necessarily a compliment for Go that it makes you think a bit harder for this sort of thing.

</comment></comment></comment><comment><USER15> The lack of polymorphism and parameterized types makes Go the C of 2010s. This practically means that in a few years we will have someone, somewhere, creating Go++ and the story will repeat itself.

<comment><USER16> Go supports several types of runtime polymorphism, including interfaces and closures. It just doesn't support polymorphism through OO-style inheritance.

C supports runtime polymorphism, for that matter, it just requires a bit of boilerplate to set up and use function pointers and tagged dispatch.

You might be right about Go++ (ObjectiveGo?) being inevitable, though.

<comment><USER17> The mostly painful situation isn't at all what you mean, it has nothing to with inheritance at all.

In Go, it is impossible to do "container" polymorphism. That is, write a function that manipulates, say, an array or maps of "somethings", where the only thing it does with the somethings is assign them, read them (to return one), or check if two "something"'s are equal to one another.

The necessity of this functionality can be seen by the fact the Go stdlib can ACTUALLY DO THIS for the built-in functions, but no facility is provided to do the same for user code.

<comment><USER18> _" The necessity of this functionality can be seen by the fact the Go stdlib can ACTUALLY DO THIS for the built-in functions, but no facility is provided to do the same for user code."_

Right. Go has generic types. Channels and maps are generic types. It just doesn't have user defined generics. This is a lack.

Getting around this is creating a new level of cruft on top of Go. "Generate" and reflection are being used to work around the lack of generics. It's going to be tempting to use "generate" to invoke a macro language. That may not end well.

</comment></comment></comment></comment><comment><USER19> >>Simple, regular syntax. When I found myself desiring to add the name of the enclosing function to the start of every log string, an Emacs regexp find- replace was sufficient, whereas more complex languages would require use of a parser to achieve this.

It would be really wonderful to have a series of tutorials on this subject. It might be a good reason for me to learn to use Emacs, anyway ..

<comment><USER20> Another way to use search in Emacs is to go to a place that you need to edit/insert text. Instead of using the movement commands or the mouse, use forward or backwards search to search for the point you need to be at: like "(str" in "(String s) ...".

I don't know if it is _faster_ for me. But it can feel more ergonomic, since you don't have to make so much effort into going to a specific point. I'm getting better at it, though: maybe soon it will become second-nature.

<comment><USER21> That way also makes writing kbd macros a lot easier

</comment></comment></comment><comment><USER22> _No inheritance. I've personally come to view inheritance-based OO as somewhat of an antipattern in many cases, bloating and obscuring code for little benefit_

So everywhere you would use inheritance, you use composition instead? The stuff you'd have stuck in the superclass, you stick somewhere else and stick in your struct?

<comment><USER23> > So everywhere you would use inheritance, you use composition instead? The > stuff you'd have stuck in the superclass, you stick somewhere else and stick > in your struct?

No, Go provides interfaces (aka traits or roles), which you can use to share composable functions (aka methods).

<comment><USER22> _No, Go provides interfaces (aka traits or roles), which you can use to share composable functions (aka methods)._

I wasn't talking about creating conventions/apis/facades, rather about how one reuses code.

</comment></comment></comment><comment><USER24> I feel many of pros and cons listed in this article are not related to the porting at all.

btw, I think go is really not a replacement of c++. In my experience, go is more a replacement of java to improve the development speed.

<comment><AUTHOR> The pros and cons are all based on what was learned from the porting process. Unfortunately the confidential nature of the software prevents discussing it in greater detail.

Go can be a replacement for C++ for programs that didn't need to be written in C++. There aren't many programs like that around nowadays however, as most of the time C++ is only used when it's really necessary, such as for extremely latency-sensitive applications or applications requiring precise memory/allocation control.

<comment><USER25> I wouldn't bet on that. I would expect C++ programs to have been written ages ago and not having been rewritten because of a combination of "it works"/"I can't read it"/"It's not my code". The most famous C++ to Go port must be dl.google.com ([http://talks.golang.org/2013/oscon- dl.slide#1](http://talks.golang.org/2013/oscon-dl.slide#1)), which arguably never needed to be written in C++ in the first place, except it was probably the only reasonable choice at the time.

In other words: legacy.

</comment></comment></comment><comment><USER26> i think in the long run, having to maintain a code that is readable helps a lot. even though c++ itself is easy to follow, it starts to get complicated once you get deeper and deeper in oo where everything is inherited from something else. this is one thing i like in python modules. they are highly readable. and then write something in Cython if its time critical. same with Go, the code feels very clean and easy to maintain. i haven't done parametric polymorphism in c++, so no idea about it.

<comment><USER27> > and then write something in cpython if its time critical

I believe you mean Cython? :)

<comment><USER26> updated :)

</comment></comment></comment><comment><USER28> "Since one of my reasons for getting into programming was the opportunity to get paid to use Emacs, this is definitely a huge plus."

Wow! Wish I could say the same!

<comment><USER29> "one of my reasons for getting into auto repair was the opportunity to get paid to use Snap-On tools"

I feel text editor loyalty too, but this statement does feel a bit strange :)

</comment></comment><comment><USER30> Please, use Dialyzer for Erlang.

BTW, I don't know Go, but Erlang has per-process GC, so there won't be a large heap to scan.

<comment><USER31> Go doesn't have per-process GCs, because goroutines share memory. Structures are not copied or moved across channels, a pointer to the structure is copied and both sender and receiver get access to the same object in memory.

</comment></comment><comment><USER32> I'm a PHP programmer. Can someone explain why the lack of parametric polymorphism is a big deal?

<comment> one-more-minute Say you need a Vector2D type:

        struct Vector2D
          int x
          int y

Except, hold on, I have a routine that needs floats. In a dynamic language, I'd leave off the type hints; with a decent type system I'd parametise the `int` type; in Go I have to reimplement the whole type:

        type Vector2DFloat
           float x
           float y

Lather, rinse and repeat for complex numbers, vectors of vectors, etc. The only way around this is (a) to use the `interface{}` type (in which case you're just using a very verbose dynamic language) or (b) to rely on lots of text-based code generation.

<comment><USER33> Maybe my brain hasn't starting firing on all cylinders yet this morning...but are you saying that:

If I have some function in Go (pseudocode - I don't know Go but it should get my point across)

f(float x) { }

and call

f(vec.x)

Go can't cast it to a float?

I'm not being sarcastic or anything - I'm genuinely curious on Go and your example.

<comment><USER8> No, what he means is the you would need to write these two functions:

            func DotProductInt(v1, v2 Vector2D) int {
                 return v1.x*v2.x + v1.y*v2.y
            }

            func DotProductFloat(v1, v2 Vector2DFloat) float64 {
                 return v1.x*v2.x + v1.y*v2.y
            }

If Go allowed for parametric polymorphism, the type of the elements could be abstracted away like this (not real syntax obviously)

            type Vector2D<t> struct {
                 x, y t
            }

            func DotProduct(v1, v2 Vector2D<t>) t {
                 return v1.x*v2.x + v1.y*v2.y
            }

</comment></comment></comment></comment><comment> shawn-butler What is the fascination of software people with LOC as a code measure / metric?

It seems indicative of nothing, not quality, especially not readability nor maintainability.

I've never understood this apart from the very early days of punch cards and memory/storage limitations which placed physical limitations on computation.

<comment><USER34> > It seems indicative of nothing, not quality, especially not readability nor > maintainability.

It's not meant to be indicative of any of those things (though I'd argue, all else being equal, maintaining an application with more LOC is harder than one with less).

It's indicative of complexity and scale. A programmer can read through an entire 500 LOC program and will know _everything_ about the program. This becomes much more difficult for a 50K LOC program and outright impossible for a 5 million LOC program.

Taking a 50K LOC program and bringing it down to 10K (regardless if that's by refactoring, removing unneeded code, or rewriting in a new language) makes it much easier for each developer to know/understand a larger portion of the program.

Prior to my current job I had only worked on relatively small applications (<25K LOC) and I was blown away by the difference between working on things like that and working on something measured in the _millions_.

[And in this specific context I doubt it would be on the front page of HN if somebody took 500 lines of C++ and rewrote them in a hundred lines of Go, i.e. knowing the LOC is useful to determine if this was a meaningful undertaking or not]

</comment></comment><comment><USER18> _" It also allows parallel/async code to be written in the exact same way as concurrent code, simply by setting GOMAXPROCS to 1."_

Aargh! If your code has race conditions with GOMAXPROCS > 1, it's broken. "Share by communicating, not by sharing". (Ignore the bad examples in "Ineffective Go". Send the actual data over the channel, not a reference to it. Don't try to use channels as a locking mechanism.)

</comment><comment><USER35> What's the point of using GC in high performance software? Seriously. In my opinion, it makes no sense.</comment>