Ractive.js - <AUTHOR> http://www.ractivejs.org/

<comment><USER2> Out of curiosity, where's the love for knockout? It's mature, and works well, but gets no press anymore.

<comment><USER3> I've been using knockout heavily for a project recently and have come to really like it. This is a small to mid size website, about 6 engineer months of effort and somewhere in the mid 10klocs of custom javascript. Some strengths of knockout:

\- it builds on the "Good Parts" of javascript, in that KO observables are just closures. You can pass them around or attach them to different objects however you feel like. For instance, we built a standard UI widget for entering currency values. Anywhere we need to accept currency, we instantiate one of these widgets and pass it the observable that holds the value. Clean, easy, encapsulated.

\- Some people have a distaste for the "()" syntax: obj.prop() rather than obj.prop. There's some truth there, but the "()" syntax has one big benefit that overrides the slight ugliness in my experience: it catches naming errors immediately right at their source. If you've ever had to refactor a fairly big piece of JS, you know that one difficulty is correcting all the changed references. And if you miss one, the bug may be subtle, as the old reference doesn't except but quietly returns undefined. With knockout, the old reference blows up immediately, as undefined isn't a function. This is a big win.

We had some growing pains with knockout. Lessons learned:

\- don't build anything but a small web app the way the knockout examples demonstrate. The reason is that while knockout claims to be MVVM, their examples are really just VVM -- there're no distinct model classes. They store data directly in the viewmodel classes. Bad things follow as your app grows: since the data is in the VM, any view that needs the data (i.e., all of them) needs to be bound to that same VM, meaning that your one VM ends up needing to feed several views. You find yourself annotating your viewmodel into sections -- "// these properties are used by view X ... // these properties are used by view Y" etc. Yech. Much better to have true model classes, then build a VM class on top of the model for each of your views.

\- we now make heavy use of named templates to decompose large views into more manageable pieces. We wrote a simple custom binding to make this easy: since each VM is designed to work with a single view (see prior note), we put the #id of the view's named template into a .Template property of the VM class. The custom binding inspects this property and binds the VM class to its named template.

<comment><USER4> Oh how I wish you had written that 6 mons ago. Learned those same lessons in a painfully slow way.

I've been using knockout for the last 3 years, mostly for small projects but the last one has been a big one. Growing pains but its working out great.

Knockout needs more love.

</comment></comment></comment><comment><USER5> Very interesting, but one thing Re: AngularJS

> dependency injection minification headaches

Meh, that's hand-wavy at best. The only thing you have to do to pass minification is to include the injected dependencies in an array like so:

        ['$stateProvider', '$urlRouterProvider',
        function ($stateProvider, $urlRouterProvider) {
            // Stuff
        }]

You get used to it in seconds and then it's not really an issue anymore.

<comment><USER6> I'm currently using this style in a RequireJS/Angular project. Everything works great, but it's pretty ugly. We should strive to not write ugly shit, but good clean expressive code. This is so non-standard it hurts. There are plenty of other ways the Angular team could have gone; CommonJS or AMD would have been better choices IMO.

