Using a virus to kill what antibiotics can't - <AUTHOR> https://arstechnica.com/science/2018/07/researchers-treat-lung-infections-in-mice-with-bacteria-killing-viruses/ <comment><USER2> Relevant Kurzgesagt video explaining _everything_ about bacteriophage[1]. I posted this a while ago, but since it's a video it didn't get much attention.

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

<comment><USER3> Actual movies of phage infection will soon be visualized using Cryo-EM resolution techniques ;)

</comment></comment><comment><USER4> They have been used for almost a 100 years in Russia with great efficiency. Our inability to use phage therapy here is due to terrible incentives created by intellectual "property" laws and regulations that assume standardized treatmentments.

<comment><USER5> It's not just regulation. They're also _not very good_ \- there's a reason antibiotics won (we used to use phage in the West too - they developed a dangerous reputation because we weren't good at purification). Russia used them because antibiotic availability was constrained.

A post on this from a day or so ago, my usual take on phage, from the standpoint of someone who works in healthcare epidemiology and has always been fond of phage therapy:

1) Even with resistance on the rise, we still have antibiotics that work. Phage therapy is a "someday we're going to need this...we think" type treatment.

2) There's no such thing as a "broad spectrum" phage. They're organism specific, and that means not only would you need to keep a phage library on hand, but you'd have to do a lot of diagnostic tests. That's going to be both expensive and tricky.

3) Phages are living things. Not only is that a weird regulatory framework to be in for a drug, but it also means that you need to be able to keep phage alive. In contrast, antibiotics are inert.

4) Phage therapy is also relatively new in the West, which means there's just less of a R&D infrastructure behind it.

There have been people working on commercializing phage therapy since I was in undergrad (I'm now a tenure-track professor). The problem is it's hard, and antibiotics are so much better as a treatment that there's kind of a ceiling on the excitement that they can generate.

<comment><USER6> 3) is not the best way to think about it.

Viruses are more like a delicate molecule than like a living thing, because they don't have a metabolism. Kept in the proper conditions they last indefinitely.

"more like" in this context. "Are viruses alive" is the most popular thread in bio-ontology, locked by the moderator after 12,493 pages of heated debate.

<comment><USER5> I chose "alive" because, well, HN is not always _the best_ at biological nuance.

But there's a few major concerns:

1\. Most preparations are bespoke. The FDA has made some headway with this because of fecal transplants, but it's still a problem.

2\. Phages evolve. That's one of the benefits of them. Generally speaking, self-adaptive medications are not something we have a good regulatory context for.

3\. They need culturing, isolation, identification, etc. and those are "wet lab" things.

</comment></comment></comment></comment><comment><USER7> I've been thinking recently, that we learned about both phage and crispr from the war between viruses and bacteria. This is amazing to me. It's like the earth is running a genetic algorithm from which we can copy code. What else can we learn?

Also, what other exciting front in biotech should I know about?

