New Capcom game permanently changes after playing, to eliminate used-game sales - <AUTHOR> http://dvice.com/archives/2011/06/capcom-tries-to.php?

<comment><USER2> Interesting way to annoy every gamer in the world, don't allow them to trade games!

This is going way over the line I think. What if you genuinely wanted to reset the game yourself and play it again? I hope other software companies don't plan on following.</comment>


MIT MediaLab Sourcemap: Platform for Open Supply Chains - <AUTHOR> http://www.sourcemap.org/beta/stage/

<comment><AUTHOR> FastCompany has an article on sourcemap -" Where's my iPod Made? SourceMap Has the Answer"

Link: [http://www.fastcompany.com/blog/kit- eaton/technomix/sourcema...](http://www.fastcompany.com/blog/kit- eaton/technomix/sourcemap-answers-wheres-my-ipod-made-eco- questions?1254757786)</comment>


The Things That Mathematics Cannot Explain - <AUTHOR> https://medium.com/however-mathematics/the-things-that-mathematics-cannot-explain-a9e5ab3ae96a <comment><USER2> Clickbait title which only refers to two psychological phenomenal in the introduction and then is just about the golden ratio and geometric constructions -- something explained in the language of mathematics.</comment>


The race to save Polesia, Europe's Amazon - <AUTHOR> https://www.theguardian.com/world/2020/mar/06/the-race-to-save-polesia-europes-secret-amazon-aoe <comment><USER3> To me this sound like a crappy piece of propaganda. This project is in the national interest of Poland, Belarus, and Ukraine. They would profit from this route, obviously. The underdeveloped region would get a nice boost. The project is also against national interests of so many other countries that profit from lack of such route, many in the EU, notoriously Russia, and many others.

The caption "colorfully painted log cabin" under a photo of a dissolving uninhabitable shack is priceless. Really makes me want to protect the region from evil humans.

</comment><comment><USER4> Wish the title had "Rainforest" because the current title makes it seem like Polesia is a european competitor to Bezo's Amazon that is struggling to survive.

Also, isn't calling Polesia, Europe's Amazon as silly as calling Thames, England's Nile? The amazon rainforest is almost the size of europe itself.

<comment><USER5> Took me a while to make sense out of the title. It's a confusing analogy, Amazon is river, Paliessie is mostly forests, bogs, with a number of rivers. I understand the biodiversity context, but even changing the title to spell Amazonas (it's a salad of meanings anyways) would make it less ambiguous, perhaps more exotic.

</comment></comment><comment><USER6> I highly recommend buying a kayak to kayak through one of the swamp areas in your region on a nice spring or summer day. Its really an experience for the soul! Even in a cooler/cold climate, the amount of noise from birds chirping really does make it seem like you're in the amazon. A total sensory experience worth having. You can get a kayak for $300.

<comment><USER7> And the noise from the bugs. The bugs and frogs in the south US are incredibly loud. Plus bugs are pretty dangerous, and on the water here you have snakes.

Idk I grew up next to the James river and it would take something incredible to make me go back there.

<comment><USER8> Humans are more dangerous and make the most noise, I'd gladly brave bugs and snakes to get away from them for a while.

</comment></comment></comment><comment><USER9> Nice to sea Polesie on hackernews, even if for such reasons. My grandparents lived there (in the Polish part near Włodawa), I spent every holidays in 90s and 00s swimming in these lakes and biking through these forests.

It's a very pretty region, great for tourism (the default is forest, there are clearings with lakes every few dozen kilometers, there's also some villages and farming land, but mostly it's one huge forest).

It's very flat, and the roads (except the one that connects Lublin to Włodawa and the country border) are almost always empty - so it's a paradise for biking.

The villages are very poor even for eastern Poland standards, most young people leave cause there's no jobs except for farming and some tourism in the summer but still not much. I'd say the median age is over 40 in the countryside or possibly more.

