JavaScript: prototype vs. class - <AUTHOR> https://medium.com/@parsyval/javascript-prototype-vs-class-a7015d5473b <comment><USER2> When comparing ES2015 and how it was before. I usually take the babel playground [1] and see what the closest alternative would be.

For a simple es2015 it looks a bit more complicated than the prototype extension [2].

        class Dog {
          bark() { console.log( "Bark!" ); }
        }

Compiles to :

        "use strict";

        var _createClass = (function() {
          function defineProperties(target, props) {
            for (var i = 0; i < props.length; i++) {
              var descriptor = props[i];
              descriptor.enumerable = descriptor.enumerable || false;
              descriptor.configurable = true;
              if ("value" in descriptor) descriptor.writable = true;
              Object.defineProperty(target, descriptor.key, descriptor);
            }
          }
          return function(Constructor, protoProps, staticProps) {
            if (protoProps) defineProperties(Constructor.prototype, protoProps);
            if (staticProps) defineProperties(Constructor, staticProps);
            return Constructor;
          };
        })();

        function _classCallCheck(instance, Constructor) {
          if (!(instance instanceof Constructor)) {
            throw new TypeError("Cannot call a class as a function");
          }
        }

        var Dog = (function() {
          function Dog() {
            _classCallCheck(this, Dog);
          }

          _createClass(Dog, [
            {
              key: "bark",
              value: function bark() {
                console.log("Bark!");
              }
            }
          ]);

          return Dog;
        })();