</comment><comment><USER8> I found this documentary interesting : [https://www.youtube.com/watch?v=aVTOr7Nq2SM](https://www.youtube.com/watch?v=aVTOr7Nq2SM)

<comment><USER9> I'm shocked. This could have saved people and has been forgotten due to economic structures.

</comment></comment><comment><USER10> This sounds like a brilliant idea that will either bring humanity to a new positive level or kill us all. Great times.

</comment><comment><USER11> What is wrong with white blood cells [0] and T cells [1] and the already existing immune system?

This is the equivalent of "roll your own encryption" in the computer security world.

The number of real world cases where people have no or little immune system is likely minuscule (real numbers?) compared to the number of people that destroy their immune system through poor life and health choices. (obviously high number)

Eat better, exercise some (any?) and let your immune system take care of this stuff. That is what it's there for. Introducing _another_ foreign substance that will need to be fought off later is a recipe for disaster.[2]

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

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

[2] [https://www.amazon.com/King-Mice-Cheese-Nancy- Gurney/dp/0394...](https://www.amazon.com/King-Mice-Cheese-Nancy- Gurney/dp/0394800397)

<comment><USER12> I'm wondering now, what makes immune systems fail? In other words, if our only option were to help immune cells do their job (instead of doing it for them), where would we start?

<comment><USER13> I mean, we do have active research and treatment vectors involving this, but it's tricky for a few reasons.

One of the nasty ones is that accidentally teaching the immune system to attack the wrong thing is catastrophic, and we don't really have good general ways to undo learned response once present. (Exposure/desensitization therapy works for some things, but is still relatively early in its refinement.) Just look at the fun with the lone star tick and induced red meat allergies, and that's apparently a purely incidental outcome (e.g. it's not obviously a beneficial part of the tick's outcomes from biting things, just a quirk of primate biology not possessing a protein that every other mammal does, and getting upset when it finds it in the bloodstream).

Another example that comes to mind of when this doesn't "just work" is culturing uninfected immune cells from HIV+ patients, teaching them to kill HIV, and then putting them back.

AIUI, this works for a little while, but then it just shows back up again, like it never left. As it turns out, T cells happily share information between each other by making a happy little bridge between the two cells, and HIV is perfectly capable of spreading that way. Womp womp.

If you want to see a really strange immune outcome, go read the recent experiments about graft-versus-host disease potentially wiping out HIV in patients. (It didn't work for two patients in one experiment, so not extremely hopeful about the outcome, but it's a fascinating complex interaction. [1] [2]

[1] - [https://www.nature.com/news/hopes-of-hiv-cure-in-boston- pati...](https://www.nature.com/news/hopes-of-hiv-cure-in-boston-patients- dashed-1.14324)

[2] - [https://www.newscientist.com/article/mg23431244-400-immune-w...](https://www.newscientist.com/article/mg23431244-400-immune- war-with-donor-cells-after-transplant-may-wipe-out-hiv/)

<comment><USER11> What do I know? I am a random person voicing my opinion on the internet. Read my other comments, I will freely admit when I am wrong.

If they make something that helps you, I think that would be great.

<comment><USER11> error: the parent comment was for a previous post... oops.</comment></comment></comment></comment></comment>


StatusEntry: Affordable Status Page Product as SaaS - <AUTHOR> https://www.statusentry.com/ <comment><AUTHOR> After needing a public status page for one of our products in the company I worked at, we saw that it was pretty expensive just to serve a public status page. So, we decided to build an affordable solution. We have more ideas to integrate on top of this product and we would really appreciate any feedbacks before we invest more into it. We want to see how much the community considers it valuable to spend more efforts.

You can see our short product tour video here: [https://www.youtube.com/watch?v=lLpEl7Y2DeU](https://www.youtube.com/watch?v=lLpEl7Y2DeU)

We love startups and there is a completely free plan with fundamental features! [https://www.statusentry.com/pricing](https://www.statusentry.com/pricing)

We would really appreciate any feedback and trying out StatusEntry.</comment>


Firefox 15: updates are now more silent - <AUTHOR> http://ehsanakhgari.org/blog/2012-08-28/firefox-15-updates-are-now-more-silent

<comment><USER2> Glad to see that Firefox copied this very useful Chrome feature.

Now, just imagine if Google had patented a "Method for silently updating a running web browser"...

<comment><USER3> Why would you even bring this up? Apple has exactly nothing to do with this.

<comment><USER2> I removed any reference to Apple (after all, they created webkit and didn't patent it) five seconds after publishing the comment. Im curious: Where did you read it??

<comment><USER4> well. apple did not create webkit. they copied khtml and improved it into webkit. so it would have been pretty hard to patent. (not that apple would not succeed in doing so though...)

<comment><USER2> Didn't know that... thanks for the info!

By the way, by "patenting webkit" I meant patenting some of its technologies.

<comment><USER4> yeah, but khtml would have been prior art for a big part of webkit.

</comment></comment></comment></comment></comment></comment><comment><USER5> Hacker News Effect ?</comment>


Chat with Gitlab CEO: Offering an On-Prem/Self-Managed Version of Your Software - <AUTHOR> Video: https://www.youtube.com/watch?v=Lo0bejtOnQc
My team and I recently had a quick discussion with Sid Sijbrandij, www.gitlab.com's CEO, on what it takes to offer an on-prem/self managed version of your software.
We discussed a few technical challenges as well as business challenges that come with building a on-prem/self managed version of your software.
Enjoy! Let us know what you all think. <comment><USER2> [https://www.youtube.com/watch?v=Lo0bejtOnQc](https://www.youtube.com/watch?v=Lo0bejtOnQc)

<comment><AUTHOR> Thanks for the assist!

</comment></comment><comment><USER3> Thanks for sharing. It's something we are considering as well so the discussion will be invaluable to us.

<comment><AUTHOR> Awesome! Glad this was helpful. There are still so many questions and unknowns though. Best of luck!

</comment></comment><comment><USER4> GitHub has an on-prem version as well.</comment>


Ask HN: What's the best plain-English TOS? - <AUTHOR>

We're building a site that relies heavily on user-generated content. Pinterest has a great example of how to write terms in a legally-correct but overly-draconian-sounding way (http://news.ycombinator.com/item?id=3677393). I want to do better.<p>What are some great UGC sites with friendly, understandable, hey-the-lawyers-made-us-say-this-but-YOU-own-your-content terms? <comment><USER2> <http://en.wordpress.com/tos/>

</comment><comment><USER3> If you take away the parts that relate to software developers, GitHub TOS is pretty straightforward: <http://help.github.com/terms-of-service/>

</comment><comment><USER4> Facebook's ToS is the best I've seen. Unfortunately it's not creative commons licensed.

</comment><comment><USER5> AWS not so bad</comment>


Student learning 3 programming languages at once experiment - <AUTHOR> http://thecodelog.tumblr.com/

<comment><USER2> I find that when working with large development projects, something I'm relatively new to and just working on for myself, I need to utilize lots of languages and find myself picking up multiple languages, including these three, all at the same time as well. After a while, for relatively small projects, they all just run together. New syntax is easy. The hard part is learning the intricate advantages and disadvantages of different languages.</comment>


Roadmap to becoming a web developer in 2017 - <AUTHOR> https://github.com/kamranahmedse/developer-roadmap <comment><USER8> What I find most interesting is that the majority of these technologies did not exist or were in their infancy ~7 years ago when I first moved to Silicon Valley. Looking at this chart must be much more intimidating for a young developer today.

I remember a decade ago when a front-end developer meant you handled HTML/CSS/JavaScript/Apache/PHP/MySQL. Today, there are 15 forks in the road all leading to different paths as a front-end developer.

<comment><USER9> As a young developer, it really is intimidating. Hard to know where to even start these days, it's overwhelming.

<comment><USER10> I highly agree, and have strongly voiced "keeping things simple" with:

1\. HTML4 (no special/new tags) Edit: CSS, of course (unfortunately, CSS is a pain to learn though, so get a lot of experience/experimenting)

2\. Pure ES5 JavaScript (don't waste time with build-steps/compiling JS, that defeats the point/purpose - or if you want to, learn a language like ClojureScript or Elm/Haskell)

3\. jQuery to manipulate the DOM (skip frameworks and stick to libraries, this will force you to actually understand JS rather than being a copy-paster. Once you have this down, build your own personalized framework to abstract things away, only then should you try experimenting with Angular/React, etc. others)

4\. Notepad++ or Sublime (avoid using any terminal tools, including NodeJS, until you are comfortable with having a browser and an editor open side by side, and refreshing when making changes. Keep it simple: just files!)

5\. NodeJS or PHP, GitHub for Desktop (learn basic command line use, but if something takes you more than 20 minutes to figure out, seek out a community/forum/help that is friendly and encouraging to newbs. Don't waste time on channels that make fun of you for not knowing command line.)

6\. Heroku (for deploying, and having your page live to show your mom what you built)

I wrote a beginner's tutorial for the first 3 items, it takes between 5 minutes to 30 minutes for people who have only played with a little bit of HTML. It teaches you how to build a ToDo app: [http://gun.js.org/think.html](http://gun.js.org/think.html) , let me know if there is anything I can do to improve it.

<comment> et-al CSS needs to be included. CSS is the polish that changes a proof of concept into a presentable product.

There's a number of _Show HN_ projects that I'm hesitant to invest much time in because they look like the author won't bother maintaining them months down the line. Even your nicely made tutorial has CSS. ;)

btw feedback:

* For some reason it wasn't evident to me that the left black box was editable and I actually interacted with the right-side wondering why nothing was happening. Perhaps use something that doesn't have an interaction so I don't try to click the button at first glance.

* Found myself scrolling up and an down a lot to read the next few instructions and updating the code. If things were side by side, this would be easier.

* It'd be nice to step backwards for the instructions

* The pre-formatted code in the instructions is a bit small. Might be hard to read for some people

<comment> gingerbread-man I would _happily_ pay a consultant $300 an hour to do the CSS for my websites. I imagine someone who specialized in CSS could do in 10 minutes what would take me several hours of googling and hair-pulling frustration.

<comment><USER11> I will do this for you in one-hour minimums. Just send me the list of wants and the git URL+creds or tarball/zip. Contact me through any channel, satisfaction guaranteed.

</comment></comment></comment></comment></comment></comment><comment><USER12> Yep, surprisingly good. My only criticism is of the implied simplicity of the "backend". In reality the choices are vast with a huge long tail.

That's because backend, as opposed to frontend or mobile, is really just good old fashioned general purpose computing with a sprinkling of networking and http middleware, and distributed systems glue.

<comment><USER13> Exactly. It troubles me that all four suggestions for the backend have very few inherent checks and leave a lot of room for security problems and other bugs.

Personally, I prefer Yesod for the backend. It gives a very fast, static binary. It requires learning Haskell.

The Haskell package Esqueleto ensures type safety all the way from the HTTP requests to the database tables. A URI parameter that is encoded to be a key on a table can only be used when querying that particular column or columns that are foreign keys to it.

<comment><USER14> This roadmap is for people who actually want to have a job at the end of their roadmap :)

<comment><USER15> A job at a trendy startup. If you want a job learn something used in regular business.

</comment></comment></comment></comment><comment><USER16> If a guide recommends jQuery as a central basic in 2017, it's hard to agree. Sure, it can have its uses in old projects and simple one-off scripts, but for any reasonably sized project with reasonable browser support you will be going with something else. Is it still worth knowing? Sure. Is it something you should learn first? Absolutely not.

<comment><USER17> Similarly I'm confused at the 'personal recommendation' of gulp over npm scripts. Does anyone really use gulp for new projects..?

<comment><USER18> Is gulp seriously so out of fashion _already_?

<comment><USER19> It was used to hack together build pipelines since the tools didn't fit together nicely, creating hard to debug messes which we grew tired of. Those hacks can be replaced with webpack and you're often left with a few snippets that fit nicely in the script section of package.json (npm scripts). Gulp is still useful for some projects, but a lot less often.

</comment></comment></comment></comment><comment><USER20> All of these can be reduced to... learn what you need to learn to build your thing, learn that, then go build your thing.

</comment><comment><USER21> If you're a newcomer to web development, don't be intimidated by this stuff. Much of it is unnecessary at any reasonable scale. The best piece of advice is to have a small project you're genuinely interested in, and don't ever be embarrassed because what you make is too simple or too plain-looking.

Your brain can only handle a fixed amount of complexity, so fight it at every step, especially when you're just starting out.

</comment><comment><USER22> "start building" should be at the beginning, not the end...

<comment><USER23> This. Start building now. Get some momentum and motivation by working with what you already know, then pull back on that stick and get that airplane flying. Figure out how to steer/not-stall/do-loops/land with fancy stuff later. It's the fear that you might do something wrong that's preventing you from starting.

</comment></comment><comment><USER24> That is actually quite nice, but it also shows how incredible complex modern web development gets as there are many moving parts involved.

The backend suggets Python, Ruby, JS or PHP and I agree that choosing one of them is probably a good decision, as there is lots of documentation. However if one goes down the Java or Go road, are there recommended packages - or do people just use the standard libraries?

<comment><USER25> Spring Boot for Java

<comment><USER26> I second that. With honorable mention to Dropwizard

</comment></comment></comment><comment> brian-armstrong Computer architecture isn't even mentioned in the backend roadmap. That's going to make a pretty weak backend type, who are usually very familiar with the "how long does X operation take?" game

<comment><USER27> Looks like it's mostly targeting application developers that don't normally deal with nuances of specific microarchitectures.

</comment></comment><comment><USER28> This was fun to look at from a novelty perspective as a native application developer.

Q: Should Rust be considered a noteworthy web backend development option, or is there just not much community activity for that?

<comment><USER29> Probably not in a list like this. If you're just getting started you want something where you can be productive fast. And I say this as someone who writes web backend code almost exclusively right now.

The way that I see rust is as a language (& ecosystem) that is all about making things right, reliable, & efficient. That unfortunately comes with a bit of cognitive overhead during development. If you combine that with learning rust it gets a bit more difficult, and if you combine that with learning programming at the same time too you're going to end up with a lot of people quitting out of frustration.

</comment></comment><comment><USER30> Is anyone still developing multi-page architecture apps? Seems like you could still develop simple applications a multiple of times faster with Ruby on Rails or Django and sprinkle in Angular and/or AJAX Requests as needed. Surely that is still a thing. I know that a lot of you are all engineering for Netflix scale but developing two independent applications that speak to each other over an API spec sure has it's costs and is a drag on a small scrappy team wanting to iterate quickly.

<comment><USER31> It totally depends on task at hand. If you have a db/forms heavy project than Rails/Django gives you advantage, if your project is more driven by interactions and subtle UX then SPA lets you focus on that.

Like, imagine how hard it would be to make Shopify as SPA ([https://engineering.shopify.com/17489056-rebuilding-the- shop...](https://engineering.shopify.com/17489056-rebuilding-the-shopify- admin-improving-developer-productivity-by-deleting-28-000-lines-of- javascript)). On the other hand, Trello would never feel so fluid if it was driven by server rendering (notice how weird Github projects comparing to Trello).

Personally, I've been doing SPA for years and think it's the right way for reach UI. But recently I had to build a form-heavy app and decided to go with classical server-side setup + some jQuery on client. Old school but very productive.

EDIT: added link to shopify blog.

<comment><USER30> Of course, right tool for the job. I'm biased since most of our projects are heavy on crud forms and database entry. Accounting and loyalty space.

</comment></comment></comment><comment><USER18> My initial reaction to this was "Good grief, no one needs to know all this stuff!" Then I saw the "Pick any" label in the key and it made a lot more sense.

</comment><comment><USER32> "star building" should be at the top

</comment><comment><USER33> The backend is missing Java/Scala frameworks. Also, maybe Hack can be added to the PHP branch.

</comment><comment><USER34> It's pretty interesting that all of the backend languages are all interpreted languages. No love for any typed languages?

</comment><comment><USER35> Would anyone care to estimate how much time would take to someone starting from scratch be able check all bright yellow boxes?

<comment><USER36> A lot of time. Which roadmap in particular were you asking about? I'll attempt to estimate each of the three, though I'm sure others here will have better estimates in each. I'll overestimate as well, as much as double what I think is fair because, if we're honest, developers are bad at estimating large time periods.

This is hours-technology pairing. A '?' designates uncertainty.

Front-end:

010 - <USER2>

024 - <USER3>

070 - <USER4>

020 - jQuery (controversial / optional, I'd suggest it)

026 - JavaScript: ES6

010 - JavaScript: gulp

012 - JavaScript: npm / Yarn

0?? - JavaScript: Webpack

0?? - JavaScript: Typescript

/// TOTAL: 172+ hours

Back-end: (going to generalize)

060 - Language: Ruby / Python / PHP (+20) / Node.js (+??)

006 - Package manager

012 - Testing framework

024 - Web framework

120 - Web Server, Restful APIs, ..., Docker

0?? - Storage: Caching

036 - Storage: Relational databases

020 - Non-relational (NoSQL) databases

080 - Search engine, GOF design patterns, ... (+??)

/// TOTAL: 368+ hours

DevOps:

120 - Operating System

080 - <USER5>

140 - <USER6>

0?? - CI / CD

0?? - Monitoring & Alerting

030 - <USER7>

030 - Cluster Managers

050 - Web server

999 - Love for terminal

??? - Everything else

/// Total: 450+ hours

You'll notice there's a lot of overlap between back-end and devops, though. I'd say this is the _minimum_ time you'd need to understand the basics of each branch, but you'd understand enough to be competently productive.

<comment><USER18> Pah, that's less than six weeks (if you don't sleep)!

I'd put a more realistic estimate at 2-3 years, though obviously anything involving JavaScript will have changed at least 6 times whilst you've been attempting to learn it.

<comment><USER36> That's, true, but I was trying to estimate for a bare minimum, basic competency to be productive. This doesn't include the countless hours debugging, searching StackOverflow/Google and learning all the "gotcha"s in each technology. Which all just takes experience and projects not necessarily time.

</comment></comment></comment></comment><comment><USER37> This is quite an accurate overview of the surprisingly vast vocabulary of concepts a web developer needs to be familiar with. It certainly looks a bit daunting all laid out like this!

</comment><comment><USER38> How come the 2017 backend chart doesn't have Golang?!

<comment><USER39> It is correctly mentioned as "Go".

<comment><USER38> Oh, it's barely visible and for some reason it's in the same bucket as C# and Java. That's so lame.

</comment></comment></comment><comment><USER40> This is really useful. We're building a lot of courses for Codevolve.com right now and definitely will be using this as a reference for where to focus.

</comment><comment><USER41> It would be good to see the serverless architectures (eg. AWS lambda, API gateway) added to the backend and/or devops section.

</comment><comment><USER42> Nothing about other languages transpiled/compiled to JavaScript? No Clojurescript, Elm or Purescript?

</comment><comment><USER43> I feel like this could also use DNS for backend or devops

</comment><comment><USER44> Focus on HTML and CSS. Those will still be relevant in ~10 years, while most of today's JavaScript hotness will be nothing but a memory long gone.

</comment><comment><USER45> Nice. What was this drawn with?

<comment> et-al Balsamiq - [https://balsamiq.com/products/mockups/](https://balsamiq.com/products/mockups/)

</comment></comment><comment><USER46> Like it</comment>


IO vs. JSON – Differences between the text-based data serialization formats - <AUTHOR> https://medium.com/internet-object/internet-object-vs-json-differences-between-the-two-text-based-internet-serialization-formats-3f5ce6e95deb <comment><USER2> Without an explicit end delimiter I can't tell if I have all the records in the data. Looking for an EOF kind of works locally but not in HTTP requests. Firing data around the web is not reliable. JSON has the _massive_ advantage that if you don't have all the data, including that closing curly bracket, it won't parse correctly. This format doesn't have that. Consequently I _can 't_ use it.

If you want JSON-but-with-<missing feature> there's always [https://json5.org/](https://json5.org/).</comment>


Scientists bring new insight into how animals see - <AUTHOR> https://phys.org/news/2019-01-scientists-insight-animals.html <comment><USER2> Article: [https://www.pnas.org/content/115/50/E11817](https://www.pnas.org/content/115/50/E11817)

Awful headline. This isn't about "how does my dog see the world", but about an energy-preservation mechanism in the retina.

They found that when it's dark out, the neurons in the optical nerve fire less frequently, effectively reducing the bandwidth of information because most of it is noise anyway, and that this regulation is based on the signal of ambient light receptors [0] (which make up only about 1%, compared to rods and cones), which the authors chemically stimulated to confirm the hypothesis.

[0] [https://en.wikipedia.org/wiki/Intrinsically_photosensitive_r...](https://en.wikipedia.org/wiki/Intrinsically_photosensitive_retinal_ganglion_cells)</comment>


A few questions about startups. - <AUTHOR>

<comment><AUTHOR> Its often said that the startups are successful, especially by the venture capitalist firms who fund these startups. It is hard to say, what is intention behind the claim of saying most of the startups as successful, because as far as we could find on the internet there is not a single place which contains the facts and the figures about the success and the failure of the new ventures.

And if so that the people were successful, who were they from were did they start, were their background as modest, or where they some geeks like Einstein or from the Wharton business school?

Is there is a place where we can find who these people where and what was special in idea which made them successful? All that are stated at time are bug names like Sabeer Bhatia, and Steve Jobs. But definitely all cant be them, and that's for sure.

In short is there any study available which can confirm or prove that taking a risk is not foolishness, but its a calculated path that could take you to success.

<comment><USER2> _Founders at Work_. <http://www.amazon.com/gp/product/1590597141>

</comment></comment><comment><USER3> I have never seen such a book but then I have never looked for such a book. I was convinced that when I started my first startup, I had a disease. Now that I have started my second, I know it is terminal.

If you have read a book to convince yourself that you need to start, then chances are you have no need to. And that's not necessarily a bad thing.

\--Denny--

Denny K Miu "Startup for less - Survival Guide for Bootstrapping Entrepreneurs" <http://www.lovemytool.com/blog/startup-for-less.html>

<comment><AUTHOR> Denny, its not about reading a book o convince oneself, rather it is about taking a calculated risk. I want to convince myself about starting a startup based on rational thought and facts and figures, and not based on emotions. Everyone wants to start something new and make innovations, but I do not want to screw up my life chasing a though that has a very marginal success rate.

It is not about convincing, it is about facts, and they can speak for themselves.</comment></comment>


Microsoft 'Doubling Down' on Blockchain - <AUTHOR> https://www.computerworld.com.au/article/661159/microsoft-doubling-down-blockchain/ <comment><USER2> Can someone tell me what the point of a managed blockchain is? I may well be misunderstanding but it sounds to me like these cloud services are just spinning up some machines that use a consensus protocol to maintain your chain. But you control all the machines, right? How is that decentralisation? Genuinely asking, I think I have missed something important.</comment>


WebAssembly brings extensibility to network proxies - <AUTHOR> https://opensource.googleblog.com/2020/03/webassembly-brings-extensibility-to.html <comment><USER2> [https://www.destroyallsoftware.com/talks/the-birth-and- death...](https://www.destroyallsoftware.com/talks/the-birth-and-death-of- javascript) I guess Gary was right. In other news, we have five years of war ahead of us.

</comment><comment><USER3> So, Envoy will be embedding WebAssembly alongside (or instead of) Lua?

Are other projects moving from Lua (or other embedded scripting languages) to WebAssembly? What are the benefits of compiling an extension to WASM rather than writing it in Lua?

<comment><USER4> The obvious benefits (to me) are performance and security.

Performance: Other than the need for trampolines between the host and the wasm code, WebAssembly runs at essentially full speed. Lua is fast for an language built on dynamic types and dynamic dispatch - which is to say, quite slow.

Security: The reference Lua implementation was not designed for untrusted code; there have been various attacks where loading invalid bytecode could grant arbitrary execution. Using a format designed for executing untrusted code has real advantages there.

<comment><USER5> WebAssembly is slower than native too, how does it currently compare to Lua with a comparably safe & high level language?

<comment><USER6> Here an emulator author benchmarks Wasm implementation against JavaScript and Closure (2018).

Wasm is 1.5x - 11x faster depending on a browser and such.

Here is a very technical 2019 paper comparing Wasm against native compilation. Wasm is 1.5x slower than bare metal [https://www.usenix.org/system/files/atc19-jangda.pdf](https://www.usenix.org/system/files/atc19-jangda.pdf)

<comment><USER5> I think the first link is missing? But emulators are pretty unrepresentative for this use case and they're often written in low-level & unsafe languages.

The second is about benchmarking C, I suspect it doesn't give us a lot of information in this question either.

</comment></comment></comment></comment></comment><comment><USER7> FWIW, Ethereum WASM (ewasm) has a cost (in "particles" ("gas")) for each WebAssembly opcode. [1]

Opcode costs help to incentivize efficient code.

ewasm/design /README.md [2] links to the _complete_ WebAssembly instruction set. [3]

[1] [https://ewasm.readthedocs.io/en/mkdocs/determining_wasm_gas_...](https://ewasm.readthedocs.io/en/mkdocs/determining_wasm_gas_costs/#gas- costs-of-individual-instructions)

[2] [https://github.com/ewasm/design/blob/master/README.md](https://github.com/ewasm/design/blob/master/README.md)

[3] [https://webassembly.github.io/spec/core/appendix/index- instr...](https://webassembly.github.io/spec/core/appendix/index- instructions.html#index-instr)</comment>


Grace Hopper on Letterman - <AUTHOR> https://www.youtube.com/watch?v=1-vcErOPofQ#t=33

<comment><AUTHOR> She's delightful. She drops a bit of a math joke at 2:25, which goes right over Letterman's head.</comment>


Glacier Costlier Than S3 for Small Files - <AUTHOR> https://therub.org/2015/11/18/glacier-costlier-than-s3-for-small-files/ <comment><USER2> The real question is why are people glaciering small files?

Tar everything and send it up. And then do an incremental backup

Amazon charges per operation, reduce the number of operations

<comment><USER3> My guess is they don't realise. AWS let's you setup lifecycle rules to archive S3 objects to Glacier automatically. It doesn't explicitly say it is cheaper (it says "this may reduce your costs"), but they probably just saw the headline prices for Glacier and moved everything.

<comment><USER4> Also, I would guess a lot of Glacier users are probably just slotting it in place of some other system that doesn't have the same pricing model.

</comment></comment></comment><comment><USER5> This is one of the things I love about GCS Nearline, it really is a penny per byte and then the whole retrieval charges (which for my lazy rsync backup is never).

Disclaimer: I work at Google on Compute Engine, but not on GCS.

</comment><comment><USER6> > For consistency and precision, the following units are used throughout this > article.

> KB: 1,024 bytes, expressed as 2^10

Why not just use KiB? Unlike KB, it's unambiguously binary.

<comment><AUTHOR> I primarily wanted to note that I used 2^X notation in the math, in case it was confusing for folks. I used KB/MB/GB to be consistent with the language AWS uses on their S3 pricing page ([https://aws.amazon.com/s3/pricing/](https://aws.amazon.com/s3/pricing/)).

</comment></comment><comment><USER7> Glacier has a very clear use case, to my mind.

It is useful for keeping archives of massive data you're _unlikely to ever need,_ but legally obliged to keep around, or just want to have available for a very improbable later examination. Think some huge transaction logs of two years back.

For a case like this, you don't _need_ fast retrieval, and mostly you don't need retrieval at all. You plan ahead to only ever retrieve a small percent of these data. The rest will be silently discarded when retention period has expired.

If your use case is not like that, Glacier probably makes little sense for you.

This is totally _not_ a backup which you likely keep in order to restore the entire state from as soon as possible.

<comment><AUTHOR> Right, but you missed the salient point: it also does not make sense for files smaller than about 200KB.

</comment></comment><comment><USER8> AWS is more honest with S3 Infrequent Access: [https://aws.amazon.com/s3/storage- classes/](https://aws.amazon.com/s3/storage-classes/)

No additional metadata, but you get charged at least for 128 KB . Luckily lifecycle transition doesn't move files smaller than 128 KB. However, even using lifecycle transition you pay $0.01 per 1000 transitions. It doesn't seem much but for smaller items it can decrease savings a lot. E.g. if you average file is 6 MB, than you will loose 4 days of savings on S3 IA comparing to standard class.

</comment><comment><USER9> Personally, I'm looking forward to Backblaze's cloud storage, which is being advertised at $0.005/GB/month. Cheaper than glacier, without all of the transaction fees.

[https://www.backblaze.com/b2/cloud- storage.html](https://www.backblaze.com/b2/cloud-storage.html)

<comment><USER10> The whole custom API instead of S3 or Swift compatibility is really, REALLY annoying.

<comment><USER11> Someone from Backblaze previously mentioned on HN they're working on an S3-compatible API.

</comment></comment></comment><comment><USER12> AWS has a wizard for bucket storage policy where they tell you this information explicitly with a big warning sign.

</comment><comment> aps-sids Unfortunately, I learned it the hard way :(</comment>


Cmd/compile: Go 1.8 regression: sync/atomic loop elided - ainar-g https://github.com/golang/go/issues/19182 <comment><AUTHOR> This is interesting, actually.

As the language is specified, it's not wrong to just ignore that add completely -- the variable isn't used inside the goroutine, and you're not guaranteed a goroutine will run at any particular time.

So, code executed right after that routine is spawned will be hitting the 'old' value anyway; hence Dvyukov's comments that this is arguably to spec, or within spec.

Think if you actually wrote this code; you'd have some weird behavior if the compiler did what you 'expect' \- a couple outputs of low integers then some high ones as the goroutine gets scheduled in. So it's almost certainly just 'wrong' to write something like this, under most (all?) circumstances.

Because sync.Wait() isn't used, there's no guarantee the goroutine will execute at all before program halt.

That said, I bet there's some related more reasonable scenario where you could argue the compiler should at least do the adding. I'm not sure why atomic.Add* should get special treatment though, and it looks like the fix is to remove some escape-analysis type code, so I'm curious how this will get fixed.

<comment><USER2> Yeah, this particular instance seems ok to me. This one makes the example feel weirder:

      func main() {
      	runtime.GOMAXPROCS(runtime.NumCPU())
      	fmt.Println(runtime.NumCPU(), runtime.GOMAXPROCS(0))
      	started := make(chan bool)

      	go func() {
      		started <- true
      		for {
      			atomic.AddUint64(&a, uint64(1))
      		}
      	}()

      	<-started
      	for {
      		fmt.Println(atomic.LoadUint64(&a))
      		time.Sleep(time.Second)
      	}
      }

Here we explicitly wait until the goroutine is started, so we know it's scheduled by the time our other loop runs. Here on my computer with go1.8 linux/amd64 it still optimizes out the while loop, which makes sense as nothing changed that would convince the optimizer the loop should remain given the compiler's current logic.

If you add time.Sleep(time.Millisecond) to the goroutine loop or any other synchronization it works fine. I'm having trouble thinking of a real world example where you'd want an atomic operation going ham in a loop without any sort of time or synchronization. At the very least a channel indicating when the loop is done would cause the loop to compile.

<comment><USER3> >>Strictly saying this is confirming behavior as we don't give any guarantees about scheduler (just like any other language, e.g. C++). This can be explained as "the goroutine is just not scheduled".

Not a GO developer. On a multi-processor machine, how is this a conforming behavior? Is "scheduler cannot give any guarantees" acceptable?

<comment><USER4> 'Is "scheduler cannot give any guarantees" acceptable?'

Most schedulers give far fewer _guarantees_ that you might think. A guarantee to be a guarantee must be true no matter what you do within the boundaries of the language. If you create a goroutine fork bomb

        func fork_bomb() {
            for {
                go fork_bomb()
            }
        }

Go doesn't, to the best of my knowledge, guarantee that any other goroutine will get any execution time, or guarantee much of anything will happen. Your OS is likely to have similarly weak guarantees for the equivalent process bomb, unless you do something to turn on more guarantees/protection.

You have to go into some relatively special-purpose stuff before you can get schedulers that will guarantee that some process will get scheduled for at least 10ms out of every 100ms or something. And then, once you get that guarantee, you'll pay some other way.

Given the fact that most of our machines are incredibly powerful, and that a lot of them still get upgraded on a fairly routine schedule in a lot of dimensions even if single-core clock speed has stalled out, most of us prefer to work with things that just promise to do their best as long as you don't overload them, because the other prices you have to pay to get _guarantees_ turn out not to be beneficial on our monster machines. Of course one should always have their eyes out for when that may not be the case at some point, but in general we're headed away from rigorous guarantees in favor of shared resources that are cheaper and more scalable and making up the difference in volume, rather than trying to get better guarantees.

</comment></comment></comment></comment><comment><USER5> It is strange, the atomic package[0] exposes various low-level atomic functions but none of them seem to take ordering arguments and the docs don't mention a default order either.

Atomicity and ordering constraints are orthogonal, so you can have an atomic add but relaxed ordering, which allows the compiler to do lots of optimizations on those adds, presumably to the point where they are optimized out completely.

If this is the cause it seems like pretty bad API design to not expose the flags on low-level library functions. Even high level languages like java expose them[2]

[0] [https://golang.org/pkg/sync/atomic/](https://golang.org/pkg/sync/atomic/) [1] [http://en.cppreference.com/w/cpp/atomic/memory_order](http://en.cppreference.com/w/cpp/atomic/memory_order) [2] [http://download.java.net/java/jdk9/docs/api/java/lang/invoke...](http://download.java.net/java/jdk9/docs/api/java/lang/invoke/VarHandle.AccessMode.html)

<comment><USER6> There is no official ordering provided by the atomic package. An atomic package isn't very useful without ordering semantics. And ordering actually _is_ provided, it's just not part of the documentation.

The background is that the Go team were initially reluctant to even make the atomic package public. It's mostly there to support the runtime and the sync package which needs fiddly low level concurrency things. But, it exists and it is public. Some people on the Go team regret this (I believe).

Giving clear and precise semantics to the atomic package was delayed because, it's a lot of difficult work and you only get to do it once. There was discussion around trying to find a clear and simple semantics.

In the mean time the atomic package actually had ordering, because you would have a hard time writing runtime or the sync package without this. Also the race detector assumes some kind of ordering for operations in the atomic package. It was confirmed by Dmitry Vyukov that the race detector assumed C/C++11 acquire/release semantics for atomic operations.

After some discussion it was decided that C/C++11 semantics should be adopted. But the documentation has not been updated to reflect this. Updating the documentation doesn't appear to planned right now. Which is a shame.

[https://github.com/golang/go/issues/5045](https://github.com/golang/go/issues/5045)

Above I have sort of put words into the mouths of the Go team (or some members of it). It's not my intention and bad mouth anyone, and I think everyone was making decisions for good reasons. Whether I agree or not :)

With respect to adding ordering arguments, Go most likely won't get those for a very long time.

</comment></comment><comment><USER7> Quote of the day:

 _" Language implementation[s] become useless when they take formal properties to the extreme."_

([https://github.com/golang/go/issues/19182#issuecomment-28107...](https://github.com/golang/go/issues/19182#issuecomment-281076863))

</comment><comment><USER8> As many of the comments point out it look like this isn't a compiler bug. The example code makes assumptions about the goroutine execution order without using the facilities (e.g. channels) that guarantee the right ordering. The use of atomic doesn't seem to be relevant.

The example code is what I call "works by chance" which I would contrast with code that "works by design". I think some people are trying to argue that a language should prevent developers from writing code that "works by chance" but I don't think that's actually possible. It's the equivalent of saying I want to be able to type anything I want into my editor and have it compile into doing what I think it should do... A "works by design" code here would be adding channel synchronization points between the two goroutines such that the desired execution order is guaranteed.

It's also IMO not reasonable to expect a new compiler to produce identical results to an old compiler. E.g. if the compiler does a better job your code may run faster (or slower) which may break something if you've assumed that something takes so long to run (e.g. some hard coded timeout in some other component).

At least the 1.8 compiler behaviour is deterministic. So code written assuming some particular value of a would either work or fail consistently. Previously you could construct some code that fails randomly.

</comment><comment><USER9> can somebody comment on what's happening there? I don't know go and i can't put the pieces together right now. Also aren't optimising-transformations not checked (verified) for correctness? If not, how can the authors be confident in the optimisations? Simple tests? Or is it a bug?

<comment><USER10> Variable writes that look like they have no side effects may actually be intended for another thread to read (but hopefully most reasonable programs don't do this without some good explanation). However, many concurrency models say that this method of inter-thread communication is Okay to optimize out, because most threading libraries (including Go's) make no guarantees about the order in which threads are scheduled. Therefore, removing the "writing" thread entirely is equivalent to it never being scheduled.

However, this is not the case for atomic operations (which are generally specifically intended for communication via shared variables). This optimization of removing the writing thread entirely isn't allowed if atomic operations are used, because those actually do come with a guarantee that other threads will get to see the update in finite time.

Go was incorrectly "optimizing" the atomic operations out entirely. It's a fairly subtle bug, actually, but still likely a big deal for the few programs communicating via shared variables.

<comment><USER11> > However, this is not the case for atomic operations (which are generally > specifically intended for communication via shared variables). This > optimization of removing the writing thread entirely isn't allowed if atomic > operations are used, because those actually do come with a guarantee that > other threads will get to see the update in finite time.

That sounds more like volatile than atomic. At its core, atomic just means that observer may see either pre-update or post-update state but won't see intermediate states.

<comment><USER10> I agree that this sounds more like "volatile", but it still makes sense that programmers should be able to rely on atomic operations for inter-thread communication.

According to the comments on the bug report, this behavior is inspired by C++'s <atomic> library, which guarantees cross-thread visibility.

<comment><USER12> > I agree that this sounds more like "volatile", but it still makes sense that > programmers should be able to rely on atomic operations for inter-thread > communication.

Only in the sense that they won't see inconsistent (intermediate) states.

Atomicity shouldn't guarantee order _per se_ \- if you want both, you need a mutex.

<comment><USER13> Ordered atomic operations like C++ std::atomic or java/C# volatile do guarantee some ordering. For example if one thread modifies an object and then stores a pointer to an atomic variable, under default visibility rules, another thread reading that pointer from the atomic variable is guaranteed to see the modifications to the object itself, i.e. the update, the store and the remote load are ordered.

It is possible to have a model where all atomic operations are relaxed (i.e. unordered) and use explicit barriers for ordering (which is closer to how some, but not all, CPUs work), but it is significantly harder to reason about and prove algorithms correct under it.

edit: wording

<comment><USER14> No. Read the spec. There is no deadline for atomics to be visible. What is true is that some operations have happens-before ordering, and if a store happens-before a load, the load will see the result of the store.

<comment><USER13> Did you reply to the wrong post? My post was only about ordering.

Still the C++ spec has wording about making stores visible in a reasonable time. The wording is non-normative as they run out of time (ah!) while trying to come up with a more formal (and implementable) specification.

edit: oh, I see I wrote 'default visibility' instead of 'default ordering'.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> What's funny to me is: if you don't do the add in a loop, go1.8 generates the add code:

        go func() {
            atomic.AddUint64(&a, uint64(1))  // no loop
        }()

To me, it's the unpredictability of how compilers will choose to apply these extreme optimizations that is most frustrating. Reasoning from the spec ("the goroutine might not be scheduled anyway") isn't very satisfying when the compiler clearly doesn't follow logic like this. The implementers reason from the spec and then glue together a mishmash of targeted optimizations-- presumably the ones they think will be most helpful.

I suppose many modern modes of programming with composable abstractions result in lots of dead code, and it's a net win for the compiler to aggressively try to get rid of it. With simpler languages like C or Go, though, I might prefer a rule like: "I wouldn't have written the code if I didn't want any instructions generated from it."

<comment><USER16> Luckily go does provide ways to see the compiler's decisions. I'm not sure if it goes far enough here though

</comment></comment><comment><USER17> What is the overflow behaviour here?

Surely in the case of this example code, the compiler sees an overflow is going to occur, leading the variable back to zero.

By removing all the code, the compiler has simply combined all the additions into a single addition which overflows back to the initial value.

Seems working as intended to me.

<comment><USER18> As far as I can tell it's just as broken if you change the Add to a Store (at least, doing that and breaking in the main routine when it's > 1 still times out on play.golang.org). That just turned into a (terrible) spinlock and has no overflow issues.

On mobile, so I can't test with a real toolchain. [https://play.golang.org/p/DlWBh1Via4](https://play.golang.org/p/DlWBh1Via4)</comment></comment>


Derby v0.5.0 – The first OT-powered realtime web app framework - <AUTHOR> http://blog.derbyjs.com/2013/06/04/derby-v0-dot-5-0/ <comment><USER2> I currently work on one of the most trafficked production Derby applications[0] and I must say that this is a very welcome change. Derby's creators have time and time again proven that they care about the nodejs ecosystem. By funding ShareJS's development, they're ensuring that an unbelievable tool (simplified OT) will be sticking around for quite some time. Writing code with Derby has been far and away the most pleasant development experience I have ever had.

If there's been one issue with Derby so far, it's been Racer. The data sync- ing engine leaks memory and is largely unstable. We've suffered far too much downtime due to these issues. Moving to a fresh backend with ShareJS enables Nate, Brian, Joseph and the rest of the team to rework the scope of the framework with some of the larger goals in mind – things like horizontal scaling and powerful conflict resolution. We have yet to upgrade to 0.5 (the upgrade guide was literally just released), but it appears to be a much more stable foundation on which to build a "real-time" web application. I'm sure we'll have to put up with bugs for quite a few weeks, but this is a powerful step towards reaching 1.0. Thanks guys!

[0] <https://habitrpg.com> (source: <http://github.com/lefnire/habitrpg>)

<comment><USER3> That is a really cool site, and a really great idea! Nice work.

I'm curious why a "real-time" framework is needed for this type of app, though -- why not Backbone with REST? Is it so that you can view others' pages to see their habits/dailies/todos get updated in real-time...?

<comment><USER4> As far as I know, this was a project that wasn't expected to get this big — more about learning Derby for the developer. And then it got big :)

tl;dr: No big reason. He likely agrees with you.

</comment></comment></comment><comment><USER5> For anyone else wondering what OT is: <http://en.wikipedia.org/wiki/Operational_transformation>

The gist of it seems to be that its a set of data models that make handling concurrency control and conflict resolution easier in the context of a single blob of data being edited by multiple users simultaneously (similar to Google/Apache Wave)

<comment><USER6> Is anyone aware if Racer uses OT to sync the model as a whole (OT on a tree structure), or if it is used on a per-leaf basis to merge operations on values? Firebase seems to have solved this issue (with their Firepad project) by using their tree/json sync engine to transmit the OT operation primitives.

<comment><AUTHOR> OT is done at the document level. Documents are JSON objects of arbitrary complexity. Any mutation of the JSON object can be composed against any other mutation of the JSON object.

Firepad doesn't actually do OT of JSON. In Firepad, a string OT algorithm is used to merge text edits, and the metadata describing rich text is separately managed as span objects, which get modified in accordance with text changes.

Firebase provides conflict resolution of JSON structures using their Transaction primitive, which allows them to create a Software Transactional Memory used to update the journal that powers the text OT in Firepad. ShareJS inside of Derby uses a similar approach to allow multiple servers to access the journal, but it is done in Redis with Lua scripting.

</comment></comment></comment><comment><USER7> I've been following both ShareJS and Derby because, while I believe that the future of web application development is in realtime 'holy grail' frameworks, I very much dislike many aspects of Meteor, such as disregarding npm, the lack of proper server-side rendering (without the overhead of DOM) and the lack of importance placed on conflict resolution between client writes.

I really want Derby, or something like it (eg AirBnB's rendr combined with realtime, OT models and collections) to succeed, however it really seems like Derby needs more community support and evangelism behind it, because I can't help but get the impression that most of the community focus in this space currently is on Meteor. As far as I am concerned, Meteor is the PHP of realtime 'holy grail' frameworks, as enjoys from just the same kind of popularity through 'worse is better' (where 'worse' is for the reasons I mentioned above). However, without a palpable, _visible_ sense of community enthusiasm, a lot of fence-sitters such as myself are less likely to jump on board.

Also guys please do something about racerjs.com, it doesn't inspire confidence in the project when it is continuously down.

</comment><comment><USER8> Am I the only one who would look up a possible product name before using it? There already is a (well known) software from ASF named 'Derby': <http://db.apache.org/derby>

Why would you start such a confusion? Why would you want to fight with that software for page ranking? Why does this mostly happen to JS technologies?

<comment><USER9> > Why would you start such a confusion?

There are far more software project starts than good names out there. Finding a good name that is _also_ not used by any other project can take a bunch of time and energy away from your code.

> Why would you want to fight with that software for page ranking?

The vast majority of software projects never make it far enough for the name to matter. You don't know which category your project will end up in when you start it.

> Why does this mostly happen to JS technologies?

Because JS is popular and makes it easy to start new ad-hoc code libraries. There are also a lot of half-baked libraries out there that will waste your time. So many developers end up making their own.

<comment><USER8>
      There are far more software project starts than good names out there.

I doubt that. Define 'good name'. Also, for open source software it does not matter that much what it is named. Who would care if Python was named e.g. Snake or Juice or Foo? As long as it is somewhat unique and catchy it should be fine, shouldn't it?

      You don't know which category your project will end up in when you start it.

Exactly, you do not know it. If your product is successful you want it to be unique. Just imagine the number of wrong tags on SE. And if you product is not successful it is even worse to add unnecessary confusion.

      Because JS is popular

Surprisingly and unfortunately, yes. But other technologies have had their time as well, e.g. I can't remember any ambiguous naming in Java. Anyone?

      There are also a lot of half-baked libraries out there that will waste your time. So many developers end up making their own.

Ok, why not just name it jQuery then? Hardly an excuse for poor naming choice.

<comment><USER9> > I doubt that. Define 'good name'.

A good name is pronoucable, spellable, memorable. Common English words can be good choices. Compare the number of common English words (thousands) with the number of Sourceforge, Github, Google Code, Codeplex, Bitbucket, etc. projects (millions).

> Ok, why not just name it jQuery then?

jQuery is a) perhaps the world's most popular project in the domain of Javascript libraries, and b) not a proper English word.

'Derby' is a relatively common English word and two Derby projects are in mildly different domains. I don't personally know of anyone using either project (unlike of course 'jQuery').

</comment></comment></comment></comment><comment><USER10> I'm simultaneously disappointed and relieved that this is not a web framework powered by Operating Thetans.

However, I will have to inform Mr. Cruise that his e-meter will not, in the near future, be able to predict his website's uptime.

Ahh, the tribulations of modern development.

<comment><USER11> OT stands for Operational Transformation, which is the technology underpinning Google Docs, Google Wave, Etherpad, ShareJS etc. <http://en.wikipedia.org/wiki/Operational_transformation>

<comment><USER10> I appreciate the information, but my comment was entirely an off-topic jab at Scientology. Where applicable, I apologize for the lack of sarcasm indicators. :)

</comment></comment></comment><comment><USER12> How does Derby stand up to Meteor? I'm really glad Derby has updated but Meteor (at least to me) seems miles ahead of the curve right now.

<comment><USER11> Meteor is more mature, but it doesn't do server side rendering or operational transform for document updates. As far as I know, meteor is also limited to a single server. Derby now supports scaling over multiple processes on multiple machines. On <http://sink.derbyjs.com/> I get DOMContentLoaded (including all the page content) in 70ms.

<comment><USER13> I thought Meteor added server-side rendering a while ago? [http://www.meteor.com/blog/2012/08/09/search-engine- optimiza...](http://www.meteor.com/blog/2012/08/09/search-engine-optimization)

Or do you mean something else? I'll admit to only really watching all of this from afar, I could have my terminology backwards.

<comment><USER14> Meteor's server side rendering is a hack that uses PhantomJS and is primarily for googlebot

<comment><USER13> Sure, but it still does it, no? I agree it's architecturally icky, but it gets the job done, I assume?

<comment><USER2> It's not really the same thing. Since Derby is natively rendering server side, it's blazingly fast. You get the best of both worlds, render the initial page load on the server, and then all subsequent loads are on the client (with the data being sent over the wire using websockets or browser channel). This means you're getting initial page loads in the 70-300 ms range whereas rendering via PhantomJS and then serving to the client is much slower and much more CPU intensive.

As far as I know, Meteor doesn't even serve those PhantomJS rendered pages to the average user - only to crawlers - presumably for the reasons above.

<comment><USER13> Gotcha. Thank you.

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> It's too bad that they didn't notice, or didn't bother to find out, that the name "Derby" has already been used for years by an open source relational database project: <http://db.apache.org/derby/>

</comment><comment><AUTHOR> Definitely try playing the collaborative story game demo explained in the post: <http://stories.derbyjs.com/>

</comment><comment><USER16> Very cool. But Derby still needs to support IE in order to be taken seriously.

Otherwise look into AirBnB Rendr and Yahoo Mojito if you want to support both client side and server side rendering.

<comment><USER16> Also, Derby needs to decouple from MongoDB.

<comment><AUTHOR> While we've only written a MongoDB plugin so far, we have designed specifically to be work with any similar datastore. Contributions of other database plugins are welcome. The Mongo implementation is here for reference: <https://github.com/share/livedb-mongo>

</comment></comment></comment><comment><USER17> This is cool but I'm on the @SailsJS bandwagon -

<http://sailsjs.org>

However Sails wants to add OT's, and add-ons that do Meteor-style syncing. I know this is wishful thinking, but maybe Sails and Derby could find some way to merge, or otherwise work together?

Here's the Sails group - <https://groups.google.com/forum/#!forum/sailsjs>

<comment><USER18> Wait - I just looked at the SailsJS docs, and it looks like Sails is like Tower -- that is to say, a Rails-style framework with better WebSocket support (really, more like Merb+DataMapper, because of the easy json api + agnostic ORM).

But if that'd be the case, it's a very different thing from Derby/Meteor/SocketStream, where so much code is shared from client+server that the apps can often run offline and then sync data.

<comment><USER17> Yes, they have different goals - by design, Sails is frontend-agnostic. But we want to add a layer that supports the "template syncing" concept, however it will be an add-on on top of Sails core.

Aside from that, Sails brings a lot to the table (awesome ORM, asset pipeline, built-in API, etc). All we need are OTs and things'll be rockin :D

<comment><USER19> The only thing I don't like with Sails is the ORM, actually. I was wishing for something like Mongoose.

</comment></comment></comment></comment><comment><USER20> Can any one who's looked at event sourcing comment on the relationship between ES (which is basically a fold over a sequence of events onto a state object) and OT. Superficially it would seem that they are very similar, with OT perhaps being a way to combine the events before applying them to the state.

The reason I ask is that I'm thinking of the feasibility of modelling a disconnected client that continues working from some state. Could you think of this as collecting its list of edits and then applying them on top of the state of the world when that client re-connects (sort of like a git rebase)?

<comment><USER21> I've been working on a real-time collaborative app that does just that: the client collects a list of edits and tries to push them to the server. It always displays the state as the last known accepted state with the local edits replayed on top. The server accepts edits from clients, gives them a total order, and rebroadcasts them. It's intended to be used while connected, but the protocol has no problem dealing with arbitrary gaps in connectedness, so adding an official disconnected mode would be trivial.

Importantly, "edits" here are discrete and independent. They can conflict (in which case it just does last one wins), but they can't affect the meaning of other edits. This scheme couldn't be used for collaborative editing of a linear text document, since e.g. "insert 'a' at position 15" means something different depending on whether it comes before or after "delete positions 5-10".

That problem is what OT solves (by the transform function that lets you commute edits while preserving their meaning). So, yes, that kind of scheme is much simpler than OT, but less powerful. Whether you can use it depends on the semantics of your edits.

</comment></comment><comment><USER22> How long till we can have an OT PaaS?

I love OT RT editing, but want to use it for small parts of my products and don't want the hassle of setting up servers.

If you're looking for your next idea; please, take that and run with it :)

<comment><USER23> I am using Firebase for RT editing on <http://codebunk.com>.

</comment></comment><comment><USER24> Hi,

This is very awesome stuff! =). The real-time syncing is definitely awesome, can't wait to try this in some of my apps.

Good props on the video tutorial as well.

One thing sorely lacking form DerbyJS is tutorials, or any kind of help for beginners - would be awesome to see them release more of these.

Cheers, Victor

</comment><comment><USER25> Congrats and keep pushing forward! Although I have really focused on Python in the recent months, I keep an eye on the Node landscape... Derby always looked promising, along with half a dozen or so frameworks as well.

</comment><comment><USER26> Noob question here, but how is OT different from using, say, websockets?

I get that it's cool, but the question is why? What are the advantages??

<comment><USER27> WebSockets is technology used for real-time updates.

OT is an algorithm that allows sending only changed parts of a document and resolving conflicts made if multiple users are editing the same thing.

</comment></comment><comment><USER28> This isn't a first, a lot of discussions are "off topic"-powered.

</comment><comment><USER29> Nice work!

</comment><comment><USER30> O.k. I live in Derby and that is also slang for a blowjob in America and a horse race. Plus much more I don't care to mention because the others already did. Do you have to do this?

<comment><USER3> Derby is a slang for oral sex in the US? I've lived in the US all my life and have never heard that. Can't find that definition on urbandictionary either (at least not the first page of results)....</comment></comment>


Don't Let Lean Startup Be a Crutch - <AUTHOR> http://startupmanagement.org/2013/07/25/dont-let-lean-startup-become-a-crutch/

<comment><AUTHOR> I'd love to hear from the HN community on this topic. Thanks.</comment>


WSJ: Companies Start to Think Remote Work Isn't So Great After All - <AUTHOR> https://www.wsj.com/articles/companies-start-to-think-remote-work-isnt-so-great-after-all-11595603397 <comment><USER2> That's a maturity problem. Working from home full time magnifies the culture already present, like steroids. If you had a strong office culture that empowered employee initiative and innovation then time freed from driving to the office is a godsend for further increasing productivity. If, on the other hand, the office is like herding kitties without any vision or self-motivation the full time working from is an excuse to watch Netflix all day instead of pretending to work.

</comment><comment><AUTHOR> Article link, No Paywall: [https://outline.com/spYjdY](https://outline.com/spYjdY)</comment>


Is it really hard to make a browser which consumes less battery and resources? - <AUTHOR> <comment><AUTHOR> Why is that our browsers are sucking RAM and battery like monsters? Especially chrome. How complex or hard is it to write software that is good on resources? How has Microsoft achieved this in their edge browser? Is it because of their tight integration with the OS?

<comment><USER2> I do low power embedded stuff, but have a friend who used to work on power management for linux for a uP company. I think we'd both agree that the only way you end up with a low resource system is is power and resource consumption has to be go/nogo test that management enforces ruthlessly[1]. Otherwise what you end up with is a pig.

[1] As in

Developer: this module works!

QA: Power usage went up 5%, rejected.

Developer: _runs crying to management_

Management: Fix or be fired.

<comment><AUTHOR> But the browsers that we use are open source and the scrutiny has to be placed by the community. May be low power consumption must be a definite requirement like security and not an after thought.

<comment><USER2> It's also a nightmare to fix power and resource problems after the fact.</comment></comment></comment></comment>


Chelsea Manning released from jail with expiration of grand jury - <AUTHOR> https://www.washingtonpost.com/local/public-safety/chelsea-manning-released-from-jail-where-she-had-been-held-for-refusing-to-testify-in-wikileaks-case/2019/05/09/dbbbac4c-70ff-11e9-8be0-ca575670e91c_story.html?noredirect=on&utm_term=.95393ab8d565 <comment><USER2> It's insane the level of vindicativeness that government can reach. Worse than any bully and more fanatical than any terrorist.

Of course the government is like this to mere peasants. If you are the wealthy elite, the government acts like a grovel servant rather than master. Expose war crimes - then you are public enemy #1. Be part of the wealthy elite who destroys the financial system and ruins the lives of millions - it's just good ol' boys being good ol' boys.

And yet, everyday, we give more and more power to governments and corporations.

<comment><USER3> There are three facts that are not going to change anytime soon. Number one, integrity is a trait not every human possesses, most don't so the power balance will always be tilted to the other side. Number two, money still rules this world and who has the most of it? Corporations! Number three, society is not going to adapt to each individual, only the other way around.

As a result of these three facts, sometimes life can get pretty tough if you don't join the other side. Integrity was more valued in the past but it simply does not have the same weight in today society as modern competition has ramped up everywhere making everything much more difficult for the average citizen. You either die a hero or live long enough to see yourself becoming a villain. In other words, we either throw integrity out of the window and survive, or we die with it.

<comment><USER4> The math doesn't add up here.

Either integrity is a virtue, or it's not. Either it's something people value, or it's not.

If it's something people value, then it should be one of the attributes people weigh when they choose a spouse/job/politician/cell phone carrier. If it is, then the marketplace of spouses/jobs/politicians/cell phone providers should be incentivized to provide integrity, and also to broadcast that their competitors do not.

I would argue this happens pretty regularly. Samsung using Apple's battery throttling in it's ads comes to mind.

So integrity definitely factors into the marketing calculus of politicians and corporations, but maybe the market doesn't value it enough to offer it the primacy you're looking for.

<comment><USER5> I mean, honesty is also a virtue. So's loyalty.

That doesn't mean we vote for loyal, honest politicians. (Just people who present themselves as such, which can be significantly easier)

</comment></comment></comment></comment><comment><USER6> I didn't realize this about US law but if you've already been convicted of a crime OR they give you immunity you can be forced to testify.

They did this in Aaron Swartz's case and gave people immunity to force them to testify.

I was friends with Aaron and felt that he was mostly a hero in this situation though he was probably guilty of misdemeanor trespass.

It was troubling to see how upset it made my friends that they were going to be forced to testify against someone they loved or were friends with.

<comment><USER7> > I didn't realize this about US law but if you've already been convicted of a > crime OR they give you immunity you can be forced to testify.

Yeah, and it's not obvious why. The insight you're seeking here is that the right against self-incrimination was intended to be a solution to the problem of forced confessions (torture, etc.). It's not there because of some kind of belief that you really have some kind of fundamental human right to testify against yourself. In fact it's quite a bizarre thing to codify in a constitution otherwise.

<comment><USER8> > In fact it's quite a bizarre thing to codify in a constitution otherwise.

I don't know about the US but in many jurisdictions you cannot be forced to testify against close family (spouse, children).

It's clearly about the state not creating a cruel situation.

<comment><USER9> I'd suspect it's more about the state being pragmatic concerning the chances you or I would lie to protect a family member - assuming we have no axe to grind with said family member...

</comment></comment></comment></comment><comment><USER10> "her lawyers reportedly asked that she be confined at home due to medical issues, but the judge said US Marshals would address her care needs."

That is a terrifying sentence to read after having learned about the medical care provided (or not provided...) in US prisons. It almost reads to me as if they planned on killing her.

<comment><USER11> The state of medical care in US prisons is really horrifying. Like this one from four days ago, in which a mentally ill woman gave birth alone in her cell.

[https://www.cnn.com/2019/05/06/us/woman-gives-birth-jail- cel...](https://www.cnn.com/2019/05/06/us/woman-gives-birth-jail-cell-broward- florida/index.html)

<comment><USER12> there isn't much US government managed health care that is worth a damn, just ask veterans or Indians on reservations. when people outside the country keep lamenting the US doesn't have government provided healthcare they need to realize the examples we have are both horrible and many doubt that they have the capacity to not inflict the same shoddy care on the current system.

Most jails and prison care is the same because it is all government managed. while the private jails, which are a very small minority, have problems they are held to higher standard that government does not apply to itself.

the prison/jail system is just a money machine for the sheriff and police unions of the country and therefor actively supported by the politicians they support/control. California had to be compelled by the Federal Courts just to reduce overcrowding and provide better health care

<comment><USER13> > there isn't much US government managed health care that is worth a damn, > just ask veterans

This seems to be incorrect. The VA has problems that should be addressed, but it's still preferable to most veterans than any alternative, which is why they pushed back against Medicare for All's initial proposal to replace the VA with Medicare. Now it retains the VA. We've been in a bunch of silly wars for 18 years now producing a constant flow of new veterans, the VA needs beefing up to deal with that.

[https://www.washingtonpost.com/outlook/five-myths/five- myths...](https://www.washingtonpost.com/outlook/five-myths/five-myths-about- va-health- care/2018/04/13/e5834d1e-3d9a-11e8-974f-aacd97698cef_story.html?noredirect=on&utm_term=.19d12e5691b4)

> when people outside the country keep lamenting the US doesn't have > government provided healthcare they need to realize the examples we have are > both horrible and many doubt that they have the capacity to not inflict the > same shoddy care on the current system.

Most people are "lamenting" that the USA has, what is it now, 30 million people without access to health care? And has 30-40k deaths every year due to lack of access. The expectation is for universal coverage. Not coverage based on circumstance or wealth.

Most people on Medicare defend it regardless of where they sit on the political spectrum. It should be noted that Medicare isn't "government managed health care" it's a payer to private health care providers. The health care providers are still private and privately run, there's no government hospital and doctors don't work for the government. At the moment the popular opinion in the US is not asking for the government to take over all health care management in that way, but instead to provide everybody with access to healthcare by expanding the popular Medicare program to everyone.

</comment></comment></comment></comment><comment><USER14> It would probably have been better to join Snowden in Moscow ... the land of the "free" is applicable if you go up against the military-industrial complex and their agenda.

</comment><comment><USER15> Unfortunately, she's got another subpoena next week for a separate case with the same set of questions.

It seems like her freedom will be short-lived.

<comment><USER16> The current administration has already pardoned one American convicted of a war crime and is considering a second pardon for a war criminal Navy SEAL who was repeatedly reported by fellow soldiers, in one case for murdering a young girl in front of other children without provocation. At least the policy is consitent: if you murder civilians we have your back and whistle blowers will be jailed at all costs.

Even former soldiers are appalled: [https://wapo.st/2DZl4BJ](https://wapo.st/2DZl4BJ).

</comment></comment><comment><USER17> rather than refusing to testify, couldn't you just answer with "i don't recall" to every question (or variations as appropriate)?

<comment><USER18> If they have evidence that a person in your position should reasonably know the answer, then you're in a bad situation. "I don't recall" doesn't fly very well unless you're HRC being interviewed by the FBI

</comment></comment><comment><USER19> So long as you didn't recently talk about it and don't ever plan on talking about it. You can go in and claim not to remember.

</comment><comment><USER20> I'll bet she gets picked up again in just days.

</comment><comment><USER21> I wonder if Manning can pull the ol' Assange and hide in an embassy. It looks like the government is willing to make an example and send Manning to jail for an insanely long time, if not life. I personally would rather live my life in an embassy than in prison (not that this is a choice that I would like to have in the first place)

<comment><USER22> Assange largely discovered "hide in an embassy" is the same as prison, if not worse. Medical care is a huge issue.

</comment></comment><comment><USER23> What's her reason to not testify?

<comment><USER18> She has nothing she can add that wasn't covered in her court martial, and trying to get her to testify now is basically harassment and bullying

</comment></comment><comment><USER16> The above article ignores the reason for her release: the expiration of the grand jury investigating Assange.

Washington Post article here: [https://wapo.st/2E11CUW](https://wapo.st/2E11CUW)

<comment><USER24> > _Her release on Thursday comes after the period during which she could be > held for failing to give evidence expired._

> _" Today marked the expiration of the term of the grand jury, and so, after > 62 days of confinement, Chelsea was released from the Alexandria Detention > Center earlier today," her lawyers said in a statement._

<comment><USER16> "The grand jury" is not descriptive of what the grand jury was investigating and declines to point out that her grand jury ended years ago.

<comment><USER22> This was not "her" grand jury.

<comment><USER25> We don't do that here. Cut it out with those asinine scare quotes.

<comment><USER22> My comment has absolutely nothing to do with her gender.

It's that the grand jury in question wasn't dealing with her case at all. The grand jury was tasked with Julian Assange, who isn't female, but more _importantly_ isn't _Chelsea Manning_.

<comment><USER24> Why the scare quotes though?

<comment><USER22> Because that was the incorrect part?

Same reason I might say "that wasn't a 'short' install..."

<comment><USER24> In the comment you're referring to, "and declines to point out that her grand jury ended years ago", the "her" was absolutely correct because it was referring to _her grand jury_ , not to the new one for Assange. The whole comment was irrelevant, because it doesn't matter whose grand jury it was that caused her imprisonment, but you're quibbling with the wrong thing and the only outcome of your use of scare quotes is to make it look like you're taking issue with her pronouns.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER26> About time this farce of a subpeona was ended. Chelsea already testified once on the matter the subpeona was about iirc.

Edit: subpeona was not quashed, grand jury's term expired.

<comment><USER27> > Chelsea already testified once on the matter the subpeona was about iirc.

The article said that too. Is she saying she spent 62 days in jail because she'd rather not repeat herself? That seems extremely odd if true.

<comment><USER28> That's a pretty hardcore stance against self-reiterization.</comment></comment></comment>


Ask HN: What's your personal document management system? - <AUTHOR> We accumulate a lot of important physical & digital documents as over our lives. And, as I'm beginning to realize, it can be a bit overwhelming to manage.
What do you do to organize, both your digital and your physical, documents? It doesn't have to be an uber cool document handling robot you've built, but some of your practices might help other people (and me) improve their own.
I'll answer first:
1. All my physical files (degrees, healthcare records, old photographs, land ownership records, identification records, marriage certificate, etc) go in one big file without any real organization. Every "person", though, gets their own file — unless it's a record with multiple people, that goes in my file for no real reason.
2. Scanned copies, or digital documents are organized into categories "educational", "government", "employment", "tax", "misc", etc. and are named according to the person, issue date, and classification. Etc: amin-government-id-2013, amin-education-bsc-transcript-lse-2015, etc. These go in my Google Drive and my Keybase private folder. Some also go in my Google Photos in a separate album because they're essentially just photos and my wife can access them easily there through shared galleries. <comment><USER2> i had the same issues especially with photos. As a phd student working in the lab and field, i took many photos over a week that spanned several categories (lab,field, testing, sample prep). many photos belonged to more than one category. at the end of the day (figuratively), i would just sort photos by date. now i am working on cloud platform with interfaces with a mobile app. i sort photos on the upstream end as i take them with my phone camera, by appropriately tagging and captioning them, and i manage on the web platform. photos can have multiple tags, can be sorted spatially on a map as well as by time. very very convenient and excelling documentation for my phd work</comment>


Private browsing defeated by Plugins - <AUTHOR> http://www.bbc.co.uk/news/technology-10891355

<comment><USER2> Per default, extensions are turned off in Chrome's private mode. I guess other browsers behave similarly.

</comment><comment><USER3> The BBC publish some real shit.</comment>


The Business of Saving the World - <AUTHOR> http://www.wie.org/business/content/business.pdf

<comment><USER2> I read this article long time back. Amazing read! Shows how important having good (read genuine) set of core values are and how important the "Do Good" principle is in today's world.

The problem in today's world is the menace of ego, actions and decisions coming from ego-driven values. PG talked about "Doing good", but where does one draw the line between good and bad? As long as the ego controlled mind exists and controls all our actions and decisions, the "Doing good" principle will be merely reduced to just another mechanism for satisfying the ego's ulterior motives.

I might be sounding a bit idealistic here, but what do you guys think?</comment>


Report Claims Eight New Spectre-Class Vulnerabilities Impact Intel and ARM CPUs - <AUTHOR> https://www.tomshardware.com/news/spectre-ng-vulnerabilities-intel-arm-amd,37002.html <comment><USER2> Is there no instruction that just shuts _off_ speculative execution altogether until they can properly bound it?</comment>


Apple, Google and Microsoft have a lot to learn from Amazon - <AUTHOR> http://thetechleverage.tumblr.com/post/65301682068/apple-google-and-microsoft-have-a-lot-to-learn-from

<comment><USER2> It may be great that Amazon's investing activities are heavy in CAPEX, but that doesn't mean that is how all tech companies should operate. Especially since the companies mentioned have rather different lines of business and business models</comment>