<comment><USER7> Use ngmin, it converts into the ugly style. [https://github.com/btford/ngmin](https://github.com/btford/ngmin)

There's also a grunt plugin. [https://github.com/btford/grunt- ngmin](https://github.com/btford/grunt-ngmin)

<comment><USER6> ngmin doesn't work with r.js. My response was about using it with AMD modules. I know there were a few efforts to get ngmin/r.js working together, but last time I searched around I didn't see anything promising.

<comment><USER7> I wonder how much work it would be to actually integrate DI/module system and RequireJS.

</comment></comment></comment></comment></comment><comment><USER8> Would be nice to see this up on [http://todomvc.com/](http://todomvc.com/)

<comment><USER9> I actually find that website almost entirely useless. A to-do list means nothing and demonstrates nothing useful. It has no associations between models and nothing particularly complex. I have tried so many of these frameworks and found crippling flaws in all of them, but on the surface they all look peachy when compared via a to-do app.

It's pretty much only useful if you want to write a to-do app.

<comment><USER10> I completely disagree. I find it very useful to see small, easy to digest, and easy to compare example apps when new frameworks come out for a first impression to help decide if I want to have a play with it myself.

</comment></comment></comment><comment><USER11> The examples for these kinds of frameworks always show you data binding for scalar values. That's easy. What's the story for more complex updates?

<comment><USER12> Declarative data binding is intrinsically limited. If you want something that supports more complex updates, you need to start looking into things like incremental algorithms, self-adjusting computations, damage and repair, logged reversible effects, iterative processing methods, and so on.

Say you want to write a compiler whose input is "bound" to a source file; when the input changes, you don't want to recompile the entire file all over again. Instead, you memoize at AST node boundaries, trace dependencies between AST nodes, and then "clean" nodes when they become dirty, detecting changes that affect other nodes to clean them also.

To be honest, I find these data binding frameworks to be very boring, since we've been doing this forever (I did my dissertation on one myself). We really should be looking at the next level that supports incremental processing of more complicated updates.

<comment><USER3> Knockout does incremental updates as well as memoization. It instruments the evaluation of computed observables to determine the dependency relationships. I haven't delved into Ractive.js closely, but it sounds like it does something similar. How is what they do different from what you're describing?

<comment><USER12> Re-evaluation is easy enough when your computation is pure. But once you throw in some imperative effects, like adding a name binding to a symbol table, all of the declarative data binding frameworks fall down very quickly.

There is a lot of research in this area, concurrent revisions at MSR or self- adjusting computations at CMU to name a couple. Also, if you've seen Bret Victor's videos and wonder how any of those could be implemented for real, then this is where we need to go. It will be a fun trip though.

<comment><USER3> You're awesome. I've been playing around with a dependency network in JS recently, and I'd just been puzzling over exactly that question: how best to handle the case where a computation has side-effects. So I'm now busy googling concurrent revisions and self-adjusting computations. Got any further references to throw my way? Is there a standard literature on this stuff?

<comment><USER12> Actually it's a problem I'm working on right now, but I have nothing to share yet. Some sort of restricted programming model is needed, in my current system effects must be reversible and commutative, the last one being a major restriction but workable for most programs (e.g. set add is typically commutative, list add is not but can be hacked, dictionary set to the same key is not but can restricted by set once semantics).

</comment></comment></comment></comment></comment></comment><comment><USER13> This is fascinating: I've been writing a very (and I mean _very_ ) similar library that also uses the concept of a Parallel DOM (dependents, views updating on a 'data' property, nodes named by standard ids, all child nodes with IDs scanned for and bound to a property), I had just decided to create the concept of 'Keypaths' as my events were clashing on ids.

The thing I have that I can't see here is a selecting/switching node: essentially a page or a tab that holds multiple states but only presents one at a time.

Thus makes me very happy and very sad: happy as I don't have to write all things things now; sad becasue I don't get to write all these things now.

<comment><USER14> I would feel the same way if we switched places! Really interesting that we have such similar approaches.

</comment></comment><comment><USER15> Hi Rich,

This looks promising. Can you comment on similarities/differences between Ractive and facebook's React.js in terms of style and performance?

Also, looks like the github minified version is 72k, is that correct?

<comment><USER14> Thanks. Performance-wise, I haven't tested Ractive and React against each other, but that would be a test worth doing. Ractive is definitely built with performance in mind - it uses dependency tracking to ensure that the DOM is only updated when necessary.

As far as the style goes, I'm obviously biased, and I'd encourage people to try both to see what suits them best. For me, mustache syntax is very readable, even by non-devs (which makes collaboration and rapid prototyping very easy), and the Ractive API aims to be as easy as possible.

I find React's JSX to be a bit of a barrier (I'm aware that it's not essential to use JSX with React), but as I say it's a matter of personal preference.

Yes, it's currently about that size (27k gzipped) - one of my goals for future versions is to try and wrangle that down. It's not that big a library for the amount of functionality it contains, but smaller is always better.

<comment><USER16> Hey there! I'm on the FB/IG React core team.

Syntax differences aside, seems to me that React is geared more towards interactive UI components and Ractive is oriented more towards reactive documents, kind of like Tangle[1]. Is this accurate?

The similarity seems to be in the philosophy of the implementation (manipulating a fast representation and rendering to the DOM). It's pretty cool to see that we both discovered the "secret" though :) Seems like we're validating each others' projects!

If you ever want to nerd out we hang out in #reactjs on freenode.

[1] [http://worrydream.com/Tangle/](http://worrydream.com/Tangle/)

<comment><USER17> I agree with React being geared more towards interactive UI components, but on the other hand you could use Ractive with WebComponents/Polymer instead of MDV to get all this powerful component lifecycle.

Still working on a solution that mix Backbone for core models + Polymer for view lifecycle and custom elements + Ractive for awesomeness updating.

The only concern I have is that some people do not like to use logicless.. I think React is powerful for letting you declare full javascript evaluations and expressions on your template code and giving you more flexible/productive way of writing.

<comment><USER14> Ractive does have a way of including JavaScript evaluations in the template which as far as I'm aware is unique: [http://learn.ractivejs.org/#!/expressions/1](http://learn.ractivejs.org/#!/expressions/1)

The JavaScript expression is parsed into an AST, and references to parts of the data model are extracted so they can be dependency tracked and evaluated against the right context. Quite hard to explain concisely but I think it does what you're after.

</comment></comment></comment></comment></comment><comment><USER18> Its naming is a bit conflicting to component/reactive. The name "reactive" is so presumable that other people will choose in the future. [https://github.com/component/reactive](https://github.com/component/reactive)

I haven't looked into Rivet.js, component/reactive or other equivalent library. I'm just planning to research which library is the best fit for me. I don't really like full-stack framework like Angular. It was nice to know yet another candidate.

Does anyone know any other reactive template engine?

<comment><USER19> The name is actually "Ractive"

I like Knockout.js

<comment><USER18> Ah, "Ractive". Shame on my eye.

<comment><USER19> It wasn't your eye, the title was wrong for awhile!

</comment></comment></comment></comment><comment><USER20> So it's data binding + templating? Why would I use this over something like Rivets.js?

<comment><USER14> Data-binding is the most obvious feature of Ractive but there are others - easier event handling, transitions, animations, JavaScript-ish expressions within templates, server-side parsing and HTML rendering, and so on.

On the other hand, Rivets is much smaller, so if you only want the data- binding then it's a fine choice. Personally I really enjoy the freedom of writing mustaches straight into my template, rather than using data-bind attributes everywhere, but it's horses for courses.

<comment><USER21> Rivets.js can do mustache-style templating too: [https://github.com/mikeric/rivets/pull/182](https://github.com/mikeric/rivets/pull/182)

</comment></comment></comment><comment><USER22> Nice - looks very simple and lightweight! I especially like the effort put into the interactive tutorial documentation that these frameworks have. Angular and knockout both had stand out docs too!

Is there a particular niche for this framework would you say e.g. small, fast to market apps like news stories - or is is suitable for larger projects where you might normally reach for more of a "framework"?

<comment><USER14> Library author here - thanks! The interactive tutorials borrow very heavily from Knockout (in fact Knockout was a big source of inspiration all round).

It was initially designed to scratch my own itch - I'm a newsroom developer at the Guardian, where we turn around projects with fairly tight deadlines, so I guess you could say it's optimised for that. (Blog post here: [http://www.guardian.co.uk/info/developer- blog/2013/jul/24/ra...](http://www.guardian.co.uk/info/developer- blog/2013/jul/24/ractive-js-next-generation-dom-manipulation)) In particular I wanted an API that wouldn't be completely mysterious to journalists who are starting to dabble with code.

There's actually a separate discussion on Ractive at [https://news.ycombinator.com/item?id=6096545](https://news.ycombinator.com/item?id=6096545) \- I'm not sure what the HN etiquette is, can anyone enlighten me? (I appreciate both submissions though!)

<comment><USER22> I've had a look at the last slide now - I think the transitions could use a little work. With that in mind - how hard would it be to integrate with d3 do you think?

<comment><USER14> Yes, that slide is still a bit of a work in progress.

You can certainly use D3 (or any other library) alongside Ractive, though things could go awry if two libraries were trying to manipulate the same bit of the page at the same time - e.g. if an element has a style attribute like style='left: {{left}}px;' and D3 modifies the element's style, D3's changes will only last until the value of {{left}} is updated.

<comment><USER23> So what is ractive.js's equivalent of $scope.$apply ? $scope.$apply is used for this specific purpose, to notify angular of any external changes.

<comment><USER14> $scope.$apply is necessary because sometimes changes to the model happen outside Angular's event loop.

Ractive doesn't have this issue because updates always happen explicitly with ractive.set( 'key', value ) (or with array mutator methods). It's not quite as magical as Angular's frictionless updates, but it gives you slightly more control (e.g. you can do ractive.animate( 'key', value ) and so on), without needing to inherit from custom observable classes.

</comment></comment></comment></comment></comment></comment><comment><USER24> Can someone comment on where to find performance information on this framework? AngularJS has some very smart ideas that allow it to be magical and performant. This looks very cool, and I would like to make sure it is not just polling for changes. I'm suspicious because there is no $apply required. :)

<comment><USER14> Definitely no polling! Model changes are done explicitly with ractive.set() (or ractive.animate(), or array mutator methods). It uses a dependency tracking mechanism to update the view with the fewest calculations and DOM touches necessary.

</comment></comment><comment><USER25> I have a question, since this has been bugging me with other js MV* frameworks lately... Is the set() method necessary for updating single attribute? All browsers have supported getter/setter APIs (__defineGetter__ and Object.defineProperty), why not take advantage of them? Being able to say this would be cool:

        div.color = 'blue';

instead of:

        div.set({ color: 'blue' }); or div.set('color', 'blue');

Or would this cause other problems that I'm not thinking of?

Edit: my ruby cap is on a little tight today. Javascript programmers might not expect extra logic to be run just by updating a property. I still think it would be cool though :)

<comment><USER26> Many of these frameworks want to support IE 8, which is the default browser of windows 7. IE 8 only supports Object.defineProperty with DOM objects[0], which can be infuriating.

No one should use __defineGetter__ and __defineSetter__ because they are non- standard and deprecated[1].

[0] [http://kangax.github.io/es5-compat-table/#define-property- ie...](http://kangax.github.io/es5-compat-table/#define-property-ie-note)

[1] [https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineGetter)

Edit: left this tab open and I see this point has since been made, but I will leave the comment anyways.

<comment><USER25> Yes, the only reason I'd use __defineGetter__ would be a fallback for Object#defineProperty.

I'm curious if the IE8 limitation could be worked around, using something like:

        if (ie8)
            RactiveBaseModel.prototype = HTMLAnchorElement.prototype;

</comment></comment></comment><comment><USER27> Doesn't seem to work in Firefox: "TypeError: templateBlock.innerText is undefined"

<comment><USER14> That's very odd - which version of FF are you using? From the error I'm guessing you saw this on the tutorial pages?

<comment><USER28> Same for me on the homepage, messages.unread setter:

Firefox Aurora 24.0a2 (2013-07-19) and 2013-07-20

TypeError: templateBlock.innerText is undefined @ [http://www.ractivejs.org/:217](http://www.ractivejs.org/:217)

<comment><USER14> Well, that's embarrassing. Not sure how I missed that! Fixed now, as soon as GitHub pages updates. Thanks for the heads up

</comment></comment></comment></comment><comment><USER3> I like a lot of this, but one part I'm not so sure of is that, if I follow the docs, all get/set operations need to be from the root of the model. They take a "keypath" that starts at root, like "obj.get('subObj1.subArray[3].prop')". It seems to me like that would make it difficult to decompose a large application into component pieces. Your components, to do any get/set operations, would need to know their path from root. And what if that path changes, like an array that's modified? Seems like it could become a considerable barrier in mid-to-large applications.

<comment><USER14> You're right, all keypaths start from the root. One approach for large apps is to split the UI up into several Ractive instances (which might all be bound to a single global model, but 'start' at different keypaths).

Array modifications aren't generally a problem, because you'd reference the index from within the template - Ractive keeps the references up to date. Also, proxy event handlers are aware of the current keypath context - see this JSFiddle to see what I mean [http://jsfiddle.net/KJt2Y/2/](http://jsfiddle.net/KJt2Y/2/)

</comment></comment><comment><USER29> I like it's elegance, but it looks seems similar to using an Ember.js view and Handlebars templates. [http://j.mp/reactiveinember](http://j.mp/reactiveinember)

<comment><USER14> Thanks, this is an interesting example. I'm not wild about the extra DOM it creates (the placeholder <script> tags, etc) but I'm intrigued about what's going on under the hood - will poke around the source code.

</comment></comment><comment><USER30> Nice little library. I think i will have a close look and implement it into apiDoc ([http://apidocjs.com](http://apidocjs.com)) Templates - for now i use crude jQuery events (quick & dirty coded). With Ractive i think i can make the code cleaner and easier to modify.

At the moment i prefer Backbone in my other projects, but it is to "heavy" for a small single page (especially for users that did not know backbone and want to modify the templates).

</comment><comment><USER31> Cool website and examples!

You should probably explain how ractive.js differentiates itself from knockout. It's the direct competitor out there, not angularJS which is doing things very differently.

I glanced at the source and (correct me if I'm wrong) it seems array templating is done by simply comparing the length of the current and previous arrays? That's naive and buggy?

Good luck

<comment><USER14> Thanks! Yes, a lot of the feedback I've had through various channels has involved 'how does this compare to x', and I'm pleased to see that a lot of people have picked up on the similarities to Knockout. On the project homepage I specifically refer to Angular because my sense is that it will be more familiar to more people, and despite the many architectural differences they're attacking the same problem space (though Angular deals with xhr/routing etc whereas Ractive is focused on DOM stuff).

I'll add a comparison table of some sort to my (lengthening!) todo list.

Could you elaborate at all on 'naive and buggy'? I think I probably know what you're getting at, but I'd be interested to hear your thoughts.

Array sections do have a concept of 'smart updates' \- if you do e.g. list.push( newItem ) or list.splice( index, 1 ) then it will take a more surgical approach to updates. You can see this in action at [http://www.ractivejs.org/examples/todos/](http://www.ractivejs.org/examples/todos/), explanation of array modification at [https://github.com/Rich- Harris/Ractive/wiki/Array-modificati...](https://github.com/Rich- Harris/Ractive/wiki/Array-modification)

<comment><USER31> I must have missed the 'smart update' bit :)

</comment></comment></comment><comment><USER32> Sounds like a cool alternative to angularjs when you can't use or don't need a full-blown framework with routing, http layer etc.

<comment><USER33> Just to clarify, you don't _need_ to use routing/http/etc to get the benefits of Angulars DOM binding.

</comment></comment><comment><USER34> Can anyone comment on using Ractive as a replacement to Backbone.View? I'd think that making Ractive the view layer in a Backbone app would go a long way in augmenting a lot of the things that Backbone refuses to do in views (binding, smart DOM management/manipulation, actual templating support)

<comment><USER14> There's a Ractive.extend() function for this exact use case, which allows you to incorporate all the functionality your Backbone View would have in a reusable constructor. Info on the wiki: [https://github.com/Rich- Harris/Ractive/wiki/Ractive.extend()](https://github.com/Rich- Harris/Ractive/wiki/Ractive.extend\(\))

There's also a concept of 'adaptors' which are ideal for Backbone.Model <-> Ractive binding, though it's a bit experimental and incomplete at the moment. You can bind to a model manually like

model = new MyBackboneModel( attrs ); ractive = new Ractive({ el: whatever, template: tpl, data: model.attributes });

model.on( 'change', function ( model ) { ractive.set( model.changed ); });

</comment></comment><comment><USER35> I _really_ like this library.. it's been a while I've been looking for something similar. Angular was a bit "too big" for some of my projects, and backbone was just too verbose. Something like this will let me keep the code clean while still not getting involved in a big framework.

</comment><comment><USER36> @rich_harris:

1\. Great library, thanks for contributing!

2\. What was your motivation to add transitions and animations, isn't that a bit out of scope?

3\. I has no dependencies, why did you choose not to?

<comment><USER14> 1\. Thanks!

2\. Not at all - animation is something I need in my day job all the time, and having .animate() saves me so much time. I wasn't sure if I'd get much use out of transitions (I was jealous of ng-animate and wanted to see if I could implement something similar!) but I've found them very useful. Transitions probably need a bit more work though.

3\. It just doesn't need any. The amount of code I could save by using a helper library like Underscore wouldn't be worth the potential extra hassle of version headaches etc. Personally I much prefer using 'fire and forget' libraries with no dependencies.

</comment></comment><comment><USER37> So as this is DOM manipulation, it's a competitor to jQuery, right? If so, what are the advantages over jQuery, and would it make jQuery redundant now (for new projects)?

<comment><USER14> I wouldn't say it makes jQuery redundant - the AJAX stuff is helpful (if replaceable) and it does a great job of e.g. $div.height() and so on, which can be a source of cross-browser headaches without it. Though personally yes, I find I rarely use jQuery now I've got Ractive.

The difference is the difference between declarative and imperative programming. With jQuery you have to describe the steps that the browser has to follow in order to do something (e.g. $button.toggleClass( 'selected' ), whereas with Ractive you're much closer to simply declaring your intentions (e.g. ractive.toggle( 'selected' ), assuming your template references that variable). It's an inherently more scalable approach (which isn't to knock jQuery at all - they're attacking different if overlapping problems).

</comment></comment><comment><USER38> Is there anyway to use any other templating system with Ractive other than the Mustache style syntax? Couldn't use microtemplates / EJS style templating for example?

<comment><USER14> No, Mustache only I'm afraid. The reason is that it's not actually using Mustache or any of the Mustache-based engines (such as Hogan.js) - it's using its own implementation.

That's because almost all other templating engines are string -> string (i.e. you add data to a string template, and get HTML) whereas Ractive is string -> DOM. Microtemplates, EJS etc would have to be reimplemented as string -> DOM engines separately if they were to work with Ractive.

<comment><USER38> Seems like that should be decoupled for this exact reason.

<comment><USER14> Maybe one day ;-)

</comment></comment></comment></comment><comment><USER39> that is false statement actually

 _HTML is an amazing language for creating static documents, but it was never designed for interactive web apps_

</comment><comment><USER40> how would you compare it to github.com/component/reactive ?

</comment><comment><USER41> another frontend framework for Dom manipulation, so would this be the 50th one out there on the web?

<comment><USER42> Yes, and you better hope 50 more come out. Early adopters do your shit work for you. "______.js is picking up speed" is code for "Thousands of hours of unpaid labor have gone into making better tools for you, and evaluating them against other tools."

</comment></comment><comment><USER43> It's "Ractive.js", not "Reactive.js".

<comment><USER14> Indeed - as in 'interactive'. Got the name from Neal Stephenson's The Diamond Age, in case anyone wondered...

Though it is also reactive, in the 'reactive programming' sense.

<comment><USER43> Edit: Question answered in the other thread:

[https://news.ycombinator.com/item?id=6096660](https://news.ycombinator.com/item?id=6096660)

I haven't dug into it yet, but from the description it reminds me a bit of Facebook/Instagram's React js framework [1].

React creates a lightweight model of the DOM in memory, and when any part is changed, it sends a diff to update the browser DOM. No bindings necessary:

 _" When your component is first initialized, the render method is called, generating a lightweight representation of your view. From that representation, a string of markup is produced, and injected into the document. When your data changes, the render method is called again. In order to perform updates as efficiently as possible, we diff the return value from the previous call to render with the new one, and generate a minimal set of changes to be applied to the DOM."_

Your description is similar, but it's not clear how exactly the update is made:

 _" In this example, Ractive.js constructs a parallel DOM representation which is aware of its dependencies on the values of user and messages.unread. When those values change, it knows exactly which parts of the real DOM need to be updated.

This kind of surgical DOM manipulation is more efficient than constantly trashing views only to re-render them, and it scales far more elegantly than manually updating elements."_

How does the DOM update mechanism work?

[1]: [http://facebook.github.io/react/blog/2013/06/05/why- react.ht...](http://facebook.github.io/react/blog/2013/06/05/why-react.html)

<comment><USER14> Basically, items in the parallel DOM register themselves as dependants of 'keypaths', so a {{user.name}} mustache depends on the value of user.name. If you do ractive.set( 'user', { name: 'Bob' }), Ractive scans the dependency graph to find items that may need updating. The mustache will compare its new value to its old value, and if it has changed it will update the text node that it is mirroring.

I'm not intimately familiar with how React updates happen so I can't comment on how similarly we're doing things, but it looks like we have the same kind of approach.</comment></comment></comment></comment>


Show HN: Influence Grid, a tool for finding TikTok influencers - <AUTHOR> I created this tool to help marketers find TikTok influencers. Any feedback would be hugely appreciated:<p>https://www.influencegrid.com/ <comment><USER2> Very cool! Wish you could see more but I get you are trying to get subs.

Curious about how you got the information... but still good stuff. Would be useful for advertisers who were trying to figure out who to target.</comment>


Developers, please think wider - <AUTHOR> http://blog.eerlings.com/index.php/2012/08/03/developers-please-think-wider/

<comment><USER2> Couldn't agree more with this sentiment. We need less "social" and more useful.</comment>


Bomb in the Garden (2013) - <AUTHOR> http://unitscale.com/mb/bomb-in-the-garden/

<comment><AUTHOR> This article covers a lot of ground, but I really enjoyed this quote:

HTML and CSS—those are not programming languages. Those are data-entry formats. So if you as a designer have ever looked at HTML and CSS and said, "you know what, I would rather drink bleach than learn how to do that," then I think you've got the makings of a great programmer. Because nobody wants to work with that stuff. Programmers hate tedious work of any kind. I hate HTML and CSS. That's why I like programming. Because the point of programming is to represent ideas at a higher level.</comment>


Mozilla Labs lead: Why you want a world with multiple app stores - <AUTHOR> http://blog.finette.co.uk/post/1473250030/why-you-want-a-world-with-multiple-app-stores <comment><USER2> Once again a Mozilla affiliate misses the mark completely.

Apple is not a developer-facing company in the slightest anymore: they make products for consumers by and whole. Every single one of Pascal's arguments is to developers, and his lone point for consumers is really about the operator not letting developers do things all willy-nilly. Apple needs developers, they provide for developers, but their platforms are _built for consumers._ Meaning that features for developers aren't in the final build.

Repo competition is great for developers, but bad for consumers, in that yes, consumers _really do get that confused._ "Vibrant, more dynamic, more innovative place" means odd changes and sharp edges, and most computer _users_ don't want that in the slightest. Stable, similar and uniform are awesome for the majority of users, even if the curve is slightly behind what early- adopting technical users want.

You know how some people think that Microsoft Word is their operating system? Yeah.

<comment><USER3> Why does it matter that Apple is a consumer-facing company? This was a blog article written for developers.

If it's "all about the apps", then cons for developers mean cons for the users, in the long term.

And then you go and repeat an argument that the blog writer acknowledges as one of the tradeoffs in the article. So it's not like the blog writer disagrees with you fundamentally, it's just that you both have different ideas of the relative importance of "stable, similar and uniform"

And he does list some benefits of alternative app stores for consumers.

<comment><USER2> It matters because he says developer needs should take precedent in a consumer product.

Most people will never care about the benefits of competition between stores, and the negative of confusion will greatly outweigh the benefits. I really, really want to stress that. It's hard for anyone here to understand, but computers _are pretty damn scary_ for many people.

Android's app model is much better for anyone who reads HN (me included), but I don't know any non-technical Android users who have ever downloaded an app from the marketplace, let alone side-loaded one.

<comment><USER3> _It matters because he says developer needs should take precedent in a consumer product._

Your argument would be stronger if he actually said that.

</comment></comment></comment></comment><comment><USER4> _Current stores nearly unisono suffer from poor search functionality, lack of social discovery features_

There are all sorts of sites like appshopper.com, though, that provide alternate interfaces to enable such things. It's not like Apple's App Store (and I'm sure Google's Marketplace is no less open in this way) is closed to outside linkage.</comment>


Open Source Needs Open Source Companies - <AUTHOR> http://blog.jessitron.com/2019/03/open-source-needs-open-source-companies.html <comment><USER2> The entire crux of the post's commentary is an intentional misinterpretation of the original post. The motivating quote with the actual context is:

> At AWS, we believe that maintainers of an open source project have a > responsibility to ensure that the primary open source distribution _remains > open and free of proprietary code so that the community can build on the > project freely_

Amazon's core complaint is:

> Unfortunately, since June 2018, we have witnessed significant intermingling > of proprietary code into the code base.

The Elastic license itself professes to include code that isn't covered under the original Apache 2.0 license: [https://github.com/elastic/elasticsearch/blob/master/LICENSE...](https://github.com/elastic/elasticsearch/blob/master/LICENSE.txt)

> Within the "x-pack" folder, source code in a given file is licensed under > the

> Elastic License, unless otherwise noted at the beginning of the file or a

> LICENSE file present in the directory subtree declares a separate license.

If Elastic wants to adopt an open core model, that's perfectly fine, but mixing the open source and proprietary bits in the same repo is messy and should raise eyebrows.

What Amazon seems to be asserting is that a project that is open source shouldn't change the license terms. That is not an assertion, as this blog post claims, that the original developers must maintain the project indefinitely.

<comment><USER3> > If Elastic wants to adopt an open core model, that's perfectly fine, but > mixing the open source and proprietary bits in the same repo is messy and > should raise eyebrows.

GitLab recently proposed a similar action. See the below link for the trouble they had maintaining two codes bases for one application. I have dealt with git submodules-it is not fun.

[https://about.gitlab.com/2019/02/21/merging-ce-and-ee- codeba...](https://about.gitlab.com/2019/02/21/merging-ce-and-ee-codebases/)

This is what GitLab proposed. I thought they handled it very transparently. Other companies should take note.

        The gitlab-ce and gitlab-ee repositories are replaced with a single gitlab repository, with all open issues and merge requests moved into the single repository.

        All frontend assets (JavaScript, CSS, images, views) will be open sourced under the MIT license.

        All proprietary backend code is located in the /ee repository.

        All documentation is merged together and clearly states which features belong to which feature set. Documentation is already licensed under CC-BY-SA.

</comment></comment><comment><USER4> The blog comment is absolutely correct.

I distribute open source software. I give a big advantage to those willing to pay me through a support contract.

And as for the (unwritten) "promise the maintainer made", that social contract goes both ways. If that exists, then what of the promise that users will support the maintainer?

Remember esr's hyping of the "gift culture" to open source? In practice it's balderdash. Or as Zed Shaw puts it:

> There was sort of like this unwritten contract in open source that we had; > the unwritten contract with corporations was if you wrote open source that > they were using, you got some sort of job, or consulting fees, or at least > some respect so that way you could find jobs.

> ... I started to realize that "No, that contract has completely been > rewritten. It's totally different now. If you write open source, you're not > gonna get a job", and now what's been happening - and part of my tweet storm > and whatnot about open source - is that it's gone the opposite direction, > where what I see is sort of like almost direct action to prevent open source > developers from making money…

Quoted from [https://changelog.com/podcast/300](https://changelog.com/podcast/300) .

<comment><USER5> There is no 'promise that users will support the maintainer' and never has been.

Open source was originally about developers sharing code with each other and jointly contributing to it, to make their lives easier. Look at all the original GNU projects, they're almost entirely developer tools, shared infrastructure and games. The core right of open source is for users to modify the code, because in the GOL no distinction is made between users and developers, they are the same.

The fact that some people have been able to build companies on open source software is essentially a happy coincidence. That outcome wasn't considered or deliberately provided for in the licences or by the movement. If it hadn't been possible at all, the movement would have been fine with that.

Now that we have decades and generations growing up with commercialised open source, people are thinking that this was by design and something is wrong if open source isn't commercialisable in this way or that. No. Nothing is wrong. Commercialisation is occasionally an incidental side effect. It is not the point.

<comment><USER6> My man, that's not new at all: [https://books.google.com/books?id=yy8EAAAAMBAJ&lpg=PA31&dq=u...](https://books.google.com/books?id=yy8EAAAAMBAJ&lpg=PA31&dq=us+government+public+domain+software&pg=PA31&hl=en#v=onepage&q=us%20government%20public%20domain%20software&f=false)

Read, especially, the part about people selling free software to the government and the fact that early open source engineers got donations or sponsorships (second page).

You're lacking perspective here.

<comment><USER5> That was all still a side effect though. If such activities had not been compatible with open source, or the OGL in particular, it wouldn't have made any difference to the licenses or the reasons they were written the way they were.

</comment></comment></comment></comment><comment><USER7> While Amazon is most definitely not the best messenger to be delivering this message, they're correct in drawing a bright line between what is open source and what is proprietary.

From an open source contributor's point of view, if Elastic is just going to exclusively license your contribution under their proprietary license, then you're just doing unpaid labor for Elastic and all its customers with no benefit to the open source community.

From an open source developer's point of view, you want to make sure that if you do use Elasticsearch in your software, you absolutely don't want to subject the rest of your software to Elastic's proprietary license just because of confusion around what code is licensed with what.

There is nothing wrong with monetizing open source software (people need to eat, after all), but claiming software as open source while having a very nebulous code licensing situation is not open source at all.

<comment><USER8> If you contribute code to a project under Apache 2.0 terms, or a CLA without any copyright assignment, how can a company license it "exclusively ... under their proprietary license"?

You mentioned subjecting an entire project that uses Elastic proprietary code to their proprietary license. Are you confusing source-available terms for copyleft terms?

The licensing situation for Elastic work is far less nebulous than for much other open source, both legally, and in public notices. See:

[https://github.com/elastic/elasticsearch/blob/master/LICENSE...](https://github.com/elastic/elasticsearch/blob/master/LICENSE.txt)

Way easier to look at than the nightmare that is 100-character SPDX license expressions for distribution packages.

<comment><USER9> > _If you contribute code to a project under Apache 2.0 terms_

Apache 2.0 is applied per source file, not per the whole project. This is unlike copyleft licenses like the GPL, which have a demand for the whole project to be licensed under GPL-compatible terms. In other words, for a repository that mixes Apache 2.0 with proprietary code, your contribution isn't necessarily licensed under Apache 2.0, unless you're explicit about it (e.g. the source file has the license header).

That said, even if the license if liberal (like Apache 2.0 is), that doesn't mean anybody can change it without your approval. This is a common misconception with liberal licenses. Just because the license is very permissive, that doesn't mean you can copy / paste that code and re-license it in any way you want, without explicit permission from the author.

So you're correct in that regard.

<comment><USER8> Apache 2 can be applied to whole projects. It doesn't say anything to the contrary.

That's very common in language communities with strong packaging norms, like npm and Ruby.

</comment></comment></comment></comment><comment><USER10> Despite Amazon's posturing about its care for open source, Elastic's response was pathetic. If Elastic doesn't like their Apache 2.0 software getting forked, maybe they're the ones with "fake altruism or benevolence" (their words). If Elastic is feeling threatened by AWS, they've chosen the wrong business model.

<comment><USER11> From what I could tell from the response, Elastic didn't have a problem with Amazon forking their product. It was more rebuttal of Amazon's claims that Elastic doesn't really support open source.

<comment><USER10> Quote from the Elastic response [1]:

"Our products were forked, redistributed and rebundled so many times I lost count. It is a sign of success and the reach our products have. From various vendors, to large Chinese entities, to now, Amazon. There was always a "reason", at times masked with fake altruism or benevolence. None of these have lasted. They were built to serve their own needs, drive confusion, and splinter the community."

They're saying Amazon "forked, redistributed and rebundled" just to "to serve their own needs, drive confusion, and splinter the community". That's all BS, except the "serve their own needs", which the license that Elastic has chosen (and benefited from) explicitly grants.

[1] [https://www.elastic.co/blog/on-open-distros-open-source- and-...](https://www.elastic.co/blog/on-open-distros-open-source-and-building- a-company)

</comment></comment></comment><comment><USER12> From a comment on the Elastic post earlier today:

"We build something on Elastic - and trying to work with them to get licensing was at best a major PITA. In ~2017 Elastic decided they wanted to go Enterprise Only. They started to charge $100k for x-pack, though one could get a dev license for $50K.

We quickly built a SQL parser for Elastic, an alerting engine, some other bits. These are all bits that just went poof yesterday when Amazon released opendistro - and I couldn't be happier. Sure we'll have to slice out a bunch of code, but at the end of the day it didn't have value to our core business."

[https://news.ycombinator.com/item?id=19370085](https://news.ycombinator.com/item?id=19370085)

The trouble is, once an open source company puts essential stuff under a shared source license, and calls it open source, you don't know if that's all they're going to do, or if they're going to keep charging more, or putting more essential stuff under a non open source license.

The simplicity that drew people into using the open source product is gone, and there's an uncertain future.

It's hard to find an open core product that has only enterprise features in its enterprise offering. For instance, in Greylog2, views and a user audit log would be useful to pretty much anyone. [1] And people would probably be happy to implement and contribute it themselves. And the company wouldn't merge it in because it competes with their enterprise offering. With nginx, a feature whose usefulness is not limited to enterprise that is only in nginx plus is dynamic reconfiguration, which can be used to implement rolling restarts. [2]

[1]: [https://www.graylog.org/products/open-source-vs- enterprise](https://www.graylog.org/products/open-source-vs-enterprise)

[2]: [https://www.nginx.com/blog/dynamic-reconfiguration-with- ngin...](https://www.nginx.com/blog/dynamic-reconfiguration-with-nginx-plus/)

</comment><comment><USER13> If the MBA's were looking for a system to commoditize the nerds, they could not have come up with a better system than open source.

A nerd writes an scalable, robust, communication library and makes it open source. Do the big bucks go to the nerd? The one time popular kid in high school, pays a college student to wrap it in a chat app and becomes a billionaire.

Nerds write a database. The database is opensource so they get a pittance. The business people put the database behind a web service and make billions.

Nerds write a full text search engine. Do they get rich? No, but the business people sell it as a SAAS and get rich.

The nerds reward: They get to work as drones for the business people, who will lay claim to all their efforts both inside and outside the company.

I cannot see our current open source environment lasting 20 years. Relying on support is going to be more and more of a problem. What scenario do you think will make the Fortune 500 CEO happy: a) You bought support for open source product X from small company YZ which developed and open sourced X but which no body has heard of, or b) that you bought a support contract from fellow Fortune 500 company C which everybody has heard of, but does not contribute any upstream changes to X?

<comment><USER14> "who will lay claim to all their efforts both inside and outside the company"

Ah, yes, the infamous "inventions" clause which pretty much any and all developers need to sign to get a job. Here in California, we have a key exception encoded in law: Anything I do on my own time, with my own gear, not related to my day job is something I can release as open source code.

And there are starting to be companies with "open source Fridays" out there who can and do let people openly work on open source while on the clock.

</comment></comment><comment><USER15> The "Open Source" rhetoric and appeal to a mythical "Open Source Community" seems out of place coming from both Elastic and AWS when the truth is that both companies, and their developers, need compensation, or simply wouldn't exist otherwise. Elastic uses Apache Licensing to make inroads (do they have outside contributors?), and AWS needs commodity software to sell infrastructure. Why not be honest about it?

</comment><comment><USER16> I agree. It sucks when some giant company forks your project and gives you nothing. But that's exactly the point of open source licences. If Elastic doesn't like getting their projects forked why did they use Apache 2.0 in the first place ? They could have used a proprietary licence.

<comment><USER17> Exactly, don't like GPL?

Don't come around complaining companies are taking advantage of business friendly licensing.

<comment><USER18> Choose GPL - enterprise customers scare to touch your product, no consulting, no fees, no nothing.

Choose "business friendly licensing" \- Amazon sell your product as a service, then fork it away.

<comment><USER16> Then choose a proprietary licence. Enterprise customers will not be afraid to touch your code and nobody will be able to fork it without your permission.

<comment><USER19> Then it is hard to get initial customers to build a healthy user base and compete with close source competitors. After all if I am paying upfront I would expect a very different user experience, and more entitled to demand more.

Open source just scales better in that regard. It is low barrier, low maintainence, and self organized. Had it be proprietary Elasticsearch will never see the day of going public.

So open source is how it initially comes to being, then they find there is commercial opportunity in it, and for a long time, those objectives can coexist.

But open source is open source. I don't think it guarantees you can make money of it. You are open sourcing your code, then accusing other parties for using it under the license permission, is ... contradictary. There is after all, an element of freedom in the open source dogma since its founding, be it this free or that free.

I am not a fan of SV vulture capital approach of building commercial for profitable companies around established open source projects. They are not doing anything different than Amazon in my opinion. If more and more essential features are moving to closed source land, then the open source is broken way before Amazon took over.

So let money do money's stuff, and open source be open source. It has a definition anyway, if that what that code is permitted to be used, so be it.

I have personal repos that has thousands of stars. I thought for a very short period of time, had I not open source it might give me additional several grand of income, after all there are several companies contact me. But I know it is too late to think that way, I already enjoy all the attention can exposure by open sourcing it, now I wish I can eat the cake and have it? That is no magic open source could offer.

Disclaimer: Ex-Amazon Employee.

</comment></comment></comment></comment></comment><comment><USER20> I am so surprised people here are taking Amazons side. Whilst technically yes open-source implies open, the movement was never about giving away free stuff to mutli-national conglomerates, who themselves do hardly any open-source. With Amazon, its all take. Take take take.

<comment><USER21> Eh... rarely is a pretty harsh outlook. We forget that these companies tend to have their employees supplying patches and features to many open source projects that matter (like the Linux kernel), working on standards, etc.

<comment><USER22> Amazon's record with OSS contributions is notoriously poor. For example, see their refusal to allow their query routing extensions to pgbouncer to be used on anything other than AWS:

[https://github.com/awslabs/pgbouncer-rr- patch/issues/3](https://github.com/awslabs/pgbouncer-rr-patch/issues/3)

There's certainly room to criticize Elastic for their approach to OSS and/or their response to Amazon here, but Amazon's "open-sourcing" of a bundle of the OSS bits of Elasticsearch plus a few third-party OSS plugins is nothing other than self-serving, opportunistic PR.

</comment></comment></comment><comment><USER23> What people seems to forget frequently is that a lot of the value proposition from elasticsearch comes from lucene, which is an Apache foundation project. And they are able to deliver more value over it because it's permissive Apache license. It's not like elasticsearch built everything from the scratch and there are others approfiting from it.

</comment><comment><USER17> It is easy, if you want the FOSS dream to keep alive, pay the developers for the software.

Donations, buy their books, subscriptions, distribution CDs, whatever.

Otherwise don't come around complaining how their are selling themselves, while not being willing to pay for the tools of trade.

<comment><USER24> This is really the only viable way to support FOSS. Considering the amount of money some people make in tech, they should allocate a % of that to donating to open source projects each year. But no, nothing's going to change the way we live because we can always take but never give, and now things are changing for the worse.

<comment><USER25> Could be great to have a way to automatically know all the FOSS / freeware software one uses and donate to all them at once

</comment></comment></comment><comment><USER26> The quoted quote:

"At AWS, we believe that maintainers of an open source project have a responsibility to ensure that the primary open source distribution... does not advantage any one company over another. "

The actual, original quote from the AWS blog:

"At AWS, we believe that maintainers of an open source project have a responsibility to ensure that the primary open source distribution remains open and free of proprietary code so that the community can build on the project freely, and the distribution does not advantage any one company over another."

It's a misquoting, designed to change the meaning to suit his needs. Once you read the original blog post in its entirety, this guy's arguments lose their foundational premise.

</comment><comment><USER27> It feels to me like there was a lot of social pressure over the last 10 years or so for open source projects to use the most permissive open source license they could. You were cool and "more free" if you used Apache, BSD, or MIT licenses. I wonder if this is coming back to bite us now.

Red Hat built a very successful business selling mostly GPL software. Would things be different for the companies we've been talking about lately (mongo, redis, elastisearch, etc.) if they had gone with a GPL license and a Red Hat- like business model from the start?

</comment><comment><USER28> What I think is that Open Source needs _less_ of these sort of "Open Source companies". Especially the kind that are mostly focused in abusing open source to peddle their proprietary software.

</comment><comment><USER29> Amazon talking about open source is funny. Don't let them divide the community they never contribute to.

Talking is easy Amazon.

</comment><comment><USER14> OK, Amazon, I agree. We need more open source out there. Let's start by releasing your Bookerly font under an open font license, just like how Google released their corresponding Literata font under the SIL Open Font license.

</comment><comment><USER30> Open source will always be a tool used by corporations to do terrible things. That's why corporations backed it over Stallman's free software movement. They knew that someone like Stallman, who actually wanted to give users power over their computing, was fundamentally going to stop them from being total sleezebags. Open source gives them the ability to pretend to care, while using the software in nefarious ways.

</comment><comment><USER31> so I don't get it, why don't people use GPL3/AGPL3 etc ?it seems like it allows projects to make money on their products, and also be free software at the same time. when things are licensed APL2 mit bsd etc whatever do people expect an implicit agreement where we want them to promise they won't use it anyway they want?

</comment><comment><USER32> There's more than just companies or people working in their free time. This might not be very popular for the libertarian fringe, but state support is an option that's probably better than other models. And we already got that to a large degree, with plenty of software coming from universities or state-funded research projects.

Granted, that might not be the next Javascript framework one needs to fill developer ennui.</comment>


Respect, Validation for PHP developers - <AUTHOR> http://thechangelog.com/post/3161849503/validation-the-most-awesome-validation-engine-ever-creat

<comment><AUTHOR> I dig the chainable syntax especially.</comment>


U.S. Accuses China of Detaining Up to 3M Muslims in 'Concentration Camps' - <AUTHOR> https://www.forbes.com/sites/zakdoffman/2019/05/04/xinjiang-u-s-accuses-china-of-putting-up-to-3m-muslims-in-concentration-camps/#3a1c719272b1 <comment><USER2> Another scaremongering article from this author again. This author's company directly competes with surveillance and security companies from China.

Official number is 13k [1], but people think those jaw dropping estimations from religious groups are more believable.

[1] [https://www.apnews.com/0e3b005d281345278ed470823096ec9b](https://www.apnews.com/0e3b005d281345278ed470823096ec9b)

<comment><USER3> I don't know this guy specifically, but it's been reported by other sources. This is a real thing that's happening.

I find the general Chinese apologism on this site strange. Even if it were 13k why would it not be an issue that China is placing people in concentration camps? Not even to get into the argument about the reliability of the 13k number because that's just laughable given literally every source that isn't China's government disagrees with that.

[1] [https://www.google.com/amp/s/mobile.reuters.com/article/amp/...](https://www.google.com/amp/s/mobile.reuters.com/article/amp/idUSKBN1KV1SU)

[2] [https://mobile.reuters.com/article/amp/idUSKCN1S925K](https://mobile.reuters.com/article/amp/idUSKCN1S925K)

[3] [https://www.state.gov/r/pa/prs/ps/2019/03/290713.htm](https://www.state.gov/r/pa/prs/ps/2019/03/290713.htm)

<comment><USER4> There is not "general Chinese apologism" on HN. What there is, is divisiveness on China-related topics that is growing for social, geopolitical, and media reasons completely beyond the scope of this site. Moreover, the population on HN is majority Western (50% US, 30% Europe, 7% Australia/Canada, if I remember correctly), so views here are skewed in rather the opposite direction to what you suggest.

HN users don't have to hold any particular views on these topics but they absolutely have to treat each other respectfully, including by not calling names (such as "Chinese apologism"), and nationalistic flamewar is not permitted.

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

<comment><USER3> Even if the population follows that distribution it doesn't mean the comments follow a homogonous reflection of the dominant opinion of the population.

I apologize if the apologism comment went too far. It is my perception in reading HN comments, and is not meant to be a normative view of the facts, and especially not meant to be nationalist comment.

You also did not add anything to the discussion by trying to call me out as "disrespectful." This just further derails the discussion. I don't know what the goal of your comment was, but to get the discussion back on track I'll just add more sources to bolster my position and let any substantive discussion follow:

[https://www.theguardian.com/world/2018/jan/25/at- least-12000...](https://www.theguardian.com/world/2018/jan/25/at- least-120000-muslim-uighurs-held-in-chinese-re-education-camps-report)

[https://www.hindustantimes.com/world-news/muslims-in- china-p...](https://www.hindustantimes.com/world-news/muslims-in-china- province-detained-in-re-education-camps-invasive-surveillance-on-say- reports/story-aEVi9tyhRAyrPBmPhjhCvL.html)

[https://www.spiegel.de/international/world/china-s- xinjiang-...](https://www.spiegel.de/international/world/china-s-xinjiang- province-a-surveillance-state-unlike-any-the-world-has-ever- seen-a-1220174.html)

[https://www.bbc.co.uk/programmes/p06gds2h](https://www.bbc.co.uk/programmes/p06gds2h)

[https://foreignpolicy.com/2018/02/28/a-summer-vacation-in- ch...](https://foreignpolicy.com/2018/02/28/a-summer-vacation-in-chinas- muslim-gulag/)

[https://www.foreignaffairs.com/articles/china/2018-06-20/ree...](https://www.foreignaffairs.com/articles/china/2018-06-20/reeducation- returns-china)

[https://www.ft.com/content/ac0ffb2e-8b36-11e8-b18d-0181731a0...](https://www.ft.com/content/ac0ffb2e-8b36-11e8-b18d-0181731a0340)

[https://chinachange.org/2018/08/10/a-call-for-a-un- investiga...](https://chinachange.org/2018/08/10/a-call-for-a-un- investigation-and-us-sanctions-on-the-human-rights-disaster-unfolding-in- xinjiang/)

</comment></comment></comment></comment><comment><USER5> I actually find the evolution of this blatant, shameless propaganda amusing.

You could actually observe, in real-time, the ramping up of accusations and headline hysterics in sequence:

1\. 50k muslims detained

2\. 100k muslims detained and put into re-education camps

3\. 500k muslims arrested and put into _concentration_ camps!

4\. One _million_ muslims torn out of homes and put into concentration camps and getting their organs harvested!

5\. _Three_ million muslims torn out of homes and put into concentration camps, getting organs harvested _and_ being brutally tortured!

It's easy to see how Americans were so readily misled about Iraq.

<comment><USER6> It seems a lot of your recent comment history is defensive of the status quo in China. I'd be curious to know your background. Do you live there?

<comment><USER5> I am not defensive of the status quo in China. I'm simply presenting an alternative viewpoint to the recent, ongoing anti-China media/social-media blitz campaign.

Sorry, but I will not provide more information about myself than I have to. It doesn't matter anyhow since I will be accused of being a CCP shill 50c poster anyway.

<comment><USER6> Apologies, I didn't mean to offend, I'm just trying to understand where you're coming from. Can you help me understand what makes the reports on the Chinese government's detention of Muslims propaganda rather than news?

<comment><USER5> The lack of objective, conclusive evidence.

The lack of a cohesive and consistent narrative.

The current geopolitical climate.

<comment><USER6> > The lack of objective, conclusive evidence.

It's my understanding that the Chinese government has acknowledged and even run television commercials, such as this one[1] about the camps. Chinese officials have also made several comments to Chinese newspapers about the existence of the camps[2, 3] and have commented that the purpose of those camps is "reeducation" and to "reform extremism" through labor. The comments also note the purpose of the camps is to prevent terrorism and "separatists" by forcing them to speak the language of the "homeland" which seems to indicate the camps are predominantly intended for Muslims.

Satellite images[4] of the camps indicate the rapid growth of the facilities and the existence of watch towers, redundant high walls, and barbed wire would least most reasonable people to agree these facilities are built to house people against their will. The Chinese government has also acknowledged as much. For example, the Government has repeatedly pointed to the "Opinions on Several Issues on the Application of Law in Cases of Terrorist Activities and Extremism Crimes"[5] as the legal justification for the imprisonment of "terrorist extremists." However one of the "extremist" activities that can be used to imprison someone is "inciting" people to hold a religious marriage ceremony. The document also allows for "administrative punishment" without a trial or conviction.

One analysis of arrests (using data reported by the Chinese government) showed 21% of all 2017 arrests in the country were in the Muslim region of Xinjiang.[6] Given the region accounts for only 1.5% of the total population of China the arrests of ethnic Muslims seems disproportionately high.

We admittedly don't have exact data on the _number_ of people imprisoned against their will but people have been able to estimate given the number and size of facilities built and by using job postings/factory information available online.

Even if we only looked at the evidence provided by the Chinese government we can objectively conclude that:

         (a) These labor camps exist;

         (b) These camps detain people without a trial or conviction;

         (c) The primary purpose of these camps is to "reform" ethnic Muslims living in the Xinjiang region; and

         (d) At *least* 500,000 people from the region have been sent to these camps.

Given that the source of all of the information I've outlined above is the Chinese government can you be more specific about the "objective, conclusive evidence" you'd need to consider the information reliable?

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

[2A - Requires Google Translate] [http://www.chinaxinjiang.cn/zixun/xjxw/201810/t20181016_5707...](http://www.chinaxinjiang.cn/zixun/xjxw/201810/t20181016_570748.htm)

[2B - "Full" English Transcript is missing significant portions compared to 2A] [http://www.xinhuanet.com/english/2018-10/16/c_137535720.htm](http://www.xinhuanet.com/english/2018-10/16/c_137535720.htm)

[3] [http://wap.xjdaily.com/xjrb/20181111/118479.html](http://wap.xjdaily.com/xjrb/20181111/118479.html)

[4] [https://www.abc.net.au/news/2018-11-01/satellite-images- expo...](https://www.abc.net.au/news/2018-11-01/satellite-images-expose- chinas-network-of-re-education-camps/10432924)

[5] [https://www.chinalawtranslate.com/en/%E5%85%B3%E4%BA%8E%E5%8...](https://www.chinalawtranslate.com/en/%E5%85%B3%E4%BA%8E%E5%8A%9E%E7%90%86%E6%81%90%E6%80%96%E6%B4%BB%E5%8A%A8%E5%92%8C%E6%9E%81%E7%AB%AF%E4%B8%BB%E4%B9%89%E7%8A%AF%E7%BD%AA%E6%A1%88%E4%BB%B6%E9%80%82%E7%94%A8%E6%B3%95%E5%BE%8B%E8%8B%A5/)

[6] [https://www.nchrd.org/2018/07/criminal-arrests-in- xinjiang-a...](https://www.nchrd.org/2018/07/criminal-arrests-in-xinjiang- account-for-21-of-chinas-total-in-2017/)

<comment><USER5> >It's my understanding that the Chinese government has acknowledged and even run television commercials, such as this one[1] about the camps. Chinese officials have also made several comments to Chinese newspapers about the existence of the camps[2, 3] and have commented that the purpose of those camps is "reeducation" and to "reform extremism" through labor. The comments also note the purpose of the camps is to prevent terrorism and "separatists" by forcing them to speak the language of the "homeland" which seems to indicate the camps are predominantly intended for Muslims.

You seem to be under the false impression that I have denied the existence of the camps. I don't, and nowhere have I done so. I dispute the scale and characterization of the camps. Namely: millions detained, hard labor, torture, organ harvesting. I have yet to see any objective evidence proving any of these allegations.

>Satellite images[4] of the camps indicate the rapid growth of the facilities and the existence of watch towers, redundant high walls, and barbed wire would least most reasonable people to agree these facilities are built to house people against their will.

Ok, so you have now proven that the Chinese government is building a detention facility at best, at worst a prison/concentration camp. Do they have the right to build prisons? Do they have the right to build prisons to house extremists and/or terrorists? We don't know anything about who they are housing there or why amongst a multitude of other unknown variables. Also, prisons are indeed generally built to house people against their will.

>The Chinese government has also acknowledged as much. For example, the Government has repeatedly pointed to the "Opinions on Several Issues on the Application of Law in Cases of Terrorist Activities and Extremism Crimes"[5] as the legal justification for the imprisonment of "terrorist extremists." However one of the "extremist" activities that can be used to imprison someone is "inciting" people to hold a religious marriage ceremony. The document also allows for "administrative punishment" without a trial or conviction.

The context of that line precedes it ("using extremism to"), and the line is actually more nuanced than that. It mentions the word "masses".

(5) _Using extremism_ to commit any of the following conduct, is to be convicted and punished in accordance with Criminal Law article 120-4 as the crime of exploiting extremism to undermine the law: 1.Inciting or coercing the masses to hold religious ceremonies in place of marriage or divorce registration, or interfering with marital freedom;

In other words, one cannot _force_ masses of people to hold religious ceremonies against their will, _in lieu of official marriage registration_. It also says interfering with marital freedom, for example things like arranged child marriages, are illegal. Stopping someone from marrying out of race or out of religion in the name of your religion would be also illegal. These scenarios are quite common and accepted in certain religions and are contrary to the CCP's long-term goals of population integration (whether this is right or wrong is another argument). Yes, the term _extremism_ is loosely defined and has been used and abused by many countries in recent history to justify certain actions. "One man's terrorist is another man's freedom fighter", etc, etc.

> One analysis of arrests (using data reported by the Chinese government) > showed 21% of all 2017 arrests in the country were in the Muslim region of > Xinjiang.[6] Given the region accounts for only 1.5% of the total population > of China the arrests of ethnic Muslims seems disproportionately high.

CHRD is headquartered in Washington D.C so you'll excuse me if I have some doubts. Aside from that, from your [6] citation you've linked:

"According to Chinese government data, criminal arrests in Xinjiang accounted for an alarming 21% of all arrests in China in 2017, though the population in the XUAR is only about 1.5% of China's total, based on the 2010 Census. Ethnic minorities account for nearly 60% of Xinjiang's population, the largest group being ethnic Uyghurs, who account for 46% of the population. _Though the government does not provide the data disaggregated by ethnicity, criminal punishment would disproportionately target the Uyghur Muslim group based on their percentage of the population._ "

That last line is of particular concern because it proves that the figure of "21% arrested are Uyghur" is purely conjecture. Furthermore, the footnotes to the statistics used in that same article show the following:

>* The Xinjiang People's Procuratorate (XPP) Annual Work Report 2013 is not available online, so the number of arrests for 2013 is estimated based on the 2014 report figure, which is stated as increasing by 95.7% from 2013. __The XPP Annual Work Report 2017 does not provide the number of arrests for 2017, but provides the total for 2013-2017, so the 2017 number is estimated by deducting the totals from other years. __* The Supreme People's Procuratorate Annual Work Report 2017 does not provide the number of arrests for 2017, but provides the total for 2013-2017, so the 2017 number is estimated by deducting the totals for other years.

Again, estimations, projections, deductions abound. Where is the concrete evidence?

> We admittedly don't have exact data on the number of people imprisoned > against their will but people have been able to estimate given the number > and size of facilities built and by using job postings/factory information > available online.

There is decidedly _no_ evidence on the number of people imprisoned against their will, the nature of their crimes, etc. No concrete evidence other than satellite photos of some facilities with barbed wire fences surrounding them. While I personally think it is likely that these are indeed prisons, there are many factories, secure warehouses, secure worker dorms with such fences. What do these satellite images really prove?

> Even if we only looked at the evidence provided by the Chinese government we > can objectively conclude that:

         (a) These labor camps exist;

         (b) These camps detain people without a trial or conviction;

         (c) The primary purpose of these camps is to "reform" ethnic Muslims living in the Xinjiang region; and

         (d) At *least* 500,000 people from the region have been sent to these camps.

(a) That has not been disputed, though the nature of the labor may be in dispute.

(b) Not in dispute

(c) The primary purpose is to reform _extremist_ Muslims living in the Xinjiang region. I'm sure a lot of these alleged extremist Muslims happen to be Uighur, but I doubt that their ethnicity is of primary concern.

(d) No concrete evidence of this

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> China should finally get reprimanded

</comment><comment><USER8> Meanwhile, the US military is planning how to deal with so-called "terrorists," many of whom were peasants sold to warlords to collect bounties, to die of old-age in Gitmo. Also, ripping children from their parents in migrant and asylum-seekers concentration camps. Pot, meet kettle.

<comment><USER9> While I agree both of those things are repulsive - the scales do not match up. There are 3 _million_ people in camps in china, vs about 1000 at the height of gitmo. The border camps come a little closer in raw numbers - somewhere around 0.5 millions people per year, but they are detained for short periods of time. Estimates vary but we're talking a few days.

Scale matters. Don't try to downplay how completely fucked up these camps are.

<comment><USER5> You're absolutely right: scale matters. The camps are not really comparable to gitmo.

They are perhaps more akin to the U.S prison system were thousands upon thousands of blacks and latinos are held, sometimes in isolation, sometimes for years, without charge. Pretty fucked up.

<comment><USER9> I hear you and agree. Two wrongs don't make a right, so the fact that the US has done and does do very messed up things does not make what us happening to Chinese muslims any less disturbing.</comment></comment></comment></comment>


Show HN: Sheetlabs – Turn your spreadsheets into APIs - <AUTHOR> https://sheetlabs.com <comment><USER2> This is a really clever idea. So simple and almost-obvious, yet it's the first time I come across this. Genius.

Particularly like the fact that REST APIs are pretty easy to start with providing GET access to resources, but get messy when you start doing POST, PUT, DELETE, PATCH etc. In this case, it's read-only by definition. That must make things so much easier. I can anticipate people asking for update access in future, but if you can get customers without it, I'd hold off with that for as long as possible.

One thing though - I think you should definitely raise your prices. 20Gb and 10 million queries for only €15 per month??!!

<comment><USER3> Actually there is a company out there called [https://www.ragic.com/](https://www.ragic.com/). Not exactly same but similar.

<comment><USER4> This strikes me as different. This looks a lot like Microsoft Access. A tool for "simplifying" database construction and common tasks like reporting (which doesn't actually work except in very simple cases, because you quickly reach the point of needing to understand concepts like normalization and foreign keys even if the GUI is pretty).

</comment></comment></comment><comment><USER5> I'm guessing I'm simply not considering the target audience, but so far as I know the groups (people who communicate primarily via spreadsheets) and (people who know what an API is) have a fairly small overlap.

Maybe I'm just underestimating how widely used spreadsheets are for communicating programming information. I've never seen it, but hey, I've never seen a lot of things.

<comment><AUTHOR> I can only speak for my use case, but I've heard similar things from other people, so I don't believe it's only me. I agree the overlap is small between those groups, but I think it's pretty painful when it does occur.

I've done quite a bit of freelance web development, mostly in the telecoms and infrastructure sectors, and there was often a requirement to integrate with a third party. This "integration" almost always took the form of periodically receiving spreadsheets from them, manually importing them into our database, and then also handling the periodic updates. And the apps I was building only needed to query a few rows each day! Sometimes they'd eventually create an API, but most said they couldn't or wouldn't due to time or complexity. Sheetlabs is my attempt at removing some of these barriers.

Anyway, that was _my_ itch, and this is how I'm scratching it!

</comment></comment><comment><AUTHOR> Author here. Thanks for all the feedback, very much appreciated, I wasn't expecting this. Feel free to email me if you have questions you'd like to take off-list (email in profile).

Some stats, which may be useful for anyone doing a Show HN soon and wondering about volumes:

\- 11k visits at the time of writing (3 hours in)

\- 71% of hits so far are from the Americas (hit the California server), 29% from elsewhere (hit the London server). Given the time in Europe, there is significant bias here though.

\- 6.7% of hits used IPv6

\- 76% used Chrome, second place was FF at 11%

<comment><USER6> You need to put up some examples of what can be done by this service. Something visitors can interact with without registering is ideal to convince them to register.

<comment><AUTHOR> There's an example API created with the service here: [https://sheetlabs.com/#/services/doc/ACME/getDomain](https://sheetlabs.com/#/services/doc/ACME/getDomain)

This is linked off the front page, but could certainly be more prominent (as another commenter said)

<comment><USER7> I stared at that for 10 minutes trying to find the spreadsheet. I assume there is a spreadsheet backing it? You should actually show people the spreadsheet - just seeing an API description without demonstrating that it runs off a simple spreadsheet almost kind of defeats the whole purpose of the service!

<comment><AUTHOR> Thanks for the feedback. Yes, it is backed onto a spreadsheet effectively. Showing it is a good idea for the front page.

But I don't think showing the spreadsheet in the API docs is so useful; the idea is to present a clean API to the users, and they don't even need to know that the data was originally from a spreadsheet.

<comment><USER8> +1 on showing the spreadsheet. It doesn't have to be on the docs, can be on the website. I'd put front and center, if you have this spreadsheet, it creates this API. You can even look into giving access to the sample spreadsheet for testing directly from the web pages.

</comment></comment></comment></comment></comment></comment><comment><USER9> Very interesting idea: one possibility for driving demand would be to provide free API hosting for public-domain spreadsheet data (essentially anything published by the government) and charge heavy usage users for access (they could eventually just import the source data if they cared that much, but it could help get the word out).

<comment><AUTHOR> I've been thinking along very similar lines, but more along a Github-esque model: Host your data and APIs for free, providing you publish them publicly. If you take them private, you pay a little. Early days yet, today is mostly about gauging interest.

<comment><USER9> Hehe: I was trying not to use "Like Github for APIs" in my description, but yes, that is pretty much what I was thinking.

I actually just ran the following search on Google:

inurl:.xls site:gov

and uncovered a bunch of random Excel spreadsheets (such as this one: [http://www.whitehouse.gov/sites/default/files/omb/budget/fy2...](http://www.whitehouse.gov/sites/default/files/omb/budget/fy2012/assets/hist15z5.xls)). Would be slightly more complex to do but potentially this would make any published government data instantly accessible via API and (depending on what your backend looks like) you could bake in Solr or ElasticSearch to also provide search inside the data. Maybe an easy onboarding tool to let any visitor to the site specify a publicly accessible spreadsheet and then automatically create the API?

Looking forward to seeing what you do with it!

</comment></comment></comment><comment><USER10> Just going to leave this here...[https://github.com/gimite/google-spreadsheet- ruby](https://github.com/gimite/google-spreadsheet-ruby)

</comment><comment><USER11> This is really cool, and a nice implementation. My question is about target customers. Presumably, you have two sides to this: non-devs writing and uploading the spreadsheet, and devs writing a client to to consume its API. I would imagine these two parties would be in the same company. e.g., Sales team wants some analytics dashboards written over their spreadsheets. So they upload a sheet and give it the API to devs, and then the devs consume the API, analyze the data, and pull it into a dashboard. Also presumably, it would be the devs recommending to the non-devs that they upload their spreadsheet here for easy access.

But if this is the case, why would the devs choose to use this over any number of CSV or XLS parsing libraries? You can write a simple web server that takes a spreadsheet as an upload, and then parse it to CSV, in less than 50 lines of code. The CSV reading APIs in any language are very easy to use and parse to native data structures, and I would argue maybe even easier than using an API like this.

What is your value proposition to devs in this scenario? Or I missing an entirely different use case?

<comment><AUTHOR> Your two sides scenario tallies with my own, except I'd imagine they're not usually part of the same company (but other people will have different use cases, of course).

In your example, you could absolutely use an existing CSV or XLS parser to do this. The problem is that you're now responsible for making sure that you've got the latest data, have parsed it, and have imported it. As a developer, Sheetlabs allows you to put the onus back on the data publisher to ensure that they're giving you the latest data. Plus it's in an easier to consume format too!

</comment></comment><comment><USER12> Great idea. From my experience Excel is still the main data manipulation tool for many organisations (small business to large enterprise). Although it might be apparent for more technically minded users, I think an explanation about the security of the data would be beneficial for your target market.

</comment><comment><USER13> I know you're still working things out, but I feel that your free tier is overly generous and your Business tier is a steal at $20. If it assuages a pain point for someone, that pain point is likely worth quite a bit more.

</comment><comment> wc- This seems like a nice layer between some data scientists that might be used to working with csv's or some subset of databases, and a dev team that happens to be using another subset of db's. Data scientists could throw some results into a csv and front end devs could quickly pull it in as a rough version of what the actual API would look like to get started on presentation of the data. First pass mockups could be done taking minimal time away from the engineering team, iterate these with stakeholders, and finally implement the final API with the fully fleshed out front end.

</comment><comment><USER14> This is very well executed.

Combined with "jq" on command line for testing stuff, could be really useful.

[http://stedolan.github.io/jq/tutorial/](http://stedolan.github.io/jq/tutorial/)

</comment><comment><USER15> What makes this better than using the Google Docs API? I could have anyone write to a spreadsheet and in turn it would be updated when called on their API.

In fact I do that for many small business clients of mine which don't want to deal with databases for things like their product catalog and pricing lists.

Additionally you get version control, busier sites get the google doc scraped X times a minute as to not reach the request limit.

<comment><AUTHOR> For me, as the author:

\- Simplicity. It's fine for you to create an API via Google Docs, but I suspect it'd be tough for your (presumably) non-technical clients.

\- Generated API docs

\- Granular control of who sees what data and APIs

\- Usage tracking (see who's using your APIs/data and how often)

\- Easy integration for API clients: example code, no messing around with authenticating their Google account

I don't think you're wrong though: For publishers who already have their spreadsheets held in Google Docs and have setup an API, and are happy with that process, then there isn't a _huge_ benefit here.

That said, I've had quite a few emails overnight from people asking to support importing spreadsheets from Google Docs, so clearly they're missing something - I'll have to ask to find out whether it's something from my list above or something else.

<comment><USER16> Also, size limits. [https://support.google.com/drive/answer/37603?hl=en](https://support.google.com/drive/answer/37603?hl=en)

It seems as though you offer double the 100M file size limit on your free plan?

</comment></comment></comment><comment><USER17> The phrase "There's so many things that can go wrong with this" is really bothering me. I don't know why this mistake catches my attention, but it does. I probably speak that way but it should be written "There are" instead of "There is". Hopefully this sounds like creative criticism and not just bashing. I noticed that samcrawford is watching these comments.

<comment><AUTHOR> Much appreciated, I'll get that corrected.

</comment></comment><comment><USER18> Looks neat but can you add a github (or google/otheroauthprovider) login...the register page is way too daunting for me. Either that or provide an account- less mode for trying out the product before prompting signup..and even then i'd much rather not type into many fields when i can just auth with something else. Thanks again for the putting this out. look forward to playing with it :)

</comment><comment><USER19> Excel Web Services anyone? [http://office.microsoft.com/en-001/sharepoint- server-help/in...](http://office.microsoft.com/en-001/sharepoint-server- help/introduction-to-excel-services-and-excel-web-access-HA010105476.aspx)

It seems like Microsoft failed to promote the idea to a broader audience.

</comment><comment><USER20> Honestly I think you are giving away too much on the free plan. You should try removing the free plan and have pricing like:

       Hobby => $8
       Business => $29
       Enterprise => Contact

Also, where are you located, since I noticed that you spell organization as organisation. :-)

<comment><USER21> Honestly, I'd scrap everything up to $29/mth and change the pricing basis from MB and number of queries (people who use spreadsheets have no real understanding of this) to number of spreadsheets.

I remember working for Deutsche Bank 15yrs ago when one Excel spreadsheet could make them millions of £/day — don't be afraid to charge a decent amount! People who care about data, have spreadsheets, and need some interoperability will not baulk at $29, $50 or even $200/mth. And if they're giving you a decent income, they'll trust that you'll be around for longer.

Would you expect a bank (or accountant, or FMCG company) to trust a critical part of their process to a free or £12/mth service? Hell, no.

But perhaps part of the problem is that you've build a cool thing but don't know exactly who your customers should be. When you figure that out you'll be able to write more compelling copy and price it appropriately.

<comment><USER22> The only problem is that I'm almost sure that DB were making millions not thanks to the excel data _per se_ but thanks to all the logic that was running inside/behind that Excel. In this case, you can't "APIfy" it with a tool like this.

N.B. I'm not bashing sheetlabs, just saying that sometimes the most important part is not the numbers in the cell but how you create them

</comment></comment></comment><comment><USER23> Another option: use the open-source JavaScript called sheetsee to read from Google spreadsheets [https://github.com/jlord/sheetsee.js/blob/master/docs/basics...](https://github.com/jlord/sheetsee.js/blob/master/docs/basics.md)

</comment><comment><USER24> Hey, great idea. You should make the link to the example API more prominet in my opinion.

</comment><comment><USER25> Sounds like a very good idea. In some industries, Excel is still the state of the art.

</comment><comment><USER26> Neat. I'll be interested to see how access restriction by user is handled? Obscure header key or URL? Something authenticated? I guess I will have to sign up to find out. It doesn't appear to be documented publicly.

<comment><AUTHOR> There's three access levels: public (anyone can access), authenticated (anyone authenticated user in your organisation can access), and private (only selected users can access).

If an API requires authentication, then you'll need to login to see documentation or query it.

There's a little about it on [https://sheetlabs.com/#/docs](https://sheetlabs.com/#/docs) at the bottom, but you're right that the docs need to be fleshed out more fully and linked from the front page.

</comment></comment><comment><USER27> Interesting, quite neat that you can share the data between organizations in a permissioned manner. Pricing is interesting, you may want to consider a usage based model rather than flat fee.

</comment><comment><USER28> I am actually working on something similar, called [http://apifox.com](http://apifox.com) it's not yet for public but it will be soon

</comment><comment><USER29> Really cool!....Unfortunately, no business is ever going to "build APIs on top of their existing spreadsheets".

<comment><USER30> I actually think I'll be using this quite soon. I've also shown it to an excited PM, who thinks this could be useful for some clients that have been building reports from spreadsheets.

For me, I think there's a great use case for prototyping applications with a spreadsheet. I don't intend to build a service that exposes spreadsheet data as an external facing API.

</comment></comment><comment><USER31> What about [http://data.brace.io/](http://data.brace.io/)?

</comment><comment><USER32> This should target drop shipper warehouses. They send updated product lists to clients monthly.

</comment><comment><USER33> Would it be possible to include google spreadsheets as an input source?

<comment><AUTHOR> Yes, certainly. Consider it added to the todo list. It wasn't a priority for a prototype, as the users I'm targeting are generally not Google Docs users anyway (at least in my own experience).

<comment><USER33> Interesting. I thought the opposite. Anyone who deals with APIs are likely gdoc users. Like us :) Anyway, adding google docs would open up a lot of cool things, like tapping into IFTTT recipes that already output there. You are providing the glue that removes a lot of grunt work.

This is awesome, btw. Could you talk about how you came about the idea?

<comment><AUTHOR> Ah, agreed that the end-users of the APIs this builds would very likely also be Docs users. But the people who're turning their spreadsheets into APIs (i.e. the publishers) likely are not, in my experience.

Thanks for the compliment. As a developer working on a lot of systems that integrate service coverage data I'm constantly being sent spreadsheets that contain zip code / postcode level information, and I need to import this into my database or my client's databases. And normally my apps only want to lookup one or two values per day - but the third party is sending me their entire 100MB spreadsheet, as they don't have an API to publish it via. It's time consuming, error prone, and clunky. But they don't have the skill or resources to create an API, so I'm hoping something like this might remove some barriers.

<comment><USER33> Very interesting. So you may want to experiment with the messaging like "clients still doing things with excel spreadsheets?" for example, targeting developers who deal with excel dependent or decades old reporting clients. There are so many of those I'm sure.

</comment></comment></comment></comment></comment><comment><USER34> Anything open source that does any part of what Sheetlabs does?

<comment><AUTHOR> The closest thing I'm aware of is this: [https://github.com/arcturus/node- csv2api](https://github.com/arcturus/node-csv2api)

Edit: I should add that Sheetlabs uses loads of open source goodies under the hood. For converting inputs we use libreoffice for XLS to CSV and xslx2csv for XLSX files to CSV files.

</comment></comment><comment><USER35> Bad:

Missing screenshots. (Examples)

Good:

Real text, not just a video.

</comment><comment><USER36> 👍

</comment><comment><USER37> They (Ycombinator) should implement 'mark as favorite'. There are so many similar tools included in the comments that I'm writing this comment just to have a quick shortcut to find the thread in future references.

<comment><USER4> Your browser almost certainly has a bookmarks feature. If you don't like that, I use and would recommend InstaPaper.

</comment></comment><comment><USER38> This looks great. Now if you could only turn websites into a spreadsheet using [http://scrape.ly](http://scrape.ly) and then turn it into an API using Sheetlabs, that would be awesome.

<comment><USER39> Try to use [https://www.kimonolabs.com/](https://www.kimonolabs.com/), it seems that it is what you are looking for.

<comment><AUTHOR> import.io is very similar as well</comment></comment></comment>


Are professional ethicists good people? According to research, not especially - <AUTHOR> http://aeon.co/magazine/philosophy/how-often-do-ethics-professors-call-their-mothers/?

<comment><USER2> Ethicists are people who try to push the boundaries of ethics, to change them from what people generally consider them to be—they essentially by definition are the least ethical people because they don't believe in reigning ethics at all, which one could absorb awareness of without much effort, but instead believe in reinventing and establishing new, and therefore deviant, standards.</comment>