1 : [https://babeljs.io/repl/](https://babeljs.io/repl/)

2 : [https://babeljs.io/repl/#?babili=false&browsers=&build=&buil...](https://babeljs.io/repl/#?babili=false&browsers=&build=&builtIns=false&code_lz=MYGwhgzhAEAiD2BzaBvAUNaAjMAnA1gBQCUq0w8AdhPCAKYB0ISh0ARAEJ74CEb0xANzQAvmhFA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=true&fileSize=false&lineWrap=false&presets=es2015%2Ces2016%2Creact%2Cstage-2&prettier=true&targets=&version=6.26.0&envVersion=)

<comment><AUTHOR> Since I work with Typescript, I do the same with the TS playground, it's really usefull to learn that kind of stuff.

<comment><USER2> I sometimes see difference between TypeScript's compiler and babel.

For example in this case TypeScript doesn't care so much about `defineProperty`. I guess the rules are not so strict, since it assumes that the rest of your code will be passed through TypeScript itself.

Anyway in both cases, I prefer TypeScript's way of enhancing the class inheritance in JavaScript by introducing private / readonly and many more.

[https://www.typescriptlang.org/play/index.html#src=class%20D...](https://www.typescriptlang.org/play/index.html#src=class%20Dog%20%7B%0D%0A%20%20%20%20bark\(\)%20%7B%0D%0A%20%20%20%20%20%20%20%20console.log\(%22bark%22\)%3B%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20static%20eat\(\)%20%7B%0D%0A%20%20%20%20%20%20%20%20console.log\(%22boo%22\)%3B%0D%0A%20%20%20%20%7D%20%20%20%0D%0A%7D%0D%0A%0D%0A%0D%0A%0D%0A)

</comment></comment></comment><comment><USER3> While it is good to understand how Javascript prototype inheritance works, I find it is best avoided , along with `this` and `class` syntactic sugar).

It is rarely required and most anything can be achieved with very basic JS objects and functions which are simpler to work with, easier to reason about and easier to write tests for.

<comment><USER4> I disagree - not adapting to the latest language paradigms because you find it more difficult is code smell.

<comment><USER5> Code smell describes _code_ which has incurred technical debts among other things. People do not have it.

The "latest language paradigms" in this case are JavaScript adopting a style of programming 40+ years old (Simula) -- despite its originating model being younger (self).

Adopting paradigms _because_ they are "recent additions" to a language is cargo cultism.

Paradigms come with idioms that suit some problems better than others, and have all sorts of trade-offs and considerations.

Inheritance is now widely regarded as a design approach, overall, best avoided.

"easy to reason about" =/= hard to understand. The ease of reasoning about something is a feature of how complicated it makes it (partly, its incidental complexity). It's not to do with how dumb you are.

Inhertiance, for example, creates systems that are often needlessly hard to reason about.

</comment></comment></comment><comment><USER6> I like the way javascript does inheritance, it is very convenient most of the times.

But whenever i start looking on the details of how it actually works, I feel like my brain is experiencing a bunch of small seizures.

</comment><comment><USER7> This doesn't do a good job of supporting its thesis. The new syntax does in fact allow most devs who understand "traditional" class based inheritance to use JS the way they expect. The fact that it's implemented in JS is both good and also OK to ignore for most devs.

<comment><USER8> In my experience, the class syntax has been more bad than good. Devs with experience in other languages simply start writing classical OOP code without realizing the ramifications of what they are doing.

Unless you are creating thousands of rigidly structured instances (never adding/removing properties or changing property types), you are almost always going to be better off using the factory pattern instead where you get other benefits like no `new` and real privacy.

<comment><USER9> > the ramifications of what they are doing

Which are? And why is "no new" a benefit?

IMO it's a good thing that you can write JS in the way you write other languages. It makes it a lot easier for developers to get going with it.

<comment><USER10> I'm trying to learn modern JavaScript at the moment, as well as getting to grips with prototypes I now have additional class syntax to learn and understand.

I've gone from learning one way of doing things to two, how is that easier to get going with?

<comment><USER11> Because now there's one way instead of everyone bringing their own createClass/inherits implementation.

Also, prototypical classes like `function User` are now rare in my experience going forward.

<comment><USER12> > Because now there's one way instead of everyone bringing their own

In theory. In reality there's everyone bringing their own plus one more.

I think the appeal of JS is that it's a universal runtime, not anything about the language itself. I really wish syntactic changes would be left to transpilation.. because that's what every JS developer is doing anyways.

</comment></comment></comment></comment></comment></comment><comment><USER13> Those interested in how prototypes and classical inheritance relate (and don't) may be interested in work I did on GNU ease.js, which works with ECMAScript 3+. I have since extended it to support Scala-like traits.

[https://www.gnu.org/software/easejs/manual/easejs.html#Imple...](https://www.gnu.org/software/easejs/manual/easejs.html#Implementation- Details)

I also wrote a paper on some of the concepts:

[https://mikegerwitz.com/papers/coope/coope.pdf](https://mikegerwitz.com/papers/coope/coope.pdf)

The `class' keyword in JS still leaves much to be desired; it's just syntatic sugar around the prototype model. There's nothing wrong with that model---it's just important to understand how it differs from what OOP developers traditionally expect.

<comment><USER14> > it's just syntatic sugar around the prototype model.

No it allows "super" late binding, something you cannot do with functions and prototypes. It's not just "sugar".

</comment></comment><comment><USER15> another interesting way to understand JS classes is to look at the transpiled Babel output of a class definition and extension

[like this]([https://babeljs.io/repl/#?babili=false&browsers=&build=&buil...](https://babeljs.io/repl/#?babili=false&browsers=&build=&builtIns=false&code_lz=MYGwhgzhAEBiD29oG8BQBIY8B2EAuATgK7B7wEAUAlCqtPdOngBYCWEAdGNALzQDkYfnQYBfESPQBbAJ4AzItmDVaDRgQCmeIgWwDZCpcLXjxqUJBgAhMAWgaAHng3YAJjARJkooA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=true&fileSize=false&lineWrap=false&presets=es2015%2Ces2016%2Ces2017%2Clatest%2Creact%2Cstage-0%2Cstage-1%2Cstage-2%2Cstage-3%2Ces2015-loose&prettier=false&targets=&version=6.26.0&envVersion=))

</comment><comment><USER16> This article didn't demonstrate any risks involved in using 'class' in Javascript by devs familiar with other OOP languages. What exactly is the non- common feature in Javascript OOP that exists in other OOP languages and therefore poses such a risk that makes developes make "a lot of mistakes"? It's not messing around with prototypes, since those devs don't understand that any way.

Sounds like Javascript dev who is pissed because the language evolves and his prototype-hack-knowledge becomes more and more obsolete.

</comment><comment><USER17> What, that's all it does? Stop someone from accidentally not using the new keyword?

I'm not dissing it, that's great it does this. But I'm a bit surprised (and happy!) that this is all it does.

<comment><USER18> It's not really about the new keyword. It adds a lot more and simplifies a lot of things:

\- no more messing with .constructor, .prototype

\- calling parent object is super() easy :)

\- you can have static methods

\- no need to even type function for methods

[https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Classes)

<comment><USER8> You should never be using `.constructor` anyway because it isn't reliable because a very common pattern replaces the `.prototype` with a new object who's `.constructor` is `Object`

        var Foo = function () {};
        Foo.prototype = {
          bar() { return 'bar'; }
        };
        var f = new Foo();
        f.constructor === Object;

When you use `class` you are still messing with `.prototype`. The danger is that programmers new to JS don't understand that they are and don't understand why that matters.

Calling `super` is very anti-pattern in JS. Unlike classic OOP, parents are not static. Lots of very common things can rip that rug out from under you by modifying the parent in many different ways (createProperty, Symbols, proxies/reflection, etc).

Static methods do indeed exist without classes.

        class Foo {
          static bar() { return 'bar'; }
        }

        //is identical to

        function Foo() {}
        Foo.bar = function() { return 'bar'; }

If you use `Object.create()` and ES6 object literal syntax you don't have to type `function` either. You get the added bonus of being easily able to wrap it in a normal function that avoids constructor weirdness

        var someProto = {
          bar() { return 'bar'; }
        }
        var myInst = Object.create(someProto);

<comment><USER19> To be absolutely fair, the pattern at the top is buggy in that you're supposed to also set

        Foo.prototype.constructor = Foo;

...after replacing the prototype object that way. MDN (for example) covers this in a few pages, including:

[https://developer.mozilla.org/en- US/docs/Learn/JavaScript/Ob...](https://developer.mozilla.org/en- US/docs/Learn/JavaScript/Objects/Inheritance)

That said, it's a pretty common bug, particularly with stuff like:

        Foo.prototype = Object.create(FooParent.prototype) // Crockford-style inheritance
        console.log(Foo.prototype.constructor.name) // "FooParent"

</comment></comment></comment></comment><comment><USER20> I do not know if anything has changed since this discussion: [https://github.com/getify/You-Dont-Know- JS/blob/master/this%...](https://github.com/getify/You-Dont-Know- JS/blob/master/this%20%26%20object%20prototypes/apA.md) but it seems that classes may not always be the answer.

<comment><USER21> A lot of these examples seem rather contrived, and the whole appendix has a very FUDy feel to it. It seems like the author didn't like classes in JS, and set-out to come up with some examples to justify their dislike, rather than coming to that conclusion through actually encountering these problems in the real world. Something not helped by the weaselly tone, constantly implying that it's just raising concerns, when it's clearly been written by somebody with an extremely strong anti-classes mindset.

As a simple way to define a reusable bundle of behaviour of logic, or to construct simply base-class -> specialisation inheritance hierarchy, JS classes work fine.

<comment><USER22> Totally agree, checkout this example:

> If you change/replace a method (on purpose or by accident) on the parent > "class", the child "class" and/or instances will still be "affected"

I knew when reading this line exactly what the author was about to do to mislead the unsuspecting user. Directly edit the prototype and feign surprise. The prototype is representative of the class itself, basically a default of all properties for that class. The correct (and obvious) way to override a class method for only one member of the class is to assign a new function on the property directly, not into the prototype's version of the property. Class definitions being mutated in an application is extremely uncommon. This is like putting your hand on a hot stovetop and then complaining that you burnt yourself.</comment></comment></comment>


The Books That Every Programmer Should Read - <AUTHOR> https://metaredux.com/posts/2020/03/27/the-books-that-every-programmer-should-read.html <comment><AUTHOR> While I did share the link, I personally think this a bad list of books

For example, I dont think every programmer should learn about the inner working of operating systems, many programmers sure why not, but not EVERY programmer, that being said I would recommend "Computer Systems: A Programmer's Perspective" to any or every programmer, its a systems book not an OS book

The list includes a lot of "please ignore the references to specific programming languages", which is inexcusable, languages influence design, this is why we have OO Languages, and Functional languages and DSLs and Scripting languages etc .. because languages influence design

Anyway, I do believe in reading and reading a lot, I do think that the average programmer should have a broad knowledge about programming outside of his domain, but I think this a poor list for that purpose

</comment><comment><USER2> And not Fred Brooks' "The Mythical Man-Month"?

<comment><USER3> Can't fit all the great books in a single talk, right? :-)</comment></comment>


Paul Graham disses NY - <AUTHOR> http://www.businessinsider.com/ycombinator-paul-graham-new-york-silicon-valley-tech-ycnyc-2011-9?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+typepad%2Falleyinsider%2Fsilicon_alley_insider+%28Silicon+Alley+Insider%29

<comment><USER2> The Valley and the Alley aren't the same. They both have different strengths.

Personally, I think the difference is that you go to the Valley when you've already decided to become a part of the tech startup scene. People in NYC tend to discover the scene while they're doing something else- two of my housemates (banker and film-maker) have asked me to bring them to the next Startup Weekend event here in NYC because they've been hearing so much about it. That sort of cross-industry mashup is more difficult in the Valley, because it is world unto itself.

<comment><USER3> Hmm...Yeah I guess I'd agree that you see less cross-industry mashups in the Valley. The Valley is home of the most superior engineering talent in the country - so it makes sense that its focus would be primarily in tech/web/mobile innovation.</comment></comment>


Is web application development supposed to be this hard? - <AUTHOR>

I would just like to say that web application development.  CRUD development with any logic always takes more time than I expect it to.  Note: I am not talking about "me/I" personally but in general with the web application development teams I have worked with.
And I am getting better at tracking my hours for most tasks.  At a minimum, I think to get a webapp in a production environment takes at least 80-120 hours and 6months to year for larger projects.  2 year projects with not yet in prod deliverable will normally fail and never get used.  That is a lot of time considering what web apps normally do.
Why?
Yes, I work with J2EE and very little .NET.  But I don't see the Rails/Django apps being any better.  They don't even have the basics like a strong security mechanism that includes SAML or authentication frameworks.  So, I don't believe the new Web 2.0 frameworks are the answer.
If you really think about a typical sophisticated web app (E.g. bankofamerica online or walmart.com), to get any changes in; there are a lot of components that you interact with.  Databases, web services, html code, javascript, business analysts, testing frameworks.
Anyway, that is my rant.  I hope it gets better.  If <comment><USER3> I completely agree. Of course stuff like Active Record can save a lot of typing for back-end code. But: 1) a large system often requires hand-crafted SQL anyway. 2) hand-crafted SQL performs MUCH better for anything but the trivial stuff.

The biggest issue for me: FRONT-END development. Most web apps are pretty simple on the back-end, and coding database access by hand doesn't take long at all, I can live just fine without ActiveRecord.

Where I end up spending 90% of development time is on the front-end. Writing HTML code by hand (and visual tools don't help here) makes me feel like I'm in the dark ages: I miss one character and have to spend ages hunting down design issues. Javascript isn't much better for that matter.

IMO What's needed is server-side UI libraries, along the lines of windowing toolkits for desktop apps.

Reason I say server-side is because client-side libraries exist already (eg GWT) and most web apps still need SEO, perhaps unfortunately.

ASP.NET and Java Faces components don't really count either - you still have to write HTML code by hand to glue things together.

Ask any designer what a pain it is to get the layout correct in all the different browsers. How many CSS hacks are required? Just look how long it took Google engineers to make those Gmail buttons. Crazy.

Why can't we pull all these "best-practices" of laying out and rendering common components into a server-side UI framework, so a programmer can use his knowledge of the programming language of his choice to build a web application?

Moreover, encapsulating everything into components leads to re-usable code with proper inheritance (instead of html template "inheritance") - <USER2> every programmer appreciates.

This is what I'm working on now - a java library to do just that.

Sceptics will say this is a "one-size-fits-all" and it won't work. That's not what I've experienced so far. Sure, some web app may need a custom "component" - so you need to write one yourself. But from then on - it's re-usable.

Will all apps look the same, like on Windows? Although that may not be a bad thing, they won't - proper separation of concerns allows designers to style components to their liking with CSS.

The aim of a GUI framework like this is to make sure web apps stick to proper design guidelines, instead of a developer deciding that he'll make his own ajax scroll-bar cause it looks cool, though most visitors can't figure out what it is. There's a reason Apple apps look so professional. They are designed around human interface guidelines. Why re-invent the wheel for each web app?

I'm only doing this cause I got too frustrated with all the frameworks out there when trying to create my new web app. They don't solve my UI needs.

Who else feels the same way? I plan to open source the code, so if anyone wants to help, give me a shout.

</comment><comment><USER4> > I don't believe the new Web 2.0 frameworks are the answer

I strongly disagree, there are a growing number of people that are discovering that abandoning the server for UI, liberates them from this atrocious development methodology that web developers have been locked in.

Using a prototype based scripting language (Javascript) for the UI and coupling that to strongly defended (security, type safety, validation) REST services gives you a rapid UI for users to touch feel and change while Strongly typed services give you the metrics that the IT department needs to insure they are not getting crap in their system.

This is why products like flash made huge inroads over swing and other UI development products because they offered the people that use them the speed and flexibility they need.

Java on the other-hand has been the enterprise standard for as long as COBOL has not. Because it is safe and rigid and has a huge library, all the things a UI designer does not need.

For two long we have made one party or the other suffer the sins of the other development methodologies practice. Even if you are a long gunman (I now am). It is still a far more productive way to develop web applications.

The client model become very clear when one abandon the server model. The funny part is it makes both sides so drop dead simple that anything beyond the toolkits seem like overkill. The frameworks are so light they almost seem non- existent. It is very natural once one liberates oneself of the years of indoctrination of doing it the old way and stop trying to just sprinkle some in.

</comment><comment><USER5> One of the big Rails philosophies that could help _any_ platform is DRY: don't repeat yourself! ActiveRecord _et_ _al_ attempt to give you the reusable building blocks that will be required in most sites. And in that regard, I think it really does reduce developer time. There are also drop-in basics for user authentication, etc. A well-designed extension should be mostly portable to other apps. For example, while I don't know of a SAML plugin off the top of my head, building it once could get you to 90% for future cases. The sophistication seems less daunting when you work iteratively, tackling small chunks of functionality.

Having worked on both the J2EE and Rails stacks, I find Rails to be way more productive. But that productivity can be costly: many things feel like magic if you don't understand what the framework is doing. Looking back, J2EE development seems to require too much ceremony for too little reward.

The goal for web development should be to spend time on the application's _unique_ properties, rather than on the generic ones that everyone must build. A framework like Rails attempts to get every project on the same page for component interaction, but allows you to step outside the mold if necessary.

<comment><USER6> Having done both J2EE (at Sun) and Rails as well -- there is an order of magnitude increase in productivity. No question.

Many (not all) java web shops have difficulty putting out functionality at a rate that they _need_ to in order to survive. Java is not the language for the web.

</comment></comment><comment><USER7> I have dabbled in all of the above and I noticed that I spend a lot of time up front lost in the framework. In fact the only framework that I have found useful out of the 4 you mentioned is Django. I think that is because it doesn't force you to use the framework shortcuts, they are there for more experienced users, but when starting out you can use more standard logic.

</comment><comment><USER8> "Databases, web services, html code, javascript, business analysts, testing frameworks." yeah I _never_ have to deal with any of those in Django....

I know what you're trying to say, but saying things like "Rails/Django" lack SAML is silly. It would be fairly easy to implement if needed, it's just not needed by the majority of us.

I've worked most of my career building web applications and while it isn't magic and does still take time, it doesn't take more time than I would expect usually. If it's taking 80-120 hours to put a simple app in production either you have a bad team or some seriously bad processes.

</comment><comment><USER9> an analogy...

Man, writing poetry is hard. It takes me 2-3 weeks to write a haiku and months to write a sonnet.

Language doesn't matter for writing code any more than it does for writing poetry.

You need to specify a lot more details before discussing whether 80-120 hours is really fast or really slow for a given project. How many screens, 10 or 200? What kind of test coverage - none or 100% unit tested? How does it have to scale? What level of security? Do you have a style template or do you have to write one?

I work with java too. You can generate a simple crud app extremely quickly if you know what you're doing and which libraries to use.

<comment><USER3> true, but if you compare the same simple crud app to a desktop equivalent - which is easier? to get even the simple web app to the stage that it runs consistently on all the different browsers out there is a bigger task. say you want to list the rows from your db: do you use a table? or divs? lots of ways to layout these in html. then you need to write some CSS, cause there's no default look and feel provided out of the box. then you'll probably need to write some javascript to validate fields before user can submit a form (or alternatively come up with error-handling on the server-side and then write some html to display these appropriately).

so many different technologies involved. IMO a programmer shouldn't be expected to know java, css, xhtml, javascript - just to get a crud app running.

I've been developing web apps for many years and to this day some css layout issue takes me hours to solve to get IE6 to work properly. That's where time is wasted, not on the crud db access stuff...

<comment><USER9> Forget IE6, unless you have an client that demands it. I've only ever seen that once and it was years ago.

> java, css, xhtml, javascript

lol well that's the stack I've been working for 10 years so perhaps I am biased.

>that it runs consistently on all the different browsers out there is a bigger task.

This is not much of an issue anymore. jQuery and GWT do well enough.

>say you want to list the rows from your db: do you use a table?

Yes, you use a table. You're displaying tabular data. You should also be thinking about data models, not rows in a table.

>then you need to write some CSS, cause there's no default look and feel provided out of the box

Lookup some templates and read w3schools to make it functional then get a designer involved. That problem doesn't go away using some other server language.

<comment><USER3> I'm not saying it's impossible, it's just a lot harder than a desktop-app, because there isn't a GUI toolkit with standard look & feel, functionality, and API. Web designers ultimately write one from scratch every time they need to create a new web app. IMO that's wrong.

GWT is the only proper GUI toolkit I know, and it truly borrows lots from desktop APIs. But not everyone wants a 100% JS web page, some people still care about SEO.</comment></comment></comment></comment>


Show HN: "What's This?" – machine learning with react-native and tensorflow - <AUTHOR> https://github.com/NorthFoxz/whatsthis <comment><USER2> This is just amazing! Thanks for making it open source. :)</comment>


Ask HN: Determining DB in use from HTTP? - <AUTHOR>

Is there a simple way to determine what database is in use behind a website from an external HTTP request?  i.e., I make an HTTP request, get back whatever data is going to come from the webserver - can I inspect any of that and reliably determine that DB in use?  I am thinking not, but figured I would ask this group. <comment><USER2> Not directly, anyway. But some languages will leave a signature in the headers of the web server.

If you see the server is IIS then you can take an educated guess that the DB is microsoft SQL server.

Another way of doing it is searching for the name of the website and the name of various popular database engines, with a bit of luck you might find a blog posting by a technie or a question in some support forum by someone working for company X.

</comment><comment><USER3> There's the 'ethically dubious' method of trying a bunch of SQL injection tricks against the site and seeing what works. Many attacks target only certain database vendor and version.

SQL injection cheatsheet: <http://ferruh.mavituna.com/sql-injection- cheatsheet-oku/>

Please don't try this unless you have permission, or it's your own site.

</comment><comment><USER4> curl -I <http://example.com/>

You can divine a bit of information from the site that way, but it is only guessing. Some sites expose information when they encounter an error, so if there's a method to trigger one, that could be useful.

Many WordPress blogs, for instance, show MySQL connection errors under high load, etc.

</comment><comment><USER5> No.</comment>


Ask HN: Should I wait to get a new MacBook Pro? - <AUTHOR> My late 2013 MBP is aging, and I've been considering an upgrade. Rumors initially slated a major redesign of the lineup for 2020, but I've started to hear that it may be pushed back to 2021.
Unlike others here, I'm not particularly offended by the touch bar or the current keyboard design. The keyboard reliability is definitely an issue, but given how readily they're repairing them, a failure would probably end up being an annoyance rather than a catastrophe. That said, there would undoubtedly still be things to look forward to in a major redesign.
Would you personally hold out for the unknown, upcoming redesign, or just go for it now? <comment><USER2> My personal anecdote. So my trusty rMBP turned 5 years old on June 15. Happy Birthday. As I'm a solo developer for a number of companies, I decided it's a good time to get a spare "just in case".

I am "particularly offended" by the touch bar, because the way I type my fingers rest closer to the top, and on my mate's X1 3rd Gen I always turn sound on and off... :-) So touch bar = no go.

I got an 4k touchscreen Dell XPS 15 9570 from an OEM channel (no CPU, GPU, HDD, RAM, battery), put in a real 6-core i7-8750h, 32G DDR4-3200, mobile 1050Ti, 2T Intel's T660 SSD, and a 94Wh battery. Switched Wifi to the new Intel AX200. Repasted with Kryonaut paste, added some 3M heat pads. All in all cost me ~$1800.

A week ago my MBP finally stopped working, main board failure. Over the course of 5 years I changed screen twice (first the horrible staingate, then water damage), battery twice (first one popped within 1.5 years), repasted, and changed the little charging board. It's time for it to retire.

Migrating to Windows 10 turned out to be much less pain than I expected. A few tweaks for the horrible font rendering, install GlassWire (like Little Snitch), Wox (like Spotlight), Seer (preview on Space bar), Chocolatey (like Homebrew), ThrottleStop (easy performance boost), SpeedFan (for fan control), and it feels pretty much like a Macbook. I'm pretty amazed on how easy it was to just swap parts inside - unscrew the lid, pop out the old one, insert the new one. Keyboard is great. Touchpad is okay, though I miss that three-finger dragging.

<comment><USER2> For the folks asking about font tweaks, two main tweaks that helped me tolerate Windows font rendering:

1\. Used Winaero Tweaker to change all the system fonts to Source Sans Pro Medium / Bold.

2\. Used Stylus in Brave (Chrome fork) to add a global stylesheet with: body { -webkit-text-stroke: 0.3px; } - this makes web browsing very close to Mac experience.

</comment></comment><comment><USER3> It's easy. It's just a tool. If you need it now, go get it. If you don't need it now, don't get it. Don't overthink it.

<comment><AUTHOR> Well the other thing is this is a personal machine. I do programming work on it, but not as a job. I also have a perfectly capable desktop. I just enjoy the portability, and also MacOS. And as another commenter said, "It'd be nice, but I can do with the old one I have". Although it's getting to a point where I'm not sure how much longer I can "do with the old one I have". I basically never do anything serious on it anymore because it's too painful.

<comment><USER3> Then maybe just get an air instead of a pro?

<comment><AUTHOR> It's not that I won't use the power; it's just that my income isn't being hampered by not having it for a while longer.

<comment><USER3> Then it's clear: wait for the new model.

</comment></comment></comment></comment></comment><comment><USER4> I have an ageing MBPr 2012. I have been to the Apple store and tried every iteration from 2016 and up.

I won't upgrade. With mojave, I have noticed a slower machine with my dev workload than with El Capitan. Despite this, I'm happy and can report no problems at all.

The touchbar is completely useless. I don't like it. I am hoping that they see some sanity and offer models with and without. But I doubt it.

The over sized touch pad is ludicrous as well. My palms were always resting on it. I couldn't imagine using this 2016 to 2019 model. I hope the 16" comes back to the 2012-2015 sized touchpad.

If anything Apple should have retained the original F1 function keys and then offered the touchbar between the keyboard and the smaller touch pad.

Finally, it's not just the keyboard, they are loud and do not travel well. How is the thermal throttling? They say it's fixed. But in the UK it's summer now and it just throttles by existing!

Also don't forget stage light, is it fixed in the 2019 models?

It's all these things that make me wish they go back to the 2012-2015 sanity and make another really good machine.

To be honest with you. I'm going to hold off on the upgrade and I'm waiting until the 16" comes out. But ultimately, I want to see an ARM capable MBP. One that doesn't throttle. That would be really nice!

<comment><USER5> I've never seen someone complain about the touch pad. I like it, makes my older MacBook Pro'a touchpad feel so restricting.

<comment><USER6> Indeed. Palm rejection is perfect. No need to worry or complain about the size of the touchpad. I know I would never go back.

</comment></comment></comment><comment><USER7> First: if you can afford to upgrade, just do so: you've already mentioned on another thread that your current machine is failing. If you don't like your choice you can return it to Apple no questions asked within two weeks.

FWIW: I've done a lot of C++ development on first a MacBook retina (2016), then a 15" MBP (2018) and now a 2018 MacBook Air. Because my work is in C++ the Touch Bar doesn't affect me (never used F keys) though it was too sensitive so I completely disabled it on the MBP and mapped escape to caps lock.

I am perfectly happy with the butterfly keyboard, though the first one (on the MBr) did fail twice and would have been replaced yet again if the machine had not been destroyed in an accident.

But the MBP keyboard didn't fail _for me_. What failed was that the machine was simply too heavy (which is a hilarious statement when I pick up an old 17" like I used to carry around) after I'd gotten used to something tiny. The Air was a good compromise. I rarely rebuild the entire system, so compile speed was not a huge difference in practice compared to the MBP.

Good luck

</comment><comment><USER8> I actually had to make the exact same jump a couple months ago. My 2013 MBP wasn't really slowing me down but I was giving it away to my family instead. I had a lot of hesitation when it came to touch bar but the that was way too much easier to get used to than what I thought.

The keyboard I'd say is a lot better than the 2018 versions. I've used a friends 2018 MBP where I had issue with repetitive keystrokes or no keystrokes at all, it's been two months I'm using mine and haven't had a single issue yet.

I think if you need it now you should go for it. There are always gonna be changes, updates, redesigns just like how it has been since 2013. If you're in need it of the tool now it's less like that the next update will have a meaningful impact on your work that's worth to wait.

</comment><comment><USER9> I recently sold my MacBook Pro 13" late 2018 edition. I got tired of the touch-bar, the keyboard and frankly OS/X (finder, docker, running local servers, outdated unix cli, iCloud and a range of other annoyances).

I replaced it with a Surface Pro 6 i5 edition and setup my development environment in WSL. This is the first device I've genuinely loved since my iBook G4 and it honestly feels like something Apple should have build.

I don't actually like Windows 10 that much, but it works as well as OS/X for daily usage and WSL is just so amazingly good for isolating your dev environment in actual Linux.

It's also cheaper than a MacBook, will work as a tablet and is great for taking hand written notes.

Worth considering, at least while you wait for the next MacBook keyboard.

<comment><AUTHOR> I currently end up doing most things on my Windows desktop. Developing on Windows is... not terrible, but not great. I don't do a lot of funky Linux-y stuff so I don't have much use for isolating my dev environment. It also doesn't sound like the things that annoyed you about your MacBook are things that annoy me.

I also just really want a real laptop. I've heard good things about the Surface, in general, but a) I have virtually zero use for a tablet, and b) I like to put my laptop in my actual lap sometimes, which tablets-with-keyboards don't do a great job at. I've considered the XPS 13, but I know the trackpad won't be as good and of course it's Windows.

<comment><USER9> I use my surface on my lap quite a lot, and it works fine, a lot less wobbly and no heat on thighs (or calves, not sure what your upper legs is called in English). It can't be used on stomach in bed though, like at all. So there are certainly limitations a laptop doesn't have.

</comment></comment></comment><comment><USER10> Your comments below indicate you're doing personal (hobby? Learning and experimentation?) programming on your MBP.

In this case I would suggest buying a modern Linux laptop with some kind of Nvidia GPU from Dell or ThinkPad which gives you the flexibility of a true Linux environment (Linux dominates servers) and an ML environment to learn on the same machine. You could get a lot beefier processor, a lot more RAM and a true GPU for a comparable price that gives you more experimentation options.

</comment><comment><USER11> It seems like Apple likes to announce things in spring or fall (March, September, October) if you check out their events page: [https://www.apple.com/apple-events/](https://www.apple.com/apple-events/)

You can see historical events roughly line up with that. If you're not in too much of a rush I would be tempted to wait until November to see what is annouced.

<comment><AUTHOR> Yeah; I think that's what originally had people saying 2020 would be the major redesign. It's apparently a 4-year cycle. But just today I read that they were possibly delaying it another year.

</comment></comment><comment><USER12> Why do you want to upgrade?

Absent any specifics, the baseline reason to upgrade is for security updates and compatibility with software you use. If you have that already, I don't see any reason to upgrade. A 2013 MBP is compatible with Mojave and is still receiving security updates.

<comment><AUTHOR> It's slow. I kind of suspect the graphics chip may be dying; raw compute tasks like compiling code are usable enough (not great, but usable), but browsing the web is just egregiously sluggish, especially when there are images on a page.

<comment><USER13> Then you've answered your own question. If cost is an issue, get the n-1 model, or a refurbished model.

</comment></comment></comment><comment><USER14> Don't discount the upfront benefit you get from upgrading.

Maybe there is a new model coming but if you're using your MBP a lot, don't punish yourself by penny pinching and sitting on a bad experience for a long time.

</comment><comment><USER15> There's supposedly a 16" coming in the early fall, but rumors are just that. That's the only notable thing I'd consider waiting for.

<comment><AUTHOR> Rumors say the keyboard will be redesigned, and the screen bezel may be thinner, giving you more screen-size-per-device-size. Also, while I don't loathe the touch bar, I wouldn't be opposed to them reversing course on it.

</comment></comment><comment><USER16> No. The keyboard isn't great and the touchbar is worthless for anyone who is reading HN.

Consider getting a Dell XPS, a System76 or a Google Pixelbook for your development unless you're specifically making iOS or macOS stuff.

<comment><AUTHOR> > the touchbar is worthless for anyone who is reading HN

That seems unfair. I've never really had use for function keys, and while I do enjoy the physical volume and brightness keys, the touch bar can certainly be put to use by power users: [https://www.intego.com/mac-security- blog/customize-and-perso...](https://www.intego.com/mac-security- blog/customize-and-personalize-your-macbook-pros-touch-bar/)

I looked into the XPS 13 but the screen is smaller than I'd like, and more importantly Windows and the non-Apple touch pad just generally put a damper on the whole user experience. Which isn't something I want from an expensive new device.

</comment></comment><comment><USER17> I personally am waiting for redesigned lineup to get 16" version. There is nothing else that interests me in the current lineup, I am happy with my mid 2012 rMBP.</comment>


Fast implementation of DeepMind's AlphaZero algorithm in Julia - <AUTHOR> https://github.com/jonathan-laurent/AlphaZero.jl <comment><USER2> I've been working on a Python implementation that uses Gradient Boosted Decision Trees (LightGBM/Treelite) instead of using a neural network for the value/policy models:

[https://github.com/cgreer/alpha-zero- boosted](https://github.com/cgreer/alpha-zero-boosted)

It's mostly to understand how AlphaZero&Friends work. I'm also curious about how well a GBDT could do, and if there are self-play techniques that can accelerate training.

The nice thing about a GBDT is that, unlike when using a NN, you can do thousands of value/policy lookups per second on a single core. So it should be cheaper to scale self-play and run a lot of self-play experiments (assuming the self-play learnings when using the GBDT model transfer to when you use the more-powerful NN in these environments).

If you're curious about accelerating self-play training, check out David Wu's work ([https://arxiv.org/pdf/1902.10565.pdf](https://arxiv.org/pdf/1902.10565.pdf)). He's the creator of KataGo. I implemented his "Playout Cap Randomization" technique in my implementation above and, sure enough, it's much more efficient: [https://imgur.com/a/epaKtDY](https://imgur.com/a/epaKtDY). It seems like it's still early days in terms of how efficient self-play training is.

<comment><USER3> This is really interesting, thanks for sharing!

I've been thinking about extensions to decision tree models that could get the benefits of NNs and it seems like there are a few ideas floating around.

For example; Probabilistic Random Forests have some really interesting properties for noisy datasets, e.g. "The PRF accuracy decreased by less then 5% for a dataset with as many as 45% misclassified objects, compared to a clean dataset." \- [https://arxiv.org/abs/1811.05994](https://arxiv.org/abs/1811.05994)

PRF's might be a natural fit for RL, especially methods using monte carlo tree search.

Speculating here as I'm not adequately familiar with stochastic calculus, but intuitively it seems like probabilistic decision trees could be made differentiable since the hard decision threshold in a tree could be a turned continuous (i.e. every split is logistic regression), which might enable some really interesting applications. I personally dream of being able to cleanly integrate decision trees and tools from NNs in something like pyro for a fully Bayesian model.

<comment><USER2> A fast, powerful bayesian model seems like it would be a game-changer. PUCT (the heart of the AlphaZero MCTS that decides which action to choose) really seems setup to model the action choices as a multinomial bayesian inference problem (it already updates the action priors with Dir noise).

Thanks for the link! I don't really know anything about the world of probabilistic trees. I'll check it out.

The only bayesian approach to decision trees I'm familiar with is BART ([https://projecteuclid.org/download/pdfview_1/euclid.aoas/127...](https://projecteuclid.org/download/pdfview_1/euclid.aoas/1273584455)). I haven't used them, but I'm guessing because it uses MCMC to update the params it's not super fast. I've seen them used in causality applications for partial dependency plots where it's convenient to convey the certainty of a variable's effect.

<comment><USER4> Check out the SoftBART method, I think there are interesting optimizations possible there. XBart also looks promising as an approach.

</comment></comment></comment></comment><comment><USER5> The implementation includes Connect Four as an example application. While the standard board size of 7x6 is indeed solved, as they note, and in fact all sizes up to 8x8 are [1], they could have picked 9x8 or 9x9 which are currently unsolved. The latter is the new standard size on Little Golem which upgraded from 8x8 when that was solved.

[1] [https://tromp.github.io/c4/c4.html](https://tromp.github.io/c4/c4.html)

[2] [http://www.littlegolem.net/jsp/games/gamedetail.jsp](http://www.littlegolem.net/jsp/games/gamedetail.jsp)? gtid=fir

[3] [http://www.littlegolem.net/jsp/forum/topic2.jsp?forum=80&top...](http://www.littlegolem.net/jsp/forum/topic2.jsp?forum=80&topic=77)

<comment><USER6> I completely agree with you. Let me just add two remarks. First, although picking 9x9 boards makes connect-four intractable for bruteforce search indeed, I would be suprised if it made it much more difficult for AlphaZero, which relies on the generalization capabilities of the network anyway. Second, using a solved game for the tutorial is a feature, not a bug. This allows precise benchmarking of the resulting agent as a ground truth is known.

<comment><USER5> I did not see an evaluation of how close to perfection the agent becomes. Did you compute any sort of error rate (by finding moves that turn a won position into a non-won one or a drawn position into a lost one) ? And how this error rate drops over time as learning advances? That would indeed be very interesting to see.

<comment><USER7> My team did an implementation of alpha zero connect four a couple of years ago. Our findings are in a series of blog posts starting at [https://medium.com/oracledevs/lessons-from-implementing- alph...](https://medium.com/oracledevs/lessons-from-implementing- alphazero-7e36e9054191). We didn't manage to get to perfection either on policy, but got pretty close. You can play against some versions of the network here: [https://azfour.com](https://azfour.com)

<comment><USER6> Your series of blog articles has been an important source of inspiration in writing AlphaZero.jl and I cite it frequently in the documentation. Thanks to you and your team!

</comment></comment></comment></comment></comment><comment><USER6> Author here: I am happy to answer any question you may have about AlphaZero.jl. :-)

<comment><USER8> I am confused about the FAST part, it is faster than all the other implementation (some of them are in c++) or it is just julia implementation and you think it is fast? I am asking because if julia is faster than c++ for ml/dl I would prefer to use it for production use cases.

<comment><USER6> This needs clarification indeed. As I explain in the documentation, the aim of AlphaZero.jl is not to compete with hyper-specialized and hyper-optimized implementations such as LC0 or ELF OpenGO. These implementations are written in C++ with custom CUDA kernels and they are optimized for highly distributed computing environments. They are also very complex and therefore pretty inaccessible to students and researchers.

The philosophy of AlphaZero.jl is to provide an implementation of AlphaZero that is simple enough to be widely accessible for students and researchers, while also being sufficiently powerful and fast to enable meaningful experiments on limited computing resources. It has the simplicity of the many existing python implementations, while being consistently between one and two orders of magnitude faster.

More generally, the AlphaZero algorithm is extremely general and I think it can find applications in many research domains (including automated theorem proving, which is my own research area). I have been surprised to see that, despite the general excitement around AlphaZero, very few people actually tried to build on it. One explanation, I think, is the lack of accessible open-source implementations. I am trying to bridge this gap with AlphaZero.jl.

<comment><USER9> Always great to see someone who finds something broken, and fixes it for others to move forward.

Thank you.

</comment></comment></comment></comment><comment><USER10> Does anybody know how long it would take to train an alphazero go version using one gpu? In [1] they claim that it took 13 hours until the model was able to beat the original alphago version, but they don't state what hardware they used.

[1] [https://deepmind.com/blog/article/alphazero-shedding-new- lig...](https://deepmind.com/blog/article/alphazero-shedding-new-light-grand- games-chess-shogi-and-go)

<comment><USER11> I can't find it now but iirc there was a blog post on HN about a month ago that estimated their training costs at $25 million, using many TPU pods.

<comment><USER2> Here was the guestimation: [https://www.yuzeh.com/data/agz- cost.html](https://www.yuzeh.com/data/agz-cost.html)

</comment></comment></comment><comment><USER12> First of all this is very cool. Dunno if author is on here, but I'm curious why both Flux and Knet are used rather than just one of them (Flux seems the most Julianic?).

Also, is this really faster than PyTorch/TF? Last time I benchmarked Flux for non-trivial networks, the speed was quite good with small models but memory usage was ~5x higher than pytorch, and I couldn't fit my models on the GPU for flux. For large models, I had to compromise on batch size in Julia, although maybe with Zygote.jl the memory issues have been resolved?

<comment><USER6> I suspect FLux/Knet are still slightly slower and less memory efficient than PyTorch/TF, although things are moving very fast here!

This is not relevant in understanding AlphaZero.jl speed though. The reason it is much faster than Python implementations is because tree search is also a bottleneck, and Julia shines here!

<comment><USER12> Ah, I hadn't appreciated this. Thanks for making & sharing your code!

</comment></comment></comment><comment><AUTHOR> Disclaimer: I'm not the author. Just want to share this awesome project.

</comment><comment><USER13> This is awesome! I worked on a similar project in the past for the game Hex

Did a writeup here about it: [https://notes.jasonljin.com/projects/2018/05/20/Training- Alp...](https://notes.jasonljin.com/projects/2018/05/20/Training-AlphaZero-To- Play-Hex.html)

[https://github.com/likeaj6/alphazero- hex](https://github.com/likeaj6/alphazero-hex)

<comment><USER6> Actually, I found your blog article when I was reading about AlphaZero and I found it useful!

</comment></comment><comment><USER14> I don't know anything about Julia...how hard would this be to port to python or a c-style language?

Edit: I was mainly asking because I was curious about the relative expressiveness Julia...

<comment><USER15> I was going through this project over the weekend. And while I can't recall where exactly in the docs I read this, I am quite sure the author mentioned that there are various python projects but they are quite slow. Other implementations such as leela chess zero have a lot of C++ and are difficult to follow.

In fact, one of the things we want to do is maximize the performance of the Julia implementation. We hope to co-develop the compiler and ML stack to address these issues as they come up.

<comment><USER16> Truly truly thank you for your work <3

<comment><USER17> Not sure you are thanking jonath_laurent (original author of package of discussion) or ViralBShah (co-creator of Julia). But I concur on both accounts :D

<comment><USER16> Viral. I thanked Jonath in a different post :-P

When I see projects like this (I mean especially Julia, but also people sharing their work on packages like this) I feel very fortunate that elements of the free software movement are still alive.</comment></comment></comment></comment></comment>


Python eval really is dangerous - <AUTHOR> http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html?

<comment><USER2> I liked David Goodger's attached comment, that the real problem is running eval / exec on untrusted input.

There's probably a corollary that no input is trusted.

But eh, I've had scratchpad scripts where I lazily used exec or eval on commands that were programmatically generated (not entered by user or from outside programs).</comment>


What it's like to write for content farms, from Brooklyn to the Philippines - <AUTHOR> http://www.hopesandfears.com/hopes/city/what_do_you_do/216643-content-farm-writers-philippines <comment><USER2> I haven't done it in a long time (thank heavens), but I used to write a lot of garbage as a way to afford vagabonding around China and generally avoiding real life. I would get paid $10 for 500 words of utter garbage, mostly for SEO purposes. It could be about almost anything, it just had to be well-written (no grammar errors), include a smattering of keywords in very specific locations, and had to meet a length requirement.

Eventually I started outsourcing my writing to stay-at-home moms with English degrees and one of my friends who would trip on acid and pound out three articles an hour.

On the surface it was good money; writing comes naturally to me and I could easily make $30/hour, which was good money for someone sitting on a train in China. But eventually it starts to wear on you. Especially knowing that you're not providing any real value and your entire purpose is basically to trick an algorithm, it just burns you out very quickly.

It's still not ideal for quality content, but at least now the algorithm we're all trying to trick is a mostly human one. I hate Buzzfeed clickbait as much as the next person, but it's still better than filling up the Internet with endless spam.

<comment><USER3> Not adding value definitely wears on me too.

In the early years of my site, I would have people submit photos of offices to be published and then I'd riff on them for a few hundred words and add a title of "X Company's Amazing NYC Offices".

It all started sounding the same after hundreds of posts so I began requiring the architects to submit a brief explaining the project and found that what they wrote was 1000% more valuable that anything I could write. Post titles changed from being clickbaity fluff to 'Company Name - Location'. Instead of the actual content portion being the value I'm trying to add personally, my goal has been to have the value be in my curation skills.

Now that I've been at it for a long time, I can add value in other ways like adding new tools for readers to interact with the content as well as writing high-level trend pieces on what I'm seeing in the industry.

<comment><USER4> Your site is quite interesting. I don't understand one thing though - don't you need permission to post photos of someone's office?

<comment><USER3> The photos are taken by the architect or designer who have permission to share/publish them. They are oftwn taken after the construction is completed and before the company moves in fully.

That said there are many office design projects which are not allowed to be published and are photographed for internal use only.

</comment></comment></comment></comment><comment><USER5> I think it's sad that so much of this is driven by SEO -- a desire to satisfy an algorithm -- rather than to make good quality human readable content in its own right. In a desire to get on the front page of Google so much useless content is being created, and the content itself is tainted by the inclusion of keywords. This is because, as the article mentions, Google's algorithm can't tell a quality article from one that isn't.

<comment><USER6> Your comment highlights the shift in perception of search engines between around a decade ago and now. In the past "search" was something people did, while search engine was a tool that helped them. Right now "search" is something Google does. Human, on the other hand, are seen more like a passive recipients of information.

My point is, Google's algorithms _do not need_ to tell the difference between good and bad articles. They need to give users tools for effectively filtering out the garbage they don't want to see. As far as I can tell, Google does not even try to provide that. Instead, they have a mysterious algorithm that's supposed to feed you the "right" results if if it knows who you are.

<comment><USER7> >Google's algorithms do not need to tell the difference between good and bad articles

But this is not happening. In Most of the cases, Google cannot distinguish between good and bad content and they are ranking the results using their mysterious algorithm. They are still using Backlinks to rank a content and it is wrong.

</comment></comment></comment><comment><USER8> I don't know about the writer in the Philippines, however I was in a similar situation as the writer in Brooklyn earlier this year when I signed on with a content provider while I was in between gigs (not the same one that the writer in the article works for).

After submitting my initial writing sample, I was given a writer grade (from 1-5, with 1 being too horrible to get any work and 5 being perfect). Your writer grade influenced what open gigs you could accept- higher number gigs were more technical, wanted better writing, and were more long-form. You could pick from gigs in an open marketplace setting, and gigs varied wildly. Some companies were obviously trying to set up a website for SEO bait with gigs rated at a 2 posting for thousands and thousands of 100-word blurbs with a different topic per blurb, typically paying about $.50 or less per blurb. Other companies actually wanted content like blog posts or a re-write of info that's already on the company website. Frequently writers using the service would set up relationships with clients directly instead of going through the marketplace, and there was a handful in the short time I was there who accepted gigs writing 100K-300K long form pieces for companies (technical manuals, training manuals, documentation, etc.)

While there are definitely content farmers utilizing writing services such as the one that I worked for and the one mentioned in the article, it can also be a great way to contract out content creation for new companies or getting someone to re-write and update existing content. It's a lot easier and cheaper to go through a writing company to get a copywriter for a temp gig than it is to go out and hire one, or even go to a regular temp agency since good writing is such a specialized skill.

</comment><comment><USER9> The final quote is the most interesting:

In reference to not getting paid for job, "A lot of these 'scammers' are actually other freelancers who are delegating their own projects in order to get paid for it without having to do any of the work."

<comment><USER10> I see this quite often even with mid-quality content providers.

They're selling content for around £25 - £30 per 500 words but you have no idea who actually wrote it. The results are, at best, bland but otherwise reasonably well written.

</comment></comment><comment><USER11> Great post and very benefit

I'm searching for some homepage for some of my purpose a today and after i see this post

Very benefit!

Actually, I have read about this post are rather. In this article, I have found highlights which have never read from anywhere. These things, it gives me some ideas.. For to develop my blog นิทานธรรมะสั้นๆ](http://tammastory.blogspot.com">นิทานธรรมะสั้นๆ) to really, i appreciate this post. It's really a great and helpful piece of info. I am satisfied that you shared this helpful info with us. Please keep us informed like this. Thanks for sharing.

Thank you

</comment><comment><USER12> Who reads all this content-mill fluff?

I regularly write for trade journals in the legal field and cannot conceive churning out worthwhile articles in less than a day, much less hours. Is it all clickbait junk? How many of the articles here on HN come from such mills?

<comment><USER13> Almost every startup blog we see on HN is a content farm packed with contrived content targeting this/similar communities and brought to us by accounts that only exist to promote themselves on HN. Some of them are regulars on the front page -

[https://news.ycombinator.com/from?site=githubengineering.com](https://news.ycombinator.com/from?site=githubengineering.com)

[https://news.ycombinator.com/from?site=fogcreek.com](https://news.ycombinator.com/from?site=fogcreek.com)

etc

<comment><USER14> Great find with plain evidence. Does HN have an official stance on promotional accounts? (Paging dang?)

Anecdotal experience makes me think this is a problem on any submission-driven site.

</comment></comment></comment><comment><USER15> They too are looking for more writers - [https://twitter.com/hopesandfearshq/status/58510384519119667...](https://twitter.com/hopesandfearshq/status/585103845191196672)

</comment><comment><USER14> I found it interesting that the sort of golden rule of freelancing was in play even for a content farm writer in the Philippines: charging higher rates results in steadier jobs.

</comment><comment><USER16> Is it just me or did anyone else feeling fed up with this huge waste of resource and time (both the writers and the readers' time).

Anyone interested in looking for a different model?

<comment><USER17> yes. email me.</comment></comment>


Transit Costs Project - <AUTHOR> https://transitcosts.com/about/ <comment><USER2> This Dec 2017 nytimes article is a relevant read: [https://www.nytimes.com/2017/12/28/nyregion/new-york- subway-...](https://www.nytimes.com/2017/12/28/nyregion/new-york-subway- construction-costs.html?referrer=masthead)

> France's unions are powerful, but Mr. Probst said they did not control > project staffing. Isabelle Brochard of RATP, a state-owned company that > operates the Paris Metro and is coordinating the Line 14 project, estimated > there were 200 total workers on the job, each earning $60 per hour. The > Second Avenue subway project employed about 700 workers, many making double > that (although that included health insurance).

It seems like transit bureaucracies in the US don't have the expertise to manage massive construction projects and little incentive to control costs.

I was unable to browse the link because the site is overloaded, but I'm familiar with Alon Levy and his blog. Hopefully the data makes a difference but bureaucrats often to respond that their situation is unique and not comparable to other countries.

<comment><USER3> Wouldn't that give foreign companies an advantage in bidding for American contracts?

<comment><USER2> What do you mean? What would give foreign companies an advantage? If a transit construction project can be done at lower cost, isn't that a good thing, for the local government and for riders? And construction is something that hires local workers anyway.

<comment><USER4> If the foreign companies can bid lower and with faster schedule, then they have an advantage to win the contracts over US firms

<comment><USER5> Foreign firms do bid, just not with lower costs or faster schedules. Skanska from Sweden is in charge of NYC's East Side Access, which was originally forecasted to be completed in 2007 at a cost of $4B, and has morphed into the world's most expensive per-mile rail project at $12B with a completion date in the 2020s.

</comment></comment></comment></comment></comment><comment><USER6> I'm insanely excited about this. One of the research scholars, Alon Levy, has written extensively about infrastructure costs on the blog [https://pedestrianobservations.com/](https://pedestrianobservations.com/).

<comment><USER7> Holy shit that blog is good. Thank you!

</comment></comment><comment><USER8> It's an important topic, yet unsexy for the general public, which is why it needs more attention.

Cost just seem to slowly ratchet up in the US, with each piece of the process/org taking their little chunk of $. I'm sure rising standard of living is part of it, risk aversion, outsourcing public infrastructure capabilities (and responsibility) to private contractors. Add to it also the important topic that we've fallen out of practice (as a country) of having large numbers of people who are capable of working on these kinds of infrastructure -- so it gets more expensive to find them.

It's a big loss. We could have 2x or 3x the new infrastructure we do, if it didn't cost so much.

<comment><USER9> I wonder how it works in Tokyo. They have the most impressive infrastructure of any city I've ever been to, and it seems that is because they never stop. At that point, it makes sense to just salary everyone involved and not deal with the corruption that comes from outsourcing. The most popular vehicle on the road in Tokyo appears to be the concrete mixer.

<comment><USER10> I've heard that the railway companies in Tokyo own a lot of the real estate around the stations. They cross finance public transport as a means of making the buildings they own more attractive.

</comment></comment></comment><comment><USER11> It's not just transit. All local government projects in the US suffer from cost disease. No doubt corruption and waste plays a part, as do rapacious unions, but there is also the whole machinery of public participation designed to prevent future Robert Moses from steamrollering their pet projects, which worked all too well.

<comment><USER12> > rapacious unions

Worth noting that Paris has famously powerful unions and yet still manages to build transit projects for much less than New York City.

<comment><USER13> The nice thing about a large dataset is it can disprove (or prove) everyone's pet theory for why the US is so broken.

<comment><USER14> At least we all agree the US is broken.

</comment></comment></comment></comment><comment><USER15> It has been hugged to death. Neither archive.org or google's web cache have it.

<comment><USER16> It's not in archives because it was just published today.

<comment><USER15> Well, archive has 2 snapshots today... but they're both of the resource limit exceeded page.

Anyone can add it to the archive. Archive.is makes it easy. Many posters snapshot a page in order to share it... for exactly this hug-of-death reason

</comment></comment></comment><comment><USER17> feels like Covid has put a serious dent on interest in mass transit...used car sales are through the roof. and people seem to be moving out of urban areas to suburbs.

<comment><USER18> > used car sales are through the roof

There doesn't seem to be data supporting this assertion in the US. Used car sales were slightly up in June 2020 vs. June 2019, but May was flat and April and March were way, way down.

[https://fred.stlouisfed.org/graph/fredgraph.png?dwnld=0&hire...](https://fred.stlouisfed.org/graph/fredgraph.png?dwnld=0&hires=1&type=image/png&bgcolor=%23e1e9f0&chart_type=line&drp=0&fo=open%20sans&graph_bgcolor=%23ffffff&height=450&mode=fred&recession_bars=on&txtcolor=%23444444&ts=12&tts=12&width=1168&nt=0&thu=0&trc=0&show_legend=yes&show_axis_titles=yes&show_tooltip=yes&id=MRTSSM44112USN&scale=left&cosd=2015-06-01&coed=2020-06-01&line_color=%234572a7&link_values=false&line_style=solid&mark_type=none&mw=3&lw=2&ost=-99999&oet=99999&mma=0&fml=a&fq=Monthly&fam=avg&fgst=lin&fgsnd=2020-02-01&line_index=1&transformation=lin&vintage_date=2020-09-01&revision_date=2020-09-01&nd=1992-01-01)

Sales of all cars are way, way down [https://fred.stlouisfed.org/series/TOTALSA](https://fred.stlouisfed.org/series/TOTALSA)

<comment><USER19> This data is only thru dealerships, I believe.

Anecdotally: I know no one who takes public transit in NYC anymore. They either bicycle, bought a car, left the city, or stay home.

Generally: Many people have fled the city to suburbs where, presumably, they will need cars.

<comment><USER20> Going beyond anecdote to data shows the US transit ridership is down, but I don't think this is based on the reality of transmission possibilities.

When people get scared, they retreat from that which culture tells them to fear, which includes transit for the US. However, when you look at other places that use lots of transit, like Japan and Korea, we don't see much spread on transit. So the fear is not so much reality based. In plain contrast, churches are shown to have had many super-spread events, including in South Korea, yet people seemingly can't wait to get back to church, perhaps because it is a place that they view as intrinsically safe even though the evidence shows otherwise.

In short, humans are really bad at evaluating risk, especially in our current media environment which is has a very low Signal to noise ratio.

<comment><USER21> >In short, humans are really bad at evaluating risk, especially in our current media environment which is has a very low Signal to noise ratio.

Isn't this just a nicer way of saying that the unwashed masses don't have the same priorities the experts want them to?

We live in a democracy, shouldn't social consensus do the lion's share of work in defining what is and isn't good risk assessment? If the overwhelming majority of people would rather be scared of a rare disease than a car crash then doesn't that kind of define what our priorities are even if guarding against the latter looks better on the metrics?

<comment><USER22> There are some questions that are clearly questions of fact. For example, "Which killed more Americans last year, car accidents or terrorist attacks?"

There are some questions that are clearly questions of opinion. For example "Should we spend more money on reducing car accidents than we spend on anti- terror efforts?"

There are also questions that straddle the border - for example "Should lives shortened by pollution count as deaths caused by cars?"

While questions of opinion are the domain of social consensus and democracy, it's not particularly elitist to say the purely factual questions need a right answer rather than a popular one.

</comment></comment></comment></comment></comment></comment><comment><USER23> It appears that the website is currently undergoing the hug of death.

</comment><comment><USER24> This is great!

But I don't know if it's because of 2020 or I'm just a cynic, but getting gov't or even the private sector to implement solutions that come out of such a think tank is going to be tough. I feel that people in power are becoming very nearsighted

<comment><USER21> Organizations that are poor and have no choice but to perform efficiently are the only ones that do. The catch is they get less done because they're poor. Buffalo doesn't have a subway but if they did you can bet your ass they'd get more for your dollar than than the MTA does. Likewise your local dirt and scrap haulers are making their trucks go further per dollar than the high dollar urban construction outfits could ever hope to. When you don't have a lot you care about how it gets used.

</comment></comment><comment><USER8> Fitting. "There will be a small project delay of 8 months to get the website to a state where it's able to serve active web visitors. Also, please increase our budget by 20%."</comment>


SparkleShare - Free (as in speach) Dropbox alternative  - <AUTHOR> http://www.sparkleshare.org/ <comment><USER2> Cloud storage is nothing new. When Dropbox launched there were already lots of competitors. What makes Dropbox so awesome is that it _just works_ everywhere.

To that end, this is not a Dropbox alternative. This is a cloud-based storage platform, like so many others. You have a long, long way to go before you nail what it is that Dropbox customers have come to expect.

</comment><comment><USER3> Linux: Coming soon!

Mac OSX: Coming soon!

Windows: Coming soon!

My interest: Coming soon!

 _Edit_ : Evidently there is now an alpha release available (which is what this link probably should've gone to). What is up with that font though?

[http://www.bomahy.nl/hylke/blog/sparkleshare-02-alpha-1-for-...](http://www.bomahy.nl/hylke/blog/sparkleshare-02-alpha-1-for- linux/)</comment>


My Stepdad's Huge Dataset - <AUTHOR> https://logicmag.io/06-my-stepdads-huge-dataset/ <comment><USER2> The article seeks pretty rambling and doesn't have a clear point, but I have friends in the sex-work industry and the closing part is true: like music, people don't want to pay for porn anymore, and it's making it harder and harder for non-megastars to make a living. Everybody I know making a living off porn is doing it through twitter, premium Snapchat accounts, patreon and the like, not traditional sites, and it's not easy.

<comment><USER3> I've been banging on about this point for years. Filesharing doesn't hurt megacorps, who have vast marketing departments that reliably shepherd people through the fare gates or monetize them in other ways, but indie and niche performers and creators suffer terribly because they don't have a big capital pile in addition to their labor and natural assets (whatever those happen to be).

Filehsaring has a great deal to recommend it, but ultimately it comes down to wanting something for nothing (and often whining about the very people whose performances it desires to devalue).

<comment><USER4> I tend to think that the economic value of porn would have plummeted in the past decade or so even if there were no copyright infringement. Good cameras keep getting more affordable. Today's smartphones have better video capabilities than professional video gear had at the end of the 1990s. It only takes a tiny percentage of people with exhibitionist tendencies to produce and share more new porn than anybody can watch. Most of these performers don't care about getting paid. And in this niche, true professionals have little if any quality advantage over enthusiastic amateurs.

<comment><USER3> _Most of these performers don 't care about getting paid._

Amateur porn is absolutely not the default, as even a cursory glance at porn sites reveals. Gonzo and amateur porn are categories but most porn is made to make a buck. Performers like getting paid because they like to eat and not be homeless, and suggesting that most of them don't want to be paid is simply not true. That's like saying most homeless people choose to be on the street - it's an excuse to ignore their problems, though I appreciate you may not have meant it that way.

Btw I base my views on over a decade in the indie film (not porn) industry, and from having a lot of friends and acquaintances who are sex workers, and who are already having a tough time dealing with FOSTA/SESTA.

<comment><USER5> > Performers like getting paid because they like to eat and not be homeless, > and suggesting that most of them don't want to be paid is simply not true.

He suggested no such thing, you should try reading more carefully.

> Amateur porn is absolutely not the default, as even a cursory glance at porn > sites reveals.

He also never claimed that.

What he did say was that there's enough amateur exhibitionists who would do it for free and don't care about getting paid to more than satisfy the demand for porn and that's why professionals are going to continue having a hard time being paid.

<comment><USER3> Yes, but if that calculus were true, tube sites (which display viewing figures) would be dominated by amateur content and they're not. The market demonstrates a clear preference for professionally produced material.

<comment><USER5> > Yes, but if that calculus were true, tube sites (which display viewing > figures) would be dominated by amateur content and they're not.

That's not a logical conclusion, so no. The market demonstrates a clear preferences for free content, that's what tube sites show; that professional content is popular when free does not demonstrate that professional content matters more than free content. That professional are having such a hard time making money in fact demonstrates the opposite, the market cares more about free than about quality. As long as people are willing to make free porn, which they are, professionals will always struggle to make money. The same is true of much art, music is another example of exactly this phenomenon.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Do most viewers really care at all about the "script" and instead click on the first video that has someone they find attractive doing the sexual act they want to see?

If I'm right in my assumption about most "tube viewers", I wonder how much of the "conclusions" made from the data set provide false conclusions due to confirmation bias. If they think folks want to see [insert script narrative] and so they make more videos of that, just because it had lots of views doesn't mean that more folks wanted to see that specific narrative IMHO.

<comment><USER7> To the extent analytics are used, I think search analytics are probably influential (certainly, the press releases pornhub regularly puts out about what people are searching for advertises that they have this data available, so I'd be very surprised if it wasn't for sale and used by content creators/distributors). And is suspect that search data provides a lot more information about why people watch particular videos than just view data and assumptions.

</comment></comment><comment><USER8> I always wonder what is considered NSFW in those offices.

But it's interesting what types of specific UX is created for adult tube sites. For example, on pornhub, it shows which times of the video are viewed by more people using a flame graph type visual above the video timeline. Example of getting the user to value as quick as possible (skip the 'boring' parts).

<comment><USER9> I suppose the flame graph feature developer could then write on their resume:

"reduced bandwidth costs by $X millions per year by implementing a 'content of interest' data visualization. Users' time-to-success improved 5%"

That kind of thing makes me wonder what sort of high caliber developers go into this field. Lotta good engineering going on within this, uh, unique, high volume traffic situation.

<comment><USER10> > That kind of thing makes me wonder what sort of high caliber developers go > into this field.

I read long ago that having a porn site on your resume was a pretty strong black mark with non-porn companies, even if you were a developer. Since there's so little crossover an experience sharing between mainstream developers and porn site developers, porn site engineering tended to be relatively sub par. My guess is few high caliber developers go into porn site engineering.

<comment><USER11> Surely it depends which site - the big sites have serious scale and engineering challenges which will outweigh the seediness aspect while the vast majority of sites are just a CMS paired with a payment processor integration.

</comment></comment></comment></comment><comment><USER12> The porn industries focus on what customers want vs. what consumers want would certainly explain the increasingly extreme nature of free porn.

I wonder if this is relevant to the discussion:

[https://medium.com/incerto/the-most-intolerant-wins-the- dict...](https://medium.com/incerto/the-most-intolerant-wins-the-dictatorship- of-the-small-minority-3f1f83ce4e15)

<comment> crooked-v I'm a bit dubious about that article, because it spends a lot of time spinning the prevalence of kosher and halal food into an elaborate analogy and presuming future resistance to its existence without even considering "it's something that most people just don't care about either way" as an explanation.

</comment></comment><comment><USER13> I'd love to sit in a meeting at one of these companies. It has to be surreal discussing trending data in regards to sex, kinks, and quirks objectively in a business setting. The setup is almost something out of a Monty Python skit.</comment>


Java is confusing, Clojure is simple - <AUTHOR> https://blog.klipse.tech/clojure/2019/05/10/java-is-confusing-clojure-is-simple.html <comment><USER3> The author forgot to mention that you can have immutable collections in Java but then praises Clojure's immutable collections. The Java coded provided will produce warnings due to the mixing of generics and raw types and actually I had no idea about what the output of the Clojure code would be because the author assumes that you have no questions "once a Clojure learner gets used to Clojure syntax". Once you learn that there's a difference between primitives and objects then the Java example becomes just as clear. Moot article.

<comment><USER4> Yeah, seems like:

a) category error: The simplicity in the example is due to immutability, not language choice.

b) familiarity bias: I've learned X therefore it's simpler than Y. (It might be true, but you'd need a lot more supporting evidence than relying on point a.)

... anyway.

</comment></comment><comment><USER5> This feels like someone who prefers Clojure really hard, and doesn't like Java.

Admittedly, I'm a finance Java EE wageslave, but java is really not that complex to understand. Objects are references, updating the referenced object will change all objects sharing that reference.

Primitives are an admittedly confusing bit, but we're kinda stuck with them.

I don't think Java is "confusing" (but I am a bit biased), but deliberately avoiding understanding the language isn't the same as confusing.

<comment><USER6> Java as a language might be not so difficult to learn and understand, but using it for writing real applications can become convoluted pretty quick. Siding with Java in arguments against it, today is like arguing against printing press in the 15th century - "This devilish machine takes the soul out of divine process of copying a book by re-writing it by hand." non-Java JVM languages popping up every few years for good reasons. Another platform that has more languages is Javascript and Clojure beautifully simplifying work there as well.

<comment><USER7> The reason others prefer immutable constructs is due to a permanent and stable cognitive blockage. [About half of programmers are incapable of understanding mutable state]([https://blog.codinghorror.com/separating-programming- sheep-f...](https://blog.codinghorror.com/separating-programming-sheep-from- non-programming-goats/)). Functional programming solves this problem by removing mutable state (almost) entirely.

Functional programming is like speed controls for trucks. It enables people who have cognitive blockage to produce some work for the company. So it's going to be promoted over and over.

<comment><USER5> Functional programming is a concept, not a magic cure-all for bad programmers.

Java also supports functional elements (though I'm not implying it's a functional language in the slightest).

I could have an optimistic view of programmers, but I feel like that article is heavily slanted towards CS education, which is taught by people who intrinsically understand computer science. I work with people who are definitely not even approaching the middle of the bell curve in terms of skill and efficiency. They still produce work in imperative programming, and without introducing catastrophic levels of instability into the system.

<comment><USER6> There's a lot more than just functional programming here. Use Clojure for a couple of years, and I guarantee: it spoils you, and you would never want to go back to your previous workflow - it would feel clunky and inefficient. Nothing is perfect, I know. I know that not from watching videos or reading blog posts - I have used many different languages "in anger." I like Clojure because it makes sense to me today. I'm sure someday it stops making sense or I'd have to use a different tool (better suited for some task). I keep looking around, and I still can't find a language that gives me the joy of delivering software without feeling miserable. Even with the most praised and loved languages - it sometimes feels like your machine is interrogating you and you are typing incantations to placate your computer's demands. With Clojure - <USER2> simply build things. You can focus on what's truly important for you to get the job done. It's not just a sense of familiarity. Clojure is far from being my first or second or even fifth PL. However, none of the languages I have previously used gave me that feeling of joy, curiosity, and confidence. It is not magic, no. Still, it is a well-designed programming language.

</comment></comment></comment></comment></comment><comment><USER8> As a java novice and a Clojure non-entity, I found the article interesting and helpful. I don't think the author is trying to convince enterprise java dev teams to abandon java in favor of Clojure, its just a helpful comparitive view of two languages meant for beginners.

</comment><comment><USER9> The article focused on confusion _among students learning the language._

First, imperative programming is important to learn. Understanding the stack/heap and calling conventions is important. Yes, those things are hard to learn. But once you learn them, they are not that confusing. These are significant pedagogical concerns, but I'm not sure they are so important beyond the classroom.

Second, FP is also confusing to new programmers but for different reasons. E.g. anything that requires folds is typically easier in imperative settings.

<comment><AUTHOR> Why imperative programming is important to learn? What will we be missing in a LISP only world?

<comment><USER10> Nulls, dumb syntax, bugs, my high blood pressure...

In 2013 I tried darn hard to get a job doing Clojure but it never panned out. The world just isn't ready, it seems.

<comment><USER6> It was six years ago. Try again, maybe? Clojure is slowly but steadily growing. The world is never "ready." It was never ready for Clojure, OCaml, for Smalltalk, for Haskell, for Purescript, for Elm, for Erlang, for Elixir - yet teams are using them, there are conferences all around the world, libs are being written, podcasts recorded. There are jobs. I started writing Clojurescript 3 years ago, and since then I can't find a better alternative for myself - a language that is well suited to build awesome things and makes me happy. I have changed 3 different jobs since then and never settled for anything but Clojure. Never had a problem with finding a job.

</comment></comment></comment></comment><comment><USER11> [https://lispcast.com/conj-mental-bump/](https://lispcast.com/conj-mental- bump/)

</comment><comment><USER12> Very few tutorials know how to teach well.</comment>


Facebook Won't Monetize Content about Tragedy and Conflict, Debated Social Issues - <AUTHOR> https://www.facebook.com/facebookmedia/get-started/monetization_contentguidelines <comment><AUTHOR> "The following content may not be eligible for monetization: ... Tragedy & Conflict Content that focuses on real world tragedies, including but not limited to depictions of death, casualties, physical injuries, even if the intention is to promote awareness or education. For example, situations like natural disasters, crime, self-harm, medical conditions and terminal illnesses.

Debated Social Issues Content that is incendiary, inflammatory, demeaning or disparages people, groups, or causes is not eligible for ads. Content that features or promotes attacks on people or groups is generally not eligible for ads, even if in the context of news or awareness purposes. ..."

Facebook has the right to do whatever it wants on its platform, but this will have bad social consequences. Publishers will have no incentive to cover conflicts in war-torn regions, attacks by radical religious groups on minorities in third-world countries, or any news that is not happy and advertiser-friendly under these guidelines.

The only groups that will now have an incentive to cover these issues will be those with a political agenda - including political pages and fake/misleading news outlets.

Terrifying for the future of the discourse in the world :/</comment>


A bash script to securely create a bootable USB device from one ISO file - <AUTHOR> https://github.com/jsamr/bootiso
Many of you might think of dd command as a one-liner. bootiso adds security guards such as checking the device you selected is connected through USB. It can also autodetect the USB device if there is exactly one connected to the system. So you might just give it a try and judge by yourself!
PS: I could not post a link, guess it's because I'm a new user. <comment><AUTHOR> [https://github.com/jsamr/bootiso](https://github.com/jsamr/bootiso)</comment>


Ask HN: Simple collaborative CSS editing tool? - <AUTHOR> I'm looking for a web app or Chrome extension that lets someone make CSS changes to a page on an existing website - kind of like when using Chrome DevTools' Elements tab - and have those changes be visible to other people in a team. Also with the ability for anyone to export the CSS modifications to a file.
It could be made visible either by everyone on the team using a Chrome extension and seeing those changes applied to the actual page itself as they're viewing it, or it could be some other rendering of it within a web app, or even just a screenshot. Just some way so others can look at the page with the modified CSS applied.
Figma was the first thing I thought of, but from what I can tell, it doesn't seem like it's really intended for starting with a website and editing its CSS. I tried using the HTML To Figma plugin (https://github.com/BuilderIO/html-to-figma), as well as its Chrome extension, but every time I try to import the resulting JSON into Figma, the design looks messed up and nothing like the actual page, with many of the CSS rules seemingly not being applied. The plugin's readme mentions not all HTML and CSS is supported.
I'm not even looking for anything fancy that abstracts away the CSS editing behind a visual editor. I'd just like something that lets you edit CSS rules, similar to what you can currently do with Chrome DevTools, in a way that lets other people see those changes immediately. Or even if not immediately, a few minutes of delay is perfectly fine, too.
Basically just anything to improve/avoid the workflow of someone editing some CSS in DevTools' Elements tab, exporting a CSS file containing their modifications, sending the exported CSS file to someone else, them importing it, them seeing the changes, them tweaking some of the modifications, them exporting the CSS file, them sending the CSS file back, ..., etc. <comment><USER2> I built a tool to do this and supported it for 6 months, but I couldn't really find users. The basic idea was a web page that you could collaboratively work on through a server running socket.io, which included editing css, fonts, and the content of the website. The collaborative idea sounds cool, but in practice, it seemed easier to have a team pair program on a zoom call and edit a page live with google dev tools. Is there a reason this solution doesn't work for you?

</comment><comment><USER3> I haven't tried it, but what if you were to use Chrome Headless [1] and port forward it so that others could connect with their local copy of chrome?

[1] [https://developers.google.com/web/updates/2017/04/headless-c...](https://developers.google.com/web/updates/2017/04/headless- chrome)

</comment><comment><USER4> [1] Glitch is pretty cool, made by the same people who made Stackoverflow? Pretty sure it can do collaborative web development too...

[1] [https://glitch.com/teams/](https://glitch.com/teams/)

</comment><comment><AUTHOR> I wonder if I'm just not phrasing my Google queries properly, because I feel like something like this should have existed for a while, but I can't find anything, for some reason.

</comment><comment><USER5> Have you considered using a version control system with automatic deployments when new code is pushed?

The CSS you see in the browser might not be the same as the CSS that developers write.</comment>


CoFounder startup magazine's IGG campaign 96% funded - <AUTHOR> https://www.indiegogo.com/projects/cofounder-startup-magazine

<comment><AUTHOR> With 9 days to go and at 96% I'm sure the campaign will be fully funded. Is a new print magazine about startups really needed?</comment>


You Just Have To Do Something - <AUTHOR> http://jonathanmoore.com/post/35867424576/you-just-have-to-do-something

<comment><USER2> Happens to be the way to deal with procrastination and analysis paralysis as well. It's easier to just do something and then course correct, than to try to calculate the best possible path before even starting out.</comment>