Bosque Programming Language - <AUTHOR> https://www.microsoft.com/en-us/research/project/bosque-programming-language/ <comment><USER2> Hi project owner (Mark) here. It is a bit late in the evening for me but I will try to answer any questions when I can.

The Bosque language is currently in a very early state with lots of work to do and not ready for practical use. However, I am very excited by the potential in the concepts and wanted to make the project a collaborative endeavor, including both other academics and developer community, from the start. At this point the goal is to explore interesting options in the language design space – whether the Bosque language becomes mainstream or just provides useful ideas for other languages to adopt. So, please take a look, expect plenty of rough edges, and we would love comments, suggestions, and PR's on the GitHub repo.

<comment><USER3> Hello! Disclaimer: I haven't read the full publication yet and I've only skimmed it.

A lot of programming languages that are coming out these days talk about simplicity, lowering "cognitive load", increasing expressiveness, being nimble/lightweight/easy/whatever, and—this one stated by you—reducing "accidental complexity". When I looked at your grammar and some examples, I saw atomic building blocks that don't lead to any less complexity than what I'd get if I strung together similar building blocks in Lisp or Python or ML.

To me, "accidental complexity" doesn't seem like a very well defined concept. I might say such a term in a meeting room arguing to upper management that we need to pay off tech debt. Or I might blog using such a term to talk vaguely philosophically about software engineering. But I don't think I'd find myself using it in a formal context to argue the merits (or lack thereof) of a technology. I admit that this may be due to my ignorance of a term of art.

The introduction to your publication is even more bold: "Regularized programming" (and hence Bosque) will (supposedly) unleash a revolution on programming the same way structured programming did the paradigms before it, ushering a "golden age" of programming and the like.

Focusing on the term "accidental complexity", can you elaborate what that means? What is an example of accidental complexity and how does it naturally come about with the current crop of languages. And how—in the large—does this programming language avoid it (or help the programmer avoid it)?

Edit: I see in your publication, upon the mention of "accidental", you cite "Frederick P. Brooks, Jr. 1987. No Silver Bullet Essence and Accidents of Software Engineering. Computer 20 (1987), 10–19." But in reading this [0], Brooks says:

> The complexity of software is an essential property, not an accidental one.

He only speaks of certain difficulties as being "accidental", and past ways in which we've improved the impedance of such difficulties.