My grandfather was working for a local farming cooperative there during communism, and they tried to dry the swamps for agriculture reasons. They were also searching for coal (there's a coal mine in the region and there is a possibility for some more).

The end result was that in that particular part (near Stary Brus - Kołacze - Hańsk) it got much too dry, the ground water level dropped and it's almost a desert now - ground is mostly sand, only pine trees and a few kinds of grass grow there.

In the Polish part there is already an artificial lake (Wytyczno) and a channel between some rivers (Wieprz-Krzna), but nobody really uses it for transport. I don't think it makes much sense to build waterways there at the cost of nature.

\- there's no industry to speak of

\- the population is sparse and poor

\- the border between Poland and Belarus on the Bug river is the external border of the EU, it separates 2 opposing economic unions and blocks almost all the trade

\- the next part downstream (Mazury lake district) is also underdeveloped sparsely populated countryside with little money and lots of rare nature

If Poland, Ukraine and Belarus joined one economic union (preferably EU) - <USER2> could maybe work, but as is it's useless investment with lots of harmful side effects.

<comment><USER10> You mention it is great for tourism. I am intrigued. As a tourist, how would I best get around in this area (longer distances), if I would not be cycling? Rental car?

<comment><USER9> If you want to travel fast you need a car there, yes. Public transport only works well along the few main roads, outside of that it's like 2-3 buses a day or none at all.

In any case traveling fast kinda misses the point, the fun stuff is in between. If you don't want to bike you can rent a kayak and go down one of the rivers.

IMHO the best way is to get a tent and a bike, take a train to some city (Włodawa works), and bike for a week or two camping elsewhere each day. Best time is June - late enough that there's lots of cheap fresh fruits everywhere (you can buy them from farmers along the roads or just gather the wild fruits in the forests), but before the school ends so even the popular lakes are empty.

Also there's that [https://greenvelo.pl/en/map](https://greenvelo.pl/en/map) a bike-only road that goes for over 500 km through most of the tourist spots in the Polish parts of Polesie (and also later Warmia and Mazury). Less wild but still cool. Easy flat terrain starts north of Chełm and continues all the way to the Baltic sea,

BTW choosing a smiling scenic mask icon for museums wasn't the best choice on that map, especially when you have a museum of a german death camp there :/

<comment><USER11> I crosschecked that with [https://www.darksitefinder.com/maps/world.html#7/51.283/22.7...](https://www.darksitefinder.com/maps/world.html#7/51.283/22.775) so there should be some pretty good nightskies enjoyable with a large binocular, or even a 5 inch Maksutov. How do you remember the weather to be on average for the time (June) you suggested? Cloudy, hazy, or clear? With clear i mean, could you when you camped somewhere in the forest, the campfire out, your eyes used to the dark, see the milky way or some other faint smudges of nebula with the bare eye?

<comment><USER9> Yes you could see Milky Way pretty well on the moonless nights, even with naked eyes. The weather should be 20-35 C, usually partial cloud cover but no rain, sometimes no clouds at all, sometimes a quick thunderstorm, very rarely you'd get a whole day of rain.

<comment><USER11> That is good to know since this is so rare nowadays. Thank you. Will consider that for some possible travel in the future.

</comment></comment></comment></comment></comment></comment><comment><USER12> There is a project with similar aim: the Danube-Oder-Elbe canal. It would connect Black, Baltic and North Seas:

[http://www.d-o-l.cz/index.php/en/about-d-o-e- project/current...](http://www.d-o-l.cz/index.php/en/about-d-o-e- project/current-situation)

</comment><comment><USER13> What's the purpose to compare a waterway hundreds of km long and comprised of 5 rivers and various channels to the Panama and Suez channel? This is so misleading.

<comment><USER14> It's a shortcut just like Panama and Suez channel. It changes travel time from around few weeks to few days.

Panama channel allows you to not to go around America. Suez channel allows you to not to go around Africa. This shortcut allows you to not to go around Europe.

<comment><USER15> Yes, but most of the new route showed on those maps is existing rivers, so it's not comparable at all as presented.

</comment></comment></comment><comment><USER16> Is this region comparatively unspoilt because of the Chernobyl disaster? If so, that's a strange kind of irony.

<comment><USER17> No, it's because it is mostly swamps. Totally unsuitable for agriculture.

<comment><USER18> Agriculture is not the only thing humans do or settle for. Swamps are historically heavily inhabited by and sometimes even purposefully extended by humans specifically due to endemic biodiversity and ease of hunting and gathering. Also, sometimes because they offer fertile soils or refuge from other humans, and the waterways a strong source of orientation, food, and an artery for transport, trade and taxation. Examples off the top of my head: Bangladesh, Holland, Venice, Hanoi, Bangkok, Shanghai, Hangzhou, Angkor, Amazon, Sepik River of PNG...

<comment><USER19> Virtually all your examples are seaside marshes, not low-lying inland swamps. But your example of Angkor is a good example of a low-lying inland swampy area and, while for a period of history it was a productive, heavily populated area it then experienced a population crash which has extended through to the present day.

<comment><USER20> I'd add Tenochtitlan which is Mexico now. It was a swamp surrounded by mountains 500 years ago. Densely populated.

</comment></comment></comment></comment></comment><comment><USER21> Is it telling that I assumed this article was about a struggling European ecommerce conglomerate?

</comment><comment><USER22> The article does feel a bit like propaganda. Environmental groups are notorious in the region for being used as political instruments to halt all manner of construction. When a new road is to be built, you'll have environmental agitators coming out of the woodwork claiming that the road would cross a newly discovered frog habitat and that it would lead to the deaths of many frogs trying to cross the road. Never mind that there are ways to manage even those situations.

The important thing is to weigh the human benefits against the overall negative impacts of a project. Environmental extremism generally smacks of foreign interests trying to keep the status quo and the region from flourishing economically and thus competing with them, or at least making things economically inconvenient.

There is quite a history of such self-serving foreign meddling that involves patronizing appeals to all manner of fashionable sentiment, hence my skepticism.

</comment><comment><USER23> It seems like the project would be very useful. I wonder what the environmental benefits would be of reducing the distance ships need to travel from AROUND Europe to through the E40 route? Might it outweigh whatever environmental costs there are?

<comment><USER24> Not quite if you consider geopolitical landscape.

</comment></comment><comment><USER17> It's strange but when I think about Poles'e I think about 'Come and See' movie and the swamp scene [https://youtu.be/Y60mnxzSD1Y?t=2992](https://youtu.be/Y60mnxzSD1Y?t=2992)</comment>


Reddit AMA: We are the creators of the Julia programming language - <AUTHOR> https://www.reddit.com/r/IAmA/comments/hyva5n/we_are_the_creators_of_the_julia_programming/ <comment><USER2> I've recently been using Julia to analyze around 180gb of CSV's and it's been really nice. The problem with Python (besides the sucky language) is that it's so slow you have to work pretty hard to make sure all your operations are calling into some C lib.

Trying to call a python function over 5m pandas rows? Forget about it, never going to happen. Anything that requires an if statement, never going to happen. Often you can express what you're trying to do in terms of vectorized numpy/pandas operations, but it takes some work.

Julia simply doesn't have this problem and it's a game changer. By and large, everything is reasonably fast and the compiler does a good job. Julia has made scientific computing so much more accessible than Python ever could. Anyone can publish a library and even if the code is rough, it'll usually be fast enough to be useful. With Python, unless you're a professional software engineer and willing to write in C, forget about sharing a new model or numerical technique with anyone else.

I think the lack of classes and strong support for function polymorphism has made Julia code pretty easy to write, easy to read, and very powerful. In Python each library is its own little world and you can't really mix and match them in a meaningful way. In Julia you can leverage multiple libraries in new and unexpected ways.

Perhaps the best part of Julia is the broadcasting operator (.) that allows any function to be easily mapped onto a collection. It's almost like using an array language like k or j! Also, macros.

And with the seamless Python interop, Julia should be your goto pick for any scientific computing project. It's even starting to replace C and Fortran, which I think is pretty exciting. The future couldn't be brighter for Julia!</comment>


80 FFTs Per Second To Detect Whistles and Switch On Lights - <AUTHOR> http://www.limpkin.fr/index.php?post/2013/04/26/The-whistled%3A-how-to-remake-a-dozen-years-old-project-the-right-way

<comment><USER2> It'd be fun to put this beside a bird cage, and see if the bird could learn to control its environment. If so, I imagine quite a number of doting bird owners would be prepared to pay money to give their pet "the gift of independence".

<comment><USER3> That is a frankly brilliant idea which I never would have thought of.

Probably very doable with smart birds like (but not limited to so, don't hate me) parrots.

On the other hand, some of those bird species can be quite mischievous, be very careful before giving it control over your house.

</comment></comment><comment><USER4> The ARM Cortex M4 is quite an amazing core, actually. The DSP instruction set is beautiful in its simplicity, and the best part is the table with clock cycles per instruction ("1" in all rows).

On a related note, I wonder — the OP used a Freescale Kinetis microcontroller, those begin at around $2.50 at Farnell. Meanwhile, Texas Instruments still hasn't began distributing their Tiva (formerly Stellaris) chips, with the M4F core. I wonder when they'll finally get around to it, and whether the pricing will be competitive with Kinetis.

</comment><comment><USER5> That's a really cool project.

On one hand, I feel like it's wasteful to do stuff like this digitally, with FFTs, rather than with analog filters. That's a whole lot of transistors to do something that could be done with vastly fewer with an analog approach. On the other hand, the digital approach is more flexible, almost certainly lower power, and not much more expensive. The rise of tiny chips that are great at DSP, partially driven by mobile tech, is really exciting. It'll be great to see what it's going to lead to in future.

<comment><USER6> Sadly, analog design seems to be becoming a lost art.

<comment><USER7> Agree.

As a hardware design engineer, I can't say I miss it too much though.

Run the signal right into a DSP and call it a day.

Doesn't work right? Must be a firmware problem.

</comment></comment></comment><comment><USER8> This feels like The Clapper of the 21st century. That product is still bought and in the pop culture. Good luck to the developer. <http://www.youtube.com/watch?v=cfgN5tUgjb8>

</comment><comment><USER9> Does anyone know how much power this would use while waiting for commands, considering it really needs to be running 24/7?

<comment><USER7> It has a plug for a wallbrick, and I don't think the author optimized his hardware or code for ultra-low power - ie small batteries.

(Running 80 FFT's every second isn't going to be great on batteries.)

The Kinetis K10 he used WOULD BE an excellent processor choice for an ultra- low power design, though.

You could have a low-power comparator monitor for noises and only wake the processor up when it heard something interesting.

With some simple tricks like that, you could probably run for months on a couple AA batteries.

<comment><USER10> > Running 80 FFT's every second isn't going to be great on batteries.

Assume for the moment that floating-point were used instead of fixed-point: A 2048-element real-to-real FFT requires a bit less than 40Kflop, or 3.2Mflop/sec to get 80FFT/sec. Modern hardware is capable of > 1Gflop/joule, so the raw compute of 3.2Mflop/sec actually takes something on the order of 3.2mw.

Of course, the computation is being done in q15 instead of float, which (in theory) should require something on the order of 1/2 the energy. On the other hand, the processor can't _just_ do FFTs. It's spending energy going in and out of lower-power states, running other code, etc, etc, and I don't have any data for the energy usage of the M4 specifically, to say nothing of the other components on the board.

In principle though, the energy actually consumed by performing the FFTs should be pretty minimal; most of it will be going to everything else unless the hardware and software are both very carefully designed for efficiency.

</comment></comment></comment><comment><USER11> Eight paragraph of this article, [http://www.washingtonpost.com/wp- dyn/content/article/2007/02...](http://www.washingtonpost.com/wp- dyn/content/article/2007/02/16/AR2007021602102.html) sounds like a forerunner

</comment><comment><USER12> Reminds me of an IBM DeveloperWorks (IIRC) script to control your computer by whistling (I wrote about it in my blog many years ago and used it for a while, it was fun :)

</comment><comment><USER13> Great execution on every level. Incredible work.

</comment><comment><USER14> What courses/topics does one need to learn to be able to create this kind of hardware themselves?

<comment><USER15> Depends on if you mean off the shelf chips or not. If not then I would expect a second or third year EE student to be able to pull it off. It is way to simple for an EE undergrad senior project.

If you mean design and fabricate the chips then that is a bit more.

<comment><USER16> The main thing I struggle with is the confidence to actually manufacture something; I can sketch a schematic, but I've never produced a PCB.

<comment><USER17> With companies like OSH Park[1], the cost barrier to getting a bare board professionally manufactured is so low that you ought to just try it sometime. If you already sketch schematics, go through a basic Eagle tutorial or two, then try laying out a simple board based on your schematic. If you keep it small, you'll only be out $15 or so!

[1] <http://oshpark.com>

<comment><USER16> Do they deliver internationally?

</comment></comment></comment></comment></comment><comment><USER18> i can't whistle! :'[

</comment><comment><USER19> You can also whistle to your android i.e. to wake up a Siri like assistant: [https://play.google.com/store/apps/details?id=com.pannous.vo...](https://play.google.com/store/apps/details?id=com.pannous.voice.actions.free)</comment>


New case studies about Google's use of Go - <AUTHOR> https://opensource.googleblog.com/2020/08/new-case-studies-about-googles-use-of-go.html <comment><USER2> I played around with Go a while ago, and while I appreciated the approach to concurrency, I was really put off by both the boilerplate + how primitive the type system felt. Not having map and filter due to lack of generics meant writing for loops all over the place just to filter and modify arrays. Appending elements to slices felt clumsy. The type system didn't feel expressive, and I often found myself having to resort to the empty interface escape hatch.

Compare this with Typescript (or Swift, or Rust), which have type systems capable of modeling nearly any problem domain. Go doesn't have algebraic data types (sum types) which are incredibly useful in my experience (Swift/Rust enums, Typescript discriminated unions). I'm honestly not sure why I would use Go over TS, unless performance was my primary consideration. It feels like Go was designing to be as inoffensive as possible to a legion of new-grad Google programmers, and you sacrifice most modern language niceties for it. Please convince me I'm wrong, because I really wanted to like Go.

<comment><USER3> TS and Golang aren't comparable. I use both and I've never had a case where I needed to decide between the two. Golang is a high performance, modern language without the low-level or legacy headaches of comparably performant languages. Golang was written for an era where network communication and concurrency are commonly necessities and those use cases feel very natural. Typescript is JS (a conversation ending advantage in many cases) and so the concurrency model is amazing in some cases (e.g. when most of the work is async stuff like API calls) and pretty terrible in others (parallelizable computational work).

Golang was designed for getting shit done. If you are a big believer in OOP, then Golang feels underfeatured. But if you don't really care about OOP and you just want some of the advantages like basic inheritance, type safety, etc, Golang has everything you need to write performant, effective code quickly (there are use cases where that isn't true I'm sure, but, for me, Go's type system has been helpful and not a hinderance). There's nothing wrong with using the empty interface when you need to (any more than using any in TS, which you have to do in many applications).

I've found that Golang codebases are easy to pick up. I think everyone has some part of the Go style that they think is ugly (I 100% find append ugly), but for me this has mostly been inconsequential stuff - it has never gotten in the way of me solving business problems with high performance code. The tooling is the same (at least if you are using modules). It does its job well enough and then gets out of the way while you create business value.

I don't know your use case so this might not be relevant, but sometimes people will overuse for loops and slices when they might find it easier in Golang to pass around channels and use the pipeline pattern[1].

For me, Golang is like Python but with static typing and high performance. Fast to implement, easy to read, and focused on getting code out the door.

[1] [https://blog.golang.org/pipelines](https://blog.golang.org/pipelines)

<comment><USER4> I always cringe when people proclaim that they need to "get shit done". It often pays to be mindful of _what_ is getting done as a result.

<comment><USER5> I think some people feel productive when they write out a big loop, but to me it's wasted effort. I want to write

      col.filter(_.isReady).map(convertToX).any(_.color == BLUE)

and generate whatever fused loops make that work. I don't want to write and review loop boilerplate by hand for the same reason that I don't want to customize the stack frame layout when I call a function.

<comment><USER3> I've never found it much more painful to write:

      for i, c in range col {
        if c.isReady && convertToX(c).color == "BLUE":
          return True
      }

(which is not to say I don't miss the map/filter syntax - although I don't miss the bugs related to lazy execution in stuff like LINQ or Spark)

<comment><USER5> That's actually pretty good. Most people would use three more lines to create a temporary and break after setting it, and three to nine more depending on how many steps require idiomatic Go error handling.

<comment><USER6> Would most people actually do that? That example seems like pretty idiomatic Go. I imagine junior developers would write that.

<comment><USER5> I would typically expect

      anyBlue := false
      for _, c in range col {
              ready, err := c.IsReady()
              if err != nil {
                      return nil, fmt.Errorf("isReady failed: %v", err)
              }
              if !ready {
                      continue
              }
              x, err := ConvertToX(c)
              if err != nil {
                      return nil, fmt.Errorf("convertToX failed: %v", err)
              }
              color, err := x.GetColor()
              if err != nil {
                      return nil, fmt.Errorf("getColor failed: %v", err)
              }
              if color == BLUE {
                      anyBlue = true
                      break
              }
      }

which badly obscures what's going on but demands no cleverness at all (except that some might forget the "break" and still get the right answer).

<comment><USER7> If IsReady, ConvertToX, and GetColor can return errors then this isn't that far off. But then you're not making an apples to apples comparison. You would have to extend your functional example so that it also handles errors. Unless it already does, and I am missing something.

<comment><USER5> What I wrote should be pretty close to valid Scala, which handles exceptions. I can imagine wanting to skip an isReady failure, which looks like

      col.filter(c => Try(c.isReady).getOrElse(false))
      .map(convertToX).any(_.color == BLUE)

<comment><USER7> I see. Then in part the comparison is showing off exception handling, not FP.

Rust is a good example of functional lang without exceptions (panics aside).

In Rust there are many cases where I could use FP but opt not to because it can make error handling more awkward. For example to collect the result of a map operation to a vector, and if there is an error along the way you want to abort the entire operation. In functional this means collecting to a Result<Vec<T>>. Not sure if I'm just tired today but I can think of how to do it in 5 seconds with a loop. I suspect functional solution would be uglier.

<comment><USER8> Rust's collect will do this for you. It's even an example in the documentation.

<comment><USER7> Thanks! I learned something new.:)

[https://doc.rust-lang.org/stable/rust-by- example/error/iter_...](https://doc.rust-lang.org/stable/rust-by- example/error/iter_result.html#fail-the-entire-operation-with-collect)

This is easy to miss if you are mainly reading reference docs. I probably read the getting started guide at a time before there was a section on it.

My other comment in this thread comes to mind [https://news.ycombinator.com/item?id=24300057](https://news.ycombinator.com/item?id=24300057)

<comment><USER8> I was thinking of the final example in [https://doc.rust- lang.org/stable/std/iter/trait.Iterator.htm...](https://doc.rust- lang.org/stable/std/iter/trait.Iterator.html#examples-25) , glad we have it in both places!

I don't personally really agree with what you've said, but that's fine. Different people perceive things differently.

<comment><USER7> No problems. There are enough dimensions involved in what makes a language good that Im pretty sure I could rationalize why any language is better than another, measured along only one of them.

Robustness. Speed. Simplicity. Easiness. Conciseness. Writability. Readability.

Hard to tell which are independent vs correlated, let alone how they factor into productivity. And productivity is also a function of the kind of problem you work on.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> I absolutely love using Go. The logical flows for my programs are always so clean and easy to follow thanks to the language. Contrast to C++ in which spaghetti and magic is basically idiomatic. The only downside I can think of is that error/crash recovery is pretty tricky, but it's only really a concern if you're careless with your goroutines.

Whenever I work in Go, I have a lot more confidence in the efficiency of resource usage, and sense of stability that I just don't get from something like Node.js, where I'm constantly wondering... are any of these 1000s of dependencies going to suddenly do something weird like hijack my .env file? How is my program managing memory and overhead when it needs to interface with the kernel via a C++ wrapper? Are these machine resources even being capitalized on by Node.js properly? etc.

I've heard a lot of great things about Rust, and I've touched on it a bit, but Go is just awesome for its abstractions, ease-of-use, and of course insanely fast compile times.

<comment><USER10> I have a love/hate relationship with Rust. I love the type system as enthusiast, but as project lead I can't justify relying on so many (partly immature) third party dependencies for business critical stuff.

<comment><USER11> I had similar feelings when I was hired to write in Go about 3 years ago. Coming from Java where everything (including the kitchen sink) was available for import, it took some time to re-adjust my mindset of having to seek out libraries and thoroughly vet them.

After a while, I kinda started to dig having to do it. You end up having a more personal connection with the dependencies you pick which makes it easier to contribute back upstream.

The one downside of being around in this stage of a language's ecosystem development is you can potentially get some pretty undesirable fragmentation.

A good example that comes to mind is one of the original Go library to interact with Zookeeper. There's like 6 maintained forks of that library due to the original author bowing out of maintaining it.

</comment></comment></comment><comment><USER12> While I do trust Rob Pike to not let personal biases sway his writing, I do have to wonder if the case studies weren't selecting because they were positive. So I'm curious: does anyone have a case study where using Go was a disaster?

Every language has things it's good at, and things it's bad at. Where does Go not do well?

<comment><USER13> Let me just say that I've been at Google for almost 9 years, and have recently started looking for work elsewhere and it seems that Go is far more popular outside of Google than inside it. Which disappoints me because my experiences with the language internally have biased me such that I have no desire to go use it elsewhere.

I've said this before, but I think it's a bit dishonest to sell this as a "Google language." It is an accepted language here, along with Python, Java, JS/TS, Dart, and C++. But it is by no means dominant.

To put it another way, it seems if the goal is to avoid working in Go I am better off staying @ Google than leaving. And that's weird, and maybe revealing.

<comment><USER14> My current and last positions both involve(d) writing (mostly) Go code, so it's definitely possible to find Go jobs within Google.

<comment><USER15> OP wants to _avoid_ using golang, not to find a job where he can use it.

</comment></comment></comment></comment><comment><USER16> You can see more very exciting case studies of companies using Go here, didn't know until now Twitch or Facebook (and even Target!) uses Go a lot.

[https://go.dev/solutions/#case-studies](https://go.dev/solutions/#case- studies)

<comment><USER17> All backend systems at save a few minor exceptions are written in Go :)

<comment><USER18> This isn't true at all. Google still runs a lot of backend on Java, for example.

<comment><USER19> And their backends in C++ dwarf Java and Go backends combined.

<comment><USER5> In 2015 they were saying that the core of web search (and the large majority of Borg cores) was C++ but the rest of google3 was a 50:50 mix of C++ and Java with a smattering of Python. Nobody I knew was looking seriously at Go.

<comment><USER19> I think weighting it by lines of code is pretty misleading. You have to write a zillion lines to make "hello, world!" work in your new language inside their full-custom production environment. I prefer to think of language share in terms of resources committed.

</comment></comment></comment></comment></comment></comment><comment><USER20> Go is super productive. My day-to-day responsibilities include development in .NET and Go. A full day working in Go is like a having a pleasant day off. On the other hand, .NET is so cumbersome, complex and verbose (I've been using it since its inception), that I'd rather abandon it for good if possible.

<comment><USER21> .NET is not a language. Are you using C#, VB.NET or F#?

<comment><USER20> You're absolutely right. In majority of cases, when people say .NET, they mean .NET & C#. VB.NET or F# are pretty much always explicitly mentioned as they're not the default choice for .NET development.

</comment></comment></comment><comment><USER22> Anecdote of one here, but I think Go's best use case is building monoliths (queue the irony of it being used for a lot of microservice work). The way the language works and the readability it provides really removes a lot of the arguments for breaking apart a monolith, and the performance guarantees it has around parallelism and goroutines make combining your async task processing into your main binary trivial. I'd go so far as to say I don't think anything beats a Go monolith in terms of developer velocity, code quality, and performance.

<comment><USER23> That's an interesting take. Do you have personal experience that you could share more detail on? Or even more public projects

<comment><USER22> I would say the most prolific one is Kubernetes. Sure it has some parts broken out (controller manager, scheduler), but the main API server is a pretty big Go monolith.

At a far smaller scale, the SaaS product my company built, Domestica ([https://about.domestica.app](https://about.domestica.app)), is a Go monolith. It has an integrated job/cron queue using PostgreSQL included as well, all within the same binary. This makes it easy for us to distribute it as a Docker image to our users who want a private instance ([https://hub.docker.com/r/candiddev/domestica](https://hub.docker.com/r/candiddev/domestica)).

</comment></comment></comment><comment><USER24> Efficient user-space threads (go routines) and the way go lends itself to the reactor pattern is exactly why is has been the language of choice for the company I work for. We use it to power all of our distributed microservices which process IoT packets from a stream. The performance and ease-of-use is heads and shoulders above everything else we tried before (mainly, Java with Kafka/Storm).

</comment><comment><USER25> > Looking back from 2020, Go has succeeded in both ways: it is widely used > both inside and outside Google, _and its approaches to network concurrency > and software engineering have had a noticeable effect on other languages and > their tools._

Don't know much about go myself, but I'm interested in examples of this.

<comment><USER26> Arguably opinionated formatters like prettier and black are a response to gofmt.

<comment><USER27> Definitely but what about the impact of go's approach to network concurrency?

<comment><USER9> For one example, I believe Crystal is inspired by Go in this respect. [https://crystal-lang.org/](https://crystal-lang.org/)

</comment></comment></comment></comment><comment><USER10> I came to Go because some Kotlin CLI tools used too much memory and were clumsy to deploy.

I'm staying for the standard lib, tooling and stability.

Nothing gets out of the way better than Go.

<comment><USER28> Well, except for maybe a language that doesn't force you to remove (temporarily) unused imports and change your variable name to an underscore if you simply comment out the only section of code that used to refer to it, making your variable freshly un-used. I find there are some highly opinionated, unconfigurable aspects of the language that pretty much only waste time. They actually get in my way constantly.

</comment></comment><comment><USER29> async/await colored functions is a disaster: [https://journal.stuffwithstuff.com/2015/02/01/what-color- is-...](https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your- function/) And so many languages and ecosystems have fallen to this. Even C#, which is surprising since I expected them to know better. There was so much hype about async/await (nodejs was a big factor for this hype), that many languages adopted this without fully considering the long term maintenance nightmare it will create.

Because of this, I'm mostly interested in only Go and Java. Go obviously avoids the async/await trap with its core feature, goroutines. Java managed to resist this trap and has Project Loom coming which will give it the same feature as goroutines, but in a backwards compatible way.

Go is criticized for not having generics, but I appreciate the slower and more thoughtful way both languages add new features. Javascript, C#, etc. these languages seem to add whatever FOMO driven new hyped language feature is popular at the moment. Many complain about Go taking so long to add generics, just like many complained about lambdas in Java. But evolving a language should not be done quickly and recklessly.

My focus is still on Java, but I'm occasionally looking at Go to see what they're doing. It's interesting watching these two languages become more like each other (generics in Go and fibers in Java).

<comment><USER30> Async/await solves a different problem than green threads. Async/await works well when you need to manage scheduling of a single thread (very common in UI or other cross runtime tasks). Implicit green threads are nice if all you care about is total throughput across all threads. Its not great for keeping a single thread responsive.

<comment><USER31> Async / await is just an abstraction over threads. It doesn't dictate how many threads are used.

<comment><USER30> I'm not sure what your point is exactly but I would disagree with the presented assertions none the less.

In C# async/await is essentially sugar around callbacks, which isn't really related to threads, per se. However, the language has the Task Parallel Library, and a Task promise type that has a lot of methods around scheduling and thread targeting. Essentially the TPL does dictate how many threads are used and is, as far as language design is concerned, inextricable from async/await.

<comment><USER31> My reply was in response to "Async/await works well when you need to manage scheduling of a single thread" My point being that it isn't limited to cases where you only have a single thread.

<comment><USER30> Ah, agreed. That's a case where it does well, not the only case.

</comment></comment></comment></comment></comment></comment><comment><USER32> > Go also powered Google's development and launch of Kubernetes in 2014.

Wasn't k8s written originally in Java and only ported to Go later on?

<comment><USER33> I think it's fair to say both statements are true:

> Kubernetes was built on ideas that had been proven out at Google over the > previous ten years with Borg. And Borg, itself, owed its existence to even > earlier efforts at Google and beyond.

> Concretely, Kubernetes started as some prototypes from Brendan Burns > combined with ongoing work from me and Craig McLuckie to better align the > internal Google experience with the Google Cloud experience. Brendan, Craig, > and I really wanted people to use this, so we made the case to build out > this prototype as an open source project that would bring the best ideas > from Borg out into the open.

> After we got the nod, it was time to actually build the system. We took > Brendan's prototype (in Java), rewrote it in Go, and built just enough to > get the core ideas across. By this time the team had grown to include Ville > Aikas, Tim Hockin, Brian Grant, Dawn Chen and Daniel Smith. Once we had > something working, someone had to sign up to clean things up to get it ready > for public launch. That ended up being me. Not knowing the significance at > the time, I created a new repo, moved things over, and checked it in. So > while I have the first public commit to the repo, there was work underway > well before that.

[https://kubernetes.io/blog/2018/06/06/4-years- of-k8s/](https://kubernetes.io/blog/2018/06/06/4-years-of-k8s/)

</comment></comment><comment> enahs-sf I tried very hard to bring go into my previous employers environment, but it was all for naught. They are too bought into the JavaScript stack. Case studies like this would have been super helpful in trying to make my claims.

<comment><USER33> It's funny, if you'd asked me almost a decade ago which language would compete with Go, I would not have answered "JavaScript"! Yet, these days I find that's the trade-off: build something "quick" in TypeScript that's easy to modify but perhaps a bit brittle and slow(er) to run in production, vs build something very considerate and optimized in Go but perhaps not something you can easily change without hiring folks specifically for the backend.

And then you've Java, which is now trying to be the "VM for every runtime" but is still best at Java itself, for now. I tried running JS-on-Java (graaljs) to improve the performance of JavaScript from "only twice as fast as Python" to "within the top 10 on TechEmpower" but found it had too many compromises to rely on it, it was just another runtime layer I would have to worry about.

I end up wondering if the solution really is to begin by prototyping efforts in slower-executing languages to start except where existing conditions and code ecosystems might allow for faster initial results in another language. (Kubernetes projects should likely use Go, etc.) Which is less about Go and more about the need to rewrite software later, I suppose.

Then again, these days the problems I end up spending (too much) time on are "which dependency should I use," or "should I rewrite the dependency," I rarely ask myself which language is "better" for a task because I end up having to use languages others are familiar with. Go is not yet universally one of those languages, but the more I see unfamiliar Go code in the wild, the more I feel it could be. One of its current strengths is that its simple syntax and maybe its repetitiveness also makes it quite easy to follow for newcomers.

<comment><USER34> I mean, it's hard to see Go as "very considerate and optimized" given the existence of modern, highly-efficient programming languages like Rust, D, perhaps Swift etc. It's obviously better optimized than JavaScript and its derivatives, or even Java/C#, but that's not saying much.

<comment><USER33> Rust doesn't have the stability yet that has been a bit of a double-edged sword for Go. And it's taken 5 years for Rust to get as far as it has. I'll be much more interested in using Rust in production when there's more of a "standard library" of options to start with. Right now it has the curse of being both unfamiliar to programmers and not having very many production-ready dependencies available in a larger ecosystem. It might be the "right choice" for the future, but if you don't already know you need Rust, I'm having trouble seeing how typical software can benefit today from Rust, etc., though I really do hope my answer changes over the next few years. :)

Swift is definitely something I'd like to explore more, but like Rust, it has few production-ready dependencies available. Kotlin or other Java derivatives on the other hand probably have too many -- if your code is written in Java, I've no idea if it will work great in Kubernetes or if it will expect OSGi or if it's a giant monolith. Which is to say, modern practices can make the JVM a surprisingly practical choice, but most software isn't really all that optimized -- slow and bloated legacy dependencies are both a problem in Java as in Node.js...

C# meanwhile can be efficient, but rarely is. And it has toolchain issues due to VS not being open source, and a very small ecosystem of dependencies, plus a history full of corporate rewrites of core functionality. It has a bright future, but its reliance on msbuild and Visual Studio limit it compared to Java. I'd like to suggest C++ but I've spent years learning it and find the complexity overwhelming in side projects. In practice, I think C++ is only appropriate for full-time projects with lots of engineers to validate correctness, etc. The exception I'd make is tiny C++ modules as glue code between languages, or to other existing C code.

<comment><USER35> Does C# rely on VS? MSBuild is separate from VS and you can use Rider (yay!) or VSCode instead of VS.

The ecosystem is definitely growing in the last 5 years too since open source has been embraced by MS and the community.

The major rewrite of .NET -> .NET Core and then now renaming it back to .NET again is good in that it's a much better framework now, bad in that it's turning out like Python 2 vs Python 3. Huge projects just can't upgrade, so old .NET Framework stuff is sticking around longer than it should.

<comment><USER33> Generally speaking, C# relies on either third-party implementations like [http://www.omnisharp.net](http://www.omnisharp.net) or Microsoft distributions, which on Windows is largely distributed via Visual Studio Downloads page, including the Tools for Visual Studio package: [https://visualstudio.microsoft.com/downloads/](https://visualstudio.microsoft.com/downloads/) Are there other releases of msbuild, for example? Yes: [https://github.com/dotnet/msbuild/releases](https://github.com/dotnet/msbuild/releases) But are they separate from releases of Visual Studio? No, as the release notes indicate. If you want to live on the bleeding edge of .NET development -- and I do recommend this -- you'll end up in the Preview channel of Visual Studio: [https://visualstudio.microsoft.com/vs/preview/](https://visualstudio.microsoft.com/vs/preview/) and if you want to use Visual Studio Code instead, welcome to OmniSharp or similar "mostly compatible" solutions. It's totally fine until it's not, and it's definitely not portable or open enough -- yet. I look forward to the day when Visual Studio is fully open source because they can include subscriptions on top or something. That'll be the day when VS and VS Code could begin to merge a bit, at least for development on Microsoft platforms. But that hasn't happened yet, and they're rebuilding Visual Studio in Eclipse on other platforms to better support cross-platform development the same way Rider supports other platforms for JetBrains IDEs. It's a stop-gap until the fully- open-source versions of VS and VS Tools are finally available. I suspect they're waiting for .NET 5 or later, at this point...

They're undoing the split between Core and .NET Framework by suggesting that they'll ship both within .NET 5 using shims or implementations of drop-in replacements for .NET Framework code to use. Imagine if after dropping Python 2 support there was a mode that scanned for Python 2 code and enabled it again, on a file-by-file basis, to work with newer Unicode strings using some kind of translation layer in the runtime. That's kind of what's happening here, I think, but maybe more lightweight than suggested. Legacy .NET Framework code still deprecated, but interoperability libraries will ship as part of the runtime or SDK, will have some amount of shims available. I haven't followed the details closely enough to say more than this, though. I last looked into it a few months ago.

<comment><USER36> As far as I know - there will be those frameworks to select:

>net5.0

>net5.0-windows

>net5.0_something

So you can use "pure" "net5.0" on Linux and generally cross-platform software meanwhile still be able to use old .NET FrameworkX winforms/wpf on "net5.0-windows".

</comment></comment></comment></comment></comment></comment></comment><comment><USER37> Does Google use Go for any non-server applications? For example in Android, iOS apps, ChromeOS, Chrome browser?

<comment><USER19> Quite an interesting question. The Android GPU Inspector[1] is a desktop GUI/CLI developer tool that's written mostly in Go, but also has a bit of client/server architecture internally so I don't know how you would count it.

1: [https://gpuinspector.dev/](https://gpuinspector.dev/)

</comment></comment><comment><USER38> Go as a new language is a _mega_ success.

K8s, docker, native concurrency, robust std lib, list goes on.

Obviously, not the magical swiss army knife for all engineering use cases, but successful in a lot of domains and well-liked by developers. Winning.

And its only version 1.XX.

I've never even used go and I am impressed.

Well done, Google. Well done. (golf clap)

<comment><USER18> > And its only version 1.XX.

Are there plans for a new version that is radically different, or is it going to be like Java or macOS where updates continue to change what is usually considered the minor version?

<comment><USER38> No idea, but I think it is impressive that a language that is still on "version 1.XX" has been so successful so far.

<comment><USER39> A project can use version numbers 1 ... 9999999 or version numbers 1.0 ... 1.9999999. The amount of work that goes into it is the same.

<comment><USER40> See for example Java, which basically dropped the 1. from 1.5 .

</comment></comment></comment></comment></comment><comment><USER18> Important point: this is _Google 's_ use of Go, not _your_ use of Go. Take note to check whether their results are applicable to you before adding it to your repertoire of "reasons we should use Go at our company".

<comment><USER10> What are you trying to say?

Go is at my employer's (one of the top 3 car companies world wide) techradar the number one to adopt. New stuff of all kind is done in Go.

So, Go is a huge success outside of Google as well.

Not saying that I'm of any importance for Go, but I'm using Go for personal projects, at work for CLIs and standard backend stuff (APIs + DB, Redis, etc.) with great success.

<comment><USER18> I love reading about how companies use various technologies and how it works for them but I am personally weary of dealing with people who bring up these writeups in language wars without qualification–I'm sure you know the usual " _Google_ uses it, so it must be good" or " _Facebook_ stopped using it, so it must be bad" kind of proposition. Actually, I've written many words on the topic, many more than I have put there; perhaps you've seen it already ;)

But to be clear: I'm saying that reading about other people's experiences with a language (including yours here) is useful in making your own decisions, but you must also account for how you and your usecase are different than the one that was presented.

</comment></comment></comment><comment><USER41> Kinda tired of the proliferation of languages coming out of Google, whether they actually created them or not.

If Go is so great, why was Kotlin released four years later and made the standard on Android? It's annoying enough to have to use Swift and Kotlin for iOS/Mac vs. Android. Now Go? What happened to Dart?

Then there's Rust. What about next week?

<comment><USER19> > What happened to Dart?

Dart is one of the three officially supported and approved languages of Fuchsia.

[https://fuchsia.dev/fuchsia- src/contribute/governance/policy...](https://fuchsia.dev/fuchsia- src/contribute/governance/policy/programming_languages)

The only language that came out of Google that people have a right to be upset about is PromQL. That's an abomination.

</comment></comment><comment><USER42> I see why go is clearly superior to C++. I see why it's simplicity is great for bringing new people up to speed. I see why it's concurrency model is better than many other languages. And I really like their software engineering philosophy.

Go seems clearly one of the if not the best systems language around.

But how is Go in the line of business web application space? The space that's historically been dominated by your Python, Ruby, Go , node.js, C#, Java applications?

I get it's probably more performant, but honestly in C# my primary language I spend almost all my time optimizing DB queries and almost none optimizing C# code. I get it's concurrency model is better, but with web apps that usually isn't much of a problem.

Is Go as better in this space as it clearly is in the systems programming space? I get it could be used for the LoB use case but is it better, and if so is it significantly or marginally better?

<comment><USER18> > I see why go is clearly superior to C++.

You shouldn't. If anything you should be looking into where C++ does better than Go and see if Go is improving there–and understanding that there will always be places where Go is not the best choice or even appropriate.

<comment><USER42> I'm sure Go is not better for every single use case. But it seems to be there were a lot of high performance systems that would have been written in C++, like InfluxDb for example that are clearly more reliable and easier to develop because it was written in Go.

Where do you think C++ outshines Go?

<comment><USER19> I think that's an example of a system where the performance demands weren't high enough to justify using C++. There are lots and lots of applications where the overall architecture can't take advantage of the speed of C++, but I think there's no question that the peak performance of C++ far outshines the abilities of Go.

Taking an example from the article, parts of Google's indexing pipeline are now in Go, but nobody is suggesting that the search engine would be.

<comment><USER43> Go is basically almost as fast as C++.

<comment><USER19> And cat food is "basically" pâté. The Go toolchain lacks virtually all of the optimizations that a C++ compiler would employ in an optimized build and the Go toolchain also lacks all of the ways you'd achieve peak optimization for C++, such as profile-guided optimization and link-time interprocedural optimization.

These programs are are not even peak optimized but the C++ version still wins every case by between 10% and 1000%.

[https://benchmarksgame- team.pages.debian.net/benchmarksgame/...](https://benchmarksgame- team.pages.debian.net/benchmarksgame/fastest/go-gpp.html)</comment></comment></comment></comment></comment></comment>


WordPress loops: with_posts() is my way of dealing with them - <AUTHOR> http://labs.earthpeople.se/2013/02/wordpress-loops-with_posts-is-my-way-of-dealing-with-them/ Clever? Looks handy to me. <comment><USER2> It's a nice approach indeed.</comment>


How Figma's Multiplayer Technology Works - <AUTHOR> https://www.figma.com/blog/how-figmas-multiplayer-technology-works/ <comment><USER2> I appreciate the technical achievement of "multiplayer," and it does work impressively well.

However, no one one my design team likes it. I certainly don't. It's akin to having someone breathing over your shoulder as you're trying to work. And with design, especially, I tend to create a bunch of nonsense and "bad" designs before getting anywhere near a level worthy of sharing or even a team critique. Even if I don't care what others think of me or my skills, it's very disruptive to the creative process to know that someone is watching you.

In my experience, at least, there do not seem to be very many use cases for "multiplayer." I mean, even using Google Docs at the same time as someone else is jarring and disruptive in most cases.

Perhaps the only use case where we've actually liked having it is for a critique (especially when a teammate is remote) or a demo.

Personal preference aside, I think Figma is great. I still miss some things from Sketch, but overall Figma is a great tool. My team recently transitioned/is still transitioning from Sketch to Figma, and I can imagine that many other design teams will be making the same move too.

<comment><USER3> > My team recently transitioned/is still transitioning from Sketch to Figma, > and I can imagine that many other design teams will be making the same move > too.

I'm curious why. I would've thought that the main advantage of Figma is the "online collaboration" aspect, but if you don't like that part, what is it that makes Figma better than Sketch?

<comment><USER4> I can use it from Windows.

<comment><USER3> In that case, why switch from Sketch to Figma and not to, say, XD? I feel like "multi-platform" was not _the_ reason people like Figma better than Sketch (maybe it's part of it, but not all).

<comment><USER4> I am all for XD, just stating a valuable reason in mixed enviroment offices.

</comment></comment></comment></comment></comment><comment><USER5> Sounds weird to use "multiplayer" when there are no players involved, but users. On the other hand, I guess "multiuser" doesn't convey the real-time- ness they want to convey.

FWIW, here's how it's done for actual multiplayer games, especially the ones where latency is critical: [https://gabrielgambetta.com/client-server-game- architecture....](https://gabrielgambetta.com/client-server-game- architecture.html) Arguably, their software is more similar to a turn-based game, and formal correctness of the results is more desirable than "a smooth experience", as is the case for multiplayer games.

<comment><USER6> Figma's case is more challenging in some ways, too, though. In multiplayer games, like the one described on your website, you rarely have multiple actors independently manipulating the same object, there's a moderate tolerance for imperfect resolution of conflicts, and the server can reject messages that are more than a few seconds out of sync with the server state.

Figma needs to have very consistent, predictable resolution in order for users to trust it with business-critical documents, and it needs to allow users to operate offline for arbitrarily long periods without throwing their work away when they reconnect. This has to happen across multiple versions of the software, and across documents (e.g. when dependency libraries are republished).

<comment><USER5> Yep, I agree the use case is somewhat different - I wrote as much after the link. Probably why calling this "multiplayer" sounds weird.

</comment></comment></comment><comment><USER7> I think "real-time collaboration" or "multi-user" would have been better choices than "multiplayer". I was hesitant to criticize the term at first because it is so ill-fitting that I was unsure I understood what feature they were talking about.

It's interesting to see this on HN at the same time as the GNU article about "Service as as Software Substitute". I would have much more piece of mind that my personal or proprietary information is secure if I didn't have to trust Figma. A peer-to-peer collaboration platform that I can run locally would be innovative and exciting.

</comment><comment><USER8> I was trying recently to prototype a multiplayer experience, and got pretty stalled when it came around to the networking side. My goal wasn't to make it fast/scalable, but rather just to be able to have 4 people sit at my kitchen table and answer "is this game idea interesting/fun". But the resolution of movements, timing things, client/server stuff was actually a pretty steep cliff for someone who had never done it before. There's also a lot of interesting decisions to make upfront then about rendering, real-timeness, how you'll split up movement collisions, etc.

Regardless of if this is for a "Game" or not, I find reading more about these things quite interesting.

<comment><USER9> I don't know the full context besides what you've typed here, but for 4 people in the same kitchen evaluating a prototype, it seems like it would be a lot easier to pair up 4 controllers to the same computer.

<comment><USER10> Common advice your hear from gamedevs is to never start a networked game as a local game then "add the networking later". It's too fundamental and will require a rewrite.

</comment></comment></comment><comment><USER11> Great write-up! Thanks for taking the time to do this.

This is incredibly similar to the way we did multi-user simultaneous editing in [https://Clara.io](https://Clara.io) back in 2013/2014\. It was also a tree-based OT-like system, but there was a few differences.

I also wonder if you guys studied how we did it...

<comment><USER12> I worked at Salesforce then and we had this from an acquired company: [https://web.archive.org/web/20140625063431/https://goinstant...](https://web.archive.org/web/20140625063431/https://goinstant.com/)

A lot of folks were using it to add "Multiplayer" to our apps.

</comment></comment><comment><USER13> I think the approach of mutating each property independently is an excellent approach and I'm glad to see it working at scale. It's just like regular CRUD except that instead of mutating the whole resource, you just mutate one property at a time - And if two users edit the same atomic property at the exact same time, it doesn't really matter who's edit arrives last because there is no absolute right answer so long as both users can observe the same outcome.

I also did some work in that area several years ago which I refined over time into a sample app and a set of libraries: [https://github.com/SocketCluster/ag-crud-sample#ag-crud- samp...](https://github.com/SocketCluster/ag-crud-sample#ag-crud-sample)

</comment><comment><USER14> > When we first started building multiplayer functionality in Figma four years > ago, we decided to develop our own solution. No other design tool offered > this feature,

I could've sworn I've seen people on HN say there were tools that did real- time collaborative design before figma.

<comment><USER15> Name one?

<comment><USER16> Precursor, a prototyping tool I worked on, had "multiplayer" mode way before figma [https://precursorapp.com/](https://precursorapp.com/)

I'm certain they were aware of it. We had a signup from a Figma domain in 2015 and I emailed them about Precursor in 2016 before they had implemented multiplayer.

</comment></comment></comment><comment><USER17> > As a startup we value the ability to ship features quickly, and OTs were > unnecessarily complex for our problem space. So we built a custom > multiplayer system that's simpler and easier to implement.

That sounds like a bad reason to implement you own mechanism. There are many valid reasons to design your own system (your requirements being different is the most common one), but "the state of the art is too complex" sounds like a good way to reinvent all the solutions to the technical problems the state of the art faced and end up with an equally complex solution in the end.

This isn't to dismiss the work exposed here, and the really pleasant write-up, though.

</comment><comment><USER18> Unrelated, but repl.it wants to do the same thing for code. It's an on line IDE, something like Cloud9, that lets you click, write a program in almost any language and run it on their servers. You can collaborate with others, where you all see the same terminal etc. This seems amazing for learning and small remote groups who want to code together. Repl.it is already becoming a place where bright kids learn to code and produce some pretty impressive things.

<comment><USER19> same as glitch.com (heavy on JS thought)

</comment></comment><comment><USER20> I do not know how usable Multiplayer is. I sometimes had that if i had one browser window open and opened another that i had two sessions in Figma, which was slightly annoying. But for me the dealbreaker with Figma as a tool is it sometimes has issues with exporting content to png. Meaning I had to import it in GIMP before re-exporting it. The idea is really neat, but it needs some work before I can really recommend it over more traditional tools.

</comment><comment><USER21> My wife just started learning ui/ux. I think the realtime aspect could help with tutoring.

</comment><comment><USER22> Is there anything currently being researched around Multiplayer tech with better efficiency than CRDTs or OT? It seems like almost all of such implementations currently just implement CRDTs or OT.

<comment><USER23> Better efficiency? What sort of efficiency are you seeking? I've built the core of a text OT system in C which can handle about 5M concurrent edits on a single machine. (Not counting network overhead.) I don't think the upper bound on performance is the algorithms themselves.

</comment></comment><comment><USER24> Anyone know what program was used to create the animated diagrams?

<comment><USER25> figma?

</comment></comment><comment><USER26> Figma is the one web app that always forces my safari down to its knees... even though I have a strong processor and lots of memory.

<comment><USER27> Well you're using Safari, don't expect the best performance.

</comment></comment><comment><USER28> CRDTs are absolutely critical, if you don't know about them, read this article & then research them!

If you're wanting to use CRDT tools, I recommend two:

\- [https://github.com/automerge/automerge](https://github.com/automerge/automerge) (immutable)

\- [https://github.com/amark/gun](https://github.com/amark/gun) (mutable)

<comment><USER29> Not sure why you're being downvoted but thanks for the links

<comment><USER30> He's getting downvoted for excessive self promotion often without a disclaimer. If you look at his comment history, he's non-stop spamming his own product, gun.js. If you search for gun.js, almost all mentions are made by him: [https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...](https://hn.algolia.com/?dateRange=all&page=0&prefix=false&query=https%3A%2F%2Fgithub.com%2Famark%2Fgun&sort=byDate&type=comment)

There's only a small handful of HNers who upvote OT/CRDT/sync/realtime database submissions. So by now everyone is tired of seeing him promote gun.js again and again without contributing any other relevant technical insights.

Which is a goddamn shame. There aren't that many others who have first hand experience implementing these systems successfully. The other regulars who always appear in these threads get upvoted to high heavens even if they aren't saying much because we value these first hand accounts so much (josephg for share.js, raphlinus for xi editor's crdt, etc). But unfortunately after seeing gun.js hundreds of times I still have no idea how it works and his code is completely unreadable.

I don't think he realizes that if he had just explained _why_ gun.js is amazing in a relevant way, _others_ would help promote gun.js for him.

@MarkNadal Sorry if this was too mean

<comment><USER31> >So by now everyone is tired of seeing him promote gun.js again and again without contributing any other relevant technical insights.

I don't understand this perspective. Every single time Mark comments, he offers technical insights that are relevant to his experience with gun and distributed tech in general.

I mean look at this comment that you're bitching about. It's not just shameless promotion. It's on-topic and relevant to this discussion...

It should be noted that he's not "selling" gun, either. It's a completely free and open library.

</comment></comment></comment></comment><comment><USER32> The article starts without introducing what figma is. I read for a while before discovering this is something like Google docs... Multiplayer work-sim maybe?

</comment><comment><USER33> Figma feels like the height of over-engineered backends with corresponding low-innovation frontends.

<comment><USER34> Figma is a marvel of software engineering. Have you used the competition? Have you used Figma?</comment></comment>


Show HN: Lyrics generator for over 40 artist styles - <AUTHOR> https://www.freshbots.org/lyrcis-generator <comment><AUTHOR> I made this web app for generating lyrics in the styles of over 40 artists.

Why? I had two goals with this project: 1\. I was curious to see if the model will be able to generate entertaining lyrics. Pretty lighthearted but still kinda fun. There are quite a few artist styles to try. 2\. Make a material ui web app to play around with the lyrics generator.

Each artist has a Markov model trained on lyrics from Lyrics Beast. You can also specify the target number of syllables.

Somethings i'd like to try in the future: Mix artist styles by combining models.

It's a lighthearted project, but I would still love to hear what you thought of it

</comment><comment><USER2> Some of the lyrics are real gems, like this Drake verse:

      And you know wassup
      Like how to blast up,
      Whatever you wanna go
      Peace sign in the underground though</comment>


Capitalism vs. Democracy - <AUTHOR> http://www.nytimes.com/2014/01/29/opinion/capitalism-vs-democracy.html?hp&rref=opinion&_r=1

<comment><USER2> What I fail to understand in many of these arguments regarding income inequality, is why inequality matters?

Personally, I think the argument shouldn't be focused on how much the top 1% have, but rather on how well (or currently not well) the bottom 20% are living. If everybody has effective health care, abundant availability of healthy food, access to knowledge and the ability to be a productive member of society who doesn't have to work more than 40 hours a week in order to struggle to survive, who cares if the top guy earns 10000x more.

Do we need to demonize the top 1% in order to motivate us to help the bottom 20-50%?

</comment><comment><USER3> This NYTimes article is behind a paywall. When I click on it, I get shaken down for money, with the following message: "Thank you for visiting NYTimes.com We hope you've enjoyed your 10 free articles this month." Then it tells me I need to pay between $3.75 and $8.75 per week to continue.

Since I'm in the bottom 20%, I can't afford this stomm! If I want to read this article, educate myself about income inequality, and become a more informed voter, then I need sacrifice something, like food. But if I were in the top 1%, I wouldn't need to think twice about subscribing.

The first sentence of this op-ed is obscured but readable. I can see its about the work of a french academic named Thomas Picketty, whose website is at [http://piketty.pse.ens.fr/fr/](http://piketty.pse.ens.fr/fr/)

The facts published on his site don't seem controversial. His papers seem well researched and reasoned, albeit very narrowly focused, highly repetitious, and not particularly enlightening or useful.

I did not see any kind of "demonization" of the rich in his work. I routinely see Fox news pundits demonize the poor, angry for example that 50 million Americans get $80 billion in Food Stamps per year, while never mentioning that Ben Bernake's QE3 prints $85 billion per month for the rich. Fed money printing seems to be the main cause of income inequality. And anyone who wants to reverse the growing income inequality should make abolishing the Fed their #1 priority.</comment>


Ask HN: What is wrong with our UX? - <AUTHOR>

We've created a simple tool for discovering gift ideas and its flopped horribly. I plan on doing some direct observations over the next few days but would love to hear some feedback from HNers.<p>Site is: http://www.giftwell.com/discover/ <comment><USER2> As others have, I'll drop in some thoughts. Sorry if they're repeats! No particular order.

First, the focus on mother/father's day doesn't really seem sensible. I'll assume it's what your initial products focus on, but I definitely wouldn't keep it. My guess is it's designed primarily to separate male and female - doing so with gender options, and then drilling down into personality options would seem to make a lot more sense.

I can understand that your app doesn't support the back button - but your UI needs to solve that problem for the user. Done shopping for mum and want to shop for dad? (Doesn't apply to mother's/father's day, but birthdays?) Refresh the page and start again.

An obvious issue is that father's day isn't supported. Fair enough that there's no personality filters, but looking briefly through all the items available, there are some clearly for men (Personalized Man Cave Doormats was on the first page). Why not show them?

Okay, so selecting mother's day instead, I can see why that's supported first since it's mother's day in America soon? Anyway, the options probably shouldn't be radio - mum could easily be awesome and a wine lover. The family gardener could easily imply outdoorsy. The hostess could easily imply wine lover. No need to model such connections, but let users select more than one.

The more serious issue is that the buttons don't work. Ubuntu Firefox 20.0, \- Click mother's day, next question \- Click 'An awesome mom' (all other buttons work fine), get gift suggestions Firebug info: POST: <http://www.giftwell.com/discover/> Result: Internal server error. On your website, there's no result and I'm left assuming that button is broken. GET: [http://api.mixpanel.com/track/?data=<snip>&ip=1&...](http://api.mixpanel.com/track/?data=<snip>&ip=1&_=1366747269473) Result: 1 (appears to be the same as successful requests) \-- \- Click any radio option button, get gift suggestions No POST request made [http://api.mixpanel.com/track/?data=<snip>&ip=1&...](http://api.mixpanel.com/track/?data=<snip>&ip=1&_=1366747474381) Result: 1 (same as above) \-- \- Now, as a user I am left assuming that your form simply doesn't function. No button will work any more.

\</comment><comment></comment><comment></comment><comment>--

Okay, so that's a bug, but it completely breaks the UX on what seems to be the primary user experience right now.

So going into mother's day, selecting a working button (wine lover), I get only 5 results. There's tonnes of space below, but no more results shown. I click show more results, and I get 5 more. How come these weren't shown before? If there's somewhere infinite scrolling should be used, it's here. Fix that view gifts button somewhere and just show me everything relevant.

Or, maybe don't. Right now the results simply aren't relevant. They change every time I visit the page from the same options, but one time I got a sun towel and then 4 wine products. The next time I got watches, succulents (never heard of these, from the picture china plantpots?) and 2 wine products. The filters definitely need work.

When I saw them succulents, I thought I'd click to see what they were. Fortunately, that opened a modal with a picture and some information. Unfortunately, when it was fully loaded it scrolled so I could only see the top (as much as fitted on my screen). I couldn't move the scrollbar in Firefox for some reason, and the modal didn't have a scrollbar. In short, I could see a bigger version of the picture, and knew some text was there because I saw it loading, but it's unusable.

When I closed the modal, I tried again. No luck, it just didn't open this time. There's a problem with your Javascript - I can only open one modal per visit.

In the no thanks, show me everything menu, I get, well, everything. There's no filters and no sorting. It's also a different experience, there's no consistency. This time there's no weird thing in the top right corner of every image (what is that by the way, it didn't do anything?), and there's a buy/save button when I hover over an image. I prefer this layout, not sure why it's different though. Also, the modal scrolled this time (it was a lot shorter, that could be the problem), but I could still only open one per visit.

-

Sorry to be so harsh, but as a user my experience on your website was broken, fragmented and confusing. I hope my feedback is useful, if you need any more information about anything I said (user feedback always misses important information, I doubt mine's an exception), let me know.

My best suggestion would be to simplify the concept, a lot. I would suggest infinite scrolling, show me the best stuff you've got as soon as I arrive and for as long as I want to keep looking. Or at least proper pagination, where I can go forward as well as backward. Then, add proper filters. Gender and age are an obvious start (you capture them to some extent in mother/father of course), and then drill down to personality. I'd use the same personality types in the same order for each, but adjust their names for gender/age (eg action man for young boys etc etc..). Or just use the same simple names. Make them checkboxes too, and have the items shown change as I change them.

That would solve a lot of the problems - inconsistency between filters, broken filters, not showing enough products, no proper pagination of results. I expect it'd be a lot more engaging too. I also imagine it would remove a lot of the requests to your server.

-

Overall, I like the concept, but I think the UX could be drastically improved by a focus on showing more (this could encourage better curation too?) and more general purpose, useful filters.

</comment><comment><USER3> At the homepage I'm presented with two options that are not relevant to me, and I have to strain my eyes a bit to find the alternative link (light blue on a very saturated cream) that just dumps me on a page full of everything. Too overwhelming.

What if instead of assuming the user is there for two reasons or no reason at all, give them a list of potential options. I'd assume most people going to the site are doing so for birthdays, so being able to sort by age, gender or interest is relevant right off the bat. I can't ever find the site that I felt did this best.. I want to say it was called "Wanttts"/"Wanted" or something.

As far as that initial selection is concerned, if you decide to keep it, I should only need to click once on my option to have the filter activated instead of clicking once on the option and clicking a second time to submit that option. I'm now two clicks into Father's Day and there are zero options for me, _and_ I can't click my back button.

As a normal user, I'd be frustrated enough with the site at this point to leave it and go to Amazon.

Now clicking into Mother's Day gifts, I'm presented with radio options, despite the fact that my mother could be all of those things. I click on Stylish & Whimsical (which honestly doesn't even make sense for these two to be paired together) and get a list of 5 items that are neither stylish nor whimsical (a knife, a bland sweater, a set of wooden coasters, a rainbow headwrap and some wine glass lamps). In fact, my mom would probably roll her eyes at all of those. They are simply not thoughtful gifts.

As a normal user, I'd probably be done with the site at this point.

The star on each image is way too big and insinuates I'd be favoriting the item for later rather than adding it to my shopping cart. I didn't even read the text above it because I thought it was a page title (as it's an H3), not instructions on how to use the site.

So let's say my mom is equally silly and into knives, so I click the star on the knife in hopes that I'll see other gifts like it. No, instead I'm on a screen that tells me the price of the knife and would I like to add it to my cart. I click back because I'm not sure what that page was all about and I'm taken all the way back to the homepage where I'm being told to start _all over again_.

As a normal user, I'd definitely be done with the site at this point.

Okay, let's try this again.

I go through the exact same process, clicking the exact same options.. and I get _different_ results? Where were all these options before? Five random options is just not enough for me to feel your site is effectively helping me choose something personalized. Again, under Stylish & Whimsical, I see items that are neither (perfume, cheap-looking bookstand, tacky seedboxes, a Samurai umbrella (what?) and a wire cage shaped like a barrel for corks).

Having the notification show up on the "View Gifts" button is the reason I clicked on it before, because I assumed that was the next action, even though the header tells me to click on the star to show more options. Progressive actions should be on the right side, stagnating/reverse options should be on the left. Likewise, the only time a button should be orange or red (unless it's notably thematic across the site) is when it is a negative action. A shopping cart view in particular should be in the top/primary navigation.

In continually clicking through the suggestions, I'm not finding anything that makes me think that the initial category I selected at the beginning has anything to do with the gifts I'm being shown, nor does it look to be actively filtering based on additional things I keep starring. And as noted before, all of these gifts are pretty bad/cheap-looking.

\- - -

TL;DR

\- The design needs a lot of work (the palette, the UX) and it should be a lot easier to navigate and understand what is going on. As others have mentioned, taking control of the back button is a terrible idea.

\- The items you have aren't thoughtful/curated enough and the photography is weak (not that you can help it necessarily, but a better design would lessen how much it affects the overall appearance and I'd imagine that the more luxury the brand, the better the photos). When I'm looking for gifts using services like this, I'm doing it because I want to find unique items; probably gifts that cost a little extra to begin with. The items on your site are all things I could find on Amazon within a few clicks. If I wanted ThinkGeek- quality gifts, I'd go to Spencer's.

\- Have users search by more specific keywords/interests instead of trying to lump people into categories they either don't fit into at all or that multiple could apply to.

There are a lot of gift-searching sites out there, and a lot of them have these same issues. What problem were you trying to solve with site? Why would people use a specialty service to find the same types of things that show up on Google Shopping or incentivized Bing Shopping searches? I guess I don't understand why already-popular vendors are listed at all. Gift-finding services should be about highlighting unique gifts that are handmade or crafted by specialists, curated by tastemakers. You don't need to advertise for Nordstrom's.

</comment><comment><USER4> I clicky the link.

I see a nice, clean, site. I wouldn't have chosen that orange with that blue, but it's not hideous. I clicky [FATHERS DAY] and next question.

It says "Coming soon, sign up to get notified", and I can go no further.

So, this is something that I would be interested in. I don't care if you use skim links and affiliate links. I really do want to find gifts for people and would welcome some kind of service that helps me discover stuff. But I'm not going to sign up until I've been able to see something.

Good Luck though!

EDIT: I clicky the browse all products link. There's a nice selection. I can see how it could be expanded to a huge range and provide really great suggestions.

I dislike the bold of the font - the bold white on grey doesn't look nice in my browser. (Chrome on Windows Vista).

I usually browse with a narrow window. Doing this makes the pop up happen in a weird place. here's a screen shot. (<http://imgur.com/PIEkFai>)

I don't mean to be negative, I mean to be constructive, but sometimes I have problems with tone.

It looks like a good site!

<comment><AUTHOR> We curate the initial set of gifts, the father's day set isn't quite done yet but will be in the next few days. Thanks for the feedback!

edit: Fixed that popup. We rushed to rip out some bootstrap transition code recently, missed that media query.

And I didn't consider your tone negative at all, the feedback is much appreciated.

</comment></comment><comment><USER5> First thoughts:

As a visitor, there's a lack of focus of what you want me to do here.

The "Find the perfect gift" wizard seems to be overpowered by that toolbar. Do you want me to sign up? Do I need to know "About"? Do you want me to "Add a gift"? What am I suppose to do? Search? Do I really want to "search" or "browse"? How does it "work"? Is it the main thing you offer? If it's the main thing, I guess it would do best to emphasize it by putting it as a big search bar on the center.

1) Rethink that toolbar, go easy on it. Just a tip: It'd do best to put the "About" section at the footer.

2) Focus on what you want your visitor to accomplish. Emphasize on that, remove focus on everything else. Make it easy on them, consumer-type visitors have short attention spans. Respect that 10 second hold you have on them by making it easy to expose your main feature to them.

3) All advice are just 'words' unless it's tested. You can hold to the truth that any advice given are currently considered worse than your current assumption, given that your assumption is on the server and being tested by people while advice is just on a persons head.

<comment><AUTHOR> Thank you. I think hiding the toolbar with a small "show navbar" button will be far more appropriate for us moving forward. We knew it could be a bit of distracting but after the feedback we've gotten its clearly something to be fixed.

</comment></comment><comment><USER6> My thoughts:

The colours don't work for me. Changing the blue on the title bar may help, make it darker. Have you ever used Adobe Kuler?

The Green colour doesn't add anything

The search placeholder text is not centered (vertically) and spoils the flow when reading from left to right

Try and get your font sizes consistent.

Make the margins of the title bar consistent with the in-page gifts.

Centre the login/password boxes

On Find the Perfect Gift, all the options are buttons making me think that when I click them, I'll move onto the next section.

I like the wizard aspect, just needs to be improved. Perhaps the title bar should appear once the wizard has been completed, or cancelled, so my eyes are not all over the place on first visit.

Try improving how the bookmarklet works.

When I click 'Save It' a new tab opens (in Chrome) and prompts me for my username and password. How about an in-page popup instead?

One for the future, how about some localization? I'm in the UK and want to buy things off Amazon.co.uk.

Good luck with it!

<comment><AUTHOR> Wow, thanks for the thorough review!

Excellent points about the title bar, will look into making those changes.

Our font choices definitely need to be revisited and made more consistent.

I absolutely see your point about the buttons/coloring. Its setup that way to eventually allow multiple options but I will make sure it has more of a checkbox feel moving forward.

The entire bookmarklet process definitely needs work. We rolled out the site as a simple gift bookmarklet originally and came to the conclusion the average person has zero interest in bookmarklets. For the time being we've sidelined out efforts to make that experience more pleasant.

We moved away from modals, for now, because of issues with mobile. We plan on eventually incorporating them everywhere but at this point we're more concerned about interaction with the wizard/browse than we are less frequent activities like login and contact.

Funnily enough, we're still not seeing anyone actually press the "star" on gifts in the wizard so clearly there is something about such a passive (and from the users perspective unnecessary) interaction that fails miserably. At this point its clear we'll need to do a major overhaul of the wizard itself which was the thing I was most concerned about when posting this.

</comment></comment><comment><USER7> Your website feels clunky and confusing.

Why can I click 'Next Question' before I've actually chosen an answer?

Why are you telling me that something is 'coming soon' after displaying its intro question so prominently?

Why is 'coming soon' a button?

Your default user experience is broken: I can't actually do anything using the prominently displayed buttons / suggested workflow. I don't know what this thing is until I click the 'Browse' button.

Additionally, in another comment you mention that saving an item is important for your analysis / feedback mechanisms. Why, then, am I only invited to save something if I hover over it? Suggest the potential interaction to me, don't force me to discover it.

In general your website isn't all that well designed. It screams bootstrap, and the 'familiarality' excuse is just that - an excuse. It doesn't feel familiar, because I don't know what your service is. It just feels confusing and unexciting.

</comment><comment><USER8> Don't break the back button. Like DanBC hit the annoying 'Coming soon' dead end, but couldn't go back to browse all. You may not use the back button, but _enough_ newcomers exploring your site will. Even more so when you brick-wall them with a signup box.

<comment><AUTHOR> Woah, great point. I'm amazed that we never realized how terrible the back button experience is for the discovery process. Definitely something that needs immediately attention.

I'm really disappointed in that miss since we put in effort to use the history api to make the back button more pleasant for modals.

</comment></comment><comment><AUTHOR> Clickable link: <http://www.giftwell.com/discover/>

We've seen ok numbers of "more suggestions" but we've seen virtually no users "star" gifts. Our tool gets smarter as you star gifts and it will get smarter with use but with no interaction the tool is hosed.

We intentionally went with a very tame, vanilla UI because we figured it would convert better with the average online user. We've got a few ideas for more radical user experiences but I was hoping to hear some additional opinions on why this fails so hard before venturing down another dead-end.

Thanks in advance!

</comment><comment><USER9> You mean UI not UX, the difference will be crucially important to you.

When inviting informed review of an app, it's useful to outline the design brief.

Given the number and nature of the UI issues reported by other HNers, you might be interested in making use of the resources offered by <http://www.usability.gov>.

Lastly, I'm a little surprised that your prior user tests didn't give you any hint of the degree of failure, you might want to take a closer look at your user testing process.

</comment><comment><USER10> I don't suppose this is meant to happen and might be that you are getting some unexpected traffic or else but there is something a little off...

<http://i.imgur.com/PXKfrAQ.png>

Happens on Chrome and Firefox latest on Win 7. And Chrome on android, on different connections so I think it's something on your side, the page actually load fast enough but it's rendered like that.

</comment><comment><USER11> For starters, you're using the font awesome gift icon. Theres not really much thought in the UX at all. Invest a few hundred dollars in a 99 designs contest and you might be able to remove the bootstrap stigma and stop your website looking like an administrative panel

<comment><AUTHOR> Thanks for the feedback, harsh but totally fair.

Like I said, we tried to keep it as vanilla as possible to cultivate a sense of familiarity. We actually did look into getting a better logo but have yet to see a designer produce something we like better than the basic font-awesome gift. We genuinely want something we could eventually trademark but we're not going to rush into something just because its not a stock image.

As far as the bootstrap stigma, I may be mistaken but from my experience it seems to only exist in technical circles.

</comment></comment><comment><USER12> When I look for Mother's Day gift ideas for "An Awesome Mom" or "Wine Lover", nothing happens in Chrome 26 on Mountain Lion, just FYI.

</comment><comment><USER13> How do you know your UX is the reason that the site "flopped horribly"?</comment>