[0] [http://www.cs.nott.ac.uk/~pszcah/G51ISS/Documents/NoSilverBu...](http://www.cs.nott.ac.uk/~pszcah/G51ISS/Documents/NoSilverBullet.html)

<comment><USER4> I wish PL researchers would actually run studies to measure cognitive load and usability metrics while using their language compared to some other language.

I would do it if the right PhD student came along!

<comment><USER5> I have never investigated this, but I feel that PL pragamtics and PL-feel is relatively under researched.

I talked about this with colleagues a few years back, but we had very distinctly different feelings about what we were doing when writing C vs C#: C often feels more like writing text that will be translated to code while C# already feels like you are manipulating code. It makes no sense when I write this out but that's phemenology for ya.

<comment><USER6> This is interesting. I "feel" this in Visual Studio, as the DE is more tightly I(ntegrated). Do you still feel like this in the context of a plugin-less plain editor?

</comment></comment></comment></comment></comment><comment><USER7> Some comments on the code, based on Tictactoe example ([https://github.com/Microsoft/BosqueLanguage/blob/master/docs...](https://github.com/Microsoft/BosqueLanguage/blob/master/docs/tictactoe.md)):

1\. overall quite nice looking and easy to understand

2\. too verbose in places, e.g. this constant structure:

        const winPositionOptions: List[List[[Int, Int]]] = List[List[[Int, Int]]]@{
            List[[Int, Int]]@{ @[ 0, 0 ], @[ 0, 1 ], @[ 0, 2 ] },
            List[[Int, Int]]@{ @[ 0, 1 ], @[ 1, 1 ], @[ 2, 1 ] },
            List[[Int, Int]]@{ @[ 0, 2 ], @[ 1, 2 ], @[ 2, 2 ] },

            List[[Int, Int]]@{ @[ 0, 0 ], @[ 1, 0 ], @[ 2, 0 ] },
            List[[Int, Int]]@{ @[ 1, 0 ], @[ 1, 1 ], @[ 1, 2 ] },
            List[[Int, Int]]@{ @[ 2, 0 ], @[ 2, 1 ], @[ 2, 2 ] },

            List[[Int, Int]]@{ @[ 0, 0 ], @[ 1, 1 ], @[ 2, 2 ] },
            List[[Int, Int]]@{ @[ 0, 2 ], @[ 1, 1 ], @[ 2, 0 ] }
        };

Has types defined in 10 places, 9 of which are redundant.

Also you are using @{...} for lists and @[...] for tuples; a more usual convention (in e.g. Python or Haskell) would be [...] and (...) respectively.

3\. String types aren't intuitive (at least to me). E.g. in this code:

        const playerX: String[PlayerMark] = 'x'#PlayerMark;

It appears that a String[PlayerMark] is a subset of String that can have the values 'x' or 'o'.

I would have preferred something like:

        type PlayerMark = 'x' | 'o';
        type PlayerMarkOrBlank = 'x' | 'o' | ' ';

<comment><USER8> Got to say, after reading the description in the linked URL, I was really surprised with just how _complex_ the syntax is in the code samples. I don't want to be overly negative, but it doesn't look like it's going to reduce complexity to me - if anything it looks like one of the most incomprehensible languages I've come across in decades of experience.

<comment><USER9> I agree! Human-readability may have been _a_ goal, but it wasn't a top priority.

</comment></comment></comment><comment><USER10> A random thought about the code samples. What do we gain from having to write

        point<~(y=value)

instead of other languages'

        point.y = value

?

I believe that syntax should be designed to make things simple for developers, not for the designers of languages or for compilers.

<comment><USER11> <~ looks like an expression for a bulk update of an immutable record.

"point.y = value" is typically a statement for a single update of a mutable record.

I'm not sure how you'd extend the latter to support the features of the former. The meaning is completely different. Different things should look different.

<comment><USER10> I expand a little my point. This is from Elixir, functional and immutable, which I've been working with for a couple of years

        iex(1)> point = %{x: 1, y: 2, z: 3}
        %{x: 1, y: 2, z: 3}

Of course this doesn't work

        iex(2)> point.x = 4
        ** (CompileError) iex:2: cannot invoke remote function point.x/0 inside match

This is how we do it, verbosely

        iex(3)> Map.put(point, :x, 4)
        %{x: 4, y: 2, z: 3}

Or with a syntax shortcut

        iex(4)> %{point | x: 4}
        %{x: 4, y: 2, z: 3}

A better syntax shortcut would be the usual

        iex(nope)> point.x = 4
        %{x: 4, y: 2, z: 3}

which everybody would understand no matter the language of origin. I imagine that it would require quite an overhaul of the internals of the compiler, but the compiler should bend to us, not us to the compiler. This is my point about obscure language syntaxes.

<comment><USER12> The problem with the last code snippet is that it looks like mutating the original value, and that would mislead newcomers to the language.

<comment><USER10> Yes, that's possible. However this is an example from Ruby, which is very mutable but has some immutable features in its standard library.

        2.3.0 :001 > s = "abc"
        => "abc"
        2.3.0 :002 > s.gsub("b", "B")
        => "aBc"
        2.3.0 :003 > s
        => "abc"
        2.3.0 :004 > s.gsub!("b", "B")
        => "aBc"
        2.3.0 :005 > s
        => "aBc"

I guess that if an immutable language shows some mutable syntax we can expect it to be a short form. Actually Elixir has at least a mutable short form:

        iex(1)> s = "abc"
        "abc"
        iex(2)> String.replace(s, "b", "B")
        "aBc"
        iex(3)> s
        "abc"

The next line would be an error in Erlang and other languages because we can't mutate an already assigned variable there, but Elixir allows rebinding

        iex(4)> s = String.replace(s, "b", "B")
        "aBc"
        iex(5)> s
        "aBc"

</comment></comment></comment></comment></comment><comment><USER13> Am I the only one who really can't stand the expression "easy to reason about"? Everywhere you look everything that isn't exactly CORBA, ASN1., EJBs or XMLs is E2RA...

<comment><USER14> I thought "easy to reason about" was reserved for pure functional programming languages :-)

</comment></comment><comment><USER15> > Thus, Bosque does not have any undefined behavior

I think this is the one that should be highlighted most. Otherwise, from an engineering perspective, many of the other language features have already been implemented and widely used in other languages

<comment><USER16> I think I remember someone talk about undefined behavior in specifications and how it is actually a good thing, in the sense that offers increased liberty for implementations and some other advantages. Anybody else has heard this? Don't quite remember where I read it.

My humble opinion aligns with yours, it seems intuitively "better" to have no undefined behavior.

[https://en.wikipedia.org/wiki/Undefined_behavior#Risks](https://en.wikipedia.org/wiki/Undefined_behavior#Risks)

<comment><USER17> Yes, I've heard the same thing. The C and C++ specifications specifically mention that some things are undefined behaivour, that shows that its not something that slipped through the cracks (at least in those cases) but rather a conscious decision to leave it undefined. This only makes sense if its done to allow the compiler room to do things like aggressive optimisation.

I only wish that undefined behaviour in C++ were harder to accidentally use, or at least, if the compiler warned me _" hey, I'm gonna do X here because that undefined behaviour here allows me to do so, this may not be portable to other compilers and may not be what you wanted, you've been warned!"_

<comment><USER18> The reason that these behaviors are undefined typically is that the compiler cannot prove whether or not a program will execute undefined behavior, and needing to account for it would lead to less efficient code. For example if (x+1 > x) can be simplified to if (true) for signed integers only because signed overflow is undefined.

That said, there is UBSan, which is a runtime checker for undefined behavior that can help you to identify if your code is depending on some undefined result.

</comment></comment></comment></comment><comment><USER19> Typed strings look really nice, something I tend to wish every language had eventually - though I'm not sure why you'd limit them to Strings and not allow them for all types? I really like the Logarithm example shown in the Dotty docs for instance: [https://dotty.epfl.ch/docs/reference/other-new- features/opaq...](https://dotty.epfl.ch/docs/reference/other-new- features/opaques.html)

<comment><USER2> There were some discussions for a more general system -- e.g. Int[Seconds] would be a typed int indicating the contents represented seconds.

We needed to think more about all of these usecases and how things worked so we decided to start with just strings as the most useful. It is great to see you had the same idea though and would definitely like to revisit this in the future.

<comment><USER19> To be fair Strings would solve a problem I have right now with Scala pre- Dotty, our object IDs are all strings and the compiler does nothing to stop you using a user ID in a method that expects a contact ID, etc.

For your Int[Seconds] example, I haven't used them at all but could it work something like the F# measures concept? That seems sort-of similar but more general from scanning the docs.

</comment></comment></comment><comment><USER20> Direct link to github repository:

[https://github.com/Microsoft/BosqueLanguage](https://github.com/Microsoft/BosqueLanguage)

</comment><comment><USER21> The description suggests the syntax and type system are based on TypeScript. After looking through the docs I have to say I wish this were much more true. It seems like Microsoft Research has thrown out half the good ideas TypeScript has in favor of overly noisy, complex syntax.

</comment><comment><USER22> Please consider using a license other than MIT. MIT assumes all contributors work for a single institution, and doesn't protect licensees from later patent infringement claims.

[https://writing.kemitchell.com/2019/03/09/Deprecation- Notice...](https://writing.kemitchell.com/2019/03/09/Deprecation-Notice.html)

Either Apache 2.0 or Blue Oak Model would be better choices.

<comment><USER23> >MIT assumes all contributors work for a single institution

Could you expand on this? I can't see this assumption anywhere in the MIT license, and the link you provide doesn't clarify on this point.

I also find the Blue Oak license much more difficult to understand than the MIT license, FWIW.

<comment><USER24> I have never heard that either but I guess that impression might come from the first line of the MIT license:

> Copyright (c) <year> <copyright holders>

Where <copyright holders> is often filled as the company of the primary developer, e.g. "Facebook". What I often see (and use) to avoid this, is filling it in with "The <project> developers", e.g. "The React developers".

<comment><USER23> Ah I see, good point. I think management of code copyright is inherently complicated and not something that a license template can really fix. You _do_ need to keep track of who has copyright of the code.

<comment><USER22> The link I provided does explain this, under the section "MIT and BSD don't expect more contributors", which reads in part:

"MIT and BSD terms include a space for a single copyright notice, because they were written for releases from academic institutions that own all the copyrights in their employees' work. What about other contributors to the project? They hold copyright in their contributions."

Apache 2.0 DOES address this issue in a complicated way, through the supplementary use of Contributor License Agreements. Other non-Apache projects like Fossil also require you to physically sign a CLA before contributing code to the project.

Blue Oak handles this in a more straightforward way, by explicitly saying that, as a condition of the license, every contributor in turn allows any use of their code that would otherwise infringe their copyright or patent claims. Who is a contributor? Anyone who contributes code. No CLA needed.

<comment><USER23> I don't know what is meant by "space" here. It's a text file. There's nothing to stop someone listing multiple copyright holders in an MIT license.

In general, having a long list of copyright holders is bad, because it makes it almost impossible in practice to verify that all of the copyright holders actually consent to release their code under the relevant license.

<comment><USER22> He's not implying that the space in the file is somehow limited. He's pointing towards the same problem you are guesturing at in your second paragraph: that "listing" copyright holders really only makes sense when there is only one of them. Any more than that and you raise the legal question: who exactly has copyright on which parts?

When there is more than one copyright holder, you absolutely need language to address that in the license. MIT license has no such language. Apache 2.0 addresses it by requiring CLAs, per-file copyright and attribution notices, etc. Blue Oak addresses it by using terms that start with "Each contributor".

<comment><USER23> "Each contributor" is meaningless unless you have a list of contributors. If you have a list of contributors, you may as well put it in the license.

<comment><USER22> No, it's not meaningless. It refers to everyone who has contributed. According to the Blue Oak license, everyone who has contributed licenses their contribution according to the terms of that license. There's no need to identify them separately, not for licensing purposes anyway. If their code is in there, it's covered by the license.

<comment><USER23> No, not unless you have a record that they agreed to contribute their code under that license. There's no magic wording in a license file that can make it possible to get by without keeping a proper record of contributors.

<comment><USER22> Yes there is such magic wording. You can't use the software without agreeing to the license. It is obviously the case that anyone who contributes is a user of the software. Thus all contributors are bound by the license terms whether or not their names are added to any list. If any contributor were to assert a violation of their copyright, they would themselves be in violation of the license.

<comment><USER23> Yeah, but you don't know that the person who contributed the code actually holds the copyright to it unless you keep proper records. It's also unclear whether people do in fact automatically agree to all the terms of a license merely by, say, submitting a pull request. Even if the license asserts that this is the case, not all terms of a license are necessarily legally meaningful or enforceable in any given jurisdiction. There isn't a huge amount of case law on this kind of thing, as far as I'm aware.

The bottom line is that any kind of open source license has copyright as its foundation. If you don't have a proper record of the copyright holders, then the license doesn't mean much. You need to know exactly who has the copyright to the code and exactly who is agreeing to release the code under a given license.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> Paper: [https://www.microsoft.com/en- us/research/uploads/prod/2019/0...](https://www.microsoft.com/en- us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf)

</comment><comment><USER26> >Bosque programming language is designed for writing code that simple, obvious, and easy to reason about for both humans and machines.

var v: List[Int ?] = List@{1, 2, none, 4};

OK! I think it needs some work. AM I supposed to intuitively know what ? and @ mean?

<comment><USER27> "Easy to reason about" doesn't mean "Doesn't require you to read any documentation."

<comment><USER26> Ok, and _simple, obvious,_?

</comment></comment></comment><comment><USER28> A project language with a reference implementation written in...TypeScript?

O.o

<comment><USER29> See also chapter 3 in the paper: [https://www.microsoft.com/en- us/research/uploads/prod/2019/0...](https://www.microsoft.com/en- us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf)

</comment></comment><comment><USER30> Also, there is a slack group dedicated to future programming languages. I am the acting char of the next gen language developer's association, and am trying to get all the next gen language designers to be in communication with each other. Right now there is the Luna project (poland), Red, Parasail, Beads, Elm, Dark, and others. i will be sure to add an entry in our database for Bosque.

</comment><comment><USER31> >For typed strings, String[T] the compare operator ignores the generic type and is based on the order of the underlying raw string e.g. both arguments are coerced to String.

Why? What even was the point in making them 'typed' then?

Also, what exactly are the relevant language-level details which BOSQUE contributes? It seems more like a large library than anything else.

<comment><USER32> > Why? What even was the point in making them 'typed' then?

To prevent you from passing a String as a String[Zipcode].

</comment></comment><comment><USER33> Only thing that caught my eye is the require syntax, which is nice, but then I thought what happens if this contract fails? Its possible you'd want to return false, or raise exception, or log error, or even correct value and continue. So whilst a nice feature, not practical IMO if it would always result in an exception.

<comment> UK-AL I don't think they are runtime checks

<comment><USER33> How not?

            method makeAutoMove(mark: String[PlayerMark], rnd: Int): Game
            requires !this->hasWinner();

            method makeExplicitMove(x: Int, y: Int, mark: String[PlayerMark]): Game
            requires !this.board->isCellOccupied(x, y);

If I'm reading it right though, it looks more like it simple doesn't execute the function at all instead of throwing etc. So yet another possible route to deal with an invalid contract.

<comment><USER34> It could be checked at compile time no?

<comment><USER35> How would you check them at compile time without using dependent types (at least it doesn't look to me like these are dependent types)?

</comment></comment></comment></comment></comment><comment><USER36> Reading the publication, I don't see that big a difference to existing purely functional languages. It almost reads like a rediscovery and refinement of the main value propositions of e.g. Haskell.

That said, some of the refinements, especially the (TypeScript-inspired?) record typing and manipulation facilities, look quite pleasant.

</comment><comment><USER30> i challenge the decision to not have explicit loops. the beauty of the original C construction was that it allowed for 3 events to occur inside each iteration: 1) normal execution of the body, 2) skip over the body but increment the counter, 3) exit the loop. When you have nested loops JS and AS3 let you name the outer loop and break out of it (thus re-introducing the FORTRAN GOTO which although that crank Dijkstra hated so much, occasionally is needed for this purpose). How are you going to stop a loop that might go on too long? sometimes you want to stop early. I don't see how you can stop the map().. or filter() operators. Just because early abort of a loop is not common doesn't mean it doesn't come up; it does inevitably so.

<comment><USER37> Named loop breakouts aren't the e GOTO Djikatra was concerned aboutvbecause they are still block structured; "harmful" GOTOs are arbitrary, structure- defying jumps. Named loop breakouts do not break the coordinate-assignment capacity that Djikstra takes GOTOs to task for breaking.

> I don't see how you can stop the map().. or filter() operators.

You use an early-terminating operator like find or take. (The general solution is probably Clojure-style transducers, which compose in a way which enables, among other things, plugging termination conditions into an operator which otherwise isn't early terminating.)

</comment></comment><comment><USER14> Looks a lot like TypeScript to me.

</comment><comment><USER30> the slack group is [https://futureofcoding.slack.com/](https://futureofcoding.slack.com/)

</comment><comment><USER38> Fix the grammatical error: The Bosque programming language is designed for writing code that simple, obvious, and easy to reason abo

</comment><comment><USER39> "The Bosque programming language is designed for writing code that simple, obvious, and easy to reason about for both humans and machines. The key design features of the language provide ways to avoid accidental complexity in the development and coding process. The goal is improved developer productivity, increased software quality, and enabling a range of new compilers and developer tooling experiences."

Along with literally every other language. I really wish the splash pages for new languages would cut the boilerplate and just open with a list of the specific traits that make this one different from its peers.

Edit: it appears that this is relatively easy to find after visiting the repository. Still, that opening paragraph is meaningless, and many languages don't even make the worthwhile bits easy to find for those who actively seek them.

<comment><USER40> [http://terralang.org/](http://terralang.org/) does a good job at telling you right away 1. what it is, 2. what it looks like and 3. what makes it different. I could write lots about how the language is great, but I also just realized that its home pages is pretty good for a programming language.</comment></comment>


Setting up a Raspberry Pi 4 home server - <AUTHOR> https://smalldata.tech/blog/2019/07/12/setting-up-a-raspberry-pi-4-home-server <comment><USER3> A big performance increase by putting the OS on a SSD. The read/write speed is much better than using the SD card. It takes a little tweaking to get the SSD to boot on the rpi 4, but can be done. Basically the SD card gets used a bootloader.

howto:

[https://jamesachambers.com/raspberry-pi-4-usb-boot-config- gu...](https://jamesachambers.com/raspberry-pi-4-usb-boot-config-guide-for- ssd-flash-drives/)

<comment><USER4> has the disadvantage of needing the SSD (which is probably more expensive than the pi?). here is something I ran across a while back, that if I understand correctly, uses a ramdisk + overlayfs to make the whole thing faster: [https://github.com/cattlepi/cattlepi](https://github.com/cattlepi/cattlepi)

<comment><USER5> Here's my build

        $55 Pi 4 (4gb)
        $8  Official USB charger
        $25 Argon One case (could also get acrylic + ICE tower)
        $10 microSD card
        $12 Sata to usb adapter
        $40 Kingston 240gb SSD (we can't do over 500mb/s anyway)

        $120 Total

You get a significant performance boost switching to a 64-bit OS. aarch64 has better SIMD guarantees, hardware AES (over 10x faster), double the registers, and generally more optimizable due to the more streamlined ISA. I haven't tested it yet, but in-memory compression could potentially help with the 4gb RAM limit.

<comment><USER6> Pardon my ignorance. Does your bare SSD sit outside without any case (connected to the Pi via the SATA to USB cable)? Does it need any kind of heat dissipation mechanism (or cooling) at all?

<comment><USER5> That's up to you. You can find USB3 SATA enclosures on Amazon for around the $12 mark. There's not a big heat dissipation issue in my experience and a Pi probably isn't exactly going to be taxing the drive very much.

If you don't mind the terrible $/gb ratio, you can even get USB3 thumbdrives that use an SSD.

</comment></comment></comment></comment></comment><comment><USER7> It might not be as exciting, but I run [https://dietpi.com/](https://dietpi.com/) on my RPi. It's basically a Debian distro with an easy to use installer for common things. To install Apache, Nextcloud or anything else you just select it from a long list of installers in a console user interface.

</comment><comment><USER8> A few insecure choices here: * fail2ban installed but no mention of actually setting up the rules. Additionally out of the box fail2ban won't work with docker containers * Wide open ports. Only open what you need * In the DNS script you are putting the username and password in the URL. This means even though you are using https anyone can see the username and password you're sending. Pass these options some other way.

<comment><AUTHOR> You're right in that it is better to only open ports that you require - <USER2> update :)

I'm not quite sure what you mean by "Additionally out of the box fail2ban won't work with docker containers". fail2ban is installed locally on the pi.

<comment><USER9> fail2ban works by monitoring logs.

If you had installed for example your web server on a container, the logs will be on the container. Fail2ban on the host won't be able to parse the ones inside the container (by default, needs more work).

</comment></comment></comment><comment> punk-coder Nice article.

I had big plans for using a Raspberry Pi as a Plex Media Server once. The set up was easy, I attached my external HDD and let it scan the libraries. My wife and I watched a few movies, it worked perfectly. The next evening when we sat down to watch a movie I saw that Plex couldn't connect to the media server. I went upstairs and attached a monitor to my Raspberry Pi and I saw that Wireless Internet was not working on it. I tried everything and eventually rebooted it and everything worked again. This turned into a daily thing. I followed all sorts of instructions I found on the internet to try and fix the issue, but to no avail. Every day there would come a certain time where the Raspberry Pi would just lose it's Wifi capabilities and a reboot was needed. Sad, because I liked the idea of this small box sitting on the corner of my desk running a media server. This was an older Raspberry Pi, maybe things have improved.

<comment><USER10> Running any server on wifi, even home plex instance, is not a great idea. It's a shame that rPi doesn't support PoE out of the box, that'd mean you could've only 1 cable connected, but it'd manage both network and power.

<comment><USER11> Really? It's not 2005. Sure something system critical use ethernet.

But the idea that it's WiFi that's unreliable is clearly not the case.

Something is wrong with the RPI WiFi chip, driver or OS configuration.

<comment><USER12> I always try to connect devices that don't move to Ethernet. It saves WiFi bandwidth for "mobile"devices and is extremely stable and the full bandwidth is always available.

Things like SmartTV, RPi, Solar Panels, Amplifier, etc. I hate it that Chromecast only has a wireless option.

But more on-topic, it shouldn't drop off WiFi just like that.

<comment><USER13> > SmartTV

From what I've seen about Smart TV's, I'm better off not allowing them to ever connect to the Internet. Forgo all the "smart" features and just use a Fire TV stick, Roku, Chromecast, etc.

My current TV is an 8 year old 46-inch "dumb" TV, but I plan on upgrading to something bigger later this year, and it looks like my only options will have Smart features, but I already use a Fire TV stick and a RPi, so I don't think I need the smart features.

<comment><USER14> Roku devices also track you, you are not much (at all?) better off.

[https://blog.acolyer.org/2020/02/10/watching-you- watch/](https://blog.acolyer.org/2020/02/10/watching-you-watch/)

<comment><USER13> I'm not really _that_ concerned with tracking, but I _am_ concerned with ads.

<comment><USER14> In which case I suggest a Sony smart TV. It's only some manufactures that shove ads in your face so vote accordingly.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> Please consider [https://freedombox.org/](https://freedombox.org/) \- it is part of Debian.

<comment><USER16> It seems to only have images up to Raspberry 3B+, but not 4?

[https://freedombox.org/download/](https://freedombox.org/download/)

</comment></comment><comment><USER17> I'm currently in the process of setting up a HA Hashicorp stack (Vault/Consul/Nomad) + GlusterFS cluster in my free time at home with Raspberrys and some other small-board computers. Completely overkill but it's great fun. My goal is to see just how self-reliant I can be in terms of digital services. Right now it feels completely reasonable to get to a point where the only external services I really rely on is a CA and domain registrar. Possibly DNS, and external endpoints to front traffic. If the HA part works well and I can make a failover region somewhere, self-hosted e-mail doesn't seem that unreasonable anymore.

There are several attractive alternatives to RasPi (Odroid already mentioned, beware though as most of the small boards are 32bit only. Also Khadas VIM3, FriendlyELEC NanoPi, Rock Pi. Many people also seem to like Orange Pi). The earlier generation Raspis are honestly quite disappointing from a performance perspective, mostly because of the shared bus between Ethernet/Wifi/USB/storage. The 4B is actually the first to hold its ground, and still does price/performance-wise compared to the above. Honestly it feels like the market's stagnated a bit around the RK3399 and Allwinner H5/H6, hoping there's going to be a new wave of interesting stuff during 2020.

A really nice feature of some of these ARM boards is that you can go so much more free (as in libre) than with x86 chips. Raspberry Pi excluded, unfortunately.

If you're open to x86 and want a bit more power, Intel NUCs have been around for a good time and AMD is pushing out Ryzen NUCs now. First out is ASROCK. I've also been very happy with the PC Engines APU2 router boards - they are great as small-form-factor servers or NAS builds as well.

Note that even if Raspbian is 32-bit only, you can totally run 64-bit OS's on the 3B+ and 4 series.

For 3B+ there's even a pretty stable UEFI bootloader: [https://www.raspberrypi.org/forums/viewtopic.php?f=50&t=2494...](https://www.raspberrypi.org/forums/viewtopic.php?f=50&t=249449)

For Raspi 4 you can just rebuild the kernel for aarch64 and change the config a bit. Or if you're lazy, sakaki- is providing weekly builds here: [https://github.com/sakaki-/bcm2711-kernel](https://github.com/sakaki-/bcm2711-kernel)

I have both 3B+ and 4B running vanilla 64-bit Debian Buster.

<comment><USER18> I have this exact setup (vault/consul/nomad + glusterfs and zerotier for networking) and its pretty awesome. Still dependent on letsencrypt for SSL certificates. It runs plex amazingly well (though I am using some machines which are probably overkill for this purpose), even with the data coming from a glusterfs drive. Most of my nomad tasks can just launch anywhere because of gluster.

For internal DNS at least, you can just use consul. I set up dnsmasq to forward to consul on all of my machines which is super convenient (esp when that DNS just points to a docker container ipv6 address on the zerotier network, not port remapping on networking insanity needed)

<comment><USER19> Any additional build details from you or Legogris?

Haven't considered using glusterfs but the rest of those pieces, absolutely.

Only piece I could find similar to the topic is [https://www.mockingbirdconsulting.co.uk/blog/2019-01-05-hash...](https://www.mockingbirdconsulting.co.uk/blog/2019-01-05-hashicorp- at-home/).

<comment><USER17> After a quick scroll-through I have a very similar setup. One thing to watch out for is that you really want to set up TLS and ACLs for Consul, Vault and Nomad as early as possible (maybe ACLs for nomad is not as critical to have in place from day one) - if you can avoid bootstrapping that on an already running cluster you save yourself a lot of head-scratching.

Integrating these three systems, with Terraform on top, is pretty time- consuming with all the policies and TLS certificates, but it seems pretty smooth to maintain after the initial setup.

<comment><USER19> Nice, thank you for the TLS/ACL hint!

I'm learning terraform/consul/nomad/vault as I build this thing, so I think the learning curve for me is extra painful compared to some of y'all.

The docs seem really good if everything is cloud-hosted and really nonexistent if you're running it all on your own metal.

I'm thinking I'll build out my test stack with vagrant. I can use Dropbox or Keybase or something similar to store and sync my terraform state if I need to. Any other hints or helpful readings?

</comment></comment></comment></comment></comment><comment><USER20> Once you jump up into the 4GB model and are looking at "home server" or "media server" type functionality, other solutions might be more attractive.

For example, used ASUS Chromeboxes are all over eBay from $50-$120 or so with a real SSD, x86-64, nice enclosure, etc. And they are easy enough to use a SeaBios ROM with for regular Linux instead of ChromeOS.

Edit: not disputing the Pi is king at lower memory / lower storage / lower cost points.

<comment><USER21> I got a HP Compaq Elite 8200 with a i5 and 8GB of RAM for 50 bucks on Newegg about a month ago. And shipping was free too.

I stuck in a spare ssd and 8TB drive. It is running Ubuntu.

Right now it acts as a pi hole, nextcloud server, Channels DVR server, Plex Media Server, and runs Transmission. It barely breaks a sweat.

I used to just have a Pi 3B+ doing duty as a pihole and nextcloud box.

This works better and overall cost less than the pi once I added in the sd card, case, fan, power supply.

<comment><USER20> The Lenovo M72e is another USFF PC you can find with 8GB ram for $100 or less. Comes with WiFi too.

<comment><USER22> Seconding this, I run a couple of these in my basement and they are great low cost, low power servers.

</comment></comment></comment></comment><comment><USER23> I recently setup my Pi 4 with Pi-Hole and Wireguard for VPN. My first install and config resulted in super high load. So I redid it all on a fresh card (same brand) and it was snappy. No idea what the culprit was but I'm running Raspbian, installed with a NOOBS formatted SD card

I disabled swap memory and overclocked it to 2ghz which was super easy. Switched to a Flirc case because my prio case with a fan was really loud.

For Wireguard I followed this guide: [https://www.reddit.com/r/pihole/comments/bnihyz/guide_how_to...](https://www.reddit.com/r/pihole/comments/bnihyz/guide_how_to_install_wireguard_on_a_raspberry_pi/)

</comment><comment><USER24> If you're into this sort of thing, I have really enjoyed tinkering with Odroid products. Also the homelab subreddit is pretty good.

[https://www.hardkernel.com/shop/odroid-hc2-home-cloud- two/](https://www.hardkernel.com/shop/odroid-hc2-home-cloud-two/)

<comment><USER25> > homelab subreddit

check out homeserver too...more towards the low end of scale rather than "I've got a xeon beast in my basement" homelab

</comment></comment><comment><USER26> I use my Raspberry pi to proxy any cloud video to my LG Smart TV, at native resolution, using rclone mount and Emby Media server. It's great. I can play 4K 100mbit videos from my cloud drives directly on the TV.

Side note, you can also use cloudflare free for dns, it's easy to setup.

<comment><USER27> And cloud flare can block some of the mischievous web traffic too

<comment><USER26> Yes, exactly. Despite the fact that my domain is not listed anyone online, cloudflare dashboard says they blocked 1000s of attempts last month.

<comment><USER28> Eh, doubt. My guess is they're bumping those numbers based on people hitting the cloudflare edge IP not your particular DNS name.

Do you have your origin whitelisted to cloudflares edge ranges? If not it can be hilariously easy to get around cloudflare (ex: Hamas.ps is behind cloudflare but runs on Hetzner [https://censys.io/ipv4?q=hamas.ps](https://censys.io/ipv4?q=hamas.ps))

</comment></comment></comment></comment><comment><USER29> Is there a Raspberry Pi 4 case somewhere for sale that can hold a 2.5 inch HDD?

<comment><USER30> I've often looked for this, and there are surprisingly few options. Maybe something like this would work?

[https://www.amazon.com/Geekworm-Raspberry-Storage- Matching-E...](https://www.amazon.com/Geekworm-Raspberry-Storage-Matching- Enclosure/dp/B07GRZRW7J/ref=sr_1_3?keywords=raspberry+pi+case+hard+drive&qid=1582215950&sr=8-3)

</comment></comment><comment><USER31> I only skimmed this article but I didn't see any step where the default credentials ("pi"/"raspberry", IIRC) are changed so if you follow this guide you should expect your "home server" to be hacked and become part of a botnet shortly after you

> _head to your router settings and port forward 80, 443, 22 and any other > ports that you might want._

<comment><USER32> in fairness, changing the password is step one on any internet connected raspberry pi.

</comment></comment><comment><USER33> I'm using a pi 4 with ubuntu server and plex. The Android tv Plex app works really well with it.

It's connected to my wifi router via an ethernet cable. I used 32 bit ubuntu as it's only a 1GB pi and 32 bit saves some ram. I had some voltage warnings when booting up, I should probably get a better power supply for it. The Usb drive is non-ssd.

</comment><comment><USER34> What might people recommend for a NAS?

<comment><USER35> I personally looked into this a lot the past year. And Ended up with a Synology NAS.

The software is just incredible on that thing. I got one with an Intel CPU and can run Docker on it that way. This replaced my PI where i was previously running a few things for home automation.

You can totally setup a NAS with a pi but IMO it's never gonna be as nice as a Synology NAS and all the trouble you have to go through setting it up.

<comment><USER36> I have a 416, and got it for the same reason - it just works, very well, easy to administer (but hardly ever need to).

But I can't shake the feeling that they will turn to the dark side sooner or later - the fact that the software is closed, mostly. Definitely if they get acquired, but also all the nice features are begging to be abused once the MBAs see they can get another $1/year/customer from selling you out.

So far, I only have excellent things to say about Synology. The feeling is from past experience with other vendors - Synology themselves have been amazing.

</comment></comment></comment><comment><AUTHOR> One small point not mentioned in the article is that the is hooked on to a wall behind the tv so it is nicely hidden.

A cheaper option would probably have been to get a proper computer (likely secondhand), which would have been more cost effective but probably take up more space :)

</comment><comment><USER37> Now I just need to translate it to Portuguese and share it with my Dad. Thanks a lot. =)

<comment><AUTHOR> Nice! If you publish it, do send it across and I can link it :)

</comment></comment><comment><USER38> I enjoy this blog, but I wish it had an RSS feed.</comment>


Resignation Letter on Cake - <AUTHOR> http://www.jobkaster.com/blog/resigning-a-piece-of-cake/

<comment><USER2> Not bad. I hope more people will pursue different careers and passions after they've spent 10-15 years in one area.

A friend of mine has a neighbor that used to be a software engineer, and now makes sausage. It's honestly some of the best sausage I've ever had, and you can't hardly find it anywhere because it sells out so fast. Well, I know one place I can get it but I'm not saying where.

I hope he truly enjoys making cakes and I hope one day I'll embark on a different professional journey again.</comment>


Ask HN: Honestly, what's the deal with YouTube's play bar? - <AUTHOR>

I can not believe this thing still exists and looks and works the way it does. Basically, if I want to point and click on a specific time of the video, I still can't do that if the little circle is in the way. Who came up with that design??? Sometimes, you're watching an hour long video where if you click on the timeline, it misses by several minutes, so you have to click again to get the god damn circle out of the way and then try to get it where you want it again. Is this a google product? Really?
All I want is to be able to tell the player that "please start at 8 minutes and 32 seconds into this clip", not 7 minutes and 32 seconds into the clip and not 9 minutes and 48 seconds into the clip. There's a huge difference there. I mean, am I crazy? I just need to understand the thought process here.
If I worked at this mysteriously amazing company I would change the circle to a 2 pixel wide line and deploy that shit before lunch today. Problem solved.
If you don't know what I'm talking about: http://i.imgur.com/tk5PWrF.png <comment> fredm-de Holy Moly, they seemed to just have changed the player a few hours ago. And you're problem seems fixed.

<comment><AUTHOR> YAAAY!! See, some complaining on hacker news and BOOM - progress. Your welcome.

</comment></comment><comment><USER2> If you hold the circle that's "in the way", it'll allow you to scrub through the video.

<comment><AUTHOR> Try doing that on a touchpad(is that the word?). First when you click the circle, it moves a couple of cm, then you have to try to move your fingertip slooowly towards the time you want to start from. I mean, come on people... what are we doing here?

<comment><USER3> Get a better touchpad?

<comment><AUTHOR> Right. Jokes aside, I'm currently using a pretty new MBP. Still not understanding the problem here. How is the circle a good idea? There must be some technical reason for why they went with it. I can't imagine anyone testing it out for more than 5 minutes before thinking "Yep, this clearly sucks".

</comment></comment></comment></comment><comment><USER4> And cache. When wanting to rewind I'd like the forward part of the video to keep downloading, not reload the video from that point and lose all ahead of it that's already downloaded. That used to be the case, but changed around 2011/2012 IIRC.

</comment><comment><USER5> My buddy works at YouTube on the player and I asked him this same question. Basically he said there's resistance to changing too much on the interface in order to not mess with success. The good news is, they know the issue(s).

<comment><AUTHOR> "resistance to changing too much on the interface in order to not mess with success"

Oh my god. I see. Thx for the inside info.

<comment><AUTHOR> Btw, all they have to do is change two lines of CSS.

.html5-scrubber-button {border: 0; width: 1px;}

But whatever, let's not risk anything here ;)

</comment></comment></comment><comment><USER6> i feel your pain bro..

you can always add #t=03m22s to the end of the url to start from 3m22s from the video.

<comment><AUTHOR> Yes, as ridiculous as it sounds, that seems to be the only option.</comment></comment>


Ask HN: How can I have a group of service peers assign themselves a number? - <AUTHOR> I have a set of a few hundred thousand xml feeds that I want to poll every XX minutes.
I'm writing a service in Go that pulls the list of feed URLs from a database and fetches some subset of those feeds.  This subset are the ones that this service will be responsible for fetching.
I'd like to divide up the work by simply numbering each server/instance of this service I have running, and dividing the ID of the Feed by the index of the service modulus the number of peers.
What is a robust way that I can have these services discover their peers and reliably assign an index to themselves?  So, if I deploy 3 instances of this service, they will eventually discover each other and assign indexes of 0-2 to themselves.
I'd like it so if I add a new instance of this service, or if one goes down, the peer discovery mechanism will notice this and the services will re-assign a new index to themselves and then re-fetch their Feed list based on their new ID.
Is this a use case for something like etcd or Consul?
My initial thought was to have each service generate a random ID/number and then each peer would register with something like etcd.  It would then monitor some key for peers and assign itself an index based on the sorting of its key relative to its peers.  I'm not sure if this is the best way to handle this situation though. <comment><USER2> Hash the resource to be fetched, farm the work out to a node or work queue based on the last n bits of the hash. That way you don't need any centralization, any node can compute the hash and come up with the same id for the node to do the work.

Good luck.</comment>


Federal Web sites knocked out by cyber attack - <AUTHOR> http://www.sfgate.com/cgi-bin/article.cgi?f=/n/a/2009/07/07/national/w171115D76.DTL&tsp=1 <comment><USER2> Interesting that US and South Korean sites are being attacked and that the attacks started on July 4th. It seems that North Korea might have their hand in it. They are partial to showing force on US holidays, and as of late have vied both US and South Korea as immediate enemies.

However, North Korea has a pattern of showing force to generate internal support for its government and as a playing card in negotiations with the west. Cyber-attacks like these are not flashy like testing a missile or a nuclear war-head and not very good for propaganda machine.

<comment><USER3> There are also allegations that the South Korean spy agency is overstating the attack in order to build support for a new law that gives it broader powers.

And keep in mind this is a DoS attack against public-facing websites. Taking a SK newspaper site offline is really annoying but it's not exactly in the same league as hacking the electrical grid.

</comment></comment><comment><USER4> It would be ironic if they actually did the attack considering their current government website is about as sophisticated as a circa 1999 mom and pop e-tailer.

</comment><comment><USER3> Sounds like a botnet DDoS attack

</comment><comment><USER5> Why didn't they take down the IRS?</comment>


Show HN: SkillHelper — A List of Business, Development, and Design Infoproducts - <AUTHOR> http://www.skillhelper.com

<comment><AUTHOR> Hi, everyone! I'm the creator of SkillHelper. If you have any questions about it or would like your infoproduct to be added to it, please let me know!</comment>


Meet the Man Who Finds Your Stolen Passwords - <AUTHOR> http://www.popularmechanics.com/technology/security/a13844/alex-holden-finds-your-passwords/

<comment><USER2> There's a lot of controversy over Alex Holden and his 1.2 billion passwords claim[1][2][3]. The last link is more complete, but has a strong bias against him.

[1] - [http://www.jsonline.com/business/debate-swirls-around- securi...](http://www.jsonline.com/business/debate-swirls-around-security- expert-alexander-holden-b99325583z1-270240091.html)

[2] - [http://www.theverge.com/2014/8/6/5973729/the-problem-with- th...](http://www.theverge.com/2014/8/6/5973729/the-problem-with-the-new-york- times-biggest-hack-ever)

[3] - [http://www.youarenotpayingattention.com/2014/08/08/the- lie-b...](http://www.youarenotpayingattention.com/2014/08/08/the-lie- behind-1-2-billion-stolen-passwords/)

</comment><comment><USER3> Shameless plug, a friend and I wrote passwordcanary.com at yhack, a webapp that crawls the web and notifies you when your email shows up in a email/password dump. Allows you some time to hopefully change your credentials.

EDIT: Here's our demo that shows that response time is under a minute. [https://www.youtube.com/watch?v=PN_dEwnbG40&feature=youtu.be](https://www.youtube.com/watch?v=PN_dEwnbG40&feature=youtu.be)</comment>


Ask HN: What solution do you use for sending transactional emails to your users? - <AUTHOR> I always use Mailgun + Laravel Notification system. I write the email templates with Markdown or Blade.<p>How do you implement your transactional email system if you use other languages/frameworks? <comment><USER2> [https://postmarkapp.com/](https://postmarkapp.com/) who do only transactional emails and there's no free plan. The account isn't even complete setup until you've send an email via their API and a customer service person has reviewed your setup. It's extra steps but we found their delivery rates better than sendgrid/mailgun in the past. We have the email templates in our Ruby framework (Rails) with some inline CSS (based on [https://github.com/mailgun/transactional-email- templates](https://github.com/mailgun/transactional-email-templates)).

</comment><comment><USER3> We use AWS SES via the [https://www.sendwithses.com/](https://www.sendwithses.com/) wrapper.</comment>


D Future - <AUTHOR> http://email@example.com <comment><USER2>
      Rust: Promotes itself to be better C but its simply a more complex language design.

huh? Rust tries to solve the real problem of shooting yourself in the foot in C without compromising on being as close as possible to bare metal.

      D is C++ but improved/simplified. Its not to hard to get into, its more easy for anybody from a C background.

The main virtue of C++ is its vast legacy base that needs to be maintained. Replacing C++ with D can't possibly be for the reason of being "improved/simplified".

      Take it from a guy that spend a large part of his life in PHP.

This explains a lot of the statements in the publication.

<comment><USER3> > Rust: Promotes itself to be better C but its simply a more complex language > design.

>> huh? Rust tries to solve the real problem of shooting yourself in the foot in C without compromising on being as close as possible to bare metal.

By having a more complex language design. You can't deny that lifetimes and the borrow checker make Rust a much more complex language than C

<comment><USER4> It's not like a simpler language makes use after free (a basic lifetime example) go away.

<comment><USER5> A simpler language with a GC makes it go away.

</comment></comment></comment></comment><comment><USER6> The title is very misleading. This is a rant by programmer about the current state of D.

There is very little about the future of D and it is certainly nothing official like the Vision document [0] twice a year.

[0] [https://wiki.dlang.org/Vision/2016H2](https://wiki.dlang.org/Vision/2016H2)

<comment><USER7> An official document that's just a wiki page that can fit almost entirely on a single page. That is nothing more than a very brief outline of what to accomplish with no real documentation of a plan to achieve listed goals.

No surprise this list is so long:

        Other topics from H1 underwent only little development and will be copied as ongoing topics for H2: safety, memory management, tooling, improve language stability and specification, C++ and Objective C integration, library additions, smartphone support.

</comment></comment><comment><USER8> I found the post slightly contradictory but overall strongly evoked the frustration that the author felt. My reading is that most of the problems come from a lack of manpower or perhaps a lack of delegation but I'm only reading this as an outsider. I think that D is a language that I would like to use but I don't because few seem to have heard of it. This is the catch22 problem that D finds itself in. Popularity contests are fickle and not just restricted to the high school playground unfortunately. Look at swift, i read about problems with breaking changes and compiler crashes and it just doesn't seem to matter because Apple.

Anyway, my question is, what are the weak points of D? I should state at the outset that I have no problem with there being a GC as I'm a python programmer not a C programmer but one who wants to learn a compiled language. I'm more interested in any other issues that might warn me away from D.

<comment><USER6> The weak points of D?

If you want the high-level view by the project leaders what needs to be done, look at the vision document: [https://wiki.dlang.org/Vision/2016H2](https://wiki.dlang.org/Vision/2016H2)

D certainly needs more libraries, but which language doesn't? The currently available stuff is: [https://code.dlang.org/](https://code.dlang.org/)

Further stuff depends on what you would use D for. You describe yourself as a "Python programmer". Web development? In this area D is still weak. There is only one solid framework [http://vibed.org/](http://vibed.org/) which does not officially support any SQL database (it has Mongo and Redis though). Personally, I think vibe.d is fine for micro services, but it is still a long way until it could compete with Django. I built a prediction market web app with vibe.d. It has hand-written SQL queries (should probably have used [https://code.dlang.org/packages/hibernated](https://code.dlang.org/packages/hibernated)). I had to write Github authentication from scratch. There are few conventions, which is irritating if you are used to follow Django tutorials. You feel lost.

That is my experience with D. Personally, I have no issues with the standard library like the ranter, but I assume I'm in the minority with that.

<comment><USER8> Thanks for the link to the vision document. Even the fact that such a document exists does show that steps are already being taken to give D more direction.

I'm not really a web developer, more of a data analyst with some web services. So the lack of SQL libraries is a disappointment.

<comment><USER6> As a data analyst, you probably use Numpy? There is ndslice in D. [https://dlang.org/phobos/std_experimental_ndslice.html](https://dlang.org/phobos/std_experimental_ndslice.html)

This comes from the Mir package: [http://mir.dlang.io](http://mir.dlang.io)

And there is some scientific code stuff here: [https://dlangscience.github.io/](https://dlangscience.github.io/)

<comment><USER8> The Mir package looks pretty interesting but it's quite new isnt it? Thanks for the links.

<comment><USER6> Yes, it is new.

(Ilya, the Mir guy, is a huge fan, who champions the "betterC" D style. This discussion triggered the rant here.)

<comment><USER8> This guy Ilya, seems to want to throw everything away and start again. Is that really what D needs?

</comment></comment></comment></comment></comment></comment></comment><comment><USER9> > Rust: [...] A over active amount of fans, that do not understand its > complex.

No. We understand it is complex. We also understand why: memory management is complex in and of itself, but RC/GC everything (or ad-hoc memory management) is the wrong approach for a systems language.

<comment><USER6> > RC/GC everything (or ad-hoc memory management) is the wrong approach for a > systems language

D agrees with the "everything" part. D wants to give you options, so you can use GC/RC/manual where appropriate.

Sadly, I have not found the time to wrestle with the Rust borrow checker myself. I still have doubts if it is worth it. For example, assume you write a graph data structure. To pass the lifetime analysis, you have to store the nodes in some background store vector. If you want to free/reuse memory of nodes, Rust essentially requires you to write a garbage collector for the nodes yourself.

Afaik there are plans to add an optional GC to the standard library? So ultimately, D and Rust converge to the same point from different angles. Both want all the options. Rust started from safe manual and gains options. D started with safe automatic and gains safety for manual.

<comment><USER10>
      > Afaik there are plans to add an optional GC to the
      > standard library?

This is incorrect. There are some far-future plans to add GC hooks to the language to allow it to interoperate with external GCs (mostly motivated for Servo to use with Spidermonkey, Firefox's Javascript engine), but there will never be a GC implementation shipped with the stdlib itself.

<comment><USER6> Ok, so only library-GC like [https://github.com/Manishearth/rust- gc](https://github.com/Manishearth/rust-gc) ?

<comment><USER10> Yes, Manish there is a Servo dev who spends some of his time thinking about how Rust could support external GCs. I believe his goal there is to write a library that's more-or-less analogous to the basic Boehm collector for C, as a proof-of-concept.

</comment></comment></comment></comment></comment><comment><USER11> I disagree Rust is more complex. Sure, Rust is more different, but not more complex.

<comment> ainar-g Same goes for "Go saps all the fun out of the coding". As an ex-Ruby programmer, with Go I've never had so much fun programming since tinkering with C in college. Go just doesn't get in the way of implementing ideas, which is the core of the fun.

<comment><USER12> Same here, go feels "fun" for some reason.

Maybe its the well-thought standard library, maybe its the way the compiler helps you. Maybe its because we can actually catch bugs at compile time instead of those runtime errors and silent drops of javascript

</comment></comment></comment><comment><USER13> I think we are experiencing a fatigue in general when it comes to IT and technologies. Sure technology evolves but you can learn only so much at the same time. People prioritize. If the technology is not appealing to me I won't use it but at the same time if the technology is massively used and pushed by corps and startup hype I have to at least take a look. D did not attract enough people nor it has a backing of multi billion dollar corporation.

<comment><USER6> Reasons for D:

It is a way out of the C++ tar pit, because it does C++ interop better than any other language. D needs to continue to outrun C++ evolving, though. See [http://dconf.org/2016/talks/watson.html](http://dconf.org/2016/talks/watson.html) or [https://www.youtube.com/watch?v=IkwaV6k6BmM](https://www.youtube.com/watch?v=IkwaV6k6BmM)

It has powerful meta-programming. It is effectively the opposite of Go, which does not even have generics. This certainly provides foot shooting as well, so other languages (e.g. Rust) are more conservative with that. D examples: [https://qznc.github.io/d-tut/meta.html](https://qznc.github.io/d-tut/meta.html)

Those are the two reasons, which D has ahead of _all_ other languages (ok, not Lisp wrt meta-programming). If you compare it to another specific language, there are more things to talk about.

</comment></comment><comment><USER14> Dlang's future is bright. It is the one true C++. In a related article, someone proposes C++ for physicists instead of Fortran. I propose to use Dlang or evolve Fortran to be more D-like. But take a look at the vast research C++ code. It is there unmaintained and unmaintainable. Dlang would make a huge difference here. The best are yet to come. C++ suffers from a serious personality disorder. It is C / it is SML / it is Python and finally it is perplexing and dangerous like JavaScript. If I had to use C++, I would stick to C. If I could change C++, I could throw away OO and Exceptions and see how to integrate templates and closures to C and make the language less forgiving.

<comment><USER15> One of the great things about C++ is that it weeds out the shitty developers. Not that there isn't plenty of shitty C++ code out there. There's just not a lot of C++ code out there that's both shitty and kind of works. If you don't do C++ right it will fail spectacularly. Poorly written software in languages like Java, Go, Python, etc. can hobble along miserably for decades because when it's broke it probably still kind of works event if it's slow and constantly spits stack traces. A C++ program has to be beautiful or it probably wont last long.

<comment><USER14> I am a shitty developer, but as a researcher, I have common sense and my BS radar shows a very big signal at C++ direction. When I see problematic C++ I do not start blaming the developers. Part of the problem is the developer and the other part ~ 50% is the language. Since I am a shitty developer and a coward, I would never do C++ buddy jumping again. Last time I pissed my underwear. The others, who didn't back-off, destroyed a 200.000 EU research program fixing bugs, refactoring and seeking the holy Grail of low-level performance instead of doing meaningful research and improving algorithmic complexity.

<comment><USER15> Thank you for admitting it and knowing your limitations. The world could be saved a lot of time and money if more people followed your example.

However, as with any challenging skill in life, you have to be shitty at C++ before you can hope to be good at it. We need some brave souls to attempt to become good programmers otherwise we won't have any. The biggest problem with software today is all the shitty programmers out there who are employed as if they were good at it. C++ helps weed those programmers out because it's very difficult to be at all productive in that language of you're shitty.

</comment></comment></comment></comment><comment><USER16> As a language designer, I highly admire the design choices of D and happily copy them.

<comment><USER17> Yes, a lot of D's choices are finding their way into other languages :-)

</comment></comment><comment><USER18> I don't understand why it's such a big deal with the GC.

Ok if you want to build drivers or OSes related stuff.

For AAA games, I can understand, but they will not switch to a new language as long as there is no engine like Unreal or Unity3D (GCed) that worth the switch. And the rest are indie and a GC will not affect performance.

For web services, GUI application, the GC would be desirable because it will enable the developper to work on the business model and not the computer model and it will removed stupid memory management kind of bugs. Plus, 1200 fps vs 1120 fps is not faster since we can't see the difference.

Is it that the D's GC is really slow or really memory inefficient?

</comment><comment><USER19> Not sure why an overall rant post is given this visibility

</comment><comment><USER20> >Go: Its is a "simple" language. But its forced restrictions at times are so annoying its saps all the fun out of the coding. Its not really C. Its more Basic on steroids. Unfortunately while Go has huge amount of traction and packages ( 70k from my count ), the quality is also... It has a few real gems those gems are a result of the mass amount of packages. It has its own market. A scripting replacement market mostly.

lol no

<comment><USER21> >> lol no

That was my reaction as well. I'm surprised that this kind of "deep" analysis is on the front page.

</comment></comment><comment><USER22> It's hard to take a post like this seriously when it uses such awful grammar and spelling.

<comment><USER7> Not that difficult, you just have to understand english isn't everyone's first language. If you've ever taken the time to learn another language, you would have realized it is very difficult to do. Especially later in life. If a child as young as 11 was never exposed to language, they might never be capable of understanding it.</comment></comment>


Tell HN: Vodafone AU is still blocking archive.is - <AUTHOR> Today I found myself unable to access archive.is on my Vodafone network, I got redirected to
https://www.vodafone.com.au/temporarily-unavailable
from
http://archive.is/gcj3w
I don't think they are forced by a court order on something since other ISPs here (such as Telstra) are not doing the same.
So, please avoid Vodafone AU if possible, they are doing nasty things on user's   traffic. <comment><USER2> Quite disappointing. Optus, another Australian carrier, only very recently reversed their similar blocks on a number of archival sites among others. When all players are equally bad, there are very few options available to 'vote with your wallet' per se. For what it's worth I raised a number of support tickets requesting these be unblocked, but like most large firms I'm sure these simply fell into the ether.

</comment><comment><USER3> Archive.is is also not available for users with 188.8.131.52 (Cloudflare DNS): [https://jarv.is/notes/cloudflare-dns-archive-is- blocked/](https://jarv.is/notes/cloudflare-dns-archive-is-blocked/)

Long shot: those two are related. But hijacking requests like that is a big no-no.

</comment><comment><USER4> Related(?): Vodafone Egypt uses MITM on SMTP traffic to strip TLS.

<comment><USER5> You would be amazed how much SMTP traffic has TLS stripped by big backbone providers...

It's time some big webmail providers stepped up their game and required actually valid TLS certs from any provider which had previously had a valid cert.

Today most providers will happily accept a self signed expired certificate just fine, which totally breaks security.

</comment></comment><comment><USER6> "This website is temporarily unavailable."

As always, corporate messaging uses vagueness as a shield - no mention of why it is unavailable, not even if the reason is technical or legal.

<comment><AUTHOR> It's probably not technical, this can be bypassed by put the correct IP address into the hosts file.

What's made me angry is their lack of transparency.

And what's made me even more angry (and sad) is the fact that the people in this country aren't being angry about this. :(

</comment></comment><comment><USER7> Isn't this related, they claim, the the Christchurch shootings?

</comment><comment><USER8> That's why I hate Vodafone besides putting 5g and getting headaches (electromagnetic sensitivity)

<comment><USER9> I don't think this is possible.</comment></comment>


Fastmail: New IP addresses in Iceland - <AUTHOR> http://blog.fastmail.fm/2014/06/02/new-ip-addresses-in-iceland/

<comment><USER2> Hi, FastMail employee here.

Just to clarify ahead of time, what's happening is literally all the blog post says - we're getting off of Opera hardware and networks and on to our own.

For end-users, nothing changes. There will continue to be a secondary DNS and MX service in Iceland. We're continuing to hold a live emergency replica of all our data there. And that's all. No new services, no precursor to non-US hosting, nothing.

As the blog post says, the _only_ reason it might be of interest is if you've hard-coded the old IPs somewhere. If not, then there's nothing to see here. Sorry to disappoint you ;)

</comment><comment><USER3> As Rob said - we've had our own separate space set up for a couple of months now, but we hadn't got things in place to move equipment. In particular to get maximum off-site safety during the transition, we wanted a cross-connect between the Opera network and our Network.

Once the techs in Iceland had the cross connect running, we moved a single machine to the new cabinet, verified that we could get traffic through the connect, and then moved on machine and the VPN link across to the new network.

Once THAT was done and happy, we moved the nameserver and mx roles onto that machine. That's where we are at now, and why the IP address has changed.

Next up is moving one of the database servers across, and then switching that to primary.

And once THAT is done, we can move all the other servers whenever we want. And when they're all in our own area, we can get the interlink cable pulled, and we no longer have any access directly into Opera's network, and they no longer have any access directly into ours. Yay.

(we're already firewalling each other up the wazoo of course. Don't trust any network you don't have to, even if you trust the people running it)

</comment><comment><USER4> Curious, why this matters? Honestly, not being a troll.

<comment><USER5> It's a warrant canary, it's a warrant canary!

</comment></comment><comment> workhere-io Does this mean that all FastMail accounts are now hosted in Iceland?

<comment><USER6> No, this is response from employee: [https://news.ycombinator.com/item?id=7832207](https://news.ycombinator.com/item?id=7832207)</comment></comment>


Google officially supporting the Analytics AIR application - <AUTHOR> http://onair.adobe.com/blogs/onair/2008/01/15/google-officially-supporting-the-analytics-air-application/?sdid=BQUCI <comment><USER2> What's with the stereo equalizer theme? Who wants their analytics reports to look like an mp3 player?</comment>


Fighter pilot says UFO he chased in 2004 committed 'act of war' - <AUTHOR> https://www.foxnews.com/science/fighter-pilot-says-ufo-he-chased-in-2004-committed-act-of-war <comment><USER2> I guess somebody had to cherry pick that line from the 3+ hour long interview, because it makes a good click-bait headline. But there's a lot more to the interview with Fravor than that. I still have over an hour of it left to watch, but I'd already say it's well worth watching.

And don't get me wrong: I'm not some "UFO believer" or member of the "UFO community" or anything. I'm a skeptic by nature and I'm definitely a skeptic when it comes to some of the more radical claims made by ufologist types: the "extraterrestrial hypothesis" in particular.

But Fravor does come off a very reasonable, intelligent, level-headed, sincere witness to something highly unusual. And he makes a point of distancing himself from claims of, as he puts it, "little green men". That said, he also allows that what he saw is not, as far as he knows, possible with any human technology.

Net-net, if you enjoy this kind of thing, regardless of whether or not you have any pre-existing biases regarding what UFO's "really are", I'd recommend this podcast episode. At the very least, it's a chance to hear first-hand testimony by a very credible witness to something extraordinary.

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

<comment><AUTHOR> I agree on the link title, this is one of the few times I wish the Mods would update/change it. It's more about how credible this witness is, IMO.</comment></comment>


Underground signals warn neighbouring plants of aphid attack - <AUTHOR> http://onlinelibrary.wiley.com/doi/10.1111/ele.12115/abstract;jsessionid=43E51315EFE948C1A0C3617E273ACFDD.d01t01

<comment><USER2> There are many known ways in which plants communicate (if you want to call that communication):

\- ethylene is a gas, but also a plant hormone that causes (among others) ripening of fruits. So if you got a field of apple-trees, when the first tree's fruits starts to ripen and release ethylene there's a chain reaction where other trees detect the gas and causes the other trees to ripen their own fruits (and release more ethylene). This is used in the industry so you can transport unripe fruits and ripen them later with ethylene.

\- Trees of Heaven produce hormones that they use to tell other plants to stop growing, so to speak [1]

\- When lima beans are attacked by herbivores or parasites, they release gaseous substances that warn other plants, who then in turn upregulate their defences [2]

There are many, many, many more examples, it's awesome :)

[1] <https://en.wikipedia.org/wiki/Ailanthus_altissima#Ecology>

[2] <http://www.mpg.de/942876/W001_Biology-Medicine_060_065.pdf>

</comment><comment><USER3> IMHO what's even cooler is a type of plant defense where they cooperate with other organisms to fend off herbivores. Some plants are known to emit organic volatiles which attracts predators of these feeding herbivores.

For example moth larvae ( _Manduca sexta_ ) feeds on tobacco ( _Nicotiana attenuata_ ) plants. The tobacco plant releases leaf volatiles which float through the air to attract a predator (a big eyed bug, _Geocoris_ ) to feed on the larvae. [1]

[1]: <http://www.plasmyd.com/doi/10.1126/science.1191634></comment>


Jim Rogers: The worst crash in our lifetime is coming - <AUTHOR> http://www.businessinsider.com/jim-rogers-worst-crash-lifetime-coming-2017-6?IR=T <comment><USER2> Since 2008 we have crash predictions every year and nothing happen. I'm having collapse fatigue !

I'm not saying it's not gonna happen, but until now the system has been more resilient than what these people give it credit for.</comment>


Bitcoin Cash reaches $8,500 in 4 minutes - <AUTHOR> https://techcrunch.com/2017/12/19/coinbase-halts-bitcoin-cash-trading-as-price-briefly-hits-8500/ <comment><AUTHOR> After initial rollout of Bitcoin Cash trading on GDAX and Coinbase, Bitcoin Cash prices surges $5k in less than ten minutes causing GDAX and Coinbase to disable Bitcoin Cash trading.

Share your thoughts on Bitcoin Cash moving forward.</comment>


How do I interview for a programming engineer? - <AUTHOR>

<comment><USER2> There are entire books on the subject [1]. If you don't have a programming background, I suggest you let someone you trust do it for you.

[1] [http://www.amazon.com/s/ref=nb_sb_noss?url=search- alias%3Dap...](http://www.amazon.com/s/ref=nb_sb_noss?url=search- alias%3Daps&field- keywords=software+engineer+interview&x=0&y=0#/ref=nb_sb_noss?url=search- alias%3Daps&field- keywords=programming+interview&rh=i%3Aaps%2Ck%3Aprogramming+interview)

<comment><USER3> Agreed.

Also, one thing you absolutely must do is _make sure they can program!_

Have them solve some simple programming problems and maybe design problems. You can use plenty of flexibility here, even give them some time alone to do it if they have difficultly doing it in an interview context in front of people on a white board, but be sure to do it.

Search on fizzbuzz for one modern approach to this: <http://www.google.com/search?q=fizzbuzz>

In the bad old days of C/C++ a general approach was:

Write code to reverse a linked list. Very common, tests knowledge of pointer use.)

As a warm up, perhaps write code to compute the factorial of a number. You can test knowledge of recursion this way and the mathematical function is so simple that shouldn't through the interview for a loop (e.g. computing Fibonacci numbers is too complex for an interview in my opinion).

And show them a block of code/a small function that's got some deliberate errors etc. in it and ask them to find all the ones they can.

You aren't looking for perfection in this sort of stressful situation, but you do need to know if they can program their way out of a paper bag. Many if not most self-described "programmers" can't.

As for design, there are many ways to approach this, and I like doing some of it interactively, i.e. talk with the candidate as they are doing it or after they've had a little while to think about it, scribble on paper, etc. You want evidence of their design thinking, not a perfect or complete design.</comment></comment>


RAD – Outlier Detection on Big Data - <AUTHOR> http://techblog.netflix.com/2015/02/rad-outlier-detection-on-big-data.html <comment><USER2> Consider:

"A Real-Time System-Adapted Anomaly Detector", 'Information Sciences', volume 115, April, 1999, pages 221-259.

It's a distribution-free statistical hypothesis test for multidimensional data. False alarm rate can be adjusted in small steps over a wide range and, then, is achieved exactly.

It has nothing to do with any Gaussian distribution (is distribution-free), principal components analysis, singular value decomposition, etc.

<comment><USER3> But it doesn't come with an open source implementation.

<comment><USER2> How to implement it efficiently is an issue!

If you can figure it out, publish it!

Else when I get time, I will!

</comment></comment></comment><comment><USER4> There's also Symbolic Aggregate ApproXimation (SAX) techniques which are very fast and support indexing algorithms.</comment>


64-bit Firefox discontinued on Windows - <AUTHOR> https://groups.google.com/forum/#!topic/mozilla.dev.planning/EmXonELGjVM/discussion

<comment><USER2> As mentioned in the bug and other locations, Firefox's x64 builds are pre- release nightlies only and not anywhere near ready for primetime. They still get a lot of bug reports that are x64 only and don't have resources dedicated to it because Firefox OS and Metro mode have higher priorities.

For folks in the bug saying that this will make them somehow abandon Firefox, if 64-bit is really that important to them, they'll have to use Internet Explorer only and deal with many popular plugins not working (Adobe Reader, Quicktime, etc).

Opera has an experimental Win64 build from February that is now out of date with known security issues. No further progress has been made or release schedule announced.

Chrome, Chromium and Iron are 32-bit only and have no 64-bit builds, not even pre-alpha experimental ones.

Apple has abandoned Safari for Windows entirely.

So, as far as 64-bit browsers on Windows... you've got IE and that's it.

UPDATE: As correctly pointed out below, there is a snapshot (alpha, incomplete, unstable) build of current Opera for Win x64. Apologies on the incomplete information in this post originally.

<comment><USER3> Your information about Opera is incorrect. The current release (12.11) has a x64 build (<http://snapshot.opera.com/12.11-1661_windows.html>).

 _Why the downvote? The link takes you to the download for the 64-bit Windows version that was just released_

<comment><USER2> I stand corrected, I was basing it on the out of process plugins page that they used to keep updated: [http://dev.opera.com/articles/view/64-bit-opera- and-out-of-p...](http://dev.opera.com/articles/view/64-bit-opera-and-out-of- process-plug-ins/)

Opera does have a Snapshot Win x64 build available which they describe as "Cutting edge, alpha quality, incomplete, and often contain critical bugs". This does sound a lot like the now-discontinued Firefox Win x64 nightlies (aka nowhere near stable).

(PS - You get an upvote from me. Not sure why someone downvoted you.)

<comment><USER4> Download button on main page of www.opera.com provides x64 version for me if I use browser with Win64 and x64 in user agent

[http://www.opera.com/download/get.pl?id=35259&thanks=tru...](http://www.opera.com/download/get.pl?id=35259&thanks=true&sub=true)

It is not experimental.

</comment></comment></comment></comment><comment><AUTHOR> Following a curiously short discussion, and despite 50% of Nightly testers on windows using the 64-bit builds[1] and a Windows user demonstrating firefox using 10GB of memory[2] (above the address space limit of 32-bit), the 64-bit nightly builds of Firefox on Windows are to be discontinued.

_______________________________

1\. <https://bugzilla.mozilla.org/show_bug.cgi?id=814009>

2\. <http://archive.installgentoo.net/g/thread/29261499>

3\. [https://groups.google.com/forum/#!topic/mozilla.dev.apps.fir...](https://groups.google.com/forum/#!topic/mozilla.dev.apps.firefox/jpX_z5zieD4) \- Full discussion thread

<comment><USER5> In case it's not obvious: [2] links to a chan style discussion board, with chan style culture. The first thing I read (because it's in big red letters) was "I WANT TO REMIND YOU THAT CP IS NOT TOLERATED AND MUST BE REPORTED".

<comment><AUTHOR> Sorry, possibly could have made that more clear (it's also not affiliated with Gentoo). In defense of 4chan, the exact same rule applies to HN (the law applies to everyone), every large website has trouble with spam, and there's nothing offensive there outside of mild profanity and teenagerism.

It's otherwise a perfectly ordinary technical discussion thread from a board that has a large number of firefox users and where Nightly is strongly encouraged amongst PC enthusiasts.

<comment><USER5> Yes, I agree. I was perhaps a bit sniffy. Often great discussion can be found on those style boards.

</comment></comment></comment></comment><comment><USER6> This decision makes no sense.

I figure that, sometime in the next 10 years, 32-bit OS'es will go the way of 16-bit OS'es. The time to iron out the bugs in the 64-bit version is _now_ , while it's only used by diehard techies who understand the necessity of switching to 64-bit.

If we wait until the unwashed masses are forced to switch by ever-advancing technology, they'll jump ship for browsers that have been preparing for years.

Also, the fact that the link has exactly one post in between the proposal and the switch tells me that nobody noticed it, and more effort should have been made to get community review, buy-in, sign-offs. There should have been _lots_ of commentary and input on such a fundamental feature as 64-bit support in such a high-profile open-source project.

<comment><USER7> To be fair, as others have mentioned Chrome doesn't even have a _pre-Alpha_ 64-bit version, and a number of plugins don't work with 64-bit browsers. Sometimes you have to pick your battles, it's not like Mozilla has infinite resources.

<comment><USER8> I'm one of the leads for the 64-bit Chrome on Windows work, and it is very much underway. I can't commit to a timeline, but we are attacking this pretty aggressively right now because it's a nice win on both the security and performance fronts. I'm a bit shocked to see Firefox moving in the opposite direction.

<comment><USER9> Are the 64-bit challenges on Windows much different than OS X or Linux? Chrome for OS X is also 32-bit, but Firefox is 64-bit.

<comment><USER10> Some differences include the need for JITs to generate proper unwind tables for SEH to work properly.

<comment><USER11> As well as a different calling convention.

</comment></comment></comment></comment></comment></comment><comment><USER12> The headline is completely wrong and somehow links to something that isn't the actual discussion, which is here: [https://groups.google.com/forum/#!topic/mozilla.dev.apps.fir...](https://groups.google.com/forum/#!topic/mozilla.dev.apps.firefox/jpX_z5zieD4)

Here's further explanation from the opening poster of that thread:

 _For the purposes of this thread, it is already a done decision that we aren't going to ship 64-bit Windows Firefox builds in the first half of 2013, and probably not at all in 2013. In the meantime, we aren't going to fix crashes or plugin bugs that only affect 64-bit builds. Those decisions have already been made. The only question to decide here is whether the existing 64-bit Windows nightlies provide any value to the project._

They're not discontinuing 64-bit Firefox on Windows; they haven't even released it yet. They do intend to release it, but probably not until 2014.

<comment><AUTHOR> It's been mentioned already - the submission links just to the announcement. I understand and sympathise with all the technical reasons behind the decision. But i still consider it a serious regression on Mozilla's behalf, and it's a major disruption for every single user who used this configuration.

I'm happy for a moderator to change the post title if it's too inflammatory, "Discontinued" was perhaps too strong a word. How about "64-bit Firefox no longer available for Windows"?

</comment></comment><comment><USER13> Terrible decisionmaking on Mozilla's part. Can you even _buy_ a 32-bit Windows PC anymore?

Those developers who are asserting that there are no advantages to a 64-bit executable besides RAM addressability are simply wrong. Any nontrivial MSVC C/C++ application will gain about 5-10% performance when recompiled to target x64. Why, I don't know, but that's what happens in my experience. It could be that having eight additional 64-bit registers available to the compiler overcomes the L1$ penalty associated with larger pointers.

Point being, 64-bit executables are the current best practice in Windows programming, beyond any possible debate. This is just yet another move up the shark-fin curve on Mozilla's part.

</comment><comment><USER5> It seems that the only people who _need_ 64 bit browsers are those who have very many tabs open.

I don't understand that use case. I don't understand how someone can work with 500 tabs open. Why do you run a browser with very many tabs open?

Or do you need 64 bit for some other reason?

EDIT for the silent downvoters: I'm not criticising people who have very many tabs open. Nor am I saying that's the only reason to have 64 bit browser.

<comment><USER14> Some people (like me) have stopped using bookmarks and simply leave open interesting pages.

I have ~20 browser windows open, each window is a virtual workplace. One is political news, one is tech news (featuring hacker news, the Register, slashdot, appleinsider...) one is Java SE API tabs, one is Clojure, one is imageboards.

While 500 tabs is a bit much, I can easily get to 200 without getting lost. It is simply a way to organize my stuff. Had one window with several tabs open for Scala, then found that Scala is not for me. Closed that window and it is all gone. No need to fiddle with bookmarks.

That said, the missing 64bit support will surely not make me leave Firefox. After all, it will surely come back over time.

<comment><USER15> You might like a tree-tabs plugin of some sort. Makes the tab bar run vertically along one size and tabs open into a collapsible tree structure; I find it very nice for handling hundreds of tabs.

</comment></comment></comment><comment><USER16> Could someone enlighten me why 64 bit seems to be so hard to do on Windows as compared to other platforms?

<comment><USER13> It's not, at least on MSVC, unless you have a lot of inline asm in your C/C++ codebase. You change a couple of -D flags on the compiler and linker command lines and build with the 64-bit compiler. A few Win32 calls and data types will need to be changed. If you're in the habit of casting pointers to ints or vice versa, you'll need to change those ints to size_t or equivalent types, as you should have been doing all along.

Few/no Windows developers should be treating their 32-bit builds as their primary target at this point, unless (as in Mozilla's case) they need to interface with a lot of legacy 32-bit plugins. The correct course of action for Mozilla would be to pressure the plugin developers, though, rather than to put the horse in front of the cart as they're doing.

They could have made the same call in the Windows 95 days, when 16-bit code was still viable. It would have been silly then, and it's silly now.

<comment><USER14> >rather than to put the horse in front of the cart as they're doing As a non- native speaker, I am confused. Over here, we put the horse in front of the cart back when we still used carts and horses. Makes more sense to me.

<comment><USER17> The expression is "to put the cart before the horse", i.e. do things in the wrong order.

</comment></comment></comment></comment><comment> T-Winsnes There is always waterfox for 64bit <http://www.waterfoxproject.org/>

<comment><USER18> I used Waterfox for about 6months. It was perfect, until I found out that 32bit Firefox is faster in the benchmarks.

64bit applications are not always better. It actually can waste resources in some applications. My IM and Text editor are 32bit and there is no reason for them to be 64bit.

<comment> T-Winsnes I agree, if you're not touching the memory limits of 32bit, there is no reason to do 64bit. Because 64bit applications have to pass 64bit addresses to read from memory it is slower than 32bit which only have to pass 32bits of data (simplified but true).

</comment></comment></comment><comment><USER19> This is going to sound crazy, but I was running 64bit nightly (on windows 8) and didnt have a single problem until I read this article... Immediately after following some of the links to the discussions on google groups, firefox crashed twice, and then also prompted me to update again...

Anyone know how to tell if if the version of firefox has been force-updated to 32bit (the about dialog does not seem to indicate which platform I am using).

Also, I don't have any plugins installed. The only plugin I used before I upgraded to windows 8 was flash, and now that HTML5 video is pretty main- stream, and WebGL is on its way, I don't see myself ever installing flash plugin again...

<comment><USER20> You can type about:buildconfig in you address bar to see info about a particular Firefox build.

</comment></comment><comment><USER21> I was really looking forward to the 64-bit version but it never looked as if Mozilla was ever serious about it.

<comment><USER22> What was the advantage you saw in it?

From the brief discussion, it sounds like it had inferior performance to the 32 bit builds, and was buggier to boot.

<comment><USER21> Yeah, that was the problem. Downloading from the servers, I tended to choose the x64 version and it was never good. The x86 always have been better.

</comment></comment></comment><comment><USER23> [http://www.chromium.org/developers/design- documents/64-bit-s...](http://www.chromium.org/developers/design- documents/64-bit-support)</comment>


Recreation of Pokémon Red in Minecraft - <AUTHOR> http://www.minecraftforum.net/forums/mapping-and-modding/maps/2803888-pokemon-red-fully-recreated-without-mods <comment><USER2> Blue port coming out tomorrow?</comment>


XKCD-style charts with D3 - <AUTHOR> http://dan.iel.fm/xkcd/ <comment><USER2> If I'm honest, the most impressive thing about this is how much less concise this is than the mathematica version that came out earlier. I wonder if the difference is more a matter of the library quality or the syntax.

<comment><USER3> On the other hand, IMO this looks exactly like an XKCD style graph while all the others (including the mathematica) seemed a little off to me.

<comment><USER4> I'd say, a little bit too much jitter, especially in text. Some of the versions for Mathematica, et al. were a little bit closer, IMO.

<comment><USER5> The text is just a matter of font. The rendering of the graphs look exactly like the original, and that's the hard part.

Edit: as pointed out below, the algorithm was lifted from another version done in Python/Matplotlib by Jake Vanderplas: [http://jakevdp.github.com/blog/2012/10/07/xkcd-style- plots-i...](http://jakevdp.github.com/blog/2012/10/07/xkcd-style-plots-in- matplotlib/)

<comment><USER5> The edit window is now closed, but I realised that the font he uses is Humor Sans, which is based on Randal Munroe's handwriting (the author of XKCD).

[http://xkcdsucks.blogspot.com/2009/03/xkcdsucks-is-proud- to-...](http://xkcdsucks.blogspot.com/2009/03/xkcdsucks-is-proud-to-present- humor.html)

</comment></comment></comment></comment></comment><comment><USER6> It draws a nice sine wave <http://so.danwin.com/test/xkcd-d3/>

</comment><comment><USER7> For comparison a version in Python/Matplotlib is at [http://jakevdp.github.com/blog/2012/10/07/xkcd-style- plots-i...](http://jakevdp.github.com/blog/2012/10/07/xkcd-style-plots-in- matplotlib/)

<comment><USER8> If you look in the source (<http://bl.ocks.org/3914862>) about 4/5 of the way down, they basically copy the core logic from Jake's Matplotlib version.

</comment></comment><comment><USER9> Nicely presented! And bl.ocks.org is also very clean (never heard of it before).

I would say this is the nicest result I've seen compared to Python, Mathematica, MATLAB.

<comment><USER10> You might also like its Markdown soul brother, <http://gist.io/>

</comment></comment><comment><USER11> Well done! I actually was planning on tacking this one myself using svg filters but I've been too busy. I didn't see Mike Bostock's comment suggesting the custom line interpolator and wasn't aware of it -- d3 is gaining some cool new functionalities!

Thanks also for the great references. In spite of being a big proponent of d3, I somehow missed the "Toward Reusable Charts" piece Mike wrote earlier this year, which succeeds where I have struggled. I've been using the standard prototypal approach to creating reusable and easily configurable charts, which can be cumbersome for the caller. This functional approach with closures is so much cleaner and more reusable. It's the only way I'll make my d3 charts from now on!

</comment><comment><USER12> If you want to play around with the example, I've stuck it on jsfiddle: <http://jsfiddle.net/KndsL/2/>

</comment><comment><USER13> I still need to see a thorough rationalization for the use of this chart style.

Bonus points for using the Tufte 'lie factor' formula.

<comment><USER14> You want to covney that the graph is not based on measured numbers but only a rough sketch.

</comment></comment><comment><USER15> This thing looks amazing. I didn't want to fire up Mathematica to render these charts but I love D3. Thanks!

</comment><comment><USER16> Now if we could only get D3-style animation in XKCD...

</comment><comment><USER17> The graph is good, but I think I like the font more.

<comment><USER18> methinks: [http://xkcdsucks.blogspot.it/2009/03/xkcdsucks-is-proud- to-p...](http://xkcdsucks.blogspot.it/2009/03/xkcdsucks-is-proud-to-present- humor.html)

</comment></comment><comment><USER19> Can't you just use a tablet and DRAW the graph like it was hand-made?

I don't understand...

<comment><USER20> For the same reason no one hand-codes the HTML on each individual Hacker News thread?

</comment></comment><comment><USER21> Took be a bit to realise this wasn't a Diablo 3 reference.

</comment><comment><USER22> " // Compute the distance along the path using a map-reduce." lol

</comment><comment><USER23> Negative awesomeness?? Uh-oh!

</comment><comment><USER24> Okay, guys. We get it. Enough.</comment>


Microsoft has been talking about buying GitHub - <AUTHOR> https://www.businessinsider.de/2-billion-startup-github-could-be-for-sale-microsoft-2018-5 <comment><USER2> previously: [https://news.ycombinator.com/item?id=17208293](https://news.ycombinator.com/item?id=17208293)

</comment><comment><USER3> I don't have much knowledge behind me, but my gut feeling is that repositories require to be independent. Has there been any product Microsoft has taken over and kept the original goals as is?

Any company can take something and maintain it, and Microsoft has the money. But the motive never appears to be much more than a business to make money with. Perhaps I am still a bit bitter about Skype.

<comment><USER4> Your mistake was in thinking that Microsoft actually cared about Skype. The acquisition was subsidized/paid off by the NSA, which had been wanting Skype to be owned by an American company for a while:

[https://www.theregister.co.uk/2009/02/12/nsa_offers_billions...](https://www.theregister.co.uk/2009/02/12/nsa_offers_billions_for_skype_pwnage/)

Microsoft put Skype into the PRISM program _one month_ after announcing it was acquiring it:

May 2011: [https://www.wired.com/2011/05/microsoft-buys- skype-2/](https://www.wired.com/2011/05/microsoft-buys-skype-2/)

June 2011(second image): [https://www.theguardian.com/world/2013/jun/06/us- tech-giants...](https://www.theguardian.com/world/2013/jun/06/us-tech-giants- nsa-data)

In 2012: they replaced Skype's P2P architecture to make it easier to spy on (obviously they wouldn't _say that_ , just like Facebook never says it's building shadow profiles for advertising reasons: [https://arstechnica.com/information- technology/2012/05/skype...](https://arstechnica.com/information- technology/2012/05/skype-replaces-p2p-supernodes-with-linux-boxes-hosted-by- microsoft/)

More: [https://www.theverge.com/2013/7/11/4514938/nsa-could-pull- em...](https://www.theverge.com/2013/7/11/4514938/nsa-could-pull-email-or- video-calls-from-microsofts-servers-says-guardian)

<comment><USER3> Thank you for your comment.

</comment></comment></comment><comment><USER4> Good thing the exodus from GitHub is already well on its way. This would be the catalyst for many others to move away from it.</comment>


Help us test one-to-one voice and video conversations on Signal Desktop - <AUTHOR> https://signal.org/blog/desktop-calling-beta/ <comment><USER2> The Signal Beta desktop app takes up 350MB on Linux. (The new release, at least).

Really need to figure out how to install it with a system wide electron.

</comment><comment><USER3> Does anybody know if one can program a chatbot for the signalapp?

Ideally in Go or Rust would be nice

<comment><USER4> Maybe with signal-cli? (Java)

[https://github.com/AsamK/signal-cli](https://github.com/AsamK/signal-cli)

<comment><USER5> Which is created against Moxie's will, I might add.

<comment><USER4> Can you elaborate? It is built with a fork of a library written by the Signal team. This fork is not upstreamed because moxie does not like the code iirc, but afaik he did not come to the project and tell them to stop like he did for LibreSignal.

</comment></comment></comment></comment><comment><USER6> I've been waiting for desktop video calling for years! This is the first official news I've heard of it, I will definitely join the beta test.

</comment><comment><USER7> Very glad to see this feature coming to desktop!</